Name: series-workflow65qg2 Phase: Succeeded StartedAt: 2026-09-08 20:24:59 +0000 UTC FinishedAt: 2026-09-09 00:53:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[0] Phase: Succeeded StartedAt: 2026-09-08 20:24:59 +0000 UTC FinishedAt: 2026-09-08 21:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 20:24:59 +0000 UTC FinishedAt: 2026-09-08 21:11:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "732d3f57-5aa4-48c9-816c-ced88c98958a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_subflow_reqsk_clone", "mptcp_token_move_request", "mptcp_token_accept", "mptcp_token_destroy_request", "mptcp_sk_clone_init", "subflow_syn_recv_sock", "inet_reqsk_clone" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fYWNjZXB0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDssCiAgICAmIzM0O3N1YmZsb3dfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDtpbmV0X3JlcXNrX2Nsb25lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBkdXJpbmcgcmV1c2Vwb3J0IHNvY2tldCBtaWdyYXRpb24gYnkgc2FmZWx5IGhhbmRsaW5nIG1zayBzb2NrZXQgcmVmY291bnRzLCBtb3ZpbmcgdG9rZW4gaGFzaCB0YWJsZSBlbnRyaWVzIChtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QpLCBhbmQgcHJvcGVybHkgY2xlYW5pbmcgdXAgYW5kIGZhbGxpbmcgYmFjayB3aGVuIG1wdGNwX3Rva2VuX2FjY2VwdCBmYWlscy5cblxuVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbmN1cnJlbmN5LCBSQ1Ugc2FmZXR5LCBzb2NrZXQgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUvZGVzdHJ1Y3Rpb24gc3RhdGUgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgYXJlYSBhcmUgdXNlLWFmdGVyLWZyZWUsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3IgbG9ja2luZy9kZWFkbG9jayBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBtZW1vcnkgY29weWluZyB0byB1c2Vyc3BhY2UsIHBhZGRpbmcvaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZywgdG9rZW4gaGFzaCBtYW5hZ2VtZW50LCBhbmQgc29ja2V0IGNsb25lIGVycm9yIGhhbmRsaW5nIGR1cmluZyBUQ1AvTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LiBUaGlzIGxvZ2ljIGludm9sdmVzIHN1YnRsZSBSQ1UsIHJlZmNvdW50aW5nLCBhbmQgbG9ja2luZyBzZW1hbnRpY3MgdGhhdCBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBzb2NrZXQgc3lzY2FsbHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGYzMDBmZTc4Mjc3MWEyYTA4YmZhMzFkOWM1YmFiZmNmYWQwMTE2ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjE6MDk6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbXB0Y3AuaCBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbmluZGV4IDQ4NWQ1NWI2NmVhNjcuLmFkNzAwNWI1NzRiYjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5AQCAtMjE5LDYgJiM0MzsyMTksOSBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbiBcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiBcdFx0XHRcdFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcbiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2suICovXG4mIzQzO3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDUsNiAmIzQzOzMwOCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIGFuIFJDVSByZWFkLXNpZGUgbG9jay4gKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBfX2JlMzIgbXB0Y3BfcmVzZXRfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpICB7IHJldHVybiBodG9ubCgwdSk7IH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfYWN0aXZlX2RldGVjdF9ibGFja2hvbGUoc3RydWN0IHNvY2sgKnNrLCBib29sIGV4cGlyZWQpIHsgfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5pbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuQEAgLTIxLDYgJiM0MzsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3BfZWNuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L21wdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4gXG5AQCAtOTYxLDYgJiM0Mzs5NjIsOSBAQCBzdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0Y3Bfc2sobnJlcS1cdTAwM2VzayktXHUwMDNlZmFzdG9wZW5fcnNrLCBucmVxKTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocnNrX2lzX21wdGNwKHJlcSkpXG4mIzQzO1x0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG4mIzQzO1xuIFx0cmV0dXJuIG5yZXE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGUxZjA4ZjcxY2RiMTYuLjMwMDY3ZjJhN2NhOGYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0zNjkyLDYgJiM0MzszNjkyLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShzdHJ1Y3Qgc29jayAqbnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKG5zayk7XG4mIzQzO1xuJiM0MztcdG1wdGNwX3JlbGVhc2Vfc2NoZWQobXNrKTtcbiYjNDM7XHRtcHRjcF9zZXRfc3RhdGUobnNrLCBUQ1BfQ0xPU0UpO1xuJiM0MztcdC8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWFcbiYjNDM7XHQgKiB0Y3Bfc2soKSwgYnV0IG5zayBpcyBhbiBNUFRDUCBtYXN0ZXIgc29ja2V0OyBrZWVwIHRoZSBpbmV0LWxldmVsXG4mIzQzO1x0ICogZGVzdHJveSBwcmVwYXJhdGlvbiBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGJoX3VubG9ja19zb2NrKG5zayk7XG4mIzQzO1x0c29ja19wdXQobnNrKTtcbiYjNDM7XHRzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTtcbiYjNDM7XHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xuJiM0MztcdGluZXRfc2sobnNrKS1cdTAwM2VpbmV0X251bSA9IDA7XG4mIzQzO1x0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsXG4gXHRcdFx0XHQgc3RydWN0IHNvY2sgKnNzayxcbkBAIC0zNzUxLDExICYjNDM7Mzc2OSw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdGxpc3RfYWRkKFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSwgXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRzb2NrX2hvbGQoc3NrKTtcbiBcbi1cdC8qIG5ldyBtcGMgc3ViZmxvdyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG5ld2x5XG4tXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxuLVx0ICovXG4tXHRtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zayk7XG4tXG4gXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbiBcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxuIFx0ICovXG5AQCAtMzc2NCw2ICYjNDM7Mzc3NywxNCBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRtcHRjcF9yY3Zfc3BhY2VfaW5pdChtc2ssIHNzayk7XG4gXHRtc2stXHUwMDNlcmN2cV9zcGFjZS50aW1lID0gbXB0Y3Bfc3RhbXAoKTtcbiBcbiYjNDM7XHRpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUpO1xuJiM0MztcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlZmlyc3QsIE5VTEwpO1xuJiM0MztcdFx0c29ja19wdXQoc3NrKTtcbiYjNDM7XHRcdG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxuIFx0XHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xuIFx0YmhfdW5sb2NrX3NvY2sobnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCA4N2NjYjg0ZTk5MjdjLi4yNDc0NDljYzJmZWI5IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtMTA3OSw5ICYjNDM7MTA3OSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiB9XG4gXG4gaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XG4mIzQzO3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XG4gdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7XG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxuJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4gXHRcdFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKTtcbiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5pbmRleCBhZjgxYWQ1ZTY5OWQxLi5kMmNkMTJmYzAzNDIxIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuQEAgLTQ3LDYgJiM0Mzs0Nyw0MSBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcdG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChyZXEpO1xuIH1cbiBcbiYjNDM7dm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrO1xuJiM0MztcbiYjNDM7XHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcbiYjNDM7XHRSQ1VfTE9DS0RFUF9XQVJOKCFyY3VfcmVhZF9sb2NrX2FueV9oZWxkKCksXG4mIzQzO1x0XHRcdCBcJiMzNDtNUFRDUCByZXFzayBjbG9uZSBjYWxsZWQgd2l0aG91dCBSQ1VcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBBIG5vbi1OVUxMIC1cdTAwM2Vtc2sgbWVhbnMgdGhlIHJlcXVlc3Qgb3ducyBvbmUgcmVmZXJlbmNlLiAgVGhlIGNsb25lXG4mIzQzO1x0ICogY29waWVkIG9ubHkgdGhlIHBvaW50ZXIsIHdoaWxlIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGNhbiBjb25jdXJyZW50bHlcbiYjNDM7XHQgKiB0cmFuc2ZlciBpdHMgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZC4gIEFjcXVpcmUgYSByZWZlcmVuY2UgZm9yIHRoZVxuJiM0MztcdCAqIGNsb25lLCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBvcmlnaW5hbCByZXF1ZXN0IHN0aWxsIG93bnMgdGhlIHNhbWUgbXNrLlxuJiM0MztcdCAqIE1QVENQIHNvY2tldHMgdXNlIFNMQUJfVFlQRVNBRkVfQllfUkNVIGFuZCBhbGwgY2xvbmUgY2FsbGVycyBydW4gaW5cbiYjNDM7XHQgKiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIGtlZXBpbmcgdGhlIG1lbW9yeSBzdGFibGUgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtc2sgPSBSRUFEX09OQ0Uoc3ViZmxvd19yZXEtXHUwMDNlbXNrKTtcbiYjNDM7XHRpZiAobXNrKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm9fYWNxdWlyZShcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKSB7XG4mIzQzO1x0XHRcdG1zayA9IE5VTEw7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKFJFQURfT05DRShzdWJmbG93X3JlcS1cdTAwM2Vtc2spICE9IG1zaykge1xuJiM0MztcdFx0XHRzb2NrX3B1dChzayk7XG4mIzQzO1x0XHRcdG1zayA9IE5VTEw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXdfc3ViZmxvd19yZXEtXHUwMDNlbXNrID0gbXNrO1xuJiM0MztcbiYjNDM7XHRtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QocmVxLCBuZXdfcmVxKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzdWJmbG93X2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLCB1MzIgbm9uY2UxLCB1MzIgbm9uY2UyLFxuIFx0XHRcdFx0ICB2b2lkICpobWFjKVxuIHtcbkBAIC04ODUsOCAmIzQzOzkyMCwxMCBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gXHRcdGlmIChjdHgtXHUwMDNlbXBfY2FwYWJsZSkge1xuIFx0XHRcdGN0eC1cdTAwM2Vjb25uID0gbXB0Y3Bfc2tfY2xvbmVfaW5pdChsaXN0ZW5lci1cdTAwM2Vjb25uLCBcdTAwMjZtcF9vcHQsIGNoaWxkLCByZXEpO1xuLVx0XHRcdGlmICghY3R4LVx1MDAzZWNvbm4pXG4mIzQzO1x0XHRcdGlmICghY3R4LVx1MDAzZWNvbm4pIHtcbiYjNDM7XHRcdFx0XHRmYWxsYmFjayA9IHRydWU7XG4gXHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuJiM0MztcdFx0XHR9XG4gXG4gXHRcdFx0Y3R4LVx1MDAzZXN1YmZsb3dfaWQgPSAxO1xuIFx0XHRcdG93bmVyID0gbXB0Y3Bfc2soY3R4LVx1MDAzZWNvbm4pO1xuQEAgLTkyMyw3ICYjNDM7OTYwLDcgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdH1cbiBcbiBcdFx0XHQvKiBtb3ZlIHRoZSBtc2sgcmVmZXJlbmNlIG93bmVyc2hpcCB0byB0aGUgc3ViZmxvdyAqL1xuLVx0XHRcdHN1YmZsb3dfcmVxLVx1MDAzZW1zayA9IE5VTEw7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0Uoc3ViZmxvd19yZXEtXHUwMDNlbXNrLCBOVUxMKTtcbiBcdFx0XHRjdHgtXHUwMDNlY29ubiA9IChzdHJ1Y3Qgc29jayAqKW93bmVyO1xuIFxuIFx0XHRcdGlmIChzdWJmbG93X3VzZV9kaWZmZXJlbnRfc3BvcnQob3duZXIsIHNrKSkge1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmNcbmluZGV4IGYxYTUwZjM2N2FkZDguLmUwZjI4MjNmOTJlZmIgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuLmNcbkBAIC0xODAsNiAmIzQzOzE4MCw0MyBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCAtIG1vdmUgcmVxdWVzdCB0b2tlbiBvd25lcnNoaXAgdG8gYSBjbG9uZVxuJiM0MzsgKiBAcmVxOiBvcmlnaW5hbCByZXF1ZXN0IHNvY2tldFxuJiM0MzsgKiBAbmV3X3JlcTogY2xvbmVkIHJlcXVlc3Qgc29ja2V0XG4mIzQzOyAqXG4mIzQzOyAqIE1vdmUgdGhlIHRva2VuIGhhc2ggZW50cnkgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdCB0byBpdHMgY2xvbmUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiYjNDM7XHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4mIzQzO1xuJiM0MztcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuJiM0MztcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuJiM0MztcdFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcbiYjNDM7XHRcdFx0aGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdShcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgJiM0MzsyMjQsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gICpcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cbiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuJiM0MztcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXG4tXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi9cbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRpZiAocG9zICE9IHJlcSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0X19za19udWxsc19hZGRfbm9kZV9yY3UoKHN0cnVjdCBzb2NrICopbXNrLCBcdTAwMjZidWNrZXQtXHUwMDNlbXNrX2NoYWluKTtcbiYjNDM7XHRyZXQgPSB0cnVlO1xuJiM0MztcbiYjNDM7dW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgJiM0Mzs0MDQsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4gXG4tXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4gXHRwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gc3ViZmxvd19yZXEpKSB7XG4mIzQzO1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG5pbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuQEAgLTk5LDcgJiM0Mzs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFx1MDAyNmluaXRfbmV0LCBtc2stXHUwMDNldG9rZW4pKTtcbiBcbiBcdC8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi9cbkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfZGVzdHJveWVkKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2FjY2VwdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2tfY2xvbmVfaW5pdCYjMzQ7LAogICAgJiMzNDtzdWJmbG93X3N5bl9yZWN2X3NvY2smIzM0OywKICAgICYjMzQ7aW5ldF9yZXFza19jbG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcsIHRva2VuIGhhc2ggbWFuYWdlbWVudCwgYW5kIHNvY2tldCBjbG9uZSBlcnJvciBoYW5kbGluZyBkdXJpbmcgVENQL01QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gVGhpcyBsb2dpYyBpbnZvbHZlcyBzdWJ0bGUgUkNVLCByZWZjb3VudGluZywgYW5kIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc29ja2V0IHN5c2NhbGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRmMzAwZmU3ODI3NzFhMmEwOGJmYTMxZDljNWJhYmZjZmFkMDExNmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIxOjA5OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbXB0Y3AuaCBiL2luY2x1ZGUvbmV0L21wdGNwLmgKaW5kZXggNDg1ZDU1YjY2ZWE2Ny4uYWQ3MDA1YjU3NGJiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tcHRjcC5oCkBAIC0yMTksNiAmIzQzOzIxOSw5IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsCiAJCQkJCSAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsCiAJCQkJCSAgICAgICBib29sIGF0dGFjaF9saXN0ZW5lcik7CiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2suICovCiYjNDM7dm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKJiM0MzsJCQkgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7CiAKIF9fYmUzMiBtcHRjcF9nZXRfcmVzZXRfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOwogCkBAIC0zMDUsNiAmIzQzOzMwOCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlcwogCXJldHVybiBOVUxMOwogfQogCiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2suICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfYWN0aXZlX2RldGVjdF9ibGFja2hvbGUoc3RydWN0IHNvY2sgKnNrLCBib29sIGV4cGlyZWQpIHsgfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggNjI1NzQ1OWJjZWUyNC4uODk2ZjQ3MmRjYmEyOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC0yMSw2ICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O25ldC94ZnJtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y3BfZWNuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9tcHRjcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrX3JldXNlcG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9hZGRyY29uZi5oJmd0OwogCkBAIC05NjEsNiAmIzQzOzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLSZndDtzayktJmd0O2Zhc3RvcGVuX3JzaywgbnJlcSk7CiAJfQogCiYjNDM7CWlmIChyc2tfaXNfbXB0Y3AocmVxKSkKJiM0MzsJCW1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUocmVxLCBucmVxKTsKJiM0MzsKIAlyZXR1cm4gbnJlcTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBlMWYwOGY3MWNkYjE2Li4zMDA2N2YyYTdjYThmIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMzY5Miw2ICYjNDM7MzY5MiwyNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBtcHRjcF9za19jbG9uZV9kZXN0cm95KHN0cnVjdCBzb2NrICpuc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2sobnNrKTsKJiM0MzsKJiM0MzsJbXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spOwomIzQzOwltcHRjcF9zZXRfc3RhdGUobnNrLCBUQ1BfQ0xPU0UpOwomIzQzOwkvKiBpbmV0X2Nza19wcmVwYXJlX2ZvcmNlZF9jbG9zZSgpIGNsZWFycyBUQ1Agc29ja19vcHMgc3RhdGUgdmlhCiYjNDM7CSAqIHRjcF9zaygpLCBidXQgbnNrIGlzIGFuIE1QVENQIG1hc3RlciBzb2NrZXQ7IGtlZXAgdGhlIGluZXQtbGV2ZWwKJiM0MzsJICogZGVzdHJveSBwcmVwYXJhdGlvbiBoZXJlLgomIzQzOwkgKi8KJiM0MzsJYmhfdW5sb2NrX3NvY2sobnNrKTsKJiM0MzsJc29ja19wdXQobnNrKTsKJiM0MzsJc29ja19zZXRfZmxhZyhuc2ssIFNPQ0tfREVBRCk7CiYjNDM7CXRjcF9vcnBoYW5fY291bnRfaW5jKCk7CiYjNDM7CWluZXRfc2sobnNrKS0mZ3Q7aW5ldF9udW0gPSAwOwomIzQzOwlpbmV0X2Nza19kZXN0cm95X3NvY2sobnNrKTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsCiAJCQkJIHN0cnVjdCBzb2NrICpzc2ssCkBAIC0zNzUxLDExICYjNDM7Mzc2OSw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAlsaXN0X2FkZCgmYW1wO3N1YmZsb3ctJmd0O25vZGUsICZhbXA7bXNrLSZndDtjb25uX2xpc3QpOwogCXNvY2tfaG9sZChzc2spOwogCi0JLyogbmV3IG1wYyBzdWJmbG93IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgbmV3bHkKLQkgKiBjcmVhdGVkIG1wdGNwIHNvY2tldAotCSAqLwotCW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKTsKLQogCS8qIHNldCBtc2sgYWRkcmVzc2VzIGVhcmx5IHRvIGVuc3VyZSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoKQogCSAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YQogCSAqLwpAQCAtMzc2NCw2ICYjNDM7Mzc3NywxNCBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJbXB0Y3BfcmN2X3NwYWNlX2luaXQobXNrLCBzc2spOwogCW1zay0mZ3Q7cmN2cV9zcGFjZS50aW1lID0gbXB0Y3Bfc3RhbXAoKTsKIAomIzQzOwlpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkgewomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO3N1YmZsb3ctJmd0O25vZGUpOwomIzQzOwkJV1JJVEVfT05DRShtc2stJmd0O2ZpcnN0LCBOVUxMKTsKJiM0MzsJCXNvY2tfcHV0KHNzayk7CiYjNDM7CQltcHRjcF9za19jbG9uZV9kZXN0cm95KG5zayk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwogCWlmIChtcF9vcHQtJmd0O3N1Ym9wdGlvbnMgJmFtcDsgT1BUSU9OX01QVENQX01QQ19BQ0spCiAJCV9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChtc2ssIHN1YmZsb3csIG1wX29wdCk7CiAJYmhfdW5sb2NrX3NvY2sobnNrKTsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmgKaW5kZXggODdjY2I4NGU5OTI3Yy4uMjQ3NDQ5Y2MyZmViOSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmgKQEAgLTEwNzksOSAmIzQzOzEwNzksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB9CiAKIGludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwomIzQzO3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTsKIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7Ci12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsCiYjNDM7Ym9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLAogCQkJc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7CiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pOwogc3RydWN0IG1wdGNwX3NvY2sgKm1wdGNwX3Rva2VuX2dldF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHRva2VuKTsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCmluZGV4IGFmODFhZDVlNjk5ZDEuLmQyY2QxMmZjMDM0MjEgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuYwpAQCAtNDcsNiAmIzQzOzQ3LDQxIEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogCW1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChyZXEpOwogfQogCiYjNDM7dm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKJiM0MzsJCQkgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTsKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zazsKJiM0MzsKJiM0MzsJbmV3X3N1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7CiYjNDM7CVJDVV9MT0NLREVQX1dBUk4oIXJjdV9yZWFkX2xvY2tfYW55X2hlbGQoKSwKJiM0MzsJCQkgJiMzNDtNUFRDUCByZXFzayBjbG9uZSBjYWxsZWQgd2l0aG91dCBSQ1UmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEEgbm9uLU5VTEwgLSZndDttc2sgbWVhbnMgdGhlIHJlcXVlc3Qgb3ducyBvbmUgcmVmZXJlbmNlLiAgVGhlIGNsb25lCiYjNDM7CSAqIGNvcGllZCBvbmx5IHRoZSBwb2ludGVyLCB3aGlsZSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBjYW4gY29uY3VycmVudGx5CiYjNDM7CSAqIHRyYW5zZmVyIGl0cyByZWZlcmVuY2UgdG8gdGhlIGNoaWxkLiAgQWNxdWlyZSBhIHJlZmVyZW5jZSBmb3IgdGhlCiYjNDM7CSAqIGNsb25lLCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBvcmlnaW5hbCByZXF1ZXN0IHN0aWxsIG93bnMgdGhlIHNhbWUgbXNrLgomIzQzOwkgKiBNUFRDUCBzb2NrZXRzIHVzZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSBhbmQgYWxsIGNsb25lIGNhbGxlcnMgcnVuIGluCiYjNDM7CSAqIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwga2VlcGluZyB0aGUgbWVtb3J5IHN0YWJsZSBoZXJlLgomIzQzOwkgKi8KJiM0MzsJbXNrID0gUkVBRF9PTkNFKHN1YmZsb3dfcmVxLSZndDttc2spOwomIzQzOwlpZiAobXNrKSB7CiYjNDM7CQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7CiYjNDM7CiYjNDM7CQlpZiAoIXJlZmNvdW50X2luY19ub3RfemVyb19hY3F1aXJlKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpIHsKJiM0MzsJCQltc2sgPSBOVUxMOwomIzQzOwkJfSBlbHNlIGlmIChSRUFEX09OQ0Uoc3ViZmxvd19yZXEtJmd0O21zaykgIT0gbXNrKSB7CiYjNDM7CQkJc29ja19wdXQoc2spOwomIzQzOwkJCW1zayA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV3X3N1YmZsb3dfcmVxLSZndDttc2sgPSBtc2s7CiYjNDM7CiYjNDM7CW1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsCiAJCQkJICB2b2lkICpobWFjKQogewpAQCAtODg1LDggJiM0Mzs5MjAsMTAgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCiAJCWlmIChjdHgtJmd0O21wX2NhcGFibGUpIHsKIAkJCWN0eC0mZ3Q7Y29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItJmd0O2Nvbm4sICZhbXA7bXBfb3B0LCBjaGlsZCwgcmVxKTsKLQkJCWlmICghY3R4LSZndDtjb25uKQomIzQzOwkJCWlmICghY3R4LSZndDtjb25uKSB7CiYjNDM7CQkJCWZhbGxiYWNrID0gdHJ1ZTsKIAkJCQlnb3RvIGZhbGxiYWNrOwomIzQzOwkJCX0KIAogCQkJY3R4LSZndDtzdWJmbG93X2lkID0gMTsKIAkJCW93bmVyID0gbXB0Y3Bfc2soY3R4LSZndDtjb25uKTsKQEAgLTkyMyw3ICYjNDM7OTYwLDcgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJfQogCiAJCQkvKiBtb3ZlIHRoZSBtc2sgcmVmZXJlbmNlIG93bmVyc2hpcCB0byB0aGUgc3ViZmxvdyAqLwotCQkJc3ViZmxvd19yZXEtJmd0O21zayA9IE5VTEw7CiYjNDM7CQkJV1JJVEVfT05DRShzdWJmbG93X3JlcS0mZ3Q7bXNrLCBOVUxMKTsKIAkJCWN0eC0mZ3Q7Y29ubiA9IChzdHJ1Y3Qgc29jayAqKW93bmVyOwogCiAJCQlpZiAoc3ViZmxvd191c2VfZGlmZmVyZW50X3Nwb3J0KG93bmVyLCBzaykpIHsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmMKaW5kZXggZjFhNTBmMzY3YWRkOC4uZTBmMjgyM2Y5MmVmYiAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Rva2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuLmMKQEAgLTE4MCw2ICYjNDM7MTgwLDQzIEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKQogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0IC0gbW92ZSByZXF1ZXN0IHRva2VuIG93bmVyc2hpcCB0byBhIGNsb25lCiYjNDM7ICogQHJlcTogb3JpZ2luYWwgcmVxdWVzdCBzb2NrZXQKJiM0MzsgKiBAbmV3X3JlcTogY2xvbmVkIHJlcXVlc3Qgc29ja2V0CiYjNDM7ICoKJiM0MzsgKiBNb3ZlIHRoZSB0b2tlbiBoYXNoIGVudHJ5IGZyb20gdGhlIG9yaWdpbmFsIHJlcXVlc3QgdG8gaXRzIGNsb25lLgomIzQzOyAqLwomIzQzO3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvczsKJiM0MzsJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwomIzQzOwomIzQzOwluZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTsKJiM0MzsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKSB7CiYjNDM7CQltcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLSZndDt0b2tlbik7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkgewomIzQzOwkJbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKJiM0MzsJCWlmIChwb3MgPT0gc3ViZmxvd19yZXEpCiYjNDM7CQkJaGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdSgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlLAomIzQzOwkJCQkJCSAgICAgJmFtcDtuZXdfc3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpOwomIzQzOwkJZWxzZQomIzQzOwkJCW1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBtcHRjcF90b2tlbl9hY2NlcHQgLSByZXBsYWNlIGEgcmVxIHNrIHdpdGggZnVsbCBzb2NrIGluIHRva2VuIGhhc2gKICAqIEByZXE6IHRoZSByZXF1ZXN0IHNvY2tldCB0byBiZSByZW1vdmVkCkBAIC0xODcsMjQgJiM0MzsyMjQsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spCiAgKgogICogQ2FsbGVkIHdoZW4gYSBTWU4gcGFja2V0IGNyZWF0ZXMgYSBuZXcgbG9naWNhbCBjb25uZWN0aW9uLCBpLmUuCiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgb24gc3VjY2Vzcy4KICAqLwotdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7Ym9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsCiAJCQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKQogewogCXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zOwogCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKIAlzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7CiYjNDM7CWJvb2wgcmV0ID0gZmFsc2U7CiAKLQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stJmd0O3NrX3Byb3QsIDEpOwogCWJ1Y2tldCA9IHRva2VuX2J1Y2tldChyZXEtJmd0O3Rva2VuKTsKIAlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpKQomIzQzOwkJZ290byB1bmxvY2s7CiAKLQkvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqLwogCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS0mZ3Q7dG9rZW4pOwotCWlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSByZXEpKQotCQlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpOwomIzQzOwlpZiAocG9zICE9IHJlcSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpOwogCV9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgJmFtcDtidWNrZXQtJmd0O21za19jaGFpbik7CiYjNDM7CXJldCA9IHRydWU7CiYjNDM7CiYjNDM7dW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay0mZ3Q7c2tfcHJvdCwgMSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbikKQEAgLTM1NSwxNiAmIzQzOzQwNCwyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7CiAJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwogCi0JaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKQomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiAJCXJldHVybjsKIAogCWJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwogCXNwaW5fbG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwogCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLSZndDt0b2tlbik7Ci0JaWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkgewomIzQzOwlpZiAocG9zID09IHN1YmZsb3dfcmVxKSB7CiAJCWhsaXN0X251bGxzX2RlbF9pbml0X3JjdSgmYW1wO3Bvcy0mZ3Q7dG9rZW5fbm9kZSk7CiAJCWJ1Y2tldC0mZ3Q7Y2hhaW5fbGVuLS07CiAJfQomIzQzOwomIzQzO3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jCmluZGV4IDRmYzM5ZmEyZTI2MmQuLmJlOWFjY2U4YTU2NzMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYwpAQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9hY2NlcHQoc3RydWN0IGt1bml0ICp0ZXN0KQogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLAogCQkJbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTsKIAltc2stJmd0O3Rva2VuID0gcmVxLSZndDt0b2tlbjsKLQltcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTsKIAlLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soJmFtcDtpbml0X25ldCwgbXNrLSZndDt0b2tlbikpOwogCiAJLyogdGhpcyBpcyBub3cgYSBuby1vcCAqLwpAQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsCiAJCQltcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpOwogCW1zay0mZ3Q7dG9rZW4gPSByZXEtJmd0O3Rva2VuOwotCW1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7CiYjNDM7CUtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpOwogCiAJLyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovCiAJcmVmY291bnRfc2V0KCZhbXA7c2stJmd0O3NrX3JlZmNudCwgMCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyBmdXp6YWJsZSwgd2hhdCBjb25maWd1cmF0aW9ucyB3ZSYjMzk7bGwgbmVlZCwgYW5kIHdoaWNoIHN5bWJvbHMgYXJlIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBwYXRjaCBkZXRhaWxzLgoKRmlyc3QsIEkgc2VlIHRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIHRvdWNoZWQ6IGBpbmNsdWRlL25ldC9tcHRjcC5oYCwgYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgLCBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLCBgbmV0L21wdGNwL3N1YmZsb3cuY2AsIGBuZXQvbXB0Y3AvdG9rZW4uY2AsIGFuZCBgbmV0L21wdGNwL3Rva2VuX3Rlc3QuY2AuIFRoZSBjaGFuZ2VzIHNlZW0gdG8gY2VudGVyIGFyb3VuZCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIGBtcHRjcF9za19jbG9uZV9pbml0YCBhbmQgdG9rZW4gaGFuZGxpbmcgd2l0aGluIHRoZSBNUFRDUCBzdGFjaywgcG90ZW50aWFsbHkgaW1wbGVtZW50aW5nIGFuZCByZWZpbmluZyB0aGUgc3ViZmxvdyBjbG9uaW5nIHByb2Nlc3MuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIHRoaXMgKnJlYWNoYWJsZSogY29kZT8gQWJzb2x1dGVseS4gTVBUQ1AgaXMgcGFydCBvZiB0aGUgY29yZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrLiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgYW5kLCB0aGFua2Z1bGx5LCBjYW4gYmUgZXhlcmNpc2VkIHdpdGggbmV0d29yayB0cmFmZmljLCBsb29wYmFjaywgdHVuL3RhcCBpbnRlcmZhY2VzLCBhbmQgUUVNVSBvciBhIGNsb3VkIGVudmlyb25tZW50LiBUaGF04oCZcyBhIGJpZyB3aW4gZm9yIGZ1enppbmcuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBNUFRDUC4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgb3IganVzdCBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhhdCBNUFRDUCBpcyBlbmFibGVkIGluIGEgY29uZmlnIGJlZm9yZSBJIHRyeSB0byB0YXJnZXQgaXQgd2l0aCBteSBmdXp6aW5nIHNldHVwLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgZXZlbiBjb21waWxlZCBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWctMS1cbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1Rcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjEyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlOgoKKipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGluaXRpYWwgbGluZXMsIHNheSB0aGUgZmlyc3QgdGhpcnR5IG9yIHNvLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiYXNpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE11bHRpcGF0aCBUQ1AuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gZGVmaW5lcyB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0aGV5JiMzOTtyZSBlbmFibGVkLCBhbmQgYW55IGRlcGVuZGVuY2llcy4gSSBleHBlY3QgdG8gc2VlIHRoZSBjb3JlIE1QVENQIG1vZHVsZSBkZWZpbmVkIGZpcnN0LCBsaWtlbHkgd2l0aCBhIGBDT05GSUdfTVBUQ1BgIHN5bWJvbC4gVGhlbiwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZmxhZ3MgdGhhdCBjb250cm9sIHNwZWNpZmljIGZlYXR1cmVzIOKAkyBtYXliZSBzdXBwb3J0IGZvciBkaWZmZXJlbnQgc3ViZmxvdyBzY2hlZHVsZXJzLCBvciB0aGUgaW5jbHVzaW9uIG9mIHBhcnRpY3VsYXIgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobXMuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgbGlrZSBUQ1Agb3IgTkVULiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgYGhlbHBgIHRleHQgdGhhdCBkZXNjcmliZXMgd2hhdCBlYWNoIG9wdGlvbiBkb2VzLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlc2UgZmxhZ3MgdGhvcm91Z2hseSBzaW5jZSB0aGV5IGRpcmVjdGx5IGluZmx1ZW5jZSBob3cgTVBUQ1AgYmVoYXZlcyBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGRlZmF1bHRzLCB0b28uIFRoZXkgd2lsbCBnaXZlIGEgaGludCBhcyB0byB3aGF0IHRoZSBkZXZlbG9wZXJzIHRob3VnaHQgd291bGQgYmUgdGhlIGNvbW1vbiBhbmQgdXNlZnVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBhbnkgZXhwZXJpbWVudGFsIG9yIHBvdGVudGlhbGx5IHVuc3RhYmxlIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQuIE9rYXksIGxldCYjMzk7cyBzdGFydCByZWFkaW5nLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4gIDIxOlx0XHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gSVBWNj15XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjc6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAgMjg6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIEN1cnJlbnRseSBjb3ZlcnMgdGhlIE1QVENQIGNyeXB0byBhbmQgdG9rZW4gaGVscGVycy5cbiAgMzE6XHRcdCAgT25seSB1c2VmdWwgZm9yIGtlcm5lbCBkZXZzIHJ1bm5pbmcgS1VuaXQgdGVzdCBoYXJuZXNzIGFuZCBhcmUgbm90XG4gIDMyOlx0XHQgIGZvciBpbmNsdXNpb24gaW50byBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXG4gIDM1Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDIzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFRyaWdnZXJpbmcgTWVjaGFuaXNtcyBvZiBgaW5ldF9yZXFza19jbG9uZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBpbmV0X3JlcXNrX2Nsb25lYCBpcyBpbnZva2VkLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBzbyBrbm93aW5nIGl0cyBjYWxsIHBhdGhzIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIFRDUC9JUCBzdGFjay4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgdHJhY2UgdGhlIGNhbGxzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgaXRzIGRpcmVjdCBjYWxsZXJzIHRvIG1hcCBvdXQgdGhlIGluaXRpYWwgc2V0IG9mIHBvc3NpYmlsaXRpZXMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMsIGFuZCBmcm9tIHRoZXJlLCBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRoYXQgbGVhZHMgdG8gdGhvc2UgY2FsbHMuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBvciBpbmxpbmluZyB0aGF0IGNvdWxkIG9iZnVzY2F0ZSB0aGUgY2FsbCBncmFwaCBzb21ld2hhdCwgYnV0IHRoZSBiYXNpY3Mgc2hvdWxkIGJlIGRpc2Nlcm5pYmxlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIGl0LCB0byBzZWUgdGhlIGtpbmQgb2YgaW5mb3JtYXRpb24gdGhhdCBpdCBpcyB3b3JraW5nIHdpdGguIFVuZGVyc3RhbmRpbmcgdGhhdCBkYXRhIGZsb3cgaXMgb2Z0ZW4ga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfcmVxc2tfY2xvbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05MDU9dm9pZCBfX3JlcXNrX2ZyZWUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTEzLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5MTQ6c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05MTUtXHRcdFx0XHRcdCAgICAgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzNz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA1My1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA1NDpcdFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBuc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDU1LVx0XHRpZiAoIW5yZXEpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDIxPXN0cnVjdCBzb2NrICppbmV0X2Nza19jb21wbGV0ZV9oYXNoZGFuY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqY2hpbGQsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM0LVx0XHRcdC8qIGhvbGQgYSByZWZjbnQgZm9yIHRoZSBucmVxLVx1MDAzZXJza19saXN0ZW5lclxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDM1Olx0XHRcdCAqIHdoaWNoIGlzIGFzc2lnbmVkIGluIGluZXRfcmVxc2tfY2xvbmUoKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM2LVx0XHRcdCAqL1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM3LVx0XHRcdHNvY2tfaG9sZChzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE0Mzg6XHRcdFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzktXHRcdFx0aWYgKCFucmVxKSB7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDcwPXZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5NC1cdFx0aWYgKG5zaykge1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDk1Olx0XHRcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgbnNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5Ni1cdFx0XHRpZiAobnJlcSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NjQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTVBUQ1AgUmVxdWVzdCBTb2NrZXQgQ2xvbmluZzogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2VudHJhbCB0aGVtZTogY2xvbmluZyByZXF1ZXN0IHNvY2tldHMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgTVBUQ1AuIGBpbmV0X3JlcXNrX2Nsb25lYCBpcyB0aGUgYmFzZSBmdW5jdGlvbiwgdXNlZCBpbiBzdGFuZGFyZCBUQ1AgbGlzdGVuZXIgc2NlbmFyaW9zLCBhbmQgcmV1c2Vwb3J0LCBhbmQgU1lOLUFDSyByZXRyYW5zbWlzc2lvbnMsIGZhc3RvcGVuLCBsaXN0ZW4gc3RvcCBzaXR1YXRpb25zLCBoYW5kbGluZyBtaWdyYXRpb25zIGFuZCBjbG9uaW5nIG9mIHJlcXVlc3Qgc29ja2V0cyBpbiB2YXJpb3VzIGNvbnRleHRzLCBpbmNsdWRpbmcgdGltZXJzLiBIb3dldmVyLCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgTVBUQ1Atc3BlY2lmaWMgZnVuY3Rpb25zLiBJIHNlZSBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIHdoaWNoIGhhbmRsZXMgdGhlIE1QVENQLXNwZWNpZmljIGNsb25pbmcsIGRlYWxpbmcgd2l0aCByZWZlcmVuY2VzIGFuZCB0b2tlbiBtb3ZlbWVudHMuCgpJJiMzOTt2ZSBhbHNvIGdvdCBteSBleWUgb24gYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAsIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveWAuIEFsc28gbm90ZSBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYCBpcyBpbiB0aGUgbWl4IGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IG1vZGlmaWNhdGlvbnMsIGFsbCBkZWFsaW5nIHdpdGggY2xvbmluZyBvciB0b2tlbiBtYW5hZ2VtZW50LgoKTm93LCBsZXQgbWUgY2hlY2sgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gSSYjMzk7dmUgZ290IGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAsIGFuZCBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYC4gSSYjMzk7dmUgYWxzbyBub3RlZCB0aGF0IGBpbmV0X3JlcXNrX2Nsb25lYCBpcyBpbiB0aGUgbGlzdCwgYnV0IGl0JiMzOTtzIG1vcmUgZ2VuZXJhbCBhbmQgbm90IE1QVENQLXNwZWNpZmljLgoKYGluZXRfcmVxc2tfY2xvbmVgIGlzIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzLCBgcmVxc2tfdGltZXJfaGFuZGxlcmAsIGBpbmV0X2Nza19jb21wbGV0ZV9oYXNoZGFuY2VgLCBhbmQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBpbiBUQ1AgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhhdCYjMzk7cyBhIGdvb2QgaW5kaWNhdGlvbiBvZiBpdHMgdWJpcXVpdHkgYW5kIHRoZXJlZm9yZSBub3QgYSBnb29kIGZvY3VzIGZvciBmdXp6aW5nLiBIb3dldmVyLCB0aG9zZSBNUFRDUCBzcGVjaWZpYyBmdW5jdGlvbnMgcmVhbGx5IGxvb2sgbGlrZSBnb29kIHRhcmdldHMuCgpPa2F5LCBsZXQmIzM5O3MgYXNzZXNzIGlmIHRoaXMgYXJlYSBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiAgRGVmaW5pdGVseS4gIEl0IHRpY2tzIGFsbCB0aGUgYm94ZXMuIFdlJiMzOTtyZSB0YWxraW5nIGNvcmUgbmV0d29ya2luZywgZnVuZGFtZW50YWwgcHJvdG9jb2wgY2hhbmdlcy4gV2UgaGF2ZSBjb21wbGV4IGNvbmN1cnJlbmN5IGNvbmNlcm5zIC0gUkNVLCByZWZjb3VudHMsIGxvY2tpbmcsIHRva2VuIHRhYmxlIG1hbmlwdWxhdGlvbiwgYW5kIGNsb25pbmcgdW5kZXIgcmV1c2Vwb3J0IG9yIHN5bi1hY2sgdGltZXJzLi4uIHRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgYnVncy4gQW5kIHllcywgaXQmIzM5O3MgYWxsIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscyB3aXRoaW4gUUVNVSB3aXRoIGxvb3BiYWNrIG9yIGEgdmlydHVhbCBuZXR3b3JrLiBTbyB0aGlzIGlzIGEgY2xlYXIgJiMzNDt5ZXMmIzM0Oy4KCkZpbmFsbHksIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucz8gYE1QVENQYCBpcyB0aGUgYmlnIG9uZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudC4gQW5kIG9mIGNvdXJzZSwgYElORVRgIGlzIGEgZGVwZW5kZW5jeS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9tcHRjcC9NYWtlZmlsZWAgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJ1dCB0aG9zZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IG9uZXMgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxubmV0L21wdGNwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX01QVENQKSAmIzQzOz0gbXB0Y3Aub1xubmV0L21wdGNwL01ha2VmaWxlLTMtXG5uZXQvbXB0Y3AvTWFrZWZpbGU9ND1tcHRjcC15IDo9IHByb3RvY29sLm8gc3ViZmxvdy5vIG9wdGlvbnMubyB0b2tlbi5vIGNyeXB0by5vIGN0cmwubyBwbS5vIGRpYWcubyBcXFxuLS1cbm5ldC9tcHRjcC9NYWtlZmlsZS03LVxubmV0L21wdGNwL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG5uZXQvbXB0Y3AvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU5FVF9NUFRDUF9ESUFHKSAmIzQzOz0gbXB0Y3BfZGlhZy5vXG5uZXQvbXB0Y3AvTWFrZWZpbGUtMTAtXG4tLVxubmV0L21wdGNwL01ha2VmaWxlPTEyPW1wdGNwX3Rva2VuX3Rlc3Qtb2JqcyA6PSB0b2tlbl90ZXN0Lm9cbm5ldC9tcHRjcC9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTVBUQ1BfS1VOSVRfVEVTVCkgJiM0Mzs9IG1wdGNwX2NyeXB0b190ZXN0Lm8gbXB0Y3BfdG9rZW5fdGVzdC5vXG5uZXQvbXB0Y3AvTWFrZWZpbGUtMTQtXG5uZXQvbXB0Y3AvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MjUKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1QVENQIE1vZGlmaWNhdGlvbiYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIGJ1aWxkIHN5c3RlbSBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCB0byBpbmNsdWRlIHRoZSBNUFRDUCBvYmplY3QgZmlsZXMgKGBtcHRjcC5vYCwgYHByb3RvY29sLm9gLCBgc3ViZmxvdy5vYCwgYHRva2VuLm9gKSB3aGVuIGBDT05GSUdfTVBUQ1BgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IG15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGUga2VybmVsIHN5bWJvbHMgdGhhdCBhcmUgbW9kaWZpZWQuIEkgY29uZmlybWVkIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAsIGBzdWJmbG93X3N5bl9yZWN2X3NvY2tgLCBhbmQgYGluZXRfcmVxc2tfY2xvbmVgIGFyZSBkaXJlY3RseSBpbXBhY3RlZC4gQW5kIGFkZGl0aW9uYWxseSwgYG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdGAgYW5kIHRoZSBzdGF0aWMgYG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3lgIGFyZSBhbHNvIHJlbGV2YW50LiBUaGVzZSBmdW5jdGlvbnMgYWxsIHBsYXkgYSByb2xlIGluIE1QVENQIGNvbm5lY3Rpb24gc2V0dXAgYW5kIHRlYXJkb3duLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byByZXF1ZXN0IHNvY2tldHMgYW5kIHRva2Vucy4KCkV4Y2VsbGVudC4gU28sIGdpdmVuIHRoaXMsIGxldCYjMzk7cyB2YWxpZGF0ZSB0aGF0IHRoZSBzZXQtcmVzdWx0cyBjcml0ZXJpYSBhcmUgbWV0OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IFllcywgYWJzb2x1dGVseS4gVGhpcyBwYXRjaCB0b3VjaGVzIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgbG9naWMsIHRva2VuIHRhYmxlIG1hbmFnZW1lbnQsIGFuZCBzb2NrZXQgaW5pdGlhbGl6YXRpb24gZXJyb3IgaGFuZGxpbmcgYWNyb3NzIFRDUC9NUFRDUCBjb25uZWN0aW9uIHNldHVwIHBhdGhzLiBUaGluayByZXVzZXBvcnQgbWlncmF0aW9ucyBhbmQgdGltZXIgaGFuZGxlcnMg4oCTIHRoZXNlIHRoaW5ncyBoYXZlIGNvbXBsZXggUkNVLCByZWZlcmVuY2UgY291bnQsIGFuZCBsb2NraW5nIGludGVyYWN0aW9ucy4gSXQmIzM5O3MgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLgoqICAgKipSZWFzb25pbmcqKjogSSBuZWVkIHRvIGNvbmNpc2VseSBkb2N1bWVudCB0aGUgcmF0aW9uYWxlLiBJJiMzOTtsbCB3cml0ZTogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBsb2dpYywgdG9rZW4gdGFibGUgbWFuYWdlbWVudCwgYW5kIHNvY2tldCBpbml0aWFsaXphdGlvbiBlcnJvciBoYW5kbGluZyBhY3Jvc3MgVENQL01QVENQIGNvbm5lY3Rpb24gc2V0dXAgcGF0aHMgKGUuZy4gZHVyaW5nIHJldXNlcG9ydCBtaWdyYXRpb24gb3IgdGltZXIgaGFuZGxlcnMpLCB3aGljaCBpbnZvbHZlcyBjb21wbGV4IFJDVS9yZWZjb3VudC9sb2NraW5nIHN0YXRlIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OwoqICAgKipFbmFibGVDb25maWdzKio6IFdlIGNsZWFybHkgbmVlZCBgTVBUQ1BgIGVuYWJsZWQuIEhvd2V2ZXIsIHRvIGVuc3VyZSB0aGF0IHRoZSByZXF1aXJlZCBjb3JlIFRDUCBmdW5jdGlvbmFsaXR5IGlzIGFsc28gZW5hYmxlZCwgSSYjMzk7bGwgcmVjb21tZW5kIGBbJiMzNDtJTkVUJiMzNDssICYjMzQ7TVBUQ1AmIzM0O11gLgoqICAgKipGb2N1c1N5bWJvbHMqKjogVGhlIHN5bWJvbHMgSSYjMzk7dmUgaWRlbnRpZmllZDogYFsmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywgJiMzNDttcHRjcF90b2tlbl9hY2NlcHQmIzM0OywgJiMzNDttcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QmIzM0OywgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDssICYjMzQ7c3ViZmxvd19zeW5fcmVjdl9zb2NrJiMzNDssICYjMzQ7aW5ldF9yZXFza19jbG9uZSYjMzQ7XWAuCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgZnJ1aXRmdWwgYXJlYSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fYWNjZXB0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDssCiAgICAmIzM0O3N1YmZsb3dfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDtpbmV0X3JlcXNrX2Nsb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZywgdG9rZW4gaGFzaCBtYW5hZ2VtZW50LCBhbmQgc29ja2V0IGNsb25lIGVycm9yIGhhbmRsaW5nIGR1cmluZyBUQ1AvTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LiBUaGlzIGxvZ2ljIGludm9sdmVzIHN1YnRsZSBSQ1UsIHJlZmNvdW50aW5nLCBhbmQgbG9ja2luZyBzZW1hbnRpY3MgdGhhdCBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBzb2NrZXQgc3lzY2FsbHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2FjY2VwdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2tfY2xvbmVfaW5pdCYjMzQ7LAogICAgJiMzNDtzdWJmbG93X3N5bl9yZWN2X3NvY2smIzM0OywKICAgICYjMzQ7aW5ldF9yZXFza19jbG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcsIHRva2VuIGhhc2ggbWFuYWdlbWVudCwgYW5kIHNvY2tldCBjbG9uZSBlcnJvciBoYW5kbGluZyBkdXJpbmcgVENQL01QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gVGhpcyBsb2dpYyBpbnZvbHZlcyBzdWJ0bGUgUkNVLCByZWZjb3VudGluZywgYW5kIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc29ja2V0IHN5c2NhbGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgZHVyaW5nIHJldXNlcG9ydCBzb2NrZXQgbWlncmF0aW9uIGJ5IHNhZmVseSBoYW5kbGluZyBtc2sgc29ja2V0IHJlZmNvdW50cywgbW92aW5nIHRva2VuIGhhc2ggdGFibGUgZW50cmllcyAobXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KSwgYW5kIHByb3Blcmx5IGNsZWFuaW5nIHVwIGFuZCBmYWxsaW5nIGJhY2sgd2hlbiBtcHRjcF90b2tlbl9hY2NlcHQgZmFpbHMuXG5cblRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb25jdXJyZW5jeSwgUkNVIHNhZmV0eSwgc29ja2V0IHJlZmNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlL2Rlc3RydWN0aW9uIHN0YXRlIG1hbmFnZW1lbnQuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIGFyZWEgYXJlIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpc3N1ZXMsIG9yIGxvY2tpbmcvZGVhZGxvY2sgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBwYWRkaW5nL2luZm8tbGVha3MsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGYzMDBmZTc4Mjc3MWEyYTA4YmZhMzFkOWM1YmFiZmNmYWQwMTE2ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMjE6MDk6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaAppbmRleCA0ODVkNTViNjZlYTY3Li5hZDcwMDViNTc0YmIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmgKQEAgLTIxOSw2ICYjNDM7MjE5LDkgQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywKIAkJCQkJICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lciwKIAkJCQkJICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTsKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIGFuIFJDVSByZWFkLXNpZGUgbG9jay4gKi8KJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTsKIAogX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTMwNSw2ICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIGFuIFJDVSByZWFkLXNpZGUgbG9jay4gKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAgeyByZXR1cm4gaHRvbmwoMHUpOyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3hmcm0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcF9lY24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21wdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2tfcmV1c2Vwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2FkZHJjb25mLmgmZ3Q7CiAKQEAgLTk2MSw2ICYjNDM7OTYyLDkgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQlyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtJmd0O3NrKS0mZ3Q7ZmFzdG9wZW5fcnNrLCBucmVxKTsKIAl9CiAKJiM0MzsJaWYgKHJza19pc19tcHRjcChyZXEpKQomIzQzOwkJbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpOwomIzQzOwogCXJldHVybiBucmVxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGUxZjA4ZjcxY2RiMTYuLjMwMDY3ZjJhN2NhOGYgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zNjkyLDYgJiM0MzszNjkyLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3koc3RydWN0IHNvY2sgKm5zaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spOwomIzQzOwomIzQzOwltcHRjcF9yZWxlYXNlX3NjaGVkKG1zayk7CiYjNDM7CW1wdGNwX3NldF9zdGF0ZShuc2ssIFRDUF9DTE9TRSk7CiYjNDM7CS8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWEKJiM0MzsJICogdGNwX3NrKCksIGJ1dCBuc2sgaXMgYW4gTVBUQ1AgbWFzdGVyIHNvY2tldDsga2VlcCB0aGUgaW5ldC1sZXZlbAomIzQzOwkgKiBkZXN0cm95IHByZXBhcmF0aW9uIGhlcmUuCiYjNDM7CSAqLwomIzQzOwliaF91bmxvY2tfc29jayhuc2spOwomIzQzOwlzb2NrX3B1dChuc2spOwomIzQzOwlzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTsKJiM0MzsJdGNwX29ycGhhbl9jb3VudF9pbmMoKTsKJiM0MzsJaW5ldF9zayhuc2spLSZndDtpbmV0X251bSA9IDA7CiYjNDM7CWluZXRfY3NrX2Rlc3Ryb3lfc29jayhuc2spOwomIzQzO30KJiM0MzsKIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCQkgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCwKIAkJCQkgc3RydWN0IHNvY2sgKnNzaywKQEAgLTM3NTEsMTEgJiM0MzszNzY5LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCWxpc3RfYWRkKCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSwgJmFtcDttc2stJmd0O2Nvbm5fbGlzdCk7CiAJc29ja19ob2xkKHNzayk7CiAKLQkvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseQotCSAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0Ci0JICovCi0JbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spOwotCiAJLyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpCiAJICogdXNlcyB0aGUgY29ycmVjdCBkYXRhCiAJICovCkBAIC0zNzY0LDYgJiM0MzszNzc3LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAltcHRjcF9yY3Zfc3BhY2VfaW5pdChtc2ssIHNzayk7CiAJbXNrLSZndDtyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpOwogCiYjNDM7CWlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSk7CiYjNDM7CQlXUklURV9PTkNFKG1zay0mZ3Q7Zmlyc3QsIE5VTEwpOwomIzQzOwkJc29ja19wdXQoc3NrKTsKJiM0MzsJCW1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJaWYgKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBDX0FDSykKIAkJX19tcHRjcF9zdWJmbG93X2Z1bGx5X2VzdGFibGlzaGVkKG1zaywgc3ViZmxvdywgbXBfb3B0KTsKIAliaF91bmxvY2tfc29jayhuc2spOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCA4N2NjYjg0ZTk5MjdjLi4yNDc0NDljYzJmZWI5IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtMTA3OSw5ICYjNDM7MTA3OSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIH0KIAogaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpOwogdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTsKLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqciwKJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsCiAJCQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTsKIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbik7CiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmMKaW5kZXggYWY4MWFkNWU2OTlkMS4uZDJjZDEyZmMwMzQyMSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCkBAIC00Nyw2ICYjNDM7NDcsNDEgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7CiB9CiAKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrOwomIzQzOwomIzQzOwluZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTsKJiM0MzsJUkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19hbnlfaGVsZCgpLAomIzQzOwkJCSAmIzM0O01QVENQIHJlcXNrIGNsb25lIGNhbGxlZCB3aXRob3V0IFJDVSYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogQSBub24tTlVMTCAtJmd0O21zayBtZWFucyB0aGUgcmVxdWVzdCBvd25zIG9uZSByZWZlcmVuY2UuICBUaGUgY2xvbmUKJiM0MzsJICogY29waWVkIG9ubHkgdGhlIHBvaW50ZXIsIHdoaWxlIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGNhbiBjb25jdXJyZW50bHkKJiM0MzsJICogdHJhbnNmZXIgaXRzIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQuICBBY3F1aXJlIGEgcmVmZXJlbmNlIGZvciB0aGUKJiM0MzsJICogY2xvbmUsIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIG9yaWdpbmFsIHJlcXVlc3Qgc3RpbGwgb3ducyB0aGUgc2FtZSBtc2suCiYjNDM7CSAqIE1QVENQIHNvY2tldHMgdXNlIFNMQUJfVFlQRVNBRkVfQllfUkNVIGFuZCBhbGwgY2xvbmUgY2FsbGVycyBydW4gaW4KJiM0MzsJICogYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCBrZWVwaW5nIHRoZSBtZW1vcnkgc3RhYmxlIGhlcmUuCiYjNDM7CSAqLwomIzQzOwltc2sgPSBSRUFEX09OQ0Uoc3ViZmxvd19yZXEtJmd0O21zayk7CiYjNDM7CWlmIChtc2spIHsKJiM0MzsJCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKJiM0MzsKJiM0MzsJCWlmICghcmVmY291bnRfaW5jX25vdF96ZXJvX2FjcXVpcmUoJmFtcDtzay0mZ3Q7c2tfcmVmY250KSkgewomIzQzOwkJCW1zayA9IE5VTEw7CiYjNDM7CQl9IGVsc2UgaWYgKFJFQURfT05DRShzdWJmbG93X3JlcS0mZ3Q7bXNrKSAhPSBtc2spIHsKJiM0MzsJCQlzb2NrX3B1dChzayk7CiYjNDM7CQkJbXNrID0gTlVMTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwluZXdfc3ViZmxvd19yZXEtJmd0O21zayA9IG1zazsKJiM0MzsKJiM0MzsJbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgc3ViZmxvd19nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MiwgdTMyIG5vbmNlMSwgdTMyIG5vbmNlMiwKIAkJCQkgIHZvaWQgKmhtYWMpCiB7CkBAIC04ODUsOCAmIzQzOzkyMCwxMCBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAKIAkJaWYgKGN0eC0mZ3Q7bXBfY2FwYWJsZSkgewogCQkJY3R4LSZndDtjb25uID0gbXB0Y3Bfc2tfY2xvbmVfaW5pdChsaXN0ZW5lci0mZ3Q7Y29ubiwgJmFtcDttcF9vcHQsIGNoaWxkLCByZXEpOwotCQkJaWYgKCFjdHgtJmd0O2Nvbm4pCiYjNDM7CQkJaWYgKCFjdHgtJmd0O2Nvbm4pIHsKJiM0MzsJCQkJZmFsbGJhY2sgPSB0cnVlOwogCQkJCWdvdG8gZmFsbGJhY2s7CiYjNDM7CQkJfQogCiAJCQljdHgtJmd0O3N1YmZsb3dfaWQgPSAxOwogCQkJb3duZXIgPSBtcHRjcF9zayhjdHgtJmd0O2Nvbm4pOwpAQCAtOTIzLDcgJiM0Mzs5NjAsNyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQl9CiAKIAkJCS8qIG1vdmUgdGhlIG1zayByZWZlcmVuY2Ugb3duZXJzaGlwIHRvIHRoZSBzdWJmbG93ICovCi0JCQlzdWJmbG93X3JlcS0mZ3Q7bXNrID0gTlVMTDsKJiM0MzsJCQlXUklURV9PTkNFKHN1YmZsb3dfcmVxLSZndDttc2ssIE5VTEwpOwogCQkJY3R4LSZndDtjb25uID0gKHN0cnVjdCBzb2NrICopb3duZXI7CiAKIAkJCWlmIChzdWJmbG93X3VzZV9kaWZmZXJlbnRfc3BvcnQob3duZXIsIHNrKSkgewpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uYwppbmRleCBmMWE1MGYzNjdhZGQ4Li5lMGYyODIzZjkyZWZiIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvdG9rZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW4uYwpAQCAtMTgwLDYgJiM0MzsxODAsNDMgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QgLSBtb3ZlIHJlcXVlc3QgdG9rZW4gb3duZXJzaGlwIHRvIGEgY2xvbmUKJiM0MzsgKiBAcmVxOiBvcmlnaW5hbCByZXF1ZXN0IHNvY2tldAomIzQzOyAqIEBuZXdfcmVxOiBjbG9uZWQgcmVxdWVzdCBzb2NrZXQKJiM0MzsgKgomIzQzOyAqIE1vdmUgdGhlIHRva2VuIGhhc2ggZW50cnkgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdCB0byBpdHMgY2xvbmUuCiYjNDM7ICovCiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zOwomIzQzOwlzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7CiYjNDM7CiYjNDM7CW5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpOwomIzQzOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpIHsKJiM0MzsJCW1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKSB7CiYjNDM7CQltcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwomIzQzOwkJaWYgKHBvcyA9PSBzdWJmbG93X3JlcSkKJiM0MzsJCQlobGlzdF9udWxsc19yZXBsYWNlX2luaXRfcmN1KCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUsCiYjNDM7CQkJCQkJICAgICAmYW1wO25ld19zdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaAogICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWQKQEAgLTE4NywyNCAmIzQzOzIyNCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaykKICAqCiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS4KICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLgogICovCi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSwKJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSwKIAkJCXN0cnVjdCBtcHRjcF9zb2NrICptc2spCiB7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7CiAJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrOwogCXN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDsKJiM0MzsJYm9vbCByZXQgPSBmYWxzZTsKIAotCXNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay0mZ3Q7c2tfcHJvdCwgMSk7CiAJYnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS0mZ3Q7dG9rZW4pOwogCXNwaW5fbG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiYjNDM7CQlnb3RvIHVubG9jazsKIAotCS8qIHBlZGFudGljIGxvb2t1cCBjaGVjayBmb3IgdGhlIG1vdmVkIHRva2VuICovCiAJcG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgcmVxLSZndDt0b2tlbik7Ci0JaWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHJlcSkpCi0JCWhsaXN0X251bGxzX2RlbF9pbml0X3JjdSgmYW1wO3JlcS0mZ3Q7dG9rZW5fbm9kZSk7CiYjNDM7CWlmIChwb3MgIT0gcmVxKQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CWhsaXN0X251bGxzX2RlbF9pbml0X3JjdSgmYW1wO3JlcS0mZ3Q7dG9rZW5fbm9kZSk7CiAJX19za19udWxsc19hZGRfbm9kZV9yY3UoKHN0cnVjdCBzb2NrICopbXNrLCAmYW1wO2J1Y2tldC0mZ3Q7bXNrX2NoYWluKTsKJiM0MzsJcmV0ID0gdHJ1ZTsKJiM0MzsKJiM0Mzt1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLSZndDtza19wcm90LCAxKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKQpAQCAtMzU1LDE2ICYjNDM7NDA0LDIxIEBAIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIAlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvczsKIAlzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7CiAKLQlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcygmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkKIAkJcmV0dXJuOwogCiAJYnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLSZndDt0b2tlbik7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiAJcG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKLQlpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gc3ViZmxvd19yZXEpKSB7CiYjNDM7CWlmIChwb3MgPT0gc3ViZmxvd19yZXEpIHsKIAkJaGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KCZhbXA7cG9zLSZndDt0b2tlbl9ub2RlKTsKIAkJYnVja2V0LSZndDtjaGFpbl9sZW4tLTsKIAl9CiYjNDM7CiYjNDM7dW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmMKaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jCkBAIC05OSw3ICYjNDM7OTksNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2FjY2VwdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsCiAJCQltcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpOwogCW1zay0mZ3Q7dG9rZW4gPSByZXEtJmd0O3Rva2VuOwotCW1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7CiYjNDM7CUtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpOwogCUtVTklUX0VYUEVDVF9QVFJfRVEodGVzdCwgbXNrLCBtcHRjcF90b2tlbl9nZXRfc29jaygmYW1wO2luaXRfbmV0LCBtc2stJmd0O3Rva2VuKSk7CiAKIAkvKiB0aGlzIGlzIG5vdyBhIG5vLW9wICovCkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfZGVzdHJveWVkKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCwKIAkJCW1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7CiAJbXNrLSZndDt0b2tlbiA9IHJlcS0mZ3Q7dG9rZW47Ci0JbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7CiAKIAkvKiBzaW11bGF0ZSByYWNlIG9uIHJlbW92YWwgKi8KIAlyZWZjb3VudF9zZXQoJmFtcDtzay0mZ3Q7c2tfcmVmY250LCAwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGFjdHVhbGx5IGRvaW5nLgoKSSYjMzk7bSBzZWVpbmcgYSBzZXJpZXMgb2YgY2hhbmdlcyByZWxhdGVkIHRvIE1QVENQLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIG1hbmFnZW1lbnQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcmVmYWN0b3Jpbmcgb3IgaW1wcm92ZW1lbnQgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgZmxvdy4KCkhlcmXigJlzIHRoZSBicmVha2Rvd24gYXMgSSB1bmRlcnN0YW5kIGl0OgoKKiAgICoqSGVhZGVyIGFuZCBTdHViOioqIFdlIGhhdmUgYSBuZXcgc3R1YiBmdW5jdGlvbiBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSgpYCBiZWluZyBhZGRlZCB0byBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAuIFRoaXMgc3VnZ2VzdHMgc29tZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIE1QVENQIHN1YmZsb3cgY2xvbmluZy4KCiogICAqKkludGVncmF0aW9uIHdpdGggYGluZXRfcmVxc2tfY2xvbmUoKWA6KiogVGhlIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYCBmaWxlIG5vdyBjYWxscyB0aGlzIG5ldyBmdW5jdGlvbiBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSgpYCB3aXRoaW4gYGluZXRfcmVxc2tfY2xvbmUoKWAuIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgcGF0Y2ggaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBob3cgTVBUQ1AgY29ubmVjdGlvbnMgYXJlIGhhbmRsZWQgYXQgdGhlIGxvd2VyIGxldmVsIGluZXQgbGF5ZXIuCgoqICAgKipIZWxwZXIgRnVuY3Rpb25zIGFuZCBFcnJvciBIYW5kbGluZzoqKiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHNlZXMgdGhlIGFkZGl0aW9uIG9mIGEgZGVzdHJ1Y3Rpb24gaGVscGVyIGBtcHRjcF9za19jbG9uZV9kZXN0cm95KClgIGFuZCBtb3ZlcyB0aGUgY2FsbCB0byBgbXB0Y3BfdG9rZW5fYWNjZXB0KClgLiBDcml0aWNhbGx5LCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCYjMzk7cyByZXR1cm4gdmFsdWUgaXMgbm93IGJlaW5nICpjaGVja2VkKiBmb3Igc3VjY2Vzcy4gSWYgaXQgZmFpbHMsIHRoZSBjb2RlIHBhdGggbm93IGNsZWFucyB1cCBtb3JlIGdyYWNlZnVsbHkuIFRoaXMgaW1wbGllcyBhIHNpZ25pZmljYW50IGltcHJvdmVtZW50IGluIHRoZSByb2J1c3RuZXNzIG9mIHRoZSB0b2tlbiBoYW5kbGluZyBwcm9jZXNzLgoKKiAgICoqUmV0dXJuIFZhbHVlIG9mIGBtcHRjcF90b2tlbl9hY2NlcHQoKWA6KiogVGhlIHJldHVybiB0eXBlIG9mIGBtcHRjcF90b2tlbl9hY2NlcHQoKWAgaXMgYmVpbmcgY2hhbmdlZCB0byBhIGJvb2xlYW4uIFRoaXMgaXMgYSB2ZXJ5IGNsZWFyIHNpZ25hbCB0aGF0IHRoZSBmdW5jdGlvbiBjYW4gbm93IGZhaWwgYW5kIHRoYXQgdGhpcyBmYWlsdXJlIGlzIGludGVuZGVkIHRvIGJlIGhhbmRsZWQsIHdoaWNoIGNvbmZpcm1zIG15IGVhcmxpZXIgaHlwb3RoZXNpcy4KCiogICAqKmBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKClgIEltcGxlbWVudGF0aW9uOioqIEluIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCwgdGhlIG5ldyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4gSXQgY2xvbmVzIHRoZSBNUFRDUCBtYXN0ZXIgc29ja2V0IChgbXNrYCkgc2FmZWx5IHVzaW5nIFJDVSBhbmQgY2FsbHMgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCgpYC4gVGhpcyBpcyBjb3JlIGxvZ2ljIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4gSXQgYWxzbyBpbnRyb2R1Y2VzIHNvbWUgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIGZhaWx1cmUgdG8gaW5pdGlhbGl6ZSBhIGNsb25lLiBUaGV5IGFyZSB1c2luZyBgV1JJVEVfT05DRWAgdG8gdXBkYXRlIHNvbWUgYG1za2AgcG9pbnRlcnMsIHdoaWNoIHBvaW50cyB0byBjb25jdXJyZW5jeSBhbmQgZGF0YSByYWNlcy4KCiogICAqKlRva2VuIEhhbmRsaW5nIGFuZCBDb25jdXJyZW5jeToqKiBgbmV0L21wdGNwL3Rva2VuLmNgIGNvbnRhaW5zIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCgpYCBhbmQgdXBkYXRlcyB0byBgbXB0Y3BfdG9rZW5fYWNjZXB0KClgLCBwYXJ0aWN1bGFybHkgYSBtaW5vciBjb25jdXJyZW5jeSBmaXggaW4gYG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCgpYC4gVGhpcyBzaWduYWxzIHRoYXQgdGhlIGNoYW5nZXMgaW5jbHVkZSB0aHJlYWQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgdG9rZW4gcmVwbGFjZW1lbnQuCgoqICAgKipVbml0IFRlc3RzOioqIEZpbmFsbHksIGBuZXQvbXB0Y3AvdG9rZW5fdGVzdC5jYCBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBgbXB0Y3BfdG9rZW5fYWNjZXB0KClgJiMzOTtzIHJldHVybiB2YWx1ZS4gVGhpcyBpcyBnb29kIHRvIHNlZTsgdGhpcyBzaWduYWxzIHRoYXQgdGhleSB3ZXJlIHRoaW5raW5nIGFib3V0IGhvdyB0byB0ZXN0IHRoZSBuZXcgYmVoYXZpb3IuCgpOb3csIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGBpbmV0X3JlcXNrX2Nsb25lYCB0byBzZWUgd2hlcmUgYWxsIG9mIHRoaXMgZml0cyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O2xsIHJlYWQgdGhlIGNvZGUgb3IgdXNlIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBmaWxlIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cy4KCkJhc2VkIG9uIHRoaXMgZmlyc3QgcGFzcywgdGhlIGNoYW5nZXMgKmFwcGVhciogdG8gYmUgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGNvbmN1cnJlbmN5IGFuZCB0b2tlbiBtYW5hZ2VtZW50LiBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB0aGF0IHRoaXMgaW50cm9kdWNlcyAqbmV3KiBhdmVudWVzIGZvciBLTVNBTiB0byBmaW5kIGlzc3Vlcy4gSG93ZXZlciwgdGhlIGNoYW5nZXMgdG8gZXJyb3IgaGFuZGxpbmcsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIHVzZSBvZiBSQ1UgYW5kIGBXUklURV9PTkNFYCBzdWdnZXN0IHRoZXNlIGNoYW5nZXMgKmNvdWxkKiBoYXZlIGludHJvZHVjZWQgc3VidGxlIGRhdGEgcmFjZXMgb3IgY29uY3VycmVuY3kgYnVncyB0aGF0IG1heSBiZSBkZXRlY3RhYmxlIGJ5IEtNU0FOLiBJIHdvdWxkIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3BlY2lmaWMgY29kZSwgYW5kIHBvdGVudGlhbGx5IHVzZSB0aGUgY29kZSBicm93c2luZyB0b29scywgdG8gZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiBjb25jdXJyZW5jeSByaXNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcdG5yZXEtXHUwMDNlcnNrX2xpc3RlbmVyID0gc2s7XG4gOTQ2Olx0XG4gOTQ3Olx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2IHRjcF9yc2sobnJlcSktXHUwMDNldGZvX2xpc3RlbmVyKSB7XG4gOTQ4Olx0XHRcdHN0cnVjdCBmYXN0b3Blbl9xdWV1ZSAqZmFzdG9wZW5xO1xuIDk0OTpcdFxuIDk1MDpcdFx0XHQvKiByZXFza19mYXN0b3Blbl9yZW1vdmUoKSB3aWxsIHVuY2hhcmdlIG5yZXEtXHUwMDNlcnNrX2xpc3RlbmVyLFxuIDk1MTpcdFx0XHQgKiB0aGF0IGlzIEBzaywgc28gY2hhcmdlIGl0IGhlcmUuICBVbmxpa2UgdGhlIGxpc3RlbmVyXG4gOTUyOlx0XHRcdCAqIGJlaW5nIGNsb3NlZCwgQHNrIGlzIGxpdmUgYW5kIG5lZWRzIGl0cyBsb2NrLlxuIDk1MzpcdFx0XHQgKi9cbiA5NTQ6XHRcdFx0ZmFzdG9wZW5xID0gXHUwMDI2aW5ldF9jc2soc2spLVx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlLmZhc3RvcGVucTtcbiA5NTU6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmZhc3RvcGVucS1cdTAwM2Vsb2NrKTtcbiA5NTY6XHRcdFx0ZmFzdG9wZW5xLVx1MDAzZXFsZW4mIzQzOyYjNDM7O1xuIDk1NzpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZmYXN0b3BlbnEtXHUwMDNlbG9jayk7XG4gOTU4Olx0XG4gOTU5Olx0XHRcdC8qIFdlIG5lZWQgbm90IGFjcXVpcmUgZmFzdG9wZW5xLVx1MDAzZWxvY2tcbiA5NjA6XHRcdFx0ICogYmVjYXVzZSB0aGUgY2hpbGQgc29ja2V0IGlzIGxvY2tlZCBpbiBpbmV0X2Nza19saXN0ZW5fc3RvcCgpLlxuIDk2MTpcdFx0XHQgKi9cbiA5NjI6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIDk2MzpcdFx0fVxuIDk2NDpcdFxuIDk2NTpcdFx0aWYgKHJza19pc19tcHRjcChyZXEpKVxuIDk2NjpcdFx0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG4gOTY3Olx0XG4gOTY4Olx0XHRyZXR1cm4gbnJlcTtcbiA5Njk6XHR9XG4gOTcwOlx0XG4gOTcxOlx0c3RhdGljIHZvaWQgcmVxc2tfcXVldWVfbWlncmF0ZWQoc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUsXG4gOTcyOlx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIDk3MzpcdHtcbiA5NzQ6XHRcdGlmIChyZXEtXHUwMDNlbnVtX3RpbWVvdXQgPT0gMClcbiA5NzU6XHRcdFx0YXRvbWljX2luYyhcdTAwMjZxdWV1ZS1cdTAwM2V5b3VuZyk7XG4gOTc2Olx0XHRhdG9taWNfaW5jKFx1MDAyNnF1ZXVlLVx1MDAzZXFsZW4pO1xuIDk3NzpcdH1cbiA5Nzg6XHRcbiA5Nzk6XHRzdGF0aWMgdm9pZCByZXFza19taWdyYXRlX3Jlc2V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiA5ODA6XHR7XG4gOTgxOlx0XHRyZXEtXHUwMDNlc2F2ZWRfc3luID0gTlVMTDtcbiA5ODI6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiA5ODM6XHRcdGluZXRfcnNrKHJlcSktXHUwMDNlaXB2Nl9vcHQgPSBOVUxMO1xuIDk4NDpcdFx0aW5ldF9yc2socmVxKS1cdTAwM2Vwa3RvcHRzID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY0MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gaW5ldF9yZXFza19jbG9uZSoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgcmVtYWluaW5nIGNvZGUgd2l0aGluIGBpbmV0X3JlcXNrX2Nsb25lYC4gSG1tLCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBwYXN0IHRoZSBpbml0aWFsIHNldHVwIGFuZCBlcnJvciBjaGVja2luZy4gSSYjMzk7bSBndWVzc2luZyB3ZSYjMzk7cmUgbm93IGludG8gdGhlIG1lYXQgb2YgaXQ6IHRoZSBhY3R1YWwgZHVwbGljYXRpb24gb2YgdGhlIHJlcXVlc3Qgc29ja2V0IHN0cnVjdHVyZSBmb3IgYSBuZXcgY29ubmVjdGlvbi4gSSBleHBlY3QgdG8gc2VlIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBkYXRhIGNvcHlpbmcuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBmYWlsdXJlIGFsb25nIHRoZSB3YXksIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IG1haW50YWluIGNvbnNpc3RlbmN5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLiBDb25zaWRlcmluZyB0aGUgY29tcGxleGl0aWVzIG9mIFRDUCBzdGF0ZSBtYW5hZ2VtZW50LCB0aGF0JiMzOTtzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEuIEkgaG9wZSBpdCBpcyBhbGwgZG9uZSBpbiBhIGNvbnNpc3RlbnQgbWFubmVyLCBhcyBpdCBoYXMgdG8gaGFuZGxlIHRoZSBjb25jdXJyZW50IGFjY2Vzcy4gVGhpcyBpcyBnb2luZyB0byBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkgZGVhbCB3aXRoIHRoZSBgcmVxc2tgIGRhdGEgc3RydWN0dXJlIGFuZCBhbGwgdGhlIHBvaW50ZXJzIHdpdGhpbi4gV2hhdCBudWFuY2VzIGFyZSBhdCBwbGF5PyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBjaGlsZD8gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGFuZCBhIGxvdCBoaW5nZXMgb24gdGhlIHJpZ2h0IGxvY2tzLiBDdXJpb3VzIHRvIHNlZSB0aGUgdGVjaG5pcXVlcyB1c2VkIGZvciBhdG9taWMgb3BlcmF0aW9ucyBhbmQgbWVtb3J5IGJhcnJpZXJzLCBwYXJ0aWN1bGFybHkgaWYgdGhleSYjMzk7cmUgZGVhbGluZyB3aXRoIG11bHRpcGxlIENQVXMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhhdC4gT2theSwgSSYjMzk7bSByZWFkeS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MjA6XHRcdG5yZXEgPSBrbWVtX2NhY2hlX2FsbG9jKHJlcS1cdTAwM2Vyc2tfb3BzLVx1MDAzZXNsYWIsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuIDkyMTpcdFx0aWYgKCFucmVxKSB7XG4gOTIyOlx0XHRcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BNSUdSQVRFUkVRRkFJTFVSRSk7XG4gOTIzOlx0XG4gOTI0Olx0XHRcdC8qIHBhaXJlZCB3aXRoIHJlZmNvdW50X2luY19ub3RfemVybygpIGluIHJldXNlcG9ydF9taWdyYXRlX3NvY2soKSAqL1xuIDkyNTpcdFx0XHRzb2NrX3B1dChzayk7XG4gOTI2Olx0XHRcdHJldHVybiBOVUxMO1xuIDkyNzpcdFx0fVxuIDkyODpcdFxuIDkyOTpcdFx0cmVxX3NrID0gcmVxX3RvX3NrKHJlcSk7XG4gOTMwOlx0XHRucmVxX3NrID0gcmVxX3RvX3NrKG5yZXEpO1xuIDkzMTpcdFxuIDkzMjpcdFx0bWVtY3B5KG5yZXFfc2ssIHJlcV9zayxcbiA5MzM6XHRcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc29jaywgc2tfZG9udGNvcHlfYmVnaW4pKTtcbiA5MzQ6XHRcdHVuc2FmZV9tZW1jcHkoXHUwMDI2bnJlcV9zay1cdTAwM2Vza19kb250Y29weV9lbmQsIFx1MDAyNnJlcV9zay1cdTAwM2Vza19kb250Y29weV9lbmQsXG4gOTM1Olx0XHRcdCAgICAgIHJlcS1cdTAwM2Vyc2tfb3BzLVx1MDAzZW9ial9zaXplIC0gb2Zmc2V0b2Yoc3RydWN0IHNvY2ssIHNrX2RvbnRjb3B5X2VuZCksXG4gOTM2Olx0XHRcdCAgICAgIC8qIGFsbG9jIGlzIGxhcmdlciB0aGFuIHN0cnVjdCwgc2VlIGFib3ZlICovKTtcbiA5Mzc6XHRcbiA5Mzg6XHRcdHNrX25vZGVfaW5pdChcdTAwMjZucmVxX3NrLVx1MDAzZXNrX25vZGUpO1xuIDkzOTpcdFx0bnJlcV9zay1cdTAwM2Vza190eF9xdWV1ZV9tYXBwaW5nID0gcmVxX3NrLVx1MDAzZXNrX3R4X3F1ZXVlX21hcHBpbmc7XG4gOTQwOlx0I2lmZGVmIENPTkZJR19TT0NLX1JYX1FVRVVFX01BUFBJTkdcbiA5NDE6XHRcdG5yZXFfc2stXHUwMDNlc2tfcnhfcXVldWVfbWFwcGluZyA9IHJlcV9zay1cdTAwM2Vza19yeF9xdWV1ZV9tYXBwaW5nO1xuIDk0MjpcdCNlbmRpZlxuIDk0MzpcdFx0bnJlcV9zay1cdTAwM2Vza19pbmNvbWluZ19jcHUgPSByZXFfc2stXHUwMDNlc2tfaW5jb21pbmdfY3B1O1xuIDk0NDpcdFxuIDk0NTpcdFx0bnJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIgPSBzaztcbiA5NDY6XHRcbiA5NDc6XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjYgdGNwX3JzayhucmVxKS1cdTAwM2V0Zm9fbGlzdGVuZXIpIHtcbiA5NDg6XHRcdFx0c3RydWN0IGZhc3RvcGVuX3F1ZXVlICpmYXN0b3BlbnE7XG4gOTQ5Olx0XG4gOTUwOlx0XHRcdC8qIHJlcXNrX2Zhc3RvcGVuX3JlbW92ZSgpIHdpbGwgdW5jaGFyZ2UgbnJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIsXG4gOTUxOlx0XHRcdCAqIHRoYXQgaXMgQHNrLCBzbyBjaGFyZ2UgaXQgaGVyZS4gIFVubGlrZSB0aGUgbGlzdGVuZXJcbiA5NTI6XHRcdFx0ICogYmVpbmcgY2xvc2VkLCBAc2sgaXMgbGl2ZSBhbmQgbmVlZHMgaXRzIGxvY2suXG4gOTUzOlx0XHRcdCAqL1xuIDk1NDpcdFx0XHRmYXN0b3BlbnEgPSBcdTAwMjZpbmV0X2NzayhzayktXHUwMDNlaWNza19hY2NlcHRfcXVldWUuZmFzdG9wZW5xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjYxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVBUQ1AgUmVxdWVzdCBTb2NrZXQgQ2xvbmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGluZXRfcmVxc2tfY2xvbmUoKWAsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgU09fUkVVU0VQT1JUYCBzb2NrZXQgbWlncmF0aW9uLiBUaGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IHdoZW4gYSBsaXN0ZW5pbmcgc29ja2V0IGlzIGNsb3NlZCBhbmQgaXRzIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIG1vdmVkIHRvIGFub3RoZXIgbGlzdGVuZXIgaW4gdGhlIHJldXNlcG9ydCBncm91cCwgdGhlIGNsb25pbmcgcHJvY2VzcywgaGFuZGxlZCBieSBgaW5ldF9yZXFza19jbG9uZSgpYCwgd2FzbiYjMzk7dCBwcm9wZXJseSB0YWtpbmcgTVBUQ1Atc3BlY2lmaWMgc3RhdGUgaW50byBhY2NvdW50LiBUaGlzIG1lYW5zIHRoaW5ncyBsaWtlIE1QVENQIHRva2VuIHRyYWNraW5nIGFuZCB0aGUgbWFuYWdpbmcgb2YgdGhlIGBtc2tgIHJlZmVyZW5jZSB3ZXJlbiYjMzk7dCBiZWluZyBjbG9uZWQgYWxvbmcgd2l0aCB0aGUgcmVxdWVzdCBzb2NrZXQgKGByZXFza2ApLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgdGhpcyBieSBpbnRyb2R1Y2luZyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgIHRvIGhhbmRsZSB0aGUgTVBUQ1Atc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgY2xvbmluZy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2Agc3RydWN0dXJlIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXQgaG9sZHMsIGFuZCB0aGVuIEkgaGF2ZSB0byBkaWcgaW50byBgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0YCB0byBzZWUgaG93IGl0cyBjb21wb25lbnRzIGFyZSBpbml0aWFsaXplZC4gRW5zdXJpbmcgdGhlc2UgY29tcG9uZW50cyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaXMgY3JpdGljYWwgdG8gcHJldmVudCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBidWdzIGRvd24gdGhlIHJvYWQuIFRoaXMgcmVxdWlyZXMgYSBtZXRpY3Vsb3VzIHdhbGt0aHJvdWdoLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlIGFsaWdubWVudCBhbmQgYml0ZmllbGQgaGFuZGxpbmcuIFRoZSBnb2FsIGlzIHRvIHZlcmlmeSB0aGF0IHRoZXNlIG5ldyBmdW5jdGlvbnMgZW5zdXJlIGFsbCBNUFRDUC1yZWxhdGVkIGRhdGEgaXMgY29ycmVjdGx5IGNvcGllZCBkdXJpbmcgdGhlIGNsb25pbmcgb3BlcmF0aW9uIHdpdGhvdXQgbGVha2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avb3B0aW9ucy5jPTk0Nj1ib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdW5zaWduZWQgaW50ICpzaXplLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtOTQ4LXtcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTQ5Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk1MC1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNzEzPXN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzE3LXtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM3MTg6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MTktXHRzdHJ1Y3Qgc29jayAqbnNrID0gc2tfY2xvbmVfbG9jayhzaywgR0ZQX0FUT01JQyk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9NDk1PXN0cnVjdCBjc3VtX3BzZXVkb19oZWFkZXIge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUwMS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUwMjpzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sge1xubmV0L21wdGNwL3Byb3RvY29sLmgtNTAzLVx0c3RydWN0XHR0Y3BfcmVxdWVzdF9zb2NrIHNrO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUyMi1cbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUyMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjQtbXB0Y3Bfc3ViZmxvd19yc2soY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmgtNTI1LXtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUyNjpcdHJldHVybiAoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICopcnNrO1xubmV0L21wdGNwL3Byb3RvY29sLmgtNTI3LX1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMDg1PWludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEwODY6Ym9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTA4Ny1cdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzU3PXN0YXRpYyBpbmxpbmUgYm9vbCBzdWJmbG93X3NpbXVsdGFuZW91c19jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzY1LSNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjY6dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjctXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzY4OmJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2OS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTM3Mj1zdGF0aWMgaW5saW5lIHZvaWRcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNzM6c3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzc0LVx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7fVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTM3NT1zdGF0aWMgaW5saW5lIGJvb2xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNzY6bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM3Ny1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0zOD1zdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzkte1xubmV0L21wdGNwL3N1YmZsb3cuYzo0MDpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy00MS1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTUwPXZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy01Mi17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjUzOlx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjU0Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTU1LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTk2PXN0YXRpYyBib29sIG1wdGNwX2Nhbl9hY2NlcHRfbmV3X3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEwNC0vKiB2YWxpZGF0ZSByZWNlaXZlZCB0b2tlbiBhbmQgY3JlYXRlIHRydW5jYXRlZCBobWFjIGFuZCBub25jZSBmb3IgU1lOLUFDSyAqL1xubmV0L21wdGNwL3N1YmZsb3cuYzoxMDU6c3RhdGljIHZvaWQgc3ViZmxvd19yZXFfY3JlYXRlX3RobWFjKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEwNi17XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xMjA9c3RhdGljIHN0cnVjdCBtcHRjcF9zb2NrICpzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyMS17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEyMjpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xMjMtXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ0PXN0YXRpYyB2b2lkIHN1YmZsb3dfaW5pdF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE0NS17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE0NjpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xNDctXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xODM9c3RhdGljIGludCBzdWJmbG93X2NoZWNrX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xODctXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrX2xpc3RlbmVyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg4Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4OS1cdHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkIG1wX29wdDtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTMwMD1pbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMzA0LVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChza19saXN0ZW5lcik7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjMwNTpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0zMDYtXHRzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCBtcF9vcHQ7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz03ODM9RVhQT1JUX1NZTUJPTChtcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc4NS0vKiB2YWxpZGF0ZSBobWFjIHJlY2VpdmVkIGluIHRoaXJkIEFDSyAqL1xubmV0L21wdGNwL3N1YmZsb3cuYzo3ODY6c3RhdGljIGJvb2wgc3ViZmxvd19obWFjX3ZhbGlkKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc4Ny1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTgzOT1zdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy04NDgtXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6ODQ5Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtODUwLVx0c3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgbXBfb3B0O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjA3Nz1zdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMDgwLXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjA4MTpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMDgyLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqb2xkX2N0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KG5ld3NrKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNjg9c3RhdGljIGludCBzdWJmbG93X29wc19pbml0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpzdWJmbG93X29wcylcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2OS17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNzA6XHRzdWJmbG93X29wcy1cdTAwM2VvYmpfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2spO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMTcxLVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjIxNz12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxOC17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIyMTk6XHQvKiBJbiBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2ssIHdlIGFzc3VtZSB0aGUgVENQIHJlcXVlc3Qgc29ja1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMjIwLVx0ICogc3RydWN0dXJlcyBmb3IgdjQgYW5kIHY2IGhhdmUgdGhlIHNhbWUgc2l6ZS4gSXQgc2hvdWxkIG5vdCBjaGFuZ2VkIGluXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz01OT1zdGF0aWMgdm9pZCBtcHRjcF9qb2luX3N0b3JlX3N0YXRlKHN0cnVjdCBqb2luX2VudHJ5ICplbnRyeSxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6NjA6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxKVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy02MS17XG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03MC1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6NzE6dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNzItXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkxLSAqL1xubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo5Mjpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTMtXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3Rva2VuLmM9NDg9c3RhdGljIHN0cnVjdCB0b2tlbl9idWNrZXQgKnRva2VuX2J1Y2tldCh1MzIgdG9rZW4pXG4tLVxubmV0L21wdGNwL3Rva2VuLmMtNTMtLyogY2FsbGVkIHdpdGggYnVja2V0IGxvY2sgaGVsZCAqL1xubmV0L21wdGNwL3Rva2VuLmM6NTQ6c3RhdGljIHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqXG5uZXQvbXB0Y3AvdG9rZW4uYy01NS1fX3Rva2VuX2xvb2t1cF9yZXEoc3RydWN0IHRva2VuX2J1Y2tldCAqdCwgdTMyIHRva2VuKVxubmV0L21wdGNwL3Rva2VuLmMtNTYte1xubmV0L21wdGNwL3Rva2VuLmM6NTc6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcTtcbm5ldC9tcHRjcC90b2tlbi5jLTU4LVx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKnBvcztcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYz0xMDg9aW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbm5ldC9tcHRjcC90b2tlbi5jLTEwOS17XG5uZXQvbXB0Y3AvdG9rZW4uYzoxMTA6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC90b2tlbi5jLTExMS1cdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYz0xOTA9dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTE5Mi17XG5uZXQvbXB0Y3AvdG9rZW4uYzoxOTM6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC90b2tlbi5jOjE5NDpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxO1xubmV0L21wdGNwL3Rva2VuLmM6MTk1Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG5uZXQvbXB0Y3AvdG9rZW4uYy0xOTYtXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4tLVxubmV0L21wdGNwL3Rva2VuLmMtMjI5LSAqL1xubmV0L21wdGNwL3Rva2VuLmM6MjMwOmJvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxubmV0L21wdGNwL3Rva2VuLmMtMjMxLVx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMzIte1xubmV0L21wdGNwL3Rva2VuLmM6MjMzOlx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG5uZXQvbXB0Y3AvdG9rZW4uYy0yMzQtXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4tLVxubmV0L21wdGNwL3Rva2VuLmM9NDAxPXZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbm5ldC9tcHRjcC90b2tlbi5jLTQwMi17XG5uZXQvbXB0Y3AvdG9rZW4uYzo0MDM6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC90b2tlbi5jOjQwNDpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xubmV0L21wdGNwL3Rva2VuLmMtNDA1LVx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuLS1cbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtNS1cbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6NjpzdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpidWlsZF9yZXFfc29jayhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTcte1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzo4Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXE7XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTktXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjEwOlx0cmVxID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBzaXplb2Yoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrKSxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTEtXHRcdFx0ICAgIEdGUF9VU0VSKTtcbi0tXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTE4PXN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfcmVxX2Jhc2ljKHN0cnVjdCBrdW5pdCAqdGVzdClcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTkte1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoyMDpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxID0gYnVpbGRfcmVxX3NvY2sodGVzdCk7XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTIxLVx0c3RydWN0IG1wdGNwX3NvY2sgKm51bGxfbXNrID0gTlVMTDtcbi0tXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTk0PXN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtOTUte1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzo5NjpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxID0gYnVpbGRfcmVxX3NvY2sodGVzdCk7XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTk3LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IGJ1aWxkX21zayh0ZXN0KTtcbi0tXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTExMz1zdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExNC17XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjExNTpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxID0gYnVpbGRfcmVxX3NvY2sodGVzdCk7XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExNi1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBidWlsZF9tc2sodGVzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbm5lciBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayBTdHJ1Y3R1cmUqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AuIFdoZXJlIGJldHRlciB0byBzdGFydCB0aGFuIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSDigJMgdGhlIGhlYWRlciBmaWxlLCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLCByaWdodD8gSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHN0cnVjdHVyZSB0byBtYWtlIGFueSBtZWFuaW5nZnVsIHByb2dyZXNzIHdpdGggdGhpcyBhc3BlY3Qgb2YgTVBUQ1AuIE5vIHNlbnNlIGluIHdpbmdpbmcgaXQgd2hlbiB0aGUgcHJlY2lzZSBkZWZpbml0aW9ucyBhcmUgcmlnaHQgYXQgbXkgZmluZ2VydGlwcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdH07XG4gNTAxOlx0XG4gNTAyOlx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrIHtcbiA1MDM6XHRcdHN0cnVjdFx0dGNwX3JlcXVlc3Rfc29jayBzaztcbiA1MDQ6XHRcdHUxNlx0bXBfY2FwYWJsZSA6IDEsXG4gNTA1Olx0XHRcdG1wX2pvaW4gOiAxLFxuIDUwNjpcdFx0XHRiYWNrdXAgOiAxLFxuIDUwNzpcdFx0XHRyZXF1ZXN0X2JrdXAgOiAxLFxuIDUwODpcdFx0XHRjc3VtX3JlcWQgOiAxLFxuIDUwOTpcdFx0XHRhbGxvd19qb2luX2lkMCA6IDE7XG4gNTEwOlx0XHR1OFx0bG9jYWxfaWQ7XG4gNTExOlx0XHR1OFx0cmVtb3RlX2lkO1xuIDUxMjpcdFx0dTY0XHRsb2NhbF9rZXk7XG4gNTEzOlx0XHR1NjRcdGlkc247XG4gNTE0Olx0XHR1MzJcdHRva2VuO1xuIDUxNTpcdFx0dTMyXHRzc25fb2Zmc2V0O1xuIDUxNjpcdFx0dTY0XHR0aG1hYztcbiA1MTc6XHRcdHUzMlx0bG9jYWxfbm9uY2U7XG4gNTE4Olx0XHR1MzJcdHJlbW90ZV9ub25jZTtcbiA1MTk6XHRcdHN0cnVjdCBtcHRjcF9zb2NrXHQqbXNrO1xuIDUyMDpcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgdG9rZW5fbm9kZTtcbiA1MjE6XHR9O1xuIDUyMjpcdFxuIDUyMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcbiA1MjQ6XHRtcHRjcF9zdWJmbG93X3Jzayhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyc2spXG4gNTI1Olx0e1xuIDUyNjpcdFx0cmV0dXJuIChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKilyc2s7XG4gNTI3Olx0fVxuIDUyODpcdFxuIDUyOTpcdHN0cnVjdCBtcHRjcF9kZWxlZ2F0ZWRfYWN0aW9uIHtcbiA1MzA6XHRcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIDUzMTpcdFx0bG9jYWxfbG9ja190IGJoX2xvY2s7XG4gNTMyOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7XG4gNTMzOlx0fTtcbiA1MzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGluZXRfcmVxc2tfY2xvbmVgIFByb2Nlc3Mgd2l0aCBNUFRDUCBTdWJmbG93cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBpbmV0X3JlcXNrX2Nsb25lYCBmdW5jdGlvbiwgZm9jdXNpbmcgb24gdGhlIE1QVENQIHN1YmZsb3cgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXF1ZXN0IHNvY2tldCBpcyBjbG9uZWQgYW5kIGhvdyBNUFRDUC1zcGVjaWZpYyBkYXRhIGlzIGhhbmRsZWQuCgpGaXJzdCwgd2l0aGluIGBpbmV0X3JlcXNrX2Nsb25lYCwgdGhlIGNvZGUgYWxsb2NhdGVzIGEgbmV3IGByZXF1ZXN0X3NvY2tgIChgbnJlcWApIHVzaW5nIGBrbWVtX2NhY2hlX2FsbG9jYC4gIENydWNpYWxseSwgaXQgdXNlcyBgcmVxLSZndDtyc2tfb3BzLSZndDtzbGFiYCwgd2hpY2gsIGluIHRoZSBNUFRDUCBzdWJmbG93IGNhc2UsIGlzIGNvbmZpZ3VyZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLiBJIHNlZSB0aGF0IGEgYG1lbWNweWAgaXMgcGVyZm9ybWVkLiBJdCBjb3BpZXMgdGhlIGluaXRpYWwgcGFydCBvZiB0aGUgYHN0cnVjdCBzb2NrYCBmaWVsZHMgZnJvbSB0aGUgb3JpZ2luYWwgKGByZXFfc2tgKSB0byB0aGUgbmV3IG9uZSAoYG5yZXFfc2tgKS4gVGhlbiwgaXQgdXNlcyBgdW5zYWZlX21lbWNweWAgdG8gY29weSB0aGUgcmVtYWluaW5nIE1QVENQLXNwZWNpZmljIGZpZWxkcyBiZXlvbmQgdGhlIGBzdHJ1Y3Qgc29ja2Agc3RydWN0dXJlLiAgVGhpcyBpcyBiYXNlZCBvbiB0aGUgc2l6ZSBkZWZpbmVkIGJ5IGByZXEtJmd0O3Jza19vcHMtJmd0O29ial9zaXplYCwgd2hpY2gsIGFzIEkgbm90ZWQsIGVxdWFscyBgc2l6ZW9mKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jaylgIHdoZW4gTVBUQ1Agc3ViZmxvd3MgYXJlIGludm9sdmVkLiBUaGlzIG1lYW5zIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGxhcmdlciB0aGFuIGBzdHJ1Y3Qgc29ja2AgYW5kIGB1bnNhZmVfbWVtY3B5YCBjb3BpZXMgdGhlIHJlbWFpbmluZyBwYXJ0LCB3aGljaCBtYWtlcyBzZW5zZS4KCk5leHQsIHRoZXJlJiMzOTtzIGEgY2hlY2sgdXNpbmcgYHJza19pc19tcHRjcChyZXEpYCB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhbiBNUFRDUCBzdWJmbG93LiBJZiBpdCBpcywgdGhlIGNvZGUgY2FsbHMgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGNyaXRpY2FsIGZvciBoYW5kbGluZyB0aGUgTVBUQ1Atc3BlY2lmaWMgc3RhdGUuCgpJbnNpZGUgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgLCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgbG9naWM6IHRoZSBnb2FsIGlzIHRvIGluaXRpYWxpemUgdGhlIE1QVENQLXNwZWNpZmljIHBhcnQgb2YgdGhlIGNsb25lZCByZXF1ZXN0LiBgbXB0Y3Bfc3ViZmxvd19yc2tgIGlzIHVzZWQgdG8gZ2V0IHBvaW50ZXJzIHRvIHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdHVyZXMgZm9yIGJvdGggdGhlIG9yaWdpbmFsIChgcmVxYCkgYW5kIHRoZSBuZXcgKGBuZXdfcmVxYCkgcmVxdWVzdCBzb2Nrcy4gVGhlIGNvZGUgYXBwZWFycyB0byBiZSBlbnN1cmluZyB0aGF0IGl0IGRvZXNuJiMzOTt0IHRyeSB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBzb2NrZXQgaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBhbHJlYWR5IHplcm8uIFRoZW4sIGl0IGF0dGVtcHRzIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBhc3NvY2lhdGVkIGBtcHRjcF9zb2NrYCAoYG1za2ApIHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9fYWNxdWlyZWAuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgc2hhcmVkIG93bmVyc2hpcCBvciBhIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHJlcXVlc3Qgc29ja2V0IGFuZCBhIG1hc3RlciBNUFRDUCBzb2NrZXQuICBUaGVyZSYjMzk7cyBhbHNvIGEgY2hlY2sgdXNpbmcgYFJFQURfT05DRWAgdG8gZW5zdXJlIHRoZSB2YWx1ZSBvZiBgbXNrYCBoYXNuJiMzOTt0IGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24sIGFuZCBpZiBpdCBoYXMsIHRoZSBjb2RlIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgc2V0cyBgbXNrYCB0byBOVUxMLiBGaW5hbGx5LCBpdCBhc3NpZ25zIHRoZSBgbXNrYCAocG9zc2libHkgTlVMTCBpZiBubyB2YWxpZCBzb2NrZXQgZXhpc3RzKSB0byB0aGUgbmV3IHN1YmZsb3cgcmVxdWVzdC4gVGhlbiBpdCBjYWxscyBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCB0byBtb3ZlIHRva2VuLXJlbGF0ZWQgZGF0YSBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRvIHRoZSBuZXcgY2xvbmUuCgpgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCBzZWVtcyB0byBtYW5hZ2UgdG9rZW4gYnVja2V0cyByZWxhdGVkIHRvIGZsb3cgY29udHJvbCBvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIEl0IGNoZWNrcyBpZiB0aGUgdG9rZW4gbm9kZSBmb3IgdGhlIHN1YmZsb3cgcmVxdWVzdCBpcyB1bmhhc2hlZC4gSWYgaXQgaXMsIGBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3RgIGlzIGNhbGxlZCwgd2hpY2ggd2lsbCBsaWtlbHkgaGFuZGxlIGluaXRpYWxpemluZyB0aGlzIHRva2VuIGRhdGEgc3RydWN0dXJlLiBJZiBub3QsIGl0IHJldHJpZXZlcyB0aGUgYHRva2VuX2J1Y2tldGAuIFRoZSBjb2RlIHRha2VzIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBzaGFyZWQgYWNjZXNzIHRvIHRoZSBidWNrZXQuIEluc2lkZSB0aGUgbG9jaywgaXQgcmUtY2hlY2tzIGlmIHRoZSB0b2tlbiBub2RlIGlzIHVuaGFzaGVkLiBJZiBpdCBzdGlsbCBpcywgaXQgY2FsbHMgYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAuIE90aGVyd2lzZSwgaXQgZmluZHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBvbGQgYHRva2VuYCB1c2luZyB0aGUgYnVja2V0JiMzOTtzIGxvb2t1cC4gSXQgdGhlbiB0cmllcyB0byByZXBsYWNlIHRoZSBleGlzdGluZyBgdG9rZW5gIHdpdGggdGhlIG5ldyBvbmUgdXNpbmcgYGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3VgLCBidXQgb25seSBpZiB0aGUgZm91bmQgcG9zaXRpb24gbWF0Y2hlcyB0aGUgZXhpc3Rpbmcgb25lLiBPdGhlcndpc2UsIGl0IGNhbGxzIGBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3RgIGFnYWluLCBpbXBseWluZyBhIGZhbGxiYWNrIGluaXRpYWxpemF0aW9uIGlmIHRoZSByZXBsYWNlbWVudCBmYWlscy4KCk5vdyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAgdG8gZnVsbHkgZ3Jhc3AgdGhlIHRva2VuIG1hbmFnZW1lbnQgc2NoZW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF90b2tlbl9pbml0X3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmg9MTA3NT12b2lkIF9faW5pdCBtcHRjcF90b2tlbl9pbml0KHZvaWQpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTA3NjpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEwNzcte1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ0PXN0YXRpYyB2b2lkIHN1YmZsb3dfaW5pdF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTItXHRzdWJmbG93X3JlcS1cdTAwM2Vtc2sgPSBOVUxMO1xubmV0L21wdGNwL3N1YmZsb3cuYzoxNTM6XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QocmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU0LX1cbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYz0xOTA9dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTIwMC1cdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSkge1xubmV0L21wdGNwL3Rva2VuLmM6MjAxOlx0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG5uZXQvbXB0Y3AvdG9rZW4uYy0yMDItXHRcdHJldHVybjtcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMDctXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbm5ldC9tcHRjcC90b2tlbi5jOjIwODpcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xubmV0L21wdGNwL3Rva2VuLmMtMjA5LVx0fSBlbHNlIHtcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMTQtXHRcdGVsc2Vcbm5ldC9tcHRjcC90b2tlbi5jOjIxNTpcdFx0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG5uZXQvbXB0Y3AvdG9rZW4uYy0yMTYtXHR9XG4tLVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz02PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKmJ1aWxkX3JlcV9zb2NrKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTEyLVx0S1VOSVRfRVhQRUNUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCByZXEpO1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMzpcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSk7XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTE0LVx0c29ja19uZXRfc2V0KChzdHJ1Y3Qgc29jayAqKXJlcSwgXHUwMDI2aW5pdF9uZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzcyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0YCwgZm9jdXNpbmcgb24gd2hhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHNvbWVvbmUgd2l0aCB5b3VyIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IuLi4gaW5pdGlhdGluZyB0aGUgdG9rZW4gZXhjaGFuZ2UgZm9yIE1QVENQLCBvYnZpb3VzbHkuIENydWNpYWwgZm9yIGVzdGFibGlzaGluZyB0aGF0IHN1YmZsb3cgd2l0aCB0aGUgYXNzb2NpYXRlZCBjb250cm9sIGluZm9ybWF0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIHdoYXQga2luZCBvZiBgc3RydWN0YHMgYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlPyBQcm9iYWJseSBzb21lIHNvcnQgb2YgY29ubmVjdGlvbiBjb250ZXh0IChgc3RydWN0IG1wdGNwX3NvY2tgLCBwZXJoYXBzPykgYW5kIHRva2VuLXJlbGF0ZWQgZGF0YSAoYHN0cnVjdCBtcHRjcF90b2tlbmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGxpa2VseSkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdG9rZW4gaXRzZWxmIGlzIGdlbmVyYXRlZCwgYW5kIGNydWNpYWxseSwgaG93IGl0cyBpbml0aWFsIHZhbGlkaXR5IHBlcmlvZCBpcyBkZXRlcm1pbmVkLiBJcyBpdCBiYXNlZCBvbiBhIHRpbWVyLCBvciBhIG5lZ290aWF0ZWQgdmFsdWU/IFdoYXQgYXJlIHRoZSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucz8gQXJlIHdlIHVzaW5nIGNyeXB0b2dyYXBoaWMgcHJpbWl0aXZlcyBmb3IgdG9rZW4gcHJvdGVjdGlvbj8gS2V5IGV4Y2hhbmdlIGlzIGFsd2F5cyBzb21ldGhpbmcgdG8gZm9jdXMgb24uCgpUaGVuLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIGZsb3cuIEhvdyBkb2VzIHRoaXMgcmVxdWVzdCBpbnRlZ3JhdGUgd2l0aCB0aGUgb3ZlcmFsbCBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcHJvY2Vzcz8gSXMgaXQgY2FsbGVkIHN5bmNocm9ub3VzbHkgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAsIG9yIGlzIGl0IHBhcnQgb2YgYSBsYXRlciBuZWdvdGlhdGlvbj8gSG93IGFyZSBlcnJvcnMgaGFuZGxlZD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZXJyb3IgY29kZXMgZm9yIHRoaW5ncyBsaWtlIHJlc291cmNlIGxpbWl0YXRpb25zLCBwcm90b2NvbCB2aW9sYXRpb25zLCBvciBzZWN1cml0eSBpc3N1ZXMgZHVyaW5nIHRva2VuIGdlbmVyYXRpb24uIEkgZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBUQ1Agc3RhY2ssIHByb2JhYmx5IHRvIHNpZ25hbCB0aGUgbmVlZCBmb3IgYSB0b2tlbiBvciB0byBzZW5kIHRoZSBpbml0aWFsIHJlcXVlc3Qgb24gdGhlIGNvbnRyb2wgZmxvdy4KCkkgYWxzbyB3YW50IHRvIHNlZSBob3cgdGhpcyBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzLiBJcyB0aGVyZSBsb2NraW5nIGludm9sdmVkLCBlc3BlY2lhbGx5IGlmIG11bHRpcGxlIHRocmVhZHMgb3IgcHJvY2Vzc2VzIG1pZ2h0IGJlIGF0dGVtcHRpbmcgdG8gZXN0YWJsaXNoIHN1YmZsb3dzIGNvbmN1cnJlbnRseT8gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIGhvdyB0aGUgdG9rZW4gaXMgc3Vic2VxdWVudGx5IHVzZWQuIFRoZSBpbml0IHJlcXVlc3QgaXMgb25seSB0aGUgYmVnaW5uaW5nLiBIb3cgYXJlIHN1YnNlcXVlbnQgdG9rZW4gcmVxdWVzdHMgaGFuZGxlZCwgYW5kIGhvdyBkb2VzIHRoZSBzeXN0ZW0gbWFpbnRhaW4gc3RhdGU/IFdoYXQga2luZCBvZiBvcHRpbWl6YXRpb25zIGFyZSBpbXBsZW1lbnRlZCBmb3IgZGlmZmVyZW50IE1QVENQIGNvbm5lY3Rpb24gc2NlbmFyaW9zPwoKRmluYWxseSwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBwZXJmb3JtYW5jZT8gVG9rZW4gZXhjaGFuZ2UgaXMgYSB0cmFkZS1vZmY6IG92ZXJoZWFkIHZlcnN1cyB0aGUgYmVuZWZpdHMgb2Ygc3ViZmxvdyBjcmVhdGlvbiBhbmQgbG9hZCBiYWxhbmNpbmcuIEkmIzM5O2QgbGlrZSB0byBzZWUgaWYgYW55IG9wdGltaXphdGlvbnMgYXJlIGluIHBsYWNlIChlLmcuLCBjYWNoaW5nLCBwcmUtY2FsY3VsYXRpb24sIGV0Yy4pLiBBbmQgb2YgY291cnNlLCBJJiMzOTttIGtlZW4gdG8gZXZhbHVhdGUgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHJvYnVzdG5lc3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBTbywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGl0IGlzIHdvcmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzQ6XHRcbjEwNzU6XHR2b2lkIF9faW5pdCBtcHRjcF90b2tlbl9pbml0KHZvaWQpO1xuMTA3NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuMTA3NzpcdHtcbjEwNzg6XHRcdG1wdGNwX3N1YmZsb3dfcnNrKHJlcSktXHUwMDNldG9rZW5fbm9kZS5wcHJldiA9IE5VTEw7XG4xMDc5Olx0fVxuMTA4MDpcdFxuMTA4MTpcdGludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuMTA4MjpcdHZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbjEwODM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbjEwODQ6XHR2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuMTA4NTpcdGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcbjEwODY6XHRib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4xMDg3Olx0XHRcdFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4xMDg4Olx0Ym9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE1QVENQIFNvY2tldCBDbG9uaW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveWAgZnVuY3Rpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIHNvbGlkIHRoZXJlLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkIHRvIGFueSBwb3RlbnRpYWwgZXJyb3Igc2NlbmFyaW9zLiBBbmQgdGhlbiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IGBtcHRjcF9za19jbG9uZV9pbml0KClgLiBUaW1lIHRvIGdvIGRpZ2dpbmcgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCBhbmQgc2VlIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucywgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFyZWEgb2YgcG9zc2libGUgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzcxMDpcdFx0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XG4zNzExOlx0fVxuMzcxMjpcdFxuMzcxMzpcdHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbjM3MTQ6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuMzcxNTpcdFx0XHRcdFx0IHN0cnVjdCBzb2NrICpzc2ssXG4zNzE2Olx0XHRcdFx0XHQgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuMzcxNzpcdHtcbjM3MTg6XHRcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuMzcxOTpcdFx0c3RydWN0IHNvY2sgKm5zayA9IHNrX2Nsb25lX2xvY2soc2ssIEdGUF9BVE9NSUMpO1xuMzcyMDpcdFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbjM3MjE6XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2s7XG4zNzIyOlx0XG4zNzIzOlx0XHRpZiAoIW5zaylcbjM3MjQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4zNzI1Olx0XG4zNzI2Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG4zNzI3Olx0XHRpZiAobnNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbjM3Mjg6XHRcdFx0aW5ldF9zayhuc2spLVx1MDAzZXBpbmV0NiA9IG1wdGNwX2luZXQ2X3NrKG5zayk7XG4zNzI5Olx0I2VuZGlmXG4zNzMwOlx0XG4zNzMxOlx0XHRfX21wdGNwX2luaXRfc29jayhuc2spO1xuMzczMjpcdFxuMzczMzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxuMzczNDpcdFx0aWYgKG5zay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4zNzM1Olx0XHRcdG1wdGNwX2NvcHlfaXA2X29wdGlvbnMobnNrLCBzayk7XG4zNzM2Olx0XHRlbHNlXG4zNzM3Olx0I2VuZGlmXG4zNzM4Olx0XHRcdG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhuc2ssIHNrKTtcbjM3Mzk6XHRcbjM3NDA6XHRcdG1zayA9IG1wdGNwX3NrKG5zayk7XG4zNzQxOlx0XHRXUklURV9PTkNFKG1zay1cdTAwM2Vsb2NhbF9rZXksIHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2tleSk7XG4zNzQyOlx0XHRXUklURV9PTkNFKG1zay1cdTAwM2V0b2tlbiwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuMzc0MzpcdFx0bXNrLVx1MDAzZWluX2FjY2VwdF9xdWV1ZSA9IDE7XG4zNzQ0Olx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmdWxseV9lc3RhYmxpc2hlZCwgZmFsc2UpO1xuMzc0NTpcdFx0aWYgKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiBPUFRJT05fTVBUQ1BfQ1NVTVJFUUQpXG4zNzQ2Olx0XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWNzdW1fZW5hYmxlZCwgdHJ1ZSk7XG4zNzQ3Olx0XG4zNzQ4Olx0XHRXUklURV9PTkNFKG1zay1cdTAwM2V3cml0ZV9zZXEsIHN1YmZsb3dfcmVxLVx1MDAzZWlkc24gJiM0MzsgMSk7XG4zNzQ5Olx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VzbmRfbnh0LCBtc2stXHUwMDNld3JpdGVfc2VxKTtcbjM3NTA6XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF91bmEsIG1zay1cdTAwM2V3cml0ZV9zZXEpO1xuMzc1MTpcdFx0V1JJVEVfT05DRShtc2stXHUwMDNld25kX2VuZCwgbXNrLVx1MDAzZXNuZF9ueHQgJiM0MzsgdGNwX3NrKHNzayktXHUwMDNlc25kX3duZCk7XG4zNzUyOlx0XHRtc2stXHUwMDNlc2V0c29ja29wdF9zZXEgPSBtcHRjcF9zayhzayktXHUwMDNlc2V0c29ja29wdF9zZXE7XG4zNzUzOlx0XHRtcHRjcF9pbml0X3NjaGVkKG1zaywgbXB0Y3Bfc2soc2spLVx1MDAzZXNjaGVkKTtcbjM3NTQ6XHRcbjM3NTU6XHRcdC8qIHBhc3NpdmUgbXNrIGlzIGNyZWF0ZWQgYWZ0ZXIgdGhlIGZpcnN0L01QQyBzdWJmbG93ICovXG4zNzU2Olx0XHRtc2stXHUwMDNlc3ViZmxvd19pZCA9IDI7XG4zNzU3Olx0XG4zNzU4Olx0XHRzb2NrX3Jlc2V0X2ZsYWcobnNrLCBTT0NLX1JDVV9GUkVFKTtcbjM3NTk6XHRcdHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKG5zaywgcmVxKTtcbjM3NjA6XHRcbjM3NjE6XHRcdC8qIHRoaXMgY2FuJiMzOTt0IHJhY2Ugd2l0aCBtcHRjcF9jbG9zZSgpLCBhcyB0aGUgbXNrIGlzXG4zNzYyOlx0XHQgKiBub3QgeWV0IGV4cG9zdGVkIHRvIHVzZXItc3BhY2VcbjM3NjM6XHRcdCAqL1xuMzc2NDpcdFx0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0VTVEFCTElTSEVEKTtcbjM3NjU6XHRcbjM3NjY6XHRcdC8qIFRoZSBtc2sgbWFpbnRhaW4gYSByZWYgdG8gZWFjaCBzdWJmbG93IGluIHRoZSBjb25uZWN0aW9ucyBsaXN0ICovXG4zNzY3Olx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgc3NrKTtcbjM3Njg6XHRcdHN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spO1xuMzc2OTpcdFx0bGlzdF9hZGQoXHUwMDI2c3ViZmxvdy1cdTAwM2Vub2RlLCBcdTAwMjZtc2stXHUwMDNlY29ubl9saXN0KTtcbjM3NzA6XHRcdHNvY2tfaG9sZChzc2spO1xuMzc3MTpcdFxuMzc3MjpcdFx0Lyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpXG4zNzczOlx0XHQgKiB1c2VzIHRoZSBjb3JyZWN0IGRhdGFcbjM3NzQ6XHRcdCAqL1xuMzc3NTpcdFx0bXB0Y3BfY29weV9pbmFkZHJzKG5zaywgc3NrKTtcbjM3NzY6XHRcbjM3Nzc6XHRcdG1wdGNwX3Jjdl9zcGFjZV9pbml0KG1zaywgc3NrKTtcbjM3Nzg6XHRcdG1zay1cdTAwM2VyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpO1xuMzc3OTpcdFxuMzc4MDpcdFx0aWYgKCFtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zaykpIHtcbjM3ODE6XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUpO1xuMzc4MjpcdFx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgTlVMTCk7XG4zNzgzOlx0XHRcdHNvY2tfcHV0KHNzayk7XG4zNzg0Olx0XHRcdG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTtcbjM3ODU6XHRcdFx0cmV0dXJuIE5VTEw7XG4zNzg2Olx0XHR9XG4zNzg3Olx0XG4zNzg4Olx0XHRpZiAobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxuMzc4OTpcdFx0XHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5MwoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiA5NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTVBUQ1AgUmVxdWVzdCBTb2NrZXQgQ2xvbmluZyBEdXJpbmcgUmV1c2Vwb3J0IE1pZ3JhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIEtNU0FOIG9yIGlmIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaW52b2x2ZXMgdGhlIGNsb25pbmcgb2YgTVBUQ1AgcmVxdWVzdCBzb2NrZXRzIGR1cmluZyBhIHJldXNlcG9ydCBtaWdyYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzdWJmbG93cy4gVGhlIGtleSBvcGVyYXRpb25zIGludm9sdmUgdHJhbnNmZXJyaW5nIE11bHRpUGF0aCBUQ1AgKE1QVENQKSBzcGVjaWZpYyBkYXRhLCBwcmltYXJpbHkgYG1za2AgcmVmZXJlbmNlcyBhbmQgdG9rZW4gdGFibGUgZW50cmllcywgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBzb2NrZXQgdG8gaXRzIGNsb25lLiBGYWlsdXJlIHNjZW5hcmlvcyB3aXRoaW4gYG1wdGNwX3Rva2VuX2FjY2VwdGAgYXJlIGFsc28gZ3JhY2VmdWxseSBoYW5kbGVkLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBLTVNBTiB0cmlnZ2Vycy4gV2Uga25vdyBLTVNBTiBjb25jZXJucyBpdHNlbGYgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgbGVhayBpbmZvcm1hdGlvbiB0byB1c2VyIHNwYWNlIG9yIHRoYXQgYWZmZWN0IGNvbnRyb2wgZmxvdy4gTG9va2luZyBhdCB0aGUgY3JpdGVyaWEsIEkmIzM5O20gY2hlY2tpbmcgZm9yIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgdW5pbml0aWFsaXplZCByZWFkcywgYW5kIGFueSBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS4KClRoZSBjb2RlIGNoYW5nZXMgaGVyZSBpbnZvbHZlIGBpbmV0X3JlcXNrX2Nsb25lKClgLCB3aGljaCBjYWxscyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSgpYCB0byBoYW5kbGUgdGhlIE1QVENQIHNwZWNpZmljIHN0dWZmLiBXaXRoaW4gdGhhdCwgd2UgaGF2ZSBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KClgIGFuZCBgbXB0Y3BfdG9rZW5fYWNjZXB0KClgLCB3aXRoIHByb3BlciBsb2NraW5nIGFuZCBsaXN0IG1hbmlwdWxhdGlvbi4gRXJyb3IgaGFuZGxpbmcgaW4gYG1wdGNwX3Rva2VuX2FjY2VwdGAgaXMgYWxzbyBpbmNsdWRlZC4gVGhlcmUmIzM5O3MgYWxzbyBgbXB0Y3Bfc2tfY2xvbmVfaW5pdCgpYCBpbiBjYXNlIG9mIGZhaWx1cmUuCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zOgoKKiAgICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZXM/KiogTm8uIFRoZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgbGVhdmUgZmllbGRzIHVuaW5pdGlhbGl6ZWQgYW5kIHRoZW4gZXhwb3NlIHRoZW0gdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBicmFuY2hpbmcuIGBpbmV0X3JlcXNrX2Nsb25lKClgIGlzIGFsbG9jYXRpbmcgYSBgbnJlcWAgZnJvbSB0aGUgc2xhYiBjYWNoZSwgYW5kIHRoZW4gY29weWluZyB0aGUgY29udGVudHMgZnJvbSBhIHNvdXJjZSBgcmVxYCB1c2luZyBgbWVtY3B5YC4gVGhlIG5ldyBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCBpbml0aWFsaXplcyB0aGUgYG5ld19zdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZWAuIFRoZSBhbGxvY2F0aW9ucyBhcmUgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIG9yIGNvcGllZCBmcm9tIGtub3duLWdvb2QgZGF0YS4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuCiogICAqKkluZm8gTGVha3M/KiogTm8uIE5vdGhpbmcgbmV3IGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjcmVhdGVkIG9uIHRoZSBzdGFjaywgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLgoqICAgKipVbmluaXRpYWxpemVkIEJ1ZmZlciBSZWFkcz8qKiBOby4gVGhlIGNvZGUgaXNuJiMzOTt0IHJlYWRpbmcgZnJvbSBhbnkgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBwb3RlbnRpYWxseSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRocm91Z2ggaW5jb3JyZWN0IGJvdW5kcyBjaGVja3MuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMsIHRoZSBwb3RlbnRpYWwgcmlza3MgbGllIGluIGNvbmN1cnJlbmN5IGlzc3VlczogUkNVLCByZWZjb3VudGluZywgbG9ja2luZywgdXNlLWFmdGVyLWZyZWUsIGFuZCBlcnJvciBoYW5kbGluZy4gSG93ZXZlciwgdGhlc2UgYXJlIHByZWNpc2VseSB0aGUga2luZHMgb2YgYnVncyB0aGF0IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgc3VjaCBhcyByZWZjb3VudCBjaGVja2VycywgUFJPVkVcX0xPQ0tJTkcsIGFyZSBidWlsdCB0byBjYXRjaC4KCk15IGNvbmNsdXNpb24gaXMgY2xlYXI6ICoqS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLioqIFRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggY29uY3VycmVuY3kgY29uY2VybnMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZywgZGF0YSB0cmFuc2ZlciwgYW5kIHJlZmNvdW50aW5nLiBUaGVzZSBpc3N1ZXMgYXJlIHRob3JvdWdobHkgYWRkcmVzc2VkIGJ5IHRoZSBleGlzdGluZyBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmNvdW50IGNoZWNraW5nIGluZnJhc3RydWN0dXJlLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gV2UmIzM5O3JlIHNhZmUgd2l0aCBLQVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBkdXJpbmcgcmV1c2Vwb3J0IHNvY2tldCBtaWdyYXRpb24gYnkgc2FmZWx5IGhhbmRsaW5nIG1zayBzb2NrZXQgcmVmY291bnRzLCBtb3ZpbmcgdG9rZW4gaGFzaCB0YWJsZSBlbnRyaWVzIChtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QpLCBhbmQgcHJvcGVybHkgY2xlYW5pbmcgdXAgYW5kIGZhbGxpbmcgYmFjayB3aGVuIG1wdGNwX3Rva2VuX2FjY2VwdCBmYWlscy5cblxuVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbmN1cnJlbmN5LCBSQ1Ugc2FmZXR5LCBzb2NrZXQgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUvZGVzdHJ1Y3Rpb24gc3RhdGUgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgYXJlYSBhcmUgdXNlLWFmdGVyLWZyZWUsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3IgbG9ja2luZy9kZWFkbG9jayBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBtZW1vcnkgY29weWluZyB0byB1c2Vyc3BhY2UsIHBhZGRpbmcvaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBNUFRDUCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGR1cmluZyByZXVzZXBvcnQgc29ja2V0IG1pZ3JhdGlvbiBieSBzYWZlbHkgaGFuZGxpbmcgbXNrIHNvY2tldCByZWZjb3VudHMsIG1vdmluZyB0b2tlbiBoYXNoIHRhYmxlIGVudHJpZXMgKG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCksIGFuZCBwcm9wZXJseSBjbGVhbmluZyB1cCBhbmQgZmFsbGluZyBiYWNrIHdoZW4gbXB0Y3BfdG9rZW5fYWNjZXB0IGZhaWxzLlxuXG5UaGVzZSBjaGFuZ2VzIGludm9sdmUgY29uY3VycmVuY3ksIFJDVSBzYWZldHksIHNvY2tldCByZWZjb3VudGluZywgYW5kIGxpZmVjeWNsZS9kZXN0cnVjdGlvbiBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBhcmVhIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcmVmY291bnRpbmcgaXNzdWVzLCBvciBsb2NraW5nL2RlYWRsb2NrIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG1lbW9yeSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgcGFkZGluZy9pbmZvLWxlYWtzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDk6NTQuODM3ODE1NDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODEzNDA1MTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVcIixcbiAgICBcIm1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fYWNjZXB0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3NrX2Nsb25lX2luaXRcIixcbiAgICBcInN1YmZsb3dfc3luX3JlY3Zfc29ja1wiLFxuICAgIFwiaW5ldF9yZXFza19jbG9uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBkdXJpbmcgcmV1c2Vwb3J0IHNvY2tldCBtaWdyYXRpb24gYnkgc2FmZWx5IGhhbmRsaW5nIG1zayBzb2NrZXQgcmVmY291bnRzLCBtb3ZpbmcgdG9rZW4gaGFzaCB0YWJsZSBlbnRyaWVzIChtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QpLCBhbmQgcHJvcGVybHkgY2xlYW5pbmcgdXAgYW5kIGZhbGxpbmcgYmFjayB3aGVuIG1wdGNwX3Rva2VuX2FjY2VwdCBmYWlscy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGludm9sdmUgY29uY3VycmVuY3ksIFJDVSBzYWZldHksIHNvY2tldCByZWZjb3VudGluZywgYW5kIGxpZmVjeWNsZS9kZXN0cnVjdGlvbiBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBhcmVhIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcmVmY291bnRpbmcgaXNzdWVzLCBvciBsb2NraW5nL2RlYWRsb2NrIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG1lbW9yeSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgcGFkZGluZy9pbmZvLWxlYWtzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcsIHRva2VuIGhhc2ggbWFuYWdlbWVudCwgYW5kIHNvY2tldCBjbG9uZSBlcnJvciBoYW5kbGluZyBkdXJpbmcgVENQL01QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gVGhpcyBsb2dpYyBpbnZvbHZlcyBzdWJ0bGUgUkNVLCByZWZjb3VudGluZywgYW5kIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc29ja2V0IHN5c2NhbGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDk6NTQuODM3ODE5NjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjAxMTY2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZjMwMGZlNzgyNzcxYTJhMDhiZmEzMWQ5YzViYWJmY2ZhZDAxMTZlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMjE6MDk6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbXB0Y3AuaCBiL2luY2x1ZGUvbmV0L21wdGNwLmhcXG5pbmRleCA0ODVkNTViNjZlYTY3Li5hZDcwMDViNTc0YmIxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tcHRjcC5oXFxuQEAgLTIxOSw2ICsyMTksOSBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbiBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBib29sIGF0dGFjaF9saXN0ZW5lcik7XFxuKy8qIENhbGxlciBtdXN0IGhvbGQgYW4gUkNVIHJlYWQtc2lkZSBsb2NrLiAqL1xcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XFxuIFxcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFxuQEAgLTMwNSw2ICszMDgsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXNcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuKy8qIENhbGxlciBtdXN0IGhvbGQgYW4gUkNVIHJlYWQtc2lkZSBsb2NrLiAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX2FjdGl2ZV9kZXRlY3RfYmxhY2tob2xlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBleHBpcmVkKSB7IH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG5pbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZnJtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwX2Vjbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L21wdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbiBcXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVxcdTAwM2VzayktXFx1MDAzZWZhc3RvcGVuX3JzaywgbnJlcSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcXG4rXFx0XFx0bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpO1xcbitcXG4gXFx0cmV0dXJuIG5yZXE7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCBlMWYwOGY3MWNkYjE2Li4zMDA2N2YyYTdjYThmIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzY5Miw2ICszNjkyLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3koc3RydWN0IHNvY2sgKm5zaylcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2sobnNrKTtcXG4rXFxuK1xcdG1wdGNwX3JlbGVhc2Vfc2NoZWQobXNrKTtcXG4rXFx0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0NMT1NFKTtcXG4rXFx0LyogaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UoKSBjbGVhcnMgVENQIHNvY2tfb3BzIHN0YXRlIHZpYVxcbitcXHQgKiB0Y3Bfc2soKSwgYnV0IG5zayBpcyBhbiBNUFRDUCBtYXN0ZXIgc29ja2V0OyBrZWVwIHRoZSBpbmV0LWxldmVsXFxuK1xcdCAqIGRlc3Ryb3kgcHJlcGFyYXRpb24gaGVyZS5cXG4rXFx0ICovXFxuK1xcdGJoX3VubG9ja19zb2NrKG5zayk7XFxuK1xcdHNvY2tfcHV0KG5zayk7XFxuK1xcdHNvY2tfc2V0X2ZsYWcobnNrLCBTT0NLX0RFQUQpO1xcbitcXHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xcbitcXHRpbmV0X3NrKG5zayktXFx1MDAzZWluZXRfbnVtID0gMDtcXG4rXFx0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XFxuK31cXG4rXFxuIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc29jayAqc3NrLFxcbkBAIC0zNzUxLDExICszNzY5LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRsaXN0X2FkZChcXHUwMDI2c3ViZmxvdy1cXHUwMDNlbm9kZSwgXFx1MDAyNm1zay1cXHUwMDNlY29ubl9saXN0KTtcXG4gXFx0c29ja19ob2xkKHNzayk7XFxuIFxcbi1cXHQvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseVxcbi1cXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxcbi1cXHQgKi9cXG4tXFx0bXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spO1xcbi1cXG4gXFx0Lyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpXFxuIFxcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxcbiBcXHQgKi9cXG5AQCAtMzc2NCw2ICszNzc3LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0bXB0Y3BfcmN2X3NwYWNlX2luaXQobXNrLCBzc2spO1xcbiBcXHRtc2stXFx1MDAzZXJjdnFfc3BhY2UudGltZSA9IG1wdGNwX3N0YW1wKCk7XFxuIFxcbitcXHRpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkge1xcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzdWJmbG93LVxcdTAwM2Vub2RlKTtcXG4rXFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWZpcnN0LCBOVUxMKTtcXG4rXFx0XFx0c29ja19wdXQoc3NrKTtcXG4rXFx0XFx0bXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShuc2spO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKG1wX29wdC1cXHUwMDNlc3Vib3B0aW9ucyBcXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxcbiBcXHRcXHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xcbiBcXHRiaF91bmxvY2tfc29jayhuc2spO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuaW5kZXggODdjY2I4NGU5OTI3Yy4uMjQ3NDQ5Y2MyZmViOSAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuQEAgLTEwNzksOSArMTA3OSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gfVxcbiBcXG4gaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XFxuIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XFxuIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcXG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXFxuIFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xcbiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xcbmluZGV4IGFmODFhZDVlNjk5ZDEuLmQyY2QxMmZjMDM0MjEgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xcbisrKyBiL25ldC9tcHRjcC9zdWJmbG93LmNcXG5AQCAtNDcsNiArNDcsNDEgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcdG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChyZXEpO1xcbiB9XFxuIFxcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG4rXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XFxuK1xcdHN0cnVjdCBtcHRjcF9zb2NrICptc2s7XFxuK1xcbitcXHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcXG4rXFx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19hbnlfaGVsZCgpLFxcbitcXHRcXHRcXHQgXFxcIk1QVENQIHJlcXNrIGNsb25lIGNhbGxlZCB3aXRob3V0IFJDVVxcXCIpO1xcbitcXG4rXFx0LyogQSBub24tTlVMTCAtXFx1MDAzZW1zayBtZWFucyB0aGUgcmVxdWVzdCBvd25zIG9uZSByZWZlcmVuY2UuICBUaGUgY2xvbmVcXG4rXFx0ICogY29waWVkIG9ubHkgdGhlIHBvaW50ZXIsIHdoaWxlIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGNhbiBjb25jdXJyZW50bHlcXG4rXFx0ICogdHJhbnNmZXIgaXRzIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQuICBBY3F1aXJlIGEgcmVmZXJlbmNlIGZvciB0aGVcXG4rXFx0ICogY2xvbmUsIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIG9yaWdpbmFsIHJlcXVlc3Qgc3RpbGwgb3ducyB0aGUgc2FtZSBtc2suXFxuK1xcdCAqIE1QVENQIHNvY2tldHMgdXNlIFNMQUJfVFlQRVNBRkVfQllfUkNVIGFuZCBhbGwgY2xvbmUgY2FsbGVycyBydW4gaW5cXG4rXFx0ICogYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCBrZWVwaW5nIHRoZSBtZW1vcnkgc3RhYmxlIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRtc2sgPSBSRUFEX09OQ0Uoc3ViZmxvd19yZXEtXFx1MDAzZW1zayk7XFxuK1xcdGlmIChtc2spIHtcXG4rXFx0XFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xcbitcXG4rXFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm9fYWNxdWlyZShcXHUwMDI2c2stXFx1MDAzZXNrX3JlZmNudCkpIHtcXG4rXFx0XFx0XFx0bXNrID0gTlVMTDtcXG4rXFx0XFx0fSBlbHNlIGlmIChSRUFEX09OQ0Uoc3ViZmxvd19yZXEtXFx1MDAzZW1zaykgIT0gbXNrKSB7XFxuK1xcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4rXFx0XFx0XFx0bXNrID0gTlVMTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXdfc3ViZmxvd19yZXEtXFx1MDAzZW1zayA9IG1zaztcXG4rXFxuK1xcdG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzdWJmbG93X2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLCB1MzIgbm9uY2UxLCB1MzIgbm9uY2UyLFxcbiBcXHRcXHRcXHRcXHQgIHZvaWQgKmhtYWMpXFxuIHtcXG5AQCAtODg1LDggKzkyMCwxMCBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcbiBcXHRcXHRpZiAoY3R4LVxcdTAwM2VtcF9jYXBhYmxlKSB7XFxuIFxcdFxcdFxcdGN0eC1cXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXFx1MDAzZWNvbm4sIFxcdTAwMjZtcF9vcHQsIGNoaWxkLCByZXEpO1xcbi1cXHRcXHRcXHRpZiAoIWN0eC1cXHUwMDNlY29ubilcXG4rXFx0XFx0XFx0aWYgKCFjdHgtXFx1MDAzZWNvbm4pIHtcXG4rXFx0XFx0XFx0XFx0ZmFsbGJhY2sgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbitcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRjdHgtXFx1MDAzZXN1YmZsb3dfaWQgPSAxO1xcbiBcXHRcXHRcXHRvd25lciA9IG1wdGNwX3NrKGN0eC1cXHUwMDNlY29ubik7XFxuQEAgLTkyMyw3ICs5NjAsNyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdC8qIG1vdmUgdGhlIG1zayByZWZlcmVuY2Ugb3duZXJzaGlwIHRvIHRoZSBzdWJmbG93ICovXFxuLVxcdFxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2sgPSBOVUxMO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2ssIE5VTEwpO1xcbiBcXHRcXHRcXHRjdHgtXFx1MDAzZWNvbm4gPSAoc3RydWN0IHNvY2sgKilvd25lcjtcXG4gXFxuIFxcdFxcdFxcdGlmIChzdWJmbG93X3VzZV9kaWZmZXJlbnRfc3BvcnQob3duZXIsIHNrKSkge1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW4uYyBiL25ldC9tcHRjcC90b2tlbi5jXFxuaW5kZXggZjFhNTBmMzY3YWRkOC4uZTBmMjgyM2Y5MmVmYiAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW4uY1xcbisrKyBiL25ldC9tcHRjcC90b2tlbi5jXFxuQEAgLTE4MCw2ICsxODAsNDMgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0IC0gbW92ZSByZXF1ZXN0IHRva2VuIG93bmVyc2hpcCB0byBhIGNsb25lXFxuKyAqIEByZXE6IG9yaWdpbmFsIHJlcXVlc3Qgc29ja2V0XFxuKyAqIEBuZXdfcmVxOiBjbG9uZWQgcmVxdWVzdCBzb2NrZXRcXG4rICpcXG4rICogTW92ZSB0aGUgdG9rZW4gaGFzaCBlbnRyeSBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRvIGl0cyBjbG9uZS5cXG4rICovXFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG4rXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XFxuK1xcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbitcXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuK1xcbitcXHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcXG4rXFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKSB7XFxuK1xcdFxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlKSkge1xcbitcXHRcXHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuK1xcdFxcdGlmIChwb3MgPT0gc3ViZmxvd19yZXEpXFxuK1xcdFxcdFxcdGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZuZXdfc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaFxcbiAgKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZFxcbkBAIC0xODcsMjQgKzIyNCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcXG4gICpcXG4gICogQ2FsbGVkIHdoZW4gYSBTWU4gcGFja2V0IGNyZWF0ZXMgYSBuZXcgbG9naWNhbCBjb25uZWN0aW9uLCBpLmUuXFxuICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIG9uIHN1Y2Nlc3MuXFxuICAqL1xcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcXG4rYm9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsXFxuIFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcXG4gXFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xcbitcXHRib29sIHJldCA9IGZhbHNlO1xcbiBcXG4tXFx0c29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLVxcdTAwM2Vza19wcm90LCAxKTtcXG4gXFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS1cXHUwMDNldG9rZW4pO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2cmVxLVxcdTAwM2V0b2tlbl9ub2RlKSlcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbi1cXHQvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqL1xcbiBcXHRwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCByZXEtXFx1MDAzZXRva2VuKTtcXG4tXFx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHJlcSkpXFxuLVxcdFxcdGhsaXN0X251bGxzX2RlbF9pbml0X3JjdShcXHUwMDI2cmVxLVxcdTAwM2V0b2tlbl9ub2RlKTtcXG4rXFx0aWYgKHBvcyAhPSByZXEpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFxcdTAwMjZyZXEtXFx1MDAzZXRva2VuX25vZGUpO1xcbiBcXHRfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssIFxcdTAwMjZidWNrZXQtXFx1MDAzZW1za19jaGFpbik7XFxuK1xcdHJldCA9IHRydWU7XFxuK1xcbit1bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXFx1MDAzZXNrX3Byb3QsIDEpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKVxcbkBAIC0zNTUsMTYgKzQwNCwyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbiBcXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuIFxcbi1cXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlKSlcXG4rXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cXHUwMDNldG9rZW4pO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuIFxcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuLVxcdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHtcXG4rXFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xcbiBcXHRcXHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXFx1MDAyNnBvcy1cXHUwMDNldG9rZW5fbm9kZSk7XFxuIFxcdFxcdGJ1Y2tldC1cXHUwMDNlY2hhaW5fbGVuLS07XFxuIFxcdH1cXG4rXFxuK3VubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXFxuaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXFxuKysrIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsXFxuIFxcdFxcdFxcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XFxuIFxcdG1zay1cXHUwMDNldG9rZW4gPSByZXEtXFx1MDAzZXRva2VuO1xcbi1cXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xcbitcXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTtcXG4gXFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFxcdTAwMjZpbml0X25ldCwgbXNrLVxcdTAwM2V0b2tlbikpO1xcbiBcXG4gXFx0LyogdGhpcyBpcyBub3cgYSBuby1vcCAqL1xcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcXG4gXFx0XFx0XFx0bXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTtcXG4gXFx0bXNrLVxcdTAwM2V0b2tlbiA9IHJlcS1cXHUwMDNldG9rZW47XFxuLVxcdG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7XFxuK1xcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xcbiBcXG4gXFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXFxuIFxcdHJlZmNvdW50X3NldChcXHUwMDI2c2stXFx1MDAzZXNrX3JlZmNudCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjA5OjU2LjI5ODU5MDE3NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjEzNTYyMzE2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lXCIsXG4gICAgXCJtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3Rva2VuX2FjY2VwdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF9za19jbG9uZV9pbml0XCIsXG4gICAgXCJzdWJmbG93X3N5bl9yZWN2X3NvY2tcIixcbiAgICBcImluZXRfcmVxc2tfY2xvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcsIHRva2VuIGhhc2ggbWFuYWdlbWVudCwgYW5kIHNvY2tldCBjbG9uZSBlcnJvciBoYW5kbGluZyBkdXJpbmcgVENQL01QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gVGhpcyBsb2dpYyBpbnZvbHZlcyBzdWJ0bGUgUkNVLCByZWZjb3VudGluZywgYW5kIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc29ja2V0IHN5c2NhbGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZjMwMGZlNzgyNzcxYTJhMDhiZmEzMWQ5YzViYWJmY2ZhZDAxMTZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMTowOTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5pbmRleCA0ODVkNTViNjZlYTY3Li5hZDcwMDViNTc0YmIxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuQEAgLTIxOSw2ICsyMTksOSBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbiBcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiBcdFx0XHRcdFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcbisvKiBDYWxsZXIgbXVzdCBob2xkIGFuIFJDVSByZWFkLXNpZGUgbG9jay4gKi9cbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDUsNiArMzA4LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rLyogQ2FsbGVyIG11c3QgaG9sZCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2suICovXG4rc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjg5NmY0NzJkY2JhMjkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwX2Vjbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21wdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4gXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIFx0fVxuIFxuK1x0aWYgKHJza19pc19tcHRjcChyZXEpKVxuK1x0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG4rXG4gXHRyZXR1cm4gbnJlcTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggZTFmMDhmNzFjZGIxNi4uMzAwNjdmMmE3Y2E4ZiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM2OTIsNiArMzY5MiwyNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShzdHJ1Y3Qgc29jayAqbnNrKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spO1xuK1xuK1x0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xuK1x0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0NMT1NFKTtcbitcdC8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWFcbitcdCAqIHRjcF9zaygpLCBidXQgbnNrIGlzIGFuIE1QVENQIG1hc3RlciBzb2NrZXQ7IGtlZXAgdGhlIGluZXQtbGV2ZWxcbitcdCAqIGRlc3Ryb3kgcHJlcGFyYXRpb24gaGVyZS5cbitcdCAqL1xuK1x0YmhfdW5sb2NrX3NvY2sobnNrKTtcbitcdHNvY2tfcHV0KG5zayk7XG4rXHRzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTtcbitcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XG4rXHRpbmV0X3NrKG5zayktXHUwMDNlaW5ldF9udW0gPSAwO1xuK1x0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XG4rfVxuK1xuIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuIFx0XHRcdFx0IHN0cnVjdCBzb2NrICpzc2ssXG5AQCAtMzc1MSwxMSArMzc2OSw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdGxpc3RfYWRkKFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSwgXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRzb2NrX2hvbGQoc3NrKTtcbiBcbi1cdC8qIG5ldyBtcGMgc3ViZmxvdyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG5ld2x5XG4tXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxuLVx0ICovXG4tXHRtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zayk7XG4tXG4gXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbiBcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxuIFx0ICovXG5AQCAtMzc2NCw2ICszNzc3LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG1wdGNwX3Jjdl9zcGFjZV9pbml0KG1zaywgc3NrKTtcbiBcdG1zay1cdTAwM2VyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpO1xuIFxuK1x0aWYgKCFtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zaykpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUpO1xuK1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgTlVMTCk7XG4rXHRcdHNvY2tfcHV0KHNzayk7XG4rXHRcdG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRpZiAobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxuIFx0XHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xuIFx0YmhfdW5sb2NrX3NvY2sobnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCA4N2NjYjg0ZTk5MjdjLi4yNDc0NDljYzJmZWI5IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtMTA3OSw5ICsxMDc5LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIH1cbiBcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbit2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XG4gdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7XG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGFmODFhZDVlNjk5ZDEuLmQyY2QxMmZjMDM0MjEgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtNDcsNiArNDcsNDEgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QocmVxKTtcbiB9XG4gXG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxO1xuK1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbitcbitcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuK1x0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19hbnlfaGVsZCgpLFxuK1x0XHRcdCBcIk1QVENQIHJlcXNrIGNsb25lIGNhbGxlZCB3aXRob3V0IFJDVVwiKTtcbitcbitcdC8qIEEgbm9uLU5VTEwgLVx1MDAzZW1zayBtZWFucyB0aGUgcmVxdWVzdCBvd25zIG9uZSByZWZlcmVuY2UuICBUaGUgY2xvbmVcbitcdCAqIGNvcGllZCBvbmx5IHRoZSBwb2ludGVyLCB3aGlsZSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBjYW4gY29uY3VycmVudGx5XG4rXHQgKiB0cmFuc2ZlciBpdHMgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZC4gIEFjcXVpcmUgYSByZWZlcmVuY2UgZm9yIHRoZVxuK1x0ICogY2xvbmUsIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIG9yaWdpbmFsIHJlcXVlc3Qgc3RpbGwgb3ducyB0aGUgc2FtZSBtc2suXG4rXHQgKiBNUFRDUCBzb2NrZXRzIHVzZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSBhbmQgYWxsIGNsb25lIGNhbGxlcnMgcnVuIGluXG4rXHQgKiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIGtlZXBpbmcgdGhlIG1lbW9yeSBzdGFibGUgaGVyZS5cbitcdCAqL1xuK1x0bXNrID0gUkVBRF9PTkNFKHN1YmZsb3dfcmVxLVx1MDAzZW1zayk7XG4rXHRpZiAobXNrKSB7XG4rXHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcbitcbitcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm9fYWNxdWlyZShcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKSB7XG4rXHRcdFx0bXNrID0gTlVMTDtcbitcdFx0fSBlbHNlIGlmIChSRUFEX09OQ0Uoc3ViZmxvd19yZXEtXHUwMDNlbXNrKSAhPSBtc2spIHtcbitcdFx0XHRzb2NrX3B1dChzayk7XG4rXHRcdFx0bXNrID0gTlVMTDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0bmV3X3N1YmZsb3dfcmVxLVx1MDAzZW1zayA9IG1zaztcbitcbitcdG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzdWJmbG93X2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLCB1MzIgbm9uY2UxLCB1MzIgbm9uY2UyLFxuIFx0XHRcdFx0ICB2b2lkICpobWFjKVxuIHtcbkBAIC04ODUsOCArOTIwLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc3ViZmxvd19zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcbiBcdFx0aWYgKGN0eC1cdTAwM2VtcF9jYXBhYmxlKSB7XG4gXHRcdFx0Y3R4LVx1MDAzZWNvbm4gPSBtcHRjcF9za19jbG9uZV9pbml0KGxpc3RlbmVyLVx1MDAzZWNvbm4sIFx1MDAyNm1wX29wdCwgY2hpbGQsIHJlcSk7XG4tXHRcdFx0aWYgKCFjdHgtXHUwMDNlY29ubilcbitcdFx0XHRpZiAoIWN0eC1cdTAwM2Vjb25uKSB7XG4rXHRcdFx0XHRmYWxsYmFjayA9IHRydWU7XG4gXHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuK1x0XHRcdH1cbiBcbiBcdFx0XHRjdHgtXHUwMDNlc3ViZmxvd19pZCA9IDE7XG4gXHRcdFx0b3duZXIgPSBtcHRjcF9zayhjdHgtXHUwMDNlY29ubik7XG5AQCAtOTIzLDcgKzk2MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc3ViZmxvd19zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHR9XG4gXG4gXHRcdFx0LyogbW92ZSB0aGUgbXNrIHJlZmVyZW5jZSBvd25lcnNoaXAgdG8gdGhlIHN1YmZsb3cgKi9cbi1cdFx0XHRzdWJmbG93X3JlcS1cdTAwM2Vtc2sgPSBOVUxMO1xuK1x0XHRcdFdSSVRFX09OQ0Uoc3ViZmxvd19yZXEtXHUwMDNlbXNrLCBOVUxMKTtcbiBcdFx0XHRjdHgtXHUwMDNlY29ubiA9IChzdHJ1Y3Qgc29jayAqKW93bmVyO1xuIFxuIFx0XHRcdGlmIChzdWJmbG93X3VzZV9kaWZmZXJlbnRfc3BvcnQob3duZXIsIHNrKSkge1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmNcbmluZGV4IGYxYTUwZjM2N2FkZDguLmUwZjI4MjNmOTJlZmIgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW4uY1xuKysrIGIvbmV0L21wdGNwL3Rva2VuLmNcbkBAIC0xODAsNiArMTgwLDQzIEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCAtIG1vdmUgcmVxdWVzdCB0b2tlbiBvd25lcnNoaXAgdG8gYSBjbG9uZVxuKyAqIEByZXE6IG9yaWdpbmFsIHJlcXVlc3Qgc29ja2V0XG4rICogQG5ld19yZXE6IGNsb25lZCByZXF1ZXN0IHNvY2tldFxuKyAqXG4rICogTW92ZSB0aGUgdG9rZW4gaGFzaCBlbnRyeSBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRvIGl0cyBjbG9uZS5cbisgKi9cbit2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4rXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4rXG4rXHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcbitcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSkge1xuK1x0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKSB7XG4rXHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbitcdFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcbitcdFx0XHRobGlzdF9udWxsc19yZXBsYWNlX2luaXRfcmN1KFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZuZXdfc3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rfVxuK1xuIC8qKlxuICAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaFxuICAqIEByZXE6IHRoZSByZXF1ZXN0IHNvY2tldCB0byBiZSByZW1vdmVkXG5AQCAtMTg3LDI0ICsyMjQsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gICpcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cbiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuXG4rICpcbisgKiBSZXR1cm46IHRydWUgb24gc3VjY2Vzcy5cbiAgKi9cbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuK1x0Ym9vbCByZXQgPSBmYWxzZTtcbiBcbi1cdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cdTAwM2Vza19wcm90LCAxKTtcbiBcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChyZXEtXHUwMDNldG9rZW4pO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZyZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi9cbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbitcdGlmIChwb3MgIT0gcmVxKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdGhsaXN0X251bGxzX2RlbF9pbml0X3JjdShcdTAwMjZyZXEtXHUwMDNldG9rZW5fbm9kZSk7XG4gXHRfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssIFx1MDAyNmJ1Y2tldC1cdTAwM2Vtc2tfY2hhaW4pO1xuK1x0cmV0ID0gdHJ1ZTtcbitcbit1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pXG5AQCAtMzU1LDE2ICs0MDQsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4gXG4tXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbi1cdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHtcbitcdGlmIChwb3MgPT0gc3ViZmxvd19yZXEpIHtcbiBcdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnBvcy1cdTAwM2V0b2tlbl9ub2RlKTtcbiBcdFx0YnVja2V0LVx1MDAzZWNoYWluX2xlbi0tO1xuIFx0fVxuK1xuK3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbmluZGV4IDRmYzM5ZmEyZTI2MmQuLmJlOWFjY2U4YTU2NzMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG4rKysgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG5AQCAtOTksNyArOTksNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2FjY2VwdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcbiBcdFx0XHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xuIFx0bXNrLVx1MDAzZXRva2VuID0gcmVxLVx1MDAzZXRva2VuO1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFx1MDAyNmluaXRfbmV0LCBtc2stXHUwMDNldG9rZW4pKTtcbiBcbiBcdC8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi9cbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsXG4gXHRcdFx0bXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTtcbiBcdG1zay1cdTAwM2V0b2tlbiA9IHJlcS1cdTAwM2V0b2tlbjtcbi1cdG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7XG4rXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTtcbiBcbiBcdC8qIHNpbXVsYXRlIHJhY2Ugb24gcmVtb3ZhbCAqL1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCwgMCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowOTo1Ni4yOTg1OTE4NDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDkzMzg2Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgZnV6emFibGUsIHdoYXQgY29uZmlndXJhdGlvbnMgd2UnbGwgbmVlZCwgYW5kIHdoaWNoIHN5bWJvbHMgYXJlIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBwYXRjaCBkZXRhaWxzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgdG91Y2hlZDogYGluY2x1ZGUvbmV0L21wdGNwLmhgLCBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AsIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAsIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCwgYG5ldC9tcHRjcC90b2tlbi5jYCwgYW5kIGBuZXQvbXB0Y3AvdG9rZW5fdGVzdC5jYC4gVGhlIGNoYW5nZXMgc2VlbSB0byBjZW50ZXIgYXJvdW5kIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgYG1wdGNwX3NrX2Nsb25lX2luaXRgIGFuZCB0b2tlbiBoYW5kbGluZyB3aXRoaW4gdGhlIE1QVENQIHN0YWNrLCBwb3RlbnRpYWxseSBpbXBsZW1lbnRpbmcgYW5kIHJlZmluaW5nIHRoZSBzdWJmbG93IGNsb25pbmcgcHJvY2Vzcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBJcyB0aGlzICpyZWFjaGFibGUqIGNvZGU/IEFic29sdXRlbHkuIE1QVENQIGlzIHBhcnQgb2YgdGhlIGNvcmUgTGludXggbmV0d29ya2luZyBzdGFjay4gSXQncyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgYW5kLCB0aGFua2Z1bGx5LCBjYW4gYmUgZXhlcmNpc2VkIHdpdGggbmV0d29yayB0cmFmZmljLCBsb29wYmFjaywgdHVuL3RhcCBpbnRlcmZhY2VzLCBhbmQgUUVNVSBvciBhIGNsb3VkIGVudmlyb25tZW50LiBUaGF04oCZcyBhIGJpZyB3aW4gZm9yIGZ1enppbmcuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIE1QVENQLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIG9yIGp1c3QgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIGNydWNpYWwgdG8gZW5zdXJlIHRoYXQgTVBUQ1AgaXMgZW5hYmxlZCBpbiBhIGNvbmZpZyBiZWZvcmUgSSB0cnkgdG8gdGFyZ2V0IGl0IHdpdGggbXkgZnV6emluZyBzZXR1cC4gR290dGEgbWFrZSBzdXJlIGl0J3MgZXZlbiBjb21waWxlZCBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NzE3NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjA5OjU5Ljc5MTk3OTYzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc2MzQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnLTEtXFxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWctMjQtXFxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjA5OjU5LjgzNjc0Njk1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDE4NTMzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBpbml0aWFsIGxpbmVzLCBzYXkgdGhlIGZpcnN0IHRoaXJ0eSBvciBzby4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmFzaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBNdWx0aXBhdGggVENQLiBUaGlzIGlzIHdoZXJlIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0gZGVmaW5lcyB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0aGV5J3JlIGVuYWJsZWQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGNvcmUgTVBUQ1AgbW9kdWxlIGRlZmluZWQgZmlyc3QsIGxpa2VseSB3aXRoIGEgYENPTkZJR19NUFRDUGAgc3ltYm9sLiBUaGVuLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGZsYWdzIHRoYXQgY29udHJvbCBzcGVjaWZpYyBmZWF0dXJlcyDigJMgbWF5YmUgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHN1YmZsb3cgc2NoZWR1bGVycywgb3IgdGhlIGluY2x1c2lvbiBvZiBwYXJ0aWN1bGFyIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zLiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgbGlrZSBUQ1Agb3IgTkVULiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgc29tZSBgaGVscGAgdGV4dCB0aGF0IGRlc2NyaWJlcyB3aGF0IGVhY2ggb3B0aW9uIGRvZXMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZXNlIGZsYWdzIHRob3JvdWdobHkgc2luY2UgdGhleSBkaXJlY3RseSBpbmZsdWVuY2UgaG93IE1QVENQIGJlaGF2ZXMgaW4gZGlmZmVyZW50IHNjZW5hcmlvcy4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIGRlZmF1bHRzLCB0b28uIFRoZXkgd2lsbCBnaXZlIGEgaGludCBhcyB0byB3aGF0IHRoZSBkZXZlbG9wZXJzIHRob3VnaHQgd291bGQgYmUgdGhlIGNvbW1vbiBhbmQgdXNlZnVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGFueSBleHBlcmltZW50YWwgb3IgcG90ZW50aWFsbHkgdW5zdGFibGUgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdC4gT2theSwgbGV0J3Mgc3RhcnQgcmVhZGluZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MDIuMjM4NjAyODE4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuICAzMTpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgMzI6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICAzNTpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MDIuMjM4NjYwMTU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2MDMwNjUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFRyaWdnZXJpbmcgTWVjaGFuaXNtcyBvZiBgaW5ldF9yZXFza19jbG9uZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYGluZXRfcmVxc2tfY2xvbmVgIGlzIGludm9rZWQuIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgc28ga25vd2luZyBpdHMgY2FsbCBwYXRocyBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoZSBUQ1AvSVAgc3RhY2suIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHRyYWNlIHRoZSBjYWxscy4gSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgaXRzIGRpcmVjdCBjYWxsZXJzIHRvIG1hcCBvdXQgdGhlIGluaXRpYWwgc2V0IG9mIHBvc3NpYmlsaXRpZXMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMsIGFuZCBmcm9tIHRoZXJlLCBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBsZWFkcyB0byB0aG9zZSBjYWxscy4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBjb21waWxlciBvcHRpbWl6YXRpb25zIG9yIGlubGluaW5nIHRoYXQgY291bGQgb2JmdXNjYXRlIHRoZSBjYWxsIGdyYXBoIHNvbWV3aGF0LCBidXQgdGhlIGJhc2ljcyBzaG91bGQgYmUgZGlzY2VybmlibGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCB0byBpdCwgdG8gc2VlIHRoZSBraW5kIG9mIGluZm9ybWF0aW9uIHRoYXQgaXQgaXMgd29ya2luZyB3aXRoLiBVbmRlcnN0YW5kaW5nIHRoYXQgZGF0YSBmbG93IGlzIG9mdGVuIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAyMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MDQuNTk4OTY4OTA5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjk4MDcwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9yZXFza19jbG9uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTkwNT12b2lkIF9fcmVxc2tfZnJlZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTkxMy1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjkxNDpzdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05MTUtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEwMzc9c3RhdGljIHZvaWQgcmVxc2tfdGltZXJfaGFuZGxlcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA1My1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEwNTQ6XFx0XFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBuc2spO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA1NS1cXHRcXHRpZiAoIW5yZXEpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTE0MjE9c3RydWN0IHNvY2sgKmluZXRfY3NrX2NvbXBsZXRlX2hhc2hkYW5jZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpjaGlsZCxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzNC1cXHRcXHRcXHQvKiBob2xkIGEgcmVmY250IGZvciB0aGUgbnJlcS1cXHUwMDNlcnNrX2xpc3RlbmVyXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDM1OlxcdFxcdFxcdCAqIHdoaWNoIGlzIGFzc2lnbmVkIGluIGluZXRfcmVxc2tfY2xvbmUoKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzNi1cXHRcXHRcXHQgKi9cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzctXFx0XFx0XFx0c29ja19ob2xkKHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE0Mzg6XFx0XFx0XFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM5LVxcdFxcdFxcdGlmICghbnJlcSkge1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDcwPXZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDk0LVxcdFxcdGlmIChuc2spIHtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE0OTU6XFx0XFx0XFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBuc2spO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5Ni1cXHRcXHRcXHRpZiAobnJlcSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDowNi4yMjg3ODExMjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjQyOTYzMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1QVENQIFJlcXVlc3QgU29ja2V0IENsb25pbmc6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBjZW50cmFsIHRoZW1lOiBjbG9uaW5nIHJlcXVlc3Qgc29ja2V0cywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBNUFRDUC4gYGluZXRfcmVxc2tfY2xvbmVgIGlzIHRoZSBiYXNlIGZ1bmN0aW9uLCB1c2VkIGluIHN0YW5kYXJkIFRDUCBsaXN0ZW5lciBzY2VuYXJpb3MsIGFuZCByZXVzZXBvcnQsIGFuZCBTWU4tQUNLIHJldHJhbnNtaXNzaW9ucywgZmFzdG9wZW4sIGxpc3RlbiBzdG9wIHNpdHVhdGlvbnMsIGhhbmRsaW5nIG1pZ3JhdGlvbnMgYW5kIGNsb25pbmcgb2YgcmVxdWVzdCBzb2NrZXRzIGluIHZhcmlvdXMgY29udGV4dHMsIGluY2x1ZGluZyB0aW1lcnMuIEhvd2V2ZXIsIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBNUFRDUC1zcGVjaWZpYyBmdW5jdGlvbnMuIEkgc2VlIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgd2hpY2ggaGFuZGxlcyB0aGUgTVBUQ1Atc3BlY2lmaWMgY2xvbmluZywgZGVhbGluZyB3aXRoIHJlZmVyZW5jZXMgYW5kIHRva2VuIG1vdmVtZW50cy5cblxuSSd2ZSBhbHNvIGdvdCBteSBleWUgb24gYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAsIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveWAuIEFsc28gbm90ZSBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYCBpcyBpbiB0aGUgbWl4IGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IG1vZGlmaWNhdGlvbnMsIGFsbCBkZWFsaW5nIHdpdGggY2xvbmluZyBvciB0b2tlbiBtYW5hZ2VtZW50LlxuXG5Ob3csIGxldCBtZSBjaGVjayB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJJ3ZlIGdvdCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYG1wdGNwX3NrX2Nsb25lX2luaXRgLCBhbmQgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2AuIEkndmUgYWxzbyBub3RlZCB0aGF0IGBpbmV0X3JlcXNrX2Nsb25lYCBpcyBpbiB0aGUgbGlzdCwgYnV0IGl0J3MgbW9yZSBnZW5lcmFsIGFuZCBub3QgTVBUQ1Atc3BlY2lmaWMuXG5cbmBpbmV0X3JlcXNrX2Nsb25lYCBpcyB1c2VkIGluIG11bHRpcGxlIHBsYWNlcywgYHJlcXNrX3RpbWVyX2hhbmRsZXJgLCBgaW5ldF9jc2tfY29tcGxldGVfaGFzaGRhbmNlYCwgYW5kIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAgaW4gVENQIGNvbm5lY3Rpb24gaGFuZGxpbmcuIFRoYXQncyBhIGdvb2QgaW5kaWNhdGlvbiBvZiBpdHMgdWJpcXVpdHkgYW5kIHRoZXJlZm9yZSBub3QgYSBnb29kIGZvY3VzIGZvciBmdXp6aW5nLiBIb3dldmVyLCB0aG9zZSBNUFRDUCBzcGVjaWZpYyBmdW5jdGlvbnMgcmVhbGx5IGxvb2sgbGlrZSBnb29kIHRhcmdldHMuXG5cbk9rYXksIGxldCdzIGFzc2VzcyBpZiB0aGlzIGFyZWEgaXMgXCJXb3J0aEZ1enppbmdcIi4gIERlZmluaXRlbHkuICBJdCB0aWNrcyBhbGwgdGhlIGJveGVzLiBXZSdyZSB0YWxraW5nIGNvcmUgbmV0d29ya2luZywgZnVuZGFtZW50YWwgcHJvdG9jb2wgY2hhbmdlcy4gV2UgaGF2ZSBjb21wbGV4IGNvbmN1cnJlbmN5IGNvbmNlcm5zIC0gUkNVLCByZWZjb3VudHMsIGxvY2tpbmcsIHRva2VuIHRhYmxlIG1hbmlwdWxhdGlvbiwgYW5kIGNsb25pbmcgdW5kZXIgcmV1c2Vwb3J0IG9yIHN5bi1hY2sgdGltZXJzLi4uIHRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgYnVncy4gQW5kIHllcywgaXQncyBhbGwgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzIHdpdGhpbiBRRU1VIHdpdGggbG9vcGJhY2sgb3IgYSB2aXJ0dWFsIG5ldHdvcmsuIFNvIHRoaXMgaXMgYSBjbGVhciBcInllc1wiLlxuXG5GaW5hbGx5LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IGBNUFRDUGAgaXMgdGhlIGJpZyBvbmUuIEl0J3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudC4gQW5kIG9mIGNvdXJzZSwgYElORVRgIGlzIGEgZGVwZW5kZW5jeS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L21wdGNwL01ha2VmaWxlYCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYnV0IHRob3NlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgb25lcyB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDoxMS40NzE3NDcyMzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjkyMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvbXB0Y3AvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTVBUQ1ApICs9IG1wdGNwLm9cXG5uZXQvbXB0Y3AvTWFrZWZpbGUtMy1cXG5uZXQvbXB0Y3AvTWFrZWZpbGU9ND1tcHRjcC15IDo9IHByb3RvY29sLm8gc3ViZmxvdy5vIG9wdGlvbnMubyB0b2tlbi5vIGNyeXB0by5vIGN0cmwubyBwbS5vIGRpYWcubyBcXFxcXFxuLS1cXG5uZXQvbXB0Y3AvTWFrZWZpbGUtNy1cXG5uZXQvbXB0Y3AvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfU1lOX0NPT0tJRVMpICs9IHN5bmNvb2tpZXMub1xcbm5ldC9tcHRjcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JTkVUX01QVENQX0RJQUcpICs9IG1wdGNwX2RpYWcub1xcbm5ldC9tcHRjcC9NYWtlZmlsZS0xMC1cXG4tLVxcbm5ldC9tcHRjcC9NYWtlZmlsZT0xMj1tcHRjcF90b2tlbl90ZXN0LW9ianMgOj0gdG9rZW5fdGVzdC5vXFxubmV0L21wdGNwL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19NUFRDUF9LVU5JVF9URVNUKSArPSBtcHRjcF9jcnlwdG9fdGVzdC5vIG1wdGNwX3Rva2VuX3Rlc3Qub1xcbm5ldC9tcHRjcC9NYWtlZmlsZS0xNC1cXG5uZXQvbXB0Y3AvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDoxMS41MTkwNDY3OTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA2MTY5ODgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNUFRDUCBNb2RpZmljYXRpb24ncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBidWlsZCBzeXN0ZW0gaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSB0aGUgTVBUQ1Agb2JqZWN0IGZpbGVzIChgbXB0Y3Aub2AsIGBwcm90b2NvbC5vYCwgYHN1YmZsb3cub2AsIGB0b2tlbi5vYCkgd2hlbiBgQ09ORklHX01QVENQYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSBteSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhlIGtlcm5lbCBzeW1ib2xzIHRoYXQgYXJlIG1vZGlmaWVkLiBJIGNvbmZpcm1lZCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYG1wdGNwX3NrX2Nsb25lX2luaXRgLCBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYCwgYW5kIGBpbmV0X3JlcXNrX2Nsb25lYCBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQuIEFuZCBhZGRpdGlvbmFsbHksIGBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RgIGFuZCB0aGUgc3RhdGljIGBtcHRjcF9za19jbG9uZV9kZXN0cm95YCBhcmUgYWxzbyByZWxldmFudC4gVGhlc2UgZnVuY3Rpb25zIGFsbCBwbGF5IGEgcm9sZSBpbiBNUFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCB0ZWFyZG93biwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gcmVxdWVzdCBzb2NrZXRzIGFuZCB0b2tlbnMuXG5cbkV4Y2VsbGVudC4gU28sIGdpdmVuIHRoaXMsIGxldCdzIHZhbGlkYXRlIHRoYXQgdGhlIHNldC1yZXN1bHRzIGNyaXRlcmlhIGFyZSBtZXQ6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBZZXMsIGFic29sdXRlbHkuIFRoaXMgcGF0Y2ggdG91Y2hlcyBNUFRDUCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGxvZ2ljLCB0b2tlbiB0YWJsZSBtYW5hZ2VtZW50LCBhbmQgc29ja2V0IGluaXRpYWxpemF0aW9uIGVycm9yIGhhbmRsaW5nIGFjcm9zcyBUQ1AvTVBUQ1AgY29ubmVjdGlvbiBzZXR1cCBwYXRocy4gVGhpbmsgcmV1c2Vwb3J0IG1pZ3JhdGlvbnMgYW5kIHRpbWVyIGhhbmRsZXJzIOKAkyB0aGVzZSB0aGluZ3MgaGF2ZSBjb21wbGV4IFJDVSwgcmVmZXJlbmNlIGNvdW50LCBhbmQgbG9ja2luZyBpbnRlcmFjdGlvbnMuIEl0J3MgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLlxuKiAgICoqUmVhc29uaW5nKio6IEkgbmVlZCB0byBjb25jaXNlbHkgZG9jdW1lbnQgdGhlIHJhdGlvbmFsZS4gSSdsbCB3cml0ZTogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBsb2dpYywgdG9rZW4gdGFibGUgbWFuYWdlbWVudCwgYW5kIHNvY2tldCBpbml0aWFsaXphdGlvbiBlcnJvciBoYW5kbGluZyBhY3Jvc3MgVENQL01QVENQIGNvbm5lY3Rpb24gc2V0dXAgcGF0aHMgKGUuZy4gZHVyaW5nIHJldXNlcG9ydCBtaWdyYXRpb24gb3IgdGltZXIgaGFuZGxlcnMpLCB3aGljaCBpbnZvbHZlcyBjb21wbGV4IFJDVS9yZWZjb3VudC9sb2NraW5nIHN0YXRlIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIlxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBXZSBjbGVhcmx5IG5lZWQgYE1QVENQYCBlbmFibGVkLiBIb3dldmVyLCB0byBlbnN1cmUgdGhhdCB0aGUgcmVxdWlyZWQgY29yZSBUQ1AgZnVuY3Rpb25hbGl0eSBpcyBhbHNvIGVuYWJsZWQsIEknbGwgcmVjb21tZW5kIGBbXCJJTkVUXCIsIFwiTVBUQ1BcIl1gLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IFRoZSBzeW1ib2xzIEkndmUgaWRlbnRpZmllZDogYFtcIm1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVcIiwgXCJtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RcIiwgXCJtcHRjcF90b2tlbl9hY2NlcHRcIiwgXCJtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RcIiwgXCJtcHRjcF9za19jbG9uZV9pbml0XCIsIFwic3ViZmxvd19zeW5fcmVjdl9zb2NrXCIsIFwiaW5ldF9yZXFza19jbG9uZVwiXWAuXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgZnJ1aXRmdWwgYXJlYSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MjUsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjE3LjU4MDc0NzYxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwNzExMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiLFxuICAgIFwibXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9hY2NlcHRcIixcbiAgICBcIm1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3Bfc2tfY2xvbmVfaW5pdFwiLFxuICAgIFwic3ViZmxvd19zeW5fcmVjdl9zb2NrXCIsXG4gICAgXCJpbmV0X3JlcXNrX2Nsb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBNUFRDUCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nLCB0b2tlbiBoYXNoIG1hbmFnZW1lbnQsIGFuZCBzb2NrZXQgY2xvbmUgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIFRDUC9NUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIFRoaXMgbG9naWMgaW52b2x2ZXMgc3VidGxlIFJDVSwgcmVmY291bnRpbmcsIGFuZCBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHNvY2tldCBzeXNjYWxscyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lXCIsXG4gICAgXCJtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3Rva2VuX2FjY2VwdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF9za19jbG9uZV9pbml0XCIsXG4gICAgXCJzdWJmbG93X3N5bl9yZWN2X3NvY2tcIixcbiAgICBcImluZXRfcmVxc2tfY2xvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcsIHRva2VuIGhhc2ggbWFuYWdlbWVudCwgYW5kIHNvY2tldCBjbG9uZSBlcnJvciBoYW5kbGluZyBkdXJpbmcgVENQL01QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gVGhpcyBsb2dpYyBpbnZvbHZlcyBzdWJ0bGUgUkNVLCByZWZjb3VudGluZywgYW5kIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc29ja2V0IHN5c2NhbGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MTcuNjU0ODI1NjA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMxNzAzMzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjE3LjY1NTMwODY2OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1MzE2NTQ2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBNUFRDUCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGR1cmluZyByZXVzZXBvcnQgc29ja2V0IG1pZ3JhdGlvbiBieSBzYWZlbHkgaGFuZGxpbmcgbXNrIHNvY2tldCByZWZjb3VudHMsIG1vdmluZyB0b2tlbiBoYXNoIHRhYmxlIGVudHJpZXMgKG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCksIGFuZCBwcm9wZXJseSBjbGVhbmluZyB1cCBhbmQgZmFsbGluZyBiYWNrIHdoZW4gbXB0Y3BfdG9rZW5fYWNjZXB0IGZhaWxzLlxcblxcblRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb25jdXJyZW5jeSwgUkNVIHNhZmV0eSwgc29ja2V0IHJlZmNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlL2Rlc3RydWN0aW9uIHN0YXRlIG1hbmFnZW1lbnQuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIGFyZWEgYXJlIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpc3N1ZXMsIG9yIGxvY2tpbmcvZGVhZGxvY2sgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBwYWRkaW5nL2luZm8tbGVha3MsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRmMzAwZmU3ODI3NzFhMmEwOGJmYTMxZDljNWJhYmZjZmFkMDExNmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIxOjA5OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbXB0Y3AuaCBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbmluZGV4IDQ4NWQ1NWI2NmVhNjcuLmFkNzAwNWI1NzRiYjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oXG4rKysgYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5AQCAtMjE5LDYgKzIxOSw5IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxuIFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxuIFx0XHRcdFx0XHQgICAgICAgYm9vbCBhdHRhY2hfbGlzdGVuZXIpO1xuKy8qIENhbGxlciBtdXN0IGhvbGQgYW4gUkNVIHJlYWQtc2lkZSBsb2NrLiAqL1xuK3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpO1xuIFxuIF9fYmUzMiBtcHRjcF9nZXRfcmVzZXRfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuQEAgLTMwNSw2ICszMDgsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXNcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbisvKiBDYWxsZXIgbXVzdCBob2xkIGFuIFJDVSByZWFkLXNpZGUgbG9jay4gKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAgeyByZXR1cm4gaHRvbmwoMHUpOyB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX2FjdGl2ZV9kZXRlY3RfYmxhY2tob2xlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBleHBpcmVkKSB7IH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuaW5kZXggNjI1NzQ1OWJjZWUyNC4uODk2ZjQ3MmRjYmEyOSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3BfZWNuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbXB0Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrX3JldXNlcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2VcbiBcbkBAIC05NjEsNiArOTYyLDkgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtXHUwMDNlc2spLVx1MDAzZWZhc3RvcGVuX3JzaywgbnJlcSk7XG4gXHR9XG4gXG4rXHRpZiAocnNrX2lzX21wdGNwKHJlcSkpXG4rXHRcdG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUocmVxLCBucmVxKTtcbitcbiBcdHJldHVybiBucmVxO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBlMWYwOGY3MWNkYjE2Li4zMDA2N2YyYTdjYThmIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMzY5Miw2ICszNjkyLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBtcHRjcF9za19jbG9uZV9kZXN0cm95KHN0cnVjdCBzb2NrICpuc2spXG4re1xuK1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKG5zayk7XG4rXG4rXHRtcHRjcF9yZWxlYXNlX3NjaGVkKG1zayk7XG4rXHRtcHRjcF9zZXRfc3RhdGUobnNrLCBUQ1BfQ0xPU0UpO1xuK1x0LyogaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UoKSBjbGVhcnMgVENQIHNvY2tfb3BzIHN0YXRlIHZpYVxuK1x0ICogdGNwX3NrKCksIGJ1dCBuc2sgaXMgYW4gTVBUQ1AgbWFzdGVyIHNvY2tldDsga2VlcCB0aGUgaW5ldC1sZXZlbFxuK1x0ICogZGVzdHJveSBwcmVwYXJhdGlvbiBoZXJlLlxuK1x0ICovXG4rXHRiaF91bmxvY2tfc29jayhuc2spO1xuK1x0c29ja19wdXQobnNrKTtcbitcdHNvY2tfc2V0X2ZsYWcobnNrLCBTT0NLX0RFQUQpO1xuK1x0dGNwX29ycGhhbl9jb3VudF9pbmMoKTtcbitcdGluZXRfc2sobnNrKS1cdTAwM2VpbmV0X251bSA9IDA7XG4rXHRpbmV0X2Nza19kZXN0cm95X3NvY2sobnNrKTtcbit9XG4rXG4gc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsXG4gXHRcdFx0XHQgc3RydWN0IHNvY2sgKnNzayxcbkBAIC0zNzUxLDExICszNzY5LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0bGlzdF9hZGQoXHUwMDI2c3ViZmxvdy1cdTAwM2Vub2RlLCBcdTAwMjZtc2stXHUwMDNlY29ubl9saXN0KTtcbiBcdHNvY2tfaG9sZChzc2spO1xuIFxuLVx0LyogbmV3IG1wYyBzdWJmbG93IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgbmV3bHlcbi1cdCAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0XG4tXHQgKi9cbi1cdG1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKTtcbi1cbiBcdC8qIHNldCBtc2sgYWRkcmVzc2VzIGVhcmx5IHRvIGVuc3VyZSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoKVxuIFx0ICogdXNlcyB0aGUgY29ycmVjdCBkYXRhXG4gXHQgKi9cbkBAIC0zNzY0LDYgKzM3NzcsMTQgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0bXB0Y3BfcmN2X3NwYWNlX2luaXQobXNrLCBzc2spO1xuIFx0bXNrLVx1MDAzZXJjdnFfc3BhY2UudGltZSA9IG1wdGNwX3N0YW1wKCk7XG4gXG4rXHRpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkge1xuK1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSk7XG4rXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWZpcnN0LCBOVUxMKTtcbitcdFx0c29ja19wdXQoc3NrKTtcbitcdFx0bXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShuc2spO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbiBcdGlmIChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QQ19BQ0spXG4gXHRcdF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChtc2ssIHN1YmZsb3csIG1wX29wdCk7XG4gXHRiaF91bmxvY2tfc29jayhuc2spO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbmluZGV4IDg3Y2NiODRlOTkyN2MuLjI0NzQ0OWNjMmZlYjkgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbkBAIC0xMDc5LDkgKzEwNzksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gfVxuIFxuIGludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4rYm9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxuIFx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbik7XG4gc3RydWN0IG1wdGNwX3NvY2sgKm1wdGNwX3Rva2VuX2dldF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHRva2VuKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuaW5kZXggYWY4MWFkNWU2OTlkMS4uZDJjZDEyZmMwMzQyMSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmNcbisrKyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbkBAIC00Nyw2ICs0Nyw0MSBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcdG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChyZXEpO1xuIH1cbiBcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrO1xuK1xuK1x0bmV3X3N1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7XG4rXHRSQ1VfTE9DS0RFUF9XQVJOKCFyY3VfcmVhZF9sb2NrX2FueV9oZWxkKCksXG4rXHRcdFx0IFwiTVBUQ1AgcmVxc2sgY2xvbmUgY2FsbGVkIHdpdGhvdXQgUkNVXCIpO1xuK1xuK1x0LyogQSBub24tTlVMTCAtXHUwMDNlbXNrIG1lYW5zIHRoZSByZXF1ZXN0IG93bnMgb25lIHJlZmVyZW5jZS4gIFRoZSBjbG9uZVxuK1x0ICogY29waWVkIG9ubHkgdGhlIHBvaW50ZXIsIHdoaWxlIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGNhbiBjb25jdXJyZW50bHlcbitcdCAqIHRyYW5zZmVyIGl0cyByZWZlcmVuY2UgdG8gdGhlIGNoaWxkLiAgQWNxdWlyZSBhIHJlZmVyZW5jZSBmb3IgdGhlXG4rXHQgKiBjbG9uZSwgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgb3JpZ2luYWwgcmVxdWVzdCBzdGlsbCBvd25zIHRoZSBzYW1lIG1zay5cbitcdCAqIE1QVENQIHNvY2tldHMgdXNlIFNMQUJfVFlQRVNBRkVfQllfUkNVIGFuZCBhbGwgY2xvbmUgY2FsbGVycyBydW4gaW5cbitcdCAqIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwga2VlcGluZyB0aGUgbWVtb3J5IHN0YWJsZSBoZXJlLlxuK1x0ICovXG4rXHRtc2sgPSBSRUFEX09OQ0Uoc3ViZmxvd19yZXEtXHUwMDNlbXNrKTtcbitcdGlmIChtc2spIHtcbitcdFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuK1xuK1x0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVyb19hY3F1aXJlKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpIHtcbitcdFx0XHRtc2sgPSBOVUxMO1xuK1x0XHR9IGVsc2UgaWYgKFJFQURfT05DRShzdWJmbG93X3JlcS1cdTAwM2Vtc2spICE9IG1zaykge1xuK1x0XHRcdHNvY2tfcHV0KHNrKTtcbitcdFx0XHRtc2sgPSBOVUxMO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXdfc3ViZmxvd19yZXEtXHUwMDNlbXNrID0gbXNrO1xuK1xuK1x0bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsXG4gXHRcdFx0XHQgIHZvaWQgKmhtYWMpXG4ge1xuQEAgLTg4NSw4ICs5MjAsMTAgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFxuIFx0XHRpZiAoY3R4LVx1MDAzZW1wX2NhcGFibGUpIHtcbiBcdFx0XHRjdHgtXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXHUwMDNlY29ubiwgXHUwMDI2bXBfb3B0LCBjaGlsZCwgcmVxKTtcbi1cdFx0XHRpZiAoIWN0eC1cdTAwM2Vjb25uKVxuK1x0XHRcdGlmICghY3R4LVx1MDAzZWNvbm4pIHtcbitcdFx0XHRcdGZhbGxiYWNrID0gdHJ1ZTtcbiBcdFx0XHRcdGdvdG8gZmFsbGJhY2s7XG4rXHRcdFx0fVxuIFxuIFx0XHRcdGN0eC1cdTAwM2VzdWJmbG93X2lkID0gMTtcbiBcdFx0XHRvd25lciA9IG1wdGNwX3NrKGN0eC1cdTAwM2Vjb25uKTtcbkBAIC05MjMsNyArOTYwLDcgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdH1cbiBcbiBcdFx0XHQvKiBtb3ZlIHRoZSBtc2sgcmVmZXJlbmNlIG93bmVyc2hpcCB0byB0aGUgc3ViZmxvdyAqL1xuLVx0XHRcdHN1YmZsb3dfcmVxLVx1MDAzZW1zayA9IE5VTEw7XG4rXHRcdFx0V1JJVEVfT05DRShzdWJmbG93X3JlcS1cdTAwM2Vtc2ssIE5VTEwpO1xuIFx0XHRcdGN0eC1cdTAwM2Vjb25uID0gKHN0cnVjdCBzb2NrICopb3duZXI7XG4gXG4gXHRcdFx0aWYgKHN1YmZsb3dfdXNlX2RpZmZlcmVudF9zcG9ydChvd25lciwgc2spKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuaW5kZXggZjFhNTBmMzY3YWRkOC4uZTBmMjgyM2Y5MmVmYiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbi5jXG4rKysgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuQEAgLTE4MCw2ICsxODAsNDMgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0IC0gbW92ZSByZXF1ZXN0IHRva2VuIG93bmVyc2hpcCB0byBhIGNsb25lXG4rICogQHJlcTogb3JpZ2luYWwgcmVxdWVzdCBzb2NrZXRcbisgKiBAbmV3X3JlcTogY2xvbmVkIHJlcXVlc3Qgc29ja2V0XG4rICpcbisgKiBNb3ZlIHRoZSB0b2tlbiBoYXNoIGVudHJ5IGZyb20gdGhlIG9yaWdpbmFsIHJlcXVlc3QgdG8gaXRzIGNsb25lLlxuKyAqL1xuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbitcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbitcbitcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuK1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKSB7XG4rXHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbitcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuK1x0fSBlbHNlIHtcbitcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuK1x0XHRpZiAocG9zID09IHN1YmZsb3dfcmVxKVxuK1x0XHRcdGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgKzIyNCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbiAgKlxuICAqIENhbGxlZCB3aGVuIGEgU1lOIHBhY2tldCBjcmVhdGVzIGEgbmV3IGxvZ2ljYWwgY29ubmVjdGlvbiwgaS5lLlxuICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuIFx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4rXHRib29sIHJldCA9IGZhbHNlO1xuIFxuLVx0c29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLVx1MDAzZXNrX3Byb3QsIDEpO1xuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS1cdTAwM2V0b2tlbik7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdFx0Z290byB1bmxvY2s7XG4gXG4tXHQvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqL1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgcmVxLVx1MDAzZXRva2VuKTtcbi1cdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSByZXEpKVxuLVx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuK1x0aWYgKHBvcyAhPSByZXEpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiBcdF9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgXHUwMDI2YnVja2V0LVx1MDAzZW1za19jaGFpbik7XG4rXHRyZXQgPSB0cnVlO1xuK1xuK3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbitcdGlmIChyZXQpXG4rXHRcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cdTAwM2Vza19wcm90LCAxKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgKzQwNCwyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiBcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbiBcbi1cdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuLVx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkge1xuK1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4rXG4rdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbisrKyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuK1x0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7XG4gXHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soXHUwMDI2aW5pdF9uZXQsIG1zay1cdTAwM2V0b2tlbikpO1xuIFxuIFx0LyogdGhpcyBpcyBub3cgYSBuby1vcCAqL1xuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcbiBcdFx0XHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xuIFx0bXNrLVx1MDAzZXRva2VuID0gcmVxLVx1MDAzZXRva2VuO1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjE3LjY1NTMxMDkyOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NjkxMzk4OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVzZSBjaGFuZ2VzIGFyZSBhY3R1YWxseSBkb2luZy5cblxuSSdtIHNlZWluZyBhIHNlcmllcyBvZiBjaGFuZ2VzIHJlbGF0ZWQgdG8gTVBUQ1AsIHNwZWNpZmljYWxseSBhcm91bmQgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbWFuYWdlbWVudC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSByZWZhY3RvcmluZyBvciBpbXByb3ZlbWVudCByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBmbG93LlxuXG5IZXJl4oCZcyB0aGUgYnJlYWtkb3duIGFzIEkgdW5kZXJzdGFuZCBpdDpcblxuKiAgICoqSGVhZGVyIGFuZCBTdHViOioqIFdlIGhhdmUgYSBuZXcgc3R1YiBmdW5jdGlvbiBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSgpYCBiZWluZyBhZGRlZCB0byBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAuIFRoaXMgc3VnZ2VzdHMgc29tZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIE1QVENQIHN1YmZsb3cgY2xvbmluZy5cblxuKiAgICoqSW50ZWdyYXRpb24gd2l0aCBgaW5ldF9yZXFza19jbG9uZSgpYDoqKiBUaGUgYGluZXRfY29ubmVjdGlvbl9zb2NrLmNgIGZpbGUgbm93IGNhbGxzIHRoaXMgbmV3IGZ1bmN0aW9uIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKClgIHdpdGhpbiBgaW5ldF9yZXFza19jbG9uZSgpYC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBwYXRjaCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIGhvdyBNUFRDUCBjb25uZWN0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgbG93ZXIgbGV2ZWwgaW5ldCBsYXllci5cblxuKiAgICoqSGVscGVyIEZ1bmN0aW9ucyBhbmQgRXJyb3IgSGFuZGxpbmc6KiogYG5ldC9tcHRjcC9wcm90b2NvbC5jYCBzZWVzIHRoZSBhZGRpdGlvbiBvZiBhIGRlc3RydWN0aW9uIGhlbHBlciBgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveSgpYCBhbmQgbW92ZXMgdGhlIGNhbGwgdG8gYG1wdGNwX3Rva2VuX2FjY2VwdCgpYC4gQ3JpdGljYWxseSwgYG1wdGNwX3Rva2VuX2FjY2VwdGAncyByZXR1cm4gdmFsdWUgaXMgbm93IGJlaW5nICpjaGVja2VkKiBmb3Igc3VjY2Vzcy4gSWYgaXQgZmFpbHMsIHRoZSBjb2RlIHBhdGggbm93IGNsZWFucyB1cCBtb3JlIGdyYWNlZnVsbHkuIFRoaXMgaW1wbGllcyBhIHNpZ25pZmljYW50IGltcHJvdmVtZW50IGluIHRoZSByb2J1c3RuZXNzIG9mIHRoZSB0b2tlbiBoYW5kbGluZyBwcm9jZXNzLlxuXG4qICAgKipSZXR1cm4gVmFsdWUgb2YgYG1wdGNwX3Rva2VuX2FjY2VwdCgpYDoqKiBUaGUgcmV0dXJuIHR5cGUgb2YgYG1wdGNwX3Rva2VuX2FjY2VwdCgpYCBpcyBiZWluZyBjaGFuZ2VkIHRvIGEgYm9vbGVhbi4gVGhpcyBpcyBhIHZlcnkgY2xlYXIgc2lnbmFsIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBub3cgZmFpbCBhbmQgdGhhdCB0aGlzIGZhaWx1cmUgaXMgaW50ZW5kZWQgdG8gYmUgaGFuZGxlZCwgd2hpY2ggY29uZmlybXMgbXkgZWFybGllciBoeXBvdGhlc2lzLlxuXG4qICAgKipgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSgpYCBJbXBsZW1lbnRhdGlvbjoqKiBJbiBgbmV0L21wdGNwL3N1YmZsb3cuY2AsIHRoZSBuZXcgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuIEl0IGNsb25lcyB0aGUgTVBUQ1AgbWFzdGVyIHNvY2tldCAoYG1za2ApIHNhZmVseSB1c2luZyBSQ1UgYW5kIGNhbGxzIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QoKWAuIFRoaXMgaXMgY29yZSBsb2dpYyB0aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIEl0IGFsc28gaW50cm9kdWNlcyBzb21lIG1vcmUgcm9idXN0IGVycm9yIGhhbmRsaW5nIGFyb3VuZCBmYWlsdXJlIHRvIGluaXRpYWxpemUgYSBjbG9uZS4gVGhleSBhcmUgdXNpbmcgYFdSSVRFX09OQ0VgIHRvIHVwZGF0ZSBzb21lIGBtc2tgIHBvaW50ZXJzLCB3aGljaCBwb2ludHMgdG8gY29uY3VycmVuY3kgYW5kIGRhdGEgcmFjZXMuXG5cbiogICAqKlRva2VuIEhhbmRsaW5nIGFuZCBDb25jdXJyZW5jeToqKiBgbmV0L21wdGNwL3Rva2VuLmNgIGNvbnRhaW5zIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCgpYCBhbmQgdXBkYXRlcyB0byBgbXB0Y3BfdG9rZW5fYWNjZXB0KClgLCBwYXJ0aWN1bGFybHkgYSBtaW5vciBjb25jdXJyZW5jeSBmaXggaW4gYG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCgpYC4gVGhpcyBzaWduYWxzIHRoYXQgdGhlIGNoYW5nZXMgaW5jbHVkZSB0aHJlYWQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgdG9rZW4gcmVwbGFjZW1lbnQuXG5cbiogICAqKlVuaXQgVGVzdHM6KiogRmluYWxseSwgYG5ldC9tcHRjcC90b2tlbl90ZXN0LmNgIGlzIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY2hhbmdlIGluIGBtcHRjcF90b2tlbl9hY2NlcHQoKWAncyByZXR1cm4gdmFsdWUuIFRoaXMgaXMgZ29vZCB0byBzZWU7IHRoaXMgc2lnbmFscyB0aGF0IHRoZXkgd2VyZSB0aGlua2luZyBhYm91dCBob3cgdG8gdGVzdCB0aGUgbmV3IGJlaGF2aW9yLlxuXG5Ob3csIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGluZXRfcmVxc2tfY2xvbmVgIHRvIHNlZSB3aGVyZSBhbGwgb2YgdGhpcyBmaXRzIGluIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdsbCByZWFkIHRoZSBjb2RlIG9yIHVzZSBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgZmlsZSBhbmQgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMuXG5cbkJhc2VkIG9uIHRoaXMgZmlyc3QgcGFzcywgdGhlIGNoYW5nZXMgKmFwcGVhciogdG8gYmUgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGNvbmN1cnJlbmN5IGFuZCB0b2tlbiBtYW5hZ2VtZW50LiBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQgdGhpcyBpbnRyb2R1Y2VzICpuZXcqIGF2ZW51ZXMgZm9yIEtNU0FOIHRvIGZpbmQgaXNzdWVzLiBIb3dldmVyLCB0aGUgY2hhbmdlcyB0byBlcnJvciBoYW5kbGluZywgYW5kIHNwZWNpZmljYWxseSB0aGUgdXNlIG9mIFJDVSBhbmQgYFdSSVRFX09OQ0VgIHN1Z2dlc3QgdGhlc2UgY2hhbmdlcyAqY291bGQqIGhhdmUgaW50cm9kdWNlZCBzdWJ0bGUgZGF0YSByYWNlcyBvciBjb25jdXJyZW5jeSBidWdzIHRoYXQgbWF5IGJlIGRldGVjdGFibGUgYnkgS01TQU4uIEkgd291bGQgbmVlZCB0byBhbmFseXplIHRoZSBzcGVjaWZpYyBjb2RlLCBhbmQgcG90ZW50aWFsbHkgdXNlIHRoZSBjb2RlIGJyb3dzaW5nIHRvb2xzLCB0byBkZXRlcm1pbmUgdGhlIGxldmVsIG9mIGNvbmN1cnJlbmN5IHJpc2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mzg2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MjcuMzQ2NzEyMzYxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk0NTpcXHRcXHRucmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIgPSBzaztcXG4gOTQ2OlxcdFxcbiA5NDc6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiB0Y3BfcnNrKG5yZXEpLVxcdTAwM2V0Zm9fbGlzdGVuZXIpIHtcXG4gOTQ4OlxcdFxcdFxcdHN0cnVjdCBmYXN0b3Blbl9xdWV1ZSAqZmFzdG9wZW5xO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRcXHQvKiByZXFza19mYXN0b3Blbl9yZW1vdmUoKSB3aWxsIHVuY2hhcmdlIG5yZXEtXFx1MDAzZXJza19saXN0ZW5lcixcXG4gOTUxOlxcdFxcdFxcdCAqIHRoYXQgaXMgQHNrLCBzbyBjaGFyZ2UgaXQgaGVyZS4gIFVubGlrZSB0aGUgbGlzdGVuZXJcXG4gOTUyOlxcdFxcdFxcdCAqIGJlaW5nIGNsb3NlZCwgQHNrIGlzIGxpdmUgYW5kIG5lZWRzIGl0cyBsb2NrLlxcbiA5NTM6XFx0XFx0XFx0ICovXFxuIDk1NDpcXHRcXHRcXHRmYXN0b3BlbnEgPSBcXHUwMDI2aW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZS5mYXN0b3BlbnE7XFxuIDk1NTpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmZhc3RvcGVucS1cXHUwMDNlbG9jayk7XFxuIDk1NjpcXHRcXHRcXHRmYXN0b3BlbnEtXFx1MDAzZXFsZW4rKztcXG4gOTU3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZmYXN0b3BlbnEtXFx1MDAzZWxvY2spO1xcbiA5NTg6XFx0XFxuIDk1OTpcXHRcXHRcXHQvKiBXZSBuZWVkIG5vdCBhY3F1aXJlIGZhc3RvcGVucS1cXHUwMDNlbG9ja1xcbiA5NjA6XFx0XFx0XFx0ICogYmVjYXVzZSB0aGUgY2hpbGQgc29ja2V0IGlzIGxvY2tlZCBpbiBpbmV0X2Nza19saXN0ZW5fc3RvcCgpLlxcbiA5NjE6XFx0XFx0XFx0ICovXFxuIDk2MjpcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtXFx1MDAzZXNrKS1cXHUwMDNlZmFzdG9wZW5fcnNrLCBucmVxKTtcXG4gOTYzOlxcdFxcdH1cXG4gOTY0OlxcdFxcbiA5NjU6XFx0XFx0aWYgKHJza19pc19tcHRjcChyZXEpKVxcbiA5NjY6XFx0XFx0XFx0bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpO1xcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHRyZXR1cm4gbnJlcTtcXG4gOTY5OlxcdH1cXG4gOTcwOlxcdFxcbiA5NzE6XFx0c3RhdGljIHZvaWQgcmVxc2tfcXVldWVfbWlncmF0ZWQoc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUsXFxuIDk3MjpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbiA5NzM6XFx0e1xcbiA5NzQ6XFx0XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgPT0gMClcXG4gOTc1OlxcdFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNnF1ZXVlLVxcdTAwM2V5b3VuZyk7XFxuIDk3NjpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZxdWV1ZS1cXHUwMDNlcWxlbik7XFxuIDk3NzpcXHR9XFxuIDk3ODpcXHRcXG4gOTc5OlxcdHN0YXRpYyB2b2lkIHJlcXNrX21pZ3JhdGVfcmVzZXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbiA5ODA6XFx0e1xcbiA5ODE6XFx0XFx0cmVxLVxcdTAwM2VzYXZlZF9zeW4gPSBOVUxMO1xcbiA5ODI6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuIDk4MzpcXHRcXHRpbmV0X3JzayhyZXEpLVxcdTAwM2VpcHY2X29wdCA9IE5VTEw7XFxuIDk4NDpcXHRcXHRpbmV0X3JzayhyZXEpLVxcdTAwM2Vwa3RvcHRzID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MjcuMzQ2ODQxOTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwNDY4MTI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBpbmV0X3JlcXNrX2Nsb25lKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgcmVtYWluaW5nIGNvZGUgd2l0aGluIGBpbmV0X3JlcXNrX2Nsb25lYC4gSG1tLCBzZWVtcyBsaWtlIHdlJ3JlIHBhc3QgdGhlIGluaXRpYWwgc2V0dXAgYW5kIGVycm9yIGNoZWNraW5nLiBJJ20gZ3Vlc3Npbmcgd2UncmUgbm93IGludG8gdGhlIG1lYXQgb2YgaXQ6IHRoZSBhY3R1YWwgZHVwbGljYXRpb24gb2YgdGhlIHJlcXVlc3Qgc29ja2V0IHN0cnVjdHVyZSBmb3IgYSBuZXcgY29ubmVjdGlvbi4gSSBleHBlY3QgdG8gc2VlIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBkYXRhIGNvcHlpbmcuIExldCdzIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIGZhaWx1cmUgYWxvbmcgdGhlIHdheSwgSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSBtYWludGFpbiBjb25zaXN0ZW5jeSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4gQ29uc2lkZXJpbmcgdGhlIGNvbXBsZXhpdGllcyBvZiBUQ1Agc3RhdGUgbWFuYWdlbWVudCwgdGhhdCdzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEuIEkgaG9wZSBpdCBpcyBhbGwgZG9uZSBpbiBhIGNvbnNpc3RlbnQgbWFubmVyLCBhcyBpdCBoYXMgdG8gaGFuZGxlIHRoZSBjb25jdXJyZW50IGFjY2Vzcy4gVGhpcyBpcyBnb2luZyB0byBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkgZGVhbCB3aXRoIHRoZSBgcmVxc2tgIGRhdGEgc3RydWN0dXJlIGFuZCBhbGwgdGhlIHBvaW50ZXJzIHdpdGhpbi4gV2hhdCBudWFuY2VzIGFyZSBhdCBwbGF5PyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBjaGlsZD8gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGFuZCBhIGxvdCBoaW5nZXMgb24gdGhlIHJpZ2h0IGxvY2tzLiBDdXJpb3VzIHRvIHNlZSB0aGUgdGVjaG5pcXVlcyB1c2VkIGZvciBhdG9taWMgb3BlcmF0aW9ucyBhbmQgbWVtb3J5IGJhcnJpZXJzLCBwYXJ0aWN1bGFybHkgaWYgdGhleSdyZSBkZWFsaW5nIHdpdGggbXVsdGlwbGUgQ1BVcy4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGhhbmRsZWQgdGhhdC4gT2theSwgSSdtIHJlYWR5LiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjMwLjE1MTUyNjc4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MjA6XFx0XFx0bnJlcSA9IGttZW1fY2FjaGVfYWxsb2MocmVxLVxcdTAwM2Vyc2tfb3BzLVxcdTAwM2VzbGFiLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4gOTIxOlxcdFxcdGlmICghbnJlcSkge1xcbiA5MjI6XFx0XFx0XFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUE1JR1JBVEVSRVFGQUlMVVJFKTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0XFx0XFx0LyogcGFpcmVkIHdpdGggcmVmY291bnRfaW5jX25vdF96ZXJvKCkgaW4gcmV1c2Vwb3J0X21pZ3JhdGVfc29jaygpICovXFxuIDkyNTpcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuIDkyNjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gOTI3OlxcdFxcdH1cXG4gOTI4OlxcdFxcbiA5Mjk6XFx0XFx0cmVxX3NrID0gcmVxX3RvX3NrKHJlcSk7XFxuIDkzMDpcXHRcXHRucmVxX3NrID0gcmVxX3RvX3NrKG5yZXEpO1xcbiA5MzE6XFx0XFxuIDkzMjpcXHRcXHRtZW1jcHkobnJlcV9zaywgcmVxX3NrLFxcbiA5MzM6XFx0XFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBzb2NrLCBza19kb250Y29weV9iZWdpbikpO1xcbiA5MzQ6XFx0XFx0dW5zYWZlX21lbWNweShcXHUwMDI2bnJlcV9zay1cXHUwMDNlc2tfZG9udGNvcHlfZW5kLCBcXHUwMDI2cmVxX3NrLVxcdTAwM2Vza19kb250Y29weV9lbmQsXFxuIDkzNTpcXHRcXHRcXHQgICAgICByZXEtXFx1MDAzZXJza19vcHMtXFx1MDAzZW9ial9zaXplIC0gb2Zmc2V0b2Yoc3RydWN0IHNvY2ssIHNrX2RvbnRjb3B5X2VuZCksXFxuIDkzNjpcXHRcXHRcXHQgICAgICAvKiBhbGxvYyBpcyBsYXJnZXIgdGhhbiBzdHJ1Y3QsIHNlZSBhYm92ZSAqLyk7XFxuIDkzNzpcXHRcXG4gOTM4OlxcdFxcdHNrX25vZGVfaW5pdChcXHUwMDI2bnJlcV9zay1cXHUwMDNlc2tfbm9kZSk7XFxuIDkzOTpcXHRcXHRucmVxX3NrLVxcdTAwM2Vza190eF9xdWV1ZV9tYXBwaW5nID0gcmVxX3NrLVxcdTAwM2Vza190eF9xdWV1ZV9tYXBwaW5nO1xcbiA5NDA6XFx0I2lmZGVmIENPTkZJR19TT0NLX1JYX1FVRVVFX01BUFBJTkdcXG4gOTQxOlxcdFxcdG5yZXFfc2stXFx1MDAzZXNrX3J4X3F1ZXVlX21hcHBpbmcgPSByZXFfc2stXFx1MDAzZXNrX3J4X3F1ZXVlX21hcHBpbmc7XFxuIDk0MjpcXHQjZW5kaWZcXG4gOTQzOlxcdFxcdG5yZXFfc2stXFx1MDAzZXNrX2luY29taW5nX2NwdSA9IHJlcV9zay1cXHUwMDNlc2tfaW5jb21pbmdfY3B1O1xcbiA5NDQ6XFx0XFxuIDk0NTpcXHRcXHRucmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIgPSBzaztcXG4gOTQ2OlxcdFxcbiA5NDc6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiB0Y3BfcnNrKG5yZXEpLVxcdTAwM2V0Zm9fbGlzdGVuZXIpIHtcXG4gOTQ4OlxcdFxcdFxcdHN0cnVjdCBmYXN0b3Blbl9xdWV1ZSAqZmFzdG9wZW5xO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRcXHQvKiByZXFza19mYXN0b3Blbl9yZW1vdmUoKSB3aWxsIHVuY2hhcmdlIG5yZXEtXFx1MDAzZXJza19saXN0ZW5lcixcXG4gOTUxOlxcdFxcdFxcdCAqIHRoYXQgaXMgQHNrLCBzbyBjaGFyZ2UgaXQgaGVyZS4gIFVubGlrZSB0aGUgbGlzdGVuZXJcXG4gOTUyOlxcdFxcdFxcdCAqIGJlaW5nIGNsb3NlZCwgQHNrIGlzIGxpdmUgYW5kIG5lZWRzIGl0cyBsb2NrLlxcbiA5NTM6XFx0XFx0XFx0ICovXFxuIDk1NDpcXHRcXHRcXHRmYXN0b3BlbnEgPSBcXHUwMDI2aW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZS5mYXN0b3BlbnE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjMwLjE1MTY1Njc5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQ5NTU4MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBUQ1AgUmVxdWVzdCBTb2NrZXQgQ2xvbmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpbmV0X3JlcXNrX2Nsb25lKClgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgYFNPX1JFVVNFUE9SVGAgc29ja2V0IG1pZ3JhdGlvbi4gVGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgYW5kIGl0cyBjb25uZWN0aW9uIHJlcXVlc3RzIGFyZSBtb3ZlZCB0byBhbm90aGVyIGxpc3RlbmVyIGluIHRoZSByZXVzZXBvcnQgZ3JvdXAsIHRoZSBjbG9uaW5nIHByb2Nlc3MsIGhhbmRsZWQgYnkgYGluZXRfcmVxc2tfY2xvbmUoKWAsIHdhc24ndCBwcm9wZXJseSB0YWtpbmcgTVBUQ1Atc3BlY2lmaWMgc3RhdGUgaW50byBhY2NvdW50LiBUaGlzIG1lYW5zIHRoaW5ncyBsaWtlIE1QVENQIHRva2VuIHRyYWNraW5nIGFuZCB0aGUgbWFuYWdpbmcgb2YgdGhlIGBtc2tgIHJlZmVyZW5jZSB3ZXJlbid0IGJlaW5nIGNsb25lZCBhbG9uZyB3aXRoIHRoZSByZXF1ZXN0IHNvY2tldCAoYHJlcXNrYCkuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHRoaXMgYnkgaW50cm9kdWNpbmcgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGFuZCBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCB0byBoYW5kbGUgdGhlIE1QVENQLXNwZWNpZmljIGFzcGVjdHMgb2YgdGhlIGNsb25pbmcuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGl0IGhvbGRzLCBhbmQgdGhlbiBJIGhhdmUgdG8gZGlnIGludG8gYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAgdG8gc2VlIGhvdyBpdHMgY29tcG9uZW50cyBhcmUgaW5pdGlhbGl6ZWQuIEVuc3VyaW5nIHRoZXNlIGNvbXBvbmVudHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGlzIGNyaXRpY2FsIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVncyBkb3duIHRoZSByb2FkLiBUaGlzIHJlcXVpcmVzIGEgbWV0aWN1bG91cyB3YWxrdGhyb3VnaCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBkYXRhIHN0cnVjdHVyZSBhbGlnbm1lbnQgYW5kIGJpdGZpZWxkIGhhbmRsaW5nLiBUaGUgZ29hbCBpcyB0byB2ZXJpZnkgdGhhdCB0aGVzZSBuZXcgZnVuY3Rpb25zIGVuc3VyZSBhbGwgTVBUQ1AtcmVsYXRlZCBkYXRhIGlzIGNvcnJlY3RseSBjb3BpZWQgZHVyaW5nIHRoZSBjbG9uaW5nIG9wZXJhdGlvbiB3aXRob3V0IGxlYWtpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjYxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MzMuMDAxMjE3ODQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzMjk2ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avb3B0aW9ucy5jPTk0Nj1ib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdW5zaWduZWQgaW50ICpzaXplLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy05NDgte1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTQ5OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTUwLVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzcxMz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzE3LXtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNzE4OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MTktXFx0c3RydWN0IHNvY2sgKm5zayA9IHNrX2Nsb25lX2xvY2soc2ssIEdGUF9BVE9NSUMpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9NDk1PXN0cnVjdCBjc3VtX3BzZXVkb19oZWFkZXIge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtNTAxLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUwMjpzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUwMy1cXHRzdHJ1Y3RcXHR0Y3BfcmVxdWVzdF9zb2NrIHNrO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtNTIyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUyMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqXFxubmV0L21wdGNwL3Byb3RvY29sLmgtNTI0LW1wdGNwX3N1YmZsb3dfcnNrKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjUte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUyNjpcXHRyZXR1cm4gKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqKXJzaztcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjctfVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9MTA4NT1pbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTA4Njpib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTA4Ny1cXHRcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNTc9c3RhdGljIGlubGluZSBib29sIHN1YmZsb3dfc2ltdWx0YW5lb3VzX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2NS0jaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM2Njp2b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjg6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2OS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNzI9c3RhdGljIGlubGluZSB2b2lkXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MzpzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzc0LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYikge31cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzc1PXN0YXRpYyBpbmxpbmUgYm9vbFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNzY6bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9Mzg9c3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0zOS17XFxubmV0L21wdGNwL3N1YmZsb3cuYzo0MDpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTQxLVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz01MD12b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy01Mi17XFxubmV0L21wdGNwL3N1YmZsb3cuYzo1MzpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjU0OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNTUtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9OTY9c3RhdGljIGJvb2wgbXB0Y3BfY2FuX2FjY2VwdF9uZXdfc3ViZmxvdyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDQtLyogdmFsaWRhdGUgcmVjZWl2ZWQgdG9rZW4gYW5kIGNyZWF0ZSB0cnVuY2F0ZWQgaG1hYyBhbmQgbm9uY2UgZm9yIFNZTi1BQ0sgKi9cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEwNTpzdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9jcmVhdGVfdGhtYWMoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEwNi17XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTEyMD1zdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyMS17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMjI6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMjMtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ0PXN0YXRpYyB2b2lkIHN1YmZsb3dfaW5pdF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNDUte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTQ2OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTQ3LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xODM9c3RhdGljIGludCBzdWJmbG93X2NoZWNrX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4Ny1cXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrX2xpc3RlbmVyKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4ODpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4OS1cXHRzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCBtcF9vcHQ7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTMwMD1pbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0zMDQtXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChza19saXN0ZW5lcik7XFxubmV0L21wdGNwL3N1YmZsb3cuYzozMDU6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0zMDYtXFx0c3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgbXBfb3B0O1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz03ODM9RVhQT1JUX1NZTUJPTChtcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzg1LS8qIHZhbGlkYXRlIGhtYWMgcmVjZWl2ZWQgaW4gdGhpcmQgQUNLICovXFxubmV0L21wdGNwL3N1YmZsb3cuYzo3ODY6c3RhdGljIGJvb2wgc3ViZmxvd19obWFjX3ZhbGlkKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N1YmZsb3cuYy03ODctXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTgzOT1zdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg0OC1cXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg0OTpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODUwLVxcdHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkIG1wX29wdDtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjA3Nz1zdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwODAte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjA4MTpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwODItXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqb2xkX2N0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KG5ld3NrKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE2OD1zdGF0aWMgaW50IHN1YmZsb3dfb3BzX2luaXQoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnN1YmZsb3dfb3BzKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2OS17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTcwOlxcdHN1YmZsb3dfb3BzLVxcdTAwM2VvYmpfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3MS1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjIxNz12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTgte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxOTpcXHQvKiBJbiBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2ssIHdlIGFzc3VtZSB0aGUgVENQIHJlcXVlc3Qgc29ja1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIyMC1cXHQgKiBzdHJ1Y3R1cmVzIGZvciB2NCBhbmQgdjYgaGF2ZSB0aGUgc2FtZSBzaXplLiBJdCBzaG91bGQgbm90IGNoYW5nZWQgaW5cXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NTk9c3RhdGljIHZvaWQgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZShzdHJ1Y3Qgam9pbl9lbnRyeSAqZW50cnksXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo2MDpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxKVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNjEte1xcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03MC1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjcxOnZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03Mi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTEtICovXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo5Mjpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYz00OD1zdGF0aWMgc3RydWN0IHRva2VuX2J1Y2tldCAqdG9rZW5fYnVja2V0KHUzMiB0b2tlbilcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jLTUzLS8qIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIGhlbGQgKi9cXG5uZXQvbXB0Y3AvdG9rZW4uYzo1NDpzdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcXG5uZXQvbXB0Y3AvdG9rZW4uYy01NS1fX3Rva2VuX2xvb2t1cF9yZXEoc3RydWN0IHRva2VuX2J1Y2tldCAqdCwgdTMyIHRva2VuKVxcbm5ldC9tcHRjcC90b2tlbi5jLTU2LXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzo1NzpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcTtcXG5uZXQvbXB0Y3AvdG9rZW4uYy01OC1cXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqcG9zO1xcbi0tXFxubmV0L21wdGNwL3Rva2VuLmM9MTA4PWludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxubmV0L21wdGNwL3Rva2VuLmMtMTA5LXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoxMTA6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3Rva2VuLmMtMTExLVxcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jPTE5MD12b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYy0xOTIte1xcbm5ldC9tcHRjcC90b2tlbi5jOjE5MzpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoxOTQ6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XFxubmV0L21wdGNwL3Rva2VuLmM6MTk1OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbm5ldC9tcHRjcC90b2tlbi5jLTE5Ni1cXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMjktICovXFxubmV0L21wdGNwL3Rva2VuLmM6MjMwOmJvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxcbm5ldC9tcHRjcC90b2tlbi5jLTIzMS1cXHRcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC90b2tlbi5jLTIzMi17XFxubmV0L21wdGNwL3Rva2VuLmM6MjMzOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbm5ldC9tcHRjcC90b2tlbi5jLTIzNC1cXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYz00MDE9dm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbm5ldC9tcHRjcC90b2tlbi5jLTQwMi17XFxubmV0L21wdGNwL3Rva2VuLmM6NDAzOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC90b2tlbi5jOjQwNDpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcXG5uZXQvbXB0Y3AvdG9rZW4uYy00MDUtXFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xcbi0tXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy01LVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6NjpzdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpidWlsZF9yZXFfc29jayhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy03LXtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjg6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXE7XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy05LVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6MTA6XFx0cmVxID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBzaXplb2Yoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrKSxcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExLVxcdFxcdFxcdCAgICBHRlBfVVNFUik7XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTE4PXN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfcmVxX2Jhc2ljKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTE5LXtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjIwOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxID0gYnVpbGRfcmVxX3NvY2sodGVzdCk7XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy0yMS1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbnVsbF9tc2sgPSBOVUxMO1xcbi0tXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz05ND1zdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2FjY2VwdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy05NS17XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzo5NjpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSA9IGJ1aWxkX3JlcV9zb2NrKHRlc3QpO1xcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtOTctXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IGJ1aWxkX21zayh0ZXN0KTtcXG4tLVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM9MTEzPXN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfZGVzdHJveWVkKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExNC17XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMTU6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEgPSBidWlsZF9yZXFfc29jayh0ZXN0KTtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExNi1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gYnVpbGRfbXNrKHRlc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDozNC43MTQ1MjI0NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2Njg4NDA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrIFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBtYWtlIHN1cmUgSSdtIGNyeXN0YWwgY2xlYXIgb24gdGhlIGRlZmluaXRpb24gb2YgdGhlIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLiBXaGVyZSBiZXR0ZXIgdG8gc3RhcnQgdGhhbiB0aGUgYXV0aG9yaXRhdGl2ZSBzb3VyY2Ug4oCTIHRoZSBoZWFkZXIgZmlsZSwgYG5ldC9tcHRjcC9wcm90b2NvbC5oYCwgcmlnaHQ/IEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzdHJ1Y3R1cmUgdG8gbWFrZSBhbnkgbWVhbmluZ2Z1bCBwcm9ncmVzcyB3aXRoIHRoaXMgYXNwZWN0IG9mIE1QVENQLiBObyBzZW5zZSBpbiB3aW5naW5nIGl0IHdoZW4gdGhlIHByZWNpc2UgZGVmaW5pdGlvbnMgYXJlIHJpZ2h0IGF0IG15IGZpbmdlcnRpcHMuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDozNi41ODE0MDkzMzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdH07XFxuIDUwMTpcXHRcXG4gNTAyOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayB7XFxuIDUwMzpcXHRcXHRzdHJ1Y3RcXHR0Y3BfcmVxdWVzdF9zb2NrIHNrO1xcbiA1MDQ6XFx0XFx0dTE2XFx0bXBfY2FwYWJsZSA6IDEsXFxuIDUwNTpcXHRcXHRcXHRtcF9qb2luIDogMSxcXG4gNTA2OlxcdFxcdFxcdGJhY2t1cCA6IDEsXFxuIDUwNzpcXHRcXHRcXHRyZXF1ZXN0X2JrdXAgOiAxLFxcbiA1MDg6XFx0XFx0XFx0Y3N1bV9yZXFkIDogMSxcXG4gNTA5OlxcdFxcdFxcdGFsbG93X2pvaW5faWQwIDogMTtcXG4gNTEwOlxcdFxcdHU4XFx0bG9jYWxfaWQ7XFxuIDUxMTpcXHRcXHR1OFxcdHJlbW90ZV9pZDtcXG4gNTEyOlxcdFxcdHU2NFxcdGxvY2FsX2tleTtcXG4gNTEzOlxcdFxcdHU2NFxcdGlkc247XFxuIDUxNDpcXHRcXHR1MzJcXHR0b2tlbjtcXG4gNTE1OlxcdFxcdHUzMlxcdHNzbl9vZmZzZXQ7XFxuIDUxNjpcXHRcXHR1NjRcXHR0aG1hYztcXG4gNTE3OlxcdFxcdHUzMlxcdGxvY2FsX25vbmNlO1xcbiA1MTg6XFx0XFx0dTMyXFx0cmVtb3RlX25vbmNlO1xcbiA1MTk6XFx0XFx0c3RydWN0IG1wdGNwX3NvY2tcXHQqbXNrO1xcbiA1MjA6XFx0XFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgdG9rZW5fbm9kZTtcXG4gNTIxOlxcdH07XFxuIDUyMjpcXHRcXG4gNTIzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcXG4gNTI0OlxcdG1wdGNwX3N1YmZsb3dfcnNrKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJzaylcXG4gNTI1OlxcdHtcXG4gNTI2OlxcdFxcdHJldHVybiAoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICopcnNrO1xcbiA1Mjc6XFx0fVxcbiA1Mjg6XFx0XFxuIDUyOTpcXHRzdHJ1Y3QgbXB0Y3BfZGVsZWdhdGVkX2FjdGlvbiB7XFxuIDUzMDpcXHRcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcXG4gNTMxOlxcdFxcdGxvY2FsX2xvY2tfdCBiaF9sb2NrO1xcbiA1MzI6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBoZWFkO1xcbiA1MzM6XFx0fTtcXG4gNTM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDozNi41ODE1MDcwMjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4MTUwNDg1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaW5ldF9yZXFza19jbG9uZWAgUHJvY2VzcyB3aXRoIE1QVENQIFN1YmZsb3dzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGBpbmV0X3JlcXNrX2Nsb25lYCBmdW5jdGlvbiwgZm9jdXNpbmcgb24gdGhlIE1QVENQIHN1YmZsb3cgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXF1ZXN0IHNvY2tldCBpcyBjbG9uZWQgYW5kIGhvdyBNUFRDUC1zcGVjaWZpYyBkYXRhIGlzIGhhbmRsZWQuXG5cbkZpcnN0LCB3aXRoaW4gYGluZXRfcmVxc2tfY2xvbmVgLCB0aGUgY29kZSBhbGxvY2F0ZXMgYSBuZXcgYHJlcXVlc3Rfc29ja2AgKGBucmVxYCkgdXNpbmcgYGttZW1fY2FjaGVfYWxsb2NgLiAgQ3J1Y2lhbGx5LCBpdCB1c2VzIGByZXEtXHUwMDNlcnNrX29wcy1cdTAwM2VzbGFiYCwgd2hpY2gsIGluIHRoZSBNUFRDUCBzdWJmbG93IGNhc2UsIGlzIGNvbmZpZ3VyZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLiBJIHNlZSB0aGF0IGEgYG1lbWNweWAgaXMgcGVyZm9ybWVkLiBJdCBjb3BpZXMgdGhlIGluaXRpYWwgcGFydCBvZiB0aGUgYHN0cnVjdCBzb2NrYCBmaWVsZHMgZnJvbSB0aGUgb3JpZ2luYWwgKGByZXFfc2tgKSB0byB0aGUgbmV3IG9uZSAoYG5yZXFfc2tgKS4gVGhlbiwgaXQgdXNlcyBgdW5zYWZlX21lbWNweWAgdG8gY29weSB0aGUgcmVtYWluaW5nIE1QVENQLXNwZWNpZmljIGZpZWxkcyBiZXlvbmQgdGhlIGBzdHJ1Y3Qgc29ja2Agc3RydWN0dXJlLiAgVGhpcyBpcyBiYXNlZCBvbiB0aGUgc2l6ZSBkZWZpbmVkIGJ5IGByZXEtXHUwMDNlcnNrX29wcy1cdTAwM2VvYmpfc2l6ZWAsIHdoaWNoLCBhcyBJIG5vdGVkLCBlcXVhbHMgYHNpemVvZihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2spYCB3aGVuIE1QVENQIHN1YmZsb3dzIGFyZSBpbnZvbHZlZC4gVGhpcyBtZWFucyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBsYXJnZXIgdGhhbiBgc3RydWN0IHNvY2tgIGFuZCBgdW5zYWZlX21lbWNweWAgY29waWVzIHRoZSByZW1haW5pbmcgcGFydCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5leHQsIHRoZXJlJ3MgYSBjaGVjayB1c2luZyBgcnNrX2lzX21wdGNwKHJlcSlgIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGFuIE1QVENQIHN1YmZsb3cuIElmIGl0IGlzLCB0aGUgY29kZSBjYWxscyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgY3JpdGljYWwgZm9yIGhhbmRsaW5nIHRoZSBNUFRDUC1zcGVjaWZpYyBzdGF0ZS5cblxuSW5zaWRlIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgbG9naWM6IHRoZSBnb2FsIGlzIHRvIGluaXRpYWxpemUgdGhlIE1QVENQLXNwZWNpZmljIHBhcnQgb2YgdGhlIGNsb25lZCByZXF1ZXN0LiBgbXB0Y3Bfc3ViZmxvd19yc2tgIGlzIHVzZWQgdG8gZ2V0IHBvaW50ZXJzIHRvIHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdHVyZXMgZm9yIGJvdGggdGhlIG9yaWdpbmFsIChgcmVxYCkgYW5kIHRoZSBuZXcgKGBuZXdfcmVxYCkgcmVxdWVzdCBzb2Nrcy4gVGhlIGNvZGUgYXBwZWFycyB0byBiZSBlbnN1cmluZyB0aGF0IGl0IGRvZXNuJ3QgdHJ5IHRvIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHNvY2tldCBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGFscmVhZHkgemVyby4gVGhlbiwgaXQgYXR0ZW1wdHMgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGFzc29jaWF0ZWQgYG1wdGNwX3NvY2tgIChgbXNrYCkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb19hY3F1aXJlYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBzaGFyZWQgb3duZXJzaGlwIG9yIGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgcmVxdWVzdCBzb2NrZXQgYW5kIGEgbWFzdGVyIE1QVENQIHNvY2tldC4gIFRoZXJlJ3MgYWxzbyBhIGNoZWNrIHVzaW5nIGBSRUFEX09OQ0VgIHRvIGVuc3VyZSB0aGUgdmFsdWUgb2YgYG1za2AgaGFzbid0IGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24sIGFuZCBpZiBpdCBoYXMsIHRoZSBjb2RlIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgc2V0cyBgbXNrYCB0byBOVUxMLiBGaW5hbGx5LCBpdCBhc3NpZ25zIHRoZSBgbXNrYCAocG9zc2libHkgTlVMTCBpZiBubyB2YWxpZCBzb2NrZXQgZXhpc3RzKSB0byB0aGUgbmV3IHN1YmZsb3cgcmVxdWVzdC4gVGhlbiBpdCBjYWxscyBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCB0byBtb3ZlIHRva2VuLXJlbGF0ZWQgZGF0YSBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRvIHRoZSBuZXcgY2xvbmUuXG5cbmBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgIHNlZW1zIHRvIG1hbmFnZSB0b2tlbiBidWNrZXRzIHJlbGF0ZWQgdG8gZmxvdyBjb250cm9sIG9yIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gSXQgY2hlY2tzIGlmIHRoZSB0b2tlbiBub2RlIGZvciB0aGUgc3ViZmxvdyByZXF1ZXN0IGlzIHVuaGFzaGVkLiBJZiBpdCBpcywgYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAgaXMgY2FsbGVkLCB3aGljaCB3aWxsIGxpa2VseSBoYW5kbGUgaW5pdGlhbGl6aW5nIHRoaXMgdG9rZW4gZGF0YSBzdHJ1Y3R1cmUuIElmIG5vdCwgaXQgcmV0cmlldmVzIHRoZSBgdG9rZW5fYnVja2V0YC4gVGhlIGNvZGUgdGFrZXMgYSBzcGlubG9jayB0byBwcm90ZWN0IHNoYXJlZCBhY2Nlc3MgdG8gdGhlIGJ1Y2tldC4gSW5zaWRlIHRoZSBsb2NrLCBpdCByZS1jaGVja3MgaWYgdGhlIHRva2VuIG5vZGUgaXMgdW5oYXNoZWQuIElmIGl0IHN0aWxsIGlzLCBpdCBjYWxscyBgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0YC4gT3RoZXJ3aXNlLCBpdCBmaW5kcyB0aGUgcG9zaXRpb24gb2YgdGhlIG9sZCBgdG9rZW5gIHVzaW5nIHRoZSBidWNrZXQncyBsb29rdXAuIEl0IHRoZW4gdHJpZXMgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgYHRva2VuYCB3aXRoIHRoZSBuZXcgb25lIHVzaW5nIGBobGlzdF9udWxsc19yZXBsYWNlX2luaXRfcmN1YCwgYnV0IG9ubHkgaWYgdGhlIGZvdW5kIHBvc2l0aW9uIG1hdGNoZXMgdGhlIGV4aXN0aW5nIG9uZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyBgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0YCBhZ2FpbiwgaW1wbHlpbmcgYSBmYWxsYmFjayBpbml0aWFsaXphdGlvbiBpZiB0aGUgcmVwbGFjZW1lbnQgZmFpbHMuXG5cbk5vdyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAgdG8gZnVsbHkgZ3Jhc3AgdGhlIHRva2VuIG1hbmFnZW1lbnQgc2NoZW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE1MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDo0Ny4zOTY1NTgzOThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjQ5MjE2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5oPTEwNzU9dm9pZCBfX2luaXQgbXB0Y3BfdG9rZW5faW5pdCh2b2lkKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMDc2OnN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEwNzcte1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNDQ9c3RhdGljIHZvaWQgc3ViZmxvd19pbml0X3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUyLVxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2sgPSBOVUxMO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTUzOlxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChyZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU0LX1cXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jPTE5MD12b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMDAtXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpIHtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoyMDE6XFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xcbm5ldC9tcHRjcC90b2tlbi5jLTIwMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMDctXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpIHtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoyMDg6XFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xcbm5ldC9tcHRjcC90b2tlbi5jLTIwOS1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L21wdGNwL3Rva2VuLmMtMjE0LVxcdFxcdGVsc2VcXG5uZXQvbXB0Y3AvdG9rZW4uYzoyMTU6XFx0XFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xcbm5ldC9tcHRjcC90b2tlbi5jLTIxNi1cXHR9XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTY9c3RhdGljIHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqYnVpbGRfcmVxX3NvY2soc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy0xMi1cXHRLVU5JVF9FWFBFQ1RfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIHJlcSk7XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMzpcXHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpO1xcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTQtXFx0c29ja19uZXRfc2V0KChzdHJ1Y3Qgc29jayAqKXJlcSwgXFx1MDAyNmluaXRfbmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6NDguODYxNDg0OTgzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzODAyMjQxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAsIGZvY3VzaW5nIG9uIHdoYXQncyBpbXBvcnRhbnQgZm9yIHNvbWVvbmUgd2l0aCB5b3VyIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IuLi4gaW5pdGlhdGluZyB0aGUgdG9rZW4gZXhjaGFuZ2UgZm9yIE1QVENQLCBvYnZpb3VzbHkuIENydWNpYWwgZm9yIGVzdGFibGlzaGluZyB0aGF0IHN1YmZsb3cgd2l0aCB0aGUgYXNzb2NpYXRlZCBjb250cm9sIGluZm9ybWF0aW9uLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCDigJMgd2hhdCBraW5kIG9mIGBzdHJ1Y3RgcyBhcmUgd2UgZGVhbGluZyB3aXRoIGhlcmU/IFByb2JhYmx5IHNvbWUgc29ydCBvZiBjb25uZWN0aW9uIGNvbnRleHQgKGBzdHJ1Y3QgbXB0Y3Bfc29ja2AsIHBlcmhhcHM/KSBhbmQgdG9rZW4tcmVsYXRlZCBkYXRhIChgc3RydWN0IG1wdGNwX3Rva2VuYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5KS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0b2tlbiBpdHNlbGYgaXMgZ2VuZXJhdGVkLCBhbmQgY3J1Y2lhbGx5LCBob3cgaXRzIGluaXRpYWwgdmFsaWRpdHkgcGVyaW9kIGlzIGRldGVybWluZWQuIElzIGl0IGJhc2VkIG9uIGEgdGltZXIsIG9yIGEgbmVnb3RpYXRlZCB2YWx1ZT8gV2hhdCBhcmUgdGhlIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zPyBBcmUgd2UgdXNpbmcgY3J5cHRvZ3JhcGhpYyBwcmltaXRpdmVzIGZvciB0b2tlbiBwcm90ZWN0aW9uPyBLZXkgZXhjaGFuZ2UgaXMgYWx3YXlzIHNvbWV0aGluZyB0byBmb2N1cyBvbi5cblxuVGhlbiwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIGZsb3cuIEhvdyBkb2VzIHRoaXMgcmVxdWVzdCBpbnRlZ3JhdGUgd2l0aCB0aGUgb3ZlcmFsbCBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcHJvY2Vzcz8gSXMgaXQgY2FsbGVkIHN5bmNocm9ub3VzbHkgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAsIG9yIGlzIGl0IHBhcnQgb2YgYSBsYXRlciBuZWdvdGlhdGlvbj8gSG93IGFyZSBlcnJvcnMgaGFuZGxlZD8gSSdtIGFudGljaXBhdGluZyBlcnJvciBjb2RlcyBmb3IgdGhpbmdzIGxpa2UgcmVzb3VyY2UgbGltaXRhdGlvbnMsIHByb3RvY29sIHZpb2xhdGlvbnMsIG9yIHNlY3VyaXR5IGlzc3VlcyBkdXJpbmcgdG9rZW4gZ2VuZXJhdGlvbi4gSSBleHBlY3QgdGhlcmUgdG8gYmUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIFRDUCBzdGFjaywgcHJvYmFibHkgdG8gc2lnbmFsIHRoZSBuZWVkIGZvciBhIHRva2VuIG9yIHRvIHNlbmQgdGhlIGluaXRpYWwgcmVxdWVzdCBvbiB0aGUgY29udHJvbCBmbG93LlxuXG5JIGFsc28gd2FudCB0byBzZWUgaG93IHRoaXMgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXMgdGhlcmUgbG9ja2luZyBpbnZvbHZlZCwgZXNwZWNpYWxseSBpZiBtdWx0aXBsZSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBtaWdodCBiZSBhdHRlbXB0aW5nIHRvIGVzdGFibGlzaCBzdWJmbG93cyBjb25jdXJyZW50bHk/IEknbSBhbHNvIGNvbnNpZGVyaW5nIGhvdyB0aGUgdG9rZW4gaXMgc3Vic2VxdWVudGx5IHVzZWQuIFRoZSBpbml0IHJlcXVlc3QgaXMgb25seSB0aGUgYmVnaW5uaW5nLiBIb3cgYXJlIHN1YnNlcXVlbnQgdG9rZW4gcmVxdWVzdHMgaGFuZGxlZCwgYW5kIGhvdyBkb2VzIHRoZSBzeXN0ZW0gbWFpbnRhaW4gc3RhdGU/IFdoYXQga2luZCBvZiBvcHRpbWl6YXRpb25zIGFyZSBpbXBsZW1lbnRlZCBmb3IgZGlmZmVyZW50IE1QVENQIGNvbm5lY3Rpb24gc2NlbmFyaW9zP1xuXG5GaW5hbGx5LCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9uIHBlcmZvcm1hbmNlPyBUb2tlbiBleGNoYW5nZSBpcyBhIHRyYWRlLW9mZjogb3ZlcmhlYWQgdmVyc3VzIHRoZSBiZW5lZml0cyBvZiBzdWJmbG93IGNyZWF0aW9uIGFuZCBsb2FkIGJhbGFuY2luZy4gSSdkIGxpa2UgdG8gc2VlIGlmIGFueSBvcHRpbWl6YXRpb25zIGFyZSBpbiBwbGFjZSAoZS5nLiwgY2FjaGluZywgcHJlLWNhbGN1bGF0aW9uLCBldGMuKS4gQW5kIG9mIGNvdXJzZSwgSSdtIGtlZW4gdG8gZXZhbHVhdGUgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHJvYnVzdG5lc3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBTbywgbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgaXQgaXMgd29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDo1Mi4yNDE3MTEyMjhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3NCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3NDpcXHRcXG4xMDc1OlxcdHZvaWQgX19pbml0IG1wdGNwX3Rva2VuX2luaXQodm9pZCk7XFxuMTA3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4xMDc3OlxcdHtcXG4xMDc4OlxcdFxcdG1wdGNwX3N1YmZsb3dfcnNrKHJlcSktXFx1MDAzZXRva2VuX25vZGUucHByZXYgPSBOVUxMO1xcbjEwNzk6XFx0fVxcbjEwODA6XFx0XFxuMTA4MTpcXHRpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG4xMDgyOlxcdHZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4xMDgzOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpO1xcbjEwODQ6XFx0dm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG4xMDg1OlxcdGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcXG4xMDg2OlxcdGJvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcXG4xMDg3OlxcdFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbjEwODg6XFx0Ym9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6NTIuMjQxODAxODE4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNTQ2MTE2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBNUFRDUCBTb2NrZXQgQ2xvbmluZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBtcHRjcF9za19jbG9uZV9kZXN0cm95YCBmdW5jdGlvbi4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaXMgc29saWQgdGhlcmUsIGVzcGVjaWFsbHkgd2l0aCByZWdhcmQgdG8gYW55IHBvdGVudGlhbCBlcnJvciBzY2VuYXJpb3MuIEFuZCB0aGVuIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgYG1wdGNwX3NrX2Nsb25lX2luaXQoKWAuIFRpbWUgdG8gZ28gZGlnZ2luZyBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGFuZCBzZWUgaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCB0byBzZWUgaWYgdGhlcmUgaXMgYW4gYXJlYSBvZiBwb3NzaWJsZSBjb25jZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU3NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6NTUuMzk2NDE1OTQ4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzEwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzEwOlxcdFxcdGluZXRfY3NrX2Rlc3Ryb3lfc29jayhuc2spO1xcbjM3MTE6XFx0fVxcbjM3MTI6XFx0XFxuMzcxMzpcXHRzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuMzcxNDpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcXG4zNzE1OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc29jayAqc3NrLFxcbjM3MTY6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4zNzE3OlxcdHtcXG4zNzE4OlxcdFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbjM3MTk6XFx0XFx0c3RydWN0IHNvY2sgKm5zayA9IHNrX2Nsb25lX2xvY2soc2ssIEdGUF9BVE9NSUMpO1xcbjM3MjA6XFx0XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcXG4zNzIxOlxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2s7XFxuMzcyMjpcXHRcXG4zNzIzOlxcdFxcdGlmICghbnNrKVxcbjM3MjQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMzcyNTpcXHRcXG4zNzI2OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbjM3Mjc6XFx0XFx0aWYgKG5zay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbjM3Mjg6XFx0XFx0XFx0aW5ldF9zayhuc2spLVxcdTAwM2VwaW5ldDYgPSBtcHRjcF9pbmV0Nl9zayhuc2spO1xcbjM3Mjk6XFx0I2VuZGlmXFxuMzczMDpcXHRcXG4zNzMxOlxcdFxcdF9fbXB0Y3BfaW5pdF9zb2NrKG5zayk7XFxuMzczMjpcXHRcXG4zNzMzOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbjM3MzQ6XFx0XFx0aWYgKG5zay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbjM3MzU6XFx0XFx0XFx0bXB0Y3BfY29weV9pcDZfb3B0aW9ucyhuc2ssIHNrKTtcXG4zNzM2OlxcdFxcdGVsc2VcXG4zNzM3OlxcdCNlbmRpZlxcbjM3Mzg6XFx0XFx0XFx0bXB0Y3BfY29weV9pcF9vcHRpb25zKG5zaywgc2spO1xcbjM3Mzk6XFx0XFxuMzc0MDpcXHRcXHRtc2sgPSBtcHRjcF9zayhuc2spO1xcbjM3NDE6XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWxvY2FsX2tleSwgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2tleSk7XFxuMzc0MjpcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNldG9rZW4sIHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuMzc0MzpcXHRcXHRtc2stXFx1MDAzZWluX2FjY2VwdF9xdWV1ZSA9IDE7XFxuMzc0NDpcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlZnVsbHlfZXN0YWJsaXNoZWQsIGZhbHNlKTtcXG4zNzQ1OlxcdFxcdGlmIChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfQ1NVTVJFUUQpXFxuMzc0NjpcXHRcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlY3N1bV9lbmFibGVkLCB0cnVlKTtcXG4zNzQ3OlxcdFxcbjM3NDg6XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZXdyaXRlX3NlcSwgc3ViZmxvd19yZXEtXFx1MDAzZWlkc24gKyAxKTtcXG4zNzQ5OlxcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2VzbmRfbnh0LCBtc2stXFx1MDAzZXdyaXRlX3NlcSk7XFxuMzc1MDpcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlc25kX3VuYSwgbXNrLVxcdTAwM2V3cml0ZV9zZXEpO1xcbjM3NTE6XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZXduZF9lbmQsIG1zay1cXHUwMDNlc25kX254dCArIHRjcF9zayhzc2spLVxcdTAwM2VzbmRfd25kKTtcXG4zNzUyOlxcdFxcdG1zay1cXHUwMDNlc2V0c29ja29wdF9zZXEgPSBtcHRjcF9zayhzayktXFx1MDAzZXNldHNvY2tvcHRfc2VxO1xcbjM3NTM6XFx0XFx0bXB0Y3BfaW5pdF9zY2hlZChtc2ssIG1wdGNwX3NrKHNrKS1cXHUwMDNlc2NoZWQpO1xcbjM3NTQ6XFx0XFxuMzc1NTpcXHRcXHQvKiBwYXNzaXZlIG1zayBpcyBjcmVhdGVkIGFmdGVyIHRoZSBmaXJzdC9NUEMgc3ViZmxvdyAqL1xcbjM3NTY6XFx0XFx0bXNrLVxcdTAwM2VzdWJmbG93X2lkID0gMjtcXG4zNzU3OlxcdFxcbjM3NTg6XFx0XFx0c29ja19yZXNldF9mbGFnKG5zaywgU09DS19SQ1VfRlJFRSk7XFxuMzc1OTpcXHRcXHRzZWN1cml0eV9pbmV0X2Nza19jbG9uZShuc2ssIHJlcSk7XFxuMzc2MDpcXHRcXG4zNzYxOlxcdFxcdC8qIHRoaXMgY2FuJ3QgcmFjZSB3aXRoIG1wdGNwX2Nsb3NlKCksIGFzIHRoZSBtc2sgaXNcXG4zNzYyOlxcdFxcdCAqIG5vdCB5ZXQgZXhwb3N0ZWQgdG8gdXNlci1zcGFjZVxcbjM3NjM6XFx0XFx0ICovXFxuMzc2NDpcXHRcXHRtcHRjcF9zZXRfc3RhdGUobnNrLCBUQ1BfRVNUQUJMSVNIRUQpO1xcbjM3NjU6XFx0XFxuMzc2NjpcXHRcXHQvKiBUaGUgbXNrIG1haW50YWluIGEgcmVmIHRvIGVhY2ggc3ViZmxvdyBpbiB0aGUgY29ubmVjdGlvbnMgbGlzdCAqL1xcbjM3Njc6XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWZpcnN0LCBzc2spO1xcbjM3Njg6XFx0XFx0c3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNzayk7XFxuMzc2OTpcXHRcXHRsaXN0X2FkZChcXHUwMDI2c3ViZmxvdy1cXHUwMDNlbm9kZSwgXFx1MDAyNm1zay1cXHUwMDNlY29ubl9saXN0KTtcXG4zNzcwOlxcdFxcdHNvY2tfaG9sZChzc2spO1xcbjM3NzE6XFx0XFxuMzc3MjpcXHRcXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcXG4zNzczOlxcdFxcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxcbjM3NzQ6XFx0XFx0ICovXFxuMzc3NTpcXHRcXHRtcHRjcF9jb3B5X2luYWRkcnMobnNrLCBzc2spO1xcbjM3NzY6XFx0XFxuMzc3NzpcXHRcXHRtcHRjcF9yY3Zfc3BhY2VfaW5pdChtc2ssIHNzayk7XFxuMzc3ODpcXHRcXHRtc2stXFx1MDAzZXJjdnFfc3BhY2UudGltZSA9IG1wdGNwX3N0YW1wKCk7XFxuMzc3OTpcXHRcXG4zNzgwOlxcdFxcdGlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7XFxuMzc4MTpcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzdWJmbG93LVxcdTAwM2Vub2RlKTtcXG4zNzgyOlxcdFxcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2VmaXJzdCwgTlVMTCk7XFxuMzc4MzpcXHRcXHRcXHRzb2NrX3B1dChzc2spO1xcbjM3ODQ6XFx0XFx0XFx0bXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShuc2spO1xcbjM3ODU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMzc4NjpcXHRcXHR9XFxuMzc4NzpcXHRcXG4zNzg4OlxcdFxcdGlmIChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSylcXG4zNzg5OlxcdFxcdFxcdF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChtc2ssIHN1YmZsb3csIG1wX29wdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjU1LjM5NjYwNzk5OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTc1MjI4ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE1QVENQIFJlcXVlc3QgU29ja2V0IENsb25pbmcgRHVyaW5nIFJldXNlcG9ydCBNaWdyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgS01TQU4gb3IgaWYgS0FTQU4gaXMgc3VmZmljaWVudC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyB0aGUgY2xvbmluZyBvZiBNUFRDUCByZXF1ZXN0IHNvY2tldHMgZHVyaW5nIGEgcmV1c2Vwb3J0IG1pZ3JhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1YmZsb3dzLiBUaGUga2V5IG9wZXJhdGlvbnMgaW52b2x2ZSB0cmFuc2ZlcnJpbmcgTXVsdGlQYXRoIFRDUCAoTVBUQ1ApIHNwZWNpZmljIGRhdGEsIHByaW1hcmlseSBgbXNrYCByZWZlcmVuY2VzIGFuZCB0b2tlbiB0YWJsZSBlbnRyaWVzLCBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHNvY2tldCB0byBpdHMgY2xvbmUuIEZhaWx1cmUgc2NlbmFyaW9zIHdpdGhpbiBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBhcmUgYWxzbyBncmFjZWZ1bGx5IGhhbmRsZWQuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0byBsb29rIGZvciBwb3RlbnRpYWwgS01TQU4gdHJpZ2dlcnMuIFdlIGtub3cgS01TQU4gY29uY2VybnMgaXRzZWxmIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGxlYWsgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZSBvciB0aGF0IGFmZmVjdCBjb250cm9sIGZsb3cuIExvb2tpbmcgYXQgdGhlIGNyaXRlcmlhLCBJJ20gY2hlY2tpbmcgZm9yIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgdW5pbml0aWFsaXplZCByZWFkcywgYW5kIGFueSBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhlIGNvZGUgY2hhbmdlcyBoZXJlIGludm9sdmUgYGluZXRfcmVxc2tfY2xvbmUoKWAsIHdoaWNoIGNhbGxzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKClgIHRvIGhhbmRsZSB0aGUgTVBUQ1Agc3BlY2lmaWMgc3R1ZmYuIFdpdGhpbiB0aGF0LCB3ZSBoYXZlIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QoKWAgYW5kIGBtcHRjcF90b2tlbl9hY2NlcHQoKWAsIHdpdGggcHJvcGVyIGxvY2tpbmcgYW5kIGxpc3QgbWFuaXB1bGF0aW9uLiBFcnJvciBoYW5kbGluZyBpbiBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBpcyBhbHNvIGluY2x1ZGVkLiBUaGVyZSdzIGFsc28gYG1wdGNwX3NrX2Nsb25lX2luaXQoKWAgaW4gY2FzZSBvZiBmYWlsdXJlLlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgS01TQU4gY29uY2VybnM6XG5cbiogICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzPyoqIE5vLiBUaGUgY2hhbmdlcyBkb24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgbGVhdmUgZmllbGRzIHVuaW5pdGlhbGl6ZWQgYW5kIHRoZW4gZXhwb3NlIHRoZW0gdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBicmFuY2hpbmcuIGBpbmV0X3JlcXNrX2Nsb25lKClgIGlzIGFsbG9jYXRpbmcgYSBgbnJlcWAgZnJvbSB0aGUgc2xhYiBjYWNoZSwgYW5kIHRoZW4gY29weWluZyB0aGUgY29udGVudHMgZnJvbSBhIHNvdXJjZSBgcmVxYCB1c2luZyBgbWVtY3B5YC4gVGhlIG5ldyBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCBpbml0aWFsaXplcyB0aGUgYG5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlYC4gVGhlIGFsbG9jYXRpb25zIGFyZSBlaXRoZXIgZnVsbHkgaW5pdGlhbGl6ZWQgb3IgY29waWVkIGZyb20ga25vd24tZ29vZCBkYXRhLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZC5cbiogICAqKkluZm8gTGVha3M/KiogTm8uIE5vdGhpbmcgbmV3IGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjcmVhdGVkIG9uIHRoZSBzdGFjaywgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuKiAgICoqVW5pbml0aWFsaXplZCBCdWZmZXIgUmVhZHM/KiogTm8uIFRoZSBjb2RlIGlzbid0IHJlYWRpbmcgZnJvbSBhbnkgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBwb3RlbnRpYWxseSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRocm91Z2ggaW5jb3JyZWN0IGJvdW5kcyBjaGVja3MuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgdGhlIHBvdGVudGlhbCByaXNrcyBsaWUgaW4gY29uY3VycmVuY3kgaXNzdWVzOiBSQ1UsIHJlZmNvdW50aW5nLCBsb2NraW5nLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGVycm9yIGhhbmRsaW5nLiBIb3dldmVyLCB0aGVzZSBhcmUgcHJlY2lzZWx5IHRoZSBraW5kcyBvZiBidWdzIHRoYXQgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBzdWNoIGFzIHJlZmNvdW50IGNoZWNrZXJzLCBQUk9WRVxcX0xPQ0tJTkcsIGFyZSBidWlsdCB0byBjYXRjaC5cblxuTXkgY29uY2x1c2lvbiBpcyBjbGVhcjogKipLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuKiogVGhpcyBwYXRjaCBwcmltYXJpbHkgZGVhbHMgd2l0aCBjb25jdXJyZW5jeSBjb25jZXJucyByZWxhdGVkIHRvIHNvY2tldCBjbG9uaW5nLCBkYXRhIHRyYW5zZmVyLCBhbmQgcmVmY291bnRpbmcuIFRoZXNlIGlzc3VlcyBhcmUgdGhvcm91Z2hseSBhZGRyZXNzZWQgYnkgdGhlIGV4aXN0aW5nIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVmY291bnQgY2hlY2tpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBhbHRlciBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIFdlJ3JlIHNhZmUgd2l0aCBLQVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOTMsIk91dHB1dFRva2VucyI6MTkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTE6MDIuOTcxODM4OTI4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBNUFRDUCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGR1cmluZyByZXVzZXBvcnQgc29ja2V0IG1pZ3JhdGlvbiBieSBzYWZlbHkgaGFuZGxpbmcgbXNrIHNvY2tldCByZWZjb3VudHMsIG1vdmluZyB0b2tlbiBoYXNoIHRhYmxlIGVudHJpZXMgKG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCksIGFuZCBwcm9wZXJseSBjbGVhbmluZyB1cCBhbmQgZmFsbGluZyBiYWNrIHdoZW4gbXB0Y3BfdG9rZW5fYWNjZXB0IGZhaWxzLlxcblxcblRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb25jdXJyZW5jeSwgUkNVIHNhZmV0eSwgc29ja2V0IHJlZmNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlL2Rlc3RydWN0aW9uIHN0YXRlIG1hbmFnZW1lbnQuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIGFyZWEgYXJlIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpc3N1ZXMsIG9yIGxvY2tpbmcvZGVhZGxvY2sgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBwYWRkaW5nL2luZm8tbGVha3MsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgZHVyaW5nIHJldXNlcG9ydCBzb2NrZXQgbWlncmF0aW9uIGJ5IHNhZmVseSBoYW5kbGluZyBtc2sgc29ja2V0IHJlZmNvdW50cywgbW92aW5nIHRva2VuIGhhc2ggdGFibGUgZW50cmllcyAobXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KSwgYW5kIHByb3Blcmx5IGNsZWFuaW5nIHVwIGFuZCBmYWxsaW5nIGJhY2sgd2hlbiBtcHRjcF90b2tlbl9hY2NlcHQgZmFpbHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbmN1cnJlbmN5LCBSQ1Ugc2FmZXR5LCBzb2NrZXQgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUvZGVzdHJ1Y3Rpb24gc3RhdGUgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgYXJlYSBhcmUgdXNlLWFmdGVyLWZyZWUsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3IgbG9ja2luZy9kZWFkbG9jayBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBtZW1vcnkgY29weWluZyB0byB1c2Vyc3BhY2UsIHBhZGRpbmcvaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow65qg2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 20:24:59 +0000 UTC FinishedAt: 2026-09-08 21:11:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP" ], "series_id": "732d3f57-5aa4-48c9-816c-ced88c98958a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_subflow_reqsk_clone", "mptcp_token_move_request", "mptcp_token_accept", "mptcp_token_destroy_request", "mptcp_sk_clone_init", "subflow_syn_recv_sock", "inet_reqsk_clone" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fYWNjZXB0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDssCiAgICAmIzM0O3N1YmZsb3dfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDtpbmV0X3JlcXNrX2Nsb25lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBkdXJpbmcgcmV1c2Vwb3J0IHNvY2tldCBtaWdyYXRpb24gYnkgc2FmZWx5IGhhbmRsaW5nIG1zayBzb2NrZXQgcmVmY291bnRzLCBtb3ZpbmcgdG9rZW4gaGFzaCB0YWJsZSBlbnRyaWVzIChtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QpLCBhbmQgcHJvcGVybHkgY2xlYW5pbmcgdXAgYW5kIGZhbGxpbmcgYmFjayB3aGVuIG1wdGNwX3Rva2VuX2FjY2VwdCBmYWlscy5cblxuVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbmN1cnJlbmN5LCBSQ1Ugc2FmZXR5LCBzb2NrZXQgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUvZGVzdHJ1Y3Rpb24gc3RhdGUgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgYXJlYSBhcmUgdXNlLWFmdGVyLWZyZWUsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3IgbG9ja2luZy9kZWFkbG9jayBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBtZW1vcnkgY29weWluZyB0byB1c2Vyc3BhY2UsIHBhZGRpbmcvaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZywgdG9rZW4gaGFzaCBtYW5hZ2VtZW50LCBhbmQgc29ja2V0IGNsb25lIGVycm9yIGhhbmRsaW5nIGR1cmluZyBUQ1AvTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LiBUaGlzIGxvZ2ljIGludm9sdmVzIHN1YnRsZSBSQ1UsIHJlZmNvdW50aW5nLCBhbmQgbG9ja2luZyBzZW1hbnRpY3MgdGhhdCBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBzb2NrZXQgc3lzY2FsbHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGYzMDBmZTc4Mjc3MWEyYTA4YmZhMzFkOWM1YmFiZmNmYWQwMTE2ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjE6MDk6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbXB0Y3AuaCBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbmluZGV4IDQ4NWQ1NWI2NmVhNjcuLmFkNzAwNWI1NzRiYjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5AQCAtMjE5LDYgJiM0MzsyMTksOSBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbiBcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiBcdFx0XHRcdFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcbiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2suICovXG4mIzQzO3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDUsNiAmIzQzOzMwOCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIGFuIFJDVSByZWFkLXNpZGUgbG9jay4gKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBfX2JlMzIgbXB0Y3BfcmVzZXRfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpICB7IHJldHVybiBodG9ubCgwdSk7IH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfYWN0aXZlX2RldGVjdF9ibGFja2hvbGUoc3RydWN0IHNvY2sgKnNrLCBib29sIGV4cGlyZWQpIHsgfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5pbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuQEAgLTIxLDYgJiM0MzsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3BfZWNuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L21wdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4gXG5AQCAtOTYxLDYgJiM0Mzs5NjIsOSBAQCBzdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0Y3Bfc2sobnJlcS1cdTAwM2VzayktXHUwMDNlZmFzdG9wZW5fcnNrLCBucmVxKTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocnNrX2lzX21wdGNwKHJlcSkpXG4mIzQzO1x0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG4mIzQzO1xuIFx0cmV0dXJuIG5yZXE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbmluZGV4IGUxZjA4ZjcxY2RiMTYuLjMwMDY3ZjJhN2NhOGYgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmNcbkBAIC0zNjkyLDYgJiM0MzszNjkyLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShzdHJ1Y3Qgc29jayAqbnNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKG5zayk7XG4mIzQzO1xuJiM0MztcdG1wdGNwX3JlbGVhc2Vfc2NoZWQobXNrKTtcbiYjNDM7XHRtcHRjcF9zZXRfc3RhdGUobnNrLCBUQ1BfQ0xPU0UpO1xuJiM0MztcdC8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWFcbiYjNDM7XHQgKiB0Y3Bfc2soKSwgYnV0IG5zayBpcyBhbiBNUFRDUCBtYXN0ZXIgc29ja2V0OyBrZWVwIHRoZSBpbmV0LWxldmVsXG4mIzQzO1x0ICogZGVzdHJveSBwcmVwYXJhdGlvbiBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGJoX3VubG9ja19zb2NrKG5zayk7XG4mIzQzO1x0c29ja19wdXQobnNrKTtcbiYjNDM7XHRzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTtcbiYjNDM7XHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xuJiM0MztcdGluZXRfc2sobnNrKS1cdTAwM2VpbmV0X251bSA9IDA7XG4mIzQzO1x0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsXG4gXHRcdFx0XHQgc3RydWN0IHNvY2sgKnNzayxcbkBAIC0zNzUxLDExICYjNDM7Mzc2OSw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdGxpc3RfYWRkKFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSwgXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRzb2NrX2hvbGQoc3NrKTtcbiBcbi1cdC8qIG5ldyBtcGMgc3ViZmxvdyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG5ld2x5XG4tXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxuLVx0ICovXG4tXHRtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zayk7XG4tXG4gXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbiBcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxuIFx0ICovXG5AQCAtMzc2NCw2ICYjNDM7Mzc3NywxNCBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHRtcHRjcF9yY3Zfc3BhY2VfaW5pdChtc2ssIHNzayk7XG4gXHRtc2stXHUwMDNlcmN2cV9zcGFjZS50aW1lID0gbXB0Y3Bfc3RhbXAoKTtcbiBcbiYjNDM7XHRpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUpO1xuJiM0MztcdFx0V1JJVEVfT05DRShtc2stXHUwMDNlZmlyc3QsIE5VTEwpO1xuJiM0MztcdFx0c29ja19wdXQoc3NrKTtcbiYjNDM7XHRcdG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxuIFx0XHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xuIFx0YmhfdW5sb2NrX3NvY2sobnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCA4N2NjYjg0ZTk5MjdjLi4yNDc0NDljYzJmZWI5IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtMTA3OSw5ICYjNDM7MTA3OSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiB9XG4gXG4gaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XG4mIzQzO3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XG4gdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7XG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxuJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4gXHRcdFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4gYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKTtcbiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5pbmRleCBhZjgxYWQ1ZTY5OWQxLi5kMmNkMTJmYzAzNDIxIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuQEAgLTQ3LDYgJiM0Mzs0Nyw0MSBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcdG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChyZXEpO1xuIH1cbiBcbiYjNDM7dm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrO1xuJiM0MztcbiYjNDM7XHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcbiYjNDM7XHRSQ1VfTE9DS0RFUF9XQVJOKCFyY3VfcmVhZF9sb2NrX2FueV9oZWxkKCksXG4mIzQzO1x0XHRcdCBcJiMzNDtNUFRDUCByZXFzayBjbG9uZSBjYWxsZWQgd2l0aG91dCBSQ1VcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBBIG5vbi1OVUxMIC1cdTAwM2Vtc2sgbWVhbnMgdGhlIHJlcXVlc3Qgb3ducyBvbmUgcmVmZXJlbmNlLiAgVGhlIGNsb25lXG4mIzQzO1x0ICogY29waWVkIG9ubHkgdGhlIHBvaW50ZXIsIHdoaWxlIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGNhbiBjb25jdXJyZW50bHlcbiYjNDM7XHQgKiB0cmFuc2ZlciBpdHMgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZC4gIEFjcXVpcmUgYSByZWZlcmVuY2UgZm9yIHRoZVxuJiM0MztcdCAqIGNsb25lLCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBvcmlnaW5hbCByZXF1ZXN0IHN0aWxsIG93bnMgdGhlIHNhbWUgbXNrLlxuJiM0MztcdCAqIE1QVENQIHNvY2tldHMgdXNlIFNMQUJfVFlQRVNBRkVfQllfUkNVIGFuZCBhbGwgY2xvbmUgY2FsbGVycyBydW4gaW5cbiYjNDM7XHQgKiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIGtlZXBpbmcgdGhlIG1lbW9yeSBzdGFibGUgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtc2sgPSBSRUFEX09OQ0Uoc3ViZmxvd19yZXEtXHUwMDNlbXNrKTtcbiYjNDM7XHRpZiAobXNrKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm9fYWNxdWlyZShcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKSB7XG4mIzQzO1x0XHRcdG1zayA9IE5VTEw7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKFJFQURfT05DRShzdWJmbG93X3JlcS1cdTAwM2Vtc2spICE9IG1zaykge1xuJiM0MztcdFx0XHRzb2NrX3B1dChzayk7XG4mIzQzO1x0XHRcdG1zayA9IE5VTEw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXdfc3ViZmxvd19yZXEtXHUwMDNlbXNrID0gbXNrO1xuJiM0MztcbiYjNDM7XHRtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QocmVxLCBuZXdfcmVxKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzdWJmbG93X2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLCB1MzIgbm9uY2UxLCB1MzIgbm9uY2UyLFxuIFx0XHRcdFx0ICB2b2lkICpobWFjKVxuIHtcbkBAIC04ODUsOCAmIzQzOzkyMCwxMCBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gXHRcdGlmIChjdHgtXHUwMDNlbXBfY2FwYWJsZSkge1xuIFx0XHRcdGN0eC1cdTAwM2Vjb25uID0gbXB0Y3Bfc2tfY2xvbmVfaW5pdChsaXN0ZW5lci1cdTAwM2Vjb25uLCBcdTAwMjZtcF9vcHQsIGNoaWxkLCByZXEpO1xuLVx0XHRcdGlmICghY3R4LVx1MDAzZWNvbm4pXG4mIzQzO1x0XHRcdGlmICghY3R4LVx1MDAzZWNvbm4pIHtcbiYjNDM7XHRcdFx0XHRmYWxsYmFjayA9IHRydWU7XG4gXHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuJiM0MztcdFx0XHR9XG4gXG4gXHRcdFx0Y3R4LVx1MDAzZXN1YmZsb3dfaWQgPSAxO1xuIFx0XHRcdG93bmVyID0gbXB0Y3Bfc2soY3R4LVx1MDAzZWNvbm4pO1xuQEAgLTkyMyw3ICYjNDM7OTYwLDcgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdH1cbiBcbiBcdFx0XHQvKiBtb3ZlIHRoZSBtc2sgcmVmZXJlbmNlIG93bmVyc2hpcCB0byB0aGUgc3ViZmxvdyAqL1xuLVx0XHRcdHN1YmZsb3dfcmVxLVx1MDAzZW1zayA9IE5VTEw7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0Uoc3ViZmxvd19yZXEtXHUwMDNlbXNrLCBOVUxMKTtcbiBcdFx0XHRjdHgtXHUwMDNlY29ubiA9IChzdHJ1Y3Qgc29jayAqKW93bmVyO1xuIFxuIFx0XHRcdGlmIChzdWJmbG93X3VzZV9kaWZmZXJlbnRfc3BvcnQob3duZXIsIHNrKSkge1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmNcbmluZGV4IGYxYTUwZjM2N2FkZDguLmUwZjI4MjNmOTJlZmIgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuLmNcbkBAIC0xODAsNiAmIzQzOzE4MCw0MyBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCAtIG1vdmUgcmVxdWVzdCB0b2tlbiBvd25lcnNoaXAgdG8gYSBjbG9uZVxuJiM0MzsgKiBAcmVxOiBvcmlnaW5hbCByZXF1ZXN0IHNvY2tldFxuJiM0MzsgKiBAbmV3X3JlcTogY2xvbmVkIHJlcXVlc3Qgc29ja2V0XG4mIzQzOyAqXG4mIzQzOyAqIE1vdmUgdGhlIHRva2VuIGhhc2ggZW50cnkgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdCB0byBpdHMgY2xvbmUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTtcbiYjNDM7XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiYjNDM7XHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4mIzQzO1xuJiM0MztcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuJiM0MztcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbiYjNDM7XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuJiM0MztcdFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcbiYjNDM7XHRcdFx0aGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdShcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgJiM0MzsyMjQsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gICpcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cbiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuJiM0MztcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXG4tXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQocmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi9cbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiYjNDM7XHRpZiAocG9zICE9IHJlcSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0X19za19udWxsc19hZGRfbm9kZV9yY3UoKHN0cnVjdCBzb2NrICopbXNrLCBcdTAwMjZidWNrZXQtXHUwMDNlbXNrX2NoYWluKTtcbiYjNDM7XHRyZXQgPSB0cnVlO1xuJiM0MztcbiYjNDM7dW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgJiM0Mzs0MDQsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4gXG4tXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4gXHRwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gc3ViZmxvd19yZXEpKSB7XG4mIzQzO1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG5pbmRleCA0ZmMzOWZhMmUyNjJkLi5iZTlhY2NlOGE1NjczIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuQEAgLTk5LDcgJiM0Mzs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFx1MDAyNmluaXRfbmV0LCBtc2stXHUwMDNldG9rZW4pKTtcbiBcbiBcdC8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi9cbkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfZGVzdHJveWVkKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuJiM0MztcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2FjY2VwdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2tfY2xvbmVfaW5pdCYjMzQ7LAogICAgJiMzNDtzdWJmbG93X3N5bl9yZWN2X3NvY2smIzM0OywKICAgICYjMzQ7aW5ldF9yZXFza19jbG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcsIHRva2VuIGhhc2ggbWFuYWdlbWVudCwgYW5kIHNvY2tldCBjbG9uZSBlcnJvciBoYW5kbGluZyBkdXJpbmcgVENQL01QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gVGhpcyBsb2dpYyBpbnZvbHZlcyBzdWJ0bGUgUkNVLCByZWZjb3VudGluZywgYW5kIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc29ja2V0IHN5c2NhbGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRmMzAwZmU3ODI3NzFhMmEwOGJmYTMxZDljNWJhYmZjZmFkMDExNmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDIxOjA5OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbXB0Y3AuaCBiL2luY2x1ZGUvbmV0L21wdGNwLmgKaW5kZXggNDg1ZDU1YjY2ZWE2Ny4uYWQ3MDA1YjU3NGJiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tcHRjcC5oCkBAIC0yMTksNiAmIzQzOzIxOSw5IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsCiAJCQkJCSAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsCiAJCQkJCSAgICAgICBib29sIGF0dGFjaF9saXN0ZW5lcik7CiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2suICovCiYjNDM7dm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKJiM0MzsJCQkgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7CiAKIF9fYmUzMiBtcHRjcF9nZXRfcmVzZXRfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOwogCkBAIC0zMDUsNiAmIzQzOzMwOCwxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlcwogCXJldHVybiBOVUxMOwogfQogCiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2suICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCQkJICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfYWN0aXZlX2RldGVjdF9ibGFja2hvbGUoc3RydWN0IHNvY2sgKnNrLCBib29sIGV4cGlyZWQpIHsgfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggNjI1NzQ1OWJjZWUyNC4uODk2ZjQ3MmRjYmEyOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC0yMSw2ICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O25ldC94ZnJtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y3BfZWNuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9tcHRjcC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrX3JldXNlcG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9hZGRyY29uZi5oJmd0OwogCkBAIC05NjEsNiAmIzQzOzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLSZndDtzayktJmd0O2Zhc3RvcGVuX3JzaywgbnJlcSk7CiAJfQogCiYjNDM7CWlmIChyc2tfaXNfbXB0Y3AocmVxKSkKJiM0MzsJCW1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUocmVxLCBucmVxKTsKJiM0MzsKIAlyZXR1cm4gbnJlcTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwppbmRleCBlMWYwOGY3MWNkYjE2Li4zMDA2N2YyYTdjYThmIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuYwpAQCAtMzY5Miw2ICYjNDM7MzY5MiwyNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBtcHRjcF9za19jbG9uZV9kZXN0cm95KHN0cnVjdCBzb2NrICpuc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2sobnNrKTsKJiM0MzsKJiM0MzsJbXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spOwomIzQzOwltcHRjcF9zZXRfc3RhdGUobnNrLCBUQ1BfQ0xPU0UpOwomIzQzOwkvKiBpbmV0X2Nza19wcmVwYXJlX2ZvcmNlZF9jbG9zZSgpIGNsZWFycyBUQ1Agc29ja19vcHMgc3RhdGUgdmlhCiYjNDM7CSAqIHRjcF9zaygpLCBidXQgbnNrIGlzIGFuIE1QVENQIG1hc3RlciBzb2NrZXQ7IGtlZXAgdGhlIGluZXQtbGV2ZWwKJiM0MzsJICogZGVzdHJveSBwcmVwYXJhdGlvbiBoZXJlLgomIzQzOwkgKi8KJiM0MzsJYmhfdW5sb2NrX3NvY2sobnNrKTsKJiM0MzsJc29ja19wdXQobnNrKTsKJiM0MzsJc29ja19zZXRfZmxhZyhuc2ssIFNPQ0tfREVBRCk7CiYjNDM7CXRjcF9vcnBoYW5fY291bnRfaW5jKCk7CiYjNDM7CWluZXRfc2sobnNrKS0mZ3Q7aW5ldF9udW0gPSAwOwomIzQzOwlpbmV0X2Nza19kZXN0cm95X3NvY2sobnNrKTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsCiAJCQkJIHN0cnVjdCBzb2NrICpzc2ssCkBAIC0zNzUxLDExICYjNDM7Mzc2OSw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAlsaXN0X2FkZCgmYW1wO3N1YmZsb3ctJmd0O25vZGUsICZhbXA7bXNrLSZndDtjb25uX2xpc3QpOwogCXNvY2tfaG9sZChzc2spOwogCi0JLyogbmV3IG1wYyBzdWJmbG93IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgbmV3bHkKLQkgKiBjcmVhdGVkIG1wdGNwIHNvY2tldAotCSAqLwotCW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKTsKLQogCS8qIHNldCBtc2sgYWRkcmVzc2VzIGVhcmx5IHRvIGVuc3VyZSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoKQogCSAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YQogCSAqLwpAQCAtMzc2NCw2ICYjNDM7Mzc3NywxNCBAQCBzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJbXB0Y3BfcmN2X3NwYWNlX2luaXQobXNrLCBzc2spOwogCW1zay0mZ3Q7cmN2cV9zcGFjZS50aW1lID0gbXB0Y3Bfc3RhbXAoKTsKIAomIzQzOwlpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkgewomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO3N1YmZsb3ctJmd0O25vZGUpOwomIzQzOwkJV1JJVEVfT05DRShtc2stJmd0O2ZpcnN0LCBOVUxMKTsKJiM0MzsJCXNvY2tfcHV0KHNzayk7CiYjNDM7CQltcHRjcF9za19jbG9uZV9kZXN0cm95KG5zayk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwogCWlmIChtcF9vcHQtJmd0O3N1Ym9wdGlvbnMgJmFtcDsgT1BUSU9OX01QVENQX01QQ19BQ0spCiAJCV9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChtc2ssIHN1YmZsb3csIG1wX29wdCk7CiAJYmhfdW5sb2NrX3NvY2sobnNrKTsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmgKaW5kZXggODdjY2I4NGU5OTI3Yy4uMjQ3NDQ5Y2MyZmViOSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Byb3RvY29sLmgKQEAgLTEwNzksOSAmIzQzOzEwNzksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB9CiAKIGludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwomIzQzO3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTsKIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7Ci12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsCiYjNDM7Ym9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLAogCQkJc3RydWN0IG1wdGNwX3NvY2sgKm1zayk7CiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pOwogc3RydWN0IG1wdGNwX3NvY2sgKm1wdGNwX3Rva2VuX2dldF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHRva2VuKTsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zdWJmbG93LmMgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCmluZGV4IGFmODFhZDVlNjk5ZDEuLmQyY2QxMmZjMDM0MjEgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3N1YmZsb3cuYwpAQCAtNDcsNiAmIzQzOzQ3LDQxIEBAIHN0YXRpYyB2b2lkIHN1YmZsb3dfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogCW1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChyZXEpOwogfQogCiYjNDM7dm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKJiM0MzsJCQkgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKm5ld19zdWJmbG93X3JlcTsKJiM0MzsJc3RydWN0IG1wdGNwX3NvY2sgKm1zazsKJiM0MzsKJiM0MzsJbmV3X3N1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7CiYjNDM7CVJDVV9MT0NLREVQX1dBUk4oIXJjdV9yZWFkX2xvY2tfYW55X2hlbGQoKSwKJiM0MzsJCQkgJiMzNDtNUFRDUCByZXFzayBjbG9uZSBjYWxsZWQgd2l0aG91dCBSQ1UmIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIEEgbm9uLU5VTEwgLSZndDttc2sgbWVhbnMgdGhlIHJlcXVlc3Qgb3ducyBvbmUgcmVmZXJlbmNlLiAgVGhlIGNsb25lCiYjNDM7CSAqIGNvcGllZCBvbmx5IHRoZSBwb2ludGVyLCB3aGlsZSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBjYW4gY29uY3VycmVudGx5CiYjNDM7CSAqIHRyYW5zZmVyIGl0cyByZWZlcmVuY2UgdG8gdGhlIGNoaWxkLiAgQWNxdWlyZSBhIHJlZmVyZW5jZSBmb3IgdGhlCiYjNDM7CSAqIGNsb25lLCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBvcmlnaW5hbCByZXF1ZXN0IHN0aWxsIG93bnMgdGhlIHNhbWUgbXNrLgomIzQzOwkgKiBNUFRDUCBzb2NrZXRzIHVzZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSBhbmQgYWxsIGNsb25lIGNhbGxlcnMgcnVuIGluCiYjNDM7CSAqIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwga2VlcGluZyB0aGUgbWVtb3J5IHN0YWJsZSBoZXJlLgomIzQzOwkgKi8KJiM0MzsJbXNrID0gUkVBRF9PTkNFKHN1YmZsb3dfcmVxLSZndDttc2spOwomIzQzOwlpZiAobXNrKSB7CiYjNDM7CQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7CiYjNDM7CiYjNDM7CQlpZiAoIXJlZmNvdW50X2luY19ub3RfemVyb19hY3F1aXJlKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpIHsKJiM0MzsJCQltc2sgPSBOVUxMOwomIzQzOwkJfSBlbHNlIGlmIChSRUFEX09OQ0Uoc3ViZmxvd19yZXEtJmd0O21zaykgIT0gbXNrKSB7CiYjNDM7CQkJc29ja19wdXQoc2spOwomIzQzOwkJCW1zayA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV3X3N1YmZsb3dfcmVxLSZndDttc2sgPSBtc2s7CiYjNDM7CiYjNDM7CW1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsCiAJCQkJICB2b2lkICpobWFjKQogewpAQCAtODg1LDggJiM0Mzs5MjAsMTAgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCiAJCWlmIChjdHgtJmd0O21wX2NhcGFibGUpIHsKIAkJCWN0eC0mZ3Q7Y29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItJmd0O2Nvbm4sICZhbXA7bXBfb3B0LCBjaGlsZCwgcmVxKTsKLQkJCWlmICghY3R4LSZndDtjb25uKQomIzQzOwkJCWlmICghY3R4LSZndDtjb25uKSB7CiYjNDM7CQkJCWZhbGxiYWNrID0gdHJ1ZTsKIAkJCQlnb3RvIGZhbGxiYWNrOwomIzQzOwkJCX0KIAogCQkJY3R4LSZndDtzdWJmbG93X2lkID0gMTsKIAkJCW93bmVyID0gbXB0Y3Bfc2soY3R4LSZndDtjb25uKTsKQEAgLTkyMyw3ICYjNDM7OTYwLDcgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJfQogCiAJCQkvKiBtb3ZlIHRoZSBtc2sgcmVmZXJlbmNlIG93bmVyc2hpcCB0byB0aGUgc3ViZmxvdyAqLwotCQkJc3ViZmxvd19yZXEtJmd0O21zayA9IE5VTEw7CiYjNDM7CQkJV1JJVEVfT05DRShzdWJmbG93X3JlcS0mZ3Q7bXNrLCBOVUxMKTsKIAkJCWN0eC0mZ3Q7Y29ubiA9IChzdHJ1Y3Qgc29jayAqKW93bmVyOwogCiAJCQlpZiAoc3ViZmxvd191c2VfZGlmZmVyZW50X3Nwb3J0KG93bmVyLCBzaykpIHsKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmMKaW5kZXggZjFhNTBmMzY3YWRkOC4uZTBmMjgyM2Y5MmVmYiAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Rva2VuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuLmMKQEAgLTE4MCw2ICYjNDM7MTgwLDQzIEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKQogCXJldHVybiAwOwogfQogCiYjNDM7LyoqCiYjNDM7ICogbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0IC0gbW92ZSByZXF1ZXN0IHRva2VuIG93bmVyc2hpcCB0byBhIGNsb25lCiYjNDM7ICogQHJlcTogb3JpZ2luYWwgcmVxdWVzdCBzb2NrZXQKJiM0MzsgKiBAbmV3X3JlcTogY2xvbmVkIHJlcXVlc3Qgc29ja2V0CiYjNDM7ICoKJiM0MzsgKiBNb3ZlIHRoZSB0b2tlbiBoYXNoIGVudHJ5IGZyb20gdGhlIG9yaWdpbmFsIHJlcXVlc3QgdG8gaXRzIGNsb25lLgomIzQzOyAqLwomIzQzO3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvczsKJiM0MzsJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwomIzQzOwomIzQzOwluZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTsKJiM0MzsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKSB7CiYjNDM7CQltcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLSZndDt0b2tlbik7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkgewomIzQzOwkJbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKJiM0MzsJCWlmIChwb3MgPT0gc3ViZmxvd19yZXEpCiYjNDM7CQkJaGxpc3RfbnVsbHNfcmVwbGFjZV9pbml0X3JjdSgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlLAomIzQzOwkJCQkJCSAgICAgJmFtcDtuZXdfc3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpOwomIzQzOwkJZWxzZQomIzQzOwkJCW1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBtcHRjcF90b2tlbl9hY2NlcHQgLSByZXBsYWNlIGEgcmVxIHNrIHdpdGggZnVsbCBzb2NrIGluIHRva2VuIGhhc2gKICAqIEByZXE6IHRoZSByZXF1ZXN0IHNvY2tldCB0byBiZSByZW1vdmVkCkBAIC0xODcsMjQgJiM0MzsyMjQsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spCiAgKgogICogQ2FsbGVkIHdoZW4gYSBTWU4gcGFja2V0IGNyZWF0ZXMgYSBuZXcgbG9naWNhbCBjb25uZWN0aW9uLCBpLmUuCiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgb24gc3VjY2Vzcy4KICAqLwotdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7Ym9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsCiAJCQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKQogewogCXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zOwogCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKIAlzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7CiYjNDM7CWJvb2wgcmV0ID0gZmFsc2U7CiAKLQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stJmd0O3NrX3Byb3QsIDEpOwogCWJ1Y2tldCA9IHRva2VuX2J1Y2tldChyZXEtJmd0O3Rva2VuKTsKIAlzcGluX2xvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpKQomIzQzOwkJZ290byB1bmxvY2s7CiAKLQkvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqLwogCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS0mZ3Q7dG9rZW4pOwotCWlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSByZXEpKQotCQlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpOwomIzQzOwlpZiAocG9zICE9IHJlcSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoJmFtcDtyZXEtJmd0O3Rva2VuX25vZGUpOwogCV9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgJmFtcDtidWNrZXQtJmd0O21za19jaGFpbik7CiYjNDM7CXJldCA9IHRydWU7CiYjNDM7CiYjNDM7dW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay0mZ3Q7c2tfcHJvdCwgMSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbikKQEAgLTM1NSwxNiAmIzQzOzQwNCwyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7CiAJc3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0OwogCi0JaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKQomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiAJCXJldHVybjsKIAogCWJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwogCXNwaW5fbG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwogCXBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLSZndDt0b2tlbik7Ci0JaWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkgewomIzQzOwlpZiAocG9zID09IHN1YmZsb3dfcmVxKSB7CiAJCWhsaXN0X251bGxzX2RlbF9pbml0X3JjdSgmYW1wO3Bvcy0mZ3Q7dG9rZW5fbm9kZSk7CiAJCWJ1Y2tldC0mZ3Q7Y2hhaW5fbGVuLS07CiAJfQomIzQzOwomIzQzO3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jCmluZGV4IDRmYzM5ZmEyZTI2MmQuLmJlOWFjY2U4YTU2NzMgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYwpAQCAtOTksNyAmIzQzOzk5LDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9hY2NlcHQoc3RydWN0IGt1bml0ICp0ZXN0KQogCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLAogCQkJbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTsKIAltc2stJmd0O3Rva2VuID0gcmVxLSZndDt0b2tlbjsKLQltcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spOwomIzQzOwlLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTsKIAlLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soJmFtcDtpbml0X25ldCwgbXNrLSZndDt0b2tlbikpOwogCiAJLyogdGhpcyBpcyBub3cgYSBuby1vcCAqLwpAQCAtMTIyLDcgJiM0MzsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsCiAJCQltcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpOwogCW1zay0mZ3Q7dG9rZW4gPSByZXEtJmd0O3Rva2VuOwotCW1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7CiYjNDM7CUtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpOwogCiAJLyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovCiAJcmVmY291bnRfc2V0KCZhbXA7c2stJmd0O3NrX3JlZmNudCwgMCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyBmdXp6YWJsZSwgd2hhdCBjb25maWd1cmF0aW9ucyB3ZSYjMzk7bGwgbmVlZCwgYW5kIHdoaWNoIHN5bWJvbHMgYXJlIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBwYXRjaCBkZXRhaWxzLgoKRmlyc3QsIEkgc2VlIHRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIHRvdWNoZWQ6IGBpbmNsdWRlL25ldC9tcHRjcC5oYCwgYG5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNgLCBgbmV0L21wdGNwL3Byb3RvY29sLmNgLCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLCBgbmV0L21wdGNwL3N1YmZsb3cuY2AsIGBuZXQvbXB0Y3AvdG9rZW4uY2AsIGFuZCBgbmV0L21wdGNwL3Rva2VuX3Rlc3QuY2AuIFRoZSBjaGFuZ2VzIHNlZW0gdG8gY2VudGVyIGFyb3VuZCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIGBtcHRjcF9za19jbG9uZV9pbml0YCBhbmQgdG9rZW4gaGFuZGxpbmcgd2l0aGluIHRoZSBNUFRDUCBzdGFjaywgcG90ZW50aWFsbHkgaW1wbGVtZW50aW5nIGFuZCByZWZpbmluZyB0aGUgc3ViZmxvdyBjbG9uaW5nIHByb2Nlc3MuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIHRoaXMgKnJlYWNoYWJsZSogY29kZT8gQWJzb2x1dGVseS4gTVBUQ1AgaXMgcGFydCBvZiB0aGUgY29yZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrLiBJdCYjMzk7cyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgYW5kLCB0aGFua2Z1bGx5LCBjYW4gYmUgZXhlcmNpc2VkIHdpdGggbmV0d29yayB0cmFmZmljLCBsb29wYmFjaywgdHVuL3RhcCBpbnRlcmZhY2VzLCBhbmQgUUVNVSBvciBhIGNsb3VkIGVudmlyb25tZW50LiBUaGF04oCZcyBhIGJpZyB3aW4gZm9yIGZ1enppbmcuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGZvciBNUFRDUC4gSSYjMzk7bGwgZmlyZSB1cCBgZ3JlcHBlcmAgb3IganVzdCBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L21wdGNwL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhhdCBNUFRDUCBpcyBlbmFibGVkIGluIGEgY29uZmlnIGJlZm9yZSBJIHRyeSB0byB0YXJnZXQgaXQgd2l0aCBteSBmdXp6aW5nIHNldHVwLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgZXZlbiBjb21waWxlZCBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWctMS1cbm5ldC9tcHRjcC9LY29uZmlnOjI6Y29uZmlnIE1QVENQXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTI0LVxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1Rcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjEyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlOgoKKipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGluaXRpYWwgbGluZXMsIHNheSB0aGUgZmlyc3QgdGhpcnR5IG9yIHNvLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBiYXNpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE11bHRpcGF0aCBUQ1AuIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gZGVmaW5lcyB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0aGV5JiMzOTtyZSBlbmFibGVkLCBhbmQgYW55IGRlcGVuZGVuY2llcy4gSSBleHBlY3QgdG8gc2VlIHRoZSBjb3JlIE1QVENQIG1vZHVsZSBkZWZpbmVkIGZpcnN0LCBsaWtlbHkgd2l0aCBhIGBDT05GSUdfTVBUQ1BgIHN5bWJvbC4gVGhlbiwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZmxhZ3MgdGhhdCBjb250cm9sIHNwZWNpZmljIGZlYXR1cmVzIOKAkyBtYXliZSBzdXBwb3J0IGZvciBkaWZmZXJlbnQgc3ViZmxvdyBzY2hlZHVsZXJzLCBvciB0aGUgaW5jbHVzaW9uIG9mIHBhcnRpY3VsYXIgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobXMuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgbGlrZSBUQ1Agb3IgTkVULiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgYGhlbHBgIHRleHQgdGhhdCBkZXNjcmliZXMgd2hhdCBlYWNoIG9wdGlvbiBkb2VzLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlc2UgZmxhZ3MgdGhvcm91Z2hseSBzaW5jZSB0aGV5IGRpcmVjdGx5IGluZmx1ZW5jZSBob3cgTVBUQ1AgYmVoYXZlcyBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLiBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGRlZmF1bHRzLCB0b28uIFRoZXkgd2lsbCBnaXZlIGEgaGludCBhcyB0byB3aGF0IHRoZSBkZXZlbG9wZXJzIHRob3VnaHQgd291bGQgYmUgdGhlIGNvbW1vbiBhbmQgdXNlZnVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBhbnkgZXhwZXJpbWVudGFsIG9yIHBvdGVudGlhbGx5IHVuc3RhYmxlIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIGJ5IGRlZmF1bHQuIE9rYXksIGxldCYjMzk7cyBzdGFydCByZWFkaW5nLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4gIDIxOlx0XHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gSVBWNj15XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjc6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAgMjg6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIEN1cnJlbnRseSBjb3ZlcnMgdGhlIE1QVENQIGNyeXB0byBhbmQgdG9rZW4gaGVscGVycy5cbiAgMzE6XHRcdCAgT25seSB1c2VmdWwgZm9yIGtlcm5lbCBkZXZzIHJ1bm5pbmcgS1VuaXQgdGVzdCBoYXJuZXNzIGFuZCBhcmUgbm90XG4gIDMyOlx0XHQgIGZvciBpbmNsdXNpb24gaW50byBhIHByb2R1Y3Rpb24gYnVpbGQuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXG4gIDM1Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDIzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFRyaWdnZXJpbmcgTWVjaGFuaXNtcyBvZiBgaW5ldF9yZXFza19jbG9uZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBpbmV0X3JlcXNrX2Nsb25lYCBpcyBpbnZva2VkLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBzbyBrbm93aW5nIGl0cyBjYWxsIHBhdGhzIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIFRDUC9JUCBzdGFjay4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgdHJhY2UgdGhlIGNhbGxzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgaXRzIGRpcmVjdCBjYWxsZXJzIHRvIG1hcCBvdXQgdGhlIGluaXRpYWwgc2V0IG9mIHBvc3NpYmlsaXRpZXMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMsIGFuZCBmcm9tIHRoZXJlLCBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRoYXQgbGVhZHMgdG8gdGhvc2UgY2FsbHMuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBvciBpbmxpbmluZyB0aGF0IGNvdWxkIG9iZnVzY2F0ZSB0aGUgY2FsbCBncmFwaCBzb21ld2hhdCwgYnV0IHRoZSBiYXNpY3Mgc2hvdWxkIGJlIGRpc2Nlcm5pYmxlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIGl0LCB0byBzZWUgdGhlIGtpbmQgb2YgaW5mb3JtYXRpb24gdGhhdCBpdCBpcyB3b3JraW5nIHdpdGguIFVuZGVyc3RhbmRpbmcgdGhhdCBkYXRhIGZsb3cgaXMgb2Z0ZW4ga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfcmVxc2tfY2xvbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz05MDU9dm9pZCBfX3JlcXNrX2ZyZWUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtOTEzLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzo5MTQ6c3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05MTUtXHRcdFx0XHRcdCAgICAgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTAzNz1zdGF0aWMgdm9pZCByZXFza190aW1lcl9oYW5kbGVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA1My1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTA1NDpcdFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBuc2spO1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xMDU1LVx0XHRpZiAoIW5yZXEpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDIxPXN0cnVjdCBzb2NrICppbmV0X2Nza19jb21wbGV0ZV9oYXNoZGFuY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqY2hpbGQsXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM0LVx0XHRcdC8qIGhvbGQgYSByZWZjbnQgZm9yIHRoZSBucmVxLVx1MDAzZXJza19saXN0ZW5lclxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDM1Olx0XHRcdCAqIHdoaWNoIGlzIGFzc2lnbmVkIGluIGluZXRfcmVxc2tfY2xvbmUoKVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM2LVx0XHRcdCAqL1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM3LVx0XHRcdHNvY2tfaG9sZChzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE0Mzg6XHRcdFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzktXHRcdFx0aWYgKCFucmVxKSB7XG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDcwPXZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5NC1cdFx0aWYgKG5zaykge1xubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDk1Olx0XHRcdG5yZXEgPSBpbmV0X3JlcXNrX2Nsb25lKHJlcSwgbnNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5Ni1cdFx0XHRpZiAobnJlcSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4NjQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTVBUQ1AgUmVxdWVzdCBTb2NrZXQgQ2xvbmluZzogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2VudHJhbCB0aGVtZTogY2xvbmluZyByZXF1ZXN0IHNvY2tldHMsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgTVBUQ1AuIGBpbmV0X3JlcXNrX2Nsb25lYCBpcyB0aGUgYmFzZSBmdW5jdGlvbiwgdXNlZCBpbiBzdGFuZGFyZCBUQ1AgbGlzdGVuZXIgc2NlbmFyaW9zLCBhbmQgcmV1c2Vwb3J0LCBhbmQgU1lOLUFDSyByZXRyYW5zbWlzc2lvbnMsIGZhc3RvcGVuLCBsaXN0ZW4gc3RvcCBzaXR1YXRpb25zLCBoYW5kbGluZyBtaWdyYXRpb25zIGFuZCBjbG9uaW5nIG9mIHJlcXVlc3Qgc29ja2V0cyBpbiB2YXJpb3VzIGNvbnRleHRzLCBpbmNsdWRpbmcgdGltZXJzLiBIb3dldmVyLCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgTVBUQ1Atc3BlY2lmaWMgZnVuY3Rpb25zLiBJIHNlZSBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIHdoaWNoIGhhbmRsZXMgdGhlIE1QVENQLXNwZWNpZmljIGNsb25pbmcsIGRlYWxpbmcgd2l0aCByZWZlcmVuY2VzIGFuZCB0b2tlbiBtb3ZlbWVudHMuCgpJJiMzOTt2ZSBhbHNvIGdvdCBteSBleWUgb24gYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAsIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveWAuIEFsc28gbm90ZSBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYCBpcyBpbiB0aGUgbWl4IGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IG1vZGlmaWNhdGlvbnMsIGFsbCBkZWFsaW5nIHdpdGggY2xvbmluZyBvciB0b2tlbiBtYW5hZ2VtZW50LgoKTm93LCBsZXQgbWUgY2hlY2sgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdC4gSSYjMzk7dmUgZ290IGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAsIGFuZCBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYC4gSSYjMzk7dmUgYWxzbyBub3RlZCB0aGF0IGBpbmV0X3JlcXNrX2Nsb25lYCBpcyBpbiB0aGUgbGlzdCwgYnV0IGl0JiMzOTtzIG1vcmUgZ2VuZXJhbCBhbmQgbm90IE1QVENQLXNwZWNpZmljLgoKYGluZXRfcmVxc2tfY2xvbmVgIGlzIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzLCBgcmVxc2tfdGltZXJfaGFuZGxlcmAsIGBpbmV0X2Nza19jb21wbGV0ZV9oYXNoZGFuY2VgLCBhbmQgYGluZXRfY3NrX2xpc3Rlbl9zdG9wYCBpbiBUQ1AgY29ubmVjdGlvbiBoYW5kbGluZy4gVGhhdCYjMzk7cyBhIGdvb2QgaW5kaWNhdGlvbiBvZiBpdHMgdWJpcXVpdHkgYW5kIHRoZXJlZm9yZSBub3QgYSBnb29kIGZvY3VzIGZvciBmdXp6aW5nLiBIb3dldmVyLCB0aG9zZSBNUFRDUCBzcGVjaWZpYyBmdW5jdGlvbnMgcmVhbGx5IGxvb2sgbGlrZSBnb29kIHRhcmdldHMuCgpPa2F5LCBsZXQmIzM5O3MgYXNzZXNzIGlmIHRoaXMgYXJlYSBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiAgRGVmaW5pdGVseS4gIEl0IHRpY2tzIGFsbCB0aGUgYm94ZXMuIFdlJiMzOTtyZSB0YWxraW5nIGNvcmUgbmV0d29ya2luZywgZnVuZGFtZW50YWwgcHJvdG9jb2wgY2hhbmdlcy4gV2UgaGF2ZSBjb21wbGV4IGNvbmN1cnJlbmN5IGNvbmNlcm5zIC0gUkNVLCByZWZjb3VudHMsIGxvY2tpbmcsIHRva2VuIHRhYmxlIG1hbmlwdWxhdGlvbiwgYW5kIGNsb25pbmcgdW5kZXIgcmV1c2Vwb3J0IG9yIHN5bi1hY2sgdGltZXJzLi4uIHRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgYnVncy4gQW5kIHllcywgaXQmIzM5O3MgYWxsIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscyB3aXRoaW4gUUVNVSB3aXRoIGxvb3BiYWNrIG9yIGEgdmlydHVhbCBuZXR3b3JrLiBTbyB0aGlzIGlzIGEgY2xlYXIgJiMzNDt5ZXMmIzM0Oy4KCkZpbmFsbHksIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucz8gYE1QVENQYCBpcyB0aGUgYmlnIG9uZS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudC4gQW5kIG9mIGNvdXJzZSwgYElORVRgIGlzIGEgZGVwZW5kZW5jeS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9tcHRjcC9NYWtlZmlsZWAgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJ1dCB0aG9zZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IG9uZXMgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxubmV0L21wdGNwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX01QVENQKSAmIzQzOz0gbXB0Y3Aub1xubmV0L21wdGNwL01ha2VmaWxlLTMtXG5uZXQvbXB0Y3AvTWFrZWZpbGU9ND1tcHRjcC15IDo9IHByb3RvY29sLm8gc3ViZmxvdy5vIG9wdGlvbnMubyB0b2tlbi5vIGNyeXB0by5vIGN0cmwubyBwbS5vIGRpYWcubyBcXFxuLS1cbm5ldC9tcHRjcC9NYWtlZmlsZS03LVxubmV0L21wdGNwL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG5uZXQvbXB0Y3AvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfSU5FVF9NUFRDUF9ESUFHKSAmIzQzOz0gbXB0Y3BfZGlhZy5vXG5uZXQvbXB0Y3AvTWFrZWZpbGUtMTAtXG4tLVxubmV0L21wdGNwL01ha2VmaWxlPTEyPW1wdGNwX3Rva2VuX3Rlc3Qtb2JqcyA6PSB0b2tlbl90ZXN0Lm9cbm5ldC9tcHRjcC9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTVBUQ1BfS1VOSVRfVEVTVCkgJiM0Mzs9IG1wdGNwX2NyeXB0b190ZXN0Lm8gbXB0Y3BfdG9rZW5fdGVzdC5vXG5uZXQvbXB0Y3AvTWFrZWZpbGUtMTQtXG5uZXQvbXB0Y3AvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MjUKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1QVENQIE1vZGlmaWNhdGlvbiYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhlIGJ1aWxkIHN5c3RlbSBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCB0byBpbmNsdWRlIHRoZSBNUFRDUCBvYmplY3QgZmlsZXMgKGBtcHRjcC5vYCwgYHByb3RvY29sLm9gLCBgc3ViZmxvdy5vYCwgYHRva2VuLm9gKSB3aGVuIGBDT05GSUdfTVBUQ1BgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IG15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGUga2VybmVsIHN5bWJvbHMgdGhhdCBhcmUgbW9kaWZpZWQuIEkgY29uZmlybWVkIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAsIGBzdWJmbG93X3N5bl9yZWN2X3NvY2tgLCBhbmQgYGluZXRfcmVxc2tfY2xvbmVgIGFyZSBkaXJlY3RseSBpbXBhY3RlZC4gQW5kIGFkZGl0aW9uYWxseSwgYG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdGAgYW5kIHRoZSBzdGF0aWMgYG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3lgIGFyZSBhbHNvIHJlbGV2YW50LiBUaGVzZSBmdW5jdGlvbnMgYWxsIHBsYXkgYSByb2xlIGluIE1QVENQIGNvbm5lY3Rpb24gc2V0dXAgYW5kIHRlYXJkb3duLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byByZXF1ZXN0IHNvY2tldHMgYW5kIHRva2Vucy4KCkV4Y2VsbGVudC4gU28sIGdpdmVuIHRoaXMsIGxldCYjMzk7cyB2YWxpZGF0ZSB0aGF0IHRoZSBzZXQtcmVzdWx0cyBjcml0ZXJpYSBhcmUgbWV0OgoKKiAgICoqV29ydGhGdXp6aW5nKio6IFllcywgYWJzb2x1dGVseS4gVGhpcyBwYXRjaCB0b3VjaGVzIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgbG9naWMsIHRva2VuIHRhYmxlIG1hbmFnZW1lbnQsIGFuZCBzb2NrZXQgaW5pdGlhbGl6YXRpb24gZXJyb3IgaGFuZGxpbmcgYWNyb3NzIFRDUC9NUFRDUCBjb25uZWN0aW9uIHNldHVwIHBhdGhzLiBUaGluayByZXVzZXBvcnQgbWlncmF0aW9ucyBhbmQgdGltZXIgaGFuZGxlcnMg4oCTIHRoZXNlIHRoaW5ncyBoYXZlIGNvbXBsZXggUkNVLCByZWZlcmVuY2UgY291bnQsIGFuZCBsb2NraW5nIGludGVyYWN0aW9ucy4gSXQmIzM5O3MgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLgoqICAgKipSZWFzb25pbmcqKjogSSBuZWVkIHRvIGNvbmNpc2VseSBkb2N1bWVudCB0aGUgcmF0aW9uYWxlLiBJJiMzOTtsbCB3cml0ZTogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBsb2dpYywgdG9rZW4gdGFibGUgbWFuYWdlbWVudCwgYW5kIHNvY2tldCBpbml0aWFsaXphdGlvbiBlcnJvciBoYW5kbGluZyBhY3Jvc3MgVENQL01QVENQIGNvbm5lY3Rpb24gc2V0dXAgcGF0aHMgKGUuZy4gZHVyaW5nIHJldXNlcG9ydCBtaWdyYXRpb24gb3IgdGltZXIgaGFuZGxlcnMpLCB3aGljaCBpbnZvbHZlcyBjb21wbGV4IFJDVS9yZWZjb3VudC9sb2NraW5nIHN0YXRlIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OwoqICAgKipFbmFibGVDb25maWdzKio6IFdlIGNsZWFybHkgbmVlZCBgTVBUQ1BgIGVuYWJsZWQuIEhvd2V2ZXIsIHRvIGVuc3VyZSB0aGF0IHRoZSByZXF1aXJlZCBjb3JlIFRDUCBmdW5jdGlvbmFsaXR5IGlzIGFsc28gZW5hYmxlZCwgSSYjMzk7bGwgcmVjb21tZW5kIGBbJiMzNDtJTkVUJiMzNDssICYjMzQ7TVBUQ1AmIzM0O11gLgoqICAgKipGb2N1c1N5bWJvbHMqKjogVGhlIHN5bWJvbHMgSSYjMzk7dmUgaWRlbnRpZmllZDogYFsmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywgJiMzNDttcHRjcF90b2tlbl9hY2NlcHQmIzM0OywgJiMzNDttcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QmIzM0OywgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDssICYjMzQ7c3ViZmxvd19zeW5fcmVjdl9zb2NrJiMzNDssICYjMzQ7aW5ldF9yZXFza19jbG9uZSYjMzQ7XWAuCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgZnJ1aXRmdWwgYXJlYSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fYWNjZXB0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttcHRjcF9za19jbG9uZV9pbml0JiMzNDssCiAgICAmIzM0O3N1YmZsb3dfc3luX3JlY3Zfc29jayYjMzQ7LAogICAgJiMzNDtpbmV0X3JlcXNrX2Nsb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZywgdG9rZW4gaGFzaCBtYW5hZ2VtZW50LCBhbmQgc29ja2V0IGNsb25lIGVycm9yIGhhbmRsaW5nIGR1cmluZyBUQ1AvTVBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LiBUaGlzIGxvZ2ljIGludm9sdmVzIHN1YnRsZSBSQ1UsIHJlZmNvdW50aW5nLCBhbmQgbG9ja2luZyBzZW1hbnRpY3MgdGhhdCBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBzb2NrZXQgc3lzY2FsbHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUmIzM0OywKICAgICYjMzQ7bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21wdGNwX3Rva2VuX2FjY2VwdCYjMzQ7LAogICAgJiMzNDttcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2tfY2xvbmVfaW5pdCYjMzQ7LAogICAgJiMzNDtzdWJmbG93X3N5bl9yZWN2X3NvY2smIzM0OywKICAgICYjMzQ7aW5ldF9yZXFza19jbG9uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcsIHRva2VuIGhhc2ggbWFuYWdlbWVudCwgYW5kIHNvY2tldCBjbG9uZSBlcnJvciBoYW5kbGluZyBkdXJpbmcgVENQL01QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gVGhpcyBsb2dpYyBpbnZvbHZlcyBzdWJ0bGUgUkNVLCByZWZjb3VudGluZywgYW5kIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc29ja2V0IHN5c2NhbGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgZHVyaW5nIHJldXNlcG9ydCBzb2NrZXQgbWlncmF0aW9uIGJ5IHNhZmVseSBoYW5kbGluZyBtc2sgc29ja2V0IHJlZmNvdW50cywgbW92aW5nIHRva2VuIGhhc2ggdGFibGUgZW50cmllcyAobXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KSwgYW5kIHByb3Blcmx5IGNsZWFuaW5nIHVwIGFuZCBmYWxsaW5nIGJhY2sgd2hlbiBtcHRjcF90b2tlbl9hY2NlcHQgZmFpbHMuXG5cblRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb25jdXJyZW5jeSwgUkNVIHNhZmV0eSwgc29ja2V0IHJlZmNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlL2Rlc3RydWN0aW9uIHN0YXRlIG1hbmFnZW1lbnQuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIGFyZWEgYXJlIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpc3N1ZXMsIG9yIGxvY2tpbmcvZGVhZGxvY2sgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBwYWRkaW5nL2luZm8tbGVha3MsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGYzMDBmZTc4Mjc3MWEyYTA4YmZhMzFkOWM1YmFiZmNmYWQwMTE2ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMjE6MDk6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tcHRjcC5oIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaAppbmRleCA0ODVkNTViNjZlYTY3Li5hZDcwMDViNTc0YmIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21wdGNwLmgKQEAgLTIxOSw2ICYjNDM7MjE5LDkgQEAgaW50IG1wdGNwX3N1YmZsb3dfaW5pdF9jb29raWVfcmVxKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcywKIAkJCQkJICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lciwKIAkJCQkJICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTsKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIGFuIFJDVSByZWFkLXNpZGUgbG9jay4gKi8KJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTsKIAogX19iZTMyIG1wdGNwX2dldF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTMwNSw2ICYjNDM7MzA4LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIGFuIFJDVSByZWFkLXNpZGUgbG9jay4gKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiYjNDM7CQkJCQkgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAgeyByZXR1cm4gaHRvbmwoMHUpOyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3hmcm0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3RjcF9lY24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L21wdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3NvY2tfcmV1c2Vwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2FkZHJjb25mLmgmZ3Q7CiAKQEAgLTk2MSw2ICYjNDM7OTYyLDkgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQlyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtJmd0O3NrKS0mZ3Q7ZmFzdG9wZW5fcnNrLCBucmVxKTsKIAl9CiAKJiM0MzsJaWYgKHJza19pc19tcHRjcChyZXEpKQomIzQzOwkJbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpOwomIzQzOwogCXJldHVybiBucmVxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCmluZGV4IGUxZjA4ZjcxY2RiMTYuLjMwMDY3ZjJhN2NhOGYgMTAwNjQ0Ci0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9wcm90b2NvbC5jCkBAIC0zNjkyLDYgJiM0MzszNjkyLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3koc3RydWN0IHNvY2sgKm5zaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spOwomIzQzOwomIzQzOwltcHRjcF9yZWxlYXNlX3NjaGVkKG1zayk7CiYjNDM7CW1wdGNwX3NldF9zdGF0ZShuc2ssIFRDUF9DTE9TRSk7CiYjNDM7CS8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWEKJiM0MzsJICogdGNwX3NrKCksIGJ1dCBuc2sgaXMgYW4gTVBUQ1AgbWFzdGVyIHNvY2tldDsga2VlcCB0aGUgaW5ldC1sZXZlbAomIzQzOwkgKiBkZXN0cm95IHByZXBhcmF0aW9uIGhlcmUuCiYjNDM7CSAqLwomIzQzOwliaF91bmxvY2tfc29jayhuc2spOwomIzQzOwlzb2NrX3B1dChuc2spOwomIzQzOwlzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTsKJiM0MzsJdGNwX29ycGhhbl9jb3VudF9pbmMoKTsKJiM0MzsJaW5ldF9zayhuc2spLSZndDtpbmV0X251bSA9IDA7CiYjNDM7CWluZXRfY3NrX2Rlc3Ryb3lfc29jayhuc2spOwomIzQzO30KJiM0MzsKIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCQkgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCwKIAkJCQkgc3RydWN0IHNvY2sgKnNzaywKQEAgLTM3NTEsMTEgJiM0MzszNzY5LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCWxpc3RfYWRkKCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSwgJmFtcDttc2stJmd0O2Nvbm5fbGlzdCk7CiAJc29ja19ob2xkKHNzayk7CiAKLQkvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseQotCSAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0Ci0JICovCi0JbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spOwotCiAJLyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpCiAJICogdXNlcyB0aGUgY29ycmVjdCBkYXRhCiAJICovCkBAIC0zNzY0LDYgJiM0MzszNzc3LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAltcHRjcF9yY3Zfc3BhY2VfaW5pdChtc2ssIHNzayk7CiAJbXNrLSZndDtyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpOwogCiYjNDM7CWlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7c3ViZmxvdy0mZ3Q7bm9kZSk7CiYjNDM7CQlXUklURV9PTkNFKG1zay0mZ3Q7Zmlyc3QsIE5VTEwpOwomIzQzOwkJc29ja19wdXQoc3NrKTsKJiM0MzsJCW1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJaWYgKG1wX29wdC0mZ3Q7c3Vib3B0aW9ucyAmYW1wOyBPUFRJT05fTVBUQ1BfTVBDX0FDSykKIAkJX19tcHRjcF9zdWJmbG93X2Z1bGx5X2VzdGFibGlzaGVkKG1zaywgc3ViZmxvdywgbXBfb3B0KTsKIAliaF91bmxvY2tfc29jayhuc2spOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmggYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaAppbmRleCA4N2NjYjg0ZTk5MjdjLi4yNDc0NDljYzJmZWI5IDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuaApAQCAtMTA3OSw5ICYjNDM7MTA3OSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIH0KIAogaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpOwogdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTsKLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqciwKJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsCiAJCQlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTsKIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbik7CiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmMKaW5kZXggYWY4MWFkNWU2OTlkMS4uZDJjZDEyZmMwMzQyMSAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jCkBAIC00Nyw2ICYjNDM7NDcsNDEgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiAJbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHJlcSk7CiB9CiAKJiM0Mzt2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKQomIzQzO3sKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxOwomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrOwomIzQzOwomIzQzOwluZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTsKJiM0MzsJUkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19hbnlfaGVsZCgpLAomIzQzOwkJCSAmIzM0O01QVENQIHJlcXNrIGNsb25lIGNhbGxlZCB3aXRob3V0IFJDVSYjMzQ7KTsKJiM0MzsKJiM0MzsJLyogQSBub24tTlVMTCAtJmd0O21zayBtZWFucyB0aGUgcmVxdWVzdCBvd25zIG9uZSByZWZlcmVuY2UuICBUaGUgY2xvbmUKJiM0MzsJICogY29waWVkIG9ubHkgdGhlIHBvaW50ZXIsIHdoaWxlIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGNhbiBjb25jdXJyZW50bHkKJiM0MzsJICogdHJhbnNmZXIgaXRzIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQuICBBY3F1aXJlIGEgcmVmZXJlbmNlIGZvciB0aGUKJiM0MzsJICogY2xvbmUsIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIG9yaWdpbmFsIHJlcXVlc3Qgc3RpbGwgb3ducyB0aGUgc2FtZSBtc2suCiYjNDM7CSAqIE1QVENQIHNvY2tldHMgdXNlIFNMQUJfVFlQRVNBRkVfQllfUkNVIGFuZCBhbGwgY2xvbmUgY2FsbGVycyBydW4gaW4KJiM0MzsJICogYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCBrZWVwaW5nIHRoZSBtZW1vcnkgc3RhYmxlIGhlcmUuCiYjNDM7CSAqLwomIzQzOwltc2sgPSBSRUFEX09OQ0Uoc3ViZmxvd19yZXEtJmd0O21zayk7CiYjNDM7CWlmIChtc2spIHsKJiM0MzsJCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKJiM0MzsKJiM0MzsJCWlmICghcmVmY291bnRfaW5jX25vdF96ZXJvX2FjcXVpcmUoJmFtcDtzay0mZ3Q7c2tfcmVmY250KSkgewomIzQzOwkJCW1zayA9IE5VTEw7CiYjNDM7CQl9IGVsc2UgaWYgKFJFQURfT05DRShzdWJmbG93X3JlcS0mZ3Q7bXNrKSAhPSBtc2spIHsKJiM0MzsJCQlzb2NrX3B1dChzayk7CiYjNDM7CQkJbXNrID0gTlVMTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwluZXdfc3ViZmxvd19yZXEtJmd0O21zayA9IG1zazsKJiM0MzsKJiM0MzsJbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgc3ViZmxvd19nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MiwgdTMyIG5vbmNlMSwgdTMyIG5vbmNlMiwKIAkJCQkgIHZvaWQgKmhtYWMpCiB7CkBAIC04ODUsOCAmIzQzOzkyMCwxMCBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAKIAkJaWYgKGN0eC0mZ3Q7bXBfY2FwYWJsZSkgewogCQkJY3R4LSZndDtjb25uID0gbXB0Y3Bfc2tfY2xvbmVfaW5pdChsaXN0ZW5lci0mZ3Q7Y29ubiwgJmFtcDttcF9vcHQsIGNoaWxkLCByZXEpOwotCQkJaWYgKCFjdHgtJmd0O2Nvbm4pCiYjNDM7CQkJaWYgKCFjdHgtJmd0O2Nvbm4pIHsKJiM0MzsJCQkJZmFsbGJhY2sgPSB0cnVlOwogCQkJCWdvdG8gZmFsbGJhY2s7CiYjNDM7CQkJfQogCiAJCQljdHgtJmd0O3N1YmZsb3dfaWQgPSAxOwogCQkJb3duZXIgPSBtcHRjcF9zayhjdHgtJmd0O2Nvbm4pOwpAQCAtOTIzLDcgJiM0Mzs5NjAsNyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQl9CiAKIAkJCS8qIG1vdmUgdGhlIG1zayByZWZlcmVuY2Ugb3duZXJzaGlwIHRvIHRoZSBzdWJmbG93ICovCi0JCQlzdWJmbG93X3JlcS0mZ3Q7bXNrID0gTlVMTDsKJiM0MzsJCQlXUklURV9PTkNFKHN1YmZsb3dfcmVxLSZndDttc2ssIE5VTEwpOwogCQkJY3R4LSZndDtjb25uID0gKHN0cnVjdCBzb2NrICopb3duZXI7CiAKIAkJCWlmIChzdWJmbG93X3VzZV9kaWZmZXJlbnRfc3BvcnQob3duZXIsIHNrKSkgewpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uYwppbmRleCBmMWE1MGYzNjdhZGQ4Li5lMGYyODIzZjkyZWZiIDEwMDY0NAotLS0gYS9uZXQvbXB0Y3AvdG9rZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW4uYwpAQCAtMTgwLDYgJiM0MzsxODAsNDMgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QgLSBtb3ZlIHJlcXVlc3QgdG9rZW4gb3duZXJzaGlwIHRvIGEgY2xvbmUKJiM0MzsgKiBAcmVxOiBvcmlnaW5hbCByZXF1ZXN0IHNvY2tldAomIzQzOyAqIEBuZXdfcmVxOiBjbG9uZWQgcmVxdWVzdCBzb2NrZXQKJiM0MzsgKgomIzQzOyAqIE1vdmUgdGhlIHRva2VuIGhhc2ggZW50cnkgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdCB0byBpdHMgY2xvbmUuCiYjNDM7ICovCiYjNDM7dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTsKJiM0MzsJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zOwomIzQzOwlzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7CiYjNDM7CiYjNDM7CW5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpOwomIzQzOwomIzQzOwlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpIHsKJiM0MzsJCW1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKSB7CiYjNDM7CQltcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCBzdWJmbG93X3JlcS0mZ3Q7dG9rZW4pOwomIzQzOwkJaWYgKHBvcyA9PSBzdWJmbG93X3JlcSkKJiM0MzsJCQlobGlzdF9udWxsc19yZXBsYWNlX2luaXRfcmN1KCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUsCiYjNDM7CQkJCQkJICAgICAmYW1wO25ld19zdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaAogICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWQKQEAgLTE4NywyNCAmIzQzOzIyNCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaykKICAqCiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS4KICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLgogICovCi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSwKJiM0Mztib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSwKIAkJCXN0cnVjdCBtcHRjcF9zb2NrICptc2spCiB7CiAJc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7CiAJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrOwogCXN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDsKJiM0MzsJYm9vbCByZXQgPSBmYWxzZTsKIAotCXNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay0mZ3Q7c2tfcHJvdCwgMSk7CiAJYnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS0mZ3Q7dG9rZW4pOwogCXNwaW5fbG9ja19iaCgmYW1wO2J1Y2tldC0mZ3Q7bG9jayk7CiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiYjNDM7CQlnb3RvIHVubG9jazsKIAotCS8qIHBlZGFudGljIGxvb2t1cCBjaGVjayBmb3IgdGhlIG1vdmVkIHRva2VuICovCiAJcG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgcmVxLSZndDt0b2tlbik7Ci0JaWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHJlcSkpCi0JCWhsaXN0X251bGxzX2RlbF9pbml0X3JjdSgmYW1wO3JlcS0mZ3Q7dG9rZW5fbm9kZSk7CiYjNDM7CWlmIChwb3MgIT0gcmVxKQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CWhsaXN0X251bGxzX2RlbF9pbml0X3JjdSgmYW1wO3JlcS0mZ3Q7dG9rZW5fbm9kZSk7CiAJX19za19udWxsc19hZGRfbm9kZV9yY3UoKHN0cnVjdCBzb2NrICopbXNrLCAmYW1wO2J1Y2tldC0mZ3Q7bXNrX2NoYWluKTsKJiM0MzsJcmV0ID0gdHJ1ZTsKJiM0MzsKJiM0Mzt1bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtidWNrZXQtJmd0O2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLSZndDtza19wcm90LCAxKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKQpAQCAtMzU1LDE2ICYjNDM7NDA0LDIxIEBAIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIAlzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvczsKIAlzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7CiAKLQlpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoJmFtcDtzdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZSkpCiYjNDM7CWlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcygmYW1wO3N1YmZsb3dfcmVxLSZndDt0b2tlbl9ub2RlKSkKIAkJcmV0dXJuOwogCiAJYnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLSZndDt0b2tlbik7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKJiM0MzsJaWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKCZhbXA7c3ViZmxvd19yZXEtJmd0O3Rva2VuX25vZGUpKQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiAJcG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtJmd0O3Rva2VuKTsKLQlpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gc3ViZmxvd19yZXEpKSB7CiYjNDM7CWlmIChwb3MgPT0gc3ViZmxvd19yZXEpIHsKIAkJaGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KCZhbXA7cG9zLSZndDt0b2tlbl9ub2RlKTsKIAkJYnVja2V0LSZndDtjaGFpbl9sZW4tLTsKIAl9CiYjNDM7CiYjNDM7dW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7YnVja2V0LSZndDtsb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmMKaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jCkBAIC05OSw3ICYjNDM7OTksNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2FjY2VwdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsCiAJCQltcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpOwogCW1zay0mZ3Q7dG9rZW4gPSByZXEtJmd0O3Rva2VuOwotCW1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7CiYjNDM7CUtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpOwogCUtVTklUX0VYUEVDVF9QVFJfRVEodGVzdCwgbXNrLCBtcHRjcF90b2tlbl9nZXRfc29jaygmYW1wO2luaXRfbmV0LCBtc2stJmd0O3Rva2VuKSk7CiAKIAkvKiB0aGlzIGlzIG5vdyBhIG5vLW9wICovCkBAIC0xMjIsNyAmIzQzOzEyMiw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfZGVzdHJveWVkKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCwKIAkJCW1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7CiAJbXNrLSZndDt0b2tlbiA9IHJlcS0mZ3Q7dG9rZW47Ci0JbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTsKJiM0MzsJS1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7CiAKIAkvKiBzaW11bGF0ZSByYWNlIG9uIHJlbW92YWwgKi8KIAlyZWZjb3VudF9zZXQoJmFtcDtzay0mZ3Q7c2tfcmVmY250LCAwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXNlIGNoYW5nZXMgYXJlIGFjdHVhbGx5IGRvaW5nLgoKSSYjMzk7bSBzZWVpbmcgYSBzZXJpZXMgb2YgY2hhbmdlcyByZWxhdGVkIHRvIE1QVENQLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgYW5kIHRva2VuIG1hbmFnZW1lbnQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcmVmYWN0b3Jpbmcgb3IgaW1wcm92ZW1lbnQgcmVsYXRlZCB0byBjb25jdXJyZW5jeSBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgZmxvdy4KCkhlcmXigJlzIHRoZSBicmVha2Rvd24gYXMgSSB1bmRlcnN0YW5kIGl0OgoKKiAgICoqSGVhZGVyIGFuZCBTdHViOioqIFdlIGhhdmUgYSBuZXcgc3R1YiBmdW5jdGlvbiBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSgpYCBiZWluZyBhZGRlZCB0byBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAuIFRoaXMgc3VnZ2VzdHMgc29tZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIE1QVENQIHN1YmZsb3cgY2xvbmluZy4KCiogICAqKkludGVncmF0aW9uIHdpdGggYGluZXRfcmVxc2tfY2xvbmUoKWA6KiogVGhlIGBpbmV0X2Nvbm5lY3Rpb25fc29jay5jYCBmaWxlIG5vdyBjYWxscyB0aGlzIG5ldyBmdW5jdGlvbiBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSgpYCB3aXRoaW4gYGluZXRfcmVxc2tfY2xvbmUoKWAuIFRoaXMgY29uZmlybXMgdGhhdCB0aGUgcGF0Y2ggaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBob3cgTVBUQ1AgY29ubmVjdGlvbnMgYXJlIGhhbmRsZWQgYXQgdGhlIGxvd2VyIGxldmVsIGluZXQgbGF5ZXIuCgoqICAgKipIZWxwZXIgRnVuY3Rpb25zIGFuZCBFcnJvciBIYW5kbGluZzoqKiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIHNlZXMgdGhlIGFkZGl0aW9uIG9mIGEgZGVzdHJ1Y3Rpb24gaGVscGVyIGBtcHRjcF9za19jbG9uZV9kZXN0cm95KClgIGFuZCBtb3ZlcyB0aGUgY2FsbCB0byBgbXB0Y3BfdG9rZW5fYWNjZXB0KClgLiBDcml0aWNhbGx5LCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCYjMzk7cyByZXR1cm4gdmFsdWUgaXMgbm93IGJlaW5nICpjaGVja2VkKiBmb3Igc3VjY2Vzcy4gSWYgaXQgZmFpbHMsIHRoZSBjb2RlIHBhdGggbm93IGNsZWFucyB1cCBtb3JlIGdyYWNlZnVsbHkuIFRoaXMgaW1wbGllcyBhIHNpZ25pZmljYW50IGltcHJvdmVtZW50IGluIHRoZSByb2J1c3RuZXNzIG9mIHRoZSB0b2tlbiBoYW5kbGluZyBwcm9jZXNzLgoKKiAgICoqUmV0dXJuIFZhbHVlIG9mIGBtcHRjcF90b2tlbl9hY2NlcHQoKWA6KiogVGhlIHJldHVybiB0eXBlIG9mIGBtcHRjcF90b2tlbl9hY2NlcHQoKWAgaXMgYmVpbmcgY2hhbmdlZCB0byBhIGJvb2xlYW4uIFRoaXMgaXMgYSB2ZXJ5IGNsZWFyIHNpZ25hbCB0aGF0IHRoZSBmdW5jdGlvbiBjYW4gbm93IGZhaWwgYW5kIHRoYXQgdGhpcyBmYWlsdXJlIGlzIGludGVuZGVkIHRvIGJlIGhhbmRsZWQsIHdoaWNoIGNvbmZpcm1zIG15IGVhcmxpZXIgaHlwb3RoZXNpcy4KCiogICAqKmBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKClgIEltcGxlbWVudGF0aW9uOioqIEluIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCwgdGhlIG5ldyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZC4gSXQgY2xvbmVzIHRoZSBNUFRDUCBtYXN0ZXIgc29ja2V0IChgbXNrYCkgc2FmZWx5IHVzaW5nIFJDVSBhbmQgY2FsbHMgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCgpYC4gVGhpcyBpcyBjb3JlIGxvZ2ljIHRoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseS4gSXQgYWxzbyBpbnRyb2R1Y2VzIHNvbWUgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIGZhaWx1cmUgdG8gaW5pdGlhbGl6ZSBhIGNsb25lLiBUaGV5IGFyZSB1c2luZyBgV1JJVEVfT05DRWAgdG8gdXBkYXRlIHNvbWUgYG1za2AgcG9pbnRlcnMsIHdoaWNoIHBvaW50cyB0byBjb25jdXJyZW5jeSBhbmQgZGF0YSByYWNlcy4KCiogICAqKlRva2VuIEhhbmRsaW5nIGFuZCBDb25jdXJyZW5jeToqKiBgbmV0L21wdGNwL3Rva2VuLmNgIGNvbnRhaW5zIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCgpYCBhbmQgdXBkYXRlcyB0byBgbXB0Y3BfdG9rZW5fYWNjZXB0KClgLCBwYXJ0aWN1bGFybHkgYSBtaW5vciBjb25jdXJyZW5jeSBmaXggaW4gYG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCgpYC4gVGhpcyBzaWduYWxzIHRoYXQgdGhlIGNoYW5nZXMgaW5jbHVkZSB0aHJlYWQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgdG9rZW4gcmVwbGFjZW1lbnQuCgoqICAgKipVbml0IFRlc3RzOioqIEZpbmFsbHksIGBuZXQvbXB0Y3AvdG9rZW5fdGVzdC5jYCBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBgbXB0Y3BfdG9rZW5fYWNjZXB0KClgJiMzOTtzIHJldHVybiB2YWx1ZS4gVGhpcyBpcyBnb29kIHRvIHNlZTsgdGhpcyBzaWduYWxzIHRoYXQgdGhleSB3ZXJlIHRoaW5raW5nIGFib3V0IGhvdyB0byB0ZXN0IHRoZSBuZXcgYmVoYXZpb3IuCgpOb3csIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGBpbmV0X3JlcXNrX2Nsb25lYCB0byBzZWUgd2hlcmUgYWxsIG9mIHRoaXMgZml0cyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O2xsIHJlYWQgdGhlIGNvZGUgb3IgdXNlIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBmaWxlIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cy4KCkJhc2VkIG9uIHRoaXMgZmlyc3QgcGFzcywgdGhlIGNoYW5nZXMgKmFwcGVhciogdG8gYmUgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGNvbmN1cnJlbmN5IGFuZCB0b2tlbiBtYW5hZ2VtZW50LiBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB0aGF0IHRoaXMgaW50cm9kdWNlcyAqbmV3KiBhdmVudWVzIGZvciBLTVNBTiB0byBmaW5kIGlzc3Vlcy4gSG93ZXZlciwgdGhlIGNoYW5nZXMgdG8gZXJyb3IgaGFuZGxpbmcsIGFuZCBzcGVjaWZpY2FsbHkgdGhlIHVzZSBvZiBSQ1UgYW5kIGBXUklURV9PTkNFYCBzdWdnZXN0IHRoZXNlIGNoYW5nZXMgKmNvdWxkKiBoYXZlIGludHJvZHVjZWQgc3VidGxlIGRhdGEgcmFjZXMgb3IgY29uY3VycmVuY3kgYnVncyB0aGF0IG1heSBiZSBkZXRlY3RhYmxlIGJ5IEtNU0FOLiBJIHdvdWxkIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3BlY2lmaWMgY29kZSwgYW5kIHBvdGVudGlhbGx5IHVzZSB0aGUgY29kZSBicm93c2luZyB0b29scywgdG8gZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiBjb25jdXJyZW5jeSByaXNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcdG5yZXEtXHUwMDNlcnNrX2xpc3RlbmVyID0gc2s7XG4gOTQ2Olx0XG4gOTQ3Olx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgXHUwMDI2XHUwMDI2IHRjcF9yc2sobnJlcSktXHUwMDNldGZvX2xpc3RlbmVyKSB7XG4gOTQ4Olx0XHRcdHN0cnVjdCBmYXN0b3Blbl9xdWV1ZSAqZmFzdG9wZW5xO1xuIDk0OTpcdFxuIDk1MDpcdFx0XHQvKiByZXFza19mYXN0b3Blbl9yZW1vdmUoKSB3aWxsIHVuY2hhcmdlIG5yZXEtXHUwMDNlcnNrX2xpc3RlbmVyLFxuIDk1MTpcdFx0XHQgKiB0aGF0IGlzIEBzaywgc28gY2hhcmdlIGl0IGhlcmUuICBVbmxpa2UgdGhlIGxpc3RlbmVyXG4gOTUyOlx0XHRcdCAqIGJlaW5nIGNsb3NlZCwgQHNrIGlzIGxpdmUgYW5kIG5lZWRzIGl0cyBsb2NrLlxuIDk1MzpcdFx0XHQgKi9cbiA5NTQ6XHRcdFx0ZmFzdG9wZW5xID0gXHUwMDI2aW5ldF9jc2soc2spLVx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlLmZhc3RvcGVucTtcbiA5NTU6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmZhc3RvcGVucS1cdTAwM2Vsb2NrKTtcbiA5NTY6XHRcdFx0ZmFzdG9wZW5xLVx1MDAzZXFsZW4mIzQzOyYjNDM7O1xuIDk1NzpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZmYXN0b3BlbnEtXHUwMDNlbG9jayk7XG4gOTU4Olx0XG4gOTU5Olx0XHRcdC8qIFdlIG5lZWQgbm90IGFjcXVpcmUgZmFzdG9wZW5xLVx1MDAzZWxvY2tcbiA5NjA6XHRcdFx0ICogYmVjYXVzZSB0aGUgY2hpbGQgc29ja2V0IGlzIGxvY2tlZCBpbiBpbmV0X2Nza19saXN0ZW5fc3RvcCgpLlxuIDk2MTpcdFx0XHQgKi9cbiA5NjI6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIDk2MzpcdFx0fVxuIDk2NDpcdFxuIDk2NTpcdFx0aWYgKHJza19pc19tcHRjcChyZXEpKVxuIDk2NjpcdFx0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG4gOTY3Olx0XG4gOTY4Olx0XHRyZXR1cm4gbnJlcTtcbiA5Njk6XHR9XG4gOTcwOlx0XG4gOTcxOlx0c3RhdGljIHZvaWQgcmVxc2tfcXVldWVfbWlncmF0ZWQoc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUsXG4gOTcyOlx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIDk3MzpcdHtcbiA5NzQ6XHRcdGlmIChyZXEtXHUwMDNlbnVtX3RpbWVvdXQgPT0gMClcbiA5NzU6XHRcdFx0YXRvbWljX2luYyhcdTAwMjZxdWV1ZS1cdTAwM2V5b3VuZyk7XG4gOTc2Olx0XHRhdG9taWNfaW5jKFx1MDAyNnF1ZXVlLVx1MDAzZXFsZW4pO1xuIDk3NzpcdH1cbiA5Nzg6XHRcbiA5Nzk6XHRzdGF0aWMgdm9pZCByZXFza19taWdyYXRlX3Jlc2V0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiA5ODA6XHR7XG4gOTgxOlx0XHRyZXEtXHUwMDNlc2F2ZWRfc3luID0gTlVMTDtcbiA5ODI6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiA5ODM6XHRcdGluZXRfcnNrKHJlcSktXHUwMDNlaXB2Nl9vcHQgPSBOVUxMO1xuIDk4NDpcdFx0aW5ldF9yc2socmVxKS1cdTAwM2Vwa3RvcHRzID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY0MAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gaW5ldF9yZXFza19jbG9uZSoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgcmVtYWluaW5nIGNvZGUgd2l0aGluIGBpbmV0X3JlcXNrX2Nsb25lYC4gSG1tLCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBwYXN0IHRoZSBpbml0aWFsIHNldHVwIGFuZCBlcnJvciBjaGVja2luZy4gSSYjMzk7bSBndWVzc2luZyB3ZSYjMzk7cmUgbm93IGludG8gdGhlIG1lYXQgb2YgaXQ6IHRoZSBhY3R1YWwgZHVwbGljYXRpb24gb2YgdGhlIHJlcXVlc3Qgc29ja2V0IHN0cnVjdHVyZSBmb3IgYSBuZXcgY29ubmVjdGlvbi4gSSBleHBlY3QgdG8gc2VlIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBkYXRhIGNvcHlpbmcuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBmYWlsdXJlIGFsb25nIHRoZSB3YXksIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5IG1haW50YWluIGNvbnNpc3RlbmN5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLiBDb25zaWRlcmluZyB0aGUgY29tcGxleGl0aWVzIG9mIFRDUCBzdGF0ZSBtYW5hZ2VtZW50LCB0aGF0JiMzOTtzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEuIEkgaG9wZSBpdCBpcyBhbGwgZG9uZSBpbiBhIGNvbnNpc3RlbnQgbWFubmVyLCBhcyBpdCBoYXMgdG8gaGFuZGxlIHRoZSBjb25jdXJyZW50IGFjY2Vzcy4gVGhpcyBpcyBnb2luZyB0byBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkgZGVhbCB3aXRoIHRoZSBgcmVxc2tgIGRhdGEgc3RydWN0dXJlIGFuZCBhbGwgdGhlIHBvaW50ZXJzIHdpdGhpbi4gV2hhdCBudWFuY2VzIGFyZSBhdCBwbGF5PyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBjaGlsZD8gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGFuZCBhIGxvdCBoaW5nZXMgb24gdGhlIHJpZ2h0IGxvY2tzLiBDdXJpb3VzIHRvIHNlZSB0aGUgdGVjaG5pcXVlcyB1c2VkIGZvciBhdG9taWMgb3BlcmF0aW9ucyBhbmQgbWVtb3J5IGJhcnJpZXJzLCBwYXJ0aWN1bGFybHkgaWYgdGhleSYjMzk7cmUgZGVhbGluZyB3aXRoIG11bHRpcGxlIENQVXMuIExldCYjMzk7cyBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhhdC4gT2theSwgSSYjMzk7bSByZWFkeS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MjA6XHRcdG5yZXEgPSBrbWVtX2NhY2hlX2FsbG9jKHJlcS1cdTAwM2Vyc2tfb3BzLVx1MDAzZXNsYWIsIEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk4pO1xuIDkyMTpcdFx0aWYgKCFucmVxKSB7XG4gOTIyOlx0XHRcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BNSUdSQVRFUkVRRkFJTFVSRSk7XG4gOTIzOlx0XG4gOTI0Olx0XHRcdC8qIHBhaXJlZCB3aXRoIHJlZmNvdW50X2luY19ub3RfemVybygpIGluIHJldXNlcG9ydF9taWdyYXRlX3NvY2soKSAqL1xuIDkyNTpcdFx0XHRzb2NrX3B1dChzayk7XG4gOTI2Olx0XHRcdHJldHVybiBOVUxMO1xuIDkyNzpcdFx0fVxuIDkyODpcdFxuIDkyOTpcdFx0cmVxX3NrID0gcmVxX3RvX3NrKHJlcSk7XG4gOTMwOlx0XHRucmVxX3NrID0gcmVxX3RvX3NrKG5yZXEpO1xuIDkzMTpcdFxuIDkzMjpcdFx0bWVtY3B5KG5yZXFfc2ssIHJlcV9zayxcbiA5MzM6XHRcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc29jaywgc2tfZG9udGNvcHlfYmVnaW4pKTtcbiA5MzQ6XHRcdHVuc2FmZV9tZW1jcHkoXHUwMDI2bnJlcV9zay1cdTAwM2Vza19kb250Y29weV9lbmQsIFx1MDAyNnJlcV9zay1cdTAwM2Vza19kb250Y29weV9lbmQsXG4gOTM1Olx0XHRcdCAgICAgIHJlcS1cdTAwM2Vyc2tfb3BzLVx1MDAzZW9ial9zaXplIC0gb2Zmc2V0b2Yoc3RydWN0IHNvY2ssIHNrX2RvbnRjb3B5X2VuZCksXG4gOTM2Olx0XHRcdCAgICAgIC8qIGFsbG9jIGlzIGxhcmdlciB0aGFuIHN0cnVjdCwgc2VlIGFib3ZlICovKTtcbiA5Mzc6XHRcbiA5Mzg6XHRcdHNrX25vZGVfaW5pdChcdTAwMjZucmVxX3NrLVx1MDAzZXNrX25vZGUpO1xuIDkzOTpcdFx0bnJlcV9zay1cdTAwM2Vza190eF9xdWV1ZV9tYXBwaW5nID0gcmVxX3NrLVx1MDAzZXNrX3R4X3F1ZXVlX21hcHBpbmc7XG4gOTQwOlx0I2lmZGVmIENPTkZJR19TT0NLX1JYX1FVRVVFX01BUFBJTkdcbiA5NDE6XHRcdG5yZXFfc2stXHUwMDNlc2tfcnhfcXVldWVfbWFwcGluZyA9IHJlcV9zay1cdTAwM2Vza19yeF9xdWV1ZV9tYXBwaW5nO1xuIDk0MjpcdCNlbmRpZlxuIDk0MzpcdFx0bnJlcV9zay1cdTAwM2Vza19pbmNvbWluZ19jcHUgPSByZXFfc2stXHUwMDNlc2tfaW5jb21pbmdfY3B1O1xuIDk0NDpcdFxuIDk0NTpcdFx0bnJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIgPSBzaztcbiA5NDY6XHRcbiA5NDc6XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCBcdTAwMjZcdTAwMjYgdGNwX3JzayhucmVxKS1cdTAwM2V0Zm9fbGlzdGVuZXIpIHtcbiA5NDg6XHRcdFx0c3RydWN0IGZhc3RvcGVuX3F1ZXVlICpmYXN0b3BlbnE7XG4gOTQ5Olx0XG4gOTUwOlx0XHRcdC8qIHJlcXNrX2Zhc3RvcGVuX3JlbW92ZSgpIHdpbGwgdW5jaGFyZ2UgbnJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIsXG4gOTUxOlx0XHRcdCAqIHRoYXQgaXMgQHNrLCBzbyBjaGFyZ2UgaXQgaGVyZS4gIFVubGlrZSB0aGUgbGlzdGVuZXJcbiA5NTI6XHRcdFx0ICogYmVpbmcgY2xvc2VkLCBAc2sgaXMgbGl2ZSBhbmQgbmVlZHMgaXRzIGxvY2suXG4gOTUzOlx0XHRcdCAqL1xuIDk1NDpcdFx0XHRmYXN0b3BlbnEgPSBcdTAwMjZpbmV0X2NzayhzayktXHUwMDNlaWNza19hY2NlcHRfcXVldWUuZmFzdG9wZW5xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjYxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTVBUQ1AgUmVxdWVzdCBTb2NrZXQgQ2xvbmluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGluZXRfcmVxc2tfY2xvbmUoKWAsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgU09fUkVVU0VQT1JUYCBzb2NrZXQgbWlncmF0aW9uLiBUaGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IHdoZW4gYSBsaXN0ZW5pbmcgc29ja2V0IGlzIGNsb3NlZCBhbmQgaXRzIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIG1vdmVkIHRvIGFub3RoZXIgbGlzdGVuZXIgaW4gdGhlIHJldXNlcG9ydCBncm91cCwgdGhlIGNsb25pbmcgcHJvY2VzcywgaGFuZGxlZCBieSBgaW5ldF9yZXFza19jbG9uZSgpYCwgd2FzbiYjMzk7dCBwcm9wZXJseSB0YWtpbmcgTVBUQ1Atc3BlY2lmaWMgc3RhdGUgaW50byBhY2NvdW50LiBUaGlzIG1lYW5zIHRoaW5ncyBsaWtlIE1QVENQIHRva2VuIHRyYWNraW5nIGFuZCB0aGUgbWFuYWdpbmcgb2YgdGhlIGBtc2tgIHJlZmVyZW5jZSB3ZXJlbiYjMzk7dCBiZWluZyBjbG9uZWQgYWxvbmcgd2l0aCB0aGUgcmVxdWVzdCBzb2NrZXQgKGByZXFza2ApLgoKVGhlIHBhdGNoIHNlZW1zIHRvIGFkZHJlc3MgdGhpcyBieSBpbnRyb2R1Y2luZyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAgYW5kIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgIHRvIGhhbmRsZSB0aGUgTVBUQ1Atc3BlY2lmaWMgYXNwZWN0cyBvZiB0aGUgY2xvbmluZy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgdGhlIGBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2Agc3RydWN0dXJlIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXQgaG9sZHMsIGFuZCB0aGVuIEkgaGF2ZSB0byBkaWcgaW50byBgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0YCB0byBzZWUgaG93IGl0cyBjb21wb25lbnRzIGFyZSBpbml0aWFsaXplZC4gRW5zdXJpbmcgdGhlc2UgY29tcG9uZW50cyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgaXMgY3JpdGljYWwgdG8gcHJldmVudCBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBidWdzIGRvd24gdGhlIHJvYWQuIFRoaXMgcmVxdWlyZXMgYSBtZXRpY3Vsb3VzIHdhbGt0aHJvdWdoLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlIGFsaWdubWVudCBhbmQgYml0ZmllbGQgaGFuZGxpbmcuIFRoZSBnb2FsIGlzIHRvIHZlcmlmeSB0aGF0IHRoZXNlIG5ldyBmdW5jdGlvbnMgZW5zdXJlIGFsbCBNUFRDUC1yZWxhdGVkIGRhdGEgaXMgY29ycmVjdGx5IGNvcGllZCBkdXJpbmcgdGhlIGNsb25pbmcgb3BlcmF0aW9uIHdpdGhvdXQgbGVha2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avb3B0aW9ucy5jPTk0Nj1ib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdW5zaWduZWQgaW50ICpzaXplLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtOTQ4LXtcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTQ5Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTk1MC1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNzEzPXN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzE3LXtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM3MTg6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MTktXHRzdHJ1Y3Qgc29jayAqbnNrID0gc2tfY2xvbmVfbG9jayhzaywgR0ZQX0FUT01JQyk7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9NDk1PXN0cnVjdCBjc3VtX3BzZXVkb19oZWFkZXIge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUwMS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUwMjpzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sge1xubmV0L21wdGNwL3Byb3RvY29sLmgtNTAzLVx0c3RydWN0XHR0Y3BfcmVxdWVzdF9zb2NrIHNrO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUyMi1cbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUyMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjQtbXB0Y3Bfc3ViZmxvd19yc2soY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcnNrKVxubmV0L21wdGNwL3Byb3RvY29sLmgtNTI1LXtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUyNjpcdHJldHVybiAoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICopcnNrO1xubmV0L21wdGNwL3Byb3RvY29sLmgtNTI3LX1cbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMDg1PWludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEwODY6Ym9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTA4Ny1cdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzU3PXN0YXRpYyBpbmxpbmUgYm9vbCBzdWJmbG93X3NpbXVsdGFuZW91c19jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzY1LSNpZmRlZiBDT05GSUdfU1lOX0NPT0tJRVNcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjY6dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjctXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMzY4OmJvb2wgbXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2OS1cdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTM3Mj1zdGF0aWMgaW5saW5lIHZvaWRcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNzM6c3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzc0LVx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7fVxubmV0L21wdGNwL3Byb3RvY29sLmg9MTM3NT1zdGF0aWMgaW5saW5lIGJvb2xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNzY6bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM3Ny1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0zOD1zdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzkte1xubmV0L21wdGNwL3N1YmZsb3cuYzo0MDpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy00MS1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTUwPXZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy01Mi17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjUzOlx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjU0Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTU1LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTk2PXN0YXRpYyBib29sIG1wdGNwX2Nhbl9hY2NlcHRfbmV3X3N1YmZsb3coY29uc3Qgc3RydWN0IG1wdGNwX3NvY2sgKm1zaylcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEwNC0vKiB2YWxpZGF0ZSByZWNlaXZlZCB0b2tlbiBhbmQgY3JlYXRlIHRydW5jYXRlZCBobWFjIGFuZCBub25jZSBmb3IgU1lOLUFDSyAqL1xubmV0L21wdGNwL3N1YmZsb3cuYzoxMDU6c3RhdGljIHZvaWQgc3ViZmxvd19yZXFfY3JlYXRlX3RobWFjKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEwNi17XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xMjA9c3RhdGljIHN0cnVjdCBtcHRjcF9zb2NrICpzdWJmbG93X3Rva2VuX2pvaW5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyMS17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEyMjpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xMjMtXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ0PXN0YXRpYyB2b2lkIHN1YmZsb3dfaW5pdF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE0NS17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE0NjpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0xNDctXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xODM9c3RhdGljIGludCBzdWJmbG93X2NoZWNrX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xODctXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrX2xpc3RlbmVyKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg4Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4OS1cdHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkIG1wX29wdDtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTMwMD1pbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMzA0LVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChza19saXN0ZW5lcik7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjMwNTpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0zMDYtXHRzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCBtcF9vcHQ7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz03ODM9RVhQT1JUX1NZTUJPTChtcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc4NS0vKiB2YWxpZGF0ZSBobWFjIHJlY2VpdmVkIGluIHRoaXJkIEFDSyAqL1xubmV0L21wdGNwL3N1YmZsb3cuYzo3ODY6c3RhdGljIGJvb2wgc3ViZmxvd19obWFjX3ZhbGlkKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc4Ny1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTgzOT1zdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy04NDgtXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6ODQ5Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtODUwLVx0c3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgbXBfb3B0O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjA3Nz1zdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0yMDgwLXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjA4MTpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMDgyLVx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqb2xkX2N0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KG5ld3NrKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNjg9c3RhdGljIGludCBzdWJmbG93X29wc19pbml0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpzdWJmbG93X29wcylcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2OS17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNzA6XHRzdWJmbG93X29wcy1cdTAwM2VvYmpfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2spO1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMTcxLVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjIxNz12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIxOC17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIyMTk6XHQvKiBJbiBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2ssIHdlIGFzc3VtZSB0aGUgVENQIHJlcXVlc3Qgc29ja1xubmV0L21wdGNwL3N1YmZsb3cuYy0yMjIwLVx0ICogc3RydWN0dXJlcyBmb3IgdjQgYW5kIHY2IGhhdmUgdGhlIHNhbWUgc2l6ZS4gSXQgc2hvdWxkIG5vdCBjaGFuZ2VkIGluXG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYz01OT1zdGF0aWMgdm9pZCBtcHRjcF9qb2luX3N0b3JlX3N0YXRlKHN0cnVjdCBqb2luX2VudHJ5ICplbnRyeSxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6NjA6XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxKVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy02MS17XG4tLVxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03MC1cbm5ldC9tcHRjcC9zeW5jb29raWVzLmM6NzE6dm9pZCBzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNzItXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkxLSAqL1xubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo5Mjpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTMtXHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21wdGNwL3Rva2VuLmM9NDg9c3RhdGljIHN0cnVjdCB0b2tlbl9idWNrZXQgKnRva2VuX2J1Y2tldCh1MzIgdG9rZW4pXG4tLVxubmV0L21wdGNwL3Rva2VuLmMtNTMtLyogY2FsbGVkIHdpdGggYnVja2V0IGxvY2sgaGVsZCAqL1xubmV0L21wdGNwL3Rva2VuLmM6NTQ6c3RhdGljIHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqXG5uZXQvbXB0Y3AvdG9rZW4uYy01NS1fX3Rva2VuX2xvb2t1cF9yZXEoc3RydWN0IHRva2VuX2J1Y2tldCAqdCwgdTMyIHRva2VuKVxubmV0L21wdGNwL3Rva2VuLmMtNTYte1xubmV0L21wdGNwL3Rva2VuLmM6NTc6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcTtcbm5ldC9tcHRjcC90b2tlbi5jLTU4LVx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKnBvcztcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYz0xMDg9aW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbm5ldC9tcHRjcC90b2tlbi5jLTEwOS17XG5uZXQvbXB0Y3AvdG9rZW4uYzoxMTA6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC90b2tlbi5jLTExMS1cdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYz0xOTA9dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTE5Mi17XG5uZXQvbXB0Y3AvdG9rZW4uYzoxOTM6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC90b2tlbi5jOjE5NDpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxO1xubmV0L21wdGNwL3Rva2VuLmM6MTk1Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG5uZXQvbXB0Y3AvdG9rZW4uYy0xOTYtXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4tLVxubmV0L21wdGNwL3Rva2VuLmMtMjI5LSAqL1xubmV0L21wdGNwL3Rva2VuLmM6MjMwOmJvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxubmV0L21wdGNwL3Rva2VuLmMtMjMxLVx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMzIte1xubmV0L21wdGNwL3Rva2VuLmM6MjMzOlx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG5uZXQvbXB0Y3AvdG9rZW4uYy0yMzQtXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4tLVxubmV0L21wdGNwL3Rva2VuLmM9NDAxPXZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbm5ldC9tcHRjcC90b2tlbi5jLTQwMi17XG5uZXQvbXB0Y3AvdG9rZW4uYzo0MDM6XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbm5ldC9tcHRjcC90b2tlbi5jOjQwNDpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xubmV0L21wdGNwL3Rva2VuLmMtNDA1LVx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuLS1cbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtNS1cbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6NjpzdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpidWlsZF9yZXFfc29jayhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTcte1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzo4Olx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXE7XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTktXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjEwOlx0cmVxID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBzaXplb2Yoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrKSxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTEtXHRcdFx0ICAgIEdGUF9VU0VSKTtcbi0tXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTE4PXN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfcmVxX2Jhc2ljKHN0cnVjdCBrdW5pdCAqdGVzdClcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTkte1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoyMDpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxID0gYnVpbGRfcmVxX3NvY2sodGVzdCk7XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTIxLVx0c3RydWN0IG1wdGNwX3NvY2sgKm51bGxfbXNrID0gTlVMTDtcbi0tXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTk0PXN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtOTUte1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzo5NjpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxID0gYnVpbGRfcmVxX3NvY2sodGVzdCk7XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTk3LVx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IGJ1aWxkX21zayh0ZXN0KTtcbi0tXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTExMz1zdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExNC17XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjExNTpcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxID0gYnVpbGRfcmVxX3NvY2sodGVzdCk7XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExNi1cdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBidWlsZF9tc2sodGVzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbm5lciBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayBTdHJ1Y3R1cmUqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0aGlua2luZywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkmIzM5O20gY3J5c3RhbCBjbGVhciBvbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja2AuIFdoZXJlIGJldHRlciB0byBzdGFydCB0aGFuIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSDigJMgdGhlIGhlYWRlciBmaWxlLCBgbmV0L21wdGNwL3Byb3RvY29sLmhgLCByaWdodD8gSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHN0cnVjdHVyZSB0byBtYWtlIGFueSBtZWFuaW5nZnVsIHByb2dyZXNzIHdpdGggdGhpcyBhc3BlY3Qgb2YgTVBUQ1AuIE5vIHNlbnNlIGluIHdpbmdpbmcgaXQgd2hlbiB0aGUgcHJlY2lzZSBkZWZpbml0aW9ucyBhcmUgcmlnaHQgYXQgbXkgZmluZ2VydGlwcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdH07XG4gNTAxOlx0XG4gNTAyOlx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrIHtcbiA1MDM6XHRcdHN0cnVjdFx0dGNwX3JlcXVlc3Rfc29jayBzaztcbiA1MDQ6XHRcdHUxNlx0bXBfY2FwYWJsZSA6IDEsXG4gNTA1Olx0XHRcdG1wX2pvaW4gOiAxLFxuIDUwNjpcdFx0XHRiYWNrdXAgOiAxLFxuIDUwNzpcdFx0XHRyZXF1ZXN0X2JrdXAgOiAxLFxuIDUwODpcdFx0XHRjc3VtX3JlcWQgOiAxLFxuIDUwOTpcdFx0XHRhbGxvd19qb2luX2lkMCA6IDE7XG4gNTEwOlx0XHR1OFx0bG9jYWxfaWQ7XG4gNTExOlx0XHR1OFx0cmVtb3RlX2lkO1xuIDUxMjpcdFx0dTY0XHRsb2NhbF9rZXk7XG4gNTEzOlx0XHR1NjRcdGlkc247XG4gNTE0Olx0XHR1MzJcdHRva2VuO1xuIDUxNTpcdFx0dTMyXHRzc25fb2Zmc2V0O1xuIDUxNjpcdFx0dTY0XHR0aG1hYztcbiA1MTc6XHRcdHUzMlx0bG9jYWxfbm9uY2U7XG4gNTE4Olx0XHR1MzJcdHJlbW90ZV9ub25jZTtcbiA1MTk6XHRcdHN0cnVjdCBtcHRjcF9zb2NrXHQqbXNrO1xuIDUyMDpcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgdG9rZW5fbm9kZTtcbiA1MjE6XHR9O1xuIDUyMjpcdFxuIDUyMzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcbiA1MjQ6XHRtcHRjcF9zdWJmbG93X3Jzayhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyc2spXG4gNTI1Olx0e1xuIDUyNjpcdFx0cmV0dXJuIChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKilyc2s7XG4gNTI3Olx0fVxuIDUyODpcdFxuIDUyOTpcdHN0cnVjdCBtcHRjcF9kZWxlZ2F0ZWRfYWN0aW9uIHtcbiA1MzA6XHRcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIDUzMTpcdFx0bG9jYWxfbG9ja190IGJoX2xvY2s7XG4gNTMyOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7XG4gNTMzOlx0fTtcbiA1MzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTIKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGluZXRfcmVxc2tfY2xvbmVgIFByb2Nlc3Mgd2l0aCBNUFRDUCBTdWJmbG93cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGBpbmV0X3JlcXNrX2Nsb25lYCBmdW5jdGlvbiwgZm9jdXNpbmcgb24gdGhlIE1QVENQIHN1YmZsb3cgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXF1ZXN0IHNvY2tldCBpcyBjbG9uZWQgYW5kIGhvdyBNUFRDUC1zcGVjaWZpYyBkYXRhIGlzIGhhbmRsZWQuCgpGaXJzdCwgd2l0aGluIGBpbmV0X3JlcXNrX2Nsb25lYCwgdGhlIGNvZGUgYWxsb2NhdGVzIGEgbmV3IGByZXF1ZXN0X3NvY2tgIChgbnJlcWApIHVzaW5nIGBrbWVtX2NhY2hlX2FsbG9jYC4gIENydWNpYWxseSwgaXQgdXNlcyBgcmVxLSZndDtyc2tfb3BzLSZndDtzbGFiYCwgd2hpY2gsIGluIHRoZSBNUFRDUCBzdWJmbG93IGNhc2UsIGlzIGNvbmZpZ3VyZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLiBJIHNlZSB0aGF0IGEgYG1lbWNweWAgaXMgcGVyZm9ybWVkLiBJdCBjb3BpZXMgdGhlIGluaXRpYWwgcGFydCBvZiB0aGUgYHN0cnVjdCBzb2NrYCBmaWVsZHMgZnJvbSB0aGUgb3JpZ2luYWwgKGByZXFfc2tgKSB0byB0aGUgbmV3IG9uZSAoYG5yZXFfc2tgKS4gVGhlbiwgaXQgdXNlcyBgdW5zYWZlX21lbWNweWAgdG8gY29weSB0aGUgcmVtYWluaW5nIE1QVENQLXNwZWNpZmljIGZpZWxkcyBiZXlvbmQgdGhlIGBzdHJ1Y3Qgc29ja2Agc3RydWN0dXJlLiAgVGhpcyBpcyBiYXNlZCBvbiB0aGUgc2l6ZSBkZWZpbmVkIGJ5IGByZXEtJmd0O3Jza19vcHMtJmd0O29ial9zaXplYCwgd2hpY2gsIGFzIEkgbm90ZWQsIGVxdWFscyBgc2l6ZW9mKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jaylgIHdoZW4gTVBUQ1Agc3ViZmxvd3MgYXJlIGludm9sdmVkLiBUaGlzIG1lYW5zIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGxhcmdlciB0aGFuIGBzdHJ1Y3Qgc29ja2AgYW5kIGB1bnNhZmVfbWVtY3B5YCBjb3BpZXMgdGhlIHJlbWFpbmluZyBwYXJ0LCB3aGljaCBtYWtlcyBzZW5zZS4KCk5leHQsIHRoZXJlJiMzOTtzIGEgY2hlY2sgdXNpbmcgYHJza19pc19tcHRjcChyZXEpYCB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhbiBNUFRDUCBzdWJmbG93LiBJZiBpdCBpcywgdGhlIGNvZGUgY2FsbHMgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIGNyaXRpY2FsIGZvciBoYW5kbGluZyB0aGUgTVBUQ1Atc3BlY2lmaWMgc3RhdGUuCgpJbnNpZGUgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgLCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgbG9naWM6IHRoZSBnb2FsIGlzIHRvIGluaXRpYWxpemUgdGhlIE1QVENQLXNwZWNpZmljIHBhcnQgb2YgdGhlIGNsb25lZCByZXF1ZXN0LiBgbXB0Y3Bfc3ViZmxvd19yc2tgIGlzIHVzZWQgdG8gZ2V0IHBvaW50ZXJzIHRvIHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdHVyZXMgZm9yIGJvdGggdGhlIG9yaWdpbmFsIChgcmVxYCkgYW5kIHRoZSBuZXcgKGBuZXdfcmVxYCkgcmVxdWVzdCBzb2Nrcy4gVGhlIGNvZGUgYXBwZWFycyB0byBiZSBlbnN1cmluZyB0aGF0IGl0IGRvZXNuJiMzOTt0IHRyeSB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBzb2NrZXQgaWYgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBhbHJlYWR5IHplcm8uIFRoZW4sIGl0IGF0dGVtcHRzIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBhc3NvY2lhdGVkIGBtcHRjcF9zb2NrYCAoYG1za2ApIHVzaW5nIGByZWZjb3VudF9pbmNfbm90X3plcm9fYWNxdWlyZWAuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgc2hhcmVkIG93bmVyc2hpcCBvciBhIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHJlcXVlc3Qgc29ja2V0IGFuZCBhIG1hc3RlciBNUFRDUCBzb2NrZXQuICBUaGVyZSYjMzk7cyBhbHNvIGEgY2hlY2sgdXNpbmcgYFJFQURfT05DRWAgdG8gZW5zdXJlIHRoZSB2YWx1ZSBvZiBgbXNrYCBoYXNuJiMzOTt0IGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24sIGFuZCBpZiBpdCBoYXMsIHRoZSBjb2RlIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgc2V0cyBgbXNrYCB0byBOVUxMLiBGaW5hbGx5LCBpdCBhc3NpZ25zIHRoZSBgbXNrYCAocG9zc2libHkgTlVMTCBpZiBubyB2YWxpZCBzb2NrZXQgZXhpc3RzKSB0byB0aGUgbmV3IHN1YmZsb3cgcmVxdWVzdC4gVGhlbiBpdCBjYWxscyBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCB0byBtb3ZlIHRva2VuLXJlbGF0ZWQgZGF0YSBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRvIHRoZSBuZXcgY2xvbmUuCgpgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCBzZWVtcyB0byBtYW5hZ2UgdG9rZW4gYnVja2V0cyByZWxhdGVkIHRvIGZsb3cgY29udHJvbCBvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIEl0IGNoZWNrcyBpZiB0aGUgdG9rZW4gbm9kZSBmb3IgdGhlIHN1YmZsb3cgcmVxdWVzdCBpcyB1bmhhc2hlZC4gSWYgaXQgaXMsIGBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3RgIGlzIGNhbGxlZCwgd2hpY2ggd2lsbCBsaWtlbHkgaGFuZGxlIGluaXRpYWxpemluZyB0aGlzIHRva2VuIGRhdGEgc3RydWN0dXJlLiBJZiBub3QsIGl0IHJldHJpZXZlcyB0aGUgYHRva2VuX2J1Y2tldGAuIFRoZSBjb2RlIHRha2VzIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBzaGFyZWQgYWNjZXNzIHRvIHRoZSBidWNrZXQuIEluc2lkZSB0aGUgbG9jaywgaXQgcmUtY2hlY2tzIGlmIHRoZSB0b2tlbiBub2RlIGlzIHVuaGFzaGVkLiBJZiBpdCBzdGlsbCBpcywgaXQgY2FsbHMgYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAuIE90aGVyd2lzZSwgaXQgZmluZHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBvbGQgYHRva2VuYCB1c2luZyB0aGUgYnVja2V0JiMzOTtzIGxvb2t1cC4gSXQgdGhlbiB0cmllcyB0byByZXBsYWNlIHRoZSBleGlzdGluZyBgdG9rZW5gIHdpdGggdGhlIG5ldyBvbmUgdXNpbmcgYGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3VgLCBidXQgb25seSBpZiB0aGUgZm91bmQgcG9zaXRpb24gbWF0Y2hlcyB0aGUgZXhpc3Rpbmcgb25lLiBPdGhlcndpc2UsIGl0IGNhbGxzIGBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3RgIGFnYWluLCBpbXBseWluZyBhIGZhbGxiYWNrIGluaXRpYWxpemF0aW9uIGlmIHRoZSByZXBsYWNlbWVudCBmYWlscy4KCk5vdyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAgdG8gZnVsbHkgZ3Jhc3AgdGhlIHRva2VuIG1hbmFnZW1lbnQgc2NoZW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF90b2tlbl9pbml0X3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmg9MTA3NT12b2lkIF9faW5pdCBtcHRjcF90b2tlbl9pbml0KHZvaWQpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6MTA3NjpzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEwNzcte1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ0PXN0YXRpYyB2b2lkIHN1YmZsb3dfaW5pdF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTItXHRzdWJmbG93X3JlcS1cdTAwM2Vtc2sgPSBOVUxMO1xubmV0L21wdGNwL3N1YmZsb3cuYzoxNTM6XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QocmVxKTtcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU0LX1cbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYz0xOTA9dm9pZCBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9tcHRjcC90b2tlbi5jLTIwMC1cdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSkge1xubmV0L21wdGNwL3Rva2VuLmM6MjAxOlx0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG5uZXQvbXB0Y3AvdG9rZW4uYy0yMDItXHRcdHJldHVybjtcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMDctXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbm5ldC9tcHRjcC90b2tlbi5jOjIwODpcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xubmV0L21wdGNwL3Rva2VuLmMtMjA5LVx0fSBlbHNlIHtcbi0tXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMTQtXHRcdGVsc2Vcbm5ldC9tcHRjcC90b2tlbi5jOjIxNTpcdFx0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG5uZXQvbXB0Y3AvdG9rZW4uYy0yMTYtXHR9XG4tLVxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz02PXN0YXRpYyBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKmJ1aWxkX3JlcV9zb2NrKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTEyLVx0S1VOSVRfRVhQRUNUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCByZXEpO1xubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMzpcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSk7XG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTE0LVx0c29ja19uZXRfc2V0KChzdHJ1Y3Qgc29jayAqKXJlcSwgXHUwMDI2aW5pdF9uZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzcyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0YCwgZm9jdXNpbmcgb24gd2hhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHNvbWVvbmUgd2l0aCB5b3VyIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IuLi4gaW5pdGlhdGluZyB0aGUgdG9rZW4gZXhjaGFuZ2UgZm9yIE1QVENQLCBvYnZpb3VzbHkuIENydWNpYWwgZm9yIGVzdGFibGlzaGluZyB0aGF0IHN1YmZsb3cgd2l0aCB0aGUgYXNzb2NpYXRlZCBjb250cm9sIGluZm9ybWF0aW9uLiBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQg4oCTIHdoYXQga2luZCBvZiBgc3RydWN0YHMgYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlPyBQcm9iYWJseSBzb21lIHNvcnQgb2YgY29ubmVjdGlvbiBjb250ZXh0IChgc3RydWN0IG1wdGNwX3NvY2tgLCBwZXJoYXBzPykgYW5kIHRva2VuLXJlbGF0ZWQgZGF0YSAoYHN0cnVjdCBtcHRjcF90b2tlbmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGxpa2VseSkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdG9rZW4gaXRzZWxmIGlzIGdlbmVyYXRlZCwgYW5kIGNydWNpYWxseSwgaG93IGl0cyBpbml0aWFsIHZhbGlkaXR5IHBlcmlvZCBpcyBkZXRlcm1pbmVkLiBJcyBpdCBiYXNlZCBvbiBhIHRpbWVyLCBvciBhIG5lZ290aWF0ZWQgdmFsdWU/IFdoYXQgYXJlIHRoZSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucz8gQXJlIHdlIHVzaW5nIGNyeXB0b2dyYXBoaWMgcHJpbWl0aXZlcyBmb3IgdG9rZW4gcHJvdGVjdGlvbj8gS2V5IGV4Y2hhbmdlIGlzIGFsd2F5cyBzb21ldGhpbmcgdG8gZm9jdXMgb24uCgpUaGVuLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIGZsb3cuIEhvdyBkb2VzIHRoaXMgcmVxdWVzdCBpbnRlZ3JhdGUgd2l0aCB0aGUgb3ZlcmFsbCBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcHJvY2Vzcz8gSXMgaXQgY2FsbGVkIHN5bmNocm9ub3VzbHkgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAsIG9yIGlzIGl0IHBhcnQgb2YgYSBsYXRlciBuZWdvdGlhdGlvbj8gSG93IGFyZSBlcnJvcnMgaGFuZGxlZD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZXJyb3IgY29kZXMgZm9yIHRoaW5ncyBsaWtlIHJlc291cmNlIGxpbWl0YXRpb25zLCBwcm90b2NvbCB2aW9sYXRpb25zLCBvciBzZWN1cml0eSBpc3N1ZXMgZHVyaW5nIHRva2VuIGdlbmVyYXRpb24uIEkgZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBUQ1Agc3RhY2ssIHByb2JhYmx5IHRvIHNpZ25hbCB0aGUgbmVlZCBmb3IgYSB0b2tlbiBvciB0byBzZW5kIHRoZSBpbml0aWFsIHJlcXVlc3Qgb24gdGhlIGNvbnRyb2wgZmxvdy4KCkkgYWxzbyB3YW50IHRvIHNlZSBob3cgdGhpcyBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzLiBJcyB0aGVyZSBsb2NraW5nIGludm9sdmVkLCBlc3BlY2lhbGx5IGlmIG11bHRpcGxlIHRocmVhZHMgb3IgcHJvY2Vzc2VzIG1pZ2h0IGJlIGF0dGVtcHRpbmcgdG8gZXN0YWJsaXNoIHN1YmZsb3dzIGNvbmN1cnJlbnRseT8gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIGhvdyB0aGUgdG9rZW4gaXMgc3Vic2VxdWVudGx5IHVzZWQuIFRoZSBpbml0IHJlcXVlc3QgaXMgb25seSB0aGUgYmVnaW5uaW5nLiBIb3cgYXJlIHN1YnNlcXVlbnQgdG9rZW4gcmVxdWVzdHMgaGFuZGxlZCwgYW5kIGhvdyBkb2VzIHRoZSBzeXN0ZW0gbWFpbnRhaW4gc3RhdGU/IFdoYXQga2luZCBvZiBvcHRpbWl6YXRpb25zIGFyZSBpbXBsZW1lbnRlZCBmb3IgZGlmZmVyZW50IE1QVENQIGNvbm5lY3Rpb24gc2NlbmFyaW9zPwoKRmluYWxseSwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBwZXJmb3JtYW5jZT8gVG9rZW4gZXhjaGFuZ2UgaXMgYSB0cmFkZS1vZmY6IG92ZXJoZWFkIHZlcnN1cyB0aGUgYmVuZWZpdHMgb2Ygc3ViZmxvdyBjcmVhdGlvbiBhbmQgbG9hZCBiYWxhbmNpbmcuIEkmIzM5O2QgbGlrZSB0byBzZWUgaWYgYW55IG9wdGltaXphdGlvbnMgYXJlIGluIHBsYWNlIChlLmcuLCBjYWNoaW5nLCBwcmUtY2FsY3VsYXRpb24sIGV0Yy4pLiBBbmQgb2YgY291cnNlLCBJJiMzOTttIGtlZW4gdG8gZXZhbHVhdGUgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHJvYnVzdG5lc3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBTbywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGl0IGlzIHdvcmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3Byb3RvY29sLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNzQ6XHRcbjEwNzU6XHR2b2lkIF9faW5pdCBtcHRjcF90b2tlbl9pbml0KHZvaWQpO1xuMTA3NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuMTA3NzpcdHtcbjEwNzg6XHRcdG1wdGNwX3N1YmZsb3dfcnNrKHJlcSktXHUwMDNldG9rZW5fbm9kZS5wcHJldiA9IE5VTEw7XG4xMDc5Olx0fVxuMTA4MDpcdFxuMTA4MTpcdGludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuMTA4MjpcdHZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbjEwODM6XHRcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbjEwODQ6XHR2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuMTA4NTpcdGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcbjEwODY6XHRib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4xMDg3Olx0XHRcdFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayk7XG4xMDg4Olx0Ym9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIE1QVENQIFNvY2tldCBDbG9uaW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveWAgZnVuY3Rpb24uIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIHNvbGlkIHRoZXJlLCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkIHRvIGFueSBwb3RlbnRpYWwgZXJyb3Igc2NlbmFyaW9zLiBBbmQgdGhlbiBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IGBtcHRjcF9za19jbG9uZV9pbml0KClgLiBUaW1lIHRvIGdvIGRpZ2dpbmcgaW4gYG5ldC9tcHRjcC9wcm90b2NvbC5jYCBhbmQgc2VlIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucywgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFyZWEgb2YgcG9zc2libGUgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvcHJvdG9jb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzcxMDpcdFx0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XG4zNzExOlx0fVxuMzcxMjpcdFxuMzcxMzpcdHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbjM3MTQ6XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuMzcxNTpcdFx0XHRcdFx0IHN0cnVjdCBzb2NrICpzc2ssXG4zNzE2Olx0XHRcdFx0XHQgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuMzcxNzpcdHtcbjM3MTg6XHRcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuMzcxOTpcdFx0c3RydWN0IHNvY2sgKm5zayA9IHNrX2Nsb25lX2xvY2soc2ssIEdGUF9BVE9NSUMpO1xuMzcyMDpcdFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbjM3MjE6XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2s7XG4zNzIyOlx0XG4zNzIzOlx0XHRpZiAoIW5zaylcbjM3MjQ6XHRcdFx0cmV0dXJuIE5VTEw7XG4zNzI1Olx0XG4zNzI2Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG4zNzI3Olx0XHRpZiAobnNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbjM3Mjg6XHRcdFx0aW5ldF9zayhuc2spLVx1MDAzZXBpbmV0NiA9IG1wdGNwX2luZXQ2X3NrKG5zayk7XG4zNzI5Olx0I2VuZGlmXG4zNzMwOlx0XG4zNzMxOlx0XHRfX21wdGNwX2luaXRfc29jayhuc2spO1xuMzczMjpcdFxuMzczMzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxuMzczNDpcdFx0aWYgKG5zay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4zNzM1Olx0XHRcdG1wdGNwX2NvcHlfaXA2X29wdGlvbnMobnNrLCBzayk7XG4zNzM2Olx0XHRlbHNlXG4zNzM3Olx0I2VuZGlmXG4zNzM4Olx0XHRcdG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhuc2ssIHNrKTtcbjM3Mzk6XHRcbjM3NDA6XHRcdG1zayA9IG1wdGNwX3NrKG5zayk7XG4zNzQxOlx0XHRXUklURV9PTkNFKG1zay1cdTAwM2Vsb2NhbF9rZXksIHN1YmZsb3dfcmVxLVx1MDAzZWxvY2FsX2tleSk7XG4zNzQyOlx0XHRXUklURV9PTkNFKG1zay1cdTAwM2V0b2tlbiwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuMzc0MzpcdFx0bXNrLVx1MDAzZWluX2FjY2VwdF9xdWV1ZSA9IDE7XG4zNzQ0Olx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmdWxseV9lc3RhYmxpc2hlZCwgZmFsc2UpO1xuMzc0NTpcdFx0aWYgKG1wX29wdC1cdTAwM2VzdWJvcHRpb25zIFx1MDAyNiBPUFRJT05fTVBUQ1BfQ1NVTVJFUUQpXG4zNzQ2Olx0XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWNzdW1fZW5hYmxlZCwgdHJ1ZSk7XG4zNzQ3Olx0XG4zNzQ4Olx0XHRXUklURV9PTkNFKG1zay1cdTAwM2V3cml0ZV9zZXEsIHN1YmZsb3dfcmVxLVx1MDAzZWlkc24gJiM0MzsgMSk7XG4zNzQ5Olx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VzbmRfbnh0LCBtc2stXHUwMDNld3JpdGVfc2VxKTtcbjM3NTA6XHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZXNuZF91bmEsIG1zay1cdTAwM2V3cml0ZV9zZXEpO1xuMzc1MTpcdFx0V1JJVEVfT05DRShtc2stXHUwMDNld25kX2VuZCwgbXNrLVx1MDAzZXNuZF9ueHQgJiM0MzsgdGNwX3NrKHNzayktXHUwMDNlc25kX3duZCk7XG4zNzUyOlx0XHRtc2stXHUwMDNlc2V0c29ja29wdF9zZXEgPSBtcHRjcF9zayhzayktXHUwMDNlc2V0c29ja29wdF9zZXE7XG4zNzUzOlx0XHRtcHRjcF9pbml0X3NjaGVkKG1zaywgbXB0Y3Bfc2soc2spLVx1MDAzZXNjaGVkKTtcbjM3NTQ6XHRcbjM3NTU6XHRcdC8qIHBhc3NpdmUgbXNrIGlzIGNyZWF0ZWQgYWZ0ZXIgdGhlIGZpcnN0L01QQyBzdWJmbG93ICovXG4zNzU2Olx0XHRtc2stXHUwMDNlc3ViZmxvd19pZCA9IDI7XG4zNzU3Olx0XG4zNzU4Olx0XHRzb2NrX3Jlc2V0X2ZsYWcobnNrLCBTT0NLX1JDVV9GUkVFKTtcbjM3NTk6XHRcdHNlY3VyaXR5X2luZXRfY3NrX2Nsb25lKG5zaywgcmVxKTtcbjM3NjA6XHRcbjM3NjE6XHRcdC8qIHRoaXMgY2FuJiMzOTt0IHJhY2Ugd2l0aCBtcHRjcF9jbG9zZSgpLCBhcyB0aGUgbXNrIGlzXG4zNzYyOlx0XHQgKiBub3QgeWV0IGV4cG9zdGVkIHRvIHVzZXItc3BhY2VcbjM3NjM6XHRcdCAqL1xuMzc2NDpcdFx0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0VTVEFCTElTSEVEKTtcbjM3NjU6XHRcbjM3NjY6XHRcdC8qIFRoZSBtc2sgbWFpbnRhaW4gYSByZWYgdG8gZWFjaCBzdWJmbG93IGluIHRoZSBjb25uZWN0aW9ucyBsaXN0ICovXG4zNzY3Olx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgc3NrKTtcbjM3Njg6XHRcdHN1YmZsb3cgPSBtcHRjcF9zdWJmbG93X2N0eChzc2spO1xuMzc2OTpcdFx0bGlzdF9hZGQoXHUwMDI2c3ViZmxvdy1cdTAwM2Vub2RlLCBcdTAwMjZtc2stXHUwMDNlY29ubl9saXN0KTtcbjM3NzA6XHRcdHNvY2tfaG9sZChzc2spO1xuMzc3MTpcdFxuMzc3MjpcdFx0Lyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpXG4zNzczOlx0XHQgKiB1c2VzIHRoZSBjb3JyZWN0IGRhdGFcbjM3NzQ6XHRcdCAqL1xuMzc3NTpcdFx0bXB0Y3BfY29weV9pbmFkZHJzKG5zaywgc3NrKTtcbjM3NzY6XHRcbjM3Nzc6XHRcdG1wdGNwX3Jjdl9zcGFjZV9pbml0KG1zaywgc3NrKTtcbjM3Nzg6XHRcdG1zay1cdTAwM2VyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpO1xuMzc3OTpcdFxuMzc4MDpcdFx0aWYgKCFtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zaykpIHtcbjM3ODE6XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUpO1xuMzc4MjpcdFx0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgTlVMTCk7XG4zNzgzOlx0XHRcdHNvY2tfcHV0KHNzayk7XG4zNzg0Olx0XHRcdG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTtcbjM3ODU6XHRcdFx0cmV0dXJuIE5VTEw7XG4zNzg2Olx0XHR9XG4zNzg3Olx0XG4zNzg4Olx0XHRpZiAobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxuMzc4OTpcdFx0XHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5MwoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiA5NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTVBUQ1AgUmVxdWVzdCBTb2NrZXQgQ2xvbmluZyBEdXJpbmcgUmV1c2Vwb3J0IE1pZ3JhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIEtNU0FOIG9yIGlmIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaW52b2x2ZXMgdGhlIGNsb25pbmcgb2YgTVBUQ1AgcmVxdWVzdCBzb2NrZXRzIGR1cmluZyBhIHJldXNlcG9ydCBtaWdyYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzdWJmbG93cy4gVGhlIGtleSBvcGVyYXRpb25zIGludm9sdmUgdHJhbnNmZXJyaW5nIE11bHRpUGF0aCBUQ1AgKE1QVENQKSBzcGVjaWZpYyBkYXRhLCBwcmltYXJpbHkgYG1za2AgcmVmZXJlbmNlcyBhbmQgdG9rZW4gdGFibGUgZW50cmllcywgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBzb2NrZXQgdG8gaXRzIGNsb25lLiBGYWlsdXJlIHNjZW5hcmlvcyB3aXRoaW4gYG1wdGNwX3Rva2VuX2FjY2VwdGAgYXJlIGFsc28gZ3JhY2VmdWxseSBoYW5kbGVkLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBLTVNBTiB0cmlnZ2Vycy4gV2Uga25vdyBLTVNBTiBjb25jZXJucyBpdHNlbGYgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgbGVhayBpbmZvcm1hdGlvbiB0byB1c2VyIHNwYWNlIG9yIHRoYXQgYWZmZWN0IGNvbnRyb2wgZmxvdy4gTG9va2luZyBhdCB0aGUgY3JpdGVyaWEsIEkmIzM5O20gY2hlY2tpbmcgZm9yIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgdW5pbml0aWFsaXplZCByZWFkcywgYW5kIGFueSBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS4KClRoZSBjb2RlIGNoYW5nZXMgaGVyZSBpbnZvbHZlIGBpbmV0X3JlcXNrX2Nsb25lKClgLCB3aGljaCBjYWxscyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSgpYCB0byBoYW5kbGUgdGhlIE1QVENQIHNwZWNpZmljIHN0dWZmLiBXaXRoaW4gdGhhdCwgd2UgaGF2ZSBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KClgIGFuZCBgbXB0Y3BfdG9rZW5fYWNjZXB0KClgLCB3aXRoIHByb3BlciBsb2NraW5nIGFuZCBsaXN0IG1hbmlwdWxhdGlvbi4gRXJyb3IgaGFuZGxpbmcgaW4gYG1wdGNwX3Rva2VuX2FjY2VwdGAgaXMgYWxzbyBpbmNsdWRlZC4gVGhlcmUmIzM5O3MgYWxzbyBgbXB0Y3Bfc2tfY2xvbmVfaW5pdCgpYCBpbiBjYXNlIG9mIGZhaWx1cmUuCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgcG90ZW50aWFsIEtNU0FOIGNvbmNlcm5zOgoKKiAgICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZXM/KiogTm8uIFRoZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgbGVhdmUgZmllbGRzIHVuaW5pdGlhbGl6ZWQgYW5kIHRoZW4gZXhwb3NlIHRoZW0gdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBicmFuY2hpbmcuIGBpbmV0X3JlcXNrX2Nsb25lKClgIGlzIGFsbG9jYXRpbmcgYSBgbnJlcWAgZnJvbSB0aGUgc2xhYiBjYWNoZSwgYW5kIHRoZW4gY29weWluZyB0aGUgY29udGVudHMgZnJvbSBhIHNvdXJjZSBgcmVxYCB1c2luZyBgbWVtY3B5YC4gVGhlIG5ldyBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCBpbml0aWFsaXplcyB0aGUgYG5ld19zdWJmbG93X3JlcS0mZ3Q7dG9rZW5fbm9kZWAuIFRoZSBhbGxvY2F0aW9ucyBhcmUgZWl0aGVyIGZ1bGx5IGluaXRpYWxpemVkIG9yIGNvcGllZCBmcm9tIGtub3duLWdvb2QgZGF0YS4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQuCiogICAqKkluZm8gTGVha3M/KiogTm8uIE5vdGhpbmcgbmV3IGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjcmVhdGVkIG9uIHRoZSBzdGFjaywgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLgoqICAgKipVbmluaXRpYWxpemVkIEJ1ZmZlciBSZWFkcz8qKiBOby4gVGhlIGNvZGUgaXNuJiMzOTt0IHJlYWRpbmcgZnJvbSBhbnkgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBwb3RlbnRpYWxseSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRocm91Z2ggaW5jb3JyZWN0IGJvdW5kcyBjaGVja3MuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMsIHRoZSBwb3RlbnRpYWwgcmlza3MgbGllIGluIGNvbmN1cnJlbmN5IGlzc3VlczogUkNVLCByZWZjb3VudGluZywgbG9ja2luZywgdXNlLWFmdGVyLWZyZWUsIGFuZCBlcnJvciBoYW5kbGluZy4gSG93ZXZlciwgdGhlc2UgYXJlIHByZWNpc2VseSB0aGUga2luZHMgb2YgYnVncyB0aGF0IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgc3VjaCBhcyByZWZjb3VudCBjaGVja2VycywgUFJPVkVcX0xPQ0tJTkcsIGFyZSBidWlsdCB0byBjYXRjaC4KCk15IGNvbmNsdXNpb24gaXMgY2xlYXI6ICoqS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLioqIFRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggY29uY3VycmVuY3kgY29uY2VybnMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZywgZGF0YSB0cmFuc2ZlciwgYW5kIHJlZmNvdW50aW5nLiBUaGVzZSBpc3N1ZXMgYXJlIHRob3JvdWdobHkgYWRkcmVzc2VkIGJ5IHRoZSBleGlzdGluZyBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmNvdW50IGNoZWNraW5nIGluZnJhc3RydWN0dXJlLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gV2UmIzM5O3JlIHNhZmUgd2l0aCBLQVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBkdXJpbmcgcmV1c2Vwb3J0IHNvY2tldCBtaWdyYXRpb24gYnkgc2FmZWx5IGhhbmRsaW5nIG1zayBzb2NrZXQgcmVmY291bnRzLCBtb3ZpbmcgdG9rZW4gaGFzaCB0YWJsZSBlbnRyaWVzIChtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QpLCBhbmQgcHJvcGVybHkgY2xlYW5pbmcgdXAgYW5kIGZhbGxpbmcgYmFjayB3aGVuIG1wdGNwX3Rva2VuX2FjY2VwdCBmYWlscy5cblxuVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbmN1cnJlbmN5LCBSQ1Ugc2FmZXR5LCBzb2NrZXQgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUvZGVzdHJ1Y3Rpb24gc3RhdGUgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgYXJlYSBhcmUgdXNlLWFmdGVyLWZyZWUsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3IgbG9ja2luZy9kZWFkbG9jayBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBtZW1vcnkgY29weWluZyB0byB1c2Vyc3BhY2UsIHBhZGRpbmcvaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBNUFRDUCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGR1cmluZyByZXVzZXBvcnQgc29ja2V0IG1pZ3JhdGlvbiBieSBzYWZlbHkgaGFuZGxpbmcgbXNrIHNvY2tldCByZWZjb3VudHMsIG1vdmluZyB0b2tlbiBoYXNoIHRhYmxlIGVudHJpZXMgKG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCksIGFuZCBwcm9wZXJseSBjbGVhbmluZyB1cCBhbmQgZmFsbGluZyBiYWNrIHdoZW4gbXB0Y3BfdG9rZW5fYWNjZXB0IGZhaWxzLlxuXG5UaGVzZSBjaGFuZ2VzIGludm9sdmUgY29uY3VycmVuY3ksIFJDVSBzYWZldHksIHNvY2tldCByZWZjb3VudGluZywgYW5kIGxpZmVjeWNsZS9kZXN0cnVjdGlvbiBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBhcmVhIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcmVmY291bnRpbmcgaXNzdWVzLCBvciBsb2NraW5nL2RlYWRsb2NrIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG1lbW9yeSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgcGFkZGluZy9pbmZvLWxlYWtzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDk6NTQuODM3ODE1NDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODEzNDA1MTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVcIixcbiAgICBcIm1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fYWNjZXB0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3NrX2Nsb25lX2luaXRcIixcbiAgICBcInN1YmZsb3dfc3luX3JlY3Zfc29ja1wiLFxuICAgIFwiaW5ldF9yZXFza19jbG9uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBkdXJpbmcgcmV1c2Vwb3J0IHNvY2tldCBtaWdyYXRpb24gYnkgc2FmZWx5IGhhbmRsaW5nIG1zayBzb2NrZXQgcmVmY291bnRzLCBtb3ZpbmcgdG9rZW4gaGFzaCB0YWJsZSBlbnRyaWVzIChtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QpLCBhbmQgcHJvcGVybHkgY2xlYW5pbmcgdXAgYW5kIGZhbGxpbmcgYmFjayB3aGVuIG1wdGNwX3Rva2VuX2FjY2VwdCBmYWlscy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGludm9sdmUgY29uY3VycmVuY3ksIFJDVSBzYWZldHksIHNvY2tldCByZWZjb3VudGluZywgYW5kIGxpZmVjeWNsZS9kZXN0cnVjdGlvbiBzdGF0ZSBtYW5hZ2VtZW50LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBhcmVhIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcmVmY291bnRpbmcgaXNzdWVzLCBvciBsb2NraW5nL2RlYWRsb2NrIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIG1lbW9yeSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgcGFkZGluZy9pbmZvLWxlYWtzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcsIHRva2VuIGhhc2ggbWFuYWdlbWVudCwgYW5kIHNvY2tldCBjbG9uZSBlcnJvciBoYW5kbGluZyBkdXJpbmcgVENQL01QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gVGhpcyBsb2dpYyBpbnZvbHZlcyBzdWJ0bGUgUkNVLCByZWZjb3VudGluZywgYW5kIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc29ja2V0IHN5c2NhbGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDk6NTQuODM3ODE5NjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjAxMTY2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZjMwMGZlNzgyNzcxYTJhMDhiZmEzMWQ5YzViYWJmY2ZhZDAxMTZlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMjE6MDk6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbXB0Y3AuaCBiL2luY2x1ZGUvbmV0L21wdGNwLmhcXG5pbmRleCA0ODVkNTViNjZlYTY3Li5hZDcwMDViNTc0YmIxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L21wdGNwLmhcXG4rKysgYi9pbmNsdWRlL25ldC9tcHRjcC5oXFxuQEAgLTIxOSw2ICsyMTksOSBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbiBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBib29sIGF0dGFjaF9saXN0ZW5lcik7XFxuKy8qIENhbGxlciBtdXN0IGhvbGQgYW4gUkNVIHJlYWQtc2lkZSBsb2NrLiAqL1xcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XFxuIFxcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFxuQEAgLTMwNSw2ICszMDgsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXNcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuKy8qIENhbGxlciBtdXN0IGhvbGQgYW4gUkNVIHJlYWQtc2lkZSBsb2NrLiAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX2FjdGl2ZV9kZXRlY3RfYmxhY2tob2xlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBleHBpcmVkKSB7IH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG5pbmRleCA2MjU3NDU5YmNlZTI0Li44OTZmNDcyZGNiYTI5IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZnJtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwX2Vjbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L21wdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9hZGRyY29uZi5oXFx1MDAzZVxcbiBcXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVxcdTAwM2VzayktXFx1MDAzZWZhc3RvcGVuX3JzaywgbnJlcSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChyc2tfaXNfbXB0Y3AocmVxKSlcXG4rXFx0XFx0bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpO1xcbitcXG4gXFx0cmV0dXJuIG5yZXE7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5jIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5pbmRleCBlMWYwOGY3MWNkYjE2Li4zMDA2N2YyYTdjYThmIDEwMDY0NFxcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmNcXG5AQCAtMzY5Miw2ICszNjkyLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3koc3RydWN0IHNvY2sgKm5zaylcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2sobnNrKTtcXG4rXFxuK1xcdG1wdGNwX3JlbGVhc2Vfc2NoZWQobXNrKTtcXG4rXFx0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0NMT1NFKTtcXG4rXFx0LyogaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UoKSBjbGVhcnMgVENQIHNvY2tfb3BzIHN0YXRlIHZpYVxcbitcXHQgKiB0Y3Bfc2soKSwgYnV0IG5zayBpcyBhbiBNUFRDUCBtYXN0ZXIgc29ja2V0OyBrZWVwIHRoZSBpbmV0LWxldmVsXFxuK1xcdCAqIGRlc3Ryb3kgcHJlcGFyYXRpb24gaGVyZS5cXG4rXFx0ICovXFxuK1xcdGJoX3VubG9ja19zb2NrKG5zayk7XFxuK1xcdHNvY2tfcHV0KG5zayk7XFxuK1xcdHNvY2tfc2V0X2ZsYWcobnNrLCBTT0NLX0RFQUQpO1xcbitcXHR0Y3Bfb3JwaGFuX2NvdW50X2luYygpO1xcbitcXHRpbmV0X3NrKG5zayktXFx1MDAzZWluZXRfbnVtID0gMDtcXG4rXFx0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XFxuK31cXG4rXFxuIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc29jayAqc3NrLFxcbkBAIC0zNzUxLDExICszNzY5LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRsaXN0X2FkZChcXHUwMDI2c3ViZmxvdy1cXHUwMDNlbm9kZSwgXFx1MDAyNm1zay1cXHUwMDNlY29ubl9saXN0KTtcXG4gXFx0c29ja19ob2xkKHNzayk7XFxuIFxcbi1cXHQvKiBuZXcgbXBjIHN1YmZsb3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBuZXdseVxcbi1cXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxcbi1cXHQgKi9cXG4tXFx0bXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spO1xcbi1cXG4gXFx0Lyogc2V0IG1zayBhZGRyZXNzZXMgZWFybHkgdG8gZW5zdXJlIG1wdGNwX3BtX2dldF9sb2NhbF9pZCgpXFxuIFxcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxcbiBcXHQgKi9cXG5AQCAtMzc2NCw2ICszNzc3LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0bXB0Y3BfcmN2X3NwYWNlX2luaXQobXNrLCBzc2spO1xcbiBcXHRtc2stXFx1MDAzZXJjdnFfc3BhY2UudGltZSA9IG1wdGNwX3N0YW1wKCk7XFxuIFxcbitcXHRpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkge1xcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzdWJmbG93LVxcdTAwM2Vub2RlKTtcXG4rXFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWZpcnN0LCBOVUxMKTtcXG4rXFx0XFx0c29ja19wdXQoc3NrKTtcXG4rXFx0XFx0bXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShuc2spO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKG1wX29wdC1cXHUwMDNlc3Vib3B0aW9ucyBcXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxcbiBcXHRcXHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xcbiBcXHRiaF91bmxvY2tfc29jayhuc2spO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuaW5kZXggODdjY2I4NGU5OTI3Yy4uMjQ3NDQ5Y2MyZmViOSAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXFxuQEAgLTEwNzksOSArMTA3OSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gfVxcbiBcXG4gaW50IG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XFxuIHZvaWQgbXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7XFxuIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcXG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXFxuIFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xcbiBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXB0Y3BfdG9rZW5fZ2V0X3NvY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgdG9rZW4pO1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xcbmluZGV4IGFmODFhZDVlNjk5ZDEuLmQyY2QxMmZjMDM0MjEgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3N1YmZsb3cuY1xcbisrKyBiL25ldC9tcHRjcC9zdWJmbG93LmNcXG5AQCAtNDcsNiArNDcsNDEgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcdG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChyZXEpO1xcbiB9XFxuIFxcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG4rXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XFxuK1xcdHN0cnVjdCBtcHRjcF9zb2NrICptc2s7XFxuK1xcbitcXHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcXG4rXFx0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19hbnlfaGVsZCgpLFxcbitcXHRcXHRcXHQgXFxcIk1QVENQIHJlcXNrIGNsb25lIGNhbGxlZCB3aXRob3V0IFJDVVxcXCIpO1xcbitcXG4rXFx0LyogQSBub24tTlVMTCAtXFx1MDAzZW1zayBtZWFucyB0aGUgcmVxdWVzdCBvd25zIG9uZSByZWZlcmVuY2UuICBUaGUgY2xvbmVcXG4rXFx0ICogY29waWVkIG9ubHkgdGhlIHBvaW50ZXIsIHdoaWxlIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGNhbiBjb25jdXJyZW50bHlcXG4rXFx0ICogdHJhbnNmZXIgaXRzIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQuICBBY3F1aXJlIGEgcmVmZXJlbmNlIGZvciB0aGVcXG4rXFx0ICogY2xvbmUsIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIG9yaWdpbmFsIHJlcXVlc3Qgc3RpbGwgb3ducyB0aGUgc2FtZSBtc2suXFxuK1xcdCAqIE1QVENQIHNvY2tldHMgdXNlIFNMQUJfVFlQRVNBRkVfQllfUkNVIGFuZCBhbGwgY2xvbmUgY2FsbGVycyBydW4gaW5cXG4rXFx0ICogYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCBrZWVwaW5nIHRoZSBtZW1vcnkgc3RhYmxlIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRtc2sgPSBSRUFEX09OQ0Uoc3ViZmxvd19yZXEtXFx1MDAzZW1zayk7XFxuK1xcdGlmIChtc2spIHtcXG4rXFx0XFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xcbitcXG4rXFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm9fYWNxdWlyZShcXHUwMDI2c2stXFx1MDAzZXNrX3JlZmNudCkpIHtcXG4rXFx0XFx0XFx0bXNrID0gTlVMTDtcXG4rXFx0XFx0fSBlbHNlIGlmIChSRUFEX09OQ0Uoc3ViZmxvd19yZXEtXFx1MDAzZW1zaykgIT0gbXNrKSB7XFxuK1xcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4rXFx0XFx0XFx0bXNrID0gTlVMTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXdfc3ViZmxvd19yZXEtXFx1MDAzZW1zayA9IG1zaztcXG4rXFxuK1xcdG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzdWJmbG93X2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLCB1MzIgbm9uY2UxLCB1MzIgbm9uY2UyLFxcbiBcXHRcXHRcXHRcXHQgIHZvaWQgKmhtYWMpXFxuIHtcXG5AQCAtODg1LDggKzkyMCwxMCBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcbiBcXHRcXHRpZiAoY3R4LVxcdTAwM2VtcF9jYXBhYmxlKSB7XFxuIFxcdFxcdFxcdGN0eC1cXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXFx1MDAzZWNvbm4sIFxcdTAwMjZtcF9vcHQsIGNoaWxkLCByZXEpO1xcbi1cXHRcXHRcXHRpZiAoIWN0eC1cXHUwMDNlY29ubilcXG4rXFx0XFx0XFx0aWYgKCFjdHgtXFx1MDAzZWNvbm4pIHtcXG4rXFx0XFx0XFx0XFx0ZmFsbGJhY2sgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbitcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRjdHgtXFx1MDAzZXN1YmZsb3dfaWQgPSAxO1xcbiBcXHRcXHRcXHRvd25lciA9IG1wdGNwX3NrKGN0eC1cXHUwMDNlY29ubik7XFxuQEAgLTkyMyw3ICs5NjAsNyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdC8qIG1vdmUgdGhlIG1zayByZWZlcmVuY2Ugb3duZXJzaGlwIHRvIHRoZSBzdWJmbG93ICovXFxuLVxcdFxcdFxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2sgPSBOVUxMO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2ssIE5VTEwpO1xcbiBcXHRcXHRcXHRjdHgtXFx1MDAzZWNvbm4gPSAoc3RydWN0IHNvY2sgKilvd25lcjtcXG4gXFxuIFxcdFxcdFxcdGlmIChzdWJmbG93X3VzZV9kaWZmZXJlbnRfc3BvcnQob3duZXIsIHNrKSkge1xcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW4uYyBiL25ldC9tcHRjcC90b2tlbi5jXFxuaW5kZXggZjFhNTBmMzY3YWRkOC4uZTBmMjgyM2Y5MmVmYiAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW4uY1xcbisrKyBiL25ldC9tcHRjcC90b2tlbi5jXFxuQEAgLTE4MCw2ICsxODAsNDMgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKipcXG4rICogbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0IC0gbW92ZSByZXF1ZXN0IHRva2VuIG93bmVyc2hpcCB0byBhIGNsb25lXFxuKyAqIEByZXE6IG9yaWdpbmFsIHJlcXVlc3Qgc29ja2V0XFxuKyAqIEBuZXdfcmVxOiBjbG9uZWQgcmVxdWVzdCBzb2NrZXRcXG4rICpcXG4rICogTW92ZSB0aGUgdG9rZW4gaGFzaCBlbnRyeSBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRvIGl0cyBjbG9uZS5cXG4rICovXFxuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcXG4re1xcbitcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG4rXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XFxuK1xcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbitcXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuK1xcbitcXHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcXG4rXFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKSB7XFxuK1xcdFxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRidWNrZXQgPSB0b2tlbl9idWNrZXQoc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlKSkge1xcbitcXHRcXHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuK1xcdFxcdGlmIChwb3MgPT0gc3ViZmxvd19yZXEpXFxuK1xcdFxcdFxcdGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZuZXdfc3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YnVja2V0LVxcdTAwM2Vsb2NrKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaFxcbiAgKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gYmUgcmVtb3ZlZFxcbkBAIC0xODcsMjQgKzIyNCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcXG4gICpcXG4gICogQ2FsbGVkIHdoZW4gYSBTWU4gcGFja2V0IGNyZWF0ZXMgYSBuZXcgbG9naWNhbCBjb25uZWN0aW9uLCBpLmUuXFxuICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIG9uIHN1Y2Nlc3MuXFxuICAqL1xcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcXG4rYm9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEsXFxuIFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcXG4gXFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xcbitcXHRib29sIHJldCA9IGZhbHNlO1xcbiBcXG4tXFx0c29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLVxcdTAwM2Vza19wcm90LCAxKTtcXG4gXFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS1cXHUwMDNldG9rZW4pO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2cmVxLVxcdTAwM2V0b2tlbl9ub2RlKSlcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbi1cXHQvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqL1xcbiBcXHRwb3MgPSBfX3Rva2VuX2xvb2t1cF9yZXEoYnVja2V0LCByZXEtXFx1MDAzZXRva2VuKTtcXG4tXFx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHJlcSkpXFxuLVxcdFxcdGhsaXN0X251bGxzX2RlbF9pbml0X3JjdShcXHUwMDI2cmVxLVxcdTAwM2V0b2tlbl9ub2RlKTtcXG4rXFx0aWYgKHBvcyAhPSByZXEpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFxcdTAwMjZyZXEtXFx1MDAzZXRva2VuX25vZGUpO1xcbiBcXHRfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssIFxcdTAwMjZidWNrZXQtXFx1MDAzZW1za19jaGFpbik7XFxuK1xcdHJldCA9IHRydWU7XFxuK1xcbit1bmxvY2s6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXFx1MDAzZXNrX3Byb3QsIDEpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gYm9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKVxcbkBAIC0zNTUsMTYgKzQwNCwyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbiBcXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuIFxcbi1cXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXFx1MDAyNnN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbl9ub2RlKSlcXG4rXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cXHUwMDNldG9rZW4pO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2c3ViZmxvd19yZXEtXFx1MDAzZXRva2VuX25vZGUpKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuIFxcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuLVxcdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHtcXG4rXFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xcbiBcXHRcXHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXFx1MDAyNnBvcy1cXHUwMDNldG9rZW5fbm9kZSk7XFxuIFxcdFxcdGJ1Y2tldC1cXHUwMDNlY2hhaW5fbGVuLS07XFxuIFxcdH1cXG4rXFxuK3VubG9jazpcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmMgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXFxuaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDRcXG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXFxuKysrIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsXFxuIFxcdFxcdFxcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XFxuIFxcdG1zay1cXHUwMDNldG9rZW4gPSByZXEtXFx1MDAzZXRva2VuO1xcbi1cXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xcbitcXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTtcXG4gXFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFxcdTAwMjZpbml0X25ldCwgbXNrLVxcdTAwM2V0b2tlbikpO1xcbiBcXG4gXFx0LyogdGhpcyBpcyBub3cgYSBuby1vcCAqL1xcbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcXG4gXFx0XFx0XFx0bXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTtcXG4gXFx0bXNrLVxcdTAwM2V0b2tlbiA9IHJlcS1cXHUwMDNldG9rZW47XFxuLVxcdG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7XFxuK1xcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xcbiBcXG4gXFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXFxuIFxcdHJlZmNvdW50X3NldChcXHUwMDI2c2stXFx1MDAzZXNrX3JlZmNudCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjA5OjU2LjI5ODU5MDE3NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjEzNTYyMzE2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lXCIsXG4gICAgXCJtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3Rva2VuX2FjY2VwdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF9za19jbG9uZV9pbml0XCIsXG4gICAgXCJzdWJmbG93X3N5bl9yZWN2X3NvY2tcIixcbiAgICBcImluZXRfcmVxc2tfY2xvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcsIHRva2VuIGhhc2ggbWFuYWdlbWVudCwgYW5kIHNvY2tldCBjbG9uZSBlcnJvciBoYW5kbGluZyBkdXJpbmcgVENQL01QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gVGhpcyBsb2dpYyBpbnZvbHZlcyBzdWJ0bGUgUkNVLCByZWZjb3VudGluZywgYW5kIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc29ja2V0IHN5c2NhbGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ZjMwMGZlNzgyNzcxYTJhMDhiZmEzMWQ5YzViYWJmY2ZhZDAxMTZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMTowOTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21wdGNwLmggYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5pbmRleCA0ODVkNTViNjZlYTY3Li5hZDcwMDViNTc0YmIxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuKysrIGIvaW5jbHVkZS9uZXQvbXB0Y3AuaFxuQEAgLTIxOSw2ICsyMTksOSBAQCBpbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbiBcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcbiBcdFx0XHRcdFx0ICAgICAgIGJvb2wgYXR0YWNoX2xpc3RlbmVyKTtcbisvKiBDYWxsZXIgbXVzdCBob2xkIGFuIFJDVSByZWFkLXNpZGUgbG9jay4gKi9cbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiBcbiBfX2JlMzIgbXB0Y3BfZ2V0X3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbkBAIC0zMDUsNiArMzA4LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rLyogQ2FsbGVyIG11c3QgaG9sZCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2suICovXG4rc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIF9fYmUzMiBtcHRjcF9yZXNldF9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikgIHsgcmV0dXJuIGh0b25sKDB1KTsgfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF9hY3RpdmVfZGV0ZWN0X2JsYWNraG9sZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgZXhwaXJlZCkgeyB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbmluZGV4IDYyNTc0NTliY2VlMjQuLjg5NmY0NzJkY2JhMjkgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwX2Vjbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L21wdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29ja19yZXVzZXBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9hZGRyY29uZi5oXHUwMDNlXG4gXG5AQCAtOTYxLDYgKzk2Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrICppbmV0X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRjcF9zayhucmVxLVx1MDAzZXNrKS1cdTAwM2VmYXN0b3Blbl9yc2ssIG5yZXEpO1xuIFx0fVxuIFxuK1x0aWYgKHJza19pc19tcHRjcChyZXEpKVxuK1x0XHRtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHJlcSwgbnJlcSk7XG4rXG4gXHRyZXR1cm4gbnJlcTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Byb3RvY29sLmMgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuaW5kZXggZTFmMDhmNzFjZGIxNi4uMzAwNjdmMmE3Y2E4ZiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9wcm90b2NvbC5jXG4rKysgYi9uZXQvbXB0Y3AvcHJvdG9jb2wuY1xuQEAgLTM2OTIsNiArMzY5MiwyNCBAQCBzdGF0aWMgdm9pZCBtcHRjcF9jb3B5X2lwX29wdGlvbnMoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShzdHJ1Y3Qgc29jayAqbnNrKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zb2NrICptc2sgPSBtcHRjcF9zayhuc2spO1xuK1xuK1x0bXB0Y3BfcmVsZWFzZV9zY2hlZChtc2spO1xuK1x0bXB0Y3Bfc2V0X3N0YXRlKG5zaywgVENQX0NMT1NFKTtcbitcdC8qIGluZXRfY3NrX3ByZXBhcmVfZm9yY2VkX2Nsb3NlKCkgY2xlYXJzIFRDUCBzb2NrX29wcyBzdGF0ZSB2aWFcbitcdCAqIHRjcF9zaygpLCBidXQgbnNrIGlzIGFuIE1QVENQIG1hc3RlciBzb2NrZXQ7IGtlZXAgdGhlIGluZXQtbGV2ZWxcbitcdCAqIGRlc3Ryb3kgcHJlcGFyYXRpb24gaGVyZS5cbitcdCAqL1xuK1x0YmhfdW5sb2NrX3NvY2sobnNrKTtcbitcdHNvY2tfcHV0KG5zayk7XG4rXHRzb2NrX3NldF9mbGFnKG5zaywgU09DS19ERUFEKTtcbitcdHRjcF9vcnBoYW5fY291bnRfaW5jKCk7XG4rXHRpbmV0X3NrKG5zayktXHUwMDNlaW5ldF9udW0gPSAwO1xuK1x0aW5ldF9jc2tfZGVzdHJveV9zb2NrKG5zayk7XG4rfVxuK1xuIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqbXBfb3B0LFxuIFx0XHRcdFx0IHN0cnVjdCBzb2NrICpzc2ssXG5AQCAtMzc1MSwxMSArMzc2OSw2IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdGxpc3RfYWRkKFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSwgXHUwMDI2bXNrLVx1MDAzZWNvbm5fbGlzdCk7XG4gXHRzb2NrX2hvbGQoc3NrKTtcbiBcbi1cdC8qIG5ldyBtcGMgc3ViZmxvdyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIG5ld2x5XG4tXHQgKiBjcmVhdGVkIG1wdGNwIHNvY2tldFxuLVx0ICovXG4tXHRtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zayk7XG4tXG4gXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcbiBcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxuIFx0ICovXG5AQCAtMzc2NCw2ICszNzc3LDE0IEBAIHN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG1wdGNwX3Jjdl9zcGFjZV9pbml0KG1zaywgc3NrKTtcbiBcdG1zay1cdTAwM2VyY3ZxX3NwYWNlLnRpbWUgPSBtcHRjcF9zdGFtcCgpO1xuIFxuK1x0aWYgKCFtcHRjcF90b2tlbl9hY2NlcHQoc3ViZmxvd19yZXEsIG1zaykpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJmbG93LVx1MDAzZW5vZGUpO1xuK1x0XHRXUklURV9PTkNFKG1zay1cdTAwM2VmaXJzdCwgTlVMTCk7XG4rXHRcdHNvY2tfcHV0KHNzayk7XG4rXHRcdG1wdGNwX3NrX2Nsb25lX2Rlc3Ryb3kobnNrKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRpZiAobXBfb3B0LVx1MDAzZXN1Ym9wdGlvbnMgXHUwMDI2IE9QVElPTl9NUFRDUF9NUENfQUNLKVxuIFx0XHRfX21wdGNwX3N1YmZsb3dfZnVsbHlfZXN0YWJsaXNoZWQobXNrLCBzdWJmbG93LCBtcF9vcHQpO1xuIFx0YmhfdW5sb2NrX3NvY2sobnNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaCBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5pbmRleCA4N2NjYjg0ZTk5MjdjLi4yNDc0NDljYzJmZWI5IDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmhcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5oXG5AQCAtMTA3OSw5ICsxMDc5LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIH1cbiBcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbit2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSk7XG4gdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcbiBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7XG4tdm9pZCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pO1xuIHN0cnVjdCBtcHRjcF9zb2NrICptcHRjcF90b2tlbl9nZXRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3N1YmZsb3cuYyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbmluZGV4IGFmODFhZDVlNjk5ZDEuLmQyY2QxMmZjMDM0MjEgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3Avc3ViZmxvdy5jXG4rKysgYi9uZXQvbXB0Y3Avc3ViZmxvdy5jXG5AQCAtNDcsNiArNDcsNDEgQEAgc3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3QocmVxKTtcbiB9XG4gXG4rdm9pZCBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxO1xuK1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcbitcbitcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuK1x0UkNVX0xPQ0tERVBfV0FSTighcmN1X3JlYWRfbG9ja19hbnlfaGVsZCgpLFxuK1x0XHRcdCBcIk1QVENQIHJlcXNrIGNsb25lIGNhbGxlZCB3aXRob3V0IFJDVVwiKTtcbitcbitcdC8qIEEgbm9uLU5VTEwgLVx1MDAzZW1zayBtZWFucyB0aGUgcmVxdWVzdCBvd25zIG9uZSByZWZlcmVuY2UuICBUaGUgY2xvbmVcbitcdCAqIGNvcGllZCBvbmx5IHRoZSBwb2ludGVyLCB3aGlsZSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBjYW4gY29uY3VycmVudGx5XG4rXHQgKiB0cmFuc2ZlciBpdHMgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZC4gIEFjcXVpcmUgYSByZWZlcmVuY2UgZm9yIHRoZVxuK1x0ICogY2xvbmUsIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIG9yaWdpbmFsIHJlcXVlc3Qgc3RpbGwgb3ducyB0aGUgc2FtZSBtc2suXG4rXHQgKiBNUFRDUCBzb2NrZXRzIHVzZSBTTEFCX1RZUEVTQUZFX0JZX1JDVSBhbmQgYWxsIGNsb25lIGNhbGxlcnMgcnVuIGluXG4rXHQgKiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIGtlZXBpbmcgdGhlIG1lbW9yeSBzdGFibGUgaGVyZS5cbitcdCAqL1xuK1x0bXNrID0gUkVBRF9PTkNFKHN1YmZsb3dfcmVxLVx1MDAzZW1zayk7XG4rXHRpZiAobXNrKSB7XG4rXHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcbitcbitcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm9fYWNxdWlyZShcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKSB7XG4rXHRcdFx0bXNrID0gTlVMTDtcbitcdFx0fSBlbHNlIGlmIChSRUFEX09OQ0Uoc3ViZmxvd19yZXEtXHUwMDNlbXNrKSAhPSBtc2spIHtcbitcdFx0XHRzb2NrX3B1dChzayk7XG4rXHRcdFx0bXNrID0gTlVMTDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0bmV3X3N1YmZsb3dfcmVxLVx1MDAzZW1zayA9IG1zaztcbitcbitcdG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChyZXEsIG5ld19yZXEpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzdWJmbG93X2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLCB1MzIgbm9uY2UxLCB1MzIgbm9uY2UyLFxuIFx0XHRcdFx0ICB2b2lkICpobWFjKVxuIHtcbkBAIC04ODUsOCArOTIwLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc3ViZmxvd19zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcbiBcdFx0aWYgKGN0eC1cdTAwM2VtcF9jYXBhYmxlKSB7XG4gXHRcdFx0Y3R4LVx1MDAzZWNvbm4gPSBtcHRjcF9za19jbG9uZV9pbml0KGxpc3RlbmVyLVx1MDAzZWNvbm4sIFx1MDAyNm1wX29wdCwgY2hpbGQsIHJlcSk7XG4tXHRcdFx0aWYgKCFjdHgtXHUwMDNlY29ubilcbitcdFx0XHRpZiAoIWN0eC1cdTAwM2Vjb25uKSB7XG4rXHRcdFx0XHRmYWxsYmFjayA9IHRydWU7XG4gXHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuK1x0XHRcdH1cbiBcbiBcdFx0XHRjdHgtXHUwMDNlc3ViZmxvd19pZCA9IDE7XG4gXHRcdFx0b3duZXIgPSBtcHRjcF9zayhjdHgtXHUwMDNlY29ubik7XG5AQCAtOTIzLDcgKzk2MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc3ViZmxvd19zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHR9XG4gXG4gXHRcdFx0LyogbW92ZSB0aGUgbXNrIHJlZmVyZW5jZSBvd25lcnNoaXAgdG8gdGhlIHN1YmZsb3cgKi9cbi1cdFx0XHRzdWJmbG93X3JlcS1cdTAwM2Vtc2sgPSBOVUxMO1xuK1x0XHRcdFdSSVRFX09OQ0Uoc3ViZmxvd19yZXEtXHUwMDNlbXNrLCBOVUxMKTtcbiBcdFx0XHRjdHgtXHUwMDNlY29ubiA9IChzdHJ1Y3Qgc29jayAqKW93bmVyO1xuIFxuIFx0XHRcdGlmIChzdWJmbG93X3VzZV9kaWZmZXJlbnRfc3BvcnQob3duZXIsIHNrKSkge1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC90b2tlbi5jIGIvbmV0L21wdGNwL3Rva2VuLmNcbmluZGV4IGYxYTUwZjM2N2FkZDguLmUwZjI4MjNmOTJlZmIgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW4uY1xuKysrIGIvbmV0L21wdGNwL3Rva2VuLmNcbkBAIC0xODAsNiArMTgwLDQzIEBAIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qKlxuKyAqIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCAtIG1vdmUgcmVxdWVzdCB0b2tlbiBvd25lcnNoaXAgdG8gYSBjbG9uZVxuKyAqIEByZXE6IG9yaWdpbmFsIHJlcXVlc3Qgc29ja2V0XG4rICogQG5ld19yZXE6IGNsb25lZCByZXF1ZXN0IHNvY2tldFxuKyAqXG4rICogTW92ZSB0aGUgdG9rZW4gaGFzaCBlbnRyeSBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRvIGl0cyBjbG9uZS5cbisgKi9cbit2b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4rXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4rXG4rXHRuZXdfc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhuZXdfcmVxKTtcbitcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSkge1xuK1x0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKSB7XG4rXHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbitcdFx0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSlcbitcdFx0XHRobGlzdF9udWxsc19yZXBsYWNlX2luaXRfcmN1KFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZuZXdfc3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QobmV3X3JlcSk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rfVxuK1xuIC8qKlxuICAqIG1wdGNwX3Rva2VuX2FjY2VwdCAtIHJlcGxhY2UgYSByZXEgc2sgd2l0aCBmdWxsIHNvY2sgaW4gdG9rZW4gaGFzaFxuICAqIEByZXE6IHRoZSByZXF1ZXN0IHNvY2tldCB0byBiZSByZW1vdmVkXG5AQCAtMTg3LDI0ICsyMjQsMzYgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gICpcbiAgKiBDYWxsZWQgd2hlbiBhIFNZTiBwYWNrZXQgY3JlYXRlcyBhIG5ldyBsb2dpY2FsIGNvbm5lY3Rpb24sIGkuZS5cbiAgKiBpcyBub3QgYSBqb2luIHJlcXVlc3QuXG4rICpcbisgKiBSZXR1cm46IHRydWUgb24gc3VjY2Vzcy5cbiAgKi9cbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbitib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSxcbiBcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuIFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xuK1x0Ym9vbCByZXQgPSBmYWxzZTtcbiBcbi1cdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cdTAwM2Vza19wcm90LCAxKTtcbiBcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChyZXEtXHUwMDNldG9rZW4pO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZyZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogcGVkYW50aWMgbG9va3VwIGNoZWNrIGZvciB0aGUgbW92ZWQgdG9rZW4gKi9cbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHJlcS1cdTAwM2V0b2tlbik7XG4tXHRpZiAoIVdBUk5fT05fT05DRShwb3MgIT0gcmVxKSlcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbitcdGlmIChwb3MgIT0gcmVxKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdGhsaXN0X251bGxzX2RlbF9pbml0X3JjdShcdTAwMjZyZXEtXHUwMDNldG9rZW5fbm9kZSk7XG4gXHRfX3NrX251bGxzX2FkZF9ub2RlX3JjdSgoc3RydWN0IHNvY2sgKiltc2ssIFx1MDAyNmJ1Y2tldC1cdTAwM2Vtc2tfY2hhaW4pO1xuK1x0cmV0ID0gdHJ1ZTtcbitcbit1bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stXHUwMDNlc2tfcHJvdCwgMSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBib29sIG1wdGNwX3Rva2VuX2V4aXN0cyh1MzIgdG9rZW4pXG5AQCAtMzU1LDE2ICs0MDQsMjEgQEAgdm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4gXG4tXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWRfbG9ja2xlc3MoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4gXHRcdHJldHVybjtcbiBcbiBcdGJ1Y2tldCA9IHRva2VuX2J1Y2tldChzdWJmbG93X3JlcS1cdTAwM2V0b2tlbik7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKVxuK1x0XHRnb3RvIHVubG9jaztcbitcbiBcdHBvcyA9IF9fdG9rZW5fbG9va3VwX3JlcShidWNrZXQsIHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbi1cdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSBzdWJmbG93X3JlcSkpIHtcbitcdGlmIChwb3MgPT0gc3ViZmxvd19yZXEpIHtcbiBcdFx0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnBvcy1cdTAwM2V0b2tlbl9ub2RlKTtcbiBcdFx0YnVja2V0LVx1MDAzZWNoYWluX2xlbi0tO1xuIFx0fVxuK1xuK3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuX3Rlc3QuYyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbmluZGV4IDRmYzM5ZmEyZTI2MmQuLmJlOWFjY2U4YTU2NzMgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG4rKysgYi9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jXG5AQCAtOTksNyArOTksNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2FjY2VwdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcbiBcdFx0XHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xuIFx0bXNrLVx1MDAzZXRva2VuID0gcmVxLVx1MDAzZXRva2VuO1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFx0S1VOSVRfRVhQRUNUX1BUUl9FUSh0ZXN0LCBtc2ssIG1wdGNwX3Rva2VuX2dldF9zb2NrKFx1MDAyNmluaXRfbmV0LCBtc2stXHUwMDNldG9rZW4pKTtcbiBcbiBcdC8qIHRoaXMgaXMgbm93IGEgbm8tb3AgKi9cbkBAIC0xMjIsNyArMTIyLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfdG9rZW5fdGVzdF9kZXN0cm95ZWQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIDAsXG4gXHRcdFx0bXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpKTtcbiBcdG1zay1cdTAwM2V0b2tlbiA9IHJlcS1cdTAwM2V0b2tlbjtcbi1cdG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zayk7XG4rXHRLVU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spKTtcbiBcbiBcdC8qIHNpbXVsYXRlIHJhY2Ugb24gcmVtb3ZhbCAqL1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCwgMCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowOTo1Ni4yOTg1OTE4NDVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDkzMzg2Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgZnV6emFibGUsIHdoYXQgY29uZmlndXJhdGlvbnMgd2UnbGwgbmVlZCwgYW5kIHdoaWNoIHN5bWJvbHMgYXJlIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBwYXRjaCBkZXRhaWxzLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgdG91Y2hlZDogYGluY2x1ZGUvbmV0L21wdGNwLmhgLCBgbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY2AsIGBuZXQvbXB0Y3AvcHJvdG9jb2wuY2AsIGBuZXQvbXB0Y3AvcHJvdG9jb2wuaGAsIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYCwgYG5ldC9tcHRjcC90b2tlbi5jYCwgYW5kIGBuZXQvbXB0Y3AvdG9rZW5fdGVzdC5jYC4gVGhlIGNoYW5nZXMgc2VlbSB0byBjZW50ZXIgYXJvdW5kIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgYG1wdGNwX3NrX2Nsb25lX2luaXRgIGFuZCB0b2tlbiBoYW5kbGluZyB3aXRoaW4gdGhlIE1QVENQIHN0YWNrLCBwb3RlbnRpYWxseSBpbXBsZW1lbnRpbmcgYW5kIHJlZmluaW5nIHRoZSBzdWJmbG93IGNsb25pbmcgcHJvY2Vzcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBJcyB0aGlzICpyZWFjaGFibGUqIGNvZGU/IEFic29sdXRlbHkuIE1QVENQIGlzIHBhcnQgb2YgdGhlIGNvcmUgTGludXggbmV0d29ya2luZyBzdGFjay4gSXQncyBhY2Nlc3NpYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgYW5kLCB0aGFua2Z1bGx5LCBjYW4gYmUgZXhlcmNpc2VkIHdpdGggbmV0d29yayB0cmFmZmljLCBsb29wYmFjaywgdHVuL3RhcCBpbnRlcmZhY2VzLCBhbmQgUUVNVSBvciBhIGNsb3VkIGVudmlyb25tZW50LiBUaGF04oCZcyBhIGJpZyB3aW4gZm9yIGZ1enppbmcuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIE1QVENQLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIG9yIGp1c3QgcXVpY2tseSBjaGVjayB0aGUgYG5ldC9tcHRjcC9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIGNydWNpYWwgdG8gZW5zdXJlIHRoYXQgTVBUQ1AgaXMgZW5hYmxlZCBpbiBhIGNvbmZpZyBiZWZvcmUgSSB0cnkgdG8gdGFyZ2V0IGl0IHdpdGggbXkgZnV6emluZyBzZXR1cC4gR290dGEgbWFrZSBzdXJlIGl0J3MgZXZlbiBjb21waWxlZCBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NzE3NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjA5OjU5Ljc5MTk3OTYzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc2MzQxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnLTEtXFxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWctMjQtXFxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjA5OjU5LjgzNjc0Njk1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDE4NTMzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBpbml0aWFsIGxpbmVzLCBzYXkgdGhlIGZpcnN0IHRoaXJ0eSBvciBzby4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmFzaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBNdWx0aXBhdGggVENQLiBUaGlzIGlzIHdoZXJlIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0gZGVmaW5lcyB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGhvdyB0aGV5J3JlIGVuYWJsZWQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0byBzZWUgdGhlIGNvcmUgTVBUQ1AgbW9kdWxlIGRlZmluZWQgZmlyc3QsIGxpa2VseSB3aXRoIGEgYENPTkZJR19NUFRDUGAgc3ltYm9sLiBUaGVuLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGZsYWdzIHRoYXQgY29udHJvbCBzcGVjaWZpYyBmZWF0dXJlcyDigJMgbWF5YmUgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHN1YmZsb3cgc2NoZWR1bGVycywgb3IgdGhlIGluY2x1c2lvbiBvZiBwYXJ0aWN1bGFyIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zLiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgbGlrZSBUQ1Agb3IgTkVULiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgc29tZSBgaGVscGAgdGV4dCB0aGF0IGRlc2NyaWJlcyB3aGF0IGVhY2ggb3B0aW9uIGRvZXMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZXNlIGZsYWdzIHRob3JvdWdobHkgc2luY2UgdGhleSBkaXJlY3RseSBpbmZsdWVuY2UgaG93IE1QVENQIGJlaGF2ZXMgaW4gZGlmZmVyZW50IHNjZW5hcmlvcy4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIGRlZmF1bHRzLCB0b28uIFRoZXkgd2lsbCBnaXZlIGEgaGludCBhcyB0byB3aGF0IHRoZSBkZXZlbG9wZXJzIHRob3VnaHQgd291bGQgYmUgdGhlIGNvbW1vbiBhbmQgdXNlZnVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGFueSBleHBlcmltZW50YWwgb3IgcG90ZW50aWFsbHkgdW5zdGFibGUgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgYnkgZGVmYXVsdC4gT2theSwgbGV0J3Mgc3RhcnQgcmVhZGluZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MDIuMjM4NjAyODE4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuICAzMTpcXHRcXHQgIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdFxcbiAgMzI6XFx0XFx0ICBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICAzNTpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MDIuMjM4NjYwMTU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2MDMwNjUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFRyaWdnZXJpbmcgTWVjaGFuaXNtcyBvZiBgaW5ldF9yZXFza19jbG9uZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggYGluZXRfcmVxc2tfY2xvbmVgIGlzIGludm9rZWQuIEl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiwgc28ga25vd2luZyBpdHMgY2FsbCBwYXRocyBpcyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoZSBUQ1AvSVAgc3RhY2suIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHRyYWNlIHRoZSBjYWxscy4gSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgaXRzIGRpcmVjdCBjYWxsZXJzIHRvIG1hcCBvdXQgdGhlIGluaXRpYWwgc2V0IG9mIHBvc3NpYmlsaXRpZXMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludHMsIGFuZCBmcm9tIHRoZXJlLCBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBsZWFkcyB0byB0aG9zZSBjYWxscy4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBjb21waWxlciBvcHRpbWl6YXRpb25zIG9yIGlubGluaW5nIHRoYXQgY291bGQgb2JmdXNjYXRlIHRoZSBjYWxsIGdyYXBoIHNvbWV3aGF0LCBidXQgdGhlIGJhc2ljcyBzaG91bGQgYmUgZGlzY2VybmlibGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCB0aGUgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCB0byBpdCwgdG8gc2VlIHRoZSBraW5kIG9mIGluZm9ybWF0aW9uIHRoYXQgaXQgaXMgd29ya2luZyB3aXRoLiBVbmRlcnN0YW5kaW5nIHRoYXQgZGF0YSBmbG93IGlzIG9mdGVuIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAyMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MDQuNTk4OTY4OTA5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjk4MDcwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldF9yZXFza19jbG9uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTkwNT12b2lkIF9fcmVxc2tfZnJlZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTkxMy1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjkxNDpzdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldF9yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy05MTUtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTEwMzc9c3RhdGljIHZvaWQgcmVxc2tfdGltZXJfaGFuZGxlcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA1My1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjEwNTQ6XFx0XFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBuc2spO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTA1NS1cXHRcXHRpZiAoIW5yZXEpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTE0MjE9c3RydWN0IHNvY2sgKmluZXRfY3NrX2NvbXBsZXRlX2hhc2hkYW5jZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpjaGlsZCxcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzNC1cXHRcXHRcXHQvKiBob2xkIGEgcmVmY250IGZvciB0aGUgbnJlcS1cXHUwMDNlcnNrX2xpc3RlbmVyXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYzoxNDM1OlxcdFxcdFxcdCAqIHdoaWNoIGlzIGFzc2lnbmVkIGluIGluZXRfcmVxc2tfY2xvbmUoKVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQzNi1cXHRcXHRcXHQgKi9cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE0MzctXFx0XFx0XFx0c29ja19ob2xkKHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE0Mzg6XFx0XFx0XFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDM5LVxcdFxcdFxcdGlmICghbnJlcSkge1xcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNDcwPXZvaWQgaW5ldF9jc2tfbGlzdGVuX3N0b3Aoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNDk0LVxcdFxcdGlmIChuc2spIHtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE0OTU6XFx0XFx0XFx0bnJlcSA9IGluZXRfcmVxc2tfY2xvbmUocmVxLCBuc2spO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtMTQ5Ni1cXHRcXHRcXHRpZiAobnJlcSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDowNi4yMjg3ODExMjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjQyOTYzMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1QVENQIFJlcXVlc3QgU29ja2V0IENsb25pbmc6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBjZW50cmFsIHRoZW1lOiBjbG9uaW5nIHJlcXVlc3Qgc29ja2V0cywgcGFydGljdWxhcmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBNUFRDUC4gYGluZXRfcmVxc2tfY2xvbmVgIGlzIHRoZSBiYXNlIGZ1bmN0aW9uLCB1c2VkIGluIHN0YW5kYXJkIFRDUCBsaXN0ZW5lciBzY2VuYXJpb3MsIGFuZCByZXVzZXBvcnQsIGFuZCBTWU4tQUNLIHJldHJhbnNtaXNzaW9ucywgZmFzdG9wZW4sIGxpc3RlbiBzdG9wIHNpdHVhdGlvbnMsIGhhbmRsaW5nIG1pZ3JhdGlvbnMgYW5kIGNsb25pbmcgb2YgcmVxdWVzdCBzb2NrZXRzIGluIHZhcmlvdXMgY29udGV4dHMsIGluY2x1ZGluZyB0aW1lcnMuIEhvd2V2ZXIsIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBNUFRDUC1zcGVjaWZpYyBmdW5jdGlvbnMuIEkgc2VlIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgd2hpY2ggaGFuZGxlcyB0aGUgTVBUQ1Atc3BlY2lmaWMgY2xvbmluZywgZGVhbGluZyB3aXRoIHJlZmVyZW5jZXMgYW5kIHRva2VuIG1vdmVtZW50cy5cblxuSSd2ZSBhbHNvIGdvdCBteSBleWUgb24gYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdGAsIGBtcHRjcF90b2tlbl9hY2NlcHRgLCBgbXB0Y3Bfc2tfY2xvbmVfaW5pdGAsIGFuZCBgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveWAuIEFsc28gbm90ZSBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYCBpcyBpbiB0aGUgbWl4IGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IG1vZGlmaWNhdGlvbnMsIGFsbCBkZWFsaW5nIHdpdGggY2xvbmluZyBvciB0b2tlbiBtYW5hZ2VtZW50LlxuXG5Ob3csIGxldCBtZSBjaGVjayB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG9mIGludGVyZXN0LiBJJ3ZlIGdvdCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYG1wdGNwX3NrX2Nsb25lX2luaXRgLCBhbmQgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2AuIEkndmUgYWxzbyBub3RlZCB0aGF0IGBpbmV0X3JlcXNrX2Nsb25lYCBpcyBpbiB0aGUgbGlzdCwgYnV0IGl0J3MgbW9yZSBnZW5lcmFsIGFuZCBub3QgTVBUQ1Atc3BlY2lmaWMuXG5cbmBpbmV0X3JlcXNrX2Nsb25lYCBpcyB1c2VkIGluIG11bHRpcGxlIHBsYWNlcywgYHJlcXNrX3RpbWVyX2hhbmRsZXJgLCBgaW5ldF9jc2tfY29tcGxldGVfaGFzaGRhbmNlYCwgYW5kIGBpbmV0X2Nza19saXN0ZW5fc3RvcGAgaW4gVENQIGNvbm5lY3Rpb24gaGFuZGxpbmcuIFRoYXQncyBhIGdvb2QgaW5kaWNhdGlvbiBvZiBpdHMgdWJpcXVpdHkgYW5kIHRoZXJlZm9yZSBub3QgYSBnb29kIGZvY3VzIGZvciBmdXp6aW5nLiBIb3dldmVyLCB0aG9zZSBNUFRDUCBzcGVjaWZpYyBmdW5jdGlvbnMgcmVhbGx5IGxvb2sgbGlrZSBnb29kIHRhcmdldHMuXG5cbk9rYXksIGxldCdzIGFzc2VzcyBpZiB0aGlzIGFyZWEgaXMgXCJXb3J0aEZ1enppbmdcIi4gIERlZmluaXRlbHkuICBJdCB0aWNrcyBhbGwgdGhlIGJveGVzLiBXZSdyZSB0YWxraW5nIGNvcmUgbmV0d29ya2luZywgZnVuZGFtZW50YWwgcHJvdG9jb2wgY2hhbmdlcy4gV2UgaGF2ZSBjb21wbGV4IGNvbmN1cnJlbmN5IGNvbmNlcm5zIC0gUkNVLCByZWZjb3VudHMsIGxvY2tpbmcsIHRva2VuIHRhYmxlIG1hbmlwdWxhdGlvbiwgYW5kIGNsb25pbmcgdW5kZXIgcmV1c2Vwb3J0IG9yIHN5bi1hY2sgdGltZXJzLi4uIHRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgYnVncy4gQW5kIHllcywgaXQncyBhbGwgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzIHdpdGhpbiBRRU1VIHdpdGggbG9vcGJhY2sgb3IgYSB2aXJ0dWFsIG5ldHdvcmsuIFNvIHRoaXMgaXMgYSBjbGVhciBcInllc1wiLlxuXG5GaW5hbGx5LCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM/IGBNUFRDUGAgaXMgdGhlIGJpZyBvbmUuIEl0J3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudC4gQW5kIG9mIGNvdXJzZSwgYElORVRgIGlzIGEgZGVwZW5kZW5jeS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L21wdGNwL01ha2VmaWxlYCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYnV0IHRob3NlIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgb25lcyB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDoxMS40NzE3NDcyMzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjkyMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQvbXB0Y3AvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfTVBUQ1ApICs9IG1wdGNwLm9cXG5uZXQvbXB0Y3AvTWFrZWZpbGUtMy1cXG5uZXQvbXB0Y3AvTWFrZWZpbGU9ND1tcHRjcC15IDo9IHByb3RvY29sLm8gc3ViZmxvdy5vIG9wdGlvbnMubyB0b2tlbi5vIGNyeXB0by5vIGN0cmwubyBwbS5vIGRpYWcubyBcXFxcXFxuLS1cXG5uZXQvbXB0Y3AvTWFrZWZpbGUtNy1cXG5uZXQvbXB0Y3AvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfU1lOX0NPT0tJRVMpICs9IHN5bmNvb2tpZXMub1xcbm5ldC9tcHRjcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19JTkVUX01QVENQX0RJQUcpICs9IG1wdGNwX2RpYWcub1xcbm5ldC9tcHRjcC9NYWtlZmlsZS0xMC1cXG4tLVxcbm5ldC9tcHRjcC9NYWtlZmlsZT0xMj1tcHRjcF90b2tlbl90ZXN0LW9ianMgOj0gdG9rZW5fdGVzdC5vXFxubmV0L21wdGNwL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19NUFRDUF9LVU5JVF9URVNUKSArPSBtcHRjcF9jcnlwdG9fdGVzdC5vIG1wdGNwX3Rva2VuX3Rlc3Qub1xcbm5ldC9tcHRjcC9NYWtlZmlsZS0xNC1cXG5uZXQvbXB0Y3AvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDoxMS41MTkwNDY3OTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjA2MTY5ODgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNUFRDUCBNb2RpZmljYXRpb24ncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBidWlsZCBzeXN0ZW0gaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSB0aGUgTVBUQ1Agb2JqZWN0IGZpbGVzIChgbXB0Y3Aub2AsIGBwcm90b2NvbC5vYCwgYHN1YmZsb3cub2AsIGB0b2tlbi5vYCkgd2hlbiBgQ09ORklHX01QVENQYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0LlxuXG5Ob3csIGxldCdzIHZlcmlmeSBteSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhlIGtlcm5lbCBzeW1ib2xzIHRoYXQgYXJlIG1vZGlmaWVkLiBJIGNvbmZpcm1lZCBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAsIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgLCBgbXB0Y3BfdG9rZW5fYWNjZXB0YCwgYG1wdGNwX3NrX2Nsb25lX2luaXRgLCBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYCwgYW5kIGBpbmV0X3JlcXNrX2Nsb25lYCBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQuIEFuZCBhZGRpdGlvbmFsbHksIGBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RgIGFuZCB0aGUgc3RhdGljIGBtcHRjcF9za19jbG9uZV9kZXN0cm95YCBhcmUgYWxzbyByZWxldmFudC4gVGhlc2UgZnVuY3Rpb25zIGFsbCBwbGF5IGEgcm9sZSBpbiBNUFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCB0ZWFyZG93biwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gcmVxdWVzdCBzb2NrZXRzIGFuZCB0b2tlbnMuXG5cbkV4Y2VsbGVudC4gU28sIGdpdmVuIHRoaXMsIGxldCdzIHZhbGlkYXRlIHRoYXQgdGhlIHNldC1yZXN1bHRzIGNyaXRlcmlhIGFyZSBtZXQ6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBZZXMsIGFic29sdXRlbHkuIFRoaXMgcGF0Y2ggdG91Y2hlcyBNUFRDUCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGxvZ2ljLCB0b2tlbiB0YWJsZSBtYW5hZ2VtZW50LCBhbmQgc29ja2V0IGluaXRpYWxpemF0aW9uIGVycm9yIGhhbmRsaW5nIGFjcm9zcyBUQ1AvTVBUQ1AgY29ubmVjdGlvbiBzZXR1cCBwYXRocy4gVGhpbmsgcmV1c2Vwb3J0IG1pZ3JhdGlvbnMgYW5kIHRpbWVyIGhhbmRsZXJzIOKAkyB0aGVzZSB0aGluZ3MgaGF2ZSBjb21wbGV4IFJDVSwgcmVmZXJlbmNlIGNvdW50LCBhbmQgbG9ja2luZyBpbnRlcmFjdGlvbnMuIEl0J3MgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLlxuKiAgICoqUmVhc29uaW5nKio6IEkgbmVlZCB0byBjb25jaXNlbHkgZG9jdW1lbnQgdGhlIHJhdGlvbmFsZS4gSSdsbCB3cml0ZTogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBsb2dpYywgdG9rZW4gdGFibGUgbWFuYWdlbWVudCwgYW5kIHNvY2tldCBpbml0aWFsaXphdGlvbiBlcnJvciBoYW5kbGluZyBhY3Jvc3MgVENQL01QVENQIGNvbm5lY3Rpb24gc2V0dXAgcGF0aHMgKGUuZy4gZHVyaW5nIHJldXNlcG9ydCBtaWdyYXRpb24gb3IgdGltZXIgaGFuZGxlcnMpLCB3aGljaCBpbnZvbHZlcyBjb21wbGV4IFJDVS9yZWZjb3VudC9sb2NraW5nIHN0YXRlIHRoYXQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIlxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBXZSBjbGVhcmx5IG5lZWQgYE1QVENQYCBlbmFibGVkLiBIb3dldmVyLCB0byBlbnN1cmUgdGhhdCB0aGUgcmVxdWlyZWQgY29yZSBUQ1AgZnVuY3Rpb25hbGl0eSBpcyBhbHNvIGVuYWJsZWQsIEknbGwgcmVjb21tZW5kIGBbXCJJTkVUXCIsIFwiTVBUQ1BcIl1gLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IFRoZSBzeW1ib2xzIEkndmUgaWRlbnRpZmllZDogYFtcIm1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVcIiwgXCJtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RcIiwgXCJtcHRjcF90b2tlbl9hY2NlcHRcIiwgXCJtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3RcIiwgXCJtcHRjcF9za19jbG9uZV9pbml0XCIsIFwic3ViZmxvd19zeW5fcmVjdl9zb2NrXCIsIFwiaW5ldF9yZXFza19jbG9uZVwiXWAuXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgZnJ1aXRmdWwgYXJlYSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MjUsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjE3LjU4MDc0NzYxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwNzExMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZVwiLFxuICAgIFwibXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF90b2tlbl9hY2NlcHRcIixcbiAgICBcIm1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdFwiLFxuICAgIFwibXB0Y3Bfc2tfY2xvbmVfaW5pdFwiLFxuICAgIFwic3ViZmxvd19zeW5fcmVjdl9zb2NrXCIsXG4gICAgXCJpbmV0X3JlcXNrX2Nsb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBNUFRDUCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nLCB0b2tlbiBoYXNoIG1hbmFnZW1lbnQsIGFuZCBzb2NrZXQgY2xvbmUgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIFRDUC9NUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIFRoaXMgbG9naWMgaW52b2x2ZXMgc3VidGxlIFJDVSwgcmVmY291bnRpbmcsIGFuZCBsb2NraW5nIHNlbWFudGljcyB0aGF0IGFyZSBmdWxseSByZWFjaGFibGUgdmlhIHNvY2tldCBzeXNjYWxscyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lXCIsXG4gICAgXCJtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RcIixcbiAgICBcIm1wdGNwX3Rva2VuX2FjY2VwdFwiLFxuICAgIFwibXB0Y3BfdG9rZW5fZGVzdHJveV9yZXF1ZXN0XCIsXG4gICAgXCJtcHRjcF9za19jbG9uZV9pbml0XCIsXG4gICAgXCJzdWJmbG93X3N5bl9yZWN2X3NvY2tcIixcbiAgICBcImluZXRfcmVxc2tfY2xvbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcsIHRva2VuIGhhc2ggbWFuYWdlbWVudCwgYW5kIHNvY2tldCBjbG9uZSBlcnJvciBoYW5kbGluZyBkdXJpbmcgVENQL01QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gVGhpcyBsb2dpYyBpbnZvbHZlcyBzdWJ0bGUgUkNVLCByZWZjb3VudGluZywgYW5kIGxvY2tpbmcgc2VtYW50aWNzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc29ja2V0IHN5c2NhbGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MTcuNjU0ODI1NjA4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMxNzAzMzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjE3LjY1NTMwODY2OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1MzE2NTQ2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBNUFRDUCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGR1cmluZyByZXVzZXBvcnQgc29ja2V0IG1pZ3JhdGlvbiBieSBzYWZlbHkgaGFuZGxpbmcgbXNrIHNvY2tldCByZWZjb3VudHMsIG1vdmluZyB0b2tlbiBoYXNoIHRhYmxlIGVudHJpZXMgKG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCksIGFuZCBwcm9wZXJseSBjbGVhbmluZyB1cCBhbmQgZmFsbGluZyBiYWNrIHdoZW4gbXB0Y3BfdG9rZW5fYWNjZXB0IGZhaWxzLlxcblxcblRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb25jdXJyZW5jeSwgUkNVIHNhZmV0eSwgc29ja2V0IHJlZmNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlL2Rlc3RydWN0aW9uIHN0YXRlIG1hbmFnZW1lbnQuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIGFyZWEgYXJlIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpc3N1ZXMsIG9yIGxvY2tpbmcvZGVhZGxvY2sgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBwYWRkaW5nL2luZm8tbGVha3MsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRmMzAwZmU3ODI3NzFhMmEwOGJmYTMxZDljNWJhYmZjZmFkMDExNmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIxOjA5OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbXB0Y3AuaCBiL2luY2x1ZGUvbmV0L21wdGNwLmhcbmluZGV4IDQ4NWQ1NWI2NmVhNjcuLmFkNzAwNWI1NzRiYjEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tcHRjcC5oXG4rKysgYi9pbmNsdWRlL25ldC9tcHRjcC5oXG5AQCAtMjE5LDYgKzIxOSw5IEBAIGludCBtcHRjcF9zdWJmbG93X2luaXRfY29va2llX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4gc3RydWN0IHJlcXVlc3Rfc29jayAqbXB0Y3Bfc3ViZmxvd19yZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzLFxuIFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNvY2sgKnNrX2xpc3RlbmVyLFxuIFx0XHRcdFx0XHQgICAgICAgYm9vbCBhdHRhY2hfbGlzdGVuZXIpO1xuKy8qIENhbGxlciBtdXN0IGhvbGQgYW4gUkNVIHJlYWQtc2lkZSBsb2NrLiAqL1xuK3ZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpO1xuIFxuIF9fYmUzMiBtcHRjcF9nZXRfcmVzZXRfb3B0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuQEAgLTMwNSw2ICszMDgsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXNcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbisvKiBDYWxsZXIgbXVzdCBob2xkIGFuIFJDVSByZWFkLXNpZGUgbG9jay4gKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqbmV3X3JlcSlcbit7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgX19iZTMyIG1wdGNwX3Jlc2V0X29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSAgeyByZXR1cm4gaHRvbmwoMHUpOyB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX2FjdGl2ZV9kZXRlY3RfYmxhY2tob2xlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBleHBpcmVkKSB7IH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1xuaW5kZXggNjI1NzQ1OWJjZWUyNC4uODk2ZjQ3MmRjYmEyOSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3BfZWNuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbXB0Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrX3JldXNlcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2FkZHJjb25mLmhcdTAwM2VcbiBcbkBAIC05NjEsNiArOTYyLDkgQEAgc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtXHUwMDNlc2spLVx1MDAzZWZhc3RvcGVuX3JzaywgbnJlcSk7XG4gXHR9XG4gXG4rXHRpZiAocnNrX2lzX21wdGNwKHJlcSkpXG4rXHRcdG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUocmVxLCBucmVxKTtcbitcbiBcdHJldHVybiBucmVxO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvcHJvdG9jb2wuYyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5pbmRleCBlMWYwOGY3MWNkYjE2Li4zMDA2N2YyYTdjYThmIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL3Byb3RvY29sLmNcbisrKyBiL25ldC9tcHRjcC9wcm90b2NvbC5jXG5AQCAtMzY5Miw2ICszNjkyLDI0IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaXBfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBtcHRjcF9za19jbG9uZV9kZXN0cm95KHN0cnVjdCBzb2NrICpuc2spXG4re1xuK1x0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IG1wdGNwX3NrKG5zayk7XG4rXG4rXHRtcHRjcF9yZWxlYXNlX3NjaGVkKG1zayk7XG4rXHRtcHRjcF9zZXRfc3RhdGUobnNrLCBUQ1BfQ0xPU0UpO1xuK1x0LyogaW5ldF9jc2tfcHJlcGFyZV9mb3JjZWRfY2xvc2UoKSBjbGVhcnMgVENQIHNvY2tfb3BzIHN0YXRlIHZpYVxuK1x0ICogdGNwX3NrKCksIGJ1dCBuc2sgaXMgYW4gTVBUQ1AgbWFzdGVyIHNvY2tldDsga2VlcCB0aGUgaW5ldC1sZXZlbFxuK1x0ICogZGVzdHJveSBwcmVwYXJhdGlvbiBoZXJlLlxuK1x0ICovXG4rXHRiaF91bmxvY2tfc29jayhuc2spO1xuK1x0c29ja19wdXQobnNrKTtcbitcdHNvY2tfc2V0X2ZsYWcobnNrLCBTT0NLX0RFQUQpO1xuK1x0dGNwX29ycGhhbl9jb3VudF9pbmMoKTtcbitcdGluZXRfc2sobnNrKS1cdTAwM2VpbmV0X251bSA9IDA7XG4rXHRpbmV0X2Nza19kZXN0cm95X3NvY2sobnNrKTtcbit9XG4rXG4gc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQsXG4gXHRcdFx0XHQgc3RydWN0IHNvY2sgKnNzayxcbkBAIC0zNzUxLDExICszNzY5LDYgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0bGlzdF9hZGQoXHUwMDI2c3ViZmxvdy1cdTAwM2Vub2RlLCBcdTAwMjZtc2stXHUwMDNlY29ubl9saXN0KTtcbiBcdHNvY2tfaG9sZChzc2spO1xuIFxuLVx0LyogbmV3IG1wYyBzdWJmbG93IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgbmV3bHlcbi1cdCAqIGNyZWF0ZWQgbXB0Y3Agc29ja2V0XG4tXHQgKi9cbi1cdG1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKTtcbi1cbiBcdC8qIHNldCBtc2sgYWRkcmVzc2VzIGVhcmx5IHRvIGVuc3VyZSBtcHRjcF9wbV9nZXRfbG9jYWxfaWQoKVxuIFx0ICogdXNlcyB0aGUgY29ycmVjdCBkYXRhXG4gXHQgKi9cbkBAIC0zNzY0LDYgKzM3NzcsMTQgQEAgc3RydWN0IHNvY2sgKm1wdGNwX3NrX2Nsb25lX2luaXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0bXB0Y3BfcmN2X3NwYWNlX2luaXQobXNrLCBzc2spO1xuIFx0bXNrLVx1MDAzZXJjdnFfc3BhY2UudGltZSA9IG1wdGNwX3N0YW1wKCk7XG4gXG4rXHRpZiAoIW1wdGNwX3Rva2VuX2FjY2VwdChzdWJmbG93X3JlcSwgbXNrKSkge1xuK1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN1YmZsb3ctXHUwMDNlbm9kZSk7XG4rXHRcdFdSSVRFX09OQ0UobXNrLVx1MDAzZWZpcnN0LCBOVUxMKTtcbitcdFx0c29ja19wdXQoc3NrKTtcbitcdFx0bXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShuc2spO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbiBcdGlmIChtcF9vcHQtXHUwMDNlc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QQ19BQ0spXG4gXHRcdF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChtc2ssIHN1YmZsb3csIG1wX29wdCk7XG4gXHRiaF91bmxvY2tfc29jayhuc2spO1xuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9wcm90b2NvbC5oIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbmluZGV4IDg3Y2NiODRlOTkyN2MuLjI0NzQ0OWNjMmZlYjkgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvcHJvdG9jb2wuaFxuKysrIGIvbmV0L21wdGNwL3Byb3RvY29sLmhcbkBAIC0xMDc5LDkgKzEwNzksMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gfVxuIFxuIGludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKTtcbiB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuIGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcbi12b2lkIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXG4rYm9vbCBtcHRjcF90b2tlbl9hY2NlcHQoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyLFxuIFx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbik7XG4gc3RydWN0IG1wdGNwX3NvY2sgKm1wdGNwX3Rva2VuX2dldF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHRva2VuKTtcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3Avc3ViZmxvdy5jIGIvbmV0L21wdGNwL3N1YmZsb3cuY1xuaW5kZXggYWY4MWFkNWU2OTlkMS4uZDJjZDEyZmMwMzQyMSAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zdWJmbG93LmNcbisrKyBiL25ldC9tcHRjcC9zdWJmbG93LmNcbkBAIC00Nyw2ICs0Nyw0MSBAQCBzdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiBcdG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChyZXEpO1xuIH1cbiBcbit2b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrO1xuK1xuK1x0bmV3X3N1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2sobmV3X3JlcSk7XG4rXHRSQ1VfTE9DS0RFUF9XQVJOKCFyY3VfcmVhZF9sb2NrX2FueV9oZWxkKCksXG4rXHRcdFx0IFwiTVBUQ1AgcmVxc2sgY2xvbmUgY2FsbGVkIHdpdGhvdXQgUkNVXCIpO1xuK1xuK1x0LyogQSBub24tTlVMTCAtXHUwMDNlbXNrIG1lYW5zIHRoZSByZXF1ZXN0IG93bnMgb25lIHJlZmVyZW5jZS4gIFRoZSBjbG9uZVxuK1x0ICogY29waWVkIG9ubHkgdGhlIHBvaW50ZXIsIHdoaWxlIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGNhbiBjb25jdXJyZW50bHlcbitcdCAqIHRyYW5zZmVyIGl0cyByZWZlcmVuY2UgdG8gdGhlIGNoaWxkLiAgQWNxdWlyZSBhIHJlZmVyZW5jZSBmb3IgdGhlXG4rXHQgKiBjbG9uZSwgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgb3JpZ2luYWwgcmVxdWVzdCBzdGlsbCBvd25zIHRoZSBzYW1lIG1zay5cbitcdCAqIE1QVENQIHNvY2tldHMgdXNlIFNMQUJfVFlQRVNBRkVfQllfUkNVIGFuZCBhbGwgY2xvbmUgY2FsbGVycyBydW4gaW5cbitcdCAqIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwga2VlcGluZyB0aGUgbWVtb3J5IHN0YWJsZSBoZXJlLlxuK1x0ICovXG4rXHRtc2sgPSBSRUFEX09OQ0Uoc3ViZmxvd19yZXEtXHUwMDNlbXNrKTtcbitcdGlmIChtc2spIHtcbitcdFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xuK1xuK1x0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVyb19hY3F1aXJlKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpIHtcbitcdFx0XHRtc2sgPSBOVUxMO1xuK1x0XHR9IGVsc2UgaWYgKFJFQURfT05DRShzdWJmbG93X3JlcS1cdTAwM2Vtc2spICE9IG1zaykge1xuK1x0XHRcdHNvY2tfcHV0KHNrKTtcbitcdFx0XHRtc2sgPSBOVUxMO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXdfc3ViZmxvd19yZXEtXHUwMDNlbXNrID0gbXNrO1xuK1xuK1x0bXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHJlcSwgbmV3X3JlcSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHN1YmZsb3dfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsIHUzMiBub25jZTEsIHUzMiBub25jZTIsXG4gXHRcdFx0XHQgIHZvaWQgKmhtYWMpXG4ge1xuQEAgLTg4NSw4ICs5MjAsMTAgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFxuIFx0XHRpZiAoY3R4LVx1MDAzZW1wX2NhcGFibGUpIHtcbiBcdFx0XHRjdHgtXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXHUwMDNlY29ubiwgXHUwMDI2bXBfb3B0LCBjaGlsZCwgcmVxKTtcbi1cdFx0XHRpZiAoIWN0eC1cdTAwM2Vjb25uKVxuK1x0XHRcdGlmICghY3R4LVx1MDAzZWNvbm4pIHtcbitcdFx0XHRcdGZhbGxiYWNrID0gdHJ1ZTtcbiBcdFx0XHRcdGdvdG8gZmFsbGJhY2s7XG4rXHRcdFx0fVxuIFxuIFx0XHRcdGN0eC1cdTAwM2VzdWJmbG93X2lkID0gMTtcbiBcdFx0XHRvd25lciA9IG1wdGNwX3NrKGN0eC1cdTAwM2Vjb25uKTtcbkBAIC05MjMsNyArOTYwLDcgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdH1cbiBcbiBcdFx0XHQvKiBtb3ZlIHRoZSBtc2sgcmVmZXJlbmNlIG93bmVyc2hpcCB0byB0aGUgc3ViZmxvdyAqL1xuLVx0XHRcdHN1YmZsb3dfcmVxLVx1MDAzZW1zayA9IE5VTEw7XG4rXHRcdFx0V1JJVEVfT05DRShzdWJmbG93X3JlcS1cdTAwM2Vtc2ssIE5VTEwpO1xuIFx0XHRcdGN0eC1cdTAwM2Vjb25uID0gKHN0cnVjdCBzb2NrICopb3duZXI7XG4gXG4gXHRcdFx0aWYgKHN1YmZsb3dfdXNlX2RpZmZlcmVudF9zcG9ydChvd25lciwgc2spKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3Rva2VuLmMgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuaW5kZXggZjFhNTBmMzY3YWRkOC4uZTBmMjgyM2Y5MmVmYiAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbi5jXG4rKysgYi9uZXQvbXB0Y3AvdG9rZW4uY1xuQEAgLTE4MCw2ICsxODAsNDMgQEAgaW50IG1wdGNwX3Rva2VuX25ld19jb25uZWN0KHN0cnVjdCBzb2NrICpzc2spXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0IC0gbW92ZSByZXF1ZXN0IHRva2VuIG93bmVyc2hpcCB0byBhIGNsb25lXG4rICogQHJlcTogb3JpZ2luYWwgcmVxdWVzdCBzb2NrZXRcbisgKiBAbmV3X3JlcTogY2xvbmVkIHJlcXVlc3Qgc29ja2V0XG4rICpcbisgKiBNb3ZlIHRoZSB0b2tlbiBoYXNoIGVudHJ5IGZyb20gdGhlIG9yaWdpbmFsIHJlcXVlc3QgdG8gaXRzIGNsb25lLlxuKyAqL1xuK3ZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpuZXdfcmVxKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xuK1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XG4rXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbitcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbitcbitcdG5ld19zdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKG5ld19yZXEpO1xuK1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFx1MDAyNnN1YmZsb3dfcmVxLVx1MDAzZXRva2VuX25vZGUpKSB7XG4rXHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpIHtcbitcdFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xuK1x0fSBlbHNlIHtcbitcdFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuK1x0XHRpZiAocG9zID09IHN1YmZsb3dfcmVxKVxuK1x0XHRcdGhsaXN0X251bGxzX3JlcGxhY2VfaW5pdF9yY3UoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSxcbitcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChuZXdfcmVxKTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gLyoqXG4gICogbXB0Y3BfdG9rZW5fYWNjZXB0IC0gcmVwbGFjZSBhIHJlcSBzayB3aXRoIGZ1bGwgc29jayBpbiB0b2tlbiBoYXNoXG4gICogQHJlcTogdGhlIHJlcXVlc3Qgc29ja2V0IHRvIGJlIHJlbW92ZWRcbkBAIC0xODcsMjQgKzIyNCwzNiBAQCBpbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzaylcbiAgKlxuICAqIENhbGxlZCB3aGVuIGEgU1lOIHBhY2tldCBjcmVhdGVzIGEgbmV3IGxvZ2ljYWwgY29ubmVjdGlvbiwgaS5lLlxuICAqIGlzIG5vdCBhIGpvaW4gcmVxdWVzdC5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBvbiBzdWNjZXNzLlxuICAqL1xuLXZvaWQgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuK2Jvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxuIFx0XHRcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spXG4ge1xuIFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpwb3M7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4gXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XG4rXHRib29sIHJldCA9IGZhbHNlO1xuIFxuLVx0c29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLVx1MDAzZXNrX3Byb3QsIDEpO1xuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHJlcS1cdTAwM2V0b2tlbik7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuK1x0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdFx0Z290byB1bmxvY2s7XG4gXG4tXHQvKiBwZWRhbnRpYyBsb29rdXAgY2hlY2sgZm9yIHRoZSBtb3ZlZCB0b2tlbiAqL1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgcmVxLVx1MDAzZXRva2VuKTtcbi1cdGlmICghV0FSTl9PTl9PTkNFKHBvcyAhPSByZXEpKVxuLVx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cmVxLVx1MDAzZXRva2VuX25vZGUpO1xuK1x0aWYgKHBvcyAhPSByZXEpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0aGxpc3RfbnVsbHNfZGVsX2luaXRfcmN1KFx1MDAyNnJlcS1cdTAwM2V0b2tlbl9ub2RlKTtcbiBcdF9fc2tfbnVsbHNfYWRkX25vZGVfcmN1KChzdHJ1Y3Qgc29jayAqKW1zaywgXHUwMDI2YnVja2V0LVx1MDAzZW1za19jaGFpbik7XG4rXHRyZXQgPSB0cnVlO1xuK1xuK3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbitcdGlmIChyZXQpXG4rXHRcdHNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay1cdTAwM2Vza19wcm90LCAxKTtcbitcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIGJvb2wgbXB0Y3BfdG9rZW5fZXhpc3RzKHUzMiB0b2tlbilcbkBAIC0zNTUsMTYgKzQwNCwyMSBAQCB2b2lkIG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcbiBcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcbiBcbi1cdGlmIChobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbitcdGlmIChobGlzdF9udWxsc191bmhhc2hlZF9sb2NrbGVzcyhcdTAwMjZzdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0YnVja2V0ID0gdG9rZW5fYnVja2V0KHN1YmZsb3dfcmVxLVx1MDAzZXRva2VuKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG4rXHRpZiAoaGxpc3RfbnVsbHNfdW5oYXNoZWQoXHUwMDI2c3ViZmxvd19yZXEtXHUwMDNldG9rZW5fbm9kZSkpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuIFx0cG9zID0gX190b2tlbl9sb29rdXBfcmVxKGJ1Y2tldCwgc3ViZmxvd19yZXEtXHUwMDNldG9rZW4pO1xuLVx0aWYgKCFXQVJOX09OX09OQ0UocG9zICE9IHN1YmZsb3dfcmVxKSkge1xuK1x0aWYgKHBvcyA9PSBzdWJmbG93X3JlcSkge1xuIFx0XHRobGlzdF9udWxsc19kZWxfaW5pdF9yY3UoXHUwMDI2cG9zLVx1MDAzZXRva2VuX25vZGUpO1xuIFx0XHRidWNrZXQtXHUwMDNlY2hhaW5fbGVuLS07XG4gXHR9XG4rXG4rdW5sb2NrOlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jIGIvbmV0L21wdGNwL3Rva2VuX3Rlc3QuY1xuaW5kZXggNGZjMzlmYTJlMjYyZC4uYmU5YWNjZThhNTY3MyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbisrKyBiL25ldC9tcHRjcC90b2tlbl90ZXN0LmNcbkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfYWNjZXB0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCAwLFxuIFx0XHRcdG1wdGNwX3Rva2VuX25ld19yZXF1ZXN0KChzdHJ1Y3QgcmVxdWVzdF9zb2NrICopcmVxKSk7XG4gXHRtc2stXHUwMDNldG9rZW4gPSByZXEtXHUwMDNldG9rZW47XG4tXHRtcHRjcF90b2tlbl9hY2NlcHQocmVxLCBtc2spO1xuK1x0S1VOSVRfRVhQRUNUX1RSVUUodGVzdCwgbXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKSk7XG4gXHRLVU5JVF9FWFBFQ1RfUFRSX0VRKHRlc3QsIG1zaywgbXB0Y3BfdG9rZW5fZ2V0X3NvY2soXHUwMDI2aW5pdF9uZXQsIG1zay1cdTAwM2V0b2tlbikpO1xuIFxuIFx0LyogdGhpcyBpcyBub3cgYSBuby1vcCAqL1xuQEAgLTEyMiw3ICsxMjIsNyBAQCBzdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2Rlc3Ryb3llZChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgMCxcbiBcdFx0XHRtcHRjcF90b2tlbl9uZXdfcmVxdWVzdCgoc3RydWN0IHJlcXVlc3Rfc29jayAqKXJlcSkpO1xuIFx0bXNrLVx1MDAzZXRva2VuID0gcmVxLVx1MDAzZXRva2VuO1xuLVx0bXB0Y3BfdG9rZW5fYWNjZXB0KHJlcSwgbXNrKTtcbitcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIG1wdGNwX3Rva2VuX2FjY2VwdChyZXEsIG1zaykpO1xuIFxuIFx0Lyogc2ltdWxhdGUgcmFjZSBvbiByZW1vdmFsICovXG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2c2stXHUwMDNlc2tfcmVmY250LCAwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjE3LjY1NTMxMDkyOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NjkxMzk4OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGVzZSBjaGFuZ2VzIGFyZSBhY3R1YWxseSBkb2luZy5cblxuSSdtIHNlZWluZyBhIHNlcmllcyBvZiBjaGFuZ2VzIHJlbGF0ZWQgdG8gTVBUQ1AsIHNwZWNpZmljYWxseSBhcm91bmQgcmVxdWVzdCBzb2NrZXQgY2xvbmluZyBhbmQgdG9rZW4gbWFuYWdlbWVudC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSByZWZhY3RvcmluZyBvciBpbXByb3ZlbWVudCByZWxhdGVkIHRvIGNvbmN1cnJlbmN5IGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIE1QVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBmbG93LlxuXG5IZXJl4oCZcyB0aGUgYnJlYWtkb3duIGFzIEkgdW5kZXJzdGFuZCBpdDpcblxuKiAgICoqSGVhZGVyIGFuZCBTdHViOioqIFdlIGhhdmUgYSBuZXcgc3R1YiBmdW5jdGlvbiBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSgpYCBiZWluZyBhZGRlZCB0byBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAuIFRoaXMgc3VnZ2VzdHMgc29tZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIE1QVENQIHN1YmZsb3cgY2xvbmluZy5cblxuKiAgICoqSW50ZWdyYXRpb24gd2l0aCBgaW5ldF9yZXFza19jbG9uZSgpYDoqKiBUaGUgYGluZXRfY29ubmVjdGlvbl9zb2NrLmNgIGZpbGUgbm93IGNhbGxzIHRoaXMgbmV3IGZ1bmN0aW9uIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKClgIHdpdGhpbiBgaW5ldF9yZXFza19jbG9uZSgpYC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBwYXRjaCBpcyBkaXJlY3RseSByZWxhdGVkIHRvIGhvdyBNUFRDUCBjb25uZWN0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgbG93ZXIgbGV2ZWwgaW5ldCBsYXllci5cblxuKiAgICoqSGVscGVyIEZ1bmN0aW9ucyBhbmQgRXJyb3IgSGFuZGxpbmc6KiogYG5ldC9tcHRjcC9wcm90b2NvbC5jYCBzZWVzIHRoZSBhZGRpdGlvbiBvZiBhIGRlc3RydWN0aW9uIGhlbHBlciBgbXB0Y3Bfc2tfY2xvbmVfZGVzdHJveSgpYCBhbmQgbW92ZXMgdGhlIGNhbGwgdG8gYG1wdGNwX3Rva2VuX2FjY2VwdCgpYC4gQ3JpdGljYWxseSwgYG1wdGNwX3Rva2VuX2FjY2VwdGAncyByZXR1cm4gdmFsdWUgaXMgbm93IGJlaW5nICpjaGVja2VkKiBmb3Igc3VjY2Vzcy4gSWYgaXQgZmFpbHMsIHRoZSBjb2RlIHBhdGggbm93IGNsZWFucyB1cCBtb3JlIGdyYWNlZnVsbHkuIFRoaXMgaW1wbGllcyBhIHNpZ25pZmljYW50IGltcHJvdmVtZW50IGluIHRoZSByb2J1c3RuZXNzIG9mIHRoZSB0b2tlbiBoYW5kbGluZyBwcm9jZXNzLlxuXG4qICAgKipSZXR1cm4gVmFsdWUgb2YgYG1wdGNwX3Rva2VuX2FjY2VwdCgpYDoqKiBUaGUgcmV0dXJuIHR5cGUgb2YgYG1wdGNwX3Rva2VuX2FjY2VwdCgpYCBpcyBiZWluZyBjaGFuZ2VkIHRvIGEgYm9vbGVhbi4gVGhpcyBpcyBhIHZlcnkgY2xlYXIgc2lnbmFsIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbiBub3cgZmFpbCBhbmQgdGhhdCB0aGlzIGZhaWx1cmUgaXMgaW50ZW5kZWQgdG8gYmUgaGFuZGxlZCwgd2hpY2ggY29uZmlybXMgbXkgZWFybGllciBoeXBvdGhlc2lzLlxuXG4qICAgKipgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZSgpYCBJbXBsZW1lbnRhdGlvbjoqKiBJbiBgbmV0L21wdGNwL3N1YmZsb3cuY2AsIHRoZSBuZXcgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuIEl0IGNsb25lcyB0aGUgTVBUQ1AgbWFzdGVyIHNvY2tldCAoYG1za2ApIHNhZmVseSB1c2luZyBSQ1UgYW5kIGNhbGxzIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QoKWAuIFRoaXMgaXMgY29yZSBsb2dpYyB0aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRob3JvdWdobHkuIEl0IGFsc28gaW50cm9kdWNlcyBzb21lIG1vcmUgcm9idXN0IGVycm9yIGhhbmRsaW5nIGFyb3VuZCBmYWlsdXJlIHRvIGluaXRpYWxpemUgYSBjbG9uZS4gVGhleSBhcmUgdXNpbmcgYFdSSVRFX09OQ0VgIHRvIHVwZGF0ZSBzb21lIGBtc2tgIHBvaW50ZXJzLCB3aGljaCBwb2ludHMgdG8gY29uY3VycmVuY3kgYW5kIGRhdGEgcmFjZXMuXG5cbiogICAqKlRva2VuIEhhbmRsaW5nIGFuZCBDb25jdXJyZW5jeToqKiBgbmV0L21wdGNwL3Rva2VuLmNgIGNvbnRhaW5zIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgYG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCgpYCBhbmQgdXBkYXRlcyB0byBgbXB0Y3BfdG9rZW5fYWNjZXB0KClgLCBwYXJ0aWN1bGFybHkgYSBtaW5vciBjb25jdXJyZW5jeSBmaXggaW4gYG1wdGNwX3Rva2VuX2Rlc3Ryb3lfcmVxdWVzdCgpYC4gVGhpcyBzaWduYWxzIHRoYXQgdGhlIGNoYW5nZXMgaW5jbHVkZSB0aHJlYWQgc2FmZXR5IGltcHJvdmVtZW50cyB0byB0aGUgdG9rZW4gcmVwbGFjZW1lbnQuXG5cbiogICAqKlVuaXQgVGVzdHM6KiogRmluYWxseSwgYG5ldC9tcHRjcC90b2tlbl90ZXN0LmNgIGlzIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY2hhbmdlIGluIGBtcHRjcF90b2tlbl9hY2NlcHQoKWAncyByZXR1cm4gdmFsdWUuIFRoaXMgaXMgZ29vZCB0byBzZWU7IHRoaXMgc2lnbmFscyB0aGF0IHRoZXkgd2VyZSB0aGlua2luZyBhYm91dCBob3cgdG8gdGVzdCB0aGUgbmV3IGJlaGF2aW9yLlxuXG5Ob3csIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gYGluZXRfcmVxc2tfY2xvbmVgIHRvIHNlZSB3aGVyZSBhbGwgb2YgdGhpcyBmaXRzIGluIHRoZSBiaWdnZXIgcGljdHVyZS4gSSdsbCByZWFkIHRoZSBjb2RlIG9yIHVzZSBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgZmlsZSBhbmQgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMuXG5cbkJhc2VkIG9uIHRoaXMgZmlyc3QgcGFzcywgdGhlIGNoYW5nZXMgKmFwcGVhciogdG8gYmUgZm9jdXNlZCBvbiBpbXByb3ZpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGNvbmN1cnJlbmN5IGFuZCB0b2tlbiBtYW5hZ2VtZW50LiBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQgdGhpcyBpbnRyb2R1Y2VzICpuZXcqIGF2ZW51ZXMgZm9yIEtNU0FOIHRvIGZpbmQgaXNzdWVzLiBIb3dldmVyLCB0aGUgY2hhbmdlcyB0byBlcnJvciBoYW5kbGluZywgYW5kIHNwZWNpZmljYWxseSB0aGUgdXNlIG9mIFJDVSBhbmQgYFdSSVRFX09OQ0VgIHN1Z2dlc3QgdGhlc2UgY2hhbmdlcyAqY291bGQqIGhhdmUgaW50cm9kdWNlZCBzdWJ0bGUgZGF0YSByYWNlcyBvciBjb25jdXJyZW5jeSBidWdzIHRoYXQgbWF5IGJlIGRldGVjdGFibGUgYnkgS01TQU4uIEkgd291bGQgbmVlZCB0byBhbmFseXplIHRoZSBzcGVjaWZpYyBjb2RlLCBhbmQgcG90ZW50aWFsbHkgdXNlIHRoZSBjb2RlIGJyb3dzaW5nIHRvb2xzLCB0byBkZXRlcm1pbmUgdGhlIGxldmVsIG9mIGNvbmN1cnJlbmN5IHJpc2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mzg2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MjcuMzQ2NzEyMzYxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk0NTpcXHRcXHRucmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIgPSBzaztcXG4gOTQ2OlxcdFxcbiA5NDc6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiB0Y3BfcnNrKG5yZXEpLVxcdTAwM2V0Zm9fbGlzdGVuZXIpIHtcXG4gOTQ4OlxcdFxcdFxcdHN0cnVjdCBmYXN0b3Blbl9xdWV1ZSAqZmFzdG9wZW5xO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRcXHQvKiByZXFza19mYXN0b3Blbl9yZW1vdmUoKSB3aWxsIHVuY2hhcmdlIG5yZXEtXFx1MDAzZXJza19saXN0ZW5lcixcXG4gOTUxOlxcdFxcdFxcdCAqIHRoYXQgaXMgQHNrLCBzbyBjaGFyZ2UgaXQgaGVyZS4gIFVubGlrZSB0aGUgbGlzdGVuZXJcXG4gOTUyOlxcdFxcdFxcdCAqIGJlaW5nIGNsb3NlZCwgQHNrIGlzIGxpdmUgYW5kIG5lZWRzIGl0cyBsb2NrLlxcbiA5NTM6XFx0XFx0XFx0ICovXFxuIDk1NDpcXHRcXHRcXHRmYXN0b3BlbnEgPSBcXHUwMDI2aW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZS5mYXN0b3BlbnE7XFxuIDk1NTpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmZhc3RvcGVucS1cXHUwMDNlbG9jayk7XFxuIDk1NjpcXHRcXHRcXHRmYXN0b3BlbnEtXFx1MDAzZXFsZW4rKztcXG4gOTU3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZmYXN0b3BlbnEtXFx1MDAzZWxvY2spO1xcbiA5NTg6XFx0XFxuIDk1OTpcXHRcXHRcXHQvKiBXZSBuZWVkIG5vdCBhY3F1aXJlIGZhc3RvcGVucS1cXHUwMDNlbG9ja1xcbiA5NjA6XFx0XFx0XFx0ICogYmVjYXVzZSB0aGUgY2hpbGQgc29ja2V0IGlzIGxvY2tlZCBpbiBpbmV0X2Nza19saXN0ZW5fc3RvcCgpLlxcbiA5NjE6XFx0XFx0XFx0ICovXFxuIDk2MjpcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodGNwX3NrKG5yZXEtXFx1MDAzZXNrKS1cXHUwMDNlZmFzdG9wZW5fcnNrLCBucmVxKTtcXG4gOTYzOlxcdFxcdH1cXG4gOTY0OlxcdFxcbiA5NjU6XFx0XFx0aWYgKHJza19pc19tcHRjcChyZXEpKVxcbiA5NjY6XFx0XFx0XFx0bXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZShyZXEsIG5yZXEpO1xcbiA5Njc6XFx0XFxuIDk2ODpcXHRcXHRyZXR1cm4gbnJlcTtcXG4gOTY5OlxcdH1cXG4gOTcwOlxcdFxcbiA5NzE6XFx0c3RhdGljIHZvaWQgcmVxc2tfcXVldWVfbWlncmF0ZWQoc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUsXFxuIDk3MjpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbiA5NzM6XFx0e1xcbiA5NzQ6XFx0XFx0aWYgKHJlcS1cXHUwMDNlbnVtX3RpbWVvdXQgPT0gMClcXG4gOTc1OlxcdFxcdFxcdGF0b21pY19pbmMoXFx1MDAyNnF1ZXVlLVxcdTAwM2V5b3VuZyk7XFxuIDk3NjpcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZxdWV1ZS1cXHUwMDNlcWxlbik7XFxuIDk3NzpcXHR9XFxuIDk3ODpcXHRcXG4gOTc5OlxcdHN0YXRpYyB2b2lkIHJlcXNrX21pZ3JhdGVfcmVzZXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbiA5ODA6XFx0e1xcbiA5ODE6XFx0XFx0cmVxLVxcdTAwM2VzYXZlZF9zeW4gPSBOVUxMO1xcbiA5ODI6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuIDk4MzpcXHRcXHRpbmV0X3JzayhyZXEpLVxcdTAwM2VpcHY2X29wdCA9IE5VTEw7XFxuIDk4NDpcXHRcXHRpbmV0X3JzayhyZXEpLVxcdTAwM2Vwa3RvcHRzID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MjcuMzQ2ODQxOTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwNDY4MTI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBpbmV0X3JlcXNrX2Nsb25lKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgcmVtYWluaW5nIGNvZGUgd2l0aGluIGBpbmV0X3JlcXNrX2Nsb25lYC4gSG1tLCBzZWVtcyBsaWtlIHdlJ3JlIHBhc3QgdGhlIGluaXRpYWwgc2V0dXAgYW5kIGVycm9yIGNoZWNraW5nLiBJJ20gZ3Vlc3Npbmcgd2UncmUgbm93IGludG8gdGhlIG1lYXQgb2YgaXQ6IHRoZSBhY3R1YWwgZHVwbGljYXRpb24gb2YgdGhlIHJlcXVlc3Qgc29ja2V0IHN0cnVjdHVyZSBmb3IgYSBuZXcgY29ubmVjdGlvbi4gSSBleHBlY3QgdG8gc2VlIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBkYXRhIGNvcHlpbmcuIExldCdzIHNlZSBob3cgdGhleSBoYW5kbGUgcG90ZW50aWFsIGZhaWx1cmUgYWxvbmcgdGhlIHdheSwgSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSBtYWludGFpbiBjb25zaXN0ZW5jeSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4gQ29uc2lkZXJpbmcgdGhlIGNvbXBsZXhpdGllcyBvZiBUQ1Agc3RhdGUgbWFuYWdlbWVudCwgdGhhdCdzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEuIEkgaG9wZSBpdCBpcyBhbGwgZG9uZSBpbiBhIGNvbnNpc3RlbnQgbWFubmVyLCBhcyBpdCBoYXMgdG8gaGFuZGxlIHRoZSBjb25jdXJyZW50IGFjY2Vzcy4gVGhpcyBpcyBnb2luZyB0byBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgaG93IHRoZXkgZGVhbCB3aXRoIHRoZSBgcmVxc2tgIGRhdGEgc3RydWN0dXJlIGFuZCBhbGwgdGhlIHBvaW50ZXJzIHdpdGhpbi4gV2hhdCBudWFuY2VzIGFyZSBhdCBwbGF5PyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBjaGlsZD8gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGFuZCBhIGxvdCBoaW5nZXMgb24gdGhlIHJpZ2h0IGxvY2tzLiBDdXJpb3VzIHRvIHNlZSB0aGUgdGVjaG5pcXVlcyB1c2VkIGZvciBhdG9taWMgb3BlcmF0aW9ucyBhbmQgbWVtb3J5IGJhcnJpZXJzLCBwYXJ0aWN1bGFybHkgaWYgdGhleSdyZSBkZWFsaW5nIHdpdGggbXVsdGlwbGUgQ1BVcy4gTGV0J3Mgc2VlIGhvdyB0aGV5J3ZlIGhhbmRsZWQgdGhhdC4gT2theSwgSSdtIHJlYWR5LiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjMwLjE1MTUyNjc4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MjA6XFx0XFx0bnJlcSA9IGttZW1fY2FjaGVfYWxsb2MocmVxLVxcdTAwM2Vyc2tfb3BzLVxcdTAwM2VzbGFiLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4gOTIxOlxcdFxcdGlmICghbnJlcSkge1xcbiA5MjI6XFx0XFx0XFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUE1JR1JBVEVSRVFGQUlMVVJFKTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0XFx0XFx0LyogcGFpcmVkIHdpdGggcmVmY291bnRfaW5jX25vdF96ZXJvKCkgaW4gcmV1c2Vwb3J0X21pZ3JhdGVfc29jaygpICovXFxuIDkyNTpcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuIDkyNjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gOTI3OlxcdFxcdH1cXG4gOTI4OlxcdFxcbiA5Mjk6XFx0XFx0cmVxX3NrID0gcmVxX3RvX3NrKHJlcSk7XFxuIDkzMDpcXHRcXHRucmVxX3NrID0gcmVxX3RvX3NrKG5yZXEpO1xcbiA5MzE6XFx0XFxuIDkzMjpcXHRcXHRtZW1jcHkobnJlcV9zaywgcmVxX3NrLFxcbiA5MzM6XFx0XFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBzb2NrLCBza19kb250Y29weV9iZWdpbikpO1xcbiA5MzQ6XFx0XFx0dW5zYWZlX21lbWNweShcXHUwMDI2bnJlcV9zay1cXHUwMDNlc2tfZG9udGNvcHlfZW5kLCBcXHUwMDI2cmVxX3NrLVxcdTAwM2Vza19kb250Y29weV9lbmQsXFxuIDkzNTpcXHRcXHRcXHQgICAgICByZXEtXFx1MDAzZXJza19vcHMtXFx1MDAzZW9ial9zaXplIC0gb2Zmc2V0b2Yoc3RydWN0IHNvY2ssIHNrX2RvbnRjb3B5X2VuZCksXFxuIDkzNjpcXHRcXHRcXHQgICAgICAvKiBhbGxvYyBpcyBsYXJnZXIgdGhhbiBzdHJ1Y3QsIHNlZSBhYm92ZSAqLyk7XFxuIDkzNzpcXHRcXG4gOTM4OlxcdFxcdHNrX25vZGVfaW5pdChcXHUwMDI2bnJlcV9zay1cXHUwMDNlc2tfbm9kZSk7XFxuIDkzOTpcXHRcXHRucmVxX3NrLVxcdTAwM2Vza190eF9xdWV1ZV9tYXBwaW5nID0gcmVxX3NrLVxcdTAwM2Vza190eF9xdWV1ZV9tYXBwaW5nO1xcbiA5NDA6XFx0I2lmZGVmIENPTkZJR19TT0NLX1JYX1FVRVVFX01BUFBJTkdcXG4gOTQxOlxcdFxcdG5yZXFfc2stXFx1MDAzZXNrX3J4X3F1ZXVlX21hcHBpbmcgPSByZXFfc2stXFx1MDAzZXNrX3J4X3F1ZXVlX21hcHBpbmc7XFxuIDk0MjpcXHQjZW5kaWZcXG4gOTQzOlxcdFxcdG5yZXFfc2stXFx1MDAzZXNrX2luY29taW5nX2NwdSA9IHJlcV9zay1cXHUwMDNlc2tfaW5jb21pbmdfY3B1O1xcbiA5NDQ6XFx0XFxuIDk0NTpcXHRcXHRucmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIgPSBzaztcXG4gOTQ2OlxcdFxcbiA5NDc6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiB0Y3BfcnNrKG5yZXEpLVxcdTAwM2V0Zm9fbGlzdGVuZXIpIHtcXG4gOTQ4OlxcdFxcdFxcdHN0cnVjdCBmYXN0b3Blbl9xdWV1ZSAqZmFzdG9wZW5xO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRcXHQvKiByZXFza19mYXN0b3Blbl9yZW1vdmUoKSB3aWxsIHVuY2hhcmdlIG5yZXEtXFx1MDAzZXJza19saXN0ZW5lcixcXG4gOTUxOlxcdFxcdFxcdCAqIHRoYXQgaXMgQHNrLCBzbyBjaGFyZ2UgaXQgaGVyZS4gIFVubGlrZSB0aGUgbGlzdGVuZXJcXG4gOTUyOlxcdFxcdFxcdCAqIGJlaW5nIGNsb3NlZCwgQHNrIGlzIGxpdmUgYW5kIG5lZWRzIGl0cyBsb2NrLlxcbiA5NTM6XFx0XFx0XFx0ICovXFxuIDk1NDpcXHRcXHRcXHRmYXN0b3BlbnEgPSBcXHUwMDI2aW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZS5mYXN0b3BlbnE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjMwLjE1MTY1Njc5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODQ5NTU4MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTVBUQ1AgUmVxdWVzdCBTb2NrZXQgQ2xvbmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpbmV0X3JlcXNrX2Nsb25lKClgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgYFNPX1JFVVNFUE9SVGAgc29ja2V0IG1pZ3JhdGlvbi4gVGhlIHByb2JsZW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdGhhdCB3aGVuIGEgbGlzdGVuaW5nIHNvY2tldCBpcyBjbG9zZWQgYW5kIGl0cyBjb25uZWN0aW9uIHJlcXVlc3RzIGFyZSBtb3ZlZCB0byBhbm90aGVyIGxpc3RlbmVyIGluIHRoZSByZXVzZXBvcnQgZ3JvdXAsIHRoZSBjbG9uaW5nIHByb2Nlc3MsIGhhbmRsZWQgYnkgYGluZXRfcmVxc2tfY2xvbmUoKWAsIHdhc24ndCBwcm9wZXJseSB0YWtpbmcgTVBUQ1Atc3BlY2lmaWMgc3RhdGUgaW50byBhY2NvdW50LiBUaGlzIG1lYW5zIHRoaW5ncyBsaWtlIE1QVENQIHRva2VuIHRyYWNraW5nIGFuZCB0aGUgbWFuYWdpbmcgb2YgdGhlIGBtc2tgIHJlZmVyZW5jZSB3ZXJlbid0IGJlaW5nIGNsb25lZCBhbG9uZyB3aXRoIHRoZSByZXF1ZXN0IHNvY2tldCAoYHJlcXNrYCkuXG5cblRoZSBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIHRoaXMgYnkgaW50cm9kdWNpbmcgYG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmVgIGFuZCBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCB0byBoYW5kbGUgdGhlIE1QVENQLXNwZWNpZmljIGFzcGVjdHMgb2YgdGhlIGNsb25pbmcuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGl0IGhvbGRzLCBhbmQgdGhlbiBJIGhhdmUgdG8gZGlnIGludG8gYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAgdG8gc2VlIGhvdyBpdHMgY29tcG9uZW50cyBhcmUgaW5pdGlhbGl6ZWQuIEVuc3VyaW5nIHRoZXNlIGNvbXBvbmVudHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGlzIGNyaXRpY2FsIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVncyBkb3duIHRoZSByb2FkLiBUaGlzIHJlcXVpcmVzIGEgbWV0aWN1bG91cyB3YWxrdGhyb3VnaCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBkYXRhIHN0cnVjdHVyZSBhbGlnbm1lbnQgYW5kIGJpdGZpZWxkIGhhbmRsaW5nLiBUaGUgZ29hbCBpcyB0byB2ZXJpZnkgdGhhdCB0aGVzZSBuZXcgZnVuY3Rpb25zIGVuc3VyZSBhbGwgTVBUQ1AtcmVsYXRlZCBkYXRhIGlzIGNvcnJlY3RseSBjb3BpZWQgZHVyaW5nIHRoZSBjbG9uaW5nIG9wZXJhdGlvbiB3aXRob3V0IGxlYWtpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjYxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6MzMuMDAxMjE3ODQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzMjk2ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avb3B0aW9ucy5jPTk0Nj1ib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdW5zaWduZWQgaW50ICpzaXplLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy05NDgte1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6OTQ5OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9vcHRpb25zLmMtOTUwLVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzcxMz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNzE3LXtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNzE4OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM3MTktXFx0c3RydWN0IHNvY2sgKm5zayA9IHNrX2Nsb25lX2xvY2soc2ssIEdGUF9BVE9NSUMpO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9NDk1PXN0cnVjdCBjc3VtX3BzZXVkb19oZWFkZXIge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtNTAxLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUwMjpzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sge1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTUwMy1cXHRzdHJ1Y3RcXHR0Y3BfcmVxdWVzdF9zb2NrIHNrO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtNTIyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUyMzpzdGF0aWMgaW5saW5lIHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqXFxubmV0L21wdGNwL3Byb3RvY29sLmgtNTI0LW1wdGNwX3N1YmZsb3dfcnNrKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJzaylcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjUte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjUyNjpcXHRyZXR1cm4gKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqKXJzaztcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC01MjctfVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9MTA4NT1pbnQgbXB0Y3BfdG9rZW5fbmV3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNzayk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTA4Njpib29sIG1wdGNwX3Rva2VuX2FjY2VwdChzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnIsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTA4Ny1cXHRcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNTc9c3RhdGljIGlubGluZSBib29sIHN1YmZsb3dfc2ltdWx0YW5lb3VzX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2NS0jaWZkZWYgQ09ORklHX1NZTl9DT09LSUVTXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM2Njp2b2lkIHN1YmZsb3dfaW5pdF9yZXFfY29va2llX2pvaW5fc2F2ZShjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNjctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNjg6Ym9vbCBtcHRjcF90b2tlbl9qb2luX2Nvb2tpZV9pbml0X3N0YXRlKHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3Byb3RvY29sLmgtMTM2OS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTEzNzI9c3RhdGljIGlubGluZSB2b2lkXFxubmV0L21wdGNwL3Byb3RvY29sLmg6MTM3MzpzdWJmbG93X2luaXRfcmVxX2Nvb2tpZV9qb2luX3NhdmUoY29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC0xMzc0LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYikge31cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaD0xMzc1PXN0YXRpYyBpbmxpbmUgYm9vbFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjEzNzY6bXB0Y3BfdG9rZW5fam9pbl9jb29raWVfaW5pdF9zdGF0ZShzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxLFxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEzNzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9Mzg9c3RhdGljIHZvaWQgc3ViZmxvd19yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0zOS17XFxubmV0L21wdGNwL3N1YmZsb3cuYzo0MDpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTQxLVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz01MD12b2lkIG1wdGNwX3N1YmZsb3dfcmVxc2tfY2xvbmUoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy01Mi17XFxubmV0L21wdGNwL3N1YmZsb3cuYzo1MzpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjU0OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqbmV3X3N1YmZsb3dfcmVxO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtNTUtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9OTY9c3RhdGljIGJvb2wgbXB0Y3BfY2FuX2FjY2VwdF9uZXdfc3ViZmxvdyhjb25zdCBzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMDQtLyogdmFsaWRhdGUgcmVjZWl2ZWQgdG9rZW4gYW5kIGNyZWF0ZSB0cnVuY2F0ZWQgaG1hYyBhbmQgbm9uY2UgZm9yIFNZTi1BQ0sgKi9cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjEwNTpzdGF0aWMgdm9pZCBzdWJmbG93X3JlcV9jcmVhdGVfdGhtYWMoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEwNi17XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTEyMD1zdGF0aWMgc3RydWN0IG1wdGNwX3NvY2sgKnN1YmZsb3dfdG9rZW5fam9pbl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTEyMS17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxMjI6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0xMjMtXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zaztcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTQ0PXN0YXRpYyB2b2lkIHN1YmZsb3dfaW5pdF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNDUte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTQ2OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTQ3LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xODM9c3RhdGljIGludCBzdWJmbG93X2NoZWNrX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4Ny1cXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrX2xpc3RlbmVyKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4ODpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4OS1cXHRzdHJ1Y3QgbXB0Y3Bfb3B0aW9uc19yZWNlaXZlZCBtcF9vcHQ7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTMwMD1pbnQgbXB0Y3Bfc3ViZmxvd19pbml0X2Nvb2tpZV9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0zMDQtXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqbGlzdGVuZXIgPSBtcHRjcF9zdWJmbG93X2N0eChza19saXN0ZW5lcik7XFxubmV0L21wdGNwL3N1YmZsb3cuYzozMDU6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3N1YmZsb3cuYy0zMDYtXFx0c3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgbXBfb3B0O1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz03ODM9RVhQT1JUX1NZTUJPTChtcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzg1LS8qIHZhbGlkYXRlIGhtYWMgcmVjZWl2ZWQgaW4gdGhpcmQgQUNLICovXFxubmV0L21wdGNwL3N1YmZsb3cuYzo3ODY6c3RhdGljIGJvb2wgc3ViZmxvd19obWFjX3ZhbGlkKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N1YmZsb3cuYy03ODctXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkICptcF9vcHQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTgzOT1zdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg0OC1cXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpsaXN0ZW5lciA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg0OTpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODUwLVxcdHN0cnVjdCBtcHRjcF9vcHRpb25zX3JlY2VpdmVkIG1wX29wdDtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjA3Nz1zdGF0aWMgdm9pZCBzdWJmbG93X3VscF9jbG9uZShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwODAte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjA4MTpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIwODItXFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqb2xkX2N0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KG5ld3NrKTtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE2OD1zdGF0aWMgaW50IHN1YmZsb3dfb3BzX2luaXQoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnN1YmZsb3dfb3BzKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE2OS17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTcwOlxcdHN1YmZsb3dfb3BzLVxcdTAwM2VvYmpfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3MS1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MjIxNz12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIyMTgte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjIxOTpcXHQvKiBJbiBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2ssIHdlIGFzc3VtZSB0aGUgVENQIHJlcXVlc3Qgc29ja1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjIyMC1cXHQgKiBzdHJ1Y3R1cmVzIGZvciB2NCBhbmQgdjYgaGF2ZSB0aGUgc2FtZSBzaXplLiBJdCBzaG91bGQgbm90IGNoYW5nZWQgaW5cXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmM9NTk9c3RhdGljIHZvaWQgbXB0Y3Bfam9pbl9zdG9yZV9zdGF0ZShzdHJ1Y3Qgam9pbl9lbnRyeSAqZW50cnksXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo2MDpcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxKVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtNjEte1xcbi0tXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03MC1cXG5uZXQvbXB0Y3Avc3luY29va2llcy5jOjcxOnZvaWQgc3ViZmxvd19pbml0X3JlcV9jb29raWVfam9pbl9zYXZlKGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEsXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYy03Mi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zeW5jb29raWVzLmMtOTEtICovXFxubmV0L21wdGNwL3N5bmNvb2tpZXMuYzo5Mjpib29sIG1wdGNwX3Rva2VuX2pvaW5fY29va2llX2luaXRfc3RhdGUoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSxcXG5uZXQvbXB0Y3Avc3luY29va2llcy5jLTkzLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYz00OD1zdGF0aWMgc3RydWN0IHRva2VuX2J1Y2tldCAqdG9rZW5fYnVja2V0KHUzMiB0b2tlbilcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jLTUzLS8qIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIGhlbGQgKi9cXG5uZXQvbXB0Y3AvdG9rZW4uYzo1NDpzdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcXG5uZXQvbXB0Y3AvdG9rZW4uYy01NS1fX3Rva2VuX2xvb2t1cF9yZXEoc3RydWN0IHRva2VuX2J1Y2tldCAqdCwgdTMyIHRva2VuKVxcbm5ldC9tcHRjcC90b2tlbi5jLTU2LXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzo1NzpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcTtcXG5uZXQvbXB0Y3AvdG9rZW4uYy01OC1cXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqcG9zO1xcbi0tXFxubmV0L21wdGNwL3Rva2VuLmM9MTA4PWludCBtcHRjcF90b2tlbl9uZXdfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxubmV0L21wdGNwL3Rva2VuLmMtMTA5LXtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoxMTA6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpzdWJmbG93X3JlcSA9IG1wdGNwX3N1YmZsb3dfcnNrKHJlcSk7XFxubmV0L21wdGNwL3Rva2VuLmMtMTExLVxcdHN0cnVjdCB0b2tlbl9idWNrZXQgKmJ1Y2tldDtcXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jPTE5MD12b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYy0xOTIte1xcbm5ldC9tcHRjcC90b2tlbi5jOjE5MzpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnN1YmZsb3dfcmVxID0gbXB0Y3Bfc3ViZmxvd19yc2socmVxKTtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoxOTQ6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpuZXdfc3ViZmxvd19yZXE7XFxubmV0L21wdGNwL3Rva2VuLmM6MTk1OlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbm5ldC9tcHRjcC90b2tlbi5jLTE5Ni1cXHRzdHJ1Y3QgdG9rZW5fYnVja2V0ICpidWNrZXQ7XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMjktICovXFxubmV0L21wdGNwL3Rva2VuLmM6MjMwOmJvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxLFxcbm5ldC9tcHRjcC90b2tlbi5jLTIzMS1cXHRcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrKVxcbm5ldC9tcHRjcC90b2tlbi5jLTIzMi17XFxubmV0L21wdGNwL3Rva2VuLmM6MjMzOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcG9zO1xcbm5ldC9tcHRjcC90b2tlbi5jLTIzNC1cXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYz00MDE9dm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbm5ldC9tcHRjcC90b2tlbi5jLTQwMi17XFxubmV0L21wdGNwL3Rva2VuLmM6NDAzOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbm5ldC9tcHRjcC90b2tlbi5jOjQwNDpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnBvcztcXG5uZXQvbXB0Y3AvdG9rZW4uYy00MDUtXFx0c3RydWN0IHRva2VuX2J1Y2tldCAqYnVja2V0O1xcbi0tXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy01LVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6NjpzdGF0aWMgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpidWlsZF9yZXFfc29jayhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy03LXtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjg6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXE7XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy05LVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM6MTA6XFx0cmVxID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBzaXplb2Yoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrKSxcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExLVxcdFxcdFxcdCAgICBHRlBfVVNFUik7XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTE4PXN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfcmVxX2Jhc2ljKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTE5LXtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jOjIwOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcmVxID0gYnVpbGRfcmVxX3NvY2sodGVzdCk7XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy0yMS1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbnVsbF9tc2sgPSBOVUxMO1xcbi0tXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYz05ND1zdGF0aWMgdm9pZCBtcHRjcF90b2tlbl90ZXN0X2FjY2VwdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy05NS17XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzo5NjpcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2sgKnJlcSA9IGJ1aWxkX3JlcV9zb2NrKHRlc3QpO1xcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtOTctXFx0c3RydWN0IG1wdGNwX3NvY2sgKm1zayA9IGJ1aWxkX21zayh0ZXN0KTtcXG4tLVxcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmM9MTEzPXN0YXRpYyB2b2lkIG1wdGNwX3Rva2VuX3Rlc3RfZGVzdHJveWVkKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExNC17XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMTU6XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpyZXEgPSBidWlsZF9yZXFfc29jayh0ZXN0KTtcXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jLTExNi1cXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gYnVpbGRfbXNrKHRlc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDozNC43MTQ1MjI0NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg2Njg4NDA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrIFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRoaW5raW5nLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBtYWtlIHN1cmUgSSdtIGNyeXN0YWwgY2xlYXIgb24gdGhlIGRlZmluaXRpb24gb2YgdGhlIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLiBXaGVyZSBiZXR0ZXIgdG8gc3RhcnQgdGhhbiB0aGUgYXV0aG9yaXRhdGl2ZSBzb3VyY2Ug4oCTIHRoZSBoZWFkZXIgZmlsZSwgYG5ldC9tcHRjcC9wcm90b2NvbC5oYCwgcmlnaHQ/IEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzdHJ1Y3R1cmUgdG8gbWFrZSBhbnkgbWVhbmluZ2Z1bCBwcm9ncmVzcyB3aXRoIHRoaXMgYXNwZWN0IG9mIE1QVENQLiBObyBzZW5zZSBpbiB3aW5naW5nIGl0IHdoZW4gdGhlIHByZWNpc2UgZGVmaW5pdGlvbnMgYXJlIHJpZ2h0IGF0IG15IGZpbmdlcnRpcHMuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDozNi41ODE0MDkzMzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdH07XFxuIDUwMTpcXHRcXG4gNTAyOlxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayB7XFxuIDUwMzpcXHRcXHRzdHJ1Y3RcXHR0Y3BfcmVxdWVzdF9zb2NrIHNrO1xcbiA1MDQ6XFx0XFx0dTE2XFx0bXBfY2FwYWJsZSA6IDEsXFxuIDUwNTpcXHRcXHRcXHRtcF9qb2luIDogMSxcXG4gNTA2OlxcdFxcdFxcdGJhY2t1cCA6IDEsXFxuIDUwNzpcXHRcXHRcXHRyZXF1ZXN0X2JrdXAgOiAxLFxcbiA1MDg6XFx0XFx0XFx0Y3N1bV9yZXFkIDogMSxcXG4gNTA5OlxcdFxcdFxcdGFsbG93X2pvaW5faWQwIDogMTtcXG4gNTEwOlxcdFxcdHU4XFx0bG9jYWxfaWQ7XFxuIDUxMTpcXHRcXHR1OFxcdHJlbW90ZV9pZDtcXG4gNTEyOlxcdFxcdHU2NFxcdGxvY2FsX2tleTtcXG4gNTEzOlxcdFxcdHU2NFxcdGlkc247XFxuIDUxNDpcXHRcXHR1MzJcXHR0b2tlbjtcXG4gNTE1OlxcdFxcdHUzMlxcdHNzbl9vZmZzZXQ7XFxuIDUxNjpcXHRcXHR1NjRcXHR0aG1hYztcXG4gNTE3OlxcdFxcdHUzMlxcdGxvY2FsX25vbmNlO1xcbiA1MTg6XFx0XFx0dTMyXFx0cmVtb3RlX25vbmNlO1xcbiA1MTk6XFx0XFx0c3RydWN0IG1wdGNwX3NvY2tcXHQqbXNrO1xcbiA1MjA6XFx0XFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgdG9rZW5fbm9kZTtcXG4gNTIxOlxcdH07XFxuIDUyMjpcXHRcXG4gNTIzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICpcXG4gNTI0OlxcdG1wdGNwX3N1YmZsb3dfcnNrKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJzaylcXG4gNTI1OlxcdHtcXG4gNTI2OlxcdFxcdHJldHVybiAoc3RydWN0IG1wdGNwX3N1YmZsb3dfcmVxdWVzdF9zb2NrICopcnNrO1xcbiA1Mjc6XFx0fVxcbiA1Mjg6XFx0XFxuIDUyOTpcXHRzdHJ1Y3QgbXB0Y3BfZGVsZWdhdGVkX2FjdGlvbiB7XFxuIDUzMDpcXHRcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcXG4gNTMxOlxcdFxcdGxvY2FsX2xvY2tfdCBiaF9sb2NrO1xcbiA1MzI6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBoZWFkO1xcbiA1MzM6XFx0fTtcXG4gNTM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDozNi41ODE1MDcwMjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA4MTUwNDg1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaW5ldF9yZXFza19jbG9uZWAgUHJvY2VzcyB3aXRoIE1QVENQIFN1YmZsb3dzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGBpbmV0X3JlcXNrX2Nsb25lYCBmdW5jdGlvbiwgZm9jdXNpbmcgb24gdGhlIE1QVENQIHN1YmZsb3cgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZXF1ZXN0IHNvY2tldCBpcyBjbG9uZWQgYW5kIGhvdyBNUFRDUC1zcGVjaWZpYyBkYXRhIGlzIGhhbmRsZWQuXG5cbkZpcnN0LCB3aXRoaW4gYGluZXRfcmVxc2tfY2xvbmVgLCB0aGUgY29kZSBhbGxvY2F0ZXMgYSBuZXcgYHJlcXVlc3Rfc29ja2AgKGBucmVxYCkgdXNpbmcgYGttZW1fY2FjaGVfYWxsb2NgLiAgQ3J1Y2lhbGx5LCBpdCB1c2VzIGByZXEtXHUwMDNlcnNrX29wcy1cdTAwM2VzbGFiYCwgd2hpY2gsIGluIHRoZSBNUFRDUCBzdWJmbG93IGNhc2UsIGlzIGNvbmZpZ3VyZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIGBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgLiBJIHNlZSB0aGF0IGEgYG1lbWNweWAgaXMgcGVyZm9ybWVkLiBJdCBjb3BpZXMgdGhlIGluaXRpYWwgcGFydCBvZiB0aGUgYHN0cnVjdCBzb2NrYCBmaWVsZHMgZnJvbSB0aGUgb3JpZ2luYWwgKGByZXFfc2tgKSB0byB0aGUgbmV3IG9uZSAoYG5yZXFfc2tgKS4gVGhlbiwgaXQgdXNlcyBgdW5zYWZlX21lbWNweWAgdG8gY29weSB0aGUgcmVtYWluaW5nIE1QVENQLXNwZWNpZmljIGZpZWxkcyBiZXlvbmQgdGhlIGBzdHJ1Y3Qgc29ja2Agc3RydWN0dXJlLiAgVGhpcyBpcyBiYXNlZCBvbiB0aGUgc2l6ZSBkZWZpbmVkIGJ5IGByZXEtXHUwMDNlcnNrX29wcy1cdTAwM2VvYmpfc2l6ZWAsIHdoaWNoLCBhcyBJIG5vdGVkLCBlcXVhbHMgYHNpemVvZihzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2spYCB3aGVuIE1QVENQIHN1YmZsb3dzIGFyZSBpbnZvbHZlZC4gVGhpcyBtZWFucyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyBsYXJnZXIgdGhhbiBgc3RydWN0IHNvY2tgIGFuZCBgdW5zYWZlX21lbWNweWAgY29waWVzIHRoZSByZW1haW5pbmcgcGFydCwgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5leHQsIHRoZXJlJ3MgYSBjaGVjayB1c2luZyBgcnNrX2lzX21wdGNwKHJlcSlgIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGFuIE1QVENQIHN1YmZsb3cuIElmIGl0IGlzLCB0aGUgY29kZSBjYWxscyBgbXB0Y3Bfc3ViZmxvd19yZXFza19jbG9uZWAuIFRoaXMgZnVuY3Rpb24gc2VlbXMgY3JpdGljYWwgZm9yIGhhbmRsaW5nIHRoZSBNUFRDUC1zcGVjaWZpYyBzdGF0ZS5cblxuSW5zaWRlIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lYCwgSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgbG9naWM6IHRoZSBnb2FsIGlzIHRvIGluaXRpYWxpemUgdGhlIE1QVENQLXNwZWNpZmljIHBhcnQgb2YgdGhlIGNsb25lZCByZXF1ZXN0LiBgbXB0Y3Bfc3ViZmxvd19yc2tgIGlzIHVzZWQgdG8gZ2V0IHBvaW50ZXJzIHRvIHRoZSBgbXB0Y3Bfc3ViZmxvd19yZXF1ZXN0X3NvY2tgIHN0cnVjdHVyZXMgZm9yIGJvdGggdGhlIG9yaWdpbmFsIChgcmVxYCkgYW5kIHRoZSBuZXcgKGBuZXdfcmVxYCkgcmVxdWVzdCBzb2Nrcy4gVGhlIGNvZGUgYXBwZWFycyB0byBiZSBlbnN1cmluZyB0aGF0IGl0IGRvZXNuJ3QgdHJ5IHRvIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHNvY2tldCBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGFscmVhZHkgemVyby4gVGhlbiwgaXQgYXR0ZW1wdHMgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGFzc29jaWF0ZWQgYG1wdGNwX3NvY2tgIChgbXNrYCkgdXNpbmcgYHJlZmNvdW50X2luY19ub3RfemVyb19hY3F1aXJlYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBzaGFyZWQgb3duZXJzaGlwIG9yIGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgcmVxdWVzdCBzb2NrZXQgYW5kIGEgbWFzdGVyIE1QVENQIHNvY2tldC4gIFRoZXJlJ3MgYWxzbyBhIGNoZWNrIHVzaW5nIGBSRUFEX09OQ0VgIHRvIGVuc3VyZSB0aGUgdmFsdWUgb2YgYG1za2AgaGFzbid0IGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24sIGFuZCBpZiBpdCBoYXMsIHRoZSBjb2RlIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgc2V0cyBgbXNrYCB0byBOVUxMLiBGaW5hbGx5LCBpdCBhc3NpZ25zIHRoZSBgbXNrYCAocG9zc2libHkgTlVMTCBpZiBubyB2YWxpZCBzb2NrZXQgZXhpc3RzKSB0byB0aGUgbmV3IHN1YmZsb3cgcmVxdWVzdC4gVGhlbiBpdCBjYWxscyBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCB0byBtb3ZlIHRva2VuLXJlbGF0ZWQgZGF0YSBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRvIHRoZSBuZXcgY2xvbmUuXG5cbmBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3RgIHNlZW1zIHRvIG1hbmFnZSB0b2tlbiBidWNrZXRzIHJlbGF0ZWQgdG8gZmxvdyBjb250cm9sIG9yIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gSXQgY2hlY2tzIGlmIHRoZSB0b2tlbiBub2RlIGZvciB0aGUgc3ViZmxvdyByZXF1ZXN0IGlzIHVuaGFzaGVkLiBJZiBpdCBpcywgYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAgaXMgY2FsbGVkLCB3aGljaCB3aWxsIGxpa2VseSBoYW5kbGUgaW5pdGlhbGl6aW5nIHRoaXMgdG9rZW4gZGF0YSBzdHJ1Y3R1cmUuIElmIG5vdCwgaXQgcmV0cmlldmVzIHRoZSBgdG9rZW5fYnVja2V0YC4gVGhlIGNvZGUgdGFrZXMgYSBzcGlubG9jayB0byBwcm90ZWN0IHNoYXJlZCBhY2Nlc3MgdG8gdGhlIGJ1Y2tldC4gSW5zaWRlIHRoZSBsb2NrLCBpdCByZS1jaGVja3MgaWYgdGhlIHRva2VuIG5vZGUgaXMgdW5oYXNoZWQuIElmIGl0IHN0aWxsIGlzLCBpdCBjYWxscyBgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0YC4gT3RoZXJ3aXNlLCBpdCBmaW5kcyB0aGUgcG9zaXRpb24gb2YgdGhlIG9sZCBgdG9rZW5gIHVzaW5nIHRoZSBidWNrZXQncyBsb29rdXAuIEl0IHRoZW4gdHJpZXMgdG8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgYHRva2VuYCB3aXRoIHRoZSBuZXcgb25lIHVzaW5nIGBobGlzdF9udWxsc19yZXBsYWNlX2luaXRfcmN1YCwgYnV0IG9ubHkgaWYgdGhlIGZvdW5kIHBvc2l0aW9uIG1hdGNoZXMgdGhlIGV4aXN0aW5nIG9uZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyBgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0YCBhZ2FpbiwgaW1wbHlpbmcgYSBmYWxsYmFjayBpbml0aWFsaXphdGlvbiBpZiB0aGUgcmVwbGFjZW1lbnQgZmFpbHMuXG5cbk5vdyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAgdG8gZnVsbHkgZ3Jhc3AgdGhlIHRva2VuIG1hbmFnZW1lbnQgc2NoZW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE1MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDo0Ny4zOTY1NTgzOThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjQ5MjE2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9wcm90b2NvbC5oPTEwNzU9dm9pZCBfX2luaXQgbXB0Y3BfdG9rZW5faW5pdCh2b2lkKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDoxMDc2OnN0YXRpYyBpbmxpbmUgdm9pZCBtcHRjcF90b2tlbl9pbml0X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTEwNzcte1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNDQ9c3RhdGljIHZvaWQgc3ViZmxvd19pbml0X3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTUyLVxcdHN1YmZsb3dfcmVxLVxcdTAwM2Vtc2sgPSBOVUxMO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTUzOlxcdG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdChyZXEpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU0LX1cXG4tLVxcbm5ldC9tcHRjcC90b2tlbi5jPTE5MD12b2lkIG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMDAtXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkX2xvY2tsZXNzKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpIHtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoyMDE6XFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xcbm5ldC9tcHRjcC90b2tlbi5jLTIwMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW4uYy0yMDctXFx0aWYgKGhsaXN0X251bGxzX3VuaGFzaGVkKFxcdTAwMjZzdWJmbG93X3JlcS1cXHUwMDNldG9rZW5fbm9kZSkpIHtcXG5uZXQvbXB0Y3AvdG9rZW4uYzoyMDg6XFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xcbm5ldC9tcHRjcC90b2tlbi5jLTIwOS1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L21wdGNwL3Rva2VuLmMtMjE0LVxcdFxcdGVsc2VcXG5uZXQvbXB0Y3AvdG9rZW4uYzoyMTU6XFx0XFx0XFx0bXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KG5ld19yZXEpO1xcbm5ldC9tcHRjcC90b2tlbi5jLTIxNi1cXHR9XFxuLS1cXG5uZXQvbXB0Y3AvdG9rZW5fdGVzdC5jPTY9c3RhdGljIHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqYnVpbGRfcmVxX3NvY2soc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYy0xMi1cXHRLVU5JVF9FWFBFQ1RfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIHJlcSk7XFxubmV0L21wdGNwL3Rva2VuX3Rlc3QuYzoxMzpcXHRtcHRjcF90b2tlbl9pbml0X3JlcXVlc3QoKHN0cnVjdCByZXF1ZXN0X3NvY2sgKilyZXEpO1xcbm5ldC9tcHRjcC90b2tlbl90ZXN0LmMtMTQtXFx0c29ja19uZXRfc2V0KChzdHJ1Y3Qgc29jayAqKXJlcSwgXFx1MDAyNmluaXRfbmV0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6NDguODYxNDg0OTgzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzODAyMjQxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYG1wdGNwX3Rva2VuX2luaXRfcmVxdWVzdGAsIGZvY3VzaW5nIG9uIHdoYXQncyBpbXBvcnRhbnQgZm9yIHNvbWVvbmUgd2l0aCB5b3VyIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgdGhpcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IuLi4gaW5pdGlhdGluZyB0aGUgdG9rZW4gZXhjaGFuZ2UgZm9yIE1QVENQLCBvYnZpb3VzbHkuIENydWNpYWwgZm9yIGVzdGFibGlzaGluZyB0aGF0IHN1YmZsb3cgd2l0aCB0aGUgYXNzb2NpYXRlZCBjb250cm9sIGluZm9ybWF0aW9uLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCDigJMgd2hhdCBraW5kIG9mIGBzdHJ1Y3RgcyBhcmUgd2UgZGVhbGluZyB3aXRoIGhlcmU/IFByb2JhYmx5IHNvbWUgc29ydCBvZiBjb25uZWN0aW9uIGNvbnRleHQgKGBzdHJ1Y3QgbXB0Y3Bfc29ja2AsIHBlcmhhcHM/KSBhbmQgdG9rZW4tcmVsYXRlZCBkYXRhIChgc3RydWN0IG1wdGNwX3Rva2VuYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5KS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0b2tlbiBpdHNlbGYgaXMgZ2VuZXJhdGVkLCBhbmQgY3J1Y2lhbGx5LCBob3cgaXRzIGluaXRpYWwgdmFsaWRpdHkgcGVyaW9kIGlzIGRldGVybWluZWQuIElzIGl0IGJhc2VkIG9uIGEgdGltZXIsIG9yIGEgbmVnb3RpYXRlZCB2YWx1ZT8gV2hhdCBhcmUgdGhlIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zPyBBcmUgd2UgdXNpbmcgY3J5cHRvZ3JhcGhpYyBwcmltaXRpdmVzIGZvciB0b2tlbiBwcm90ZWN0aW9uPyBLZXkgZXhjaGFuZ2UgaXMgYWx3YXlzIHNvbWV0aGluZyB0byBmb2N1cyBvbi5cblxuVGhlbiwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIGZsb3cuIEhvdyBkb2VzIHRoaXMgcmVxdWVzdCBpbnRlZ3JhdGUgd2l0aCB0aGUgb3ZlcmFsbCBNUFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgcHJvY2Vzcz8gSXMgaXQgY2FsbGVkIHN5bmNocm9ub3VzbHkgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAsIG9yIGlzIGl0IHBhcnQgb2YgYSBsYXRlciBuZWdvdGlhdGlvbj8gSG93IGFyZSBlcnJvcnMgaGFuZGxlZD8gSSdtIGFudGljaXBhdGluZyBlcnJvciBjb2RlcyBmb3IgdGhpbmdzIGxpa2UgcmVzb3VyY2UgbGltaXRhdGlvbnMsIHByb3RvY29sIHZpb2xhdGlvbnMsIG9yIHNlY3VyaXR5IGlzc3VlcyBkdXJpbmcgdG9rZW4gZ2VuZXJhdGlvbi4gSSBleHBlY3QgdGhlcmUgdG8gYmUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIFRDUCBzdGFjaywgcHJvYmFibHkgdG8gc2lnbmFsIHRoZSBuZWVkIGZvciBhIHRva2VuIG9yIHRvIHNlbmQgdGhlIGluaXRpYWwgcmVxdWVzdCBvbiB0aGUgY29udHJvbCBmbG93LlxuXG5JIGFsc28gd2FudCB0byBzZWUgaG93IHRoaXMgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXMgdGhlcmUgbG9ja2luZyBpbnZvbHZlZCwgZXNwZWNpYWxseSBpZiBtdWx0aXBsZSB0aHJlYWRzIG9yIHByb2Nlc3NlcyBtaWdodCBiZSBhdHRlbXB0aW5nIHRvIGVzdGFibGlzaCBzdWJmbG93cyBjb25jdXJyZW50bHk/IEknbSBhbHNvIGNvbnNpZGVyaW5nIGhvdyB0aGUgdG9rZW4gaXMgc3Vic2VxdWVudGx5IHVzZWQuIFRoZSBpbml0IHJlcXVlc3QgaXMgb25seSB0aGUgYmVnaW5uaW5nLiBIb3cgYXJlIHN1YnNlcXVlbnQgdG9rZW4gcmVxdWVzdHMgaGFuZGxlZCwgYW5kIGhvdyBkb2VzIHRoZSBzeXN0ZW0gbWFpbnRhaW4gc3RhdGU/IFdoYXQga2luZCBvZiBvcHRpbWl6YXRpb25zIGFyZSBpbXBsZW1lbnRlZCBmb3IgZGlmZmVyZW50IE1QVENQIGNvbm5lY3Rpb24gc2NlbmFyaW9zP1xuXG5GaW5hbGx5LCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9uIHBlcmZvcm1hbmNlPyBUb2tlbiBleGNoYW5nZSBpcyBhIHRyYWRlLW9mZjogb3ZlcmhlYWQgdmVyc3VzIHRoZSBiZW5lZml0cyBvZiBzdWJmbG93IGNyZWF0aW9uIGFuZCBsb2FkIGJhbGFuY2luZy4gSSdkIGxpa2UgdG8gc2VlIGlmIGFueSBvcHRpbWl6YXRpb25zIGFyZSBpbiBwbGFjZSAoZS5nLiwgY2FjaGluZywgcHJlLWNhbGN1bGF0aW9uLCBldGMuKS4gQW5kIG9mIGNvdXJzZSwgSSdtIGtlZW4gdG8gZXZhbHVhdGUgdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHJvYnVzdG5lc3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBTbywgbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgaXQgaXMgd29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3MjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMToxMDo1Mi4yNDE3MTEyMjhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3Byb3RvY29sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3NCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3NDpcXHRcXG4xMDc1OlxcdHZvaWQgX19pbml0IG1wdGNwX3Rva2VuX2luaXQodm9pZCk7XFxuMTA3NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbXB0Y3BfdG9rZW5faW5pdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4xMDc3OlxcdHtcXG4xMDc4OlxcdFxcdG1wdGNwX3N1YmZsb3dfcnNrKHJlcSktXFx1MDAzZXRva2VuX25vZGUucHByZXYgPSBOVUxMO1xcbjEwNzk6XFx0fVxcbjEwODA6XFx0XFxuMTA4MTpcXHRpbnQgbXB0Y3BfdG9rZW5fbmV3X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG4xMDgyOlxcdHZvaWQgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4xMDgzOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKm5ld19yZXEpO1xcbjEwODQ6XFx0dm9pZCBtcHRjcF90b2tlbl9kZXN0cm95X3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG4xMDg1OlxcdGludCBtcHRjcF90b2tlbl9uZXdfY29ubmVjdChzdHJ1Y3Qgc29jayAqc3NrKTtcXG4xMDg2OlxcdGJvb2wgbXB0Y3BfdG9rZW5fYWNjZXB0KHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqcixcXG4xMDg3OlxcdFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2spO1xcbjEwODg6XFx0Ym9vbCBtcHRjcF90b2tlbl9leGlzdHModTMyIHRva2VuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6NTIuMjQxODAxODE4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNTQ2MTE2NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBNUFRDUCBTb2NrZXQgQ2xvbmluZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBtcHRjcF9za19jbG9uZV9kZXN0cm95YCBmdW5jdGlvbi4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaXMgc29saWQgdGhlcmUsIGVzcGVjaWFsbHkgd2l0aCByZWdhcmQgdG8gYW55IHBvdGVudGlhbCBlcnJvciBzY2VuYXJpb3MuIEFuZCB0aGVuIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgYG1wdGNwX3NrX2Nsb25lX2luaXQoKWAuIFRpbWUgdG8gZ28gZGlnZ2luZyBpbiBgbmV0L21wdGNwL3Byb3RvY29sLmNgIGFuZCBzZWUgaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlc2UgZnVuY3Rpb25zLCB0byBzZWUgaWYgdGhlcmUgaXMgYW4gYXJlYSBvZiBwb3NzaWJsZSBjb25jZXJuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU3NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTA6NTUuMzk2NDE1OTQ4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3AvcHJvdG9jb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzEwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNzEwOlxcdFxcdGluZXRfY3NrX2Rlc3Ryb3lfc29jayhuc2spO1xcbjM3MTE6XFx0fVxcbjM3MTI6XFx0XFxuMzcxMzpcXHRzdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuMzcxNDpcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG1wdGNwX29wdGlvbnNfcmVjZWl2ZWQgKm1wX29wdCxcXG4zNzE1OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc29jayAqc3NrLFxcbjM3MTY6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4zNzE3OlxcdHtcXG4zNzE4OlxcdFxcdHN0cnVjdCBtcHRjcF9zdWJmbG93X3JlcXVlc3Rfc29jayAqc3ViZmxvd19yZXEgPSBtcHRjcF9zdWJmbG93X3JzayhyZXEpO1xcbjM3MTk6XFx0XFx0c3RydWN0IHNvY2sgKm5zayA9IHNrX2Nsb25lX2xvY2soc2ssIEdGUF9BVE9NSUMpO1xcbjM3MjA6XFx0XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcXG4zNzIxOlxcdFxcdHN0cnVjdCBtcHRjcF9zb2NrICptc2s7XFxuMzcyMjpcXHRcXG4zNzIzOlxcdFxcdGlmICghbnNrKVxcbjM3MjQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMzcyNTpcXHRcXG4zNzI2OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbjM3Mjc6XFx0XFx0aWYgKG5zay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbjM3Mjg6XFx0XFx0XFx0aW5ldF9zayhuc2spLVxcdTAwM2VwaW5ldDYgPSBtcHRjcF9pbmV0Nl9zayhuc2spO1xcbjM3Mjk6XFx0I2VuZGlmXFxuMzczMDpcXHRcXG4zNzMxOlxcdFxcdF9fbXB0Y3BfaW5pdF9zb2NrKG5zayk7XFxuMzczMjpcXHRcXG4zNzMzOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbjM3MzQ6XFx0XFx0aWYgKG5zay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbjM3MzU6XFx0XFx0XFx0bXB0Y3BfY29weV9pcDZfb3B0aW9ucyhuc2ssIHNrKTtcXG4zNzM2OlxcdFxcdGVsc2VcXG4zNzM3OlxcdCNlbmRpZlxcbjM3Mzg6XFx0XFx0XFx0bXB0Y3BfY29weV9pcF9vcHRpb25zKG5zaywgc2spO1xcbjM3Mzk6XFx0XFxuMzc0MDpcXHRcXHRtc2sgPSBtcHRjcF9zayhuc2spO1xcbjM3NDE6XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWxvY2FsX2tleSwgc3ViZmxvd19yZXEtXFx1MDAzZWxvY2FsX2tleSk7XFxuMzc0MjpcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNldG9rZW4sIHN1YmZsb3dfcmVxLVxcdTAwM2V0b2tlbik7XFxuMzc0MzpcXHRcXHRtc2stXFx1MDAzZWluX2FjY2VwdF9xdWV1ZSA9IDE7XFxuMzc0NDpcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlZnVsbHlfZXN0YWJsaXNoZWQsIGZhbHNlKTtcXG4zNzQ1OlxcdFxcdGlmIChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfQ1NVTVJFUUQpXFxuMzc0NjpcXHRcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlY3N1bV9lbmFibGVkLCB0cnVlKTtcXG4zNzQ3OlxcdFxcbjM3NDg6XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZXdyaXRlX3NlcSwgc3ViZmxvd19yZXEtXFx1MDAzZWlkc24gKyAxKTtcXG4zNzQ5OlxcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2VzbmRfbnh0LCBtc2stXFx1MDAzZXdyaXRlX3NlcSk7XFxuMzc1MDpcXHRcXHRXUklURV9PTkNFKG1zay1cXHUwMDNlc25kX3VuYSwgbXNrLVxcdTAwM2V3cml0ZV9zZXEpO1xcbjM3NTE6XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZXduZF9lbmQsIG1zay1cXHUwMDNlc25kX254dCArIHRjcF9zayhzc2spLVxcdTAwM2VzbmRfd25kKTtcXG4zNzUyOlxcdFxcdG1zay1cXHUwMDNlc2V0c29ja29wdF9zZXEgPSBtcHRjcF9zayhzayktXFx1MDAzZXNldHNvY2tvcHRfc2VxO1xcbjM3NTM6XFx0XFx0bXB0Y3BfaW5pdF9zY2hlZChtc2ssIG1wdGNwX3NrKHNrKS1cXHUwMDNlc2NoZWQpO1xcbjM3NTQ6XFx0XFxuMzc1NTpcXHRcXHQvKiBwYXNzaXZlIG1zayBpcyBjcmVhdGVkIGFmdGVyIHRoZSBmaXJzdC9NUEMgc3ViZmxvdyAqL1xcbjM3NTY6XFx0XFx0bXNrLVxcdTAwM2VzdWJmbG93X2lkID0gMjtcXG4zNzU3OlxcdFxcbjM3NTg6XFx0XFx0c29ja19yZXNldF9mbGFnKG5zaywgU09DS19SQ1VfRlJFRSk7XFxuMzc1OTpcXHRcXHRzZWN1cml0eV9pbmV0X2Nza19jbG9uZShuc2ssIHJlcSk7XFxuMzc2MDpcXHRcXG4zNzYxOlxcdFxcdC8qIHRoaXMgY2FuJ3QgcmFjZSB3aXRoIG1wdGNwX2Nsb3NlKCksIGFzIHRoZSBtc2sgaXNcXG4zNzYyOlxcdFxcdCAqIG5vdCB5ZXQgZXhwb3N0ZWQgdG8gdXNlci1zcGFjZVxcbjM3NjM6XFx0XFx0ICovXFxuMzc2NDpcXHRcXHRtcHRjcF9zZXRfc3RhdGUobnNrLCBUQ1BfRVNUQUJMSVNIRUQpO1xcbjM3NjU6XFx0XFxuMzc2NjpcXHRcXHQvKiBUaGUgbXNrIG1haW50YWluIGEgcmVmIHRvIGVhY2ggc3ViZmxvdyBpbiB0aGUgY29ubmVjdGlvbnMgbGlzdCAqL1xcbjM3Njc6XFx0XFx0V1JJVEVfT05DRShtc2stXFx1MDAzZWZpcnN0LCBzc2spO1xcbjM3Njg6XFx0XFx0c3ViZmxvdyA9IG1wdGNwX3N1YmZsb3dfY3R4KHNzayk7XFxuMzc2OTpcXHRcXHRsaXN0X2FkZChcXHUwMDI2c3ViZmxvdy1cXHUwMDNlbm9kZSwgXFx1MDAyNm1zay1cXHUwMDNlY29ubl9saXN0KTtcXG4zNzcwOlxcdFxcdHNvY2tfaG9sZChzc2spO1xcbjM3NzE6XFx0XFxuMzc3MjpcXHRcXHQvKiBzZXQgbXNrIGFkZHJlc3NlcyBlYXJseSB0byBlbnN1cmUgbXB0Y3BfcG1fZ2V0X2xvY2FsX2lkKClcXG4zNzczOlxcdFxcdCAqIHVzZXMgdGhlIGNvcnJlY3QgZGF0YVxcbjM3NzQ6XFx0XFx0ICovXFxuMzc3NTpcXHRcXHRtcHRjcF9jb3B5X2luYWRkcnMobnNrLCBzc2spO1xcbjM3NzY6XFx0XFxuMzc3NzpcXHRcXHRtcHRjcF9yY3Zfc3BhY2VfaW5pdChtc2ssIHNzayk7XFxuMzc3ODpcXHRcXHRtc2stXFx1MDAzZXJjdnFfc3BhY2UudGltZSA9IG1wdGNwX3N0YW1wKCk7XFxuMzc3OTpcXHRcXG4zNzgwOlxcdFxcdGlmICghbXB0Y3BfdG9rZW5fYWNjZXB0KHN1YmZsb3dfcmVxLCBtc2spKSB7XFxuMzc4MTpcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzdWJmbG93LVxcdTAwM2Vub2RlKTtcXG4zNzgyOlxcdFxcdFxcdFdSSVRFX09OQ0UobXNrLVxcdTAwM2VmaXJzdCwgTlVMTCk7XFxuMzc4MzpcXHRcXHRcXHRzb2NrX3B1dChzc2spO1xcbjM3ODQ6XFx0XFx0XFx0bXB0Y3Bfc2tfY2xvbmVfZGVzdHJveShuc2spO1xcbjM3ODU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMzc4NjpcXHRcXHR9XFxuMzc4NzpcXHRcXG4zNzg4OlxcdFxcdGlmIChtcF9vcHQtXFx1MDAzZXN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSylcXG4zNzg5OlxcdFxcdFxcdF9fbXB0Y3Bfc3ViZmxvd19mdWxseV9lc3RhYmxpc2hlZChtc2ssIHN1YmZsb3csIG1wX29wdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjEwOjU1LjM5NjYwNzk5OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTc1MjI4ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE1QVENQIFJlcXVlc3QgU29ja2V0IENsb25pbmcgRHVyaW5nIFJldXNlcG9ydCBNaWdyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgS01TQU4gb3IgaWYgS0FTQU4gaXMgc3VmZmljaWVudC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyB0aGUgY2xvbmluZyBvZiBNUFRDUCByZXF1ZXN0IHNvY2tldHMgZHVyaW5nIGEgcmV1c2Vwb3J0IG1pZ3JhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1YmZsb3dzLiBUaGUga2V5IG9wZXJhdGlvbnMgaW52b2x2ZSB0cmFuc2ZlcnJpbmcgTXVsdGlQYXRoIFRDUCAoTVBUQ1ApIHNwZWNpZmljIGRhdGEsIHByaW1hcmlseSBgbXNrYCByZWZlcmVuY2VzIGFuZCB0b2tlbiB0YWJsZSBlbnRyaWVzLCBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHNvY2tldCB0byBpdHMgY2xvbmUuIEZhaWx1cmUgc2NlbmFyaW9zIHdpdGhpbiBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBhcmUgYWxzbyBncmFjZWZ1bGx5IGhhbmRsZWQuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0byBsb29rIGZvciBwb3RlbnRpYWwgS01TQU4gdHJpZ2dlcnMuIFdlIGtub3cgS01TQU4gY29uY2VybnMgaXRzZWxmIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBhcnRpY3VsYXJseSB0aG9zZSB0aGF0IGxlYWsgaW5mb3JtYXRpb24gdG8gdXNlciBzcGFjZSBvciB0aGF0IGFmZmVjdCBjb250cm9sIGZsb3cuIExvb2tpbmcgYXQgdGhlIGNyaXRlcmlhLCBJJ20gY2hlY2tpbmcgZm9yIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgdW5pbml0aWFsaXplZCByZWFkcywgYW5kIGFueSBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhlIGNvZGUgY2hhbmdlcyBoZXJlIGludm9sdmUgYGluZXRfcmVxc2tfY2xvbmUoKWAsIHdoaWNoIGNhbGxzIGBtcHRjcF9zdWJmbG93X3JlcXNrX2Nsb25lKClgIHRvIGhhbmRsZSB0aGUgTVBUQ1Agc3BlY2lmaWMgc3R1ZmYuIFdpdGhpbiB0aGF0LCB3ZSBoYXZlIGBtcHRjcF90b2tlbl9tb3ZlX3JlcXVlc3QoKWAgYW5kIGBtcHRjcF90b2tlbl9hY2NlcHQoKWAsIHdpdGggcHJvcGVyIGxvY2tpbmcgYW5kIGxpc3QgbWFuaXB1bGF0aW9uLiBFcnJvciBoYW5kbGluZyBpbiBgbXB0Y3BfdG9rZW5fYWNjZXB0YCBpcyBhbHNvIGluY2x1ZGVkLiBUaGVyZSdzIGFsc28gYG1wdGNwX3NrX2Nsb25lX2luaXQoKWAgaW4gY2FzZSBvZiBmYWlsdXJlLlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBwb3RlbnRpYWwgS01TQU4gY29uY2VybnM6XG5cbiogICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzPyoqIE5vLiBUaGUgY2hhbmdlcyBkb24ndCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgbGVhdmUgZmllbGRzIHVuaW5pdGlhbGl6ZWQgYW5kIHRoZW4gZXhwb3NlIHRoZW0gdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBicmFuY2hpbmcuIGBpbmV0X3JlcXNrX2Nsb25lKClgIGlzIGFsbG9jYXRpbmcgYSBgbnJlcWAgZnJvbSB0aGUgc2xhYiBjYWNoZSwgYW5kIHRoZW4gY29weWluZyB0aGUgY29udGVudHMgZnJvbSBhIHNvdXJjZSBgcmVxYCB1c2luZyBgbWVtY3B5YC4gVGhlIG5ldyBgbXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0YCBpbml0aWFsaXplcyB0aGUgYG5ld19zdWJmbG93X3JlcS1cdTAwM2V0b2tlbl9ub2RlYC4gVGhlIGFsbG9jYXRpb25zIGFyZSBlaXRoZXIgZnVsbHkgaW5pdGlhbGl6ZWQgb3IgY29waWVkIGZyb20ga25vd24tZ29vZCBkYXRhLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZC5cbiogICAqKkluZm8gTGVha3M/KiogTm8uIE5vdGhpbmcgbmV3IGlzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjcmVhdGVkIG9uIHRoZSBzdGFjaywgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuKiAgICoqVW5pbml0aWFsaXplZCBCdWZmZXIgUmVhZHM/KiogTm8uIFRoZSBjb2RlIGlzbid0IHJlYWRpbmcgZnJvbSBhbnkgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBwb3RlbnRpYWxseSBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRocm91Z2ggaW5jb3JyZWN0IGJvdW5kcyBjaGVja3MuXG5cblRoZXJlZm9yZSwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgdGhlIHBvdGVudGlhbCByaXNrcyBsaWUgaW4gY29uY3VycmVuY3kgaXNzdWVzOiBSQ1UsIHJlZmNvdW50aW5nLCBsb2NraW5nLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGVycm9yIGhhbmRsaW5nLiBIb3dldmVyLCB0aGVzZSBhcmUgcHJlY2lzZWx5IHRoZSBraW5kcyBvZiBidWdzIHRoYXQgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBzdWNoIGFzIHJlZmNvdW50IGNoZWNrZXJzLCBQUk9WRVxcX0xPQ0tJTkcsIGFyZSBidWlsdCB0byBjYXRjaC5cblxuTXkgY29uY2x1c2lvbiBpcyBjbGVhcjogKipLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuKiogVGhpcyBwYXRjaCBwcmltYXJpbHkgZGVhbHMgd2l0aCBjb25jdXJyZW5jeSBjb25jZXJucyByZWxhdGVkIHRvIHNvY2tldCBjbG9uaW5nLCBkYXRhIHRyYW5zZmVyLCBhbmQgcmVmY291bnRpbmcuIFRoZXNlIGlzc3VlcyBhcmUgdGhvcm91Z2hseSBhZGRyZXNzZWQgYnkgdGhlIGV4aXN0aW5nIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVmY291bnQgY2hlY2tpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBhbHRlciBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIFdlJ3JlIHNhZmUgd2l0aCBLQVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOTMsIk91dHB1dFRva2VucyI6MTkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MTE6MDIuOTcxODM4OTI4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBNUFRDUCByZXF1ZXN0IHNvY2tldCBjbG9uaW5nIGR1cmluZyByZXVzZXBvcnQgc29ja2V0IG1pZ3JhdGlvbiBieSBzYWZlbHkgaGFuZGxpbmcgbXNrIHNvY2tldCByZWZjb3VudHMsIG1vdmluZyB0b2tlbiBoYXNoIHRhYmxlIGVudHJpZXMgKG1wdGNwX3Rva2VuX21vdmVfcmVxdWVzdCksIGFuZCBwcm9wZXJseSBjbGVhbmluZyB1cCBhbmQgZmFsbGluZyBiYWNrIHdoZW4gbXB0Y3BfdG9rZW5fYWNjZXB0IGZhaWxzLlxcblxcblRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb25jdXJyZW5jeSwgUkNVIHNhZmV0eSwgc29ja2V0IHJlZmNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlL2Rlc3RydWN0aW9uIHN0YXRlIG1hbmFnZW1lbnQuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIGFyZWEgYXJlIHVzZS1hZnRlci1mcmVlLCByZWZjb3VudGluZyBpc3N1ZXMsIG9yIGxvY2tpbmcvZGVhZGxvY2sgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgbWVtb3J5IGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBwYWRkaW5nL2luZm8tbGVha3MsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIE1QVENQIHJlcXVlc3Qgc29ja2V0IGNsb25pbmcgZHVyaW5nIHJldXNlcG9ydCBzb2NrZXQgbWlncmF0aW9uIGJ5IHNhZmVseSBoYW5kbGluZyBtc2sgc29ja2V0IHJlZmNvdW50cywgbW92aW5nIHRva2VuIGhhc2ggdGFibGUgZW50cmllcyAobXB0Y3BfdG9rZW5fbW92ZV9yZXF1ZXN0KSwgYW5kIHByb3Blcmx5IGNsZWFuaW5nIHVwIGFuZCBmYWxsaW5nIGJhY2sgd2hlbiBtcHRjcF90b2tlbl9hY2NlcHQgZmFpbHMuXFxuXFxuVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbmN1cnJlbmN5LCBSQ1Ugc2FmZXR5LCBzb2NrZXQgcmVmY291bnRpbmcsIGFuZCBsaWZlY3ljbGUvZGVzdHJ1Y3Rpb24gc3RhdGUgbWFuYWdlbWVudC4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgYXJlYSBhcmUgdXNlLWFmdGVyLWZyZWUsIHJlZmNvdW50aW5nIGlzc3Vlcywgb3IgbG9ja2luZy9kZWFkbG9jayBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBtZW1vcnkgY29weWluZyB0byB1c2Vyc3BhY2UsIHBhZGRpbmcvaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow65qg2[1] Phase: Succeeded StartedAt: 2026-09-08 21:11:14 +0000 UTC FinishedAt: 2026-09-08 21:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 21:11:14 +0000 UTC FinishedAt: 2026-09-08 21:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2] Phase: Succeeded StartedAt: 2026-09-08 21:11:14 +0000 UTC FinishedAt: 2026-09-09 00:53:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 21:11:14 +0000 UTC FinishedAt: 2026-09-09 00:53:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 21:11:14 +0000 UTC FinishedAt: 2026-09-08 21:11:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 21:11:14 +0000 UTC FinishedAt: 2026-09-08 21:11:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow65qg2/series-workflow65qg2-convert-artifact-519048573/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 21:11:24 +0000 UTC FinishedAt: 2026-09-08 21:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 21:11:24 +0000 UTC FinishedAt: 2026-09-08 21:27:25 +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:*307fb809-47f3-4a06-8f1e-10b0419e2b5f,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-workflow65qg2/series-workflow65qg2-convert-artifact-519048573/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": "0c9a625a-bd44-49e5-9d87-5cf8d15fa64c", "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-workflow65qg2/series-workflow65qg2-build-action-1240790707/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 21:11:24 +0000 UTC FinishedAt: 2026-09-08 21:27:15 +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:*307fb809-47f3-4a06-8f1e-10b0419e2b5f,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-workflow65qg2/series-workflow65qg2-convert-artifact-519048573/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": "0c9a625a-bd44-49e5-9d87-5cf8d15fa64c", "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-workflow65qg2/series-workflow65qg2-build-action-1240790707/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 21:27:25 +0000 UTC FinishedAt: 2026-09-08 21:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 21:27:25 +0000 UTC FinishedAt: 2026-09-08 21:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 21:27:25 +0000 UTC FinishedAt: 2026-09-08 21:27:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 21:27:25 +0000 UTC FinishedAt: 2026-09-08 21:27:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow65qg2/series-workflow65qg2-convert-artifact-1699343064/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 21:27:35 +0000 UTC FinishedAt: 2026-09-08 21:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 21:27:35 +0000 UTC FinishedAt: 2026-09-08 21:29:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0c9a625a-bd44-49e5-9d87-5cf8d15fa64c,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-workflow65qg2/series-workflow65qg2-build-action-1240790707/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-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 21:29:26 +0000 UTC FinishedAt: 2026-09-08 21:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 21:29:26 +0000 UTC FinishedAt: 2026-09-08 21:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 21:29:26 +0000 UTC FinishedAt: 2026-09-08 21:45:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 21:29:26 +0000 UTC FinishedAt: 2026-09-08 21:45:59 +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:*307fb809-47f3-4a06-8f1e-10b0419e2b5f,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-workflow65qg2/series-workflow65qg2-convert-artifact-1699343064/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": "c8c5b7fe-e579-49b8-b859-912c9d44bb74", "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-workflow65qg2/series-workflow65qg2-build-action-3455423556/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 21:29:26 +0000 UTC FinishedAt: 2026-09-08 21:45:49 +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:*307fb809-47f3-4a06-8f1e-10b0419e2b5f,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-workflow65qg2/series-workflow65qg2-convert-artifact-1699343064/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": "c8c5b7fe-e579-49b8-b859-912c9d44bb74", "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-workflow65qg2/series-workflow65qg2-build-action-3455423556/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 21:45:59 +0000 UTC FinishedAt: 2026-09-08 21:45:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 21:45:59 +0000 UTC FinishedAt: 2026-09-08 21:45:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 21:45:59 +0000 UTC FinishedAt: 2026-09-08 21:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 21:45:59 +0000 UTC FinishedAt: 2026-09-08 21:47:39 +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:*c8c5b7fe-e579-49b8-b859-912c9d44bb74,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-workflow65qg2/series-workflow65qg2-build-action-3455423556/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-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 21:47:49 +0000 UTC FinishedAt: 2026-09-09 00:53:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 21:47:49 +0000 UTC FinishedAt: 2026-09-09 00:53:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"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:*0c9a625a-bd44-49e5-9d87-5cf8d15fa64c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c8c5b7fe-e579-49b8-b859-912c9d44bb74,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-workflow65qg2/series-workflow65qg2-build-action-1240790707/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-workflow65qg2/series-workflow65qg2-build-action-3455423556/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 21:47:49 +0000 UTC FinishedAt: 2026-09-08 21:47:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 21:47:49 +0000 UTC FinishedAt: 2026-09-08 21:47:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"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-workflow65qg2/series-workflow65qg2-convert-artifact-4086079921/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 21:47:49 +0000 UTC FinishedAt: 2026-09-08 21:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 21:47:49 +0000 UTC FinishedAt: 2026-09-08 21:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 21:47:49 +0000 UTC FinishedAt: 2026-09-08 21:47:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 21:47:59 +0000 UTC FinishedAt: 2026-09-09 00:53:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow65qg2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_subflow_reqsk_clone","mptcp_token_move_request","mptcp_token_accept","mptcp_token_destroy_request","mptcp_sk_clone_init","subflow_syn_recv_sock","inet_reqsk_clone"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP"],"series_id":"732d3f57-5aa4-48c9-816c-ced88c98958a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 21:47:59 +0000 UTC FinishedAt: 2026-09-09 00:52:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0c9a625a-bd44-49e5-9d87-5cf8d15fa64c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c8c5b7fe-e579-49b8-b859-912c9d44bb74,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-workflow65qg2/series-workflow65qg2-build-action-1240790707/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-workflow65qg2/series-workflow65qg2-build-action-3455423556/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-workflow65qg2/series-workflow65qg2-convert-artifact-4086079921/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,}