Name: series-workflowq7452 Phase: Succeeded StartedAt: 2026-07-22 15:08:25 +0000 UTC FinishedAt: 2026-07-22 20:12:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[0] Phase: Succeeded StartedAt: 2026-07-22 15:08:25 +0000 UTC FinishedAt: 2026-07-22 15:27:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 15:08:25 +0000 UTC FinishedAt: 2026-07-22 15:27:06 +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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG", "CGROUP_BPF" ], "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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG", "CGROUP_BPF" ], "series_id": "b253e49b-f04c-4e17-bbb2-c8205852f3a4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_bpf_recvmsg", "tcp_bpf_recvmsg_parser", "tcp_msg_wait_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzb2NrbWFwIFRDUCByZWNlaXZlIHBhdGggKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikgdG8gY29ycmVjdGx5IGhhbmRsZSBzb2NrZXQgcmVjZWl2ZSB0aW1lb3V0cyBhbmQgc3B1cmlvdXMgd2FrZXVwcyBieSBwYXNzaW5nIHRoZSB0aW1lb3V0IGJ5IHJlZmVyZW5jZSB0byB0Y3BfbXNnX3dhaXRfZGF0YS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHNvY2ttYXApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTBmODdjZWFiNWEwNzhhYTlhZTA3YmE5MjNlYWE3OTAwMmY3MWZjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE1OjI2OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLjE3NTVmY2Y3MjZmY2I4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLVx0XHRcdCAgICAgbG9uZyB0aW1lbylcbiYjNDM7XHRcdFx0ICAgICBsb25nICp0aW1lbylcbiB7XG4gXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuIFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKCF0aW1lbylcbiYjNDM7XHRpZiAoISp0aW1lbylcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG4gXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuLVx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXHUwMDI2dGltZW8sXG4mIzQzO1x0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sXG4gXHRcdFx0ICAgICFsaXN0X2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnKSB8fFxuIFx0XHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XG4gXHRpbnQgY29waWVkID0gMDtcbiBcdHUzMiBzZXE7XG4mIzQzO1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTI2Miw2ICYjNDM7MjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xuIFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcbkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHR9XG4gXHRzZXEgJiM0Mzs9IGNvcGllZF9mcm9tX3NlbGY7XG4gXHRpZiAoIWNvcGllZCkge1xuLVx0XHRsb25nIHRpbWVvO1xuIFx0XHRpbnQgZGF0YTtcbiBcbiBcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbkBAIC0yOTksNyAmIzQzOzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcdFx0aWYgKCF0aW1lbykge1xuIFx0XHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHRcdFx0Z290byBvdXQ7XG5AQCAtMzEwLDEzICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuJiM0MztcdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXHUwMDI2dGltZW8pO1xuIFx0XHRpZiAoZGF0YSBcdTAwM2MgMCkge1xuIFx0XHRcdGNvcGllZCA9IGRhdGE7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4gXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBvdXQ6XG5AQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB7XG4gXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIFx0aW50IGNvcGllZCwgcmV0O1xuJiM0MztcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0zNzEsMTQgJiM0MzszNzUsNTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdH1cbiBcdGxvY2tfc29jayhzayk7XG4mIzQzO1xuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4mIzQzO1x0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbiYjNDM7XHRcdFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4mIzQzO1x0XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4mIzQzO1x0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XHRcdFx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT1RDT05OO1xuJiM0MztcdFx0XHRnb3RvIGNoZWNrX3F1ZXVlcztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXRpbWVvKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuJiM0MztcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuJiM0MztcdFx0XHRnb3RvIGNoZWNrX3F1ZXVlcztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTAsNiAmIzQzOzQzMiw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuIFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdFx0fVxuJiM0MztcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gXHRyZXQgPSBjb3BpZWQ7XG5AQCAtMzk4LDYgJiM0Mzs0NDIsMTYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRyZWxlYXNlX3NvY2soc2spO1xuIFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4gXHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7Y2hlY2tfcXVldWVzOlxuJiM0MztcdGlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxuJiM0MztcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpIHtcbiYjNDM7XHRcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1x0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbiYjNDM7XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1x0Z290byB1bmxvY2s7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuaW5kZXggY2IzMjI5NzExZjkzYTMuLmFmZGE0ZDkwZTU3MzRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbkBAIC0xMzczLDYgJiM0MzsxMzczLDEzOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfbXVsdGlfY2hhbm5lbHMoaW50IHNvdHlwZSlcbiBcdHRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCAqdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gKihpbnQgKilhcmc7XG4mIzQzO1x0Y2hhciBidWZbMTAyNF07XG4mIzQzO1x0dm9pZCAqcmVzdWx0ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHRydWUpIHtcbiYjNDM7XHRcdHNzaXplX3QgbGVuID0gcmVjdmZyb20oZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDAsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsZW4gPT0gLTEpIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRyZXN1bHQgPSAodm9pZCAqKTE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghbGVuIHx8IGJ1ZltsZW4gLSAxXSA9PSAmIzM5O2UmIzM5OylcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzZW5kKGZkLCBcJiMzNDt0ZXN0XCYjMzQ7LCA0LCBNU0dfTk9TSUdOQUwpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXN1bHQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW4oYm9vbCB3aXRoX3ZlcmRpY3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nID0gTlVMTDtcbiYjNDM7XHRjaGFyICpidWYgPSBOVUxMO1xuJiM0MztcdGludCBtYXAsIGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHNlbmQuICBjb21wbGV0aW9uIG9mIHRoZSBzZW5kaW5nIGNhbiB0cmlnZ2VyIGEgc3B1cmlvdXMgd2FrZVxuJiM0MztcdCAqIHVwLiAgbGFyZ2VyIHZhbHVlcyBtYWtlIHRoZSBpc3N1ZSBtb3JlIGxpa2VseSwgYnV0IG1ha2Ugc3VjY2Vzc2Z1bCB0ZXN0IHJ1bnMgbG9uZ2VyLlxuJiM0MztcdCAqL1xuJiM0MztcdGNvbnN0IHNpemVfdCBidWZsZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIHRvIHJlcHJvZHVjZSBFQUdBSU4gb24gc3B1cmlvdXMgd2FrZSB1cC4gIG1vcmUgYXR0ZW1wdHNcbiYjNDM7XHQgKiBpbmNyZWFzZXMgdGhlIGNoYW5jZXMgb2YgdHJpZ2dlcmluZyB0aGUgaXNzdWUsIGFuZCB0aGUgdGVzdCBlbmRzIGFzIHNvb24gYXMgd2UgZG8uXG4mIzQzO1x0ICogaG93ZXZlciwgc3VjY2Vzc2Z1bCBydW5zIHdvdWxkIHRha2UgbG9uZ2VyIHRvIGNvbXBsZXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdGNvbnN0IGludCBtYXhfYXR0ZW1wdHMgPSAzMDA7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtYXAgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuc29ja19tYXBfcngpO1xuJiM0MztcbiYjNDM7XHRpZiAod2l0aF92ZXJkaWN0KSB7XG4mIzQzO1x0XHRwcm9nID0gc2tlbC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0O1xuJiM0MztcdFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfYXR0YWNoIHZlcmRpY3RcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidWYgPSBtYWxsb2MoYnVmbGVuKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoYnVmLCBcJiMzNDttYWxsb2MgYnVmXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRtZW1zZXQoYnVmLCAwLCBidWZsZW4pO1xuJiM0MztcdGJ1ZltidWZsZW4gLSAxXSA9ICYjMzk7ZSYjMzk7O1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbWF4X2F0dGVtcHRzOyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdFx0c3NpemVfdCBsZW47XG4mIzQzO1x0XHRjaGFyIGlnbm9yZWRbMTI4XTtcbiYjNDM7XHRcdHB0aHJlYWRfdCB0aHJlYWQ7XG4mIzQzO1x0XHRib29sIHRocmVhZF9jcmVhdGVkID0gZmFsc2U7XG4mIzQzO1x0XHRzaXplX3QgcmVtID0gYnVmbGVuO1xuJiM0MztcdFx0aW50IGMgPSAtMSwgcCA9IC0xLCB6ZXJvID0gMDtcbiYjNDM7XHRcdGJvb2wgc3VjY2VzcyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcdTAwMjZjLCBcdTAwMjZwKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7Y3JlYXRlX3BhaXJcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgXHUwMDI2dGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQsIFx1MDAyNnApO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4mIzQzO1x0XHR0aHJlYWRfY3JlYXRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAsIFx1MDAyNnplcm8sIFx1MDAyNmMsIEJQRl9BTlkpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfbWFwX3VwZGF0ZV9lbGVtXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAocmVtKSB7XG4mIzQzO1x0XHRcdGxlbiA9IHhzZW5kKGMsIGJ1ZiAmIzQzOyAoYnVmbGVuIC0gcmVtKSwgcmVtLCAwKTtcbiYjNDM7XHRcdFx0aWYgKGxlbiA9PSAtMSlcbiYjNDM7XHRcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuJiM0MztcdFx0XHRyZW0gLT0gbGVuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIHdlIGNhbm5vdCB1c2UgcmVjdl90aW1lb3V0KCksIG90aGVyd2lzZSBFQUdBSU4gd291bGQgYmUgYW4gZXhwZWN0ZWQgZXJybm8uICovXG4mIzQzO1x0XHRsZW4gPSByZWN2ZnJvbShjLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiB3ZSBhcmUgY2hlY2tpbmcgZm9yIHRoZSBpbnZhbGlkIHJldHVybiBvZiBFQUdBSU4sIGFueSBvdGhlciByZXR1cm4gaXMgY29uc2lkZXJlZFxuJiM0MztcdFx0ICogc3VjY2Vzc2Z1bCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGVzdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgIUFTU0VSVF9ORVEoZXJybm8sIEVBR0FJTiwgXCYjMzQ7cmVjdmZyb20gZWFnYWluXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbiYjNDM7XG4mIzQzO1x0XHRzdWNjZXNzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO2VuZF9hdHRlbXB0OlxuJiM0MztcdFx0aWYgKGMgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRjbG9zZShjKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGhyZWFkX2NyZWF0ZWQpIHtcbiYjNDM7XHRcdFx0dm9pZCAqcmV0dmFsID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHB0aHJlYWRfam9pbih0aHJlYWQsIFx1MDAyNnJldHZhbCk7XG4mIzQzO1x0XHRcdGlmICghQVNTRVJUX05VTEwocmV0dmFsLCBcJiMzNDtyZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXRocmVhZF9jcmVhdGVkIFx1MDAyNlx1MDAyNiBwIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0Y2xvc2UocCk7XG4mIzQzO1x0XHRpZiAoIXN1Y2Nlc3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0aWYgKGJ1ZilcbiYjNDM7XHRcdGZyZWUoYnVmKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgY3JlYXRlX3VwZGF0ZV9mcmVlXCYjMzQ7KSlcbkBAIC0xNDUxLDQgJiM0MzsxNTgzLDggQEAgdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgdWRwIG11bHRpIGNoYW5uZWxzXCYjMzQ7KSlcbiBcdFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfREdSQU0pO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgcmVjdmZyb20gZWFnYWluXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW4oZmFsc2UpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgcmVjdmZyb20gZWFnYWluIHdpdGggdmVyZGljdFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKHRydWUpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDt0Y3BfbXNnX3dhaXRfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgVENQIHJlY2VpdmUgcGF0aCAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKSB0byBjb3JyZWN0bHkgaGFuZGxlIHNvY2tldCByZWNlaXZlIHRpbWVvdXRzIGFuZCBzcHVyaW91cyB3YWtldXBzIGJ5IHBhc3NpbmcgdGhlIHRpbWVvdXQgYnkgcmVmZXJlbmNlIHRvIHRjcF9tc2dfd2FpdF9kYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwZjg3Y2VhYjVhMDc4YWE5YWUwN2JhOTIzZWFhNzkwMDJmNzFmYzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyMiAxNToyNjowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuYwppbmRleCBjYzBiZDczZjM2YjZkNi4uMTc1NWZjZjcyNmZjYjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTsKIAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAogc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssCi0JCQkgICAgIGxvbmcgdGltZW8pCiYjNDM7CQkJICAgICBsb25nICp0aW1lbykKIHsKIAlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCWludCByZXQgPSAwOwpAQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAogCWlmIChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOKQogCQlyZXR1cm4gMTsKIAotCWlmICghdGltZW8pCiYjNDM7CWlmICghKnRpbWVvKQogCQlyZXR1cm4gcmV0OwogCiAJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQpOwogCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7Ci0JcmV0ID0gc2tfd2FpdF9ldmVudChzaywgJmFtcDt0aW1lbywKJiM0MzsJcmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sCiAJCQkgICAgIWxpc3RfZW1wdHkoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19tc2cpIHx8CiAJCQkgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSwgJmFtcDt3YWl0KTsKIAlza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJaW50IGNvcGllZF9mcm9tX3NlbGYgPSAwOwogCWludCBjb3BpZWQgPSAwOwogCXUzMiBzZXE7CiYjNDM7CWxvbmcgdGltZW87CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgTVNHX0VSUlFVRVVFKSkKIAkJcmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pOwpAQCAtMjYyLDYgJiM0MzsyNjMsOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQl9CiAJfQogCiYjNDM7CXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKJiM0MzsKIG1zZ19ieXRlc19yZWFkeToKIAljb3BpZWQgPSBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCAmYW1wO2NvcGllZF9mcm9tX3NlbGYpOwogCS8qIFRoZSB0eXBpY2FsIGNhc2UgZm9yIEVGQVVMVCBpcyB0aGUgc29ja2V0IHdhcyBncmFjZWZ1bGx5CkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJfQogCXNlcSAmIzQzOz0gY29waWVkX2Zyb21fc2VsZjsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAogCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQpAQCAtMjk5LDcgJiM0MzszMDEsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiAJCWlmICghdGltZW8pIHsKIAkJCWNvcGllZCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKQEAgLTMxMCwxMyAmIzQzOzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQljb3BpZWQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJaWYgKGRhdGEgJmFtcDsmYW1wOyAhc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKQogCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQlpZiAoIWRhdGEgJmFtcDsmYW1wOyB0aW1lbyAmZ3Q7IDApCiYjNDM7CQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiAJCWNvcGllZCA9IC1FQUdBSU47CiAJfQogb3V0OgpAQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIHsKIAlzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrOwogCWludCBjb3BpZWQsIHJldDsKJiM0MzsJbG9uZyB0aW1lbzsKIAogCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyBNU0dfRVJSUVVFVUUpKQogCQlyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7CkBAIC0zNzEsMTQgJiM0MzszNzUsNTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKIAl9CiAJbG9ja19zb2NrKHNrKTsKJiM0MzsKJiM0MzsJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwomIzQzOwogbXNnX2J5dGVzX3JlYWR5OgogCWNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7Ci0JCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTsKJiM0MzsJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gY2hlY2tfcXVldWVzOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSkKJiM0MzsJCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSkpIHsKJiM0MzsJCQkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiYjNDM7CQkJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0ID0gc29ja19lcnJvcihzayk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgewomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQkJZ290byBjaGVja19xdWV1ZXM7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9DTE9TRSkgewomIzQzOwkJCXJldCA9IC1FTk9UQ09OTjsKJiM0MzsJCQlnb3RvIGNoZWNrX3F1ZXVlczsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghdGltZW8pIHsKJiM0MzsJCQlyZXQgPSAtRUFHQUlOOwomIzQzOwkJCWdvdG8gY2hlY2tfcXVldWVzOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJcmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTsKJiM0MzsJCQlnb3RvIGNoZWNrX3F1ZXVlczsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssICZhbXA7dGltZW8pOwogCQlpZiAoZGF0YSAmbHQ7IDApIHsKIAkJCXJldCA9IGRhdGE7CiAJCQlnb3RvIHVubG9jazsKQEAgLTM5MCw2ICYjNDM7NDMyLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCQlza19wc29ja19wdXQoc2ssIHBzb2NrKTsKIAkJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKIAkJfQomIzQzOwkJaWYgKCFkYXRhICZhbXA7JmFtcDsgdGltZW8gJmd0OyAwKQomIzQzOwkJCWdvdG8gbXNnX2J5dGVzX3JlYWR5OwogCQljb3BpZWQgPSAtRUFHQUlOOwogCX0KIAlyZXQgPSBjb3BpZWQ7CkBAIC0zOTgsNiAmIzQzOzQ0MiwxNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAlyZWxlYXNlX3NvY2soc2spOwogCXNrX3Bzb2NrX3B1dChzaywgcHNvY2spOwogCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7Y2hlY2tfcXVldWVzOgomIzQzOwlpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSkKJiM0MzsJCWdvdG8gbXNnX2J5dGVzX3JlYWR5OwomIzQzOwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkgewomIzQzOwkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCXNrX3Bzb2NrX3B1dChzaywgcHNvY2spOwomIzQzOwkJcmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpOwomIzQzOwl9CiYjNDM7CWdvdG8gdW5sb2NrOwogfQogCiBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwppbmRleCBjYjMyMjk3MTFmOTNhMy4uYWZkYTRkOTBlNTczNGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMKQEAgLTEzNzMsNiAmIzQzOzEzNzMsMTM4IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhpbnQgc290eXBlKQogCXRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX2Rlc3Ryb3koc2tlbCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCAqdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJaW50IGZkID0gKihpbnQgKilhcmc7CiYjNDM7CWNoYXIgYnVmWzEwMjRdOwomIzQzOwl2b2lkICpyZXN1bHQgPSBOVUxMOwomIzQzOwomIzQzOwl3aGlsZSAodHJ1ZSkgewomIzQzOwkJc3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CQlpZiAobGVuID09IC0xKSB7CiYjNDM7CQkJaWYgKGVycm5vID09IEVJTlRSKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlyZXN1bHQgPSAodm9pZCAqKTE7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWxlbiB8fCBidWZbbGVuIC0gMV0gPT0gJiMzOTtlJiMzOTspCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VuZChmZCwgJiMzNDt0ZXN0JiMzNDssIDQsIE1TR19OT1NJR05BTCk7CiYjNDM7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlc3VsdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbihib29sIHdpdGhfdmVyZGljdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nICpza2VsID0gTlVMTDsKJiM0MzsJc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nID0gTlVMTDsKJiM0MzsJY2hhciAqYnVmID0gTlVMTDsKJiM0MzsJaW50IG1hcCwgZXJyOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHNlbmQuICBjb21wbGV0aW9uIG9mIHRoZSBzZW5kaW5nIGNhbiB0cmlnZ2VyIGEgc3B1cmlvdXMgd2FrZQomIzQzOwkgKiB1cC4gIGxhcmdlciB2YWx1ZXMgbWFrZSB0aGUgaXNzdWUgbW9yZSBsaWtlbHksIGJ1dCBtYWtlIHN1Y2Nlc3NmdWwgdGVzdCBydW5zIGxvbmdlci4KJiM0MzsJICovCiYjNDM7CWNvbnN0IHNpemVfdCBidWZsZW4gPSAxMDI0ICogMTAyNCAqIDI1OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyB0byByZXByb2R1Y2UgRUFHQUlOIG9uIHNwdXJpb3VzIHdha2UgdXAuICBtb3JlIGF0dGVtcHRzCiYjNDM7CSAqIGluY3JlYXNlcyB0aGUgY2hhbmNlcyBvZiB0cmlnZ2VyaW5nIHRoZSBpc3N1ZSwgYW5kIHRoZSB0ZXN0IGVuZHMgYXMgc29vbiBhcyB3ZSBkby4KJiM0MzsJICogaG93ZXZlciwgc3VjY2Vzc2Z1bCBydW5zIHdvdWxkIHRha2UgbG9uZ2VyIHRvIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJY29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDMwMDsKJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWFwID0gYnBmX21hcF9fZmQoc2tlbC0mZ3Q7bWFwcy5zb2NrX21hcF9yeCk7CiYjNDM7CiYjNDM7CWlmICh3aXRoX3ZlcmRpY3QpIHsKJiM0MzsJCXByb2cgPSBza2VsLSZndDtwcm9ncy5wcm9nX3NrYl92ZXJkaWN0OwomIzQzOwkJZXJyID0gYnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDticGZfcHJvZ19hdHRhY2ggdmVyZGljdCYjMzQ7KSkKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVmID0gbWFsbG9jKGJ1Zmxlbik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihidWYsICYjMzQ7bWFsbG9jIGJ1ZiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWVtc2V0KGJ1ZiwgMCwgYnVmbGVuKTsKJiM0MzsJYnVmW2J1ZmxlbiAtIDFdID0gJiMzOTtlJiMzOTs7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgbWF4X2F0dGVtcHRzOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJc3NpemVfdCBsZW47CiYjNDM7CQljaGFyIGlnbm9yZWRbMTI4XTsKJiM0MzsJCXB0aHJlYWRfdCB0aHJlYWQ7CiYjNDM7CQlib29sIHRocmVhZF9jcmVhdGVkID0gZmFsc2U7CiYjNDM7CQlzaXplX3QgcmVtID0gYnVmbGVuOwomIzQzOwkJaW50IGMgPSAtMSwgcCA9IC0xLCB6ZXJvID0gMDsKJiM0MzsJCWJvb2wgc3VjY2VzcyA9IGZhbHNlOwomIzQzOwomIzQzOwkJZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sICZhbXA7YywgJmFtcDtwKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtjcmVhdGVfcGFpciYjMzQ7KSkKJiM0MzsJCQlnb3RvIGVuZF9hdHRlbXB0OwomIzQzOwomIzQzOwkJZXJyID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsICZhbXA7dGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQsICZhbXA7cCk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7cHRocmVhZF9jcmVhdGUmIzM0OykpCiYjNDM7CQkJZ290byBlbmRfYXR0ZW1wdDsKJiM0MzsJCXRocmVhZF9jcmVhdGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCAmYW1wO3plcm8sICZhbXA7YywgQlBGX0FOWSk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX21hcF91cGRhdGVfZWxlbSYjMzQ7KSkKJiM0MzsJCQlnb3RvIGVuZF9hdHRlbXB0OwomIzQzOwomIzQzOwkJd2hpbGUgKHJlbSkgewomIzQzOwkJCWxlbiA9IHhzZW5kKGMsIGJ1ZiAmIzQzOyAoYnVmbGVuIC0gcmVtKSwgcmVtLCAwKTsKJiM0MzsJCQlpZiAobGVuID09IC0xKQomIzQzOwkJCQlnb3RvIGVuZF9hdHRlbXB0OwomIzQzOwkJCXJlbSAtPSBsZW47CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiB3ZSBjYW5ub3QgdXNlIHJlY3ZfdGltZW91dCgpLCBvdGhlcndpc2UgRUFHQUlOIHdvdWxkIGJlIGFuIGV4cGVjdGVkIGVycm5vLiAqLwomIzQzOwkJbGVuID0gcmVjdmZyb20oYywgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiB3ZSBhcmUgY2hlY2tpbmcgZm9yIHRoZSBpbnZhbGlkIHJldHVybiBvZiBFQUdBSU4sIGFueSBvdGhlciByZXR1cm4gaXMgY29uc2lkZXJlZAomIzQzOwkJICogc3VjY2Vzc2Z1bCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGVzdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGxlbiAmbHQ7IDAgJmFtcDsmYW1wOyAhQVNTRVJUX05FUShlcnJubywgRUFHQUlOLCAmIzM0O3JlY3Zmcm9tIGVhZ2FpbiYjMzQ7KSkKJiM0MzsJCQlnb3RvIGVuZF9hdHRlbXB0OwomIzQzOwomIzQzOwkJc3VjY2VzcyA9IHRydWU7CiYjNDM7CiYjNDM7ZW5kX2F0dGVtcHQ6CiYjNDM7CQlpZiAoYyAmZ3Q7PSAwKQomIzQzOwkJCWNsb3NlKGMpOwomIzQzOwomIzQzOwkJaWYgKHRocmVhZF9jcmVhdGVkKSB7CiYjNDM7CQkJdm9pZCAqcmV0dmFsID0gTlVMTDsKJiM0MzsKJiM0MzsJCQlwdGhyZWFkX2pvaW4odGhyZWFkLCAmYW1wO3JldHZhbCk7CiYjNDM7CQkJaWYgKCFBU1NFUlRfTlVMTChyZXR2YWwsICYjMzQ7cmV0dmFsJiMzNDspKQomIzQzOwkJCQlzdWNjZXNzID0gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXRocmVhZF9jcmVhdGVkICZhbXA7JmFtcDsgcCAmZ3Q7PSAwKQomIzQzOwkJCWNsb3NlKHApOwomIzQzOwkJaWYgKCFzdWNjZXNzKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGJ1ZikKJiM0MzsJCWZyZWUoYnVmKTsKJiM0MzsKJiM0MzsJdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKQogewogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCBjcmVhdGVfdXBkYXRlX2ZyZWUmIzM0OykpCkBAIC0xNDUxLDQgJiM0MzsxNTgzLDggQEAgdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZCkKIAkJdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfU1RSRUFNKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgdWRwIG11bHRpIGNoYW5uZWxzJiMzNDspKQogCQl0ZXN0X3NvY2ttYXBfbXVsdGlfY2hhbm5lbHMoU09DS19ER1JBTSk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCByZWN2ZnJvbSBlYWdhaW4mIzM0OykpCiYjNDM7CQl0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKGZhbHNlKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHJlY3Zmcm9tIGVhZ2FpbiB3aXRoIHZlcmRpY3QmIzM0OykpCiYjNDM7CQl0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKHRydWUpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgU29ja21hcCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgdHdlYWtzIHRvIHRoZSBCUEYgc29ja21hcCBjb2RlIHNwZWNpZmljYWxseSBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYC4gU2VlbXMgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgdGltZW91dHMgaW4gVENQLCBhbmQgaXQgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBgdGNwX21zZ193YWl0X2RhdGFgIGlzIHRoZSBjb3JlIG9mIGl0LiBUaGV5JiMzOTtyZSB1cGRhdGluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYSBgbG9uZyAqdGltZW9gIGluc3RlYWQgb2YganVzdCBgbG9uZyB0aW1lb2AsIHdoaWNoIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBwb2ludGVyLWJhc2VkIHRpbWVvdXQgbWVjaGFuaXNtLgoKRnJvbSB0aGUgZGVzY3JpcHRpb24sIHRoZSBwYXRjaCB0aGVuIGFkanVzdHMgdGhlIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AgZnVuY3Rpb25zIHRvIGNvcnJlY3RseSB1c2UgdGhpcyBuZXcgdGltZW91dCBwYXJhbWV0ZXIuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIHByZXZlbnQgc3B1cmlvdXMgYC1FQUdBSU5gIHJldHVybnMsIHdoaWNoIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgaW5jb3JyZWN0IHRpbWVvdXQgaGFuZGxpbmcgb3IgcmFjZSBjb25kaXRpb25zLiBUaGlzIGlzIGdvb2QgdG8gc2VlOyB0aGF0JiMzOTtzIGEgY29tbW9uIGFyZWEgZm9yIEJQRiBwcm9ncmFtcyB0byBtaXNiZWhhdmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIHNvY2tldCBsYXllci4KClNvLCB0aGlzIGlzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gVENQIHNvY2tldCBCUEYsIGltcGFjdGluZyBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZXNlIGZ1bmN0aW9ucyBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IuIFRpbWUgdG8gcHVsbCB1cCBteSB0cnVzdHkgZ3JlcCBhbmQgc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgaW1wYWN0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIHNvbWUgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIEJQRiBwcm9ncmFtcyB0aGF0IHJlbHkgb24gdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIwLVxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMi1cdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0zMzg9c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0zNTUtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzU2OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L2lwdjQvdGNwX2JwZi5jLTM1Ny1cdFx0XHQgICBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY3Nz1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODItXHRwcm90W1RDUF9CUEZfQkFTRV0uY2xvc2VcdFx0PSBzb2NrX21hcF9jbG9zZTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2ODM6XHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZztcbm5ldC9pcHY0L3RjcF9icGYuYy02ODQtXHRwcm90W1RDUF9CUEZfQkFTRV0uc29ja19pc19yZWFkYWJsZVx0PSBza19tc2dfaXNfcmVhZGFibGU7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY5MC1cdHByb3RbVENQX0JQRl9SWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2OTE6XHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY5Mi1cbm5ldC9pcHY0L3RjcF9icGYuYy02OTMtXHRwcm90W1RDUF9CUEZfVFhSWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9UWF07XG5uZXQvaXB2NC90Y3BfYnBmLmM6Njk0Olx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY5NS19XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTcyNz1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUwLVx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxubmV0L2lwdjQvdGNwX2JwZi5jOjc1MTpcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUyLVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgcmVjdm1zZyBIYW5kbGVycyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIHRoZSBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBgcmVjdm1zZ2AgaGFuZGxlcnMgZm9yIGBUQ1BfQlBGX0JBU0VgLCBgVENQX0JQRl9SWGAsIGFuZCBgVENQX0JQRl9UWFJYYCBjb25maWd1cmF0aW9ucy4gTWFrZXMgc2Vuc2U7IHRoaXMgaXMgdGhlIHdheSB0byBwbHVtYiBCUEYgaW50byB0aGUgVENQIHJlY2VpdmUgcGF0aC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgcGF0aCwgcmVhY2hhYmxlIHZpYSBzb2NrbWFwL0JQRiwgc28gdGhhdCBpcyBmdW5jdGlvbmFsLiBJbnRlcmVzdGluZyB0aGF0IHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIHRvIGB0Y3BfbXNnX3dhaXRfZGF0YWAgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IGFuZCBzZWUgaG93IHRoZSB3YWl0IGZ1bmN0aW9uIGlzIGluZmx1ZW5jZWQuCgpOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVxdWlyZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IGFjdGl2ZSBpbiB0aGUga2VybmVsLiBUaGUgY29kZSBpdHNlbGYsIGBuZXQvaXB2NC90Y3BfYnBmLmNgLCBjb25maXJtcyBteSBzdXNwaWNpb24gYWJvdXQgdGhlIGxvY2F0aW9uLiBUaW1lIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICYjNDM7PSB0Y3BfaWxsaW5vaXMub1xubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMgY29kZSBzbmlwcGV0OgoKKipEZWJ1Z2dpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIHNlZSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19ORVRfU09DS19NU0dgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBodXJkbGUuIEFuZCB0aGVuLCB0aGVyZSYjMzk7cyB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrIHdpdGggYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGd1YXJkaW5nIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIFRoYXQgc3VnZ2VzdHMgc29tZSBCUEYgaW50ZWdyYXRpb24gaGVyZSwgYW5kIGxpa2VseSwgYSBkZXBlbmRlbmN5IG9uIHRoZSBCUEYgc3lzY2FsbCBmZWF0dXJlLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBpbmRlZWQgZGVmaW5lZCB0aGVyZSwgYW5kIGNvbmZpcm0gaG93IGl0IGludGVyYWN0cyB3aXRoIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgVENQIG1lc3NhZ2Ugd2FpdGluZyBhbmQgdGhlIEJQRiBpbnRlZ3JhdGlvbiB0byBkZXRlcm1pbmUgaWYgSSBuZWVkIHRvIGVuYWJsZSB0aGlzIGNvbmZpZywgYW5kIGlmIHRoaXMgaXMgYSBmZWF0dXJlIEkmIzM5O20gZXZlbiBpbnRlcmVzdGVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MTc4PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxubmV0L2lwdjQvdGNwX2JwZi5jOjE4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTgxLXN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz04MDY9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy04MTItfVxubmV0L2lwdjQvdGNwX2JwZi5jOjgxMzojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAtIEJQRiBhbmQgTmV0d29yayBNZXNzYWdpbmcqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCB0aGVzZSBjb25maWd1cmF0aW9ucyBzdHJhaWdodC4gSSBrbm93IHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBwcmVyZXF1aXNpdGUsIHRoYXQmIzM5O3MgYSBnaXZlbi4gQW5kIEkmIzM5O20gYWxzbyBzZWVpbmcgdGhhdCBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgcmVxdWlyZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZW0uIElzIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCByZWxpYW50IG9uIGFub3RoZXIsIHBvdGVudGlhbGx5IG9ic2N1cmUgc2V0dGluZz8gT3IgcGVyaGFwcyBzb21ldGhpbmcgaGlnaGVyIHVwIHRoZSBjaGFpbiBpcyAqc2VsZWN0aW5nKiBpdD8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSBJIGZ1bGx5IGdyYXNwIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSBiZWhhdmlvciBJIG5lZWQgZnJvbSB0aGUga2VybmVsISBJJiMzOTtsbCBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHRyYWNlIHRoaXMgb3V0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBzYXkuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuLS1cbm5ldC9LY29uZmlnLTM2Ni1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZzozNjc6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy0zNjgtXHRoZWxwXG4tLVxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXG4tLVxubmV0L0tjb25maWctNDc4LVxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTQ4MC1cdGJvb2xcbi0tXG5uZXQvS2NvbmZpZy00ODItXHRoZWxwXG5uZXQvS2NvbmZpZzo0ODM6XHQgIFRoZSBORVRfU09DS19NU0cgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHBsYWluIHNvY2tldHMgKGUuZy4gVENQKSBvclxubmV0L0tjb25maWctNDg0LVx0ICBVTFBzICh1cHBlciBsYXllciBtb2R1bGVzLCBlLmcuIFRMUykgdG8gcHJvY2VzcyBMNyBhcHBsaWNhdGlvbiBkYXRhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIEZsb3c6IE5FVF9TT0NLX01TRyBhbmQgUmVsYXRlZCBDb21wb25lbnRzKioKCk9rYXksIHNvIEkgc2VlIGBORVRfU09DS19NU0dgIGlzIGZsYWdnZWQgYXMgYSBrZXkgaXRlbSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXQgYXBwZWFycyBgQlBGX1NUUkVBTV9QQVJTRVJgIGFuZCBgVExTYCBhcmUgcmVzcG9uc2libGUgZm9yIHNlbGVjdGluZyBvciBpbnRlcmFjdGluZyB3aXRoIHRoaXMgbWVzc2FnZSB0eXBlLiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgY2hlY2sgb2YgYEJQRl9TVFJFQU1fUEFSU0VSYCBhbmQgYEJQRl9TWVNDQUxMYCwgYmVjYXVzZSB0aG9zZSBhcmUgdGhlIGNvcmUgY29tcG9uZW50cyBpbnZvbHZlZCBpbiBob3cgaXQgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJzZXIgZnVuY3Rpb25zIGluIHJlbGF0aW9uIHRvIHN5c2NhbGwgcHJvY2Vzc2luZy4gVGhpcyBwcm9iYWJseSBib2lscyBkb3duIHRvIGEgZmV3IGNvcmUgcXVlc3Rpb25zOiBIb3cgZG9lcyB0aGUgcGFyc2VyIGlkZW50aWZ5IGBORVRfU09DS19NU0dgPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIGl0JiMzOTtzIGluY29ycmVjdCBvciBieXBhc3NlZD8gV2hhdCBhcmUgdGhlIGxpbWl0cyBvZiB0aGUgcGFyc2VyIHJlbGF0aXZlIHRvIHRoZSBzeXN0ZW0gY2FsbHM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJQRiBTdHJlYW1pbmcgYW5kIENncm91cCBCUEYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBsZXZlcmFnaW5nIGBCUEZfU1RSRUFNX1BBUlNFUmAg4oCTIHRoYXQgc2VlbXMgbGlrZSBhIHByb21pc2luZyBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdhaXQsIGlzbiYjMzk7dCBgQ0dST1VQX0JQRmAgYWxzbyBpbnRpbWF0ZWx5IGNvbm5lY3RlZCB0byB0aGUgQlBGIGxhbmRzY2FwZT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBoZXJlLiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIHRoZSBiZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gYG5ldC9LY29uZmlnYCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJQRl9TVFJFQU1fUEFSU0VSYC4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCBvdGhlciBvcHRpb25zIG9yIGZlYXR1cmVzIG5lZWQgdG8gYmUgaW4gcGxhY2UgdG8gZWZmZWN0aXZlbHkgdXNlIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgaW1wbGljYXRpb25zIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjA6XHRcbiAzNjE6XHRjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbiAzNjI6XHRcdGJvb2wgXCYjMzQ7ZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXCYjMzQ7XG4gMzYzOlx0XHRkZXBlbmRzIG9uIElORVRcbiAzNjQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAzNjU6XHRcdGRlcGVuZHMgb24gQ0dST1VQX0JQRlxuIDM2NjpcdFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbiAzNjc6XHRcdHNlbGVjdCBORVRfU09DS19NU0dcbiAzNjg6XHRcdGhlbHBcbiAzNjk6XHRcdCAgRW5hYmxpbmcgdGhpcyBhbGxvd3MgYSBUQ1Agc3RyZWFtIHBhcnNlciB0byBiZSB1c2VkIHdpdGhcbiAzNzA6XHRcdCAgQlBGX01BUF9UWVBFX1NPQ0tNQVAuXG4gMzcxOlx0XG4gMzcyOlx0Y29uZmlnIE5FVF9GTE9XX0xJTUlUXG4gMzczOlx0XHRib29sIFwmIzM0O05ldCBmbG93IGxpbWl0XCYjMzQ7XG4gMzc0Olx0XHRkZXBlbmRzIG9uIFJQU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDM0CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDkzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgU29ja21hcCBSZWNlaXZlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgQlBGIHN0cmVhbSBwYXJzZXIgZnVuY3Rpb25hbGl0eSwgYW5kIHRoYXQgaGluZ2VzIG9uIGBJTkVUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBDR1JPVVBfQlBGYC4gSSYjMzk7bGwgYmUgc3VyZSB0byBlbmFibGUgdGhvc2UsIGFsb25nIHdpdGggYEJQRl9TVFJFQU1fUEFSU0VSYCBhbmQgYE5FVF9TT0NLX01TR2AuCgpUaGUgY29kZSBtb2RpZmllcyBgdGNwX21zZ193YWl0X2RhdGFgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gSSYjMzk7bGwgZGVmaW5pdGVseSBhZGQgYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCB0byBgRm9jdXNTeW1ib2xzYC4gRXZlbiB0aG91Z2ggYHRjcF9tc2dfd2FpdF9kYXRhYCBpcyBzdGF0aWMsIEkmIzM5O2xsIGluY2x1ZGUgaXQgdG9vIHRvIGJlIHNhZmUuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MuIEFoYSwgdGhlIHRlc3QgdXNlcyBgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVGAuIFRoYXQgc2NyZWFtcyBzb2NrbWFwLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgd2hpY2ggYXJlIGNyaXRpY2FsIGZvciBzb2NrbWFwIFRDUCByZWNlaXZlLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZXhhbWluaW5nLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb25zLiBMb29rcyBsaWtlIHRob3NlIGFyZSB0aGUgb25seSB0aHJlZSBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBhY3R1YWwgY2hhbmdlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9tc2dfd2FpdF9kYXRhYCB0byB0YWtlIHRoZSB0aW1lb3V0IGFzIGEgcG9pbnRlciwgbm90IGEgdmFsdWUuIEl0IHNlZW1zIHRoYXQgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSB0aW1lb3V0IHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IHVwZGF0ZWQgaW4gdGhlIGNhbGxlciBpZiB0aGUgY2FsbCB0byBgc2tfd2FpdF9ldmVudGAgd29rZSB1cCBzcHVyaW91c2x5LiBJdCBsb29rcyBsaWtlIGB0Y3BfYnBmX3JlY3Ztc2dgIGhhcyBhIGBtc2dfYnl0ZXNfcmVhZHlgIGxhYmVsLCBzbyBpZiBgdGNwX21zZ193YWl0X2RhdGFgIHdva2UgdXAgYnV0IG5vIGRhdGEgYXJyaXZlZCwgdGhlbiB0aGUgY29kZSB3aWxsIGNoZWNrIGB0aW1lbyAmZ3Q7IDBgIGFuZCByZXRyeS4gQmFzaWNhbGx5LCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gd291bGQga2VlcCByZXR1cm5pbmcgYC1FQUdBSU5gIG9yIGxvb3AgZW5kbGVzc2x5IGluIHRoZSBjYXNlIG9mIGEgc3B1cmlvdXMgd2FrZXVwLiBCeSBwYXNzaW5nIHRoZSB0aW1lb3V0IGJ5IHJlZmVyZW5jZSwgYHRjcF9icGZfcmVjdm1zZ2AgY2FuIGNvcnJlY3RseSByZXRyeS4KClRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGVyZWZvcmUsIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLgoKU28sIHRoZSBjb25maWdzIEkgbmVlZDoKKiAgIGBCUEZfU1lTQ0FMTGAKKiAgIGBCUEZfU1RSRUFNX1BBUlNFUmAKKiAgIGBORVRfU09DS19NU0dgCiogICBgQ0dST1VQX0JQRmAKCk15IGBGb2N1c1N5bWJvbHNgOgoqICAgYHRjcF9icGZfcmVjdm1zZ2AKKiAgIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYAoqICAgYHRjcF9tc2dfd2FpdF9kYXRhYAoKVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB0aGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiBzb2NrbWFwIFRDUCByZWNlaXZlIHBhdGggKGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmApIHRvIGNvcnJlY3RseSBoYW5kbGUgc29ja2V0IHJlY2VpdmUgdGltZW91dHMgYW5kIHNwdXJpb3VzIHdha2V1cHMgYnkgcGFzc2luZyB0aGUgdGltZW91dCBieSByZWZlcmVuY2UgdG8gYHRjcF9tc2dfd2FpdF9kYXRhYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldC4KCkV2ZW4gdGhvdWdoIGB0Y3BfbXNnX3dhaXRfZGF0YWAgaXMgc3RhdGljLCBJJiMzOTtsbCBpbmNsdWRlIGl0LiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LCBldmVuIGlmIGl0IG1pZ2h0IGJlIGlubGluZWQuCgpOb3cgSSYjMzk7bGwgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDt0Y3BfbXNnX3dhaXRfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgVENQIHJlY2VpdmUgcGF0aCAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKSB0byBjb3JyZWN0bHkgaGFuZGxlIHNvY2tldCByZWNlaXZlIHRpbWVvdXRzIGFuZCBzcHVyaW91cyB3YWtldXBzIGJ5IHBhc3NpbmcgdGhlIHRpbWVvdXQgYnkgcmVmZXJlbmNlIHRvIHRjcF9tc2dfd2FpdF9kYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzb2NrbWFwIFRDUCByZWNlaXZlIHBhdGggKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikgdG8gY29ycmVjdGx5IGhhbmRsZSBzb2NrZXQgcmVjZWl2ZSB0aW1lb3V0cyBhbmQgc3B1cmlvdXMgd2FrZXVwcyBieSBwYXNzaW5nIHRoZSB0aW1lb3V0IGJ5IHJlZmVyZW5jZSB0byB0Y3BfbXNnX3dhaXRfZGF0YS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHNvY2ttYXApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6MTAuMjkyOTk4OTU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NzQzNDIyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gICAgXCJORVRfU09DS19NU0dcIixcbiAgICBcIkNHUk9VUF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzb2NrbWFwIFRDUCByZWNlaXZlIHBhdGggKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikgdG8gY29ycmVjdGx5IGhhbmRsZSBzb2NrZXQgcmVjZWl2ZSB0aW1lb3V0cyBhbmQgc3B1cmlvdXMgd2FrZXVwcyBieSBwYXNzaW5nIHRoZSB0aW1lb3V0IGJ5IHJlZmVyZW5jZSB0byB0Y3BfbXNnX3dhaXRfZGF0YS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHNvY2ttYXApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjoxMC4yOTMwMDQ0MDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODU5NzU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUwZjg3Y2VhYjVhMDc4YWE5YWUwN2JhOTIzZWFhNzkwMDJmNzFmYzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTU6MjY6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXFxuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLjE3NTVmY2Y3MjZmY2I4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xcbkBAIC0xNzksNyArMTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4gc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLVxcdFxcdFxcdCAgICAgbG9uZyB0aW1lbylcXG4rXFx0XFx0XFx0ICAgICBsb25nICp0aW1lbylcXG4ge1xcbiBcXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG5AQCAtMTg3LDEyICsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuIFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG4tXFx0aWYgKCF0aW1lbylcXG4rXFx0aWYgKCEqdGltZW8pXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksIFxcdTAwMjZ3YWl0KTtcXG4gXFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcXG4tXFx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXFx1MDAyNnRpbWVvLFxcbitcXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCB0aW1lbyxcXG4gXFx0XFx0XFx0ICAgICFsaXN0X2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19tc2cpIHx8XFxuIFxcdFxcdFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSksIFxcdTAwMjZ3YWl0KTtcXG4gXFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xcbkBAIC0yMjksNiArMjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0aW50IGNvcGllZF9mcm9tX3NlbGYgPSAwO1xcbiBcXHRpbnQgY29waWVkID0gMDtcXG4gXFx0dTMyIHNlcTtcXG4rXFx0bG9uZyB0aW1lbztcXG4gXFxuIFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuIFxcdFxcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcXG5AQCAtMjYyLDYgKzI2Myw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuK1xcbiBtc2dfYnl0ZXNfcmVhZHk6XFxuIFxcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFxcdTAwMjZjb3BpZWRfZnJvbV9zZWxmKTtcXG4gXFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcXG5AQCAtMjgwLDcgKzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdH1cXG4gXFx0c2VxICs9IGNvcGllZF9mcm9tX3NlbGY7XFxuIFxcdGlmICghY29waWVkKSB7XFxuLVxcdFxcdGxvbmcgdGltZW87XFxuIFxcdFxcdGludCBkYXRhO1xcbiBcXG4gXFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG5AQCAtMjk5LDcgKzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4gXFx0XFx0aWYgKCF0aW1lbykge1xcbiBcXHRcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG5AQCAtMzEwLDEzICszMTEsMTUgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcXG4rXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXFx1MDAyNnRpbWVvKTtcXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdGNvcGllZCA9IGRhdGE7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChkYXRhIFxcdTAwMjZcXHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXFxuIFxcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbitcXHRcXHRpZiAoIWRhdGEgXFx1MDAyNlxcdTAwMjYgdGltZW8gXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcXG4gXFx0XFx0Y29waWVkID0gLUVBR0FJTjtcXG4gXFx0fVxcbiBvdXQ6XFxuQEAgLTM1NSw2ICszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbiBcXHRpbnQgY29waWVkLCByZXQ7XFxuK1xcdGxvbmcgdGltZW87XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxcbiBcXHRcXHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XFxuQEAgLTM3MSwxNCArMzc1LDUyIEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiBcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdH1cXG4gXFx0bG9ja19zb2NrKHNrKTtcXG4rXFxuK1xcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbitcXG4gbXNnX2J5dGVzX3JlYWR5OlxcbiBcXHRjb3BpZWQgPSBza19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdGlmICghY29waWVkKSB7XFxuLVxcdFxcdGxvbmcgdGltZW87XFxuIFxcdFxcdGludCBkYXRhO1xcbiBcXG4tXFx0XFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuLVxcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcXG4rXFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkge1xcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHRnb3RvIGNoZWNrX3F1ZXVlcztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19lcnIpIHtcXG4rXFx0XFx0XFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXFxuK1xcdFxcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbitcXHRcXHRcXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XFxuK1xcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdFxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0ID0gc29ja19lcnJvcihzayk7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gY2hlY2tfcXVldWVzO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PVENPTk47XFxuK1xcdFxcdFxcdGdvdG8gY2hlY2tfcXVldWVzO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIXRpbWVvKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuK1xcdFxcdFxcdGdvdG8gY2hlY2tfcXVldWVzO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcXG4rXFx0XFx0XFx0Z290byBjaGVja19xdWV1ZXM7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIFxcdTAwMjZ0aW1lbyk7XFxuIFxcdFxcdGlmIChkYXRhIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRyZXQgPSBkYXRhO1xcbiBcXHRcXHRcXHRnb3RvIHVubG9jaztcXG5AQCAtMzkwLDYgKzQzMiw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiBcXHRcXHRcXHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmICghZGF0YSBcXHUwMDI2XFx1MDAyNiB0aW1lbyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbiBcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcdHJldCA9IGNvcGllZDtcXG5AQCAtMzk4LDYgKzQ0MiwxNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gXFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XFxuIFxcdHJldHVybiByZXQ7XFxuK1xcbitjaGVja19xdWV1ZXM6XFxuK1xcdGlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxcbitcXHRcXHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcXG4rXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSkge1xcbitcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXHRcXHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcXG4rXFx0XFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xcbitcXHR9XFxuK1xcdGdvdG8gdW5sb2NrO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXFxuaW5kZXggY2IzMjI5NzExZjkzYTMuLmFmZGE0ZDkwZTU3MzRhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xcbkBAIC0xMzczLDYgKzEzNzMsMTM4IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhpbnQgc290eXBlKVxcbiBcXHR0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCAqdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQodm9pZCAqYXJnKVxcbit7XFxuK1xcdGludCBmZCA9ICooaW50ICopYXJnO1xcbitcXHRjaGFyIGJ1ZlsxMDI0XTtcXG4rXFx0dm9pZCAqcmVzdWx0ID0gTlVMTDtcXG4rXFxuK1xcdHdoaWxlICh0cnVlKSB7XFxuK1xcdFxcdHNzaXplX3QgbGVuID0gcmVjdmZyb20oZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDAsIE5VTEwsIE5VTEwpO1xcbitcXG4rXFx0XFx0aWYgKGxlbiA9PSAtMSkge1xcbitcXHRcXHRcXHRpZiAoZXJybm8gPT0gRUlOVFIpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRyZXN1bHQgPSAodm9pZCAqKTE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIWxlbiB8fCBidWZbbGVuIC0gMV0gPT0gJ2UnKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0c2VuZChmZCwgXFxcInRlc3RcXFwiLCA0LCBNU0dfTk9TSUdOQUwpO1xcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0cmV0dXJuIHJlc3VsdDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbihib29sIHdpdGhfdmVyZGljdClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZyAqc2tlbCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyA9IE5VTEw7XFxuK1xcdGNoYXIgKmJ1ZiA9IE5VTEw7XFxuK1xcdGludCBtYXAsIGVycjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gc2VuZC4gIGNvbXBsZXRpb24gb2YgdGhlIHNlbmRpbmcgY2FuIHRyaWdnZXIgYSBzcHVyaW91cyB3YWtlXFxuK1xcdCAqIHVwLiAgbGFyZ2VyIHZhbHVlcyBtYWtlIHRoZSBpc3N1ZSBtb3JlIGxpa2VseSwgYnV0IG1ha2Ugc3VjY2Vzc2Z1bCB0ZXN0IHJ1bnMgbG9uZ2VyLlxcbitcXHQgKi9cXG4rXFx0Y29uc3Qgc2l6ZV90IGJ1ZmxlbiA9IDEwMjQgKiAxMDI0ICogMjU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyB0byByZXByb2R1Y2UgRUFHQUlOIG9uIHNwdXJpb3VzIHdha2UgdXAuICBtb3JlIGF0dGVtcHRzXFxuK1xcdCAqIGluY3JlYXNlcyB0aGUgY2hhbmNlcyBvZiB0cmlnZ2VyaW5nIHRoZSBpc3N1ZSwgYW5kIHRoZSB0ZXN0IGVuZHMgYXMgc29vbiBhcyB3ZSBkby5cXG4rXFx0ICogaG93ZXZlciwgc3VjY2Vzc2Z1bCBydW5zIHdvdWxkIHRha2UgbG9uZ2VyIHRvIGNvbXBsZXRlLlxcbitcXHQgKi9cXG4rXFx0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDMwMDtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwib3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtYXAgPSBicGZfbWFwX19mZChza2VsLVxcdTAwM2VtYXBzLnNvY2tfbWFwX3J4KTtcXG4rXFxuK1xcdGlmICh3aXRoX3ZlcmRpY3QpIHtcXG4rXFx0XFx0cHJvZyA9IHNrZWwtXFx1MDAzZXByb2dzLnByb2dfc2tiX3ZlcmRpY3Q7XFxuK1xcdFxcdGVyciA9IGJwZl9wcm9nX2F0dGFjaChicGZfcHJvZ3JhbV9fZmQocHJvZyksIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVCwgMCk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJwZl9wcm9nX2F0dGFjaCB2ZXJkaWN0XFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0YnVmID0gbWFsbG9jKGJ1Zmxlbik7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihidWYsIFxcXCJtYWxsb2MgYnVmXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0bWVtc2V0KGJ1ZiwgMCwgYnVmbGVuKTtcXG4rXFx0YnVmW2J1ZmxlbiAtIDFdID0gJ2UnO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBtYXhfYXR0ZW1wdHM7ICsraSkge1xcbitcXHRcXHRzc2l6ZV90IGxlbjtcXG4rXFx0XFx0Y2hhciBpZ25vcmVkWzEyOF07XFxuK1xcdFxcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdFxcdGJvb2wgdGhyZWFkX2NyZWF0ZWQgPSBmYWxzZTtcXG4rXFx0XFx0c2l6ZV90IHJlbSA9IGJ1ZmxlbjtcXG4rXFx0XFx0aW50IGMgPSAtMSwgcCA9IC0xLCB6ZXJvID0gMDtcXG4rXFx0XFx0Ym9vbCBzdWNjZXNzID0gZmFsc2U7XFxuK1xcbitcXHRcXHRlcnIgPSBjcmVhdGVfcGFpcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgXFx1MDAyNmMsIFxcdTAwMjZwKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiY3JlYXRlX3BhaXJcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBlbmRfYXR0ZW1wdDtcXG4rXFxuK1xcdFxcdGVyciA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIE5VTEwsIFxcdTAwMjZ0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluX3RocmVhZCwgXFx1MDAyNnApO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJwdGhyZWFkX2NyZWF0ZVxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIGVuZF9hdHRlbXB0O1xcbitcXHRcXHR0aHJlYWRfY3JlYXRlZCA9IHRydWU7XFxuK1xcbitcXHRcXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgXFx1MDAyNnplcm8sIFxcdTAwMjZjLCBCUEZfQU5ZKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX21hcF91cGRhdGVfZWxlbVxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIGVuZF9hdHRlbXB0O1xcbitcXG4rXFx0XFx0d2hpbGUgKHJlbSkge1xcbitcXHRcXHRcXHRsZW4gPSB4c2VuZChjLCBidWYgKyAoYnVmbGVuIC0gcmVtKSwgcmVtLCAwKTtcXG4rXFx0XFx0XFx0aWYgKGxlbiA9PSAtMSlcXG4rXFx0XFx0XFx0XFx0Z290byBlbmRfYXR0ZW1wdDtcXG4rXFx0XFx0XFx0cmVtIC09IGxlbjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Lyogd2UgY2Fubm90IHVzZSByZWN2X3RpbWVvdXQoKSwgb3RoZXJ3aXNlIEVBR0FJTiB3b3VsZCBiZSBhbiBleHBlY3RlZCBlcnJuby4gKi9cXG4rXFx0XFx0bGVuID0gcmVjdmZyb20oYywgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIHdlIGFyZSBjaGVja2luZyBmb3IgdGhlIGludmFsaWQgcmV0dXJuIG9mIEVBR0FJTiwgYW55IG90aGVyIHJldHVybiBpcyBjb25zaWRlcmVkXFxuK1xcdFxcdCAqIHN1Y2Nlc3NmdWwgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHRlc3QuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiAhQVNTRVJUX05FUShlcnJubywgRUFHQUlOLCBcXFwicmVjdmZyb20gZWFnYWluXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZW5kX2F0dGVtcHQ7XFxuK1xcbitcXHRcXHRzdWNjZXNzID0gdHJ1ZTtcXG4rXFxuK2VuZF9hdHRlbXB0OlxcbitcXHRcXHRpZiAoYyBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRjbG9zZShjKTtcXG4rXFxuK1xcdFxcdGlmICh0aHJlYWRfY3JlYXRlZCkge1xcbitcXHRcXHRcXHR2b2lkICpyZXR2YWwgPSBOVUxMO1xcbitcXG4rXFx0XFx0XFx0cHRocmVhZF9qb2luKHRocmVhZCwgXFx1MDAyNnJldHZhbCk7XFxuK1xcdFxcdFxcdGlmICghQVNTRVJUX05VTEwocmV0dmFsLCBcXFwicmV0dmFsXFxcIikpXFxuK1xcdFxcdFxcdFxcdHN1Y2Nlc3MgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCF0aHJlYWRfY3JlYXRlZCBcXHUwMDI2XFx1MDAyNiBwIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdGNsb3NlKHApO1xcbitcXHRcXHRpZiAoIXN1Y2Nlc3MpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpZiAoYnVmKVxcbitcXHRcXHRmcmVlKGJ1Zik7XFxuK1xcbitcXHR0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbiB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxcbiB7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIGNyZWF0ZV91cGRhdGVfZnJlZVxcXCIpKVxcbkBAIC0xNDUxLDQgKzE1ODMsOCBAQCB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxcbiBcXHRcXHR0ZXN0X3NvY2ttYXBfbXVsdGlfY2hhbm5lbHMoU09DS19TVFJFQU0pO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCB1ZHAgbXVsdGkgY2hhbm5lbHNcXFwiKSlcXG4gXFx0XFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfREdSQU0pO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCByZWN2ZnJvbSBlYWdhaW5cXFwiKSlcXG4rXFx0XFx0dGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2FpbihmYWxzZSk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHJlY3Zmcm9tIGVhZ2FpbiB3aXRoIHZlcmRpY3RcXFwiKSlcXG4rXFx0XFx0dGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbih0cnVlKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjoxMC45MTI1ODkxOTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MzM1NDc0MjMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIk5FVF9TT0NLX01TR1wiLFxuICAgIFwiQ0dST1VQX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwidGNwX21zZ193YWl0X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgVENQIHJlY2VpdmUgcGF0aCAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKSB0byBjb3JyZWN0bHkgaGFuZGxlIHNvY2tldCByZWNlaXZlIHRpbWVvdXRzIGFuZCBzcHVyaW91cyB3YWtldXBzIGJ5IHBhc3NpbmcgdGhlIHRpbWVvdXQgYnkgcmVmZXJlbmNlIHRvIHRjcF9tc2dfd2FpdF9kYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTBmODdjZWFiNWEwNzhhYTlhZTA3YmE5MjNlYWE3OTAwMmY3MWZjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE1OjI2OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5pbmRleCBjYzBiZDczZjM2YjZkNi4uMTc1NWZjZjcyNmZjYjggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTE3OSw3ICsxNzksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xuIFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi1cdFx0XHQgICAgIGxvbmcgdGltZW8pXG4rXHRcdFx0ICAgICBsb25nICp0aW1lbylcbiB7XG4gXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTg3LDEyICsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4gXHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTilcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAoIXRpbWVvKVxuK1x0aWYgKCEqdGltZW8pXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksIFx1MDAyNndhaXQpO1xuIFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbi1cdHJldCA9IHNrX3dhaXRfZXZlbnQoc2ssIFx1MDAyNnRpbWVvLFxuK1x0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sXG4gXHRcdFx0ICAgICFsaXN0X2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnKSB8fFxuIFx0XHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbkBAIC0yMjksNiArMjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdGludCBjb3BpZWRfZnJvbV9zZWxmID0gMDtcbiBcdGludCBjb3BpZWQgPSAwO1xuIFx0dTMyIHNlcTtcbitcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0yNjIsNiArMjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbitcbiBtc2dfYnl0ZXNfcmVhZHk6XG4gXHRjb3BpZWQgPSBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCBcdTAwMjZjb3BpZWRfZnJvbV9zZWxmKTtcbiBcdC8qIFRoZSB0eXBpY2FsIGNhc2UgZm9yIEVGQVVMVCBpcyB0aGUgc29ja2V0IHdhcyBncmFjZWZ1bGx5XG5AQCAtMjgwLDcgKzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHR9XG4gXHRzZXEgKz0gY29waWVkX2Zyb21fc2VsZjtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuIFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuQEAgLTI5OSw3ICszMDEsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4gXHRcdGlmICghdGltZW8pIHtcbiBcdFx0XHRjb3BpZWQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuQEAgLTMxMCwxMyArMzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuK1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0Y29waWVkID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHRpZiAoZGF0YSBcdTAwMjZcdTAwMjYgIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbiBcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbitcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbitcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBvdXQ6XG5AQCAtMzU1LDYgKzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIHtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4gXHRpbnQgY29waWVkLCByZXQ7XG4rXHRsb25nIHRpbWVvO1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxuIFx0XHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XG5AQCAtMzcxLDE0ICszNzUsNTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdH1cbiBcdGxvY2tfc29jayhzayk7XG4rXG4rXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuK1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4rXHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHtcbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbitcdFx0XHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbitcdFx0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuK1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4rXHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4rXHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4rXHRcdFx0fVxuK1x0XHRcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0XHRnb3RvIGNoZWNrX3F1ZXVlcztcbitcdFx0fVxuK1xuK1x0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XG4rXHRcdFx0cmV0ID0gLUVOT1RDT05OO1xuK1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghdGltZW8pIHtcbitcdFx0XHRyZXQgPSAtRUFHQUlOO1xuK1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdHJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XG4rXHRcdFx0Z290byBjaGVja19xdWV1ZXM7XG4rXHRcdH1cbitcbitcdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXHUwMDI2dGltZW8pO1xuIFx0XHRpZiAoZGF0YSBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IGRhdGE7XG4gXHRcdFx0Z290byB1bmxvY2s7XG5AQCAtMzkwLDYgKzQzMiw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuIFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdFx0fVxuK1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuK1x0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuIFx0XHRjb3BpZWQgPSAtRUFHQUlOO1xuIFx0fVxuIFx0cmV0ID0gY29waWVkO1xuQEAgLTM5OCw2ICs0NDIsMTYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRyZWxlYXNlX3NvY2soc2spO1xuIFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4gXHRyZXR1cm4gcmV0O1xuK1xuK2NoZWNrX3F1ZXVlczpcbitcdGlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxuK1x0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbitcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuK1x0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4rXHR9XG4rXHRnb3RvIHVubG9jaztcbiB9XG4gXG4gc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uYWZkYTRkOTBlNTczNGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTEzNzMsNiArMTM3MywxMzggQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKGludCBzb3R5cGUpXG4gXHR0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCAqdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQodm9pZCAqYXJnKVxuK3tcbitcdGludCBmZCA9ICooaW50ICopYXJnO1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHR2b2lkICpyZXN1bHQgPSBOVUxMO1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0c3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4rXG4rXHRcdGlmIChsZW4gPT0gLTEpIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRyZXN1bHQgPSAodm9pZCAqKTE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFsZW4gfHwgYnVmW2xlbiAtIDFdID09ICdlJylcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdHNlbmQoZmQsIFwidGVzdFwiLCA0LCBNU0dfTk9TSUdOQUwpO1xuK1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIHJlc3VsdDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbihib29sIHdpdGhfdmVyZGljdClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZyAqc2tlbCA9IE5VTEw7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSBOVUxMO1xuK1x0Y2hhciAqYnVmID0gTlVMTDtcbitcdGludCBtYXAsIGVycjtcbitcbitcdC8qXG4rXHQgKiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHNlbmQuICBjb21wbGV0aW9uIG9mIHRoZSBzZW5kaW5nIGNhbiB0cmlnZ2VyIGEgc3B1cmlvdXMgd2FrZVxuK1x0ICogdXAuICBsYXJnZXIgdmFsdWVzIG1ha2UgdGhlIGlzc3VlIG1vcmUgbGlrZWx5LCBidXQgbWFrZSBzdWNjZXNzZnVsIHRlc3QgcnVucyBsb25nZXIuXG4rXHQgKi9cbitcdGNvbnN0IHNpemVfdCBidWZsZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xuK1xuK1x0LypcbitcdCAqIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIHRvIHJlcHJvZHVjZSBFQUdBSU4gb24gc3B1cmlvdXMgd2FrZSB1cC4gIG1vcmUgYXR0ZW1wdHNcbitcdCAqIGluY3JlYXNlcyB0aGUgY2hhbmNlcyBvZiB0cmlnZ2VyaW5nIHRoZSBpc3N1ZSwgYW5kIHRoZSB0ZXN0IGVuZHMgYXMgc29vbiBhcyB3ZSBkby5cbitcdCAqIGhvd2V2ZXIsIHN1Y2Nlc3NmdWwgcnVucyB3b3VsZCB0YWtlIGxvbmdlciB0byBjb21wbGV0ZS5cbitcdCAqL1xuK1x0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDMwMDtcbitcbitcdHNrZWwgPSB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtYXAgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuc29ja19tYXBfcngpO1xuK1xuK1x0aWYgKHdpdGhfdmVyZGljdCkge1xuK1x0XHRwcm9nID0gc2tlbC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0O1xuK1x0XHRlcnIgPSBicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX3Byb2dfYXR0YWNoIHZlcmRpY3RcIikpXG4rXHRcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0YnVmID0gbWFsbG9jKGJ1Zmxlbik7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnVmLCBcIm1hbGxvYyBidWZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdG1lbXNldChidWYsIDAsIGJ1Zmxlbik7XG4rXHRidWZbYnVmbGVuIC0gMV0gPSAnZSc7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbWF4X2F0dGVtcHRzOyArK2kpIHtcbitcdFx0c3NpemVfdCBsZW47XG4rXHRcdGNoYXIgaWdub3JlZFsxMjhdO1xuK1x0XHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0XHRib29sIHRocmVhZF9jcmVhdGVkID0gZmFsc2U7XG4rXHRcdHNpemVfdCByZW0gPSBidWZsZW47XG4rXHRcdGludCBjID0gLTEsIHAgPSAtMSwgemVybyA9IDA7XG4rXHRcdGJvb2wgc3VjY2VzcyA9IGZhbHNlO1xuK1xuK1x0XHRlcnIgPSBjcmVhdGVfcGFpcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgXHUwMDI2YywgXHUwMDI2cCk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJjcmVhdGVfcGFpclwiKSlcbitcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuK1xuK1x0XHRlcnIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIFx1MDAyNnRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW5fdGhyZWFkLCBcdTAwMjZwKTtcbitcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcInB0aHJlYWRfY3JlYXRlXCIpKVxuK1x0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4rXHRcdHRocmVhZF9jcmVhdGVkID0gdHJ1ZTtcbitcbitcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAsIFx1MDAyNnplcm8sIFx1MDAyNmMsIEJQRl9BTlkpO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX21hcF91cGRhdGVfZWxlbVwiKSlcbitcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuK1xuK1x0XHR3aGlsZSAocmVtKSB7XG4rXHRcdFx0bGVuID0geHNlbmQoYywgYnVmICsgKGJ1ZmxlbiAtIHJlbSksIHJlbSwgMCk7XG4rXHRcdFx0aWYgKGxlbiA9PSAtMSlcbitcdFx0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4rXHRcdFx0cmVtIC09IGxlbjtcbitcdFx0fVxuK1xuK1x0XHQvKiB3ZSBjYW5ub3QgdXNlIHJlY3ZfdGltZW91dCgpLCBvdGhlcndpc2UgRUFHQUlOIHdvdWxkIGJlIGFuIGV4cGVjdGVkIGVycm5vLiAqL1xuK1x0XHRsZW4gPSByZWN2ZnJvbShjLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiB3ZSBhcmUgY2hlY2tpbmcgZm9yIHRoZSBpbnZhbGlkIHJldHVybiBvZiBFQUdBSU4sIGFueSBvdGhlciByZXR1cm4gaXMgY29uc2lkZXJlZFxuK1x0XHQgKiBzdWNjZXNzZnVsIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyB0ZXN0LlxuK1x0XHQgKi9cbitcdFx0aWYgKGxlbiBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgIUFTU0VSVF9ORVEoZXJybm8sIEVBR0FJTiwgXCJyZWN2ZnJvbSBlYWdhaW5cIikpXG4rXHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbitcbitcdFx0c3VjY2VzcyA9IHRydWU7XG4rXG4rZW5kX2F0dGVtcHQ6XG4rXHRcdGlmIChjIFx1MDAzZT0gMClcbitcdFx0XHRjbG9zZShjKTtcbitcbitcdFx0aWYgKHRocmVhZF9jcmVhdGVkKSB7XG4rXHRcdFx0dm9pZCAqcmV0dmFsID0gTlVMTDtcbitcbitcdFx0XHRwdGhyZWFkX2pvaW4odGhyZWFkLCBcdTAwMjZyZXR2YWwpO1xuK1x0XHRcdGlmICghQVNTRVJUX05VTEwocmV0dmFsLCBcInJldHZhbFwiKSlcbitcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoIXRocmVhZF9jcmVhdGVkIFx1MDAyNlx1MDAyNiBwIFx1MDAzZT0gMClcbitcdFx0XHRjbG9zZShwKTtcbitcdFx0aWYgKCFzdWNjZXNzKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK2NsZWFudXA6XG4rXHRpZiAoYnVmKVxuK1x0XHRmcmVlKGJ1Zik7XG4rXG4rXHR0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19kZXN0cm95KHNrZWwpO1xuK31cbitcbiB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCBjcmVhdGVfdXBkYXRlX2ZyZWVcIikpXG5AQCAtMTQ1MSw0ICsxNTgzLDggQEAgdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCB1ZHAgbXVsdGkgY2hhbm5lbHNcIikpXG4gXHRcdHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhTT0NLX0RHUkFNKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCByZWN2ZnJvbSBlYWdhaW5cIikpXG4rXHRcdHRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW4oZmFsc2UpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHJlY3Zmcm9tIGVhZ2FpbiB3aXRoIHZlcmRpY3RcIikpXG4rXHRcdHRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW4odHJ1ZSk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6MTAuOTEyNTk5OTUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg3MDk0ODE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgQlBGIFNvY2ttYXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBzb21lIHR3ZWFrcyB0byB0aGUgQlBGIHNvY2ttYXAgY29kZSBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIFNlZW1zIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIGFyb3VuZCBob3cgd2UgaGFuZGxlIHRpbWVvdXRzIGluIFRDUCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBjaGFuZ2UgdG8gYHRjcF9tc2dfd2FpdF9kYXRhYCBpcyB0aGUgY29yZSBvZiBpdC4gVGhleSdyZSB1cGRhdGluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYSBgbG9uZyAqdGltZW9gIGluc3RlYWQgb2YganVzdCBgbG9uZyB0aW1lb2AsIHdoaWNoIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBwb2ludGVyLWJhc2VkIHRpbWVvdXQgbWVjaGFuaXNtLlxuXG5Gcm9tIHRoZSBkZXNjcmlwdGlvbiwgdGhlIHBhdGNoIHRoZW4gYWRqdXN0cyB0aGUgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCBmdW5jdGlvbnMgdG8gY29ycmVjdGx5IHVzZSB0aGlzIG5ldyB0aW1lb3V0IHBhcmFtZXRlci4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gcHJldmVudCBzcHVyaW91cyBgLUVBR0FJTmAgcmV0dXJucywgd2hpY2ggc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGluY29ycmVjdCB0aW1lb3V0IGhhbmRsaW5nIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBnb29kIHRvIHNlZTsgdGhhdCdzIGEgY29tbW9uIGFyZWEgZm9yIEJQRiBwcm9ncmFtcyB0byBtaXNiZWhhdmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIHNvY2tldCBsYXllci5cblxuU28sIHRoaXMgaXMgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSB0byBUQ1Agc29ja2V0IEJQRiwgaW1wYWN0aW5nIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGVzZSBmdW5jdGlvbnMgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBjaGFuZ2VkIGFuZCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IuIFRpbWUgdG8gcHVsbCB1cCBteSB0cnVzdHkgZ3JlcCBhbmQgc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgaW1wYWN0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIHNvbWUgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIEJQRiBwcm9ncmFtcyB0aGF0IHJlbHkgb24gdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjE2Ljc4MzU1MTc0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcyMDg0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZl9yZWN2bXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz0zMzg9c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM1NS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzU2OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNTctXFx0XFx0XFx0ICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTY3Nz1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4Mi1cXHRwcm90W1RDUF9CUEZfQkFTRV0uY2xvc2VcXHRcXHQ9IHNvY2tfbWFwX2Nsb3NlO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2ODM6XFx0cHJvdFtUQ1BfQlBGX0JBU0VdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZztcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg0LVxcdHByb3RbVENQX0JQRl9CQVNFXS5zb2NrX2lzX3JlYWRhYmxlXFx0PSBza19tc2dfaXNfcmVhZGFibGU7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVxcdHByb3RbVENQX0JQRl9SWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjkxOlxcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkyLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02OTMtXFx0cHJvdFtUQ1BfQlBGX1RYUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfVFhdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2OTQ6XFx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY5NS19XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI3PWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1MC1cXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1MTpcXHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxcbm5ldC9pcHY0L3RjcF9icGYuYy03NTItXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjE3LjAwMDc2NTM1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjMzMjg3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIHJlY3Ztc2cgSGFuZGxlcnMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIHRoZSBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBgcmVjdm1zZ2AgaGFuZGxlcnMgZm9yIGBUQ1BfQlBGX0JBU0VgLCBgVENQX0JQRl9SWGAsIGFuZCBgVENQX0JQRl9UWFJYYCBjb25maWd1cmF0aW9ucy4gTWFrZXMgc2Vuc2U7IHRoaXMgaXMgdGhlIHdheSB0byBwbHVtYiBCUEYgaW50byB0aGUgVENQIHJlY2VpdmUgcGF0aC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgcGF0aCwgcmVhY2hhYmxlIHZpYSBzb2NrbWFwL0JQRiwgc28gdGhhdCBpcyBmdW5jdGlvbmFsLiBJbnRlcmVzdGluZyB0aGF0IHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIHRvIGB0Y3BfbXNnX3dhaXRfZGF0YWAgYXMgd2VsbC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhlIHdhaXQgZnVuY3Rpb24gaXMgaW5mbHVlbmNlZC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlIHdoYXQncyByZXF1aXJlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgYWN0aXZlIGluIHRoZSBrZXJuZWwuIFRoZSBjb2RlIGl0c2VsZiwgYG5ldC9pcHY0L3RjcF9icGYuY2AsIGNvbmZpcm1zIG15IHN1c3BpY2lvbiBhYm91dCB0aGUgbG9jYXRpb24uIFRpbWUgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgcGFydGljdWxhciBmaWxlLiBJJ2xsIG5lZWQgdG8gdHJhY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIHRoZSBuZWNlc3NhcnkgZmVhdHVyZXMgYXJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6MjEuNTY0MDk2MTc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTIwNTY1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9NjI9b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSArPSB0Y3BfaWxsaW5vaXMub1xcbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHRjcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdWRwX2JwZi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjIxLjY2NTMwNjk0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTk4MTEyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgc25pcHBldDpcblxuKipEZWJ1Z2dpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgc2VlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX05FVF9TT0NLX01TR2AuIFRoYXQncyB0aGUgZmlyc3QgaHVyZGxlLiBBbmQgdGhlbiwgdGhlcmUncyB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrIHdpdGggYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGd1YXJkaW5nIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIFRoYXQgc3VnZ2VzdHMgc29tZSBCUEYgaW50ZWdyYXRpb24gaGVyZSwgYW5kIGxpa2VseSwgYSBkZXBlbmRlbmN5IG9uIHRoZSBCUEYgc3lzY2FsbCBmZWF0dXJlLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBpbmRlZWQgZGVmaW5lZCB0aGVyZSwgYW5kIGNvbmZpcm0gaG93IGl0IGludGVyYWN0cyB3aXRoIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgVENQIG1lc3NhZ2Ugd2FpdGluZyBhbmQgdGhlIEJQRiBpbnRlZ3JhdGlvbiB0byBkZXRlcm1pbmUgaWYgSSBuZWVkIHRvIGVuYWJsZSB0aGlzIGNvbmZpZywgYW5kIGlmIHRoaXMgaXMgYSBmZWF0dXJlIEknbSBldmVuIGludGVyZXN0ZWQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjoyNS4yNjUxMjExNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNjExMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTE3OD1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXFxubmV0L2lwdjQvdGNwX2JwZi5jOjE4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE4MS1zdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz04MDY9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTgxMi19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjgxMzojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjI1LjM4ODczNzE1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTYxNDQyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAtIEJQRiBhbmQgTmV0d29yayBNZXNzYWdpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHN0cmFpZ2h0LiBJIGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIHByZXJlcXVpc2l0ZSwgdGhhdCdzIGEgZ2l2ZW4uIEFuZCBJJ20gYWxzbyBzZWVpbmcgdGhhdCBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgcmVxdWlyZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZW0uIElzIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCByZWxpYW50IG9uIGFub3RoZXIsIHBvdGVudGlhbGx5IG9ic2N1cmUgc2V0dGluZz8gT3IgcGVyaGFwcyBzb21ldGhpbmcgaGlnaGVyIHVwIHRoZSBjaGFpbiBpcyAqc2VsZWN0aW5nKiBpdD8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSBJIGZ1bGx5IGdyYXNwIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSBiZWhhdmlvciBJIG5lZWQgZnJvbSB0aGUga2VybmVsISBJJ2xsIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgdHJhY2UgdGhpcyBvdXQuIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgc2F5Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NjcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjozMC45ODQ4ODM1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNTcxNjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjYtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZzozNjc6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTM2OC1cXHRoZWxwXFxuLS1cXG5uZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ3OC1cXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTQ4MC1cXHRib29sXFxuLS1cXG5uZXQvS2NvbmZpZy00ODItXFx0aGVscFxcbm5ldC9LY29uZmlnOjQ4MzpcXHQgIFRoZSBORVRfU09DS19NU0cgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHBsYWluIHNvY2tldHMgKGUuZy4gVENQKSBvclxcbm5ldC9LY29uZmlnLTQ4NC1cXHQgIFVMUHMgKHVwcGVyIGxheWVyIG1vZHVsZXMsIGUuZy4gVExTKSB0byBwcm9jZXNzIEw3IGFwcGxpY2F0aW9uIGRhdGFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6MzEuMTc2NDY0MjU2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjgxOTgwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdzogTkVUX1NPQ0tfTVNHIGFuZCBSZWxhdGVkIENvbXBvbmVudHMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgTkVUX1NPQ0tfTVNHYCBpcyBmbGFnZ2VkIGFzIGEga2V5IGl0ZW0gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEl0IGFwcGVhcnMgYEJQRl9TVFJFQU1fUEFSU0VSYCBhbmQgYFRMU2AgYXJlIHJlc3BvbnNpYmxlIGZvciBzZWxlY3Rpbmcgb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIG1lc3NhZ2UgdHlwZS4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIGNoZWNrIG9mIGBCUEZfU1RSRUFNX1BBUlNFUmAgYW5kIGBCUEZfU1lTQ0FMTGAsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gaG93IGl0IGlzIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGFyc2VyIGZ1bmN0aW9ucyBpbiByZWxhdGlvbiB0byBzeXNjYWxsIHByb2Nlc3NpbmcuIFRoaXMgcHJvYmFibHkgYm9pbHMgZG93biB0byBhIGZldyBjb3JlIHF1ZXN0aW9uczogSG93IGRvZXMgdGhlIHBhcnNlciBpZGVudGlmeSBgTkVUX1NPQ0tfTVNHYD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBpdCdzIGluY29ycmVjdCBvciBieXBhc3NlZD8gV2hhdCBhcmUgdGhlIGxpbWl0cyBvZiB0aGUgcGFyc2VyIHJlbGF0aXZlIHRvIHRoZSBzeXN0ZW0gY2FsbHM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjozNC4zNDQ2NjU1NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTg4ODgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxcbi0tXFxubmV0L0tjb25maWctMzYwLVxcbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZy0zNjItXFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjozNC40NTY1NTk5NDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwMjUyNTE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgQlBGIFN0cmVhbWluZyBhbmQgQ2dyb3VwIEJQRiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBsZXZlcmFnaW5nIGBCUEZfU1RSRUFNX1BBUlNFUmAg4oCTIHRoYXQgc2VlbXMgbGlrZSBhIHByb21pc2luZyBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdhaXQsIGlzbid0IGBDR1JPVVBfQlBGYCBhbHNvIGludGltYXRlbHkgY29ubmVjdGVkIHRvIHRoZSBCUEYgbGFuZHNjYXBlPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGhlcmUuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uLCB0aGUgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIGRlbHZlIGludG8gYG5ldC9LY29uZmlnYCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJQRl9TVFJFQU1fUEFSU0VSYC4gSSdtIGdvaW5nIHRvIGRldGVybWluZSB3aGF0IG90aGVyIG9wdGlvbnMgb3IgZmVhdHVyZXMgbmVlZCB0byBiZSBpbiBwbGFjZSB0byBlZmZlY3RpdmVseSB1c2UgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBpbXBsaWNhdGlvbnMgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1ODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjozOC4yNTkwODc4NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2MDpcXHRcXG4gMzYxOlxcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbiAzNjI6XFx0XFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcbiAzNjM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuIDM2NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDM2NTpcXHRcXHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcXG4gMzY2OlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDM2NzpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuIDM2ODpcXHRcXHRoZWxwXFxuIDM2OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgYWxsb3dzIGEgVENQIHN0cmVhbSBwYXJzZXIgdG8gYmUgdXNlZCB3aXRoXFxuIDM3MDpcXHRcXHQgIEJQRl9NQVBfVFlQRV9TT0NLTUFQLlxcbiAzNzE6XFx0XFxuIDM3MjpcXHRjb25maWcgTkVUX0ZMT1dfTElNSVRcXG4gMzczOlxcdFxcdGJvb2wgXFxcIk5ldCBmbG93IGxpbWl0XFxcIlxcbiAzNzQ6XFx0XFx0ZGVwZW5kcyBvbiBSUFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6MzguMjU5MjYzMjM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODYyNzc0NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEJQRiBTb2NrbWFwIFJlY2VpdmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgdGhlIEJQRiBzdHJlYW0gcGFyc2VyIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGF0IGhpbmdlcyBvbiBgSU5FVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQ0dST1VQX0JQRmAuIEknbGwgYmUgc3VyZSB0byBlbmFibGUgdGhvc2UsIGFsb25nIHdpdGggYEJQRl9TVFJFQU1fUEFSU0VSYCBhbmQgYE5FVF9TT0NLX01TR2AuXG5cblRoZSBjb2RlIG1vZGlmaWVzIGB0Y3BfbXNnX3dhaXRfZGF0YWAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBJJ2xsIGRlZmluaXRlbHkgYWRkIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgdG8gYEZvY3VzU3ltYm9sc2AuIEV2ZW4gdGhvdWdoIGB0Y3BfbXNnX3dhaXRfZGF0YWAgaXMgc3RhdGljLCBJJ2xsIGluY2x1ZGUgaXQgdG9vIHRvIGJlIHNhZmUuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBBaGEsIHRoZSB0ZXN0IHVzZXMgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgLiBUaGF0IHNjcmVhbXMgc29ja21hcC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBtb2RpZmllcyBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIHdoaWNoIGFyZSBjcml0aWNhbCBmb3Igc29ja21hcCBUQ1AgcmVjZWl2ZSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGV4YW1pbmluZy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBmdW5jdGlvbnMuIExvb2tzIGxpa2UgdGhvc2UgYXJlIHRoZSBvbmx5IHRocmVlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZC5cblxuQWxyaWdodCwgbGV0J3MgcmV2aWV3IHRoZSBhY3R1YWwgY2hhbmdlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9tc2dfd2FpdF9kYXRhYCB0byB0YWtlIHRoZSB0aW1lb3V0IGFzIGEgcG9pbnRlciwgbm90IGEgdmFsdWUuIEl0IHNlZW1zIHRoYXQgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSB0aW1lb3V0IHdhc24ndCBiZWluZyBjb3JyZWN0bHkgdXBkYXRlZCBpbiB0aGUgY2FsbGVyIGlmIHRoZSBjYWxsIHRvIGBza193YWl0X2V2ZW50YCB3b2tlIHVwIHNwdXJpb3VzbHkuIEl0IGxvb2tzIGxpa2UgYHRjcF9icGZfcmVjdm1zZ2AgaGFzIGEgYG1zZ19ieXRlc19yZWFkeWAgbGFiZWwsIHNvIGlmIGB0Y3BfbXNnX3dhaXRfZGF0YWAgd29rZSB1cCBidXQgbm8gZGF0YSBhcnJpdmVkLCB0aGVuIHRoZSBjb2RlIHdpbGwgY2hlY2sgYHRpbWVvIFx1MDAzZSAwYCBhbmQgcmV0cnkuIEJhc2ljYWxseSwgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHdvdWxkIGtlZXAgcmV0dXJuaW5nIGAtRUFHQUlOYCBvciBsb29wIGVuZGxlc3NseSBpbiB0aGUgY2FzZSBvZiBhIHNwdXJpb3VzIHdha2V1cC4gQnkgcGFzc2luZyB0aGUgdGltZW91dCBieSByZWZlcmVuY2UsIGB0Y3BfYnBmX3JlY3Ztc2dgIGNhbiBjb3JyZWN0bHkgcmV0cnkuXG5cblRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGVyZWZvcmUsIEknbGwgZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblNvLCB0aGUgY29uZmlncyBJIG5lZWQ6XG4qICAgYEJQRl9TWVNDQUxMYFxuKiAgIGBCUEZfU1RSRUFNX1BBUlNFUmBcbiogICBgTkVUX1NPQ0tfTVNHYFxuKiAgIGBDR1JPVVBfQlBGYFxuXG5NeSBgRm9jdXNTeW1ib2xzYDpcbiogICBgdGNwX2JwZl9yZWN2bXNnYFxuKiAgIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYFxuKiAgIGB0Y3BfbXNnX3dhaXRfZGF0YWBcblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB0aGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiBzb2NrbWFwIFRDUCByZWNlaXZlIHBhdGggKGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmApIHRvIGNvcnJlY3RseSBoYW5kbGUgc29ja2V0IHJlY2VpdmUgdGltZW91dHMgYW5kIHNwdXJpb3VzIHdha2V1cHMgYnkgcGFzc2luZyB0aGUgdGltZW91dCBieSByZWZlcmVuY2UgdG8gYHRjcF9tc2dfd2FpdF9kYXRhYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc28gaXQncyBhIGdvb2QgdGFyZ2V0LlxuXG5FdmVuIHRob3VnaCBgdGNwX21zZ193YWl0X2RhdGFgIGlzIHN0YXRpYywgSSdsbCBpbmNsdWRlIGl0LiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LCBldmVuIGlmIGl0IG1pZ2h0IGJlIGlubGluZWQuXG5cbk5vdyBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzNCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjo1NC4xMjIwNDE1MTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUyODY2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCIsXG4gICAgXCJDR1JPVVBfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl9yZWN2bXNnXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfbXNnX3dhaXRfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc29ja21hcCBUQ1AgcmVjZWl2ZSBwYXRoICh0Y3BfYnBmX3JlY3Ztc2cgYW5kIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIpIHRvIGNvcnJlY3RseSBoYW5kbGUgc29ja2V0IHJlY2VpdmUgdGltZW91dHMgYW5kIHNwdXJpb3VzIHdha2V1cHMgYnkgcGFzc2luZyB0aGUgdGltZW91dCBieSByZWZlcmVuY2UgdG8gdGNwX21zZ193YWl0X2RhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBzb2NrbWFwKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIk5FVF9TT0NLX01TR1wiLFxuICAgIFwiQ0dST1VQX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwidGNwX21zZ193YWl0X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgVENQIHJlY2VpdmUgcGF0aCAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKSB0byBjb3JyZWN0bHkgaGFuZGxlIHNvY2tldCByZWNlaXZlIHRpbWVvdXRzIGFuZCBzcHVyaW91cyB3YWtldXBzIGJ5IHBhc3NpbmcgdGhlIHRpbWVvdXQgYnkgcmVmZXJlbmNlIHRvIHRjcF9tc2dfd2FpdF9kYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowq7452[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 15:08:25 +0000 UTC FinishedAt: 2026-07-22 15:26:56 +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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG", "CGROUP_BPF" ], "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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG", "CGROUP_BPF" ], "series_id": "b253e49b-f04c-4e17-bbb2-c8205852f3a4" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_bpf_recvmsg", "tcp_bpf_recvmsg_parser", "tcp_msg_wait_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzb2NrbWFwIFRDUCByZWNlaXZlIHBhdGggKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikgdG8gY29ycmVjdGx5IGhhbmRsZSBzb2NrZXQgcmVjZWl2ZSB0aW1lb3V0cyBhbmQgc3B1cmlvdXMgd2FrZXVwcyBieSBwYXNzaW5nIHRoZSB0aW1lb3V0IGJ5IHJlZmVyZW5jZSB0byB0Y3BfbXNnX3dhaXRfZGF0YS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHNvY2ttYXApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTBmODdjZWFiNWEwNzhhYTlhZTA3YmE5MjNlYWE3OTAwMmY3MWZjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE1OjI2OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuY1xuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLjE3NTVmY2Y3MjZmY2I4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLVx0XHRcdCAgICAgbG9uZyB0aW1lbylcbiYjNDM7XHRcdFx0ICAgICBsb25nICp0aW1lbylcbiB7XG4gXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuIFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0aWYgKCF0aW1lbylcbiYjNDM7XHRpZiAoISp0aW1lbylcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG4gXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuLVx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXHUwMDI2dGltZW8sXG4mIzQzO1x0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sXG4gXHRcdFx0ICAgICFsaXN0X2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnKSB8fFxuIFx0XHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XG4gXHRpbnQgY29waWVkID0gMDtcbiBcdHUzMiBzZXE7XG4mIzQzO1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTI2Miw2ICYjNDM7MjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xuIFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcbkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHR9XG4gXHRzZXEgJiM0Mzs9IGNvcGllZF9mcm9tX3NlbGY7XG4gXHRpZiAoIWNvcGllZCkge1xuLVx0XHRsb25nIHRpbWVvO1xuIFx0XHRpbnQgZGF0YTtcbiBcbiBcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcbkBAIC0yOTksNyAmIzQzOzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcdFx0aWYgKCF0aW1lbykge1xuIFx0XHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHRcdFx0Z290byBvdXQ7XG5AQCAtMzEwLDEzICYjNDM7MzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuJiM0MztcdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXHUwMDI2dGltZW8pO1xuIFx0XHRpZiAoZGF0YSBcdTAwM2MgMCkge1xuIFx0XHRcdGNvcGllZCA9IGRhdGE7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4gXHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBvdXQ6XG5AQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiB7XG4gXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xuIFx0aW50IGNvcGllZCwgcmV0O1xuJiM0MztcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0zNzEsMTQgJiM0MzszNzUsNTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdH1cbiBcdGxvY2tfc29jayhzayk7XG4mIzQzO1xuJiM0MztcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4mIzQzO1x0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbiYjNDM7XHRcdFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4mIzQzO1x0XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4mIzQzO1x0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XHRcdFx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT1RDT05OO1xuJiM0MztcdFx0XHRnb3RvIGNoZWNrX3F1ZXVlcztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXRpbWVvKSB7XG4mIzQzO1x0XHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuJiM0MztcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuJiM0MztcdFx0XHRnb3RvIGNoZWNrX3F1ZXVlcztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTAsNiAmIzQzOzQzMiw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuIFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdFx0fVxuJiM0MztcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbiYjNDM7XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4gXHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHR9XG4gXHRyZXQgPSBjb3BpZWQ7XG5AQCAtMzk4LDYgJiM0Mzs0NDIsMTYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRyZWxlYXNlX3NvY2soc2spO1xuIFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4gXHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7Y2hlY2tfcXVldWVzOlxuJiM0MztcdGlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxuJiM0MztcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpIHtcbiYjNDM7XHRcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1x0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbiYjNDM7XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiYjNDM7XHR9XG4mIzQzO1x0Z290byB1bmxvY2s7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuaW5kZXggY2IzMjI5NzExZjkzYTMuLmFmZGE0ZDkwZTU3MzRhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbkBAIC0xMzczLDYgJiM0MzsxMzczLDEzOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfbXVsdGlfY2hhbm5lbHMoaW50IHNvdHlwZSlcbiBcdHRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX2Rlc3Ryb3koc2tlbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCAqdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gKihpbnQgKilhcmc7XG4mIzQzO1x0Y2hhciBidWZbMTAyNF07XG4mIzQzO1x0dm9pZCAqcmVzdWx0ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHRydWUpIHtcbiYjNDM7XHRcdHNzaXplX3QgbGVuID0gcmVjdmZyb20oZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDAsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChsZW4gPT0gLTEpIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRyZXN1bHQgPSAodm9pZCAqKTE7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghbGVuIHx8IGJ1ZltsZW4gLSAxXSA9PSAmIzM5O2UmIzM5OylcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzZW5kKGZkLCBcJiMzNDt0ZXN0XCYjMzQ7LCA0LCBNU0dfTk9TSUdOQUwpO1xuJiM0MztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXN1bHQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW4oYm9vbCB3aXRoX3ZlcmRpY3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nID0gTlVMTDtcbiYjNDM7XHRjaGFyICpidWYgPSBOVUxMO1xuJiM0MztcdGludCBtYXAsIGVycjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHNlbmQuICBjb21wbGV0aW9uIG9mIHRoZSBzZW5kaW5nIGNhbiB0cmlnZ2VyIGEgc3B1cmlvdXMgd2FrZVxuJiM0MztcdCAqIHVwLiAgbGFyZ2VyIHZhbHVlcyBtYWtlIHRoZSBpc3N1ZSBtb3JlIGxpa2VseSwgYnV0IG1ha2Ugc3VjY2Vzc2Z1bCB0ZXN0IHJ1bnMgbG9uZ2VyLlxuJiM0MztcdCAqL1xuJiM0MztcdGNvbnN0IHNpemVfdCBidWZsZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIHRvIHJlcHJvZHVjZSBFQUdBSU4gb24gc3B1cmlvdXMgd2FrZSB1cC4gIG1vcmUgYXR0ZW1wdHNcbiYjNDM7XHQgKiBpbmNyZWFzZXMgdGhlIGNoYW5jZXMgb2YgdHJpZ2dlcmluZyB0aGUgaXNzdWUsIGFuZCB0aGUgdGVzdCBlbmRzIGFzIHNvb24gYXMgd2UgZG8uXG4mIzQzO1x0ICogaG93ZXZlciwgc3VjY2Vzc2Z1bCBydW5zIHdvdWxkIHRha2UgbG9uZ2VyIHRvIGNvbXBsZXRlLlxuJiM0MztcdCAqL1xuJiM0MztcdGNvbnN0IGludCBtYXhfYXR0ZW1wdHMgPSAzMDA7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW5fYW5kX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtYXAgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuc29ja19tYXBfcngpO1xuJiM0MztcbiYjNDM7XHRpZiAod2l0aF92ZXJkaWN0KSB7XG4mIzQzO1x0XHRwcm9nID0gc2tlbC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0O1xuJiM0MztcdFx0ZXJyID0gYnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7YnBmX3Byb2dfYXR0YWNoIHZlcmRpY3RcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidWYgPSBtYWxsb2MoYnVmbGVuKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoYnVmLCBcJiMzNDttYWxsb2MgYnVmXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRtZW1zZXQoYnVmLCAwLCBidWZsZW4pO1xuJiM0MztcdGJ1ZltidWZsZW4gLSAxXSA9ICYjMzk7ZSYjMzk7O1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbWF4X2F0dGVtcHRzOyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdFx0c3NpemVfdCBsZW47XG4mIzQzO1x0XHRjaGFyIGlnbm9yZWRbMTI4XTtcbiYjNDM7XHRcdHB0aHJlYWRfdCB0aHJlYWQ7XG4mIzQzO1x0XHRib29sIHRocmVhZF9jcmVhdGVkID0gZmFsc2U7XG4mIzQzO1x0XHRzaXplX3QgcmVtID0gYnVmbGVuO1xuJiM0MztcdFx0aW50IGMgPSAtMSwgcCA9IC0xLCB6ZXJvID0gMDtcbiYjNDM7XHRcdGJvb2wgc3VjY2VzcyA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGNyZWF0ZV9wYWlyKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBcdTAwMjZjLCBcdTAwMjZwKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7Y3JlYXRlX3BhaXJcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgXHUwMDI2dGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQsIFx1MDAyNnApO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtwdGhyZWFkX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4mIzQzO1x0XHR0aHJlYWRfY3JlYXRlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAsIFx1MDAyNnplcm8sIFx1MDAyNmMsIEJQRl9BTlkpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDticGZfbWFwX3VwZGF0ZV9lbGVtXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbiYjNDM7XG4mIzQzO1x0XHR3aGlsZSAocmVtKSB7XG4mIzQzO1x0XHRcdGxlbiA9IHhzZW5kKGMsIGJ1ZiAmIzQzOyAoYnVmbGVuIC0gcmVtKSwgcmVtLCAwKTtcbiYjNDM7XHRcdFx0aWYgKGxlbiA9PSAtMSlcbiYjNDM7XHRcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuJiM0MztcdFx0XHRyZW0gLT0gbGVuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIHdlIGNhbm5vdCB1c2UgcmVjdl90aW1lb3V0KCksIG90aGVyd2lzZSBFQUdBSU4gd291bGQgYmUgYW4gZXhwZWN0ZWQgZXJybm8uICovXG4mIzQzO1x0XHRsZW4gPSByZWN2ZnJvbShjLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiB3ZSBhcmUgY2hlY2tpbmcgZm9yIHRoZSBpbnZhbGlkIHJldHVybiBvZiBFQUdBSU4sIGFueSBvdGhlciByZXR1cm4gaXMgY29uc2lkZXJlZFxuJiM0MztcdFx0ICogc3VjY2Vzc2Z1bCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGVzdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgIUFTU0VSVF9ORVEoZXJybm8sIEVBR0FJTiwgXCYjMzQ7cmVjdmZyb20gZWFnYWluXCYjMzQ7KSlcbiYjNDM7XHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbiYjNDM7XG4mIzQzO1x0XHRzdWNjZXNzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO2VuZF9hdHRlbXB0OlxuJiM0MztcdFx0aWYgKGMgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRjbG9zZShjKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodGhyZWFkX2NyZWF0ZWQpIHtcbiYjNDM7XHRcdFx0dm9pZCAqcmV0dmFsID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHB0aHJlYWRfam9pbih0aHJlYWQsIFx1MDAyNnJldHZhbCk7XG4mIzQzO1x0XHRcdGlmICghQVNTRVJUX05VTEwocmV0dmFsLCBcJiMzNDtyZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXRocmVhZF9jcmVhdGVkIFx1MDAyNlx1MDAyNiBwIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0Y2xvc2UocCk7XG4mIzQzO1x0XHRpZiAoIXN1Y2Nlc3MpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0aWYgKGJ1ZilcbiYjNDM7XHRcdGZyZWUoYnVmKTtcbiYjNDM7XG4mIzQzO1x0dGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgY3JlYXRlX3VwZGF0ZV9mcmVlXCYjMzQ7KSlcbkBAIC0xNDUxLDQgJiM0MzsxNTgzLDggQEAgdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgdWRwIG11bHRpIGNoYW5uZWxzXCYjMzQ7KSlcbiBcdFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfREdSQU0pO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgcmVjdmZyb20gZWFnYWluXCYjMzQ7KSlcbiYjNDM7XHRcdHRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW4oZmFsc2UpO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O3NvY2ttYXAgcmVjdmZyb20gZWFnYWluIHdpdGggdmVyZGljdFwmIzM0OykpXG4mIzQzO1x0XHR0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKHRydWUpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDt0Y3BfbXNnX3dhaXRfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgVENQIHJlY2VpdmUgcGF0aCAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKSB0byBjb3JyZWN0bHkgaGFuZGxlIHNvY2tldCByZWNlaXZlIHRpbWVvdXRzIGFuZCBzcHVyaW91cyB3YWtldXBzIGJ5IHBhc3NpbmcgdGhlIHRpbWVvdXQgYnkgcmVmZXJlbmNlIHRvIHRjcF9tc2dfd2FpdF9kYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwZjg3Y2VhYjVhMDc4YWE5YWUwN2JhOTIzZWFhNzkwMDJmNzFmYzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyMiAxNToyNjowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuYwppbmRleCBjYzBiZDczZjM2YjZkNi4uMTc1NWZjZjcyNmZjYjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTsKIAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAogc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssCi0JCQkgICAgIGxvbmcgdGltZW8pCiYjNDM7CQkJICAgICBsb25nICp0aW1lbykKIHsKIAlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCWludCByZXQgPSAwOwpAQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAogCWlmIChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOKQogCQlyZXR1cm4gMTsKIAotCWlmICghdGltZW8pCiYjNDM7CWlmICghKnRpbWVvKQogCQlyZXR1cm4gcmV0OwogCiAJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQpOwogCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7Ci0JcmV0ID0gc2tfd2FpdF9ldmVudChzaywgJmFtcDt0aW1lbywKJiM0MzsJcmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sCiAJCQkgICAgIWxpc3RfZW1wdHkoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19tc2cpIHx8CiAJCQkgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSwgJmFtcDt3YWl0KTsKIAlza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJaW50IGNvcGllZF9mcm9tX3NlbGYgPSAwOwogCWludCBjb3BpZWQgPSAwOwogCXUzMiBzZXE7CiYjNDM7CWxvbmcgdGltZW87CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgTVNHX0VSUlFVRVVFKSkKIAkJcmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pOwpAQCAtMjYyLDYgJiM0MzsyNjMsOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQl9CiAJfQogCiYjNDM7CXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKJiM0MzsKIG1zZ19ieXRlc19yZWFkeToKIAljb3BpZWQgPSBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCAmYW1wO2NvcGllZF9mcm9tX3NlbGYpOwogCS8qIFRoZSB0eXBpY2FsIGNhc2UgZm9yIEVGQVVMVCBpcyB0aGUgc29ja2V0IHdhcyBncmFjZWZ1bGx5CkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJfQogCXNlcSAmIzQzOz0gY29waWVkX2Zyb21fc2VsZjsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAogCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQpAQCAtMjk5LDcgJiM0MzszMDEsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiAJCWlmICghdGltZW8pIHsKIAkJCWNvcGllZCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKQEAgLTMxMCwxMyAmIzQzOzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQljb3BpZWQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJaWYgKGRhdGEgJmFtcDsmYW1wOyAhc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKQogCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQlpZiAoIWRhdGEgJmFtcDsmYW1wOyB0aW1lbyAmZ3Q7IDApCiYjNDM7CQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiAJCWNvcGllZCA9IC1FQUdBSU47CiAJfQogb3V0OgpAQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIHsKIAlzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrOwogCWludCBjb3BpZWQsIHJldDsKJiM0MzsJbG9uZyB0aW1lbzsKIAogCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyBNU0dfRVJSUVVFVUUpKQogCQlyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7CkBAIC0zNzEsMTQgJiM0MzszNzUsNTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKIAl9CiAJbG9ja19zb2NrKHNrKTsKJiM0MzsKJiM0MzsJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwomIzQzOwogbXNnX2J5dGVzX3JlYWR5OgogCWNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7Ci0JCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTsKJiM0MzsJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gY2hlY2tfcXVldWVzOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSkKJiM0MzsJCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSkpIHsKJiM0MzsJCQkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiYjNDM7CQkJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0ID0gc29ja19lcnJvcihzayk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgewomIzQzOwkJCXJldCA9IDA7CiYjNDM7CQkJZ290byBjaGVja19xdWV1ZXM7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9DTE9TRSkgewomIzQzOwkJCXJldCA9IC1FTk9UQ09OTjsKJiM0MzsJCQlnb3RvIGNoZWNrX3F1ZXVlczsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghdGltZW8pIHsKJiM0MzsJCQlyZXQgPSAtRUFHQUlOOwomIzQzOwkJCWdvdG8gY2hlY2tfcXVldWVzOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJcmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTsKJiM0MzsJCQlnb3RvIGNoZWNrX3F1ZXVlczsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssICZhbXA7dGltZW8pOwogCQlpZiAoZGF0YSAmbHQ7IDApIHsKIAkJCXJldCA9IGRhdGE7CiAJCQlnb3RvIHVubG9jazsKQEAgLTM5MCw2ICYjNDM7NDMyLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCQlza19wc29ja19wdXQoc2ssIHBzb2NrKTsKIAkJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKIAkJfQomIzQzOwkJaWYgKCFkYXRhICZhbXA7JmFtcDsgdGltZW8gJmd0OyAwKQomIzQzOwkJCWdvdG8gbXNnX2J5dGVzX3JlYWR5OwogCQljb3BpZWQgPSAtRUFHQUlOOwogCX0KIAlyZXQgPSBjb3BpZWQ7CkBAIC0zOTgsNiAmIzQzOzQ0MiwxNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAlyZWxlYXNlX3NvY2soc2spOwogCXNrX3Bzb2NrX3B1dChzaywgcHNvY2spOwogCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7Y2hlY2tfcXVldWVzOgomIzQzOwlpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSkKJiM0MzsJCWdvdG8gbXNnX2J5dGVzX3JlYWR5OwomIzQzOwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkgewomIzQzOwkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCXNrX3Bzb2NrX3B1dChzaywgcHNvY2spOwomIzQzOwkJcmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpOwomIzQzOwl9CiYjNDM7CWdvdG8gdW5sb2NrOwogfQogCiBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwppbmRleCBjYjMyMjk3MTFmOTNhMy4uYWZkYTRkOTBlNTczNGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmMKQEAgLTEzNzMsNiAmIzQzOzEzNzMsMTM4IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhpbnQgc290eXBlKQogCXRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX2Rlc3Ryb3koc2tlbCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCAqdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJaW50IGZkID0gKihpbnQgKilhcmc7CiYjNDM7CWNoYXIgYnVmWzEwMjRdOwomIzQzOwl2b2lkICpyZXN1bHQgPSBOVUxMOwomIzQzOwomIzQzOwl3aGlsZSAodHJ1ZSkgewomIzQzOwkJc3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CQlpZiAobGVuID09IC0xKSB7CiYjNDM7CQkJaWYgKGVycm5vID09IEVJTlRSKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQlyZXN1bHQgPSAodm9pZCAqKTE7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWxlbiB8fCBidWZbbGVuIC0gMV0gPT0gJiMzOTtlJiMzOTspCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VuZChmZCwgJiMzNDt0ZXN0JiMzNDssIDQsIE1TR19OT1NJR05BTCk7CiYjNDM7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlc3VsdDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbihib29sIHdpdGhfdmVyZGljdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nICpza2VsID0gTlVMTDsKJiM0MzsJc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nID0gTlVMTDsKJiM0MzsJY2hhciAqYnVmID0gTlVMTDsKJiM0MzsJaW50IG1hcCwgZXJyOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHNlbmQuICBjb21wbGV0aW9uIG9mIHRoZSBzZW5kaW5nIGNhbiB0cmlnZ2VyIGEgc3B1cmlvdXMgd2FrZQomIzQzOwkgKiB1cC4gIGxhcmdlciB2YWx1ZXMgbWFrZSB0aGUgaXNzdWUgbW9yZSBsaWtlbHksIGJ1dCBtYWtlIHN1Y2Nlc3NmdWwgdGVzdCBydW5zIGxvbmdlci4KJiM0MzsJICovCiYjNDM7CWNvbnN0IHNpemVfdCBidWZsZW4gPSAxMDI0ICogMTAyNCAqIDI1OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyB0byByZXByb2R1Y2UgRUFHQUlOIG9uIHNwdXJpb3VzIHdha2UgdXAuICBtb3JlIGF0dGVtcHRzCiYjNDM7CSAqIGluY3JlYXNlcyB0aGUgY2hhbmNlcyBvZiB0cmlnZ2VyaW5nIHRoZSBpc3N1ZSwgYW5kIHRoZSB0ZXN0IGVuZHMgYXMgc29vbiBhcyB3ZSBkby4KJiM0MzsJICogaG93ZXZlciwgc3VjY2Vzc2Z1bCBydW5zIHdvdWxkIHRha2UgbG9uZ2VyIHRvIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJY29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDMwMDsKJiM0MzsKJiM0MzsJc2tlbCA9IHRlc3Rfc29ja21hcF9wYXNzX3Byb2dfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7b3Blbl9hbmRfbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWFwID0gYnBmX21hcF9fZmQoc2tlbC0mZ3Q7bWFwcy5zb2NrX21hcF9yeCk7CiYjNDM7CiYjNDM7CWlmICh3aXRoX3ZlcmRpY3QpIHsKJiM0MzsJCXByb2cgPSBza2VsLSZndDtwcm9ncy5wcm9nX3NrYl92ZXJkaWN0OwomIzQzOwkJZXJyID0gYnBmX3Byb2dfYXR0YWNoKGJwZl9wcm9ncmFtX19mZChwcm9nKSwgbWFwLCBCUEZfU0tfU0tCX1NUUkVBTV9WRVJESUNULCAwKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDticGZfcHJvZ19hdHRhY2ggdmVyZGljdCYjMzQ7KSkKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVmID0gbWFsbG9jKGJ1Zmxlbik7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihidWYsICYjMzQ7bWFsbG9jIGJ1ZiYjMzQ7KSkKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsJbWVtc2V0KGJ1ZiwgMCwgYnVmbGVuKTsKJiM0MzsJYnVmW2J1ZmxlbiAtIDFdID0gJiMzOTtlJiMzOTs7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgbWF4X2F0dGVtcHRzOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJc3NpemVfdCBsZW47CiYjNDM7CQljaGFyIGlnbm9yZWRbMTI4XTsKJiM0MzsJCXB0aHJlYWRfdCB0aHJlYWQ7CiYjNDM7CQlib29sIHRocmVhZF9jcmVhdGVkID0gZmFsc2U7CiYjNDM7CQlzaXplX3QgcmVtID0gYnVmbGVuOwomIzQzOwkJaW50IGMgPSAtMSwgcCA9IC0xLCB6ZXJvID0gMDsKJiM0MzsJCWJvb2wgc3VjY2VzcyA9IGZhbHNlOwomIzQzOwomIzQzOwkJZXJyID0gY3JlYXRlX3BhaXIoQUZfSU5FVCwgU09DS19TVFJFQU0sICZhbXA7YywgJmFtcDtwKTsKJiM0MzsJCWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtjcmVhdGVfcGFpciYjMzQ7KSkKJiM0MzsJCQlnb3RvIGVuZF9hdHRlbXB0OwomIzQzOwomIzQzOwkJZXJyID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWQsIE5VTEwsICZhbXA7dGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQsICZhbXA7cCk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7cHRocmVhZF9jcmVhdGUmIzM0OykpCiYjNDM7CQkJZ290byBlbmRfYXR0ZW1wdDsKJiM0MzsJCXRocmVhZF9jcmVhdGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCWVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwLCAmYW1wO3plcm8sICZhbXA7YywgQlBGX0FOWSk7CiYjNDM7CQlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YnBmX21hcF91cGRhdGVfZWxlbSYjMzQ7KSkKJiM0MzsJCQlnb3RvIGVuZF9hdHRlbXB0OwomIzQzOwomIzQzOwkJd2hpbGUgKHJlbSkgewomIzQzOwkJCWxlbiA9IHhzZW5kKGMsIGJ1ZiAmIzQzOyAoYnVmbGVuIC0gcmVtKSwgcmVtLCAwKTsKJiM0MzsJCQlpZiAobGVuID09IC0xKQomIzQzOwkJCQlnb3RvIGVuZF9hdHRlbXB0OwomIzQzOwkJCXJlbSAtPSBsZW47CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiB3ZSBjYW5ub3QgdXNlIHJlY3ZfdGltZW91dCgpLCBvdGhlcndpc2UgRUFHQUlOIHdvdWxkIGJlIGFuIGV4cGVjdGVkIGVycm5vLiAqLwomIzQzOwkJbGVuID0gcmVjdmZyb20oYywgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiB3ZSBhcmUgY2hlY2tpbmcgZm9yIHRoZSBpbnZhbGlkIHJldHVybiBvZiBFQUdBSU4sIGFueSBvdGhlciByZXR1cm4gaXMgY29uc2lkZXJlZAomIzQzOwkJICogc3VjY2Vzc2Z1bCBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGVzdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGxlbiAmbHQ7IDAgJmFtcDsmYW1wOyAhQVNTRVJUX05FUShlcnJubywgRUFHQUlOLCAmIzM0O3JlY3Zmcm9tIGVhZ2FpbiYjMzQ7KSkKJiM0MzsJCQlnb3RvIGVuZF9hdHRlbXB0OwomIzQzOwomIzQzOwkJc3VjY2VzcyA9IHRydWU7CiYjNDM7CiYjNDM7ZW5kX2F0dGVtcHQ6CiYjNDM7CQlpZiAoYyAmZ3Q7PSAwKQomIzQzOwkJCWNsb3NlKGMpOwomIzQzOwomIzQzOwkJaWYgKHRocmVhZF9jcmVhdGVkKSB7CiYjNDM7CQkJdm9pZCAqcmV0dmFsID0gTlVMTDsKJiM0MzsKJiM0MzsJCQlwdGhyZWFkX2pvaW4odGhyZWFkLCAmYW1wO3JldHZhbCk7CiYjNDM7CQkJaWYgKCFBU1NFUlRfTlVMTChyZXR2YWwsICYjMzQ7cmV0dmFsJiMzNDspKQomIzQzOwkJCQlzdWNjZXNzID0gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXRocmVhZF9jcmVhdGVkICZhbXA7JmFtcDsgcCAmZ3Q7PSAwKQomIzQzOwkJCWNsb3NlKHApOwomIzQzOwkJaWYgKCFzdWNjZXNzKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJaWYgKGJ1ZikKJiM0MzsJCWZyZWUoYnVmKTsKJiM0MzsKJiM0MzsJdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZ19fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKQogewogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCBjcmVhdGVfdXBkYXRlX2ZyZWUmIzM0OykpCkBAIC0xNDUxLDQgJiM0MzsxNTgzLDggQEAgdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZCkKIAkJdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfU1RSRUFNKTsKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3NvY2ttYXAgdWRwIG11bHRpIGNoYW5uZWxzJiMzNDspKQogCQl0ZXN0X3NvY2ttYXBfbXVsdGlfY2hhbm5lbHMoU09DS19ER1JBTSk7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7c29ja21hcCByZWN2ZnJvbSBlYWdhaW4mIzM0OykpCiYjNDM7CQl0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKGZhbHNlKTsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtzb2NrbWFwIHJlY3Zmcm9tIGVhZ2FpbiB3aXRoIHZlcmRpY3QmIzM0OykpCiYjNDM7CQl0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluKHRydWUpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgU29ja21hcCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgdHdlYWtzIHRvIHRoZSBCUEYgc29ja21hcCBjb2RlIHNwZWNpZmljYWxseSBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYC4gU2VlbXMgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgdGltZW91dHMgaW4gVENQLCBhbmQgaXQgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBgdGNwX21zZ193YWl0X2RhdGFgIGlzIHRoZSBjb3JlIG9mIGl0LiBUaGV5JiMzOTtyZSB1cGRhdGluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYSBgbG9uZyAqdGltZW9gIGluc3RlYWQgb2YganVzdCBgbG9uZyB0aW1lb2AsIHdoaWNoIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBwb2ludGVyLWJhc2VkIHRpbWVvdXQgbWVjaGFuaXNtLgoKRnJvbSB0aGUgZGVzY3JpcHRpb24sIHRoZSBwYXRjaCB0aGVuIGFkanVzdHMgdGhlIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AgZnVuY3Rpb25zIHRvIGNvcnJlY3RseSB1c2UgdGhpcyBuZXcgdGltZW91dCBwYXJhbWV0ZXIuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIHByZXZlbnQgc3B1cmlvdXMgYC1FQUdBSU5gIHJldHVybnMsIHdoaWNoIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgaW5jb3JyZWN0IHRpbWVvdXQgaGFuZGxpbmcgb3IgcmFjZSBjb25kaXRpb25zLiBUaGlzIGlzIGdvb2QgdG8gc2VlOyB0aGF0JiMzOTtzIGEgY29tbW9uIGFyZWEgZm9yIEJQRiBwcm9ncmFtcyB0byBtaXNiZWhhdmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIHNvY2tldCBsYXllci4KClNvLCB0aGlzIGlzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gVENQIHNvY2tldCBCUEYsIGltcGFjdGluZyBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZXNlIGZ1bmN0aW9ucyBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IuIFRpbWUgdG8gcHVsbCB1cCBteSB0cnVzdHkgZ3JlcCBhbmQgc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgaW1wYWN0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIHNvbWUgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIEJQRiBwcm9ncmFtcyB0aGF0IHJlbHkgb24gdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMjIwLVxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMi1cdFx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0zMzg9c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy0zNTUtXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzU2OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxubmV0L2lwdjQvdGNwX2JwZi5jLTM1Ny1cdFx0XHQgICBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTY3Nz1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODItXHRwcm90W1RDUF9CUEZfQkFTRV0uY2xvc2VcdFx0PSBzb2NrX21hcF9jbG9zZTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2ODM6XHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1x0XHQ9IHRjcF9icGZfcmVjdm1zZztcbm5ldC9pcHY0L3RjcF9icGYuYy02ODQtXHRwcm90W1RDUF9CUEZfQkFTRV0uc29ja19pc19yZWFkYWJsZVx0PSBza19tc2dfaXNfcmVhZGFibGU7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY5MC1cdHByb3RbVENQX0JQRl9SWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2OTE6XHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY5Mi1cbm5ldC9pcHY0L3RjcF9icGYuYy02OTMtXHRwcm90W1RDUF9CUEZfVFhSWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9UWF07XG5uZXQvaXB2NC90Y3BfYnBmLmM6Njk0Olx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY5NS19XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTcyNz1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUwLVx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxubmV0L2lwdjQvdGNwX2JwZi5jOjc1MTpcdCAqIFNLX1BBU1MsIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGFjayB1bnRpbCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKCkuXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUyLVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc0OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgcmVjdm1zZyBIYW5kbGVycyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIHRoZSBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBgcmVjdm1zZ2AgaGFuZGxlcnMgZm9yIGBUQ1BfQlBGX0JBU0VgLCBgVENQX0JQRl9SWGAsIGFuZCBgVENQX0JQRl9UWFJYYCBjb25maWd1cmF0aW9ucy4gTWFrZXMgc2Vuc2U7IHRoaXMgaXMgdGhlIHdheSB0byBwbHVtYiBCUEYgaW50byB0aGUgVENQIHJlY2VpdmUgcGF0aC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgcGF0aCwgcmVhY2hhYmxlIHZpYSBzb2NrbWFwL0JQRiwgc28gdGhhdCBpcyBmdW5jdGlvbmFsLiBJbnRlcmVzdGluZyB0aGF0IHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIHRvIGB0Y3BfbXNnX3dhaXRfZGF0YWAgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IGFuZCBzZWUgaG93IHRoZSB3YWl0IGZ1bmN0aW9uIGlzIGluZmx1ZW5jZWQuCgpOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVxdWlyZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIGFjdHVhbGx5IGFjdGl2ZSBpbiB0aGUga2VybmVsLiBUaGUgY29kZSBpdHNlbGYsIGBuZXQvaXB2NC90Y3BfYnBmLmNgLCBjb25maXJtcyBteSBzdXNwaWNpb24gYWJvdXQgdGhlIGxvY2F0aW9uLiBUaW1lIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBmZWF0dXJlcyBhcmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICYjNDM7PSB0Y3BfaWxsaW5vaXMub1xubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMgY29kZSBzbmlwcGV0OgoKKipEZWJ1Z2dpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIHNlZSBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19ORVRfU09DS19NU0dgLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBodXJkbGUuIEFuZCB0aGVuLCB0aGVyZSYjMzk7cyB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrIHdpdGggYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGd1YXJkaW5nIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIFRoYXQgc3VnZ2VzdHMgc29tZSBCUEYgaW50ZWdyYXRpb24gaGVyZSwgYW5kIGxpa2VseSwgYSBkZXBlbmRlbmN5IG9uIHRoZSBCUEYgc3lzY2FsbCBmZWF0dXJlLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBpbmRlZWQgZGVmaW5lZCB0aGVyZSwgYW5kIGNvbmZpcm0gaG93IGl0IGludGVyYWN0cyB3aXRoIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgVENQIG1lc3NhZ2Ugd2FpdGluZyBhbmQgdGhlIEJQRiBpbnRlZ3JhdGlvbiB0byBkZXRlcm1pbmUgaWYgSSBuZWVkIHRvIGVuYWJsZSB0aGlzIGNvbmZpZywgYW5kIGlmIHRoaXMgaXMgYSBmZWF0dXJlIEkmIzM5O20gZXZlbiBpbnRlcmVzdGVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19CUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYnBmLmM9MTc4PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc5LVxubmV0L2lwdjQvdGNwX2JwZi5jOjE4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTgxLXN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz04MDY9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy04MTItfVxubmV0L2lwdjQvdGNwX2JwZi5jOjgxMzojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAtIEJQRiBhbmQgTmV0d29yayBNZXNzYWdpbmcqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCB0aGVzZSBjb25maWd1cmF0aW9ucyBzdHJhaWdodC4gSSBrbm93IHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBwcmVyZXF1aXNpdGUsIHRoYXQmIzM5O3MgYSBnaXZlbi4gQW5kIEkmIzM5O20gYWxzbyBzZWVpbmcgdGhhdCBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgcmVxdWlyZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZW0uIElzIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCByZWxpYW50IG9uIGFub3RoZXIsIHBvdGVudGlhbGx5IG9ic2N1cmUgc2V0dGluZz8gT3IgcGVyaGFwcyBzb21ldGhpbmcgaGlnaGVyIHVwIHRoZSBjaGFpbiBpcyAqc2VsZWN0aW5nKiBpdD8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSBJIGZ1bGx5IGdyYXNwIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSBiZWhhdmlvciBJIG5lZWQgZnJvbSB0aGUga2VybmVsISBJJiMzOTtsbCBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHRyYWNlIHRoaXMgb3V0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBzYXkuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTU6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzYxPWNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuLS1cbm5ldC9LY29uZmlnLTM2Ni1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZzozNjc6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy0zNjgtXHRoZWxwXG4tLVxubmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXG4tLVxubmV0L0tjb25maWctNDc4LVxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTQ4MC1cdGJvb2xcbi0tXG5uZXQvS2NvbmZpZy00ODItXHRoZWxwXG5uZXQvS2NvbmZpZzo0ODM6XHQgIFRoZSBORVRfU09DS19NU0cgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHBsYWluIHNvY2tldHMgKGUuZy4gVENQKSBvclxubmV0L0tjb25maWctNDg0LVx0ICBVTFBzICh1cHBlciBsYXllciBtb2R1bGVzLCBlLmcuIFRMUykgdG8gcHJvY2VzcyBMNyBhcHBsaWNhdGlvbiBkYXRhXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIEZsb3c6IE5FVF9TT0NLX01TRyBhbmQgUmVsYXRlZCBDb21wb25lbnRzKioKCk9rYXksIHNvIEkgc2VlIGBORVRfU09DS19NU0dgIGlzIGZsYWdnZWQgYXMgYSBrZXkgaXRlbSBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXQgYXBwZWFycyBgQlBGX1NUUkVBTV9QQVJTRVJgIGFuZCBgVExTYCBhcmUgcmVzcG9uc2libGUgZm9yIHNlbGVjdGluZyBvciBpbnRlcmFjdGluZyB3aXRoIHRoaXMgbWVzc2FnZSB0eXBlLiBUaGF0IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgY2hlY2sgb2YgYEJQRl9TVFJFQU1fUEFSU0VSYCBhbmQgYEJQRl9TWVNDQUxMYCwgYmVjYXVzZSB0aG9zZSBhcmUgdGhlIGNvcmUgY29tcG9uZW50cyBpbnZvbHZlZCBpbiBob3cgaXQgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYXJzZXIgZnVuY3Rpb25zIGluIHJlbGF0aW9uIHRvIHN5c2NhbGwgcHJvY2Vzc2luZy4gVGhpcyBwcm9iYWJseSBib2lscyBkb3duIHRvIGEgZmV3IGNvcmUgcXVlc3Rpb25zOiBIb3cgZG9lcyB0aGUgcGFyc2VyIGlkZW50aWZ5IGBORVRfU09DS19NU0dgPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIGl0JiMzOTtzIGluY29ycmVjdCBvciBieXBhc3NlZD8gV2hhdCBhcmUgdGhlIGxpbWl0cyBvZiB0aGUgcGFyc2VyIHJlbGF0aXZlIHRvIHRoZSBzeXN0ZW0gY2FsbHM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MzU0PWNvbmZpZyBCUUxcbi0tXG5uZXQvS2NvbmZpZy0zNjAtXG5uZXQvS2NvbmZpZzozNjE6Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG5uZXQvS2NvbmZpZy0zNjItXHRib29sIFwmIzM0O2VuYWJsZSBCUEYgU1RSRUFNX1BBUlNFUlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIEJQRiBTdHJlYW1pbmcgYW5kIENncm91cCBCUEYgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBsZXZlcmFnaW5nIGBCUEZfU1RSRUFNX1BBUlNFUmAg4oCTIHRoYXQgc2VlbXMgbGlrZSBhIHByb21pc2luZyBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdhaXQsIGlzbiYjMzk7dCBgQ0dST1VQX0JQRmAgYWxzbyBpbnRpbWF0ZWx5IGNvbm5lY3RlZCB0byB0aGUgQlBGIGxhbmRzY2FwZT8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBoZXJlLiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIHRoZSBiZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gYG5ldC9LY29uZmlnYCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJQRl9TVFJFQU1fUEFSU0VSYC4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCBvdGhlciBvcHRpb25zIG9yIGZlYXR1cmVzIG5lZWQgdG8gYmUgaW4gcGxhY2UgdG8gZWZmZWN0aXZlbHkgdXNlIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgaW1wbGljYXRpb25zIGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjA6XHRcbiAzNjE6XHRjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbiAzNjI6XHRcdGJvb2wgXCYjMzQ7ZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXCYjMzQ7XG4gMzYzOlx0XHRkZXBlbmRzIG9uIElORVRcbiAzNjQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAzNjU6XHRcdGRlcGVuZHMgb24gQ0dST1VQX0JQRlxuIDM2NjpcdFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbiAzNjc6XHRcdHNlbGVjdCBORVRfU09DS19NU0dcbiAzNjg6XHRcdGhlbHBcbiAzNjk6XHRcdCAgRW5hYmxpbmcgdGhpcyBhbGxvd3MgYSBUQ1Agc3RyZWFtIHBhcnNlciB0byBiZSB1c2VkIHdpdGhcbiAzNzA6XHRcdCAgQlBGX01BUF9UWVBFX1NPQ0tNQVAuXG4gMzcxOlx0XG4gMzcyOlx0Y29uZmlnIE5FVF9GTE9XX0xJTUlUXG4gMzczOlx0XHRib29sIFwmIzM0O05ldCBmbG93IGxpbWl0XCYjMzQ7XG4gMzc0Olx0XHRkZXBlbmRzIG9uIFJQU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDM0CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDkzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBCUEYgU29ja21hcCBSZWNlaXZlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgQlBGIHN0cmVhbSBwYXJzZXIgZnVuY3Rpb25hbGl0eSwgYW5kIHRoYXQgaGluZ2VzIG9uIGBJTkVUYCwgYEJQRl9TWVNDQUxMYCwgYW5kIGBDR1JPVVBfQlBGYC4gSSYjMzk7bGwgYmUgc3VyZSB0byBlbmFibGUgdGhvc2UsIGFsb25nIHdpdGggYEJQRl9TVFJFQU1fUEFSU0VSYCBhbmQgYE5FVF9TT0NLX01TR2AuCgpUaGUgY29kZSBtb2RpZmllcyBgdGNwX21zZ193YWl0X2RhdGFgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gSSYjMzk7bGwgZGVmaW5pdGVseSBhZGQgYHRjcF9icGZfcmVjdm1zZ2AgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCB0byBgRm9jdXNTeW1ib2xzYC4gRXZlbiB0aG91Z2ggYHRjcF9tc2dfd2FpdF9kYXRhYCBpcyBzdGF0aWMsIEkmIzM5O2xsIGluY2x1ZGUgaXQgdG9vIHRvIGJlIHNhZmUuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MuIEFoYSwgdGhlIHRlc3QgdXNlcyBgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVGAuIFRoYXQgc2NyZWFtcyBzb2NrbWFwLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgd2hpY2ggYXJlIGNyaXRpY2FsIGZvciBzb2NrbWFwIFRDUCByZWNlaXZlLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZXhhbWluaW5nLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb25zLiBMb29rcyBsaWtlIHRob3NlIGFyZSB0aGUgb25seSB0aHJlZSBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBhY3R1YWwgY2hhbmdlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9tc2dfd2FpdF9kYXRhYCB0byB0YWtlIHRoZSB0aW1lb3V0IGFzIGEgcG9pbnRlciwgbm90IGEgdmFsdWUuIEl0IHNlZW1zIHRoYXQgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSB0aW1lb3V0IHdhc24mIzM5O3QgYmVpbmcgY29ycmVjdGx5IHVwZGF0ZWQgaW4gdGhlIGNhbGxlciBpZiB0aGUgY2FsbCB0byBgc2tfd2FpdF9ldmVudGAgd29rZSB1cCBzcHVyaW91c2x5LiBJdCBsb29rcyBsaWtlIGB0Y3BfYnBmX3JlY3Ztc2dgIGhhcyBhIGBtc2dfYnl0ZXNfcmVhZHlgIGxhYmVsLCBzbyBpZiBgdGNwX21zZ193YWl0X2RhdGFgIHdva2UgdXAgYnV0IG5vIGRhdGEgYXJyaXZlZCwgdGhlbiB0aGUgY29kZSB3aWxsIGNoZWNrIGB0aW1lbyAmZ3Q7IDBgIGFuZCByZXRyeS4gQmFzaWNhbGx5LCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gd291bGQga2VlcCByZXR1cm5pbmcgYC1FQUdBSU5gIG9yIGxvb3AgZW5kbGVzc2x5IGluIHRoZSBjYXNlIG9mIGEgc3B1cmlvdXMgd2FrZXVwLiBCeSBwYXNzaW5nIHRoZSB0aW1lb3V0IGJ5IHJlZmVyZW5jZSwgYHRjcF9icGZfcmVjdm1zZ2AgY2FuIGNvcnJlY3RseSByZXRyeS4KClRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGVyZWZvcmUsIEkmIzM5O2xsIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLgoKU28sIHRoZSBjb25maWdzIEkgbmVlZDoKKiAgIGBCUEZfU1lTQ0FMTGAKKiAgIGBCUEZfU1RSRUFNX1BBUlNFUmAKKiAgIGBORVRfU09DS19NU0dgCiogICBgQ0dST1VQX0JQRmAKCk15IGBGb2N1c1N5bWJvbHNgOgoqICAgYHRjcF9icGZfcmVjdm1zZ2AKKiAgIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYAoqICAgYHRjcF9tc2dfd2FpdF9kYXRhYAoKVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB0aGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiBzb2NrbWFwIFRDUCByZWNlaXZlIHBhdGggKGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmApIHRvIGNvcnJlY3RseSBoYW5kbGUgc29ja2V0IHJlY2VpdmUgdGltZW91dHMgYW5kIHNwdXJpb3VzIHdha2V1cHMgYnkgcGFzc2luZyB0aGUgdGltZW91dCBieSByZWZlcmVuY2UgdG8gYHRjcF9tc2dfd2FpdF9kYXRhYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc28gaXQmIzM5O3MgYSBnb29kIHRhcmdldC4KCkV2ZW4gdGhvdWdoIGB0Y3BfbXNnX3dhaXRfZGF0YWAgaXMgc3RhdGljLCBJJiMzOTtsbCBpbmNsdWRlIGl0LiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LCBldmVuIGlmIGl0IG1pZ2h0IGJlIGlubGluZWQuCgpOb3cgSSYjMzk7bGwgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDssCiAgICAmIzM0O0NHUk9VUF9CUEYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDt0Y3BfbXNnX3dhaXRfZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgVENQIHJlY2VpdmUgcGF0aCAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKSB0byBjb3JyZWN0bHkgaGFuZGxlIHNvY2tldCByZWNlaXZlIHRpbWVvdXRzIGFuZCBzcHVyaW91cyB3YWtldXBzIGJ5IHBhc3NpbmcgdGhlIHRpbWVvdXQgYnkgcmVmZXJlbmNlIHRvIHRjcF9tc2dfd2FpdF9kYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9TVFJFQU1fUEFSU0VSJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzb2NrbWFwIFRDUCByZWNlaXZlIHBhdGggKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikgdG8gY29ycmVjdGx5IGhhbmRsZSBzb2NrZXQgcmVjZWl2ZSB0aW1lb3V0cyBhbmQgc3B1cmlvdXMgd2FrZXVwcyBieSBwYXNzaW5nIHRoZSB0aW1lb3V0IGJ5IHJlZmVyZW5jZSB0byB0Y3BfbXNnX3dhaXRfZGF0YS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHNvY2ttYXApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6MTAuMjkyOTk4OTU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NzQzNDIyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9TVFJFQU1fUEFSU0VSXCIsXG4gICAgXCJORVRfU09DS19NU0dcIixcbiAgICBcIkNHUk9VUF9CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBzb2NrbWFwIFRDUCByZWNlaXZlIHBhdGggKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikgdG8gY29ycmVjdGx5IGhhbmRsZSBzb2NrZXQgcmVjZWl2ZSB0aW1lb3V0cyBhbmQgc3B1cmlvdXMgd2FrZXVwcyBieSBwYXNzaW5nIHRoZSB0aW1lb3V0IGJ5IHJlZmVyZW5jZSB0byB0Y3BfbXNnX3dhaXRfZGF0YS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyAoQlBGIHNvY2ttYXApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjoxMC4yOTMwMDQ0MDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODU5NzU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUwZjg3Y2VhYjVhMDc4YWE5YWUwN2JhOTIzZWFhNzkwMDJmNzFmYzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTU6MjY6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXFxuaW5kZXggY2MwYmQ3M2YzNmI2ZDYuLjE3NTVmY2Y3MjZmY2I4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xcbkBAIC0xNzksNyArMTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG4gc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuLVxcdFxcdFxcdCAgICAgbG9uZyB0aW1lbylcXG4rXFx0XFx0XFx0ICAgICBsb25nICp0aW1lbylcXG4ge1xcbiBcXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG5AQCAtMTg3LDEyICsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXFxuIFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXG4tXFx0aWYgKCF0aW1lbylcXG4rXFx0aWYgKCEqdGltZW8pXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksIFxcdTAwMjZ3YWl0KTtcXG4gXFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcXG4tXFx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXFx1MDAyNnRpbWVvLFxcbitcXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCB0aW1lbyxcXG4gXFx0XFx0XFx0ICAgICFsaXN0X2VtcHR5KFxcdTAwMjZwc29jay1cXHUwMDNlaW5ncmVzc19tc2cpIHx8XFxuIFxcdFxcdFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSksIFxcdTAwMjZ3YWl0KTtcXG4gXFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xcbkBAIC0yMjksNiArMjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0aW50IGNvcGllZF9mcm9tX3NlbGYgPSAwO1xcbiBcXHRpbnQgY29waWVkID0gMDtcXG4gXFx0dTMyIHNlcTtcXG4rXFx0bG9uZyB0aW1lbztcXG4gXFxuIFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuIFxcdFxcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcXG5AQCAtMjYyLDYgKzI2Myw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuK1xcbiBtc2dfYnl0ZXNfcmVhZHk6XFxuIFxcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFxcdTAwMjZjb3BpZWRfZnJvbV9zZWxmKTtcXG4gXFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcXG5AQCAtMjgwLDcgKzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdH1cXG4gXFx0c2VxICs9IGNvcGllZF9mcm9tX3NlbGY7XFxuIFxcdGlmICghY29waWVkKSB7XFxuLVxcdFxcdGxvbmcgdGltZW87XFxuIFxcdFxcdGludCBkYXRhO1xcbiBcXG4gXFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSlcXG5AQCAtMjk5LDcgKzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4gXFx0XFx0aWYgKCF0aW1lbykge1xcbiBcXHRcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG5AQCAtMzEwLDEzICszMTEsMTUgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcXG4rXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXFx1MDAyNnRpbWVvKTtcXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdGNvcGllZCA9IGRhdGE7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChkYXRhIFxcdTAwMjZcXHUwMDI2ICFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXFxuIFxcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbitcXHRcXHRpZiAoIWRhdGEgXFx1MDAyNlxcdTAwMjYgdGltZW8gXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcXG4gXFx0XFx0Y29waWVkID0gLUVBR0FJTjtcXG4gXFx0fVxcbiBvdXQ6XFxuQEAgLTM1NSw2ICszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrO1xcbiBcXHRpbnQgY29waWVkLCByZXQ7XFxuK1xcdGxvbmcgdGltZW87XFxuIFxcbiBcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxcbiBcXHRcXHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XFxuQEAgLTM3MSwxNCArMzc1LDUyIEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiBcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdH1cXG4gXFx0bG9ja19zb2NrKHNrKTtcXG4rXFxuK1xcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbitcXG4gbXNnX2J5dGVzX3JlYWR5OlxcbiBcXHRjb3BpZWQgPSBza19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdGlmICghY29waWVkKSB7XFxuLVxcdFxcdGxvbmcgdGltZW87XFxuIFxcdFxcdGludCBkYXRhO1xcbiBcXG4tXFx0XFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuLVxcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcXG4rXFx0XFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkge1xcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHRnb3RvIGNoZWNrX3F1ZXVlcztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19lcnIpIHtcXG4rXFx0XFx0XFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXFxuK1xcdFxcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbitcXHRcXHRcXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XFxuK1xcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdFxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0ID0gc29ja19lcnJvcihzayk7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3NodXRkb3duIFxcdTAwMjYgUkNWX1NIVVRET1dOKSB7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gY2hlY2tfcXVldWVzO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PVENPTk47XFxuK1xcdFxcdFxcdGdvdG8gY2hlY2tfcXVldWVzO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIXRpbWVvKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuK1xcdFxcdFxcdGdvdG8gY2hlY2tfcXVldWVzO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcXG4rXFx0XFx0XFx0Z290byBjaGVja19xdWV1ZXM7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIFxcdTAwMjZ0aW1lbyk7XFxuIFxcdFxcdGlmIChkYXRhIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRyZXQgPSBkYXRhO1xcbiBcXHRcXHRcXHRnb3RvIHVubG9jaztcXG5AQCAtMzkwLDYgKzQzMiw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiBcXHRcXHRcXHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGlmICghZGF0YSBcXHUwMDI2XFx1MDAyNiB0aW1lbyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbiBcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcdHJldCA9IGNvcGllZDtcXG5AQCAtMzk4LDYgKzQ0MiwxNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gXFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XFxuIFxcdHJldHVybiByZXQ7XFxuK1xcbitjaGVja19xdWV1ZXM6XFxuK1xcdGlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxcbitcXHRcXHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcXG4rXFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSkge1xcbitcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXHRcXHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcXG4rXFx0XFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xcbitcXHR9XFxuK1xcdGdvdG8gdW5sb2NrO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHRjcF9icGZfc2VuZF92ZXJkaWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXFxuaW5kZXggY2IzMjI5NzExZjkzYTMuLmFmZGE0ZDkwZTU3MzRhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xcbkBAIC0xMzczLDYgKzEzNzMsMTM4IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhpbnQgc290eXBlKVxcbiBcXHR0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19kZXN0cm95KHNrZWwpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCAqdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQodm9pZCAqYXJnKVxcbit7XFxuK1xcdGludCBmZCA9ICooaW50ICopYXJnO1xcbitcXHRjaGFyIGJ1ZlsxMDI0XTtcXG4rXFx0dm9pZCAqcmVzdWx0ID0gTlVMTDtcXG4rXFxuK1xcdHdoaWxlICh0cnVlKSB7XFxuK1xcdFxcdHNzaXplX3QgbGVuID0gcmVjdmZyb20oZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDAsIE5VTEwsIE5VTEwpO1xcbitcXG4rXFx0XFx0aWYgKGxlbiA9PSAtMSkge1xcbitcXHRcXHRcXHRpZiAoZXJybm8gPT0gRUlOVFIpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRyZXN1bHQgPSAodm9pZCAqKTE7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoIWxlbiB8fCBidWZbbGVuIC0gMV0gPT0gJ2UnKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0c2VuZChmZCwgXFxcInRlc3RcXFwiLCA0LCBNU0dfTk9TSUdOQUwpO1xcbitcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXG4rXFx0cmV0dXJuIHJlc3VsdDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbihib29sIHdpdGhfdmVyZGljdClcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZyAqc2tlbCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyA9IE5VTEw7XFxuK1xcdGNoYXIgKmJ1ZiA9IE5VTEw7XFxuK1xcdGludCBtYXAsIGVycjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gc2VuZC4gIGNvbXBsZXRpb24gb2YgdGhlIHNlbmRpbmcgY2FuIHRyaWdnZXIgYSBzcHVyaW91cyB3YWtlXFxuK1xcdCAqIHVwLiAgbGFyZ2VyIHZhbHVlcyBtYWtlIHRoZSBpc3N1ZSBtb3JlIGxpa2VseSwgYnV0IG1ha2Ugc3VjY2Vzc2Z1bCB0ZXN0IHJ1bnMgbG9uZ2VyLlxcbitcXHQgKi9cXG4rXFx0Y29uc3Qgc2l6ZV90IGJ1ZmxlbiA9IDEwMjQgKiAxMDI0ICogMjU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyB0byByZXByb2R1Y2UgRUFHQUlOIG9uIHNwdXJpb3VzIHdha2UgdXAuICBtb3JlIGF0dGVtcHRzXFxuK1xcdCAqIGluY3JlYXNlcyB0aGUgY2hhbmNlcyBvZiB0cmlnZ2VyaW5nIHRoZSBpc3N1ZSwgYW5kIHRoZSB0ZXN0IGVuZHMgYXMgc29vbiBhcyB3ZSBkby5cXG4rXFx0ICogaG93ZXZlciwgc3VjY2Vzc2Z1bCBydW5zIHdvdWxkIHRha2UgbG9uZ2VyIHRvIGNvbXBsZXRlLlxcbitcXHQgKi9cXG4rXFx0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDMwMDtcXG4rXFxuK1xcdHNrZWwgPSB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19vcGVuX2FuZF9sb2FkKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwib3Blbl9hbmRfbG9hZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtYXAgPSBicGZfbWFwX19mZChza2VsLVxcdTAwM2VtYXBzLnNvY2tfbWFwX3J4KTtcXG4rXFxuK1xcdGlmICh3aXRoX3ZlcmRpY3QpIHtcXG4rXFx0XFx0cHJvZyA9IHNrZWwtXFx1MDAzZXByb2dzLnByb2dfc2tiX3ZlcmRpY3Q7XFxuK1xcdFxcdGVyciA9IGJwZl9wcm9nX2F0dGFjaChicGZfcHJvZ3JhbV9fZmQocHJvZyksIG1hcCwgQlBGX1NLX1NLQl9TVFJFQU1fVkVSRElDVCwgMCk7XFxuK1xcdFxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcImJwZl9wcm9nX2F0dGFjaCB2ZXJkaWN0XFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0YnVmID0gbWFsbG9jKGJ1Zmxlbik7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihidWYsIFxcXCJtYWxsb2MgYnVmXFxcIikpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0bWVtc2V0KGJ1ZiwgMCwgYnVmbGVuKTtcXG4rXFx0YnVmW2J1ZmxlbiAtIDFdID0gJ2UnO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBtYXhfYXR0ZW1wdHM7ICsraSkge1xcbitcXHRcXHRzc2l6ZV90IGxlbjtcXG4rXFx0XFx0Y2hhciBpZ25vcmVkWzEyOF07XFxuK1xcdFxcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdFxcdGJvb2wgdGhyZWFkX2NyZWF0ZWQgPSBmYWxzZTtcXG4rXFx0XFx0c2l6ZV90IHJlbSA9IGJ1ZmxlbjtcXG4rXFx0XFx0aW50IGMgPSAtMSwgcCA9IC0xLCB6ZXJvID0gMDtcXG4rXFx0XFx0Ym9vbCBzdWNjZXNzID0gZmFsc2U7XFxuK1xcbitcXHRcXHRlcnIgPSBjcmVhdGVfcGFpcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgXFx1MDAyNmMsIFxcdTAwMjZwKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiY3JlYXRlX3BhaXJcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBlbmRfYXR0ZW1wdDtcXG4rXFxuK1xcdFxcdGVyciA9IHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWQsIE5VTEwsIFxcdTAwMjZ0ZXN0X3NvY2ttYXBfcmVjdmZyb21fZWFnYWluX3RocmVhZCwgXFx1MDAyNnApO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJwdGhyZWFkX2NyZWF0ZVxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIGVuZF9hdHRlbXB0O1xcbitcXHRcXHR0aHJlYWRfY3JlYXRlZCA9IHRydWU7XFxuK1xcbitcXHRcXHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcCwgXFx1MDAyNnplcm8sIFxcdTAwMjZjLCBCUEZfQU5ZKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYnBmX21hcF91cGRhdGVfZWxlbVxcXCIpKVxcbitcXHRcXHRcXHRnb3RvIGVuZF9hdHRlbXB0O1xcbitcXG4rXFx0XFx0d2hpbGUgKHJlbSkge1xcbitcXHRcXHRcXHRsZW4gPSB4c2VuZChjLCBidWYgKyAoYnVmbGVuIC0gcmVtKSwgcmVtLCAwKTtcXG4rXFx0XFx0XFx0aWYgKGxlbiA9PSAtMSlcXG4rXFx0XFx0XFx0XFx0Z290byBlbmRfYXR0ZW1wdDtcXG4rXFx0XFx0XFx0cmVtIC09IGxlbjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Lyogd2UgY2Fubm90IHVzZSByZWN2X3RpbWVvdXQoKSwgb3RoZXJ3aXNlIEVBR0FJTiB3b3VsZCBiZSBhbiBleHBlY3RlZCBlcnJuby4gKi9cXG4rXFx0XFx0bGVuID0gcmVjdmZyb20oYywgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIHdlIGFyZSBjaGVja2luZyBmb3IgdGhlIGludmFsaWQgcmV0dXJuIG9mIEVBR0FJTiwgYW55IG90aGVyIHJldHVybiBpcyBjb25zaWRlcmVkXFxuK1xcdFxcdCAqIHN1Y2Nlc3NmdWwgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHRlc3QuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiAhQVNTRVJUX05FUShlcnJubywgRUFHQUlOLCBcXFwicmVjdmZyb20gZWFnYWluXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gZW5kX2F0dGVtcHQ7XFxuK1xcbitcXHRcXHRzdWNjZXNzID0gdHJ1ZTtcXG4rXFxuK2VuZF9hdHRlbXB0OlxcbitcXHRcXHRpZiAoYyBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRjbG9zZShjKTtcXG4rXFxuK1xcdFxcdGlmICh0aHJlYWRfY3JlYXRlZCkge1xcbitcXHRcXHRcXHR2b2lkICpyZXR2YWwgPSBOVUxMO1xcbitcXG4rXFx0XFx0XFx0cHRocmVhZF9qb2luKHRocmVhZCwgXFx1MDAyNnJldHZhbCk7XFxuK1xcdFxcdFxcdGlmICghQVNTRVJUX05VTEwocmV0dmFsLCBcXFwicmV0dmFsXFxcIikpXFxuK1xcdFxcdFxcdFxcdHN1Y2Nlc3MgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCF0aHJlYWRfY3JlYXRlZCBcXHUwMDI2XFx1MDAyNiBwIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdGNsb3NlKHApO1xcbitcXHRcXHRpZiAoIXN1Y2Nlc3MpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitjbGVhbnVwOlxcbitcXHRpZiAoYnVmKVxcbitcXHRcXHRmcmVlKGJ1Zik7XFxuK1xcbitcXHR0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbiB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxcbiB7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIGNyZWF0ZV91cGRhdGVfZnJlZVxcXCIpKVxcbkBAIC0xNDUxLDQgKzE1ODMsOCBAQCB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxcbiBcXHRcXHR0ZXN0X3NvY2ttYXBfbXVsdGlfY2hhbm5lbHMoU09DS19TVFJFQU0pO1xcbiBcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCB1ZHAgbXVsdGkgY2hhbm5lbHNcXFwiKSlcXG4gXFx0XFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfREdSQU0pO1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwic29ja21hcCByZWN2ZnJvbSBlYWdhaW5cXFwiKSlcXG4rXFx0XFx0dGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2FpbihmYWxzZSk7XFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJzb2NrbWFwIHJlY3Zmcm9tIGVhZ2FpbiB3aXRoIHZlcmRpY3RcXFwiKSlcXG4rXFx0XFx0dGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbih0cnVlKTtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjoxMC45MTI1ODkxOTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MzM1NDc0MjMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIk5FVF9TT0NLX01TR1wiLFxuICAgIFwiQ0dST1VQX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwidGNwX21zZ193YWl0X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgVENQIHJlY2VpdmUgcGF0aCAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKSB0byBjb3JyZWN0bHkgaGFuZGxlIHNvY2tldCByZWNlaXZlIHRpbWVvdXRzIGFuZCBzcHVyaW91cyB3YWtldXBzIGJ5IHBhc3NpbmcgdGhlIHRpbWVvdXQgYnkgcmVmZXJlbmNlIHRvIHRjcF9tc2dfd2FpdF9kYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTBmODdjZWFiNWEwNzhhYTlhZTA3YmE5MjNlYWE3OTAwMmY3MWZjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE1OjI2OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5pbmRleCBjYzBiZDczZjM2YjZkNi4uMTc1NWZjZjcyNmZjYjggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTE3OSw3ICsxNzksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xuIFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbiBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbi1cdFx0XHQgICAgIGxvbmcgdGltZW8pXG4rXHRcdFx0ICAgICBsb25nICp0aW1lbylcbiB7XG4gXHRERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pO1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTg3LDEyICsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4gXHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTilcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAoIXRpbWVvKVxuK1x0aWYgKCEqdGltZW8pXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksIFx1MDAyNndhaXQpO1xuIFx0c2tfc2V0X2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbi1cdHJldCA9IHNrX3dhaXRfZXZlbnQoc2ssIFx1MDAyNnRpbWVvLFxuK1x0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sXG4gXHRcdFx0ICAgICFsaXN0X2VtcHR5KFx1MDAyNnBzb2NrLVx1MDAzZWluZ3Jlc3NfbXNnKSB8fFxuIFx0XHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfV0FJVERBVEEsIHNrKTtcbkBAIC0yMjksNiArMjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdGludCBjb3BpZWRfZnJvbV9zZWxmID0gMDtcbiBcdGludCBjb3BpZWQgPSAwO1xuIFx0dTMyIHNlcTtcbitcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0yNjIsNiArMjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbitcbiBtc2dfYnl0ZXNfcmVhZHk6XG4gXHRjb3BpZWQgPSBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCBcdTAwMjZjb3BpZWRfZnJvbV9zZWxmKTtcbiBcdC8qIFRoZSB0eXBpY2FsIGNhc2UgZm9yIEVGQVVMVCBpcyB0aGUgc29ja2V0IHdhcyBncmFjZWZ1bGx5XG5AQCAtMjgwLDcgKzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHR9XG4gXHRzZXEgKz0gY29waWVkX2Zyb21fc2VsZjtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuIFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuQEAgLTI5OSw3ICszMDEsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4gXHRcdGlmICghdGltZW8pIHtcbiBcdFx0XHRjb3BpZWQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuQEAgLTMxMCwxMyArMzExLDE1IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xuK1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0Y29waWVkID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHRpZiAoZGF0YSBcdTAwMjZcdTAwMjYgIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbiBcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbitcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbitcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBvdXQ6XG5AQCAtMzU1LDYgKzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIHtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4gXHRpbnQgY29waWVkLCByZXQ7XG4rXHRsb25nIHRpbWVvO1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxuIFx0XHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XG5AQCAtMzcxLDE0ICszNzUsNTIgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdH1cbiBcdGxvY2tfc29jayhzayk7XG4rXG4rXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuK1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4rXHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHtcbitcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbitcdFx0XHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbitcdFx0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuK1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4rXHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4rXHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4rXHRcdFx0fVxuK1x0XHRcdHJldCA9IHNvY2tfZXJyb3Ioc2spO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKSB7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0XHRnb3RvIGNoZWNrX3F1ZXVlcztcbitcdFx0fVxuK1xuK1x0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XG4rXHRcdFx0cmV0ID0gLUVOT1RDT05OO1xuK1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghdGltZW8pIHtcbitcdFx0XHRyZXQgPSAtRUFHQUlOO1xuK1x0XHRcdGdvdG8gY2hlY2tfcXVldWVzO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdHJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XG4rXHRcdFx0Z290byBjaGVja19xdWV1ZXM7XG4rXHRcdH1cbitcbitcdFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXHUwMDI2dGltZW8pO1xuIFx0XHRpZiAoZGF0YSBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IGRhdGE7XG4gXHRcdFx0Z290byB1bmxvY2s7XG5AQCAtMzkwLDYgKzQzMiw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuIFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiBcdFx0fVxuK1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuK1x0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuIFx0XHRjb3BpZWQgPSAtRUFHQUlOO1xuIFx0fVxuIFx0cmV0ID0gY29waWVkO1xuQEAgLTM5OCw2ICs0NDIsMTYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRyZWxlYXNlX3NvY2soc2spO1xuIFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4gXHRyZXR1cm4gcmV0O1xuK1xuK2NoZWNrX3F1ZXVlczpcbitcdGlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxuK1x0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbitcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuK1x0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4rXHR9XG4rXHRnb3RvIHVubG9jaztcbiB9XG4gXG4gc3RhdGljIGludCB0Y3BfYnBmX3NlbmRfdmVyZGljdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9iYXNpYy5jXG5pbmRleCBjYjMyMjk3MTFmOTNhMy4uYWZkYTRkOTBlNTczNGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2Jhc2ljLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfYmFzaWMuY1xuQEAgLTEzNzMsNiArMTM3MywxMzggQEAgc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKGludCBzb3R5cGUpXG4gXHR0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19kZXN0cm95KHNrZWwpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCAqdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbl90aHJlYWQodm9pZCAqYXJnKVxuK3tcbitcdGludCBmZCA9ICooaW50ICopYXJnO1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHR2b2lkICpyZXN1bHQgPSBOVUxMO1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0c3NpemVfdCBsZW4gPSByZWN2ZnJvbShmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgTlVMTCwgTlVMTCk7XG4rXG4rXHRcdGlmIChsZW4gPT0gLTEpIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRyZXN1bHQgPSAodm9pZCAqKTE7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFsZW4gfHwgYnVmW2xlbiAtIDFdID09ICdlJylcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdHNlbmQoZmQsIFwidGVzdFwiLCA0LCBNU0dfTk9TSUdOQUwpO1xuK1xuK1x0Y2xvc2UoZmQpO1xuK1xuK1x0cmV0dXJuIHJlc3VsdDtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX3JlY3Zmcm9tX2VhZ2Fpbihib29sIHdpdGhfdmVyZGljdClcbit7XG4rXHRzdHJ1Y3QgdGVzdF9zb2NrbWFwX3Bhc3NfcHJvZyAqc2tlbCA9IE5VTEw7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2cgPSBOVUxMO1xuK1x0Y2hhciAqYnVmID0gTlVMTDtcbitcdGludCBtYXAsIGVycjtcbitcbitcdC8qXG4rXHQgKiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHNlbmQuICBjb21wbGV0aW9uIG9mIHRoZSBzZW5kaW5nIGNhbiB0cmlnZ2VyIGEgc3B1cmlvdXMgd2FrZVxuK1x0ICogdXAuICBsYXJnZXIgdmFsdWVzIG1ha2UgdGhlIGlzc3VlIG1vcmUgbGlrZWx5LCBidXQgbWFrZSBzdWNjZXNzZnVsIHRlc3QgcnVucyBsb25nZXIuXG4rXHQgKi9cbitcdGNvbnN0IHNpemVfdCBidWZsZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xuK1xuK1x0LypcbitcdCAqIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIHRvIHJlcHJvZHVjZSBFQUdBSU4gb24gc3B1cmlvdXMgd2FrZSB1cC4gIG1vcmUgYXR0ZW1wdHNcbitcdCAqIGluY3JlYXNlcyB0aGUgY2hhbmNlcyBvZiB0cmlnZ2VyaW5nIHRoZSBpc3N1ZSwgYW5kIHRoZSB0ZXN0IGVuZHMgYXMgc29vbiBhcyB3ZSBkby5cbitcdCAqIGhvd2V2ZXIsIHN1Y2Nlc3NmdWwgcnVucyB3b3VsZCB0YWtlIGxvbmdlciB0byBjb21wbGV0ZS5cbitcdCAqL1xuK1x0Y29uc3QgaW50IG1heF9hdHRlbXB0cyA9IDMwMDtcbitcbitcdHNrZWwgPSB0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtYXAgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMuc29ja19tYXBfcngpO1xuK1xuK1x0aWYgKHdpdGhfdmVyZGljdCkge1xuK1x0XHRwcm9nID0gc2tlbC1cdTAwM2Vwcm9ncy5wcm9nX3NrYl92ZXJkaWN0O1xuK1x0XHRlcnIgPSBicGZfcHJvZ19hdHRhY2goYnBmX3Byb2dyYW1fX2ZkKHByb2cpLCBtYXAsIEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1QsIDApO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX3Byb2dfYXR0YWNoIHZlcmRpY3RcIikpXG4rXHRcdFx0Z290byBjbGVhbnVwO1xuK1x0fVxuK1xuK1x0YnVmID0gbWFsbG9jKGJ1Zmxlbik7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoYnVmLCBcIm1hbGxvYyBidWZcIikpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcdG1lbXNldChidWYsIDAsIGJ1Zmxlbik7XG4rXHRidWZbYnVmbGVuIC0gMV0gPSAnZSc7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbWF4X2F0dGVtcHRzOyArK2kpIHtcbitcdFx0c3NpemVfdCBsZW47XG4rXHRcdGNoYXIgaWdub3JlZFsxMjhdO1xuK1x0XHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0XHRib29sIHRocmVhZF9jcmVhdGVkID0gZmFsc2U7XG4rXHRcdHNpemVfdCByZW0gPSBidWZsZW47XG4rXHRcdGludCBjID0gLTEsIHAgPSAtMSwgemVybyA9IDA7XG4rXHRcdGJvb2wgc3VjY2VzcyA9IGZhbHNlO1xuK1xuK1x0XHRlcnIgPSBjcmVhdGVfcGFpcihBRl9JTkVULCBTT0NLX1NUUkVBTSwgXHUwMDI2YywgXHUwMDI2cCk7XG4rXHRcdGlmICghQVNTRVJUX09LKGVyciwgXCJjcmVhdGVfcGFpclwiKSlcbitcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuK1xuK1x0XHRlcnIgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWQsIE5VTEwsIFx1MDAyNnRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW5fdGhyZWFkLCBcdTAwMjZwKTtcbitcdFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcInB0aHJlYWRfY3JlYXRlXCIpKVxuK1x0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4rXHRcdHRocmVhZF9jcmVhdGVkID0gdHJ1ZTtcbitcbitcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXAsIFx1MDAyNnplcm8sIFx1MDAyNmMsIEJQRl9BTlkpO1xuK1x0XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYnBmX21hcF91cGRhdGVfZWxlbVwiKSlcbitcdFx0XHRnb3RvIGVuZF9hdHRlbXB0O1xuK1xuK1x0XHR3aGlsZSAocmVtKSB7XG4rXHRcdFx0bGVuID0geHNlbmQoYywgYnVmICsgKGJ1ZmxlbiAtIHJlbSksIHJlbSwgMCk7XG4rXHRcdFx0aWYgKGxlbiA9PSAtMSlcbitcdFx0XHRcdGdvdG8gZW5kX2F0dGVtcHQ7XG4rXHRcdFx0cmVtIC09IGxlbjtcbitcdFx0fVxuK1xuK1x0XHQvKiB3ZSBjYW5ub3QgdXNlIHJlY3ZfdGltZW91dCgpLCBvdGhlcndpc2UgRUFHQUlOIHdvdWxkIGJlIGFuIGV4cGVjdGVkIGVycm5vLiAqL1xuK1x0XHRsZW4gPSByZWN2ZnJvbShjLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiB3ZSBhcmUgY2hlY2tpbmcgZm9yIHRoZSBpbnZhbGlkIHJldHVybiBvZiBFQUdBSU4sIGFueSBvdGhlciByZXR1cm4gaXMgY29uc2lkZXJlZFxuK1x0XHQgKiBzdWNjZXNzZnVsIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyB0ZXN0LlxuK1x0XHQgKi9cbitcdFx0aWYgKGxlbiBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgIUFTU0VSVF9ORVEoZXJybm8sIEVBR0FJTiwgXCJyZWN2ZnJvbSBlYWdhaW5cIikpXG4rXHRcdFx0Z290byBlbmRfYXR0ZW1wdDtcbitcbitcdFx0c3VjY2VzcyA9IHRydWU7XG4rXG4rZW5kX2F0dGVtcHQ6XG4rXHRcdGlmIChjIFx1MDAzZT0gMClcbitcdFx0XHRjbG9zZShjKTtcbitcbitcdFx0aWYgKHRocmVhZF9jcmVhdGVkKSB7XG4rXHRcdFx0dm9pZCAqcmV0dmFsID0gTlVMTDtcbitcbitcdFx0XHRwdGhyZWFkX2pvaW4odGhyZWFkLCBcdTAwMjZyZXR2YWwpO1xuK1x0XHRcdGlmICghQVNTRVJUX05VTEwocmV0dmFsLCBcInJldHZhbFwiKSlcbitcdFx0XHRcdHN1Y2Nlc3MgPSBmYWxzZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAoIXRocmVhZF9jcmVhdGVkIFx1MDAyNlx1MDAyNiBwIFx1MDAzZT0gMClcbitcdFx0XHRjbG9zZShwKTtcbitcdFx0aWYgKCFzdWNjZXNzKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK2NsZWFudXA6XG4rXHRpZiAoYnVmKVxuK1x0XHRmcmVlKGJ1Zik7XG4rXG4rXHR0ZXN0X3NvY2ttYXBfcGFzc19wcm9nX19kZXN0cm95KHNrZWwpO1xuK31cbitcbiB2b2lkIHRlc3Rfc29ja21hcF9iYXNpYyh2b2lkKVxuIHtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCBjcmVhdGVfdXBkYXRlX2ZyZWVcIikpXG5AQCAtMTQ1MSw0ICsxNTgzLDggQEAgdm9pZCB0ZXN0X3NvY2ttYXBfYmFzaWModm9pZClcbiBcdFx0dGVzdF9zb2NrbWFwX211bHRpX2NoYW5uZWxzKFNPQ0tfU1RSRUFNKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCB1ZHAgbXVsdGkgY2hhbm5lbHNcIikpXG4gXHRcdHRlc3Rfc29ja21hcF9tdWx0aV9jaGFubmVscyhTT0NLX0RHUkFNKTtcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwic29ja21hcCByZWN2ZnJvbSBlYWdhaW5cIikpXG4rXHRcdHRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW4oZmFsc2UpO1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJzb2NrbWFwIHJlY3Zmcm9tIGVhZ2FpbiB3aXRoIHZlcmRpY3RcIikpXG4rXHRcdHRlc3Rfc29ja21hcF9yZWN2ZnJvbV9lYWdhaW4odHJ1ZSk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6MTAuOTEyNTk5OTUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg3MDk0ODE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgQlBGIFNvY2ttYXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBzb21lIHR3ZWFrcyB0byB0aGUgQlBGIHNvY2ttYXAgY29kZSBzcGVjaWZpY2FsbHkgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AuIFNlZW1zIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIGFyb3VuZCBob3cgd2UgaGFuZGxlIHRpbWVvdXRzIGluIFRDUCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBjaGFuZ2UgdG8gYHRjcF9tc2dfd2FpdF9kYXRhYCBpcyB0aGUgY29yZSBvZiBpdC4gVGhleSdyZSB1cGRhdGluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHRha2UgYSBgbG9uZyAqdGltZW9gIGluc3RlYWQgb2YganVzdCBgbG9uZyB0aW1lb2AsIHdoaWNoIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBwb2ludGVyLWJhc2VkIHRpbWVvdXQgbWVjaGFuaXNtLlxuXG5Gcm9tIHRoZSBkZXNjcmlwdGlvbiwgdGhlIHBhdGNoIHRoZW4gYWRqdXN0cyB0aGUgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCBmdW5jdGlvbnMgdG8gY29ycmVjdGx5IHVzZSB0aGlzIG5ldyB0aW1lb3V0IHBhcmFtZXRlci4gVGhlIGdvYWwgc2VlbXMgdG8gYmUgdG8gcHJldmVudCBzcHVyaW91cyBgLUVBR0FJTmAgcmV0dXJucywgd2hpY2ggc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGluY29ycmVjdCB0aW1lb3V0IGhhbmRsaW5nIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBnb29kIHRvIHNlZTsgdGhhdCdzIGEgY29tbW9uIGFyZWEgZm9yIEJQRiBwcm9ncmFtcyB0byBtaXNiZWhhdmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIHNvY2tldCBsYXllci5cblxuU28sIHRoaXMgaXMgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSB0byBUQ1Agc29ja2V0IEJQRiwgaW1wYWN0aW5nIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGVzZSBmdW5jdGlvbnMgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIHNlZSBleGFjdGx5IHdoYXQncyBjaGFuZ2VkIGFuZCB0aGUgaW50ZW50IG9mIHRoZSBhdXRob3IuIFRpbWUgdG8gcHVsbCB1cCBteSB0cnVzdHkgZ3JlcCBhbmQgc2VlIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZSB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgaW1wYWN0LiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIHNvbWUgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIEJQRiBwcm9ncmFtcyB0aGF0IHJlbHkgb24gdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjE2Ljc4MzU1MTc0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcyMDg0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2JwZl9yZWN2bXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9icGYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmM9MjAzPXN0YXRpYyBib29sIGlzX25leHRfbXNnX2ZpbihzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MjIxOnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz0zMzg9c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM1NS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzU2OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNTctXFx0XFx0XFx0ICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTY3Nz1zdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4Mi1cXHRwcm90W1RDUF9CUEZfQkFTRV0uY2xvc2VcXHRcXHQ9IHNvY2tfbWFwX2Nsb3NlO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2ODM6XFx0cHJvdFtUQ1BfQlBGX0JBU0VdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZztcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjg0LVxcdHByb3RbVENQX0JQRl9CQVNFXS5zb2NrX2lzX3JlYWRhYmxlXFx0PSBza19tc2dfaXNfcmVhZGFibGU7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVxcdHByb3RbVENQX0JQRl9SWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjkxOlxcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkyLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02OTMtXFx0cHJvdFtUQ1BfQlBGX1RYUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfVFhdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2OTQ6XFx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY5NS19XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI3PWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1MC1cXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1MTpcXHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxcbm5ldC9pcHY0L3RjcF9icGYuYy03NTItXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjE3LjAwMDc2NTM1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjMzMjg3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1AgQlBGIHJlY3Ztc2cgSGFuZGxlcnMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIHRoZSBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBgcmVjdm1zZ2AgaGFuZGxlcnMgZm9yIGBUQ1BfQlBGX0JBU0VgLCBgVENQX0JQRl9SWGAsIGFuZCBgVENQX0JQRl9UWFJYYCBjb25maWd1cmF0aW9ucy4gTWFrZXMgc2Vuc2U7IHRoaXMgaXMgdGhlIHdheSB0byBwbHVtYiBCUEYgaW50byB0aGUgVENQIHJlY2VpdmUgcGF0aC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgcGF0aCwgcmVhY2hhYmxlIHZpYSBzb2NrbWFwL0JQRiwgc28gdGhhdCBpcyBmdW5jdGlvbmFsLiBJbnRlcmVzdGluZyB0aGF0IHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIHRvIGB0Y3BfbXNnX3dhaXRfZGF0YWAgYXMgd2VsbC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgYW5kIHNlZSBob3cgdGhlIHdhaXQgZnVuY3Rpb24gaXMgaW5mbHVlbmNlZC5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlIHdoYXQncyByZXF1aXJlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgYWN0aXZlIGluIHRoZSBrZXJuZWwuIFRoZSBjb2RlIGl0c2VsZiwgYG5ldC9pcHY0L3RjcF9icGYuY2AsIGNvbmZpcm1zIG15IHN1c3BpY2lvbiBhYm91dCB0aGUgbG9jYXRpb24uIFRpbWUgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgcGFydGljdWxhciBmaWxlLiBJJ2xsIG5lZWQgdG8gdHJhY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIHRoZSBuZWNlc3NhcnkgZmVhdHVyZXMgYXJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6MjEuNTY0MDk2MTc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTIwNTY1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9NjI9b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSArPSB0Y3BfaWxsaW5vaXMub1xcbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICs9IHRjcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdWRwX2JwZi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjIxLjY2NTMwNjk0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTk4MTEyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgc25pcHBldDpcblxuKipEZWJ1Z2dpbmcgTmV0d29yayBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgc2VlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX05FVF9TT0NLX01TR2AuIFRoYXQncyB0aGUgZmlyc3QgaHVyZGxlLiBBbmQgdGhlbiwgdGhlcmUncyB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrIHdpdGggYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIGd1YXJkaW5nIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIFRoYXQgc3VnZ2VzdHMgc29tZSBCUEYgaW50ZWdyYXRpb24gaGVyZSwgYW5kIGxpa2VseSwgYSBkZXBlbmRlbmN5IG9uIHRoZSBCUEYgc3lzY2FsbCBmZWF0dXJlLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBpbmRlZWQgZGVmaW5lZCB0aGVyZSwgYW5kIGNvbmZpcm0gaG93IGl0IGludGVyYWN0cyB3aXRoIGB0Y3BfbXNnX3dhaXRfZGF0YWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgVENQIG1lc3NhZ2Ugd2FpdGluZyBhbmQgdGhlIEJQRiBpbnRlZ3JhdGlvbiB0byBkZXRlcm1pbmUgaWYgSSBuZWVkIHRvIGVuYWJsZSB0aGlzIGNvbmZpZywgYW5kIGlmIHRoaXMgaXMgYSBmZWF0dXJlIEknbSBldmVuIGludGVyZXN0ZWQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjoyNS4yNjUxMjExNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNjExMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19CUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTE3OD1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXFxubmV0L2lwdjQvdGNwX2JwZi5jOjE4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE4MS1zdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz04MDY9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTgxMi19XFxubmV0L2lwdjQvdGNwX2JwZi5jOjgxMzojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE1OjI2OjI1LjM4ODczNzE1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTYxNDQyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyAtIEJQRiBhbmQgTmV0d29yayBNZXNzYWdpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHN0cmFpZ2h0LiBJIGtub3cgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIHByZXJlcXVpc2l0ZSwgdGhhdCdzIGEgZ2l2ZW4uIEFuZCBJJ20gYWxzbyBzZWVpbmcgdGhhdCBgQ09ORklHX05FVF9TT0NLX01TR2AgaXMgcmVxdWlyZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZW0uIElzIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCByZWxpYW50IG9uIGFub3RoZXIsIHBvdGVudGlhbGx5IG9ic2N1cmUgc2V0dGluZz8gT3IgcGVyaGFwcyBzb21ldGhpbmcgaGlnaGVyIHVwIHRoZSBjaGFpbiBpcyAqc2VsZWN0aW5nKiBpdD8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSBJIGZ1bGx5IGdyYXNwIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoZXkgcmVsYXRlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBnZXR0aW5nIHRoZSBiZWhhdmlvciBJIG5lZWQgZnJvbSB0aGUga2VybmVsISBJJ2xsIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgdHJhY2UgdGhpcyBvdXQuIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgc2F5Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NjcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjozMC45ODQ4ODM1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNTcxNjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXFxuLS1cXG5uZXQvS2NvbmZpZy0zNjYtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZzozNjc6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTM2OC1cXHRoZWxwXFxuLS1cXG5uZXQvS2NvbmZpZz00NzU9Y29uZmlnIE5FVF9TRUxGVEVTVFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ3OC1cXG5uZXQvS2NvbmZpZzo0Nzk6Y29uZmlnIE5FVF9TT0NLX01TR1xcbm5ldC9LY29uZmlnLTQ4MC1cXHRib29sXFxuLS1cXG5uZXQvS2NvbmZpZy00ODItXFx0aGVscFxcbm5ldC9LY29uZmlnOjQ4MzpcXHQgIFRoZSBORVRfU09DS19NU0cgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHBsYWluIHNvY2tldHMgKGUuZy4gVENQKSBvclxcbm5ldC9LY29uZmlnLTQ4NC1cXHQgIFVMUHMgKHVwcGVyIGxheWVyIG1vZHVsZXMsIGUuZy4gVExTKSB0byBwcm9jZXNzIEw3IGFwcGxpY2F0aW9uIGRhdGFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6MzEuMTc2NDY0MjU2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjgxOTgwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdzogTkVUX1NPQ0tfTVNHIGFuZCBSZWxhdGVkIENvbXBvbmVudHMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgTkVUX1NPQ0tfTVNHYCBpcyBmbGFnZ2VkIGFzIGEga2V5IGl0ZW0gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEl0IGFwcGVhcnMgYEJQRl9TVFJFQU1fUEFSU0VSYCBhbmQgYFRMU2AgYXJlIHJlc3BvbnNpYmxlIGZvciBzZWxlY3Rpbmcgb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIG1lc3NhZ2UgdHlwZS4gVGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIGNoZWNrIG9mIGBCUEZfU1RSRUFNX1BBUlNFUmAgYW5kIGBCUEZfU1lTQ0FMTGAsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgaW52b2x2ZWQgaW4gaG93IGl0IGlzIGhhbmRsZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGFyc2VyIGZ1bmN0aW9ucyBpbiByZWxhdGlvbiB0byBzeXNjYWxsIHByb2Nlc3NpbmcuIFRoaXMgcHJvYmFibHkgYm9pbHMgZG93biB0byBhIGZldyBjb3JlIHF1ZXN0aW9uczogSG93IGRvZXMgdGhlIHBhcnNlciBpZGVudGlmeSBgTkVUX1NPQ0tfTVNHYD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBpdCdzIGluY29ycmVjdCBvciBieXBhc3NlZD8gV2hhdCBhcmUgdGhlIGxpbWl0cyBvZiB0aGUgcGFyc2VyIHJlbGF0aXZlIHRvIHRoZSBzeXN0ZW0gY2FsbHM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjozNC4zNDQ2NjU1NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTg4ODgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0zNTQ9Y29uZmlnIEJRTFxcbi0tXFxubmV0L0tjb25maWctMzYwLVxcbm5ldC9LY29uZmlnOjM2MTpjb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG5uZXQvS2NvbmZpZy0zNjItXFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjozNC40NTY1NTk5NDFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgwMjUyNTE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgQlBGIFN0cmVhbWluZyBhbmQgQ2dyb3VwIEJQRiBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBsZXZlcmFnaW5nIGBCUEZfU1RSRUFNX1BBUlNFUmAg4oCTIHRoYXQgc2VlbXMgbGlrZSBhIHByb21pc2luZyBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdhaXQsIGlzbid0IGBDR1JPVVBfQlBGYCBhbHNvIGludGltYXRlbHkgY29ubmVjdGVkIHRvIHRoZSBCUEYgbGFuZHNjYXBlPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGhlcmUuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uLCB0aGUgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIGRlbHZlIGludG8gYG5ldC9LY29uZmlnYCBhbmQgdGhvcm91Z2hseSBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJQRl9TVFJFQU1fUEFSU0VSYC4gSSdtIGdvaW5nIHRvIGRldGVybWluZSB3aGF0IG90aGVyIG9wdGlvbnMgb3IgZmVhdHVyZXMgbmVlZCB0byBiZSBpbiBwbGFjZSB0byBlZmZlY3RpdmVseSB1c2UgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBpbXBsaWNhdGlvbnMgYmVmb3JlIHByb2NlZWRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1ODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjozOC4yNTkwODc4NjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2MCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2MDpcXHRcXG4gMzYxOlxcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbiAzNjI6XFx0XFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcbiAzNjM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuIDM2NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDM2NTpcXHRcXHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcXG4gMzY2OlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDM2NzpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuIDM2ODpcXHRcXHRoZWxwXFxuIDM2OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgYWxsb3dzIGEgVENQIHN0cmVhbSBwYXJzZXIgdG8gYmUgdXNlZCB3aXRoXFxuIDM3MDpcXHRcXHQgIEJQRl9NQVBfVFlQRV9TT0NLTUFQLlxcbiAzNzE6XFx0XFxuIDM3MjpcXHRjb25maWcgTkVUX0ZMT1dfTElNSVRcXG4gMzczOlxcdFxcdGJvb2wgXFxcIk5ldCBmbG93IGxpbWl0XFxcIlxcbiAzNzQ6XFx0XFx0ZGVwZW5kcyBvbiBSUFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTU6MjY6MzguMjU5MjYzMjM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1ODYyNzc0NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEJQRiBTb2NrbWFwIFJlY2VpdmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgdGhlIEJQRiBzdHJlYW0gcGFyc2VyIGZ1bmN0aW9uYWxpdHksIGFuZCB0aGF0IGhpbmdlcyBvbiBgSU5FVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQ0dST1VQX0JQRmAuIEknbGwgYmUgc3VyZSB0byBlbmFibGUgdGhvc2UsIGFsb25nIHdpdGggYEJQRl9TVFJFQU1fUEFSU0VSYCBhbmQgYE5FVF9TT0NLX01TR2AuXG5cblRoZSBjb2RlIG1vZGlmaWVzIGB0Y3BfbXNnX3dhaXRfZGF0YWAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBJJ2xsIGRlZmluaXRlbHkgYWRkIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgdG8gYEZvY3VzU3ltYm9sc2AuIEV2ZW4gdGhvdWdoIGB0Y3BfbXNnX3dhaXRfZGF0YWAgaXMgc3RhdGljLCBJJ2xsIGluY2x1ZGUgaXQgdG9vIHRvIGJlIHNhZmUuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBBaGEsIHRoZSB0ZXN0IHVzZXMgYEJQRl9TS19TS0JfU1RSRUFNX1ZFUkRJQ1RgLiBUaGF0IHNjcmVhbXMgc29ja21hcC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBtb2RpZmllcyBgdGNwX2JwZl9yZWN2bXNnYCBhbmQgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIHdoaWNoIGFyZSBjcml0aWNhbCBmb3Igc29ja21hcCBUQ1AgcmVjZWl2ZSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGV4YW1pbmluZy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBmdW5jdGlvbnMuIExvb2tzIGxpa2UgdGhvc2UgYXJlIHRoZSBvbmx5IHRocmVlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZC5cblxuQWxyaWdodCwgbGV0J3MgcmV2aWV3IHRoZSBhY3R1YWwgY2hhbmdlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9tc2dfd2FpdF9kYXRhYCB0byB0YWtlIHRoZSB0aW1lb3V0IGFzIGEgcG9pbnRlciwgbm90IGEgdmFsdWUuIEl0IHNlZW1zIHRoYXQgdGhlcmUgd2FzIGEgYnVnIHdoZXJlIHRoZSB0aW1lb3V0IHdhc24ndCBiZWluZyBjb3JyZWN0bHkgdXBkYXRlZCBpbiB0aGUgY2FsbGVyIGlmIHRoZSBjYWxsIHRvIGBza193YWl0X2V2ZW50YCB3b2tlIHVwIHNwdXJpb3VzbHkuIEl0IGxvb2tzIGxpa2UgYHRjcF9icGZfcmVjdm1zZ2AgaGFzIGEgYG1zZ19ieXRlc19yZWFkeWAgbGFiZWwsIHNvIGlmIGB0Y3BfbXNnX3dhaXRfZGF0YWAgd29rZSB1cCBidXQgbm8gZGF0YSBhcnJpdmVkLCB0aGVuIHRoZSBjb2RlIHdpbGwgY2hlY2sgYHRpbWVvIFx1MDAzZSAwYCBhbmQgcmV0cnkuIEJhc2ljYWxseSwgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHdvdWxkIGtlZXAgcmV0dXJuaW5nIGAtRUFHQUlOYCBvciBsb29wIGVuZGxlc3NseSBpbiB0aGUgY2FzZSBvZiBhIHNwdXJpb3VzIHdha2V1cC4gQnkgcGFzc2luZyB0aGUgdGltZW91dCBieSByZWZlcmVuY2UsIGB0Y3BfYnBmX3JlY3Ztc2dgIGNhbiBjb3JyZWN0bHkgcmV0cnkuXG5cblRoaXMgaXMgYSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGVyZWZvcmUsIEknbGwgZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblNvLCB0aGUgY29uZmlncyBJIG5lZWQ6XG4qICAgYEJQRl9TWVNDQUxMYFxuKiAgIGBCUEZfU1RSRUFNX1BBUlNFUmBcbiogICBgTkVUX1NPQ0tfTVNHYFxuKiAgIGBDR1JPVVBfQlBGYFxuXG5NeSBgRm9jdXNTeW1ib2xzYDpcbiogICBgdGNwX2JwZl9yZWN2bXNnYFxuKiAgIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYFxuKiAgIGB0Y3BfbXNnX3dhaXRfZGF0YWBcblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB0aGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEJQRiBzb2NrbWFwIFRDUCByZWNlaXZlIHBhdGggKGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmApIHRvIGNvcnJlY3RseSBoYW5kbGUgc29ja2V0IHJlY2VpdmUgdGltZW91dHMgYW5kIHNwdXJpb3VzIHdha2V1cHMgYnkgcGFzc2luZyB0aGUgdGltZW91dCBieSByZWZlcmVuY2UgdG8gYHRjcF9tc2dfd2FpdF9kYXRhYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc28gaXQncyBhIGdvb2QgdGFyZ2V0LlxuXG5FdmVuIHRob3VnaCBgdGNwX21zZ193YWl0X2RhdGFgIGlzIHN0YXRpYywgSSdsbCBpbmNsdWRlIGl0LiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LCBldmVuIGlmIGl0IG1pZ2h0IGJlIGlubGluZWQuXG5cbk5vdyBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAzNCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNToyNjo1NC4xMjIwNDE1MTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUyODY2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCIsXG4gICAgXCJDR1JPVVBfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl9yZWN2bXNnXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfbXNnX3dhaXRfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgc29ja21hcCBUQ1AgcmVjZWl2ZSBwYXRoICh0Y3BfYnBmX3JlY3Ztc2cgYW5kIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIpIHRvIGNvcnJlY3RseSBoYW5kbGUgc29ja2V0IHJlY2VpdmUgdGltZW91dHMgYW5kIHNwdXJpb3VzIHdha2V1cHMgYnkgcGFzc2luZyB0aGUgdGltZW91dCBieSByZWZlcmVuY2UgdG8gdGNwX21zZ193YWl0X2RhdGEuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgKEJQRiBzb2NrbWFwKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX1NUUkVBTV9QQVJTRVJcIixcbiAgICBcIk5FVF9TT0NLX01TR1wiLFxuICAgIFwiQ0dST1VQX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwidGNwX21zZ193YWl0X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHNvY2ttYXAgVENQIHJlY2VpdmUgcGF0aCAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKSB0byBjb3JyZWN0bHkgaGFuZGxlIHNvY2tldCByZWNlaXZlIHRpbWVvdXRzIGFuZCBzcHVyaW91cyB3YWtldXBzIGJ5IHBhc3NpbmcgdGhlIHRpbWVvdXQgYnkgcmVmZXJlbmNlIHRvIHRjcF9tc2dfd2FpdF9kYXRhLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIChCUEYgc29ja21hcCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowq7452[1] Phase: Succeeded StartedAt: 2026-07-22 15:27:06 +0000 UTC FinishedAt: 2026-07-22 15:27:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-22 15:27:06 +0000 UTC FinishedAt: 2026-07-22 15:27:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2] Phase: Succeeded StartedAt: 2026-07-22 15:27:06 +0000 UTC FinishedAt: 2026-07-22 20:12:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 15:27:06 +0000 UTC FinishedAt: 2026-07-22 20:12:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 15:27:06 +0000 UTC FinishedAt: 2026-07-22 15:27:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 15:27:06 +0000 UTC FinishedAt: 2026-07-22 15:27:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"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-workflowq7452/series-workflowq7452-convert-artifact-918467995/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 15:27:16 +0000 UTC FinishedAt: 2026-07-22 16:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 15:27:16 +0000 UTC FinishedAt: 2026-07-22 16:13:26 +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:*c89298f7-e64a-4fa0-9067-10197ac43223,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-workflowq7452/series-workflowq7452-convert-artifact-918467995/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": "c5d75969-93b8-47b0-8d72-122e18fb34d9", "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-workflowq7452/series-workflowq7452-build-action-1207189977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 15:27:16 +0000 UTC FinishedAt: 2026-07-22 16:13:16 +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:*c89298f7-e64a-4fa0-9067-10197ac43223,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-workflowq7452/series-workflowq7452-convert-artifact-918467995/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": "c5d75969-93b8-47b0-8d72-122e18fb34d9", "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-workflowq7452/series-workflowq7452-build-action-1207189977/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 16:13:26 +0000 UTC FinishedAt: 2026-07-22 16:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 16:13:26 +0000 UTC FinishedAt: 2026-07-22 16:13:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 16:13:26 +0000 UTC FinishedAt: 2026-07-22 16:13:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 16:13:26 +0000 UTC FinishedAt: 2026-07-22 16:13:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-workflowq7452/series-workflowq7452-convert-artifact-750494450/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 16:13:36 +0000 UTC FinishedAt: 2026-07-22 16:15:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 16:13:36 +0000 UTC FinishedAt: 2026-07-22 16:15:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c5d75969-93b8-47b0-8d72-122e18fb34d9,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-workflowq7452/series-workflowq7452-build-action-1207189977/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-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 16:15:34 +0000 UTC FinishedAt: 2026-07-22 16:15:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 16:15:34 +0000 UTC FinishedAt: 2026-07-22 16:15:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 16:15:34 +0000 UTC FinishedAt: 2026-07-22 17:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 16:15:34 +0000 UTC FinishedAt: 2026-07-22 17:05:11 +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:*c89298f7-e64a-4fa0-9067-10197ac43223,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-workflowq7452/series-workflowq7452-convert-artifact-750494450/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": "9c90371c-e94c-4e15-aaf7-6f3f06a5ddf4", "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-workflowq7452/series-workflowq7452-build-action-1416209030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 16:15:34 +0000 UTC FinishedAt: 2026-07-22 17:05:01 +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:*c89298f7-e64a-4fa0-9067-10197ac43223,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-workflowq7452/series-workflowq7452-convert-artifact-750494450/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": "9c90371c-e94c-4e15-aaf7-6f3f06a5ddf4", "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-workflowq7452/series-workflowq7452-build-action-1416209030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:05:11 +0000 UTC FinishedAt: 2026-07-22 17:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:05:11 +0000 UTC FinishedAt: 2026-07-22 17:05:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:05:11 +0000 UTC FinishedAt: 2026-07-22 17:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:05:11 +0000 UTC FinishedAt: 2026-07-22 17:07:03 +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:*9c90371c-e94c-4e15-aaf7-6f3f06a5ddf4,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-workflowq7452/series-workflowq7452-build-action-1416209030/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-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:07:13 +0000 UTC FinishedAt: 2026-07-22 20:12:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:07:13 +0000 UTC FinishedAt: 2026-07-22 20:12:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"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:*c5d75969-93b8-47b0-8d72-122e18fb34d9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9c90371c-e94c-4e15-aaf7-6f3f06a5ddf4,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-workflowq7452/series-workflowq7452-build-action-1207189977/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-workflowq7452/series-workflowq7452-build-action-1416209030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:07:13 +0000 UTC FinishedAt: 2026-07-22 17:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:07:13 +0000 UTC FinishedAt: 2026-07-22 17:07:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"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-workflowq7452/series-workflowq7452-convert-artifact-4045473095/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:07:13 +0000 UTC FinishedAt: 2026-07-22 17:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:07:13 +0000 UTC FinishedAt: 2026-07-22 17:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:07:13 +0000 UTC FinishedAt: 2026-07-22 17:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:07:23 +0000 UTC FinishedAt: 2026-07-22 20:12:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7452[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg","tcp_bpf_recvmsg_parser","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG","CGROUP_BPF"],"series_id":"b253e49b-f04c-4e17-bbb2-c8205852f3a4","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-07-22 17:07:23 +0000 UTC FinishedAt: 2026-07-22 20:12:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c5d75969-93b8-47b0-8d72-122e18fb34d9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9c90371c-e94c-4e15-aaf7-6f3f06a5ddf4,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-workflowq7452/series-workflowq7452-build-action-1207189977/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-workflowq7452/series-workflowq7452-build-action-1416209030/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-workflowq7452/series-workflowq7452-convert-artifact-4045473095/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,}