Name: series-workflowz7nvv Phase: Succeeded StartedAt: 2026-08-12 03:06:44 +0000 UTC FinishedAt: 2026-08-12 07:38:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[0] Phase: Succeeded StartedAt: 2026-08-12 03:06:44 +0000 UTC FinishedAt: 2026-08-12 03:57:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 03:06:44 +0000 UTC FinishedAt: 2026-08-12 03:57:13 +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": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "0d628203-d998-453c-95d9-6ef157677e8a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_named_distribute", "tipc_named_node_up", "tipc_nametbl_publish", "tipc_nametb_insert_self_node_pub", "tipc_node_set_dist_bulk" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX25hbWVkX2Rpc3RyaWJ1dGUmIzM0OywKICAgICYjMzQ7dGlwY19uYW1lZF9ub2RlX3VwJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRibF9wdWJsaXNoJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViJiMzNDssCiAgICAmIzM0O3RpcGNfbm9kZV9zZXRfZGlzdF9idWxrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVElQQyBzdWJzeXN0ZW0gdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PQlVGUykgZHVyaW5nIG5hbWUgZGlzdHJpYnV0aW9uIGFuZCBwdWJsaWNhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgc3RhdGUgZmxhZ3MgdG8gYHRpcGNfbmV0YCBhbmQgYHRpcGNfbm9kZWAgYW5kIG1vZGlmaWVzIHRoZSBub2RlIHRpbWVvdXQgYW5kIHVubG9jayBsb2dpYyB0byBoYW5kbGUgcmVkaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBUSVBDIGxvZ2ljLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IGZhbWlseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2ODdlMTQ1OWVlNzMxYTBkNjMyYjU2NTkwZWY3MGExMTdlMzgxNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwMzo1NDoxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmMgYi9uZXQvdGlwYy9jb3JlLmNcbmluZGV4IDMxNTk3NWMzYmU4MTguLjBmMWQzZGRlYWUwOTUgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2NvcmUuY1xuQEAgLTYxLDYgJiM0Mzs2MSw5IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCB0aXBjX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHRuLVx1MDAzZXRyaWFsX2FkZHIgPSAwO1xuIFx0dG4tXHUwMDNlYWRkcl90cmlhbF9lbmQgPSAwO1xuIFx0dG4tXHUwMDNlY2FwYWJpbGl0aWVzID0gVElQQ19OT0RFX0NBUEFCSUxJVElFUztcbiYjNDM7XHR0bi1cdTAwM2VudF9zdG9wID0gZmFsc2U7XG4mIzQzO1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0LCAwKTtcbiBcdElOSVRfV09SSyhcdTAwMjZ0bi1cdTAwM2V3b3JrLCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKTtcbiBcdG1lbXNldCh0bi1cdTAwM2Vub2RlX2lkLCAwLCBzaXplb2YodG4tXHUwMDNlbm9kZV9pZCkpO1xuIFx0bWVtc2V0KHRuLVx1MDAzZW5vZGVfaWRfc3RyaW5nLCAwLCBzaXplb2YodG4tXHUwMDNlbm9kZV9pZF9zdHJpbmcpKTtcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmggYi9uZXQvdGlwYy9jb3JlLmhcbmluZGV4IDljZTVmOWZmNmNjMDMuLjk3NWIxZDQ4MTg2ZTYgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2NvcmUuaFxuQEAgLTE0NSw2ICYjNDM7MTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdC8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovXG4gXHRhdG9taWNfdCB3cV9jb3VudDtcbiYjNDM7XHQvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIG5vZGUmIzM5O3MgYWRkcmVzcyBpcyBzZXQgKi9cbiYjNDM7XHRhdG9taWNfdCBub2RlX2FkZHJfc2V0O1xuJiM0MztcdC8qIFRoZSBuYW1lIHRhYmxlIGhhcyBzdG9wcGVkIHdvcmtpbmcgKi9cbiYjNDM7XHRib29sIG50X3N0b3A7XG4mIzQzO1x0LyogTm9kZSYjMzk7cyBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBuYW1lIHRhYmxlICovXG4mIzQzO1x0Ym9vbCBudF9zZWxmX25vZGVfZXhpc3Q7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aXBjX25ldCAqdGlwY19uZXQoc3RydWN0IG5ldCAqbmV0KVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuYyBiL25ldC90aXBjL25hbWVfZGlzdHIuY1xuaW5kZXggYmE0ZjQ5MDZlMTNiNy4uMDYwYzQyZDhmZGE1NCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXG5AQCAtOTUsOSAmIzQzOzk1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZW5vZGVfc2NvcGUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApO1xuIFx0aWYgKCFza2IpIHtcbiBcdFx0cHJfd2FybihcJiMzNDtQdWJsaWNhdGlvbiBkaXN0cmlidXRpb24gZmFpbHVyZVxcblwmIzM0Oyk7XG5AQCAtMTIxLDkgJiM0MzsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdHN0cnVjdCBkaXN0cl9pdGVtICppdGVtO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbi1cdHdyaXRlX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0aWYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19OT0RFX1NDT1BFKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0xNDYsOSAmIzQzOzE0MiwxNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiAgKiBAZG5vZGU6IG5vZGUgdG8gYmUgdXBkYXRlZFxuICAqIEBwbHM6IGxpbmtlZCBsaXN0IG9mIHB1YmxpY2F0aW9uIGl0ZW1zIHRvIGJlIHBhY2tlZCBpbnRvIGJ1ZmZlciBjaGFpblxuICAqIEBzZXFubzogc2VxdWVuY2UgbnVtYmVyIGZvciB0aGlzIG1lc3NhZ2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4mIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbiYjNDM7ICpcbiAgKi9cbi1zdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi1cdFx0XHQgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4mIzQzO3N0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4mIzQzO1x0XHRcdCAgICB1MzIgZG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBscywgdTE2IHNlcW5vKVxuIHtcbiBcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuQEAgLTE2NCw4ICYjNDM7MTY1LDkgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gXHRcdFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSxcbiBcdFx0XHRcdFx0XHRkbm9kZSk7XG4gXHRcdFx0aWYgKCFza2IpIHtcbiYjNDM7XHRcdFx0XHRfX3NrYl9xdWV1ZV9wdXJnZShsaXN0KTtcbiBcdFx0XHRcdHByX3dhcm4oXCYjMzQ7QnVsayBwdWJsaWNhdGlvbiBmYWlsdXJlXFxuXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXHRcdFx0fVxuIFx0XHRcdGhkciA9IGJ1Zl9tc2coc2tiKTtcbiBcdFx0XHRtc2dfc2V0X2JjX2Fja19pbnZhbGlkKGhkciwgdHJ1ZSk7XG5AQCAtMTk1LDYgJiM0MzsxOTcsODIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gXHRoZHIgPSBidWZfbXNnKHNrYl9wZWVrX3RhaWwobGlzdCkpO1xuIFx0bXNnX3NldF9sYXN0X2J1bGsoaGRyKTtcbiBcdG1zZ19zZXRfbmFtZWRfc2Vxbm8oaGRyLCBzZXFubyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWRcbiYjNDM7ICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4mIzQzOyAqIEBoZWFkOiBsaXN0IG9mIHB1YmxpY2F0aW9uc1xuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuJiM0MzsgKlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4mIzQzO1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4mIzQzO1xuJiM0MztcdC8qIE5hbWUgdGFibGUgaGFzIGJlZW4gZGVsZXRlZCBhZnRlciBuYW1lc3BhY2UgdGVhcmRvd24gb3JcbiYjNDM7XHQgKiBUSVBDIG1vZHVsZSBleGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseSh0bi1cdTAwM2VudF9zdG9wKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBOb2RlJiMzOTtzIHNlbGYgYWRkcmVzcyBpcyBub3Qgc2V0IHlldCAqL1xuJiM0MztcdGlmICghYXRvbWljX3JlYWQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCkpIHtcbiYjNDM7XHRcdC8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSYjMzk7cyB0aW1lciAqL1xuJiM0MztcdFx0dGlwY19ub2RlX3NldF9kaXN0X2J1bGsobmV0LCBkbm9kZSk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QpXG4mIzQzO1x0XHRnb3RvIGRpc3RyaWJ1dGU7XG4mIzQzO1xuJiM0MztcdGlmICh0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihuZXQpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9CVUZTO1xuJiM0MztcbiYjNDM7XHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSB0cnVlO1xuJiM0MztcbiYjNDM7ZGlzdHJpYnV0ZTpcbiYjNDM7XHRpZiAobmFtZWRfZGlzdHJpYnV0ZShuZXQsIGhlYWQsIGRub2RlLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIG50LVx1MDAzZXNuZF9ueHQpID09IC1FTk9CVUZTKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9CVUZTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZVxuJiM0MzsgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuJiM0MzsgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4mIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbiYjNDM7ICpcbiYjNDM7ICovXG4mIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7XG4mIzQzO1x0aW50IHJjID0gMDtcbiYjNDM7XG4mIzQzO1x0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmhlYWQpO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuJiM0MztcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXHUwMDI2aGVhZCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiYjNDM7XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmhlYWQpKSB7XG4mIzQzO1x0XHRpZiAodGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgMCkgPT0gLUVOT0JVRlMpXG4mIzQzO1x0XHRcdHJjID0gLUVOT0JVRlM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTIwMiwyNSAmIzQzOzI4MCwzMiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuICAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxuICAqIEBjYXBhYmlsaXRpZXM6IHBlZXIgbm9kZSYjMzk7cyBjYXBhYmlsaXRpZXNcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4mIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbiYjNDM7ICpcbiAgKi9cbi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xuLVx0dTE2IHNlcW5vO1xuJiM0MztcdGludCByYyA9IDA7XG4gXG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGVhZCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiBcdGlmICghKGNhcGFiaWxpdGllcyBcdTAwMjYgVElQQ19OQU1FRF9CQ0FTVCkpXG4gXHRcdG50LVx1MDAzZXJjX2Rlc3RzJiM0MzsmIzQzOztcbi1cdHNlcW5vID0gbnQtXHUwMDNlc25kX254dDtcbiYjNDM7XG4mIzQzO1x0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcdTAwMjZoZWFkKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4mIzQzO1x0aWYgKCFyYyBcdTAwMjZcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZoZWFkKSkge1xuJiM0MztcdFx0aWYgKHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIDApID09IC1FTk9CVUZTKVxuJiM0MztcdFx0XHRyYyA9IC1FTk9CVUZTO1xuJiM0MztcdH1cbiBcbi1cdHJlYWRfbG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuLVx0bmFtZWRfZGlzdHJpYnV0ZShuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlLCBzZXFubyk7XG4tXHR0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbi1cdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJjO1xuIH1cbiBcbiAvKipcbkBAIC00MTYsNSAmIzQzOzUwMSw2IEBAIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgYmluZGluZ19ub2RlKVxuIFx0XHRwLVx1MDAzZXNrLm5vZGUgPSBzZWxmO1xuIFx0bnQtXHUwMDNlcmNfZGVzdHMgPSAwO1xuJiM0MztcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxuaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5AQCAtNjksMTEgJiM0Mzs2OSwxMiBAQCBzdHJ1Y3QgZGlzdHJfaXRlbSB7XG4gXG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpO1xuLXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKTtcbiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7XG4gdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcbiBcdFx0ICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7XG4gdm9pZCB0aXBjX25hbWVkX3JlaW5pdChzdHJ1Y3QgbmV0ICpuZXQpO1xuIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCxcbiBcdFx0ICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpO1xuJiM0MztpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjNiYjBjZTc4M2RiZGYgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgc3RhdGljIHN0cnVjdCBzZXJ2aWNlX3JhbmdlICp0aXBjX3NlcnZpY2VfY3JlYXRlX3JhbmdlKHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxuIFxuIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnApXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wO1xuIFx0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xuQEAgLTMzOSwxMCAmIzQzOzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0Ym9vbCByZXMgPSBmYWxzZTtcbiBcdHUzMiBrZXkgPSBwLVx1MDAzZWtleTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7XG4tXHRpZiAoIXNyKVxuJiM0MztcdGlmICghc3IpIHtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byAgZXhpdDtcbiYjNDM7XHR9XG4gXG4gXHRmaXJzdCA9IGxpc3RfZW1wdHkoXHUwMDI2c3ItXHUwMDNlYWxsX3B1YmwpO1xuIFxuQEAgLTM1Myw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gYmluZCBkdXBsaWNhdGUgJXUsJXUsJXUvJXU6JXUvJXVcXG5cJiMzNDssXG4gXHRcdFx0XHQgcC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyLFxuIFx0XHRcdFx0IG5vZGUsIHAtXHUwMDNlc2sucmVmLCBrZXkpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdCplcnIgPSAtRUVYSVNUO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuIFx0fVxuQEAgLTM3MSw3ICYjNDM7Mzc1LDYgQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmICghcmVzKVxuIFx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxuXCYjMzQ7LFxuIFx0XHRcdHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuQEAgLTQ5MCw4ICYjNDM7NDkzLDEyIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7XG4gXHRpZiAoIXNjKVxuIFx0XHRzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCB1YSk7XG4tXHRpZiAoc2MgXHUwMDI2XHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSlcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKHNjIFx1MDAyNlx1MDAyNiB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgTlVMTCkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuIFx0XHRyZXR1cm4gcDtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4gXHRrZnJlZShwKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC03NjAsMjQgJiM0Mzs3NjcsNDQgQEAgdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlXG4gICovXG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSlcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4mIzQzO1x0XHRcdFx0XHQgdTMyIGtleSwgaW50ICplcnIpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4mIzQzO1x0dTMyIG1heF91c2VyX3B1YiA9IFRJUENfTUFYX1BVQkwgLSAxO1xuIFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnAgPSBOVUxMO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXG4mIzQzO1x0aWYgKHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8XG4mIzQzO1x0ICAgIHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19UT1BfU1JWKVxuJiM0MztcdFx0cHJvdG9jb2xfdHlwZSA9IHRydWU7XG4mIzQzO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4mIzQzO1x0aWYgKHByb3RvY29sX3R5cGUpXG4mIzQzO1x0XHRnb3RvIGluc2VydDtcbiBcbi1cdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gVElQQ19NQVhfUFVCTCkge1xuLVx0XHRwcl93YXJuKFwmIzM0O0JpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwmIzM0OywgVElQQ19NQVhfUFVCTCk7XG4mIzQzO1x0LyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXJcbiYjNDM7XHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJiMzOTtzXG4mIzQzO1x0ICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgXHUwMDNlPSBtYXhfdXNlcl9wdWIpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7QmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCYjMzQ7LCBtYXhfdXNlcl9wdWIpO1xuIFx0XHRnb3RvIGV4aXQ7XG4gXHR9XG4gXG4mIzQzO2luc2VydDpcbiBcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcbiYjNDM7XHRcdCAqIHNvIHRoYXQgbWF4aW11bSBudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnRcbiYjNDM7XHRcdCAqIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBuYW1lXG4mIzQzO1x0XHQgKiB0YWJsZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFwcm90b2NvbF90eXBlKVxuJiM0MztcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOztcbiBcdFx0c2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7XG4gXHR9XG4gXHRyY19kZXN0cyA9IG50LVx1MDAzZXJjX2Rlc3RzO1xuQEAgLTc4Niw4ICYjNDM7ODEzLDgxIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRpZiAoc2tiKVxuIFx0XHR0aXBjX25vZGVfYnJvYWRjYXN0KG5ldCwgc2tiLCByY19kZXN0cyk7XG4mIzQzO1x0ZWxzZSBpZiAocCBcdTAwMjZcdTAwMjYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFKSBcdTAwMjZcdTAwMjYgZXJyKVxuJiM0MztcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0cmV0dXJuIHA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJiMzOTtzIHNlbGYgYWRkcmVzc1xuJiM0MzsgKiBAbmV0OiBuZXR3b3JrIG5hbWVzcGFjZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuJiM0MzsgKlxuJiM0MzsgKi9cbiYjNDM7aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xuJiM0MztcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuJiM0MztcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrO1xuJiM0MztcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjtcbiYjNDM7XHRzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYztcbiYjNDM7XHRib29sIHNjX2NyZWF0ZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgcHVibGljYXRpb24gKnA7XG4mIzQzO1x0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdHNrLnJlZiA9IDA7XG4mIzQzO1x0c2subm9kZSA9IHRuLVx1MDAzZW5vZGVfYWRkcjtcbiYjNDM7XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcbiYjNDM7XHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuJiM0MztcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCBcdTAwMjZ1YSk7XG4mIzQzO1x0aWYgKCFzYykge1xuJiM0MztcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgXHUwMDI2dWEpO1xuJiM0MztcdFx0aWYgKCFzYylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuJiM0MztcdFx0c2NfY3JlYXRlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXHUwMDI2dWEpO1xuJiM0MztcdC8qIDEuIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoKSBpcyBub3Qgc2NoZWR1bGVkIGJlY2F1c2Ugb2YgbmFtZXNwYWNlXG4mIzQzO1x0ICogICAgdGVhcmRvd24uXG4mIzQzO1x0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgZmFpbGVkXG4mIzQzO1x0ICogICAgdG8gaW5zZXJ0IG5vZGUgc2VsZiBhZGRyZXNzIHB1YmxpY2F0aW9uIGludG8gbnQtXHUwMDNlY2x1c3Rlcl9zY29wZVxuJiM0MztcdCAqICAgIGR1ZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuJiM0MztcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxuJiM0MztcdCAqICAgIGV4ZWN1dGVkIHlldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNyKSB7XG4mIzQzO1x0XHRwID0gdGlwY19wdWJsX2NyZWF0ZShcdTAwMjZ1YSwgXHUwMDI2c2ssIHRuLVx1MDAzZW5vZGVfYWRkcik7XG4mIzQzO1x0XHRpZiAoIXApXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3I7XG4gXG4mIzQzO1x0XHRpZiAoIXRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCBcdTAwMjZlcnIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChlcnIgPT0gLUVOT0JVRlMpKSB7XG4mIzQzO1x0XHRcdGtmcmVlKHApO1xuJiM0MztcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuJiM0MztcdFx0Z290byBleGl0O1xuJiM0MztlcnJvcjpcbiYjNDM7XHRcdGlmIChzY19jcmVhdGVkKSB7XG4mIzQzO1x0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZzYy1cdTAwM2VzZXJ2aWNlX2xpc3QpO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0a2ZyZWVfcmN1KHNjLCByY3UpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4mIzQzO1x0fVxuJiM0MztleGl0OlxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC04MTAsNyAmIzQzOzkxMCwxMCBAQCB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcbiBcdHAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4mIzQzO1x0XHRpZiAocC1cdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19MSU5LX1NUQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXG4mIzQzO1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbiBcdFx0c2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlYmluZGluZ19zb2NrKTtcbiBcdFx0a2ZyZWVfcmN1KHAsIHJjdSk7XG5AQCAtODk5LDcgJiM0MzsxMDAyLDYgQEAgaW50IHRpcGNfbmFtZXRibF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm50LVx1MDAzZW5vZGVfc2NvcGUpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSk7XG4tXHRyd2xvY2tfaW5pdChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0dG4tXHUwMDNlbmFtZXRibCA9IG50O1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiBcdHJldHVybiAwO1xuQEAgLTkxOSw2ICYjNDM7MTAyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcbiBcdHJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShzciwgdG1wciwgXHUwMDI2c2MtXHUwMDNlcmFuZ2VzLCB0cmVlX25vZGUpIHtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgXHUwMDI2c3ItXHUwMDNlYWxsX3B1YmwsIGFsbF9wdWJsKSB7XG4gXHRcdFx0dGlwY19zZXJ2aWNlX3JlbW92ZV9wdWJsKHNyLCBcdTAwMjZwLVx1MDAzZXNrLCBwLVx1MDAzZWtleSk7XG4mIzQzO1x0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbiBcdFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdFx0fVxuIFx0XHRyYl9lcmFzZV9hdWdtZW50ZWQoXHUwMDI2c3ItXHUwMDNldHJlZV9ub2RlLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIFx1MDAyNnNyX2NhbGxiYWNrcyk7XG5AQCAtOTQ5LDYgJiM0MzsxMDUyLDggQEAgdm9pZCB0aXBjX25hbWV0Ymxfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdFx0dGlwY19zZXJ2aWNlX2RlbGV0ZShuZXQsIHNlcnZpY2UpO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0dG4tXHUwMDNlbnRfc3RvcCA9IHRydWU7XG4mIzQzO1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFxuIFx0LyogVE9ETzogY2xlYXIgdG4tXHUwMDNlbmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqL1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uZTdhMmM1MGYwOTljZiAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5AQCAtOTcsNyAmIzQzOzk3LDYgQEAgc3RydWN0IHB1YmxpY2F0aW9uIHtcbiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGVcbiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIHRvIHNlbmQgYnVsayB1cGRhdGVzIHRvIG5ldyBub2Rlc1xuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgZHVyaW5nIHJlLWluaXQgb2YgbmFtZSB0YWJsZVxuLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZVxuICAqIEBsb2NhbF9wdWJsX2NvdW50OiBudW1iZXIgb2YgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGVcbiAgKiBAcmNfZGVzdHM6IGRlc3RpbmF0aW9uIG5vZGUgY291bnRlclxuICAqIEBzbmRfbnh0OiBuZXh0IHNlcXVlbmNlIG51bWJlciB0byBiZSB1c2VkXG5AQCAtMTA3LDcgJiM0MzsxMDYsNiBAQCBzdHJ1Y3QgbmFtZV90YWJsZSB7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCBzZXJ2aWNlc1tUSVBDX05BTUVUQkxfU0laRV07XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGVfc2NvcGU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfc2NvcGU7XG4tXHRyd2xvY2tfdCBjbHVzdGVyX3Njb3BlX2xvY2s7XG4gXHR1MzIgbG9jYWxfcHVibF9jb3VudDtcbiBcdHUzMiByY19kZXN0cztcbiBcdHUzMiBzbmRfbnh0O1xuQEAgLTEyNiwxMyAmIzQzOzEyNCwxNSBAQCBib29sIHRpcGNfbmFtZXRibF9sb29rdXBfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuJiM0MztcdFx0XHRcdFx0IHUzMiBrZXksIGludCAqZXJyKTtcbiB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHQgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpO1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuIFx0XHRcdFx0XHQgICAgIHUzMiBrZXkpO1xuJiM0MztpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uZXQuYyBiL25ldC90aXBjL25ldC5jXG5pbmRleCA3ZTY1ZDBiMGM0YThkLi43YTJjMWU2N2FjYTNkIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25ldC5jXG5AQCAtMTEwLDExICYjNDM7MTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xuIFxuIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiYjNDM7XG4gXHRpZiAodGlwY19vd25faWQobmV0KSkge1xuIFx0XHRwcl9pbmZvKFwmIzM0O0Nhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcdHByX2luZm8oXCYjMzQ7U3RhcnRlZCBpbiBuZXR3b3JrIG1vZGVcXG5cJiMzNDspO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XG4gXG4gXHRpZiAobm9kZV9pZClcbiBcdFx0dGlwY19zZXRfbm9kZV9pZChuZXQsIG5vZGVfaWQpO1xuQEAgLTEyNSw4ICYjNDM7MTI4LDggQEAgaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpXG4gXG4gc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiB7XG4tXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrID0gezAsIGFkZHJ9O1xuJiM0MztcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4gXG4gXHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcbkBAIC0xMzgsNyAmIzQzOzE0MSwxMSBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuIFx0dGlwY19uYW1lZF9yZWluaXQobmV0KTtcbiBcdHRpcGNfc2tfcmVpbml0KG5ldCk7XG4gXHR0aXBjX21vbl9yZWluaXRfc2VsZihuZXQpO1xuLVx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIGFkZHIpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMSk7XG4mIzQzO1x0LyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUmIzM5O3MgdGltZXJcbiYjNDM7XHQgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLlxuJiM0MztcdCAqL1xuJiM0MztcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBhZGRyLCBOVUxMKTtcbiB9XG4gXG4gdm9pZCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmNcbmluZGV4IDY4M2ExMzZlNTNlZmMuLmNhNGE4ZmNjYTY0NDcgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9ub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuY1xuQEAgLTExMSw2ICYjNDM7MTExLDcgQEAgc3RydWN0IHRpcGNfYmNsaW5rX2VudHJ5IHtcbiAgKiBAcGVlcl9uZXQ6IHBlZXImIzM5O3MgbmV0IG5hbWVzcGFjZVxuICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKVxuICAqIEBjcnlwdG9fcng6IFJYIGNyeXB0byBoYW5kbGVyXG4mIzQzOyAqIEBkaXN0X2J1bGs6IGZsYWcgdG8gcmVkaXN0cmlidXRlIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zXG4gICovXG4gc3RydWN0IHRpcGNfbm9kZSB7XG4gXHR1MzIgYWRkcjtcbkBAIC0xNDUsNiAmIzQzOzE0Niw3IEBAIHN0cnVjdCB0aXBjX25vZGUge1xuICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE9cbiBcdHN0cnVjdCB0aXBjX2NyeXB0byAqY3J5cHRvX3J4O1xuICNlbmRpZlxuJiM0MztcdGF0b21pY190IGRpc3RfYnVsaztcbiB9O1xuIFxuIC8qIE5vZGUgRlNNIHN0YXRlcyBhbmQgZXZlbnRzOlxuQEAgLTM0NSw2ICYjNDM7MzQ3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuIFx0cmV0dXJuIG5vZGU7XG4gfVxuIFxuJiM0Mzt2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGlwY19ub2RlICpub2RlO1xuJiM0MztcbiYjNDM7XHRub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBhZGRyKTtcbiYjNDM7XHRpZiAobm9kZSlcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VkaXN0X2J1bGssIDEpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHRpcGNfbm9kZV9maW5kX2J5X2lkIC0gbG9jYXRlIHNwZWNpZmllZCBub2RlIG9iamVjdCBieSBpdHMgMTI4LWJpdCBpZFxuICAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgd2hlbiBhIGRpc2NvdmVyeSByZXF1ZXN0IGZhaWxlZFxuICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsXG5AQCAtMzkzLDYgJiM0Mzs0MDQsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9ja19mYXN0KHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bi1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRpcGNfbm9kZV9kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgYmVhcmVyX2lkO1xuJiM0MztcbiYjNDM7XHRmb3IgKGJlYXJlcl9pZCA9IDA7IGJlYXJlcl9pZCBcdTAwM2MgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCYjNDM7JiM0MzspXG4mIzQzO1x0XHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdF9fcmVsZWFzZXMobi1cdTAwM2Vsb2NrKVxuIHtcbkBAIC00MDIsNiAmIzQzOzQyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKnB1YmxfbGlzdDtcbiBcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xuIFx0dTMyIGJlYXJlcl9pZCwgbm9kZTtcbiYjNDM7XHRpbnQgcmMgPSAwLCBlcnIgPSAwO1xuIFxuIFx0aWYgKGxpa2VseSghZmxhZ3MpKSB7XG4gXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuQEAgLTQyNSwxNiAmIzQzOzQ0NSwyNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHRcdHRpcGNfcHVibF9ub3RpZnkobmV0LCBwdWJsX2xpc3QsIG5vZGUsIG4tXHUwMDNlY2FwYWJpbGl0aWVzKTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTk9ERV9VUClcbi1cdFx0dGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuJiM0MztcdFx0cmMgPSB0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFRJUENfTk9USUZZX0xJTktfVVApIHtcbiBcdFx0dGlwY19tb25fcGVlcl91cChuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4tXHRcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBzay5yZWYpO1xuJiM0MztcdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZiwgXHUwMDI2ZXJyKTtcbiBcdH1cbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTElOS19ET1dOKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4gXHRcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0LyogTWVtb3J5IGFsbG9jYXRpb24gaGFzIGZhaWxlZC4gQnJpbmcgdGhlIG5vZGUgZG93biB0byBzdGFydCBvdmVyIGJ1bGtcbiYjNDM7XHQgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHR0aXBjX25vZGVfZG93bihuKTtcbiYjNDM7XHRlbHNlIGlmIChlcnIgPT0gLUVOT0JVRlMpXG4mIzQzO1x0XHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfYXNzaWduX3BlZXJfbmV0KHN0cnVjdCB0aXBjX25vZGUgKm4sIHUzMiBoYXNoX21peGVzKVxuQEAgLTU2NCw2ICYjNDM7NTkyLDcgQEAgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLCB1OCAqcGVlcl9pZCxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXB1YmxfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZWNvbm5fc2tzKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNm4tXHUwMDNlZGlzdF9idWxrLCAwKTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5uYW1lZHEpO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5LmlucHV0cTEpO1xuIFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkuYXJydnEpO1xuQEAgLTgwMyw3ICYjNDM7ODMyLDggQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRzdHJ1Y3QgdGlwY19ub2RlICpuID0gdGltZXJfY29udGFpbmVyX29mKG4sIHQsIHRpbWVyKTtcbiBcdHN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCB4bWl0cTtcbi1cdGludCByZW1haW5zID0gbi1cdTAwM2VsaW5rX2NudDtcbiYjNDM7XHRpbnQgcmVtYWlucyA9IDA7XG4mIzQzO1x0aW50IGRpc3RfcmMgPSAwO1xuIFx0aW50IGJlYXJlcl9pZDtcbiBcdGludCByYyA9IDA7XG4gXG5AQCAtODE0LDYgJiM0Mzs4NDQsOSBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuJiM0MztcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCkpXG4mIzQzO1x0XHRkaXN0X3JjID0gdGlwY19uYW1lZF9kaXN0cmlidXRlKG4tXHUwMDNlbmV0LCBuLVx1MDAzZWFkZHIpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXG4gXHQvKiBUYWtlIGFueSBjcnlwdG8ga2V5IHJlbGF0ZWQgYWN0aW9ucyBmaXJzdCAqL1xuIFx0dGlwY19jcnlwdG9fdGltZW91dChuLVx1MDAzZWNyeXB0b19yeCk7XG5AQCAtODI1LDYgJiM0Mzs4NTgsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdCAqL1xuIFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbiBcdG4tXHUwMDNla2VlcGFsaXZlX2ludHYgPSAxMDAwMDtcbiYjNDM7XHRyZW1haW5zID0gbi1cdTAwM2VsaW5rX2NudDtcbiBcdHRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTtcbiBcdGZvciAoYmVhcmVyX2lkID0gMDsgcmVtYWlucyBcdTAwMjZcdTAwMjYgKGJlYXJlcl9pZCBcdTAwM2MgTUFYX0JFQVJFUlMpOyBiZWFyZXJfaWQmIzQzOyYjNDM7KSB7XG4gXHRcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XG5AQCAtODM1LDExICYjNDM7ODY5LDEzIEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0XHRcdHRpcGNfbm9kZV9jYWxjdWxhdGVfdGltZXIobiwgbGUtXHUwMDNlbGluayk7XG4gXHRcdFx0cmMgPSB0aXBjX2xpbmtfdGltZW91dChsZS1cdTAwM2VsaW5rLCBcdTAwMjZ4bWl0cSk7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGUtXHUwMDNlbG9jayk7XG4tXHRcdFx0cmVtYWlucy0tO1xuJiM0MztcdFx0XHRpZiAoZGlzdF9yYyAhPSAtRU5PQlVGUylcbiYjNDM7XHRcdFx0XHRyZW1haW5zLS07XG4gXHRcdH1cbiBcdFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0XHR0aXBjX2JlYXJlcl94bWl0KG4tXHUwMDNlbmV0LCBiZWFyZXJfaWQsIFx1MDAyNnhtaXRxLCBcdTAwMjZsZS1cdTAwM2VtYWRkciwgbik7XG4tXHRcdGlmIChyYyBcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxuJiM0MztcdFx0LyogRm9yY2UgdGhlIG5vZGUgZG93biBpbiBjYXNlIHRoZSByZWRpc3RyaWJ1dGlvbiBmYWlsZWQgKi9cbiYjNDM7XHRcdGlmICgocmMgXHUwMDI2IFRJUENfTElOS19ET1dOX0VWVCkgfHwgKGRpc3RfcmMgPT0gLUVOT0JVRlMpKVxuIFx0XHRcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XG4gXHR9XG4gXHRtb2RfdGltZXIoXHUwMDI2bi1cdTAwM2V0aW1lciwgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKG4tXHUwMDNla2VlcGFsaXZlX2ludHYpKTtcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmhcbmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9ub2RlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuaFxuQEAgLTEyOCw0ICYjNDM7MTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCB0aXBjX25sX25vZGVfZmx1c2hfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuICNlbmRpZlxuIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7XG4mIzQzO3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZDVkNzBlYjIzMGI1Ni4uNmI4M2JkZmM0MzljMyAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTI5MTksNyAmIzQzOzI5MTksNyBAQCBzdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbiBcdFx0cmV0dXJuIC1FQUREUklOVVNFO1xuIFx0c2thZGRyLnJlZiA9IHRzay1cdTAwM2Vwb3J0aWQ7XG4gXHRza2FkZHIubm9kZSA9IHRpcGNfb3duX2FkZHIobmV0KTtcbi1cdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcdTAwMjZza2FkZHIsIGtleSk7XG4mIzQzO1x0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcbiBcdGlmICh1bmxpa2VseSghcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19uYW1lZF9kaXN0cmlidXRlJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZWRfbm9kZV91cCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiYjMzQ7LAogICAgJiMzNDt0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVElQQyBzdWJzeXN0ZW0gdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PQlVGUykgZHVyaW5nIG5hbWUgZGlzdHJpYnV0aW9uIGFuZCBwdWJsaWNhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgc3RhdGUgZmxhZ3MgdG8gYHRpcGNfbmV0YCBhbmQgYHRpcGNfbm9kZWAgYW5kIG1vZGlmaWVzIHRoZSBub2RlIHRpbWVvdXQgYW5kIHVubG9jayBsb2dpYyB0byBoYW5kbGUgcmVkaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBUSVBDIGxvZ2ljLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IGZhbWlseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA2ODdlMTQ1OWVlNzMxYTBkNjMyYjU2NTkwZWY3MGExMTdlMzgxNTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwMzo1NDoxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuYwppbmRleCAzMTU5NzVjM2JlODE4Li4wZjFkM2RkZWFlMDk1IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvY29yZS5jCkBAIC02MSw2ICYjNDM7NjEsOSBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgdGlwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJdG4tJmd0O3RyaWFsX2FkZHIgPSAwOwogCXRuLSZndDthZGRyX3RyaWFsX2VuZCA9IDA7CiAJdG4tJmd0O2NhcGFiaWxpdGllcyA9IFRJUENfTk9ERV9DQVBBQklMSVRJRVM7CiYjNDM7CXRuLSZndDtudF9zdG9wID0gZmFsc2U7CiYjNDM7CXRuLSZndDtudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3RuLSZndDtub2RlX2FkZHJfc2V0LCAwKTsKIAlJTklUX1dPUksoJmFtcDt0bi0mZ3Q7d29yaywgdGlwY19uZXRfZmluYWxpemVfd29yayk7CiAJbWVtc2V0KHRuLSZndDtub2RlX2lkLCAwLCBzaXplb2YodG4tJmd0O25vZGVfaWQpKTsKIAltZW1zZXQodG4tJmd0O25vZGVfaWRfc3RyaW5nLCAwLCBzaXplb2YodG4tJmd0O25vZGVfaWRfc3RyaW5nKSk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmggYi9uZXQvdGlwYy9jb3JlLmgKaW5kZXggOWNlNWY5ZmY2Y2MwMy4uOTc1YjFkNDgxODZlNiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2NvcmUuaApAQCAtMTQ1LDYgJiM0MzsxNDUsMTIgQEAgc3RydWN0IHRpcGNfbmV0IHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAkvKiBUaGUgbnVtYmVycyBvZiB3b3JrIHF1ZXVlcyBpbiBzY2hlZHVsZSAqLwogCWF0b21pY190IHdxX2NvdW50OwomIzQzOwkvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIG5vZGUmIzM5O3MgYWRkcmVzcyBpcyBzZXQgKi8KJiM0MzsJYXRvbWljX3Qgbm9kZV9hZGRyX3NldDsKJiM0MzsJLyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqLwomIzQzOwlib29sIG50X3N0b3A7CiYjNDM7CS8qIE5vZGUmIzM5O3Mgc2VsZiBhZGRyZXNzIHB1YmxpY2F0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbmFtZSB0YWJsZSAqLwomIzQzOwlib29sIG50X3NlbGZfbm9kZV9leGlzdDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRpcGNfbmV0ICp0aXBjX25ldChzdHJ1Y3QgbmV0ICpuZXQpCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKaW5kZXggYmE0ZjQ5MDZlMTNiNy4uMDYwYzQyZDhmZGE1NCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwpAQCAtOTUsOSAmIzQzOzk1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCkKIAkJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtwLSZndDtiaW5kaW5nX25vZGUsICZhbXA7bnQtJmd0O25vZGVfc2NvcGUpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0Jd3JpdGVfbG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmFtcDtwLSZndDtiaW5kaW5nX25vZGUsICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUpOwotCXdyaXRlX3VubG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwogCXNrYiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIElURU1fU0laRSwgMCk7CiAJaWYgKCFza2IpIHsKIAkJcHJfd2FybigmIzM0O1B1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXG4mIzM0Oyk7CkBAIC0xMjEsOSAmIzQzOzExOSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKQogCXN0cnVjdCBkaXN0cl9pdGVtICppdGVtOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQl3cml0ZV9sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJbGlzdF9kZWwoJmFtcDtwLSZndDtiaW5kaW5nX25vZGUpOwotCXdyaXRlX3VubG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwogCWlmIChwLSZndDtzY29wZSA9PSBUSVBDX05PREVfU0NPUEUpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xNDYsOSAmIzQzOzE0MiwxNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCkKICAqIEBkbm9kZTogbm9kZSB0byBiZSB1cGRhdGVkCiAgKiBAcGxzOiBsaW5rZWQgbGlzdCBvZiBwdWJsaWNhdGlvbiBpdGVtcyB0byBiZSBwYWNrZWQgaW50byBidWZmZXIgY2hhaW4KICAqIEBzZXFubzogc2VxdWVuY2UgbnVtYmVyIGZvciB0aGlzIG1lc3NhZ2UKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzCiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZQomIzQzOyAqCiAgKi8KLXN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAotCQkJICAgICB1MzIgZG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBscywgdTE2IHNlcW5vKQomIzQzO3N0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiYjNDM7CQkJICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pCiB7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwpAQCAtMTY0LDggJiM0MzsxNjUsOSBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKIAkJCXNrYiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIG1zZ19yZW0sCiAJCQkJCQlkbm9kZSk7CiAJCQlpZiAoIXNrYikgewomIzQzOwkJCQlfX3NrYl9xdWV1ZV9wdXJnZShsaXN0KTsKIAkJCQlwcl93YXJuKCYjMzQ7QnVsayBwdWJsaWNhdGlvbiBmYWlsdXJlXG4mIzM0Oyk7Ci0JCQkJcmV0dXJuOwomIzQzOwkJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCQl9CiAJCQloZHIgPSBidWZfbXNnKHNrYik7CiAJCQltc2dfc2V0X2JjX2Fja19pbnZhbGlkKGhkciwgdHJ1ZSk7CkBAIC0xOTUsNiAmIzQzOzE5Nyw4MiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKIAloZHIgPSBidWZfbXNnKHNrYl9wZWVrX3RhaWwobGlzdCkpOwogCW1zZ19zZXRfbGFzdF9idWxrKGhkcik7CiAJbXNnX3NldF9uYW1lZF9zZXFubyhoZHIsIHNlcW5vKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIF9fdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gYnVpbGQgYSBsaXN0IG9mIHB1YmxpY2F0aW9ucyBuZWVkIHRvIGJlIGRpc3RyaWJ1dGVkCiYjNDM7ICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2UKJiM0MzsgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGUKJiM0MzsgKiBAaGVhZDogbGlzdCBvZiBwdWJsaWNhdGlvbnMKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzCiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZQomIzQzOyAqCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwKJiM0MzsJCQkJICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsKJiM0MzsJLyogTmFtZSB0YWJsZSBoYXMgYmVlbiBkZWxldGVkIGFmdGVyIG5hbWVzcGFjZSB0ZWFyZG93biBvcgomIzQzOwkgKiBUSVBDIG1vZHVsZSBleGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHRuLSZndDtudF9zdG9wKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBOb2RlJiMzOTtzIHNlbGYgYWRkcmVzcyBpcyBub3Qgc2V0IHlldCAqLwomIzQzOwlpZiAoIWF0b21pY19yZWFkKCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQpKSB7CiYjNDM7CQkvKiBEZWZlciB0aGUgZGlzdHJpYnV0aW9uIHRvIG5vZGUmIzM5O3MgdGltZXIgKi8KJiM0MzsJCXRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKG5ldCwgZG5vZGUpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRuLSZndDtudF9zZWxmX25vZGVfZXhpc3QpCiYjNDM7CQlnb3RvIGRpc3RyaWJ1dGU7CiYjNDM7CiYjNDM7CWlmICh0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihuZXQpKQomIzQzOwkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwomIzQzOwl0bi0mZ3Q7bnRfc2VsZl9ub2RlX2V4aXN0ID0gdHJ1ZTsKJiM0MzsKJiM0MztkaXN0cmlidXRlOgomIzQzOwlpZiAobmFtZWRfZGlzdHJpYnV0ZShuZXQsIGhlYWQsIGRub2RlLAomIzQzOwkJCSAgICAgJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSwgbnQtJmd0O3NuZF9ueHQpID09IC1FTk9CVUZTKQomIzQzOwkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlCiYjNDM7ICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2UKJiM0MzsgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGUKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzCiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZQomIzQzOyAqCiYjNDM7ICovCiYjNDM7aW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7CiYjNDM7CWludCByYyA9IDA7CiYjNDM7CiYjNDM7CV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO2hlYWQpOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJcmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCAmYW1wO2hlYWQpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwomIzQzOwlpZiAoIXJjICZhbXA7JmFtcDsgIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO2hlYWQpKSB7CiYjNDM7CQlpZiAodGlwY19ub2RlX3htaXQobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAwKSA9PSAtRU5PQlVGUykKJiM0MzsJCQlyYyA9IC1FTk9CVUZTOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yMDIsMjUgJiM0MzsyODAsMzIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZQogICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiAgKiBAY2FwYWJpbGl0aWVzOiBwZWVyIG5vZGUmIzM5O3MgY2FwYWJpbGl0aWVzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgogICovCi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcykKJiM0MztpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwogCXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBza19idWZmX2hlYWQgaGVhZDsKLQl1MTYgc2Vxbm87CiYjNDM7CWludCByYyA9IDA7CiAKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIAlpZiAoIShjYXBhYmlsaXRpZXMgJmFtcDsgVElQQ19OQU1FRF9CQ0FTVCkpCiAJCW50LSZndDtyY19kZXN0cyYjNDM7JiM0Mzs7Ci0Jc2Vxbm8gPSBudC0mZ3Q7c25kX254dDsKJiM0MzsKJiM0MzsJcmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCAmYW1wO2hlYWQpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CWlmICghcmMgJmFtcDsmYW1wOyAhc2tiX3F1ZXVlX2VtcHR5KCZhbXA7aGVhZCkpIHsKJiM0MzsJCWlmICh0aXBjX25vZGVfeG1pdChuZXQsICZhbXA7aGVhZCwgZG5vZGUsIDApID09IC1FTk9CVUZTKQomIzQzOwkJCXJjID0gLUVOT0JVRlM7CiYjNDM7CX0KIAotCXJlYWRfbG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwotCW5hbWVkX2Rpc3RyaWJ1dGUobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlLCBzZXFubyk7Ci0JdGlwY19ub2RlX3htaXQobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAwKTsKLQlyZWFkX3VubG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwomIzQzOwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtNDE2LDUgJiM0Mzs1MDEsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlLCBiaW5kaW5nX25vZGUpCiAJCXAtJmd0O3NrLm5vZGUgPSBzZWxmOwogCW50LSZndDtyY19kZXN0cyA9IDA7CiYjNDM7CXRuLSZndDtudF9zdG9wID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaAppbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oCkBAIC02OSwxMSAmIzQzOzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHsKIAogc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7CiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7Ci12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiB2b2lkIHRpcGNfbmFtZWRfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxLAogCQkgICAgdTE2ICpyY3Zfbnh0LCBib29sICpvcGVuKTsKIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTsKIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCwKIAkJICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpOwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuYwppbmRleCAyNTNjNzJkMTM2NmViLi4zYmIwY2U3ODNkYmRmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYywKIAogc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLAotCQkJCSAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwKQomIzQzOwkJCQkgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCwgaW50ICplcnIpCiB7CiAJc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIsICp0bXA7CiAJc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyOwpAQCAtMzM5LDEwICYjNDM7MzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJYm9vbCByZXMgPSBmYWxzZTsKIAl1MzIga2V5ID0gcC0mZ3Q7a2V5OwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7Ci0JaWYgKCFzcikKJiM0MzsJaWYgKCFzcikgewomIzQzOwkJaWYgKGVycikKJiM0MzsJCQkqZXJyID0gLUVOT0JVRlM7CiAJCWdvdG8gIGV4aXQ7CiYjNDM7CX0KIAogCWZpcnN0ID0gbGlzdF9lbXB0eSgmYW1wO3NyLSZndDthbGxfcHVibCk7CiAKQEAgLTM1Myw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGJpbmQgZHVwbGljYXRlICV1LCV1LCV1LyV1OiV1LyV1XG4mIzM0OywKIAkJCQkgcC0mZ3Q7c3IudHlwZSwgcC0mZ3Q7c3IubG93ZXIsIHAtJmd0O3NyLnVwcGVyLAogCQkJCSBub2RlLCBwLSZndDtzay5yZWYsIGtleSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJKmVyciA9IC1FRVhJU1Q7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC0zNzEsNyAmIzQzOzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKCFyZXMpCiAJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gYmluZCB0byAldSwldSwldVxuJiMzNDssCiAJCQlwLSZndDtzci50eXBlLCBwLSZndDtzci5sb3dlciwgcC0mZ3Q7c3IudXBwZXIpOwotCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTQ5MCw4ICYjNDM7NDkzLDEyIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAlzYyA9IHRpcGNfc2VydmljZV9maW5kKG5ldCwgdWEpOwogCWlmICghc2MpCiAJCXNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIHVhKTsKLQlpZiAoc2MgJmFtcDsmYW1wOyB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCkpCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKJiM0MzsJaWYgKHNjICZhbXA7JmFtcDsgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIE5VTEwpKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKIAkJcmV0dXJuIHA7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiAJa2ZyZWUocCk7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03NjAsMjQgJiM0Mzs3NjcsNDQgQEAgdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLAogLyogdGlwY19uYW1ldGJsX3B1Ymxpc2ggLSBhZGQgc2VydmljZSBiaW5kaW5nIHRvIG5hbWUgdGFibGUKICAqLwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKLQkJCQkJIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSkKJiM0MzsJCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCiYjNDM7CQkJCQkgdTMyIGtleSwgaW50ICplcnIpCiB7CiAJc3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7CiYjNDM7CXUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTsKIAlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnAgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwomIzQzOwlib29sIHByb3RvY29sX3R5cGUgPSBmYWxzZTsKIAl1MzIgcmNfZGVzdHM7CiAKJiM0MzsJaWYgKHVhLSZndDtzci50eXBlID09IFRJUENfTk9ERV9TVEFURSB8fCB1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHwKJiM0MzsJICAgIHVhLSZndDtzci50eXBlID09IFRJUENfVE9QX1NSVikKJiM0MzsJCXByb3RvY29sX3R5cGUgPSB0cnVlOwomIzQzOwogCXNwaW5fbG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwomIzQzOwlpZiAocHJvdG9jb2xfdHlwZSkKJiM0MzsJCWdvdG8gaW5zZXJ0OwogCi0JaWYgKG50LSZndDtsb2NhbF9wdWJsX2NvdW50ICZndDs9IFRJUENfTUFYX1BVQkwpIHsKLQkJcHJfd2FybigmIzM0O0JpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxuJiMzNDssIFRJUENfTUFYX1BVQkwpOwomIzQzOwkvKiBSZXNlcnZlIG9uZSBlbnRyeSBmb3Igbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUgYmVjYXVzZSBpdCBoYXMgY2x1c3RlcgomIzQzOwkgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJiMzOTtzCiYjNDM7CSAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLgomIzQzOwkgKi8KJiM0MzsJaWYgKG50LSZndDtsb2NhbF9wdWJsX2NvdW50ICZndDs9IG1heF91c2VyX3B1YikgewomIzQzOwkJcHJfd2FybigmIzM0O0JpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxuJiMzNDssIG1heF91c2VyX3B1Yik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKJiM0MztpbnNlcnQ6CiAJcCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5KTsKIAlpZiAocCkgewotCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQkvKiBOb3QgY291bnQgbm9kZSBzdGF0ZSwgbGluayBzdGF0ZSBhbmQgdG9wb2xvZ3kgc2VydmVyIHR5cGVzCiYjNDM7CQkgKiBzbyB0aGF0IG1heGltdW0gbnQtJmd0O2xvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudAomIzQzOwkJICogcHJvdG9jb2wgc2VydmljZSB0eXBlcyBmcm9tIGJlaW5nIGluc2VydGVkIGludG8gdGhlIG5hbWUKJiM0MzsJCSAqIHRhYmxlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIXByb3RvY29sX3R5cGUpCiYjNDM7CQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7OwogCQlza2IgPSB0aXBjX25hbWVkX3B1Ymxpc2gobmV0LCBwKTsKIAl9CiAJcmNfZGVzdHMgPSBudC0mZ3Q7cmNfZGVzdHM7CkBAIC03ODYsOCAmIzQzOzgxMyw4MSBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCiAJaWYgKHNrYikKIAkJdGlwY19ub2RlX2Jyb2FkY2FzdChuZXQsIHNrYiwgcmNfZGVzdHMpOwomIzQzOwllbHNlIGlmIChwICZhbXA7JmFtcDsgKHAtJmd0O3Njb3BlID09IFRJUENfQ0xVU1RFUl9TQ09QRSkgJmFtcDsmYW1wOyBlcnIpCiYjNDM7CQkqZXJyID0gLUVOT0JVRlM7CiAJcmV0dXJuIHA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViIC0gaW5zZXJ0IHB1YmxpY2F0aW9uIG9mIG5vZGUmIzM5O3Mgc2VsZiBhZGRyZXNzCiYjNDM7ICogQG5ldDogbmV0d29yayBuYW1lc3BhY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzCiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZQomIzQzOyAqCiYjNDM7ICovCiYjNDM7aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsJc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7CiYjNDM7CXN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjsKJiM0MzsJc3RydWN0IHRpcGNfc2VydmljZSAqc2M7CiYjNDM7CWJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgcHVibGljYXRpb24gKnA7CiYjNDM7CXN0cnVjdCB0aXBjX3VhZGRyIHVhOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJc2sucmVmID0gMDsKJiM0MzsJc2subm9kZSA9IHRuLSZndDtub2RlX2FkZHI7CiYjNDM7CXRpcGNfdWFkZHIoJmFtcDt1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsCiYjNDM7CQkgICBUSVBDX05PREVfU1RBVEUsIHRuLSZndDtub2RlX2FkZHIsIHRuLSZndDtub2RlX2FkZHIpOwomIzQzOwlzYyA9IHRpcGNfc2VydmljZV9maW5kKG5ldCwgJmFtcDt1YSk7CiYjNDM7CWlmICghc2MpIHsKJiM0MzsJCXNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsICZhbXA7dWEpOwomIzQzOwkJaWYgKCFzYykKJiM0MzsJCQlyZXR1cm4gLUVOT0JVRlM7CiYjNDM7CQlzY19jcmVhdGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CXNyID0gdGlwY19zZXJ2aWNlX2ZpbmRfcmFuZ2Uoc2MsICZhbXA7dWEpOwomIzQzOwkvKiAxLiB0aXBjX25ldF9maW5hbGl6ZV93b3JrKCkgaXMgbm90IHNjaGVkdWxlZCBiZWNhdXNlIG9mIG5hbWVzcGFjZQomIzQzOwkgKiAgICB0ZWFyZG93bi4KJiM0MzsJICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIGZhaWxlZAomIzQzOwkgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC0mZ3Q7Y2x1c3Rlcl9zY29wZQomIzQzOwkgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KJiM0MzsJICogMy4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdAomIzQzOwkgKiAgICBleGVjdXRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNyKSB7CiYjNDM7CQlwID0gdGlwY19wdWJsX2NyZWF0ZSgmYW1wO3VhLCAmYW1wO3NrLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJCWlmICghcCkKJiM0MzsJCQlnb3RvIGVycm9yOwogCiYjNDM7CQlpZiAoIXRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCAmYW1wO2VycikgJmFtcDsmYW1wOwomIzQzOwkJICAgIChlcnIgPT0gLUVOT0JVRlMpKSB7CiYjNDM7CQkJa2ZyZWUocCk7CiYjNDM7CQkJZ290byBlcnJvcjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtwLSZndDtiaW5kaW5nX25vZGUsICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUpOwomIzQzOwkJZ290byBleGl0OwomIzQzO2Vycm9yOgomIzQzOwkJaWYgKHNjX2NyZWF0ZWQpIHsKJiM0MzsJCQlobGlzdF9kZWxfaW5pdF9yY3UoJmFtcDtzYy0mZ3Q7c2VydmljZV9saXN0KTsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKJiM0MzsJCQlrZnJlZV9yY3Uoc2MsIHJjdSk7CiYjNDM7CQkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwkJfQomIzQzOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT0JVRlM7CiYjNDM7CX0KJiM0MztleGl0OgomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtODEwLDcgJiM0Mzs5MTAsMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAKIAlwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpOwogCWlmIChwKSB7Ci0JCW50LSZndDtsb2NhbF9wdWJsX2NvdW50LS07CiYjNDM7CQlpZiAocC0mZ3Q7c3IudHlwZSAhPSBUSVBDX05PREVfU1RBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgIHAtJmd0O3NyLnR5cGUgIT0gVElQQ19MSU5LX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfVE9QX1NSVikKJiM0MzsJCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwogCQlza2IgPSB0aXBjX25hbWVkX3dpdGhkcmF3KG5ldCwgcCk7CiAJCWxpc3RfZGVsX2luaXQoJmFtcDtwLSZndDtiaW5kaW5nX3NvY2spOwogCQlrZnJlZV9yY3UocCwgcmN1KTsKQEAgLTg5OSw3ICYjNDM7MTAwMiw2IEBAIGludCB0aXBjX25hbWV0YmxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO250LSZndDtub2RlX3Njb3BlKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlKTsKLQlyd2xvY2tfaW5pdCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwogCXRuLSZndDtuYW1ldGJsID0gbnQ7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIAlyZXR1cm4gMDsKQEAgLTkxOSw2ICYjNDM7MTAyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYykKIAlyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3IsIHRtcHIsICZhbXA7c2MtJmd0O3JhbmdlcywgdHJlZV9ub2RlKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsICZhbXA7c3ItJmd0O2FsbF9wdWJsLCBhbGxfcHVibCkgewogCQkJdGlwY19zZXJ2aWNlX3JlbW92ZV9wdWJsKHNyLCAmYW1wO3AtJmd0O3NrLCBwLSZndDtrZXkpOwomIzQzOwkJCWxpc3RfZGVsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlKTsKIAkJCWtmcmVlX3JjdShwLCByY3UpOwogCQl9CiAJCXJiX2VyYXNlX2F1Z21lbnRlZCgmYW1wO3NyLSZndDt0cmVlX25vZGUsICZhbXA7c2MtJmd0O3JhbmdlcywgJmFtcDtzcl9jYWxsYmFja3MpOwpAQCAtOTQ5LDYgJiM0MzsxMDUyLDggQEAgdm9pZCB0aXBjX25hbWV0Ymxfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpCiAJCQl0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7CiAJCX0KIAl9CiYjNDM7CXRuLSZndDtudF9zdG9wID0gdHJ1ZTsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAKIAkvKiBUT0RPOiBjbGVhciB0bi0mZ3Q7bmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oCmluZGV4IDdmZjZlZWViYWFlNjQuLmU3YTJjNTBmMDk5Y2YgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmgKQEAgLTk3LDcgJiM0Mzs5Nyw2IEBAIHN0cnVjdCBwdWJsaWNhdGlvbiB7CiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGUKICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzCiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIGR1cmluZyByZS1pbml0IG9mIG5hbWUgdGFibGUKLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZQogICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZQogICogQHJjX2Rlc3RzOiBkZXN0aW5hdGlvbiBub2RlIGNvdW50ZXIKICAqIEBzbmRfbnh0OiBuZXh0IHNlcXVlbmNlIG51bWJlciB0byBiZSB1c2VkCkBAIC0xMDcsNyAmIzQzOzEwNiw2IEBAIHN0cnVjdCBuYW1lX3RhYmxlIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBzZXJ2aWNlc1tUSVBDX05BTUVUQkxfU0laRV07CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlOwogCXN0cnVjdCBsaXN0X2hlYWQgY2x1c3Rlcl9zY29wZTsKLQlyd2xvY2tfdCBjbHVzdGVyX3Njb3BlX2xvY2s7CiAJdTMyIGxvY2FsX3B1YmxfY291bnQ7CiAJdTMyIHJjX2Rlc3RzOwogCXUzMiBzbmRfbnh0OwpAQCAtMTI2LDEzICYjNDM7MTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIAkJCSAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7CiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAotCQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTsKJiM0MzsJCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCiYjNDM7CQkJCQkgdTMyIGtleSwgaW50ICplcnIpOwogdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpOwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCiAJCQkJCSAgICAgdTMyIGtleSk7CiYjNDM7aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7CiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywKZGlmZiAtLWdpdCBhL25ldC90aXBjL25ldC5jIGIvbmV0L3RpcGMvbmV0LmMKaW5kZXggN2U2NWQwYjBjNGE4ZC4uN2EyYzFlNjdhY2EzZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmV0LmMKQEAgLTExMCwxMSAmIzQzOzExMCwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTsKIAogaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpCiB7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwomIzQzOwogCWlmICh0aXBjX293bl9pZChuZXQpKSB7CiAJCXByX2luZm8oJiMzNDtDYW5ub3QgY29uZmlndXJlIG5vZGUgaWRlbnRpdHkgdHdpY2VcbiYjMzQ7KTsKIAkJcmV0dXJuIC0xOwogCX0KIAlwcl9pbmZvKCYjMzQ7U3RhcnRlZCBpbiBuZXR3b3JrIG1vZGVcbiYjMzQ7KTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3RuLSZndDtub2RlX2FkZHJfc2V0LCAwKTsKIAogCWlmIChub2RlX2lkKQogCQl0aXBjX3NldF9ub2RlX2lkKG5ldCwgbm9kZV9pZCk7CkBAIC0xMjUsOCAmIzQzOzEyOCw4IEBAIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKQogCiBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKQogewotCXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrID0gezAsIGFkZHJ9OwomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKIAlzdHJ1Y3QgdGlwY191YWRkciB1YTsKIAogCXRpcGNfdWFkZHIoJmFtcDt1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsCkBAIC0xMzgsNyAmIzQzOzE0MSwxMSBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKQogCXRpcGNfbmFtZWRfcmVpbml0KG5ldCk7CiAJdGlwY19za19yZWluaXQobmV0KTsKIAl0aXBjX21vbl9yZWluaXRfc2VsZihuZXQpOwotCXRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgJmFtcDt1YSwgJmFtcDtzaywgYWRkcik7CiYjNDM7CWF0b21pY19zZXQoJmFtcDt0bi0mZ3Q7bm9kZV9hZGRyX3NldCwgMSk7CiYjNDM7CS8qIFJlZGlzdHJpYnV0ZSBidWxrIG9mIHB1YmxpY2F0aW9ucyB2aWEgbm9kZS11cCBldmVudCBvciBub2RlJiMzOTtzIHRpbWVyCiYjNDM7CSAqIGlmIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgZmFpbHMuCiYjNDM7CSAqLwomIzQzOwl0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsICZhbXA7dWEsICZhbXA7c2ssIGFkZHIsIE5VTEwpOwogfQogCiB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5jIGIvbmV0L3RpcGMvbm9kZS5jCmluZGV4IDY4M2ExMzZlNTNlZmMuLmNhNGE4ZmNjYTY0NDcgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9ub2RlLmMKQEAgLTExMSw2ICYjNDM7MTExLDcgQEAgc3RydWN0IHRpcGNfYmNsaW5rX2VudHJ5IHsKICAqIEBwZWVyX25ldDogcGVlciYjMzk7cyBuZXQgbmFtZXNwYWNlCiAgKiBAcGVlcl9oYXNoX21peDogaGFzaCBmb3IgdGhpcyBwZWVyIChGSVhNRSkKICAqIEBjcnlwdG9fcng6IFJYIGNyeXB0byBoYW5kbGVyCiYjNDM7ICogQGRpc3RfYnVsazogZmxhZyB0byByZWRpc3RyaWJ1dGUgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMKICAqLwogc3RydWN0IHRpcGNfbm9kZSB7CiAJdTMyIGFkZHI7CkBAIC0xNDUsNiAmIzQzOzE0Niw3IEBAIHN0cnVjdCB0aXBjX25vZGUgewogI2lmZGVmIENPTkZJR19USVBDX0NSWVBUTwogCXN0cnVjdCB0aXBjX2NyeXB0byAqY3J5cHRvX3J4OwogI2VuZGlmCiYjNDM7CWF0b21pY190IGRpc3RfYnVsazsKIH07CiAKIC8qIE5vZGUgRlNNIHN0YXRlcyBhbmQgZXZlbnRzOgpAQCAtMzQ1LDYgJiM0MzszNDcsMTUgQEAgc3RhdGljIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiAJcmV0dXJuIG5vZGU7CiB9CiAKJiM0Mzt2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGlwY19ub2RlICpub2RlOwomIzQzOwomIzQzOwlub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBhZGRyKTsKJiM0MzsJaWYgKG5vZGUpCiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7bm9kZS0mZ3Q7ZGlzdF9idWxrLCAxKTsKJiM0Mzt9CiYjNDM7CiAvKiB0aXBjX25vZGVfZmluZF9ieV9pZCAtIGxvY2F0ZSBzcGVjaWZpZWQgbm9kZSBvYmplY3QgYnkgaXRzIDEyOC1iaXQgaWQKICAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgd2hlbiBhIGRpc2NvdmVyeSByZXF1ZXN0IGZhaWxlZAogICogdG8gZmluZCB0aGUgbm9kZSBieSBpdHMgMzItYml0IGlkLCBhbmQgaXMgbm90IHRpbWUgY3JpdGljYWwKQEAgLTM5Myw2ICYjNDM7NDA0LDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2tfZmFzdChzdHJ1Y3QgdGlwY19ub2RlICpuKQogCXdyaXRlX3VubG9ja19iaCgmYW1wO24tJmd0O2xvY2spOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbikKJiM0Mzt7CiYjNDM7CWludCBiZWFyZXJfaWQ7CiYjNDM7CiYjNDM7CWZvciAoYmVhcmVyX2lkID0gMDsgYmVhcmVyX2lkICZsdDsgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCYjNDM7JiM0MzspCiYjNDM7CQl0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbikKIAlfX3JlbGVhc2VzKG4tJmd0O2xvY2spCiB7CkBAIC00MDIsNiAmIzQzOzQyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbikKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwdWJsX2xpc3Q7CiAJc3RydWN0IHRpcGNfdWFkZHIgdWE7CiAJdTMyIGJlYXJlcl9pZCwgbm9kZTsKJiM0MzsJaW50IHJjID0gMCwgZXJyID0gMDsKIAogCWlmIChsaWtlbHkoIWZsYWdzKSkgewogCQl3cml0ZV91bmxvY2tfYmgoJmFtcDtuLSZndDtsb2NrKTsKQEAgLTQyNSwxNiAmIzQzOzQ0NSwyNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJCXRpcGNfcHVibF9ub3RpZnkobmV0LCBwdWJsX2xpc3QsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgVElQQ19OT1RJRllfTk9ERV9VUCkKLQkJdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi0mZ3Q7Y2FwYWJpbGl0aWVzKTsKJiM0MzsJCXJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi0mZ3Q7Y2FwYWJpbGl0aWVzKTsKIAogCWlmIChmbGFncyAmYW1wOyBUSVBDX05PVElGWV9MSU5LX1VQKSB7CiAJCXRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpOwotCQl0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsICZhbXA7dWEsICZhbXA7c2ssIHNrLnJlZik7CiYjNDM7CQl0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsICZhbXA7dWEsICZhbXA7c2ssIHNrLnJlZiwgJmFtcDtlcnIpOwogCX0KIAlpZiAoZmxhZ3MgJmFtcDsgVElQQ19OT1RJRllfTElOS19ET1dOKSB7CiAJCXRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7CiAJCXRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsICZhbXA7dWEsICZhbXA7c2ssIHNrLnJlZik7CiAJfQomIzQzOwomIzQzOwkvKiBNZW1vcnkgYWxsb2NhdGlvbiBoYXMgZmFpbGVkLiBCcmluZyB0aGUgbm9kZSBkb3duIHRvIHN0YXJ0IG92ZXIgYnVsawomIzQzOwkgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQl0aXBjX25vZGVfZG93bihuKTsKJiM0MzsJZWxzZSBpZiAoZXJyID09IC1FTk9CVUZTKQomIzQzOwkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgdGlwY19ub2RlX2Fzc2lnbl9wZWVyX25ldChzdHJ1Y3QgdGlwY19ub2RlICpuLCB1MzIgaGFzaF9taXhlcykKQEAgLTU2NCw2ICYjNDM7NTkyLDcgQEAgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLCB1OCAqcGVlcl9pZCwKIAlJTklUX0xJU1RfSEVBRCgmYW1wO24tJmd0O2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bi0mZ3Q7cHVibF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO24tJmd0O2Nvbm5fc2tzKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO24tJmd0O2Rpc3RfYnVsaywgMCk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO24tJmd0O2JjX2VudHJ5Lm5hbWVkcSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO24tJmd0O2JjX2VudHJ5LmlucHV0cTEpOwogCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO24tJmd0O2JjX2VudHJ5LmFycnZxKTsKQEAgLTgwMyw3ICYjNDM7ODMyLDggQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJc3RydWN0IHRpcGNfbm9kZSAqbiA9IHRpbWVyX2NvbnRhaW5lcl9vZihuLCB0LCB0aW1lcik7CiAJc3RydWN0IHRpcGNfbGlua19lbnRyeSAqbGU7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB4bWl0cTsKLQlpbnQgcmVtYWlucyA9IG4tJmd0O2xpbmtfY250OwomIzQzOwlpbnQgcmVtYWlucyA9IDA7CiYjNDM7CWludCBkaXN0X3JjID0gMDsKIAlpbnQgYmVhcmVyX2lkOwogCWludCByYyA9IDA7CiAKQEAgLTgxNCw2ICYjNDM7ODQ0LDkgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJaWYgKGF0b21pY194Y2hnKCZhbXA7bi0mZ3Q7ZGlzdF9idWxrLCAwKSkKJiM0MzsJCWRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi0mZ3Q7bmV0LCBuLSZndDthZGRyKTsKJiM0MzsKICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE8KIAkvKiBUYWtlIGFueSBjcnlwdG8ga2V5IHJlbGF0ZWQgYWN0aW9ucyBmaXJzdCAqLwogCXRpcGNfY3J5cHRvX3RpbWVvdXQobi0mZ3Q7Y3J5cHRvX3J4KTsKQEAgLTgyNSw2ICYjNDM7ODU4LDcgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJICovCiAJdGlwY19ub2RlX3JlYWRfbG9jayhuKTsKIAluLSZndDtrZWVwYWxpdmVfaW50diA9IDEwMDAwOwomIzQzOwlyZW1haW5zID0gbi0mZ3Q7bGlua19jbnQ7CiAJdGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pOwogCWZvciAoYmVhcmVyX2lkID0gMDsgcmVtYWlucyAmYW1wOyZhbXA7IChiZWFyZXJfaWQgJmx0OyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCYjNDM7JiM0MzspIHsKIAkJdGlwY19ub2RlX3JlYWRfbG9jayhuKTsKQEAgLTgzNSwxMSAmIzQzOzg2OSwxMyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIAkJCXRpcGNfbm9kZV9jYWxjdWxhdGVfdGltZXIobiwgbGUtJmd0O2xpbmspOwogCQkJcmMgPSB0aXBjX2xpbmtfdGltZW91dChsZS0mZ3Q7bGluaywgJmFtcDt4bWl0cSk7CiAJCQlzcGluX3VubG9ja19iaCgmYW1wO2xlLSZndDtsb2NrKTsKLQkJCXJlbWFpbnMtLTsKJiM0MzsJCQlpZiAoZGlzdF9yYyAhPSAtRU5PQlVGUykKJiM0MzsJCQkJcmVtYWlucy0tOwogCQl9CiAJCXRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTsKIAkJdGlwY19iZWFyZXJfeG1pdChuLSZndDtuZXQsIGJlYXJlcl9pZCwgJmFtcDt4bWl0cSwgJmFtcDtsZS0mZ3Q7bWFkZHIsIG4pOwotCQlpZiAocmMgJmFtcDsgVElQQ19MSU5LX0RPV05fRVZUKQomIzQzOwkJLyogRm9yY2UgdGhlIG5vZGUgZG93biBpbiBjYXNlIHRoZSByZWRpc3RyaWJ1dGlvbiBmYWlsZWQgKi8KJiM0MzsJCWlmICgocmMgJmFtcDsgVElQQ19MSU5LX0RPV05fRVZUKSB8fCAoZGlzdF9yYyA9PSAtRU5PQlVGUykpCiAJCQl0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpOwogCX0KIAltb2RfdGltZXIoJmFtcDtuLSZndDt0aW1lciwgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKG4tJmd0O2tlZXBhbGl2ZV9pbnR2KSk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmgKaW5kZXggMTU0YTViYmIwZDI5ZC4uMGY3NzdjZmU3YzAxZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuaApAQCAtMTI4LDQgJiM0MzsxMjgsNSBAQCBpbnQgdGlwY19ubF9ub2RlX3NldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiBpbnQgdGlwY19ubF9ub2RlX2ZsdXNoX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKICNlbmRpZgogdm9pZCB0aXBjX25vZGVfcHJlX2NsZWFudXBfbmV0KHN0cnVjdCBuZXQgKmV4aXRfbmV0KTsKJiM0Mzt2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jCmluZGV4IGQ1ZDcwZWIyMzBiNTYuLjZiODNiZGZjNDM5YzMgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL3NvY2tldC5jCkBAIC0yOTE5LDcgJiM0MzsyOTE5LDcgQEAgc3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpCiAJCXJldHVybiAtRUFERFJJTlVTRTsKIAlza2FkZHIucmVmID0gdHNrLSZndDtwb3J0aWQ7CiAJc2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7Ci0JcCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsICZhbXA7c2thZGRyLCBrZXkpOwomIzQzOwlwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgJmFtcDtza2FkZHIsIGtleSwgTlVMTCk7CiAJaWYgKHVubGlrZWx5KCFwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NDIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVElQQyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiB0aGUgTGludXgga2VybmVsJiMzOTtzIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgc3Vic3lzdGVtLiBMb29rcyBsaWtlIGl0IHRvdWNoZXMgYSBzaWduaWZpY2FudCBjaHVuayBvZiB0aGUgY29yZSwgaGl0dGluZyBhIGJ1bmNoIG9mIGZpbGVzOiBgY29yZS5jL2hgLCBgbmFtZV9kaXN0ci5jL2hgLCBgbmFtZV90YWJsZS5jL2hgLCBgbmV0LmNgLCBgbm9kZS5jL2hgLCBhbmQgYHNvY2tldC5jYC4gQ2xlYXJseSwgdGhpcyBpcyBhIGRlZXAgZGl2ZSBpbnRvIFRJUEMmIzM5O3MgaW50ZXJuYWxzLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIChgLUVOT0JVRlNgKSB3aXRoaW4gYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgYW5kIGB0aXBjX25hbWV0YmxfcHVibGlzaGAuIFNtYXJ0IG1vdmUuIFRob3NlIGtpbmRzIG9mIGVycm9ycyBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgc2lkZSBlZmZlY3RzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBpbiBhIGNvbW11bmljYXRpb24gc3lzdGVtLiBQbHVzLCBJIHNlZSBzb21lIG5ldyBmbGFncyBiZWluZyBhZGRlZCB0byBgdGlwY19uZXRgIGFuZCBgdGlwY19ub2RlYCwgd2hpY2ggaXMgb2Z0ZW4gYW4gaW5kaWNhdG9yIG9mIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgVElQQyBjb3JlIGxvZ2ljIGl0c2VsZi4KCkdpdmVuIHRoYXQgVElQQyBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBzb2NrZXQgQVBJIChgQUZfVElQQ2ApLCB0aGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgcmVhbGx5IGZvY3VzIG9uIGFyZWFzIHdoZXJlIHRoZXNlIG5ldyBlcnJvci1oYW5kbGluZyBwYXRocyBjb21lIGludG8gcGxheS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQgYXJlOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYF9fdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AsIGB0aXBjX25vZGVfdGltZW91dGAsIGB0aXBjX25vZGVfd3JpdGVfdW5sb2NrYCwgYW5kIGB0aXBjX25ldF9maW5hbGl6ZWAuIEkmIzM5O2xsIHdhbnQgdG8gdGFyZ2V0IHRoZXNlIGZ1bmN0aW9ucy4KCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgKGBuZXQvdGlwYy9LY29uZmlnYCkgdG8gZW5zdXJlIHRoYXQgVElQQyBpcyBwcm9wZXJseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLgoKQWZ0ZXIgdGhhdCwgbGV0JiMzOTtzIGFsc28gZG8gYSBxdWljayBjb2RlIHNlYXJjaCB0byB2ZXJpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVElQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZy01LVxubmV0L3RpcGMvS2NvbmZpZzo2Om1lbnVjb25maWcgVElQQ1xubmV0L3RpcGMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFRJUEMgUHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxubmV0L3RpcGMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTI5LVx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXG5uZXQvdGlwYy9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy0zNy1cbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXG5uZXQvdGlwYy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctNTItXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcbm5ldC90aXBjL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVElQQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBgVElQQ2AgY29uZmlnIGlzIHRoZSBjb3JlLCB0aGUgY2VudHJhbCBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZmlndXJlIG91dCB3aGF0IG90aGVyIHBpZWNlcyBvZiB0aGUgc3lzdGVtIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIHRoaXMgdGhpbmcgdG8gd29yay4gTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBgbmV0L3RpcGMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgdHlwaWNhbCBwbGFjZSBmb3IgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGRldGFpbHMsIGVzcGVjaWFsbHkgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgb3V0IHdoYXQgb3RoZXIgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgb3Igd2hhdCBjb25kaXRpb25zIG11c3QgYmUgbWV0IGZvciBgVElQQ2AgdG8gYmUgcmVsZXZhbnQgb3IgZXZlbiBidWlsZGFibGUuIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIHRoYXQgS2NvbmZpZyBmaWxlIGhvbGRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRJUEMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFRJUENcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBUSVBDIFByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhlIFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbiAoVElQQykgcHJvdG9jb2wgaXNcbiAgMTE6XHRcdCAgc3BlY2lhbGx5IGRlc2lnbmVkIGZvciBpbnRyYSBjbHVzdGVyIGNvbW11bmljYXRpb24uIFRoaXMgcHJvdG9jb2xcbiAgMTI6XHRcdCAgb3JpZ2luYXRlcyBmcm9tIEVyaWNzc29uIHdoZXJlIGl0IGhhcyBiZWVuIHVzZWQgaW4gY2FycmllciBncmFkZVxuICAxMzpcdFx0ICBjbHVzdGVyIGFwcGxpY2F0aW9ucyBmb3IgbWFueSB5ZWFycy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVGhpcyBwcm90b2NvbCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoXG4gIDE4Olx0XHQgIGNhbiBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcbiAgMTk6XHRcdCAgd2FudCkuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlwYy4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdFxuICAyMDpcdFx0ICBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XHUwMDNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTczCgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDc2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVElQQyBEZXBlbmRlbmNpZXMgYW5kIENvcmUgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgdG91Y2hlcyB0aGUgVElQQyBzdWJzeXN0ZW0sIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgVElQQyBkZXBlbmRzIG9uIElORVQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcyBhIHJlc3VsdCBvZiB0aGVzZSBjaGFuZ2VzLiBNeSBmaXJzdCBwYXNzIHNob3dzIHRoZXNlOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGFuZCBgdGlwY19ub2RlX3NldF9kaXN0X2J1bGtgLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMsIHNpbmNlIHRob3NlIGFyZSB0aGUgb25lcyBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24uIEkmIzM5O20gc2VlaW5nIGZyb20gYG5ldC90aXBjL25hbWVfZGlzdHIuY2AgdGhhdCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAgYXJlIGluZGVlZCBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gIFNpbWlsYXJseSwgZnJvbSBgbmV0L3RpcGMvbmFtZV90YWJsZS5jYCwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhcmUgbm9uLXN0YXRpYy4gIEZpbmFsbHksIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AgbG9va3MgZ29vZCwgZnJvbSBgbmV0L3RpcGMvbm9kZS5jYC4KCkkmIzM5O20gbm90aW5nIHRoYXQgdGhlcmUgYXJlIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucyBsaWtlIGB0aXBjX25ldF9pbml0YCwgYHRpcGNfbmV0X2ZpbmFsaXplYCwgYHRpcGNfbm9kZV90aW1lb3V0YCwgYW5kIGB0aXBjX25vZGVfd3JpdGVfdW5sb2NrYCwgYnV0IHRob3NlIGFwcGVhciB0byBiZSBlaXRoZXIgbW9yZSBnZW5lcmljIG9yLCBpbiB0aGUgY2FzZSBvZiBgdGlwY19ub2RlX3RpbWVvdXRgLCBgdGlwY19ub2RlX3dyaXRlX3VubG9ja2AgYW5kIGB0aXBjX25ldF9maW5hbGl6ZWAsIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZGUtcHJpb3JpdGl6ZSB0aGVtLiBUaGUgbWFpbiBjYW5kaWRhdGVzIGZvciBjbG9zZXIgaW5zcGVjdGlvbiBhcmUgdGhlIGZ1bmN0aW9ucyBJIGxpc3RlZCBiZWZvcmUuCgpPa2F5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRob3NlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsuIEkmIzM5O20gY29uZmlybWluZyB0aGF0IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgIGlzIGRlZmluZWQgaW4gYG5hbWVfZGlzdHIuaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgaXMgYWxzbyBpbiBgbmFtZV90YWJsZS5oYCwgYW5kIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AgaXMgaW4gYG5vZGUuaGAuICBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGlzIGFsc28gaW4gYG5hbWVfdGFibGUuaGAuIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgaGVhZGVycyBhcmUgY29ycmVjdGx5IGluY2x1ZGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gdG8gZW5zdXJlIHRoaXMgaXMgVElQQyByZWxhdGVkLCB3aGljaCBpdCBsb29rcyBsaWtlLgoKU28gbXkgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgVElQQyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIHNwZWNpZmljYWxseSBgLUVOT0JVRlNgLCBkdXJpbmcgbmFtZSBkaXN0cmlidXRpb24gYW5kIHB1YmxpY2F0aW9uLiBUaGlzIGludHJvZHVjZXMgc3RhdGUgZmxhZ3MgYW5kIG1vZGlmaWVzIG5vZGUgdGltZW91dCBhbmQgdW5sb2NrIGxvZ2ljIHRvIGRlYWwgd2l0aCByZS1kaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZWQgcHVibGljYXRpb25zIHdoZW4gYWxsb2NhdGlvbiBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFRJUEMgbG9naWMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgQUZfVElQQ2Agc29ja2V0IGZhbWlseS4KCkkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgbm93OiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGFuZCBgdGlwY19ub2RlX3NldF9kaXN0X2J1bGtgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgYFRJUENgLiBOb3cgSSBjYW4gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWVkX25vZGVfdXAmIzM0OywKICAgICYjMzQ7dGlwY19uYW1ldGJsX3B1Ymxpc2gmIzM0OywKICAgICYjMzQ7dGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWImIzM0OywKICAgICYjMzQ7dGlwY19ub2RlX3NldF9kaXN0X2J1bGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIGZsYWdzIHRvIGB0aXBjX25ldGAgYW5kIGB0aXBjX25vZGVgIGFuZCBtb2RpZmllcyB0aGUgbm9kZSB0aW1lb3V0IGFuZCB1bmxvY2sgbG9naWMgdG8gaGFuZGxlIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgVElQQyBsb2dpYywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBmYW1pbHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX25hbWVkX2Rpc3RyaWJ1dGUmIzM0OywKICAgICYjMzQ7dGlwY19uYW1lZF9ub2RlX3VwJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRibF9wdWJsaXNoJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViJiMzNDssCiAgICAmIzM0O3RpcGNfbm9kZV9zZXRfZGlzdF9idWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHN1YnN5c3RlbSB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgbmFtZSBkaXN0cmlidXRpb24gYW5kIHB1YmxpY2F0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSBmbGFncyB0byBgdGlwY19uZXRgIGFuZCBgdGlwY19ub2RlYCBhbmQgbW9kaWZpZXMgdGhlIG5vZGUgdGltZW91dCBhbmQgdW5sb2NrIGxvZ2ljIHRvIGhhbmRsZSByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIFRJUEMgbG9naWMsIHdoaWNoIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgZmFtaWx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNjg3ZTE0NTllZTczMWEwZDYzMmI1NjU5MGVmNzBhMTE3ZTM4MTU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDM6NTQ6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmMgYi9uZXQvdGlwYy9jb3JlLmMKaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2NvcmUuYwpAQCAtNjEsNiAmIzQzOzYxLDkgQEAgc3RhdGljIGludCBfX25ldF9pbml0IHRpcGNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogCXRuLSZndDt0cmlhbF9hZGRyID0gMDsKIAl0bi0mZ3Q7YWRkcl90cmlhbF9lbmQgPSAwOwogCXRuLSZndDtjYXBhYmlsaXRpZXMgPSBUSVBDX05PREVfQ0FQQUJJTElUSUVTOwomIzQzOwl0bi0mZ3Q7bnRfc3RvcCA9IGZhbHNlOwomIzQzOwl0bi0mZ3Q7bnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7CiYjNDM7CWF0b21pY19zZXQoJmFtcDt0bi0mZ3Q7bm9kZV9hZGRyX3NldCwgMCk7CiAJSU5JVF9XT1JLKCZhbXA7dG4tJmd0O3dvcmssIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmspOwogCW1lbXNldCh0bi0mZ3Q7bm9kZV9pZCwgMCwgc2l6ZW9mKHRuLSZndDtub2RlX2lkKSk7CiAJbWVtc2V0KHRuLSZndDtub2RlX2lkX3N0cmluZywgMCwgc2l6ZW9mKHRuLSZndDtub2RlX2lkX3N0cmluZykpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5oIGIvbmV0L3RpcGMvY29yZS5oCmluZGV4IDljZTVmOWZmNmNjMDMuLjk3NWIxZDQ4MTg2ZTYgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9jb3JlLmgKQEAgLTE0NSw2ICYjNDM7MTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJLyogVGhlIG51bWJlcnMgb2Ygd29yayBxdWV1ZXMgaW4gc2NoZWR1bGUgKi8KIAlhdG9taWNfdCB3cV9jb3VudDsKJiM0MzsJLyogRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBub2RlJiMzOTtzIGFkZHJlc3MgaXMgc2V0ICovCiYjNDM7CWF0b21pY190IG5vZGVfYWRkcl9zZXQ7CiYjNDM7CS8qIFRoZSBuYW1lIHRhYmxlIGhhcyBzdG9wcGVkIHdvcmtpbmcgKi8KJiM0MzsJYm9vbCBudF9zdG9wOwomIzQzOwkvKiBOb2RlJiMzOTtzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi8KJiM0MzsJYm9vbCBudF9zZWxmX25vZGVfZXhpc3Q7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aXBjX25ldCAqdGlwY19uZXQoc3RydWN0IG5ldCAqbmV0KQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCmluZGV4IGJhNGY0OTA2ZTEzYjcuLjA2MGM0MmQ4ZmRhNTQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKQEAgLTk1LDkgJiM0Mzs5NSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApCiAJCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCAmYW1wO250LSZndDtub2RlX3Njb3BlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXdyaXRlX2xvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlKTsKLQl3cml0ZV91bmxvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAlza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApOwogCWlmICghc2tiKSB7CiAJCXByX3dhcm4oJiMzNDtQdWJsaWNhdGlvbiBkaXN0cmlidXRpb24gZmFpbHVyZVxuJiMzNDspOwpAQCAtMTIxLDkgJiM0MzsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCkKIAlzdHJ1Y3QgZGlzdHJfaXRlbSAqaXRlbTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0Jd3JpdGVfbG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwogCWxpc3RfZGVsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlKTsKLQl3cml0ZV91bmxvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAlpZiAocC0mZ3Q7c2NvcGUgPT0gVElQQ19OT0RFX1NDT1BFKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMTQ2LDkgJiM0MzsxNDIsMTQgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApCiAgKiBAZG5vZGU6IG5vZGUgdG8gYmUgdXBkYXRlZAogICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluCiAgKiBAc2Vxbm86IHNlcXVlbmNlIG51bWJlciBmb3IgdGhpcyBtZXNzYWdlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgogICovCi1zdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKLQkJCSAgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubykKJiM0MztzdGF0aWMgaW50IG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAomIzQzOwkJCSAgICB1MzIgZG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBscywgdTE2IHNlcW5vKQogewogCXN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKQEAgLTE2NCw4ICYjNDM7MTY1LDkgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiAJCQlza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBtc2dfcmVtLAogCQkJCQkJZG5vZGUpOwogCQkJaWYgKCFza2IpIHsKJiM0MzsJCQkJX19za2JfcXVldWVfcHVyZ2UobGlzdCk7CiAJCQkJcHJfd2FybigmIzM0O0J1bGsgcHVibGljYXRpb24gZmFpbHVyZVxuJiMzNDspOwotCQkJCXJldHVybjsKJiM0MzsJCQkJcmV0dXJuIC1FTk9CVUZTOwogCQkJfQogCQkJaGRyID0gYnVmX21zZyhza2IpOwogCQkJbXNnX3NldF9iY19hY2tfaW52YWxpZChoZHIsIHRydWUpOwpAQCAtMTk1LDYgJiM0MzsxOTcsODIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiAJaGRyID0gYnVmX21zZyhza2JfcGVla190YWlsKGxpc3QpKTsKIAltc2dfc2V0X2xhc3RfYnVsayhoZHIpOwogCW1zZ19zZXRfbmFtZWRfc2Vxbm8oaGRyLCBzZXFubyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGJ1aWxkIGEgbGlzdCBvZiBwdWJsaWNhdGlvbnMgbmVlZCB0byBiZSBkaXN0cmlidXRlZAomIzQzOyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiYjNDM7ICogQGhlYWQ6IGxpc3Qgb2YgcHVibGljYXRpb25zCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsCiYjNDM7CQkJCSAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CiYjNDM7CS8qIE5hbWUgdGFibGUgaGFzIGJlZW4gZGVsZXRlZCBhZnRlciBuYW1lc3BhY2UgdGVhcmRvd24gb3IKJiM0MzsJICogVElQQyBtb2R1bGUgZXhpdC4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseSh0bi0mZ3Q7bnRfc3RvcCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogTm9kZSYjMzk7cyBzZWxmIGFkZHJlc3MgaXMgbm90IHNldCB5ZXQgKi8KJiM0MzsJaWYgKCFhdG9taWNfcmVhZCgmYW1wO3RuLSZndDtub2RlX2FkZHJfc2V0KSkgewomIzQzOwkJLyogRGVmZXIgdGhlIGRpc3RyaWJ1dGlvbiB0byBub2RlJiMzOTtzIHRpbWVyICovCiYjNDM7CQl0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhuZXQsIGRub2RlKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0bi0mZ3Q7bnRfc2VsZl9ub2RlX2V4aXN0KQomIzQzOwkJZ290byBkaXN0cmlidXRlOwomIzQzOwomIzQzOwlpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSkKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7CiYjNDM7CiYjNDM7ZGlzdHJpYnV0ZToKJiM0MzsJaWYgKG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBoZWFkLCBkbm9kZSwKJiM0MzsJCQkgICAgICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUsIG50LSZndDtzbmRfbnh0KSA9PSAtRU5PQlVGUykKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZQomIzQzOyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkOwomIzQzOwlpbnQgcmMgPSAwOwomIzQzOwomIzQzOwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CXJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKCFyYyAmYW1wOyZhbXA7ICFza2JfcXVldWVfZW1wdHkoJmFtcDtoZWFkKSkgewomIzQzOwkJaWYgKHRpcGNfbm9kZV94bWl0KG5ldCwgJmFtcDtoZWFkLCBkbm9kZSwgMCkgPT0gLUVOT0JVRlMpCiYjNDM7CQkJcmMgPSAtRU5PQlVGUzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtMjAyLDI1ICYjNDM7MjgwLDMyIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAogICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2UKICAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZQogICogQGNhcGFiaWxpdGllczogcGVlciBub2RlJiMzOTtzIGNhcGFiaWxpdGllcwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3MKJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlCiYjNDM7ICoKICAqLwotdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpCiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcykKIHsKIAlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKIAlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7Ci0JdTE2IHNlcW5vOwomIzQzOwlpbnQgcmMgPSAwOwogCiAJX19za2JfcXVldWVfaGVhZF9pbml0KCZhbXA7aGVhZCk7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAJaWYgKCEoY2FwYWJpbGl0aWVzICZhbXA7IFRJUENfTkFNRURfQkNBU1QpKQogCQludC0mZ3Q7cmNfZGVzdHMmIzQzOyYjNDM7OwotCXNlcW5vID0gbnQtJmd0O3NuZF9ueHQ7CiYjNDM7CiYjNDM7CXJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgJmFtcDtoZWFkKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwomIzQzOwlpZiAoIXJjICZhbXA7JmFtcDsgIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO2hlYWQpKSB7CiYjNDM7CQlpZiAodGlwY19ub2RlX3htaXQobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAwKSA9PSAtRU5PQlVGUykKJiM0MzsJCQlyYyA9IC1FTk9CVUZTOwomIzQzOwl9CiAKLQlyZWFkX2xvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKLQluYW1lZF9kaXN0cmlidXRlKG5ldCwgJmFtcDtoZWFkLCBkbm9kZSwgJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSwgc2Vxbm8pOwotCXRpcGNfbm9kZV94bWl0KG5ldCwgJmFtcDtoZWFkLCBkbm9kZSwgMCk7Ci0JcmVhZF91bmxvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKJiM0MzsJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTQxNiw1ICYjNDM7NTAxLDYgQEAgdm9pZCB0aXBjX25hbWVkX3JlaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSwgYmluZGluZ19ub2RlKQogCQlwLSZndDtzay5ub2RlID0gc2VsZjsKIAludC0mZ3Q7cmNfZGVzdHMgPSAwOwomIzQzOwl0bi0mZ3Q7bnRfc3RvcCA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmggYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmgKaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfZGlzdHIuaApAQCAtNjksMTEgJiM0Mzs2OSwxMiBAQCBzdHJ1Y3QgZGlzdHJfaXRlbSB7CiAKIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpOwogc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpOwotdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpOwomIzQzO2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpOwogdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSwKIAkJICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7CiB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldCk7CiB2b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsCiAJCSAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTsKJiM0MztpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKaW5kZXggMjUzYzcyZDEzNjZlYi4uM2JiMGNlNzgzZGJkZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfdGFibGUuYwpAQCAtMzI5LDcgJiM0MzszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsCiAKIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYywKLQkJCQkgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCkKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKQogewogCXN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wOwogCXN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjsKQEAgLTMzOSwxMCAmIzQzOzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCWJvb2wgcmVzID0gZmFsc2U7CiAJdTMyIGtleSA9IHAtJmd0O2tleTsKIAotCXNwaW5fbG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKIAlzciA9IHRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc2MsIHApOwotCWlmICghc3IpCiYjNDM7CWlmICghc3IpIHsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJKmVyciA9IC1FTk9CVUZTOwogCQlnb3RvICBleGl0OwomIzQzOwl9CiAKIAlmaXJzdCA9IGxpc3RfZW1wdHkoJmFtcDtzci0mZ3Q7YWxsX3B1YmwpOwogCkBAIC0zNTMsNiAmIzQzOzM1NSw4IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byBiaW5kIGR1cGxpY2F0ZSAldSwldSwldS8ldToldS8ldVxuJiMzNDssCiAJCQkJIHAtJmd0O3NyLnR5cGUsIHAtJmd0O3NyLmxvd2VyLCBwLSZndDtzci51cHBlciwKIAkJCQkgbm9kZSwgcC0mZ3Q7c2sucmVmLCBrZXkpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCSplcnIgPSAtRUVYSVNUOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpAQCAtMzcxLDcgJiM0MzszNzUsNiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCWlmICghcmVzKQogCQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIGJpbmQgdG8gJXUsJXUsJXVcbiYjMzQ7LAogCQkJcC0mZ3Q7c3IudHlwZSwgcC0mZ3Q7c3IubG93ZXIsIHAtJmd0O3NyLnVwcGVyKTsKLQlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC00OTAsOCAmIzQzOzQ5MywxMiBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJc2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIHVhKTsKIAlpZiAoIXNjKQogCQlzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCB1YSk7Ci0JaWYgKHNjICZhbXA7JmFtcDsgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHApKQomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CWlmIChzYyAmYW1wOyZhbXA7IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCBOVUxMKSkgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiAJCXJldHVybiBwOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCWtmcmVlKHApOwogCXJldHVybiBOVUxMOwogfQpAQCAtNzYwLDI0ICYjNDM7NzY3LDQ0IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlCiAgKi8KIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCi0JCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpCiYjNDM7CQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLAomIzQzOwkJCQkJIHUzMiBrZXksIGludCAqZXJyKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwl1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7CiAJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKJiM0MzsJYm9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7CiAJdTMyIHJjX2Rlc3RzOwogCiYjNDM7CWlmICh1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtJmd0O3NyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8CiYjNDM7CSAgICB1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpCiYjNDM7CQlwcm90b2NvbF90eXBlID0gdHJ1ZTsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKHByb3RvY29sX3R5cGUpCiYjNDM7CQlnb3RvIGluc2VydDsKIAotCWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBUSVBDX01BWF9QVUJMKSB7Ci0JCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBUSVBDX01BWF9QVUJMKTsKJiM0MzsJLyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXIKJiM0MzsJICogc2NvcGUgYW5kIGl0IGlzIGRpc3RyaWJ1dGVkIGluIGJ1bGsuIFNvLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdXNlciYjMzk7cwomIzQzOwkgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS4KJiM0MzsJICovCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBtYXhfdXNlcl9wdWIpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBtYXhfdXNlcl9wdWIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiYjNDM7aW5zZXJ0OgogCXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7CiAJaWYgKHApIHsKLQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJLyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlcwomIzQzOwkJICogc28gdGhhdCBtYXhpbXVtIG50LSZndDtsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnQKJiM0MzsJCSAqIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBuYW1lCiYjNDM7CQkgKiB0YWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFwcm90b2NvbF90eXBlKQomIzQzOwkJCW50LSZndDtsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOzsKIAkJc2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7CiAJfQogCXJjX2Rlc3RzID0gbnQtJmd0O3JjX2Rlc3RzOwpAQCAtNzg2LDggJiM0Mzs4MTMsODEgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAogCWlmIChza2IpCiAJCXRpcGNfbm9kZV9icm9hZGNhc3QobmV0LCBza2IsIHJjX2Rlc3RzKTsKJiM0MzsJZWxzZSBpZiAocCAmYW1wOyZhbXA7IChwLSZndDtzY29wZSA9PSBUSVBDX0NMVVNURVJfU0NPUEUpICZhbXA7JmFtcDsgZXJyKQomIzQzOwkJKmVyciA9IC1FTk9CVUZTOwogCXJldHVybiBwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJiMzOTtzIHNlbGYgYWRkcmVzcwomIzQzOyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CXN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrOwomIzQzOwlzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7CiYjNDM7CXN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjOwomIzQzOwlib29sIHNjX2NyZWF0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHB1YmxpY2F0aW9uICpwOwomIzQzOwlzdHJ1Y3QgdGlwY191YWRkciB1YTsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CXNrLnJlZiA9IDA7CiYjNDM7CXNrLm5vZGUgPSB0bi0mZ3Q7bm9kZV9hZGRyOwomIzQzOwl0aXBjX3VhZGRyKCZhbXA7dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLAomIzQzOwkJICAgVElQQ19OT0RFX1NUQVRFLCB0bi0mZ3Q7bm9kZV9hZGRyLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJc2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsICZhbXA7dWEpOwomIzQzOwlpZiAoIXNjKSB7CiYjNDM7CQlzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCAmYW1wO3VhKTsKJiM0MzsJCWlmICghc2MpCiYjNDM7CQkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwkJc2NfY3JlYXRlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwlzciA9IHRpcGNfc2VydmljZV9maW5kX3JhbmdlKHNjLCAmYW1wO3VhKTsKJiM0MzsJLyogMS4gdGlwY19uZXRfZmluYWxpemVfd29yaygpIGlzIG5vdCBzY2hlZHVsZWQgYmVjYXVzZSBvZiBuYW1lc3BhY2UKJiM0MzsJICogICAgdGVhcmRvd24uCiYjNDM7CSAqIDIuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tJmd0OyB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBmYWlsZWQKJiM0MzsJICogICAgdG8gaW5zZXJ0IG5vZGUgc2VsZiBhZGRyZXNzIHB1YmxpY2F0aW9uIGludG8gbnQtJmd0O2NsdXN0ZXJfc2NvcGUKJiM0MzsJICogICAgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCiYjNDM7CSAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tJmd0OyB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBub3QKJiM0MzsJICogICAgZXhlY3V0ZWQgeWV0LgomIzQzOwkgKi8KJiM0MzsJaWYgKCFzcikgewomIzQzOwkJcCA9IHRpcGNfcHVibF9jcmVhdGUoJmFtcDt1YSwgJmFtcDtzaywgdG4tJmd0O25vZGVfYWRkcik7CiYjNDM7CQlpZiAoIXApCiYjNDM7CQkJZ290byBlcnJvcjsKIAomIzQzOwkJaWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgJmFtcDtlcnIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoZXJyID09IC1FTk9CVUZTKSkgewomIzQzOwkJCWtmcmVlKHApOwomIzQzOwkJCWdvdG8gZXJyb3I7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlKTsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MztlcnJvcjoKJiM0MzsJCWlmIChzY19jcmVhdGVkKSB7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7c2MtJmd0O3NlcnZpY2VfbGlzdCk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQkJa2ZyZWVfcmN1KHNjLCByY3UpOwomIzQzOwkJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwl9CiYjNDM7ZXhpdDoKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKQEAgLTgxMCw3ICYjNDM7OTEwLDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCiAJcCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTsKIAlpZiAocCkgewotCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwomIzQzOwkJaWYgKHAtJmd0O3NyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfTElOS19TVEFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcC0mZ3Q7c3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpCiYjNDM7CQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQtLTsKIAkJc2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7YmluZGluZ19zb2NrKTsKIAkJa2ZyZWVfcmN1KHAsIHJjdSk7CkBAIC04OTksNyAmIzQzOzEwMDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KQogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7bm9kZV9zY29wZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSk7Ci0Jcndsb2NrX2luaXQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAl0bi0mZ3Q7bmFtZXRibCA9IG50OwogCXNwaW5fbG9ja19pbml0KCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC05MTksNiAmIzQzOzEwMjEsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpCiAJcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKHNyLCB0bXByLCAmYW1wO3NjLSZndDtyYW5nZXMsIHRyZWVfbm9kZSkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCAmYW1wO3NyLSZndDthbGxfcHVibCwgYWxsX3B1YmwpIHsKIAkJCXRpcGNfc2VydmljZV9yZW1vdmVfcHVibChzciwgJmFtcDtwLSZndDtzaywgcC0mZ3Q7a2V5KTsKJiM0MzsJCQlsaXN0X2RlbCgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSk7CiAJCQlrZnJlZV9yY3UocCwgcmN1KTsKIAkJfQogCQlyYl9lcmFzZV9hdWdtZW50ZWQoJmFtcDtzci0mZ3Q7dHJlZV9ub2RlLCAmYW1wO3NjLSZndDtyYW5nZXMsICZhbXA7c3JfY2FsbGJhY2tzKTsKQEAgLTk0OSw2ICYjNDM7MTA1Miw4IEBAIHZvaWQgdGlwY19uYW1ldGJsX3N0b3Aoc3RydWN0IG5ldCAqbmV0KQogCQkJdGlwY19zZXJ2aWNlX2RlbGV0ZShuZXQsIHNlcnZpY2UpOwogCQl9CiAJfQomIzQzOwl0bi0mZ3Q7bnRfc3RvcCA9IHRydWU7CiYjNDM7CXRuLSZndDtudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwogCiAJLyogVE9ETzogY2xlYXIgdG4tJmd0O25hbWV0YmwsIGltcGxlbWVudCBwcm9wZXIgUkNVIHJ1bGVzID8gKi8KZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaAppbmRleCA3ZmY2ZWVlYmFhZTY0Li5lN2EyYzUwZjA5OWNmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oCkBAIC05Nyw3ICYjNDM7OTcsNiBAQCBzdHJ1Y3QgcHVibGljYXRpb24gewogICogQGNsdXN0ZXJfc2NvcGU6IGFsbCBsb2NhbCBwdWJsaWNhdGlvbnMgd2l0aCBjbHVzdGVyIHNjb3BlCiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIHRvIHNlbmQgYnVsayB1cGRhdGVzIHRvIG5ldyBub2RlcwogICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciBkdXJpbmcgcmUtaW5pdCBvZiBuYW1lIHRhYmxlCi0gKiBAY2x1c3Rlcl9zY29wZV9sb2NrOiBsb2NrIGZvciBhY2Nlc3NpbmcgQGNsdXN0ZXJfc2NvcGUKICAqIEBsb2NhbF9wdWJsX2NvdW50OiBudW1iZXIgb2YgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGUKICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyCiAgKiBAc25kX254dDogbmV4dCBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgdXNlZApAQCAtMTA3LDcgJiM0MzsxMDYsNiBAQCBzdHJ1Y3QgbmFtZV90YWJsZSB7CiAJc3RydWN0IGhsaXN0X2hlYWQgc2VydmljZXNbVElQQ19OQU1FVEJMX1NJWkVdOwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZV9zY29wZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfc2NvcGU7Ci0Jcndsb2NrX3QgY2x1c3Rlcl9zY29wZV9sb2NrOwogCXUzMiBsb2NhbF9wdWJsX2NvdW50OwogCXUzMiByY19kZXN0czsKIAl1MzIgc25kX254dDsKQEAgLTEyNiwxMyAmIzQzOzEyNCwxNSBAQCBib29sIHRpcGNfbmFtZXRibF9sb29rdXBfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiB2b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsCiAJCQkgICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEpOwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKLQkJCQkJIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7CiYjNDM7CQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLAomIzQzOwkJCQkJIHUzMiBrZXksIGludCAqZXJyKTsKIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCQkJICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTsKIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkJCSAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLAogCQkJCQkgICAgIHUzMiBrZXkpOwomIzQzO2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpOwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uZXQuYyBiL25ldC90aXBjL25ldC5jCmluZGV4IDdlNjVkMGIwYzRhOGQuLjdhMmMxZTY3YWNhM2QgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25ldC5jCkBAIC0xMTAsMTEgJiM0MzsxMTAsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7CiAKIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKQogewomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsKIAlpZiAodGlwY19vd25faWQobmV0KSkgewogCQlwcl9pbmZvKCYjMzQ7Q2Fubm90IGNvbmZpZ3VyZSBub2RlIGlkZW50aXR5IHR3aWNlXG4mIzM0Oyk7CiAJCXJldHVybiAtMTsKIAl9CiAJcHJfaW5mbygmIzM0O1N0YXJ0ZWQgaW4gbmV0d29yayBtb2RlXG4mIzM0Oyk7CiYjNDM7CWF0b21pY19zZXQoJmFtcDt0bi0mZ3Q7bm9kZV9hZGRyX3NldCwgMCk7CiAKIAlpZiAobm9kZV9pZCkKIAkJdGlwY19zZXRfbm9kZV9pZChuZXQsIG5vZGVfaWQpOwpAQCAtMTI1LDggJiM0MzsxMjgsOCBAQCBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcikKIAogc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKIHsKLQlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKIAlzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzayA9IHswLCBhZGRyfTsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHRpcGNfdWFkZHIgdWE7CiAKIAl0aXBjX3VhZGRyKCZhbXA7dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLApAQCAtMTM4LDcgJiM0MzsxNDEsMTEgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKIAl0aXBjX25hbWVkX3JlaW5pdChuZXQpOwogCXRpcGNfc2tfcmVpbml0KG5ldCk7CiAJdGlwY19tb25fcmVpbml0X3NlbGYobmV0KTsKLQl0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsICZhbXA7dWEsICZhbXA7c2ssIGFkZHIpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQsIDEpOwomIzQzOwkvKiBSZWRpc3RyaWJ1dGUgYnVsayBvZiBwdWJsaWNhdGlvbnMgdmlhIG5vZGUtdXAgZXZlbnQgb3Igbm9kZSYjMzk7cyB0aW1lcgomIzQzOwkgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLgomIzQzOwkgKi8KJiM0MzsJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBhZGRyLCBOVUxMKTsKIH0KIAogdm9pZCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuYyBiL25ldC90aXBjL25vZGUuYwppbmRleCA2ODNhMTM2ZTUzZWZjLi5jYTRhOGZjY2E2NDQ3IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9ub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbm9kZS5jCkBAIC0xMTEsNiAmIzQzOzExMSw3IEBAIHN0cnVjdCB0aXBjX2JjbGlua19lbnRyeSB7CiAgKiBAcGVlcl9uZXQ6IHBlZXImIzM5O3MgbmV0IG5hbWVzcGFjZQogICogQHBlZXJfaGFzaF9taXg6IGhhc2ggZm9yIHRoaXMgcGVlciAoRklYTUUpCiAgKiBAY3J5cHRvX3J4OiBSWCBjcnlwdG8gaGFuZGxlcgomIzQzOyAqIEBkaXN0X2J1bGs6IGZsYWcgdG8gcmVkaXN0cmlidXRlIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zCiAgKi8KIHN0cnVjdCB0aXBjX25vZGUgewogCXUzMiBhZGRyOwpAQCAtMTQ1LDYgJiM0MzsxNDYsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlIHsKICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE8KIAlzdHJ1Y3QgdGlwY19jcnlwdG8gKmNyeXB0b19yeDsKICNlbmRpZgomIzQzOwlhdG9taWNfdCBkaXN0X2J1bGs7CiB9OwogCiAvKiBOb2RlIEZTTSBzdGF0ZXMgYW5kIGV2ZW50czoKQEAgLTM0NSw2ICYjNDM7MzQ3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKQogCXJldHVybiBub2RlOwogfQogCiYjNDM7dm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpcGNfbm9kZSAqbm9kZTsKJiM0MzsKJiM0MzsJbm9kZSA9IHRpcGNfbm9kZV9maW5kKG5ldCwgYWRkcik7CiYjNDM7CWlmIChub2RlKQomIzQzOwkJYXRvbWljX3NldCgmYW1wO25vZGUtJmd0O2Rpc3RfYnVsaywgMSk7CiYjNDM7fQomIzQzOwogLyogdGlwY19ub2RlX2ZpbmRfYnlfaWQgLSBsb2NhdGUgc3BlY2lmaWVkIG5vZGUgb2JqZWN0IGJ5IGl0cyAxMjgtYml0IGlkCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWQKICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsCkBAIC0zOTMsNiAmIzQzOzQwNCwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbikKIAl3cml0ZV91bmxvY2tfYmgoJmFtcDtuLSZndDtsb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRpcGNfbm9kZV9kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4pCiYjNDM7ewomIzQzOwlpbnQgYmVhcmVyX2lkOwomIzQzOwomIzQzOwlmb3IgKGJlYXJlcl9pZCA9IDA7IGJlYXJlcl9pZCAmbHQ7IE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQmIzQzOyYjNDM7KQomIzQzOwkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJX19yZWxlYXNlcyhuLSZndDtsb2NrKQogewpAQCAtNDAyLDYgJiM0Mzs0MjEsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJc3RydWN0IGxpc3RfaGVhZCAqcHVibF9saXN0OwogCXN0cnVjdCB0aXBjX3VhZGRyIHVhOwogCXUzMiBiZWFyZXJfaWQsIG5vZGU7CiYjNDM7CWludCByYyA9IDAsIGVyciA9IDA7CiAKIAlpZiAobGlrZWx5KCFmbGFncykpIHsKIAkJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bi0mZ3Q7bG9jayk7CkBAIC00MjUsMTYgJiM0Mzs0NDUsMjQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKQogCQl0aXBjX3B1Ymxfbm90aWZ5KG5ldCwgcHVibF9saXN0LCBub2RlLCBuLSZndDtjYXBhYmlsaXRpZXMpOwogCiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX05PREVfVVApCi0JCXRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiYjNDM7CQlyYyA9IHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgVElQQ19OT1RJRllfTElOS19VUCkgewogCQl0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTsKLQkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwomIzQzOwkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYsICZhbXA7ZXJyKTsKIAl9CiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX0xJTktfRE9XTikgewogCQl0aXBjX21vbl9wZWVyX2Rvd24obmV0LCBub2RlLCBiZWFyZXJfaWQpOwogCQl0aXBjX25hbWV0Ymxfd2l0aGRyYXcobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwogCX0KJiM0MzsKJiM0MzsJLyogTWVtb3J5IGFsbG9jYXRpb24gaGFzIGZhaWxlZC4gQnJpbmcgdGhlIG5vZGUgZG93biB0byBzdGFydCBvdmVyIGJ1bGsKJiM0MzsJICogZGlzdHJpYnV0aW9uIHdoZW4gdGhlIGZpcnN0IGxpbmsgaXMgdXAgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJdGlwY19ub2RlX2Rvd24obik7CiYjNDM7CWVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUykKJiM0MzsJCXRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV9hc3NpZ25fcGVlcl9uZXQoc3RydWN0IHRpcGNfbm9kZSAqbiwgdTMyIGhhc2hfbWl4ZXMpCkBAIC01NjQsNiAmIzQzOzU5Miw3IEBAIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTggKnBlZXJfaWQsCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtsaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO24tJmd0O3B1YmxfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtjb25uX3Nrcyk7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtuLSZndDtkaXN0X2J1bGssIDApOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5uYW1lZHEpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5pbnB1dHExKTsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5hcnJ2cSk7CkBAIC04MDMsNyAmIzQzOzgzMiw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCXN0cnVjdCB0aXBjX25vZGUgKm4gPSB0aW1lcl9jb250YWluZXJfb2YobiwgdCwgdGltZXIpOwogCXN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlOwogCXN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7Ci0JaW50IHJlbWFpbnMgPSBuLSZndDtsaW5rX2NudDsKJiM0MzsJaW50IHJlbWFpbnMgPSAwOwomIzQzOwlpbnQgZGlzdF9yYyA9IDA7CiAJaW50IGJlYXJlcl9pZDsKIAlpbnQgcmMgPSAwOwogCkBAIC04MTQsNiAmIzQzOzg0NCw5IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQlyZXR1cm47CiAJfQogCiYjNDM7CWlmIChhdG9taWNfeGNoZygmYW1wO24tJmd0O2Rpc3RfYnVsaywgMCkpCiYjNDM7CQlkaXN0X3JjID0gdGlwY19uYW1lZF9kaXN0cmlidXRlKG4tJmd0O25ldCwgbi0mZ3Q7YWRkcik7CiYjNDM7CiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPCiAJLyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi8KIAl0aXBjX2NyeXB0b190aW1lb3V0KG4tJmd0O2NyeXB0b19yeCk7CkBAIC04MjUsNiAmIzQzOzg1OCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCSAqLwogCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CiAJbi0mZ3Q7a2VlcGFsaXZlX2ludHYgPSAxMDAwMDsKJiM0MzsJcmVtYWlucyA9IG4tJmd0O2xpbmtfY250OwogCXRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTsKIAlmb3IgKGJlYXJlcl9pZCA9IDA7IHJlbWFpbnMgJmFtcDsmYW1wOyAoYmVhcmVyX2lkICZsdDsgTUFYX0JFQVJFUlMpOyBiZWFyZXJfaWQmIzQzOyYjNDM7KSB7CiAJCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CkBAIC04MzUsMTEgJiM0Mzs4NjksMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJCQl0aXBjX25vZGVfY2FsY3VsYXRlX3RpbWVyKG4sIGxlLSZndDtsaW5rKTsKIAkJCXJjID0gdGlwY19saW5rX3RpbWVvdXQobGUtJmd0O2xpbmssICZhbXA7eG1pdHEpOwogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtsZS0mZ3Q7bG9jayk7Ci0JCQlyZW1haW5zLS07CiYjNDM7CQkJaWYgKGRpc3RfcmMgIT0gLUVOT0JVRlMpCiYjNDM7CQkJCXJlbWFpbnMtLTsKIAkJfQogCQl0aXBjX25vZGVfcmVhZF91bmxvY2sobik7CiAJCXRpcGNfYmVhcmVyX3htaXQobi0mZ3Q7bmV0LCBiZWFyZXJfaWQsICZhbXA7eG1pdHEsICZhbXA7bGUtJmd0O21hZGRyLCBuKTsKLQkJaWYgKHJjICZhbXA7IFRJUENfTElOS19ET1dOX0VWVCkKJiM0MzsJCS8qIEZvcmNlIHRoZSBub2RlIGRvd24gaW4gY2FzZSB0aGUgcmVkaXN0cmlidXRpb24gZmFpbGVkICovCiYjNDM7CQlpZiAoKHJjICZhbXA7IFRJUENfTElOS19ET1dOX0VWVCkgfHwgKGRpc3RfcmMgPT0gLUVOT0JVRlMpKQogCQkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKIAl9CiAJbW9kX3RpbWVyKCZhbXA7bi0mZ3Q7dGltZXIsIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhuLSZndDtrZWVwYWxpdmVfaW50dikpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oCmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9ub2RlLmgKQEAgLTEyOCw0ICYjNDM7MTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IHRpcGNfbmxfbm9kZV9mbHVzaF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiAjZW5kaWYKIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7CiYjNDM7dm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCBkNWQ3MGViMjMwYjU2Li42YjgzYmRmYzQzOWMzIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtMjkxOSw3ICYjNDM7MjkxOSw3IEBAIHN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKQogCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJc2thZGRyLnJlZiA9IHRzay0mZ3Q7cG9ydGlkOwogCXNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpOwotCXAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCAmYW1wO3NrYWRkciwga2V5KTsKJiM0MzsJcCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsICZhbXA7c2thZGRyLCBrZXksIE5VTEwpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQzOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDYzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRJUEMgUGF0Y2ggZm9yIE1lbW9yeSBTYWZldHkgYW5kIExvZ2ljKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBUSVBDIHN1YnN5c3RlbSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGEgaGFuZGZ1bCBvZiBjb3JlIGZpbGVzIHJlbGF0ZWQgdG8gbmFtaW5nIGFuZCBkaXN0cmlidXRpb24uIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgc3BlY2lmaWNhbGx5IGAtRU5PQlVGU2AsIGR1cmluZyBuYW1lIHRhYmxlIG9wZXJhdGlvbnMuIFRoZSBrZXkgZmlsZXMgaW1wYWN0ZWQgYXJlIGBjb3JlLmMvaGAsIGBuYW1lX2Rpc3RyLmMvaGAsIGBuYW1lX3RhYmxlLmMvaGAsIGBuZXQuY2AsIGBub2RlLmMvaGAsIGFuZCBgc29ja2V0LmNgLgoKTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG1pZ2h0IGJlIGludHJvZHVjZWQgb3IgaG93IGV4aXN0aW5nIG9uZXMgYXJlIG1vZGlmaWVkLCBlc3BlY2lhbGx5IGlmIHRoZXkgaW50ZXJhY3Qgd2l0aCB1c2VyIHNwYWNlLiBJdCBzZWVtcyB0aGUgZm9jdXMgaGVyZSBpcyByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIGJ1ZmZlciBhbGxvY2F0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZldyBuZXcgZmllbGRzIGxpa2UgYHRuLSZndDtudF9zdG9wYCwgYHRuLSZndDtudF9zZWxmX25vZGVfZXhpc3RgLCBhbmQgYHRuLSZndDtub2RlX2FkZHJfc2V0YCwgYnV0IHRoZXkgYXBwZWFyIHJlbGF0ZWQgdG8gY29udHJvbGxpbmcgdGhlIGZsb3cgYXJvdW5kIHRoZSBhbGxvY2F0aW9uIGVycm9ycy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhcmUgYWxsIHJldHVybmluZyBlcnJvciBjb2RlcyBhbmQgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGAtRU5PQlVGU2AuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcy4gVGhleeKAmXJlIG5vdyB0YWtpbmcgYGludCAqZXJyYCBhcmd1bWVudHMgKGUuZy4sIGB0aXBjX25hbWV0YmxfcHVibGlzaGApIG9yIHJldHVybmluZyBgaW50YCAoZS5nLiwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGBuYW1lZF9kaXN0cmlidXRlYCkuIFRoZSBgbmFtZWRfZGlzdHJpYnV0ZWAgZnVuY3Rpb24sIGluIHBhcnRpY3VsYXIsIGNhdWdodCBteSBleWUg4oCTIGl0JiMzOTtzIGhhbmRsaW5nIGEgYE5VTExgIHJldHVybiBmcm9tIGBuYW1lZF9wcmVwYXJlX2J1ZmAgYnkgcHVyZ2luZyB0aGUgcXVldWUgd2l0aCBgX19za2JfcXVldWVfcHVyZ2UobGlzdCk7YCBhbmQgcmV0dXJuaW5nIGAtRU5PQlVGU2AuIFRoaXMgc2VlbXMgc29saWQ7IHdlJiMzOTtyZSBjbGVhbmluZyB1cCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCByZXNvdXJjZXMgYW5kIHByb3BhZ2F0aW5nIHRoZSBlcnJvci4KCkFoLCBgbmFtZWRfcHJlcGFyZV9idWZgIHVzZXMgYHNrYmAgYWxsb2NhdGlvbi4gSWYgaXQgZmFpbHMsIHdlIGdldCBOVUxMLCBhbmQgbm93IHRoZSBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZS4gVGhhdCYjMzk7cyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4KCkxldCYjMzk7cyBkaXNzZWN0IGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCBsZWFraW5nIGluZm9ybWF0aW9uOgpgYGBjCglzay5yZWYgPSAwOwoJc2subm9kZSA9IHRuLSZndDtub2RlX2FkZHI7Cgl0aXBjX3VhZGRyKCZhbXA7dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLAoJCSAgIFRJUENfTk9ERV9TVEFURSwgdG4tJmd0O25vZGVfYWRkciwgdG4tJmd0O25vZGVfYWRkcik7CmBgYApIZXJlLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzaztgIG9uIHRoZSBzdGFjay4gSW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbC4gSSBzZWUgYHNrLnJlZiA9IDA7YCBhbmQgYHNrLm5vZGUgPSB0bi0mZ3Q7bm9kZV9hZGRyO2AgYXJlIGJlaW5nIHNldC4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHJgIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZpZWxkcyB0aGF0IGFyZSBpbXBvcnRhbnQuIEl0IGFwcGVhcnMgdGhlIGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIGhhbmRsZWQgZ3JhY2VmdWxseSwgcHJldmVudGluZyBwYXJ0aWFsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIGV4cG9zZWQuIE92ZXJhbGwsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGluIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIFRJUEMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaC00Ny1cbmluY2x1ZGUvdWFwaS9saW51eC90aXBjLmg6NDg6c3RydWN0IHRpcGNfc29ja2V0X2FkZHIge1xuaW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaC00OS1cdF9fdTMyIHJlZjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NDcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBnZXR0aW5nIGEgZnVsbCBoYW5kbGUgb24gYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyYDoKCioqQW5hbHl6aW5nIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkcmAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGlzIHN0cnVjdHVyZSwgYHRpcGNfc29ja2V0X2FkZHJgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYmV5b25kIGFueSBzdXBlcmZpY2lhbCBkZXNjcmlwdGlvbnMgYW5kIHJlYWxseSBkcmlsbCBkb3duIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSB3YW50IHRvIHNlZSB0aGUgY29tcGxldGUgZGVmaW5pdGlvbiwgdW5kZXJzdGFuZCBhbGwgdGhlIG1lbWJlcnMsIHRoZWlyIGRhdGEgdHlwZXMsIGFuZCB3aGF0IGVhY2ggZmllbGQgc2lnbmlmaWVzIHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiByZXByZXNlbnRpbmcgYWRkcmVzc2VzIGZvciBUSVBDIHNvY2tldHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYWRkcmVzc2luZywgcm91dGluZywgYW5kIGNvbW11bmljYXRpb24gYmV0d2VlbiBwcm9jZXNzZXMgdXNpbmcgVElQQy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBrbm93aW5nIHRoaXMgd2lsbCBpbmZvcm0gbWUgYWJvdXQgaG93IGRhdGEgaXMgc3RydWN0dXJlZCBhbmQgaG93IHByb2Nlc3NlcyBhcmUgaWRlbnRpZmllZCBhY3Jvc3MgdGhlIFRJUEMgbmV0d29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oLTQ3LVxuaW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaDo0ODpzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciB7XG5pbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oLTQ5LVx0X191MzIgcmVmO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE2MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gVElQQyBIZWFkZXIgLSBMaW5lIDQ4KioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBrZXJuZWwmIzM5O3MgVElQQyB1c2VyLXNwYWNlIEFQSSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oYC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDQ4LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbGluZSBtaWdodCBjb250YWluIGEgY3JpdGljYWwgc3RydWN0dXJlIGRlZmluaXRpb24sIHBlcmhhcHMgYSBtZXNzYWdlIGZvcm1hdCwgc29ja2V0IG9wdGlvbiwgb3IgYSBjcnVjaWFsIGVudW0gcmVsYXRlZCB0byBhZGRyZXNzIGZhbWlseSBvciBtZXNzYWdlIHR5cGUgaGFuZGxpbmcgd2l0aGluIFRJUEMuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbnN0YW50cyBkZWNsYXJlZCB0aGVyZSB0aGF0IHdvdWxkIGJlIHVzZWZ1bCB3aGVuIGRldmVsb3Bpbmcgb3IgZGVidWdnaW5nIGluIHRoZSByZWFsbSBvZiBUSVBDLWJhc2VkIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSSYjMzk7bSBsb29raW5nIGZvciBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlLCBmaWVsZCwgb3IgY29uc3RhbnQgdGhhdCBpcyBnaXZpbmcgbWUgcGF1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcbiAgNDE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gIDQyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc29ja2lvcy5oXHUwMDNlXG4gIDQzOlx0XG4gIDQ0Olx0LypcbiAgNDU6XHQgKiBUSVBDIGFkZHJlc3NpbmcgcHJpbWl0aXZlc1xuICA0NjpcdCAqL1xuICA0NzpcdFxuICA0ODpcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHtcbiAgNDk6XHRcdF9fdTMyIHJlZjtcbiAgNTA6XHRcdF9fdTMyIG5vZGU7XG4gIDUxOlx0fTtcbiAgNTI6XHRcbiAgNTM6XHRzdHJ1Y3QgdGlwY19zZXJ2aWNlX2FkZHIge1xuICA1NDpcdFx0X191MzIgdHlwZTtcbiAgNTU6XHRcdF9fdTMyIGluc3RhbmNlO1xuICA1NjpcdH07XG4gIDU3Olx0XG4gIDU4Olx0c3RydWN0IHRpcGNfc2VydmljZV9yYW5nZSB7XG4gIDU5Olx0XHRfX3UzMiB0eXBlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYxMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgU29ja2V0IEFkZHJlc3MgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyYCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbml0aWFsbHkuIEl0IGxvb2tzIGxpa2UgaXQgb25seSBjb250YWlucyBgcmVmYCBhbmQgYG5vZGVgLiBSaWdodCBhd2F5LCBJIHNlZSBib3RoIGFyZSBpbml0aWFsaXplZDogYHNrLnJlZmAgaXMgc2V0IHRvIDAsIGFuZCBgc2subm9kZWAgaXMgYXNzaWduZWQgYHRuLSZndDtub2RlX2FkZHJgLiBTbywgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGF0IHRoaXMgcG9pbnQsIHRoZSBgc2tgIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gcmVkIGZsYWdzIHRoZXJlLgoKTm93LCB0aGUgbmV4dCB0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllIGlzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IHRpcGNfdWFkZHIgdWFgLiAgSSBzZWUgYHRpcGNfdWFkZHJgIGlzIGJlaW5nIGNhbGxlZCBoZXJlIHdpdGggc3BlY2lmaWMgcGFyYW1ldGVycy4gSG1tLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYHRpcGNfdWFkZHJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoIHRob3NlIHBhcmFtZXRlcnM7IHRoZSBzZXJ2aWNlIHJhbmdlLCBzY29wZSwgbm9kZSBzdGF0ZSwgYW5kIHRob3NlIGB0bi0mZ3Q7bm9kZV9hZGRyYCBhcmd1bWVudHMuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGB1YWAgaXMgYWN0dWFsbHkgcG9wdWxhdGVkLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBleGFjdGx5IHdoYXQgZGF0YSB0aGlzIGluaXRpYWxpemF0aW9uIGlzIHB1dHRpbmcgaW50byB0aGF0IGB1YWAgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3VhZGRyXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2FkZHIuaD01MD1zdHJ1Y3QgdGlwY191YWRkciB7XG4tLVxubmV0L3RpcGMvYWRkci5oLTYzLVxubmV0L3RpcGMvYWRkci5oOjY0OnN0YXRpYyBpbmxpbmUgdm9pZCB0aXBjX3VhZGRyKHN0cnVjdCB0aXBjX3VhZGRyICp1YSwgdTMyIGF0eXBlLCB1MzIgc2NvcGUsXG5uZXQvdGlwYy9hZGRyLmgtNjUtXHRcdFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxuLS1cbm5ldC90aXBjL21zZy5jPTcxMz1ib29sIHRpcGNfbXNnX2xvb2t1cF9kZXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICplcnIpXG4tLVxubmV0L3RpcGMvbXNnLmMtNzMzLVx0XHRyZXR1cm4gZmFsc2U7XG5uZXQvdGlwYy9tc2cuYzo3MzQ6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIHNjb3BlLFxubmV0L3RpcGMvbXNnLmMtNzM1LVx0XHQgICBtc2dfbmFtZXR5cGUobXNnKSwgaW5zdCwgaW5zdCk7XG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jPTMyMD1zdGF0aWMgdm9pZCB0aXBjX3B1YmxfcHVyZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIHUzMiBhZGRyKVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMjUtXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzI2Olx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBwLVx1MDAzZXNjb3BlLCBwLVx1MDAzZXNyLnR5cGUsXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzI3LVx0XHQgICBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyKTtcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MzY0PXN0YXRpYyBib29sIHRpcGNfdXBkYXRlX25hbWV0Ymwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZGlzdHJfaXRlbSAqaSxcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzgwLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjM4MTpcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTM4Mi1cdFx0ICAgbnRvaGwoaS1cdTAwM2V0eXBlKSwgbG93ZXIsIHVwcGVyKTtcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9ODMwPWludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg0My1cdHNrLm5vZGUgPSB0bi1cdTAwM2Vub2RlX2FkZHI7XG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6ODQ0Olx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODQ1LVx0XHQgICBUSVBDX05PREVfU1RBVEUsIHRuLVx1MDAzZW5vZGVfYWRkciwgdG4tXHUwMDNlbm9kZV9hZGRyKTtcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9OTMyPWJvb2wgdGlwY19uYW1ldGJsX3N1YnNjcmliZShzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1Yilcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtOTM5LVxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjk0MDpcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19OT0RFX1NDT1BFLCB0eXBlLFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTk0MS1cdFx0ICAgc3ViLVx1MDAzZXMuc2VxLmxvd2VyLCBzdWItXHUwMDNlcy5zZXEudXBwZXIpO1xuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYz05NjM9dm9pZCB0aXBjX25hbWV0YmxfdW5zdWJzY3JpYmUoc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTk2OC1cbm5ldC90aXBjL25hbWVfdGFibGUuYzo5Njk6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfTk9ERV9TQ09QRSxcbm5ldC90aXBjL25hbWVfdGFibGUuYy05NzAtXHRcdCAgIHN1Yi1cdTAwM2VzLnNlcS50eXBlLCBzdWItXHUwMDNlcy5zZXEubG93ZXIsIHN1Yi1cdTAwM2VzLnNlcS51cHBlcik7XG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTExNTc9c3RhdGljIGludCB0aXBjX25sX3NlcnZpY2VfbGlzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYy0xMTc2LVx0XHQgICAgKCFpIFx1MDAyNlx1MDAyNiAqbGFzdF9rZXkgXHUwMDI2XHUwMDI2ICgqbGFzdF9sb3dlciA9PSAqbGFzdF9rZXkpKSkge1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjExNzc6XHRcdFx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMTE3OC1cdFx0XHRcdCAgICpsYXN0X3R5cGUsICpsYXN0X2xvd2VyLCAqbGFzdF9sb3dlcik7XG4tLVxubmV0L3RpcGMvbmV0LmM9MTI5PXN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4tLVxubmV0L3RpcGMvbmV0LmMtMTM0LVxubmV0L3RpcGMvbmV0LmM6MTM1Olx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5uZXQvdGlwYy9uZXQuYy0xMzYtXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgYWRkciwgYWRkcik7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTQxNT1zdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTQzMC1cbm5ldC90aXBjL25vZGUuYzo0MzE6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfTk9ERV9TQ09QRSxcbm5ldC90aXBjL25vZGUuYy00MzItXHRcdCAgIFRJUENfTElOS19TVEFURSwgbi1cdTAwM2VhZGRyLCBuLVx1MDAzZWFkZHIpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI5MzI9c3RhdGljIGludCB0aXBjX3NrX3dpdGhkcmF3KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI5NDAtXHRcdGlmICghdWEpIHtcbm5ldC90aXBjL3NvY2tldC5jOjI5NDE6XHRcdFx0dGlwY191YWRkcihcdTAwMjZfdWEsIFRJUENfU0VSVklDRV9SQU5HRSwgcC1cdTAwM2VzY29wZSxcbm5ldC90aXBjL3NvY2tldC5jLTI5NDItXHRcdFx0XHQgICBwLVx1MDAzZXNyLnR5cGUsIHAtXHUwMDNlc3IubG93ZXIsIHAtXHUwMDNlc3IudXBwZXIpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMwNzI9c3RhdGljIGludCB0aXBjX3NrX2pvaW4oc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY19ncm91cF9yZXEgKm1yZXEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzA5NC1cdG1zZ19zZXRfZGVzdF9kcm9wcGFibGUoaGRyLCB0cnVlKTtcbm5ldC90aXBjL3NvY2tldC5jOjMwOTU6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIG1yZXEtXHUwMDNlc2NvcGUsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMDk2LVx0XHQgICBtcmVxLVx1MDAzZXR5cGUsIG1yZXEtXHUwMDNlaW5zdGFuY2UsIG1yZXEtXHUwMDNlaW5zdGFuY2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG5ldC90aXBjL2FkZHIuaGAqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBUSVBDIGFkZHJlc3MgaW1wbGVtZW50YXRpb24sIHNvIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYG5ldC90aXBjL2FkZHIuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIGEgc3RhbmRhcmQgcHJhY3RpY2UgaW4gbG93LWxldmVsIG5ldHdvcmtpbmcsIHdoZXJlIGRlZmluaXRpb25zIGFyZSBrZXksIGFuZCBsaW5lIDY0IGlzIG9mdGVuIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgdGhpcyBpcyB3aGVyZSBhbiBpbXBvcnRhbnQgc3RydWN0dXJlIG9yIGNvbnN0YW50IG1heSBiZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgY3JpdGljYWwgcmVsYXRlZCB0byBhZGRyZXNzIGZvcm1hdCBvciBzb21lIGFzc29jaWF0ZWQgcGFyYW1ldGVycyB0byBiZSBkZWZpbmVkIGFyb3VuZCB0aGF0IHBvaW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2FkZHIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRzdHJ1Y3QgdGlwY191YWRkciB7XG4gIDUxOlx0XHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XG4gIDUyOlx0XHR1bnNpZ25lZCBjaGFyIGFkZHJ0eXBlO1xuICA1MzpcdFx0c2lnbmVkIGNoYXIgc2NvcGU7XG4gIDU0Olx0XHR1bmlvbiB7XG4gIDU1Olx0XHRcdHN0cnVjdCB7XG4gIDU2Olx0XHRcdFx0c3RydWN0IHRpcGNfc2VydmljZV9hZGRyIHNhO1xuICA1NzpcdFx0XHRcdHUzMiBsb29rdXBfbm9kZTtcbiAgNTg6XHRcdFx0fTtcbiAgNTk6XHRcdFx0c3RydWN0IHRpcGNfc2VydmljZV9yYW5nZSBzcjtcbiAgNjA6XHRcdFx0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XG4gIDYxOlx0XHR9O1xuICA2MjpcdH07XG4gIDYzOlx0XG4gIDY0Olx0c3RhdGljIGlubGluZSB2b2lkIHRpcGNfdWFkZHIoc3RydWN0IHRpcGNfdWFkZHIgKnVhLCB1MzIgYXR5cGUsIHUzMiBzY29wZSxcbiAgNjU6XHRcdFx0XHQgICAgICB1MzIgdHlwZSwgdTMyIGxvd2VyLCB1MzIgdXBwZXIpXG4gIDY2Olx0e1xuICA2NzpcdFx0dWEtXHUwMDNlZmFtaWx5ID0gQUZfVElQQztcbiAgNjg6XHRcdHVhLVx1MDAzZWFkZHJ0eXBlID0gYXR5cGU7XG4gIDY5Olx0XHR1YS1cdTAwM2VzY29wZSA9IHNjb3BlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA3NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYHRpcGNfdWFkZHJgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBjbGVhcmx5IG9uIGB0aXBjX3VhZGRyYC4gVGhhdCBzaWduYWxzIGEgZGVzaXJlIGZvciBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc3BlY2lmaWMgc3RydWN0dXJlIG9yIGZ1bmN0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMuIFRoaXMgcHJvYmFibHkgbWVhbnMgSSYjMzk7bSB3b3JraW5nIHdpdGggVElQQyBhdCBhIGZhaXJseSBsb3cgbGV2ZWwsIGRlYWxpbmcgd2l0aCBpdHMgaW50ZXJuYWwgd29ya2luZ3Mgb3IgdHJvdWJsZXNob290aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHVzZXIgYWRkcmVzc2VzLiBJIGNvdWxkIGJlIGRlYnVnZ2luZyBhIFRJUEMgaXNzdWUsIG9wdGltaXppbmcgc29tZSBjb2RlLCBvciBwZXJoYXBzIGV2ZW4gY29udHJpYnV0aW5nIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGUgZmFjdCB0aGF0IHRoZSB0aG91Z2h0IGlzIHNvIGRpcmVjdCwgJiMzNDtMZXQmIzM5O3MgcmVhZCBtb3JlLCYjMzQ7IGluZGljYXRlcyBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgdGhlIGFyZWEgb2YgY29uY2VybiBhbmQgaGF2ZSBkZWNpZGVkIG9uIHRoZSBuZXh0IGNvdXJzZSBvZiBhY3Rpb24uIEkga25vdyB3aGVyZSB0aGUgZG9jdW1lbnRhdGlvbiBpcywgdGhlIGNvZGUgaXMsIG9yIGJvdGgsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbi4gTXkgdW5kZXJzdGFuZGluZyBuZWVkcyB0byBnbyBkZWVwZXIgdGhhbiB3aGF0IEkgYWxyZWFkeSBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2FkZHIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgdGlwY191YWRkcihzdHJ1Y3QgdGlwY191YWRkciAqdWEsIHUzMiBhdHlwZSwgdTMyIHNjb3BlLFxuICA2NTpcdFx0XHRcdCAgICAgIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlcilcbiAgNjY6XHR7XG4gIDY3Olx0XHR1YS1cdTAwM2VmYW1pbHkgPSBBRl9USVBDO1xuICA2ODpcdFx0dWEtXHUwMDNlYWRkcnR5cGUgPSBhdHlwZTtcbiAgNjk6XHRcdHVhLVx1MDAzZXNjb3BlID0gc2NvcGU7XG4gIDcwOlx0XHR1YS1cdTAwM2Vzci50eXBlID0gdHlwZTtcbiAgNzE6XHRcdHVhLVx1MDAzZXNyLmxvd2VyID0gbG93ZXI7XG4gIDcyOlx0XHR1YS1cdTAwM2Vzci51cHBlciA9IHVwcGVyO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgaW5saW5lIGJvb2wgdGlwY191YWRkcl92YWxpZChzdHJ1Y3QgdGlwY191YWRkciAqdWEsIGludCBsZW4pXG4gIDc2Olx0e1xuICA3NzpcdFx0dTMyIGF0eXBlO1xuICA3ODpcdFxuICA3OTpcdFx0aWYgKGxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl90aXBjKSlcbiAgODA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICA4MTpcdFx0YXR5cGUgPSB1YS1cdTAwM2VhZGRydHlwZTtcbiAgODI6XHRcdGlmICh1YS1cdTAwM2VmYW1pbHkgIT0gQUZfVElQQylcbiAgODM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzMgoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiAyNjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFRJUEMgUGF0Y2ggZm9yIE1lbW9yeSBBbGxvY2F0aW9uIEZhaWx1cmVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgVElQQyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gaGFuZGxpbmcgb3V0LW9mLW1lbW9yeSAoT09NKSBzaXR1YXRpb25zLCBzcGVjaWZpY2FsbHkgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBUaGUgY29yZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBwcm9wYWdhdGluZyBgLUVOT0JVRlNgIChObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlKSBlcnJvcnMgYW5kIGltcGxlbWVudGluZyByZXRyaWVzIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCgpGaXJzdCwgSSBleGFtaW5lZCB0aGUgYHRpcGNfdWFkZHJgIHN0cnVjdCBpbml0aWFsaXphdGlvbi4gSXQgaW5pdGlhbGl6ZXMgYWxsIG1lbWJlcnMgb2YgdGhlIHN0cnVjdHVyZSwgc28gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGVyZS4KCk5leHQsIEkgbG9va2VkIGF0IHRoZSBlcnJvciBoYW5kbGluZyBpbnRyb2R1Y2VkIGluIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFuZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGNvbnNpc3RlbnRseSBjaGVja3MgZm9yIGBza2JgIGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIHNldHMgdGhlIGBlcnJgIHZhcmlhYmxlIHRvIGAtRU5PQlVGU2AgYXMgZXhwZWN0ZWQuIFRoaXMgZXJyb3IgY29kZSBwcm9wYWdhdGVzLCBhbGxvd2luZyB0aGUgc3lzdGVtIHRvIHJlYWN0IGFwcHJvcHJpYXRlbHkuIEkgY29uZmlybWVkIHRoYXQgdGhlc2UgZXJyb3IgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYXZvaWRpbmcgYW55IHBvdGVudGlhbCByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5IGluIGB0aXBjX25vZGVfd3JpdGVfdW5sb2NrYCBhbmQgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCB3aGVyZSB0aGUgZXJyIHZhcmlhYmxlIGlzIHBhc3NlZCBieSByZWZlcmVuY2UuCgpUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gcHJldmVudGluZyBpbmNvbnNpc3RlbnQgc3RhdGUgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscywgYnkgYnJpbmdpbmcgZG93biBhIG5vZGUgb3IgbGluayB0byB0cmlnZ2VyIGEgcmUtc3luYyBsYXRlci4gVGhpcyBpcyBhIHNvdW5kIHN0cmF0ZWd5LgoKTXkgY29uY2VybiB3YXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBlaXRoZXIgdG8gdXNlcnNwYWNlLCBvciByZWFkIGJ5IHRoZSBrZXJuZWwuIEkgZGlkbiYjMzk7dCBzZWUgYW55IGV2aWRlbmNlIG9mIHRoaXMuIFRoZSBwYXRjaCBtb2RpZmllcyBleGlzdGluZyBlcnJvciBoYW5kbGluZyBwYXRocywgYnV0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGRhdGEgdHJhbnNmZXJzLCBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGEgY29uY2Vybi4gU3RhbmRhcmQga2VybmVsIG1lbW9yeSBzYWZldHkgY2hlY2tzIGxpa2UgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNBTml0aXplcikgc2hvdWxkIGRldGVjdCBhbnkgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBhcmUgYnVnZ3ksIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyBoZXJlIHRoYXQgd291bGQgc3VnZ2VzdCB0aGF0IGV4aXN0aW5nIEtBU0FOIHdvdWxkIGJlIGluZWZmZWN0aXZlLiBLTVNBTiBmdXp6aW5nIHNlZW1zIHVubmVjZXNzYXJ5LiBUaGUgcGF0Y2ggaXMgYSB0YXJnZXRlZCBmaXgsIGFuZCBhIHRob3JvdWdoIHN0YXRpYyBhbmFseXNpcyBhbmQgY29kZSByZXZpZXcgd2lsbCBiZSBzdWZmaWNpZW50IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMzo1NDoxOC43OTExMzMwNzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzNTc0NTU5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiLFxuICAgIFwidGlwY19uYW1lZF9ub2RlX3VwXCIsXG4gICAgXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICAgIFwidGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJcIixcbiAgICBcInRpcGNfbm9kZV9zZXRfZGlzdF9idWxrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nIGZvciBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBUSVBDIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIGFuZCBwdWJsaWNhdGlvbi4gSXQgbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMgdG8gcmV0dXJuIGVycm9yIGNvZGVzIGFuZCBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZ3JhY2VmdWxseSBieSByZXRyeWluZyBvciBicmluZ2luZyBkb3duIHRoZSBub2RlL2xpbmsuIFRoZSB2YXJpYWJsZXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byByZWNlaXZlIGVycm9yIGNvZGVzIChlLmcuLCBgZXJyYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAgaW4gdGhlIGNhbGxlcnMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgZGVhbCB3aXRoIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgcHJvcGFnYXRpb24uIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBlcnJvciBwYXRocywgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIGZsYWdzIHRvIGB0aXBjX25ldGAgYW5kIGB0aXBjX25vZGVgIGFuZCBtb2RpZmllcyB0aGUgbm9kZSB0aW1lb3V0IGFuZCB1bmxvY2sgbG9naWMgdG8gaGFuZGxlIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgVElQQyBsb2dpYywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBmYW1pbHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU0OjE4Ljc5MTEzODYwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwODExMzEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA2ODdlMTQ1OWVlNzMxYTBkNjMyYjU2NTkwZWY3MGExMTdlMzgxNTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDM6NTQ6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5jIGIvbmV0L3RpcGMvY29yZS5jXFxuaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9jb3JlLmNcXG4rKysgYi9uZXQvdGlwYy9jb3JlLmNcXG5AQCAtNjEsNiArNjEsOSBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgdGlwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdHRuLVxcdTAwM2V0cmlhbF9hZGRyID0gMDtcXG4gXFx0dG4tXFx1MDAzZWFkZHJfdHJpYWxfZW5kID0gMDtcXG4gXFx0dG4tXFx1MDAzZWNhcGFiaWxpdGllcyA9IFRJUENfTk9ERV9DQVBBQklMSVRJRVM7XFxuK1xcdHRuLVxcdTAwM2VudF9zdG9wID0gZmFsc2U7XFxuK1xcdHRuLVxcdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2dG4tXFx1MDAzZW5vZGVfYWRkcl9zZXQsIDApO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnRuLVxcdTAwM2V3b3JrLCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKTtcXG4gXFx0bWVtc2V0KHRuLVxcdTAwM2Vub2RlX2lkLCAwLCBzaXplb2YodG4tXFx1MDAzZW5vZGVfaWQpKTtcXG4gXFx0bWVtc2V0KHRuLVxcdTAwM2Vub2RlX2lkX3N0cmluZywgMCwgc2l6ZW9mKHRuLVxcdTAwM2Vub2RlX2lkX3N0cmluZykpO1xcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmggYi9uZXQvdGlwYy9jb3JlLmhcXG5pbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL2NvcmUuaFxcbisrKyBiL25ldC90aXBjL2NvcmUuaFxcbkBAIC0xNDUsNiArMTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbiBcXHQvKiBUaGUgbnVtYmVycyBvZiB3b3JrIHF1ZXVlcyBpbiBzY2hlZHVsZSAqL1xcbiBcXHRhdG9taWNfdCB3cV9jb3VudDtcXG4rXFx0LyogRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBub2RlJ3MgYWRkcmVzcyBpcyBzZXQgKi9cXG4rXFx0YXRvbWljX3Qgbm9kZV9hZGRyX3NldDtcXG4rXFx0LyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqL1xcbitcXHRib29sIG50X3N0b3A7XFxuK1xcdC8qIE5vZGUncyBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBuYW1lIHRhYmxlICovXFxuK1xcdGJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0O1xcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXFxuaW5kZXggYmE0ZjQ5MDZlMTNiNy4uMDYwYzQyZDhmZGE1NCAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcXG4rKysgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcXG5AQCAtOTUsOSArOTUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxcbiBcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19ub2RlLCBcXHUwMDI2bnQtXFx1MDAzZW5vZGVfc2NvcGUpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbi1cXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4gXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19ub2RlLCBcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xcbi1cXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xcbiBcXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApO1xcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHRwcl93YXJuKFxcXCJQdWJsaWNhdGlvbiBkaXN0cmlidXRpb24gZmFpbHVyZVxcXFxuXFxcIik7XFxuQEAgLTEyMSw5ICsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcXG4gXFx0c3RydWN0IGRpc3RyX2l0ZW0gKml0ZW07XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbi1cXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4gXFx0bGlzdF9kZWwoXFx1MDAyNnAtXFx1MDAzZWJpbmRpbmdfbm9kZSk7XFxuLVxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XFxuIFxcdGlmIChwLVxcdTAwM2VzY29wZSA9PSBUSVBDX05PREVfU0NPUEUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG5AQCAtMTQ2LDkgKzE0MiwxNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcXG4gICogQGRub2RlOiBub2RlIHRvIGJlIHVwZGF0ZWRcXG4gICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluXFxuICAqIEBzZXFubzogc2VxdWVuY2UgbnVtYmVyIGZvciB0aGlzIG1lc3NhZ2VcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXFxuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcXG4rICpcXG4gICovXFxuLXN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxcbi1cXHRcXHRcXHQgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXFxuK3N0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuK1xcdFxcdFxcdCAgICB1MzIgZG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBscywgdTE2IHNlcW5vKVxcbiB7XFxuIFxcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuQEAgLTE2NCw4ICsxNjUsOSBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4gXFx0XFx0XFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZG5vZGUpO1xcbiBcXHRcXHRcXHRpZiAoIXNrYikge1xcbitcXHRcXHRcXHRcXHRfX3NrYl9xdWV1ZV9wdXJnZShsaXN0KTtcXG4gXFx0XFx0XFx0XFx0cHJfd2FybihcXFwiQnVsayBwdWJsaWNhdGlvbiBmYWlsdXJlXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aGRyID0gYnVmX21zZyhza2IpO1xcbiBcXHRcXHRcXHRtc2dfc2V0X2JjX2Fja19pbnZhbGlkKGhkciwgdHJ1ZSk7XFxuQEAgLTE5NSw2ICsxOTcsODIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuIFxcdGhkciA9IGJ1Zl9tc2coc2tiX3BlZWtfdGFpbChsaXN0KSk7XFxuIFxcdG1zZ19zZXRfbGFzdF9idWxrKGhkcik7XFxuIFxcdG1zZ19zZXRfbmFtZWRfc2Vxbm8oaGRyLCBzZXFubyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIF9fdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gYnVpbGQgYSBsaXN0IG9mIHB1YmxpY2F0aW9ucyBuZWVkIHRvIGJlIGRpc3RyaWJ1dGVkXFxuKyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuKyAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxcbisgKiBAaGVhZDogbGlzdCBvZiBwdWJsaWNhdGlvbnNcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXFxuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcXG4rICpcXG4rICovXFxuK3N0YXRpYyBpbnQgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXFxuK3tcXG4rXFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XFxuK1xcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xcbitcXG4rXFx0LyogTmFtZSB0YWJsZSBoYXMgYmVlbiBkZWxldGVkIGFmdGVyIG5hbWVzcGFjZSB0ZWFyZG93biBvclxcbitcXHQgKiBUSVBDIG1vZHVsZSBleGl0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHRuLVxcdTAwM2VudF9zdG9wKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBOb2RlJ3Mgc2VsZiBhZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovXFxuK1xcdGlmICghYXRvbWljX3JlYWQoXFx1MDAyNnRuLVxcdTAwM2Vub2RlX2FkZHJfc2V0KSkge1xcbitcXHRcXHQvKiBEZWZlciB0aGUgZGlzdHJpYnV0aW9uIHRvIG5vZGUncyB0aW1lciAqL1xcbitcXHRcXHR0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhuZXQsIGRub2RlKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0bi1cXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0KVxcbitcXHRcXHRnb3RvIGRpc3RyaWJ1dGU7XFxuK1xcbitcXHRpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbitcXG4rXFx0dG4tXFx1MDAzZW50X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7XFxuK1xcbitkaXN0cmlidXRlOlxcbitcXHRpZiAobmFtZWRfZGlzdHJpYnV0ZShuZXQsIGhlYWQsIGRub2RlLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSwgbnQtXFx1MDAzZXNuZF9ueHQpID09IC1FTk9CVUZTKVxcbitcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZVxcbisgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxcbisgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXFxuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcXG4rICpcXG4rICovXFxuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgaGVhZDtcXG4rXFx0aW50IHJjID0gMDtcXG4rXFxuK1xcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aGVhZCk7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxuK1xcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXFx1MDAyNmhlYWQpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxuK1xcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2aGVhZCkpIHtcXG4rXFx0XFx0aWYgKHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNmhlYWQsIGRub2RlLCAwKSA9PSAtRU5PQlVGUylcXG4rXFx0XFx0XFx0cmMgPSAtRU5PQlVGUztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjAyLDI1ICsyODAsMzIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuICAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuICAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxcbiAgKiBAY2FwYWJpbGl0aWVzOiBwZWVyIG5vZGUncyBjYXBhYmlsaXRpZXNcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXFxuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcXG4rICpcXG4gICovXFxuLXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxcbitpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxcbiB7XFxuIFxcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xcbiBcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xcbi1cXHR1MTYgc2Vxbm87XFxuK1xcdGludCByYyA9IDA7XFxuIFxcbiBcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmhlYWQpO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbiBcXHRpZiAoIShjYXBhYmlsaXRpZXMgXFx1MDAyNiBUSVBDX05BTUVEX0JDQVNUKSlcXG4gXFx0XFx0bnQtXFx1MDAzZXJjX2Rlc3RzKys7XFxuLVxcdHNlcW5vID0gbnQtXFx1MDAzZXNuZF9ueHQ7XFxuK1xcbitcXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFxcdTAwMjZoZWFkKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbitcXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2ICFza2JfcXVldWVfZW1wdHkoXFx1MDAyNmhlYWQpKSB7XFxuK1xcdFxcdGlmICh0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZoZWFkLCBkbm9kZSwgMCkgPT0gLUVOT0JVRlMpXFxuK1xcdFxcdFxcdHJjID0gLUVOT0JVRlM7XFxuK1xcdH1cXG4gXFxuLVxcdHJlYWRfbG9ja19iaChcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XFxuLVxcdG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBcXHUwMDI2aGVhZCwgZG5vZGUsIFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSwgc2Vxbm8pO1xcbi1cXHR0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZoZWFkLCBkbm9kZSwgMCk7XFxuLVxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNDE2LDUgKzUwMSw2IEBAIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUsIGJpbmRpbmdfbm9kZSlcXG4gXFx0XFx0cC1cXHUwMDNlc2subm9kZSA9IHNlbGY7XFxuIFxcdG50LVxcdTAwM2VyY19kZXN0cyA9IDA7XFxuK1xcdHRuLVxcdTAwM2VudF9zdG9wID0gZmFsc2U7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmggYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmhcXG5pbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxcbkBAIC02OSwxMSArNjksMTIgQEAgc3RydWN0IGRpc3RyX2l0ZW0ge1xcbiBcXG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XFxuIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcXG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xcbitpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKTtcXG4gdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcXG4gXFx0XFx0ICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7XFxuIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTtcXG4gdm9pZCB0aXBjX3B1Ymxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGxpc3RfaGVhZCAqbnN1Yl9saXN0LFxcbiBcXHRcXHQgICAgICB1MzIgYWRkciwgdTE2IGNhcGFiaWxpdGllcyk7XFxuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpO1xcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjNiYjBjZTc4M2RiZGYgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXFxuIFxcbiBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKVxcbiB7XFxuIFxcdHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wO1xcbiBcXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7XFxuQEAgLTMzOSwxMCArMzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGJvb2wgcmVzID0gZmFsc2U7XFxuIFxcdHUzMiBrZXkgPSBwLVxcdTAwM2VrZXk7XFxuIFxcbi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0c3IgPSB0aXBjX3NlcnZpY2VfY3JlYXRlX3JhbmdlKHNjLCBwKTtcXG4tXFx0aWYgKCFzcilcXG4rXFx0aWYgKCFzcikge1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHQqZXJyID0gLUVOT0JVRlM7XFxuIFxcdFxcdGdvdG8gIGV4aXQ7XFxuK1xcdH1cXG4gXFxuIFxcdGZpcnN0ID0gbGlzdF9lbXB0eShcXHUwMDI2c3ItXFx1MDAzZWFsbF9wdWJsKTtcXG4gXFxuQEAgLTM1Myw2ICszNTUsOCBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiRmFpbGVkIHRvIGJpbmQgZHVwbGljYXRlICV1LCV1LCV1LyV1OiV1LyV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgcC1cXHUwMDNlc3IudHlwZSwgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyLFxcbiBcXHRcXHRcXHRcXHQgbm9kZSwgcC1cXHUwMDNlc2sucmVmLCBrZXkpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHQqZXJyID0gLUVFWElTVDtcXG4gXFx0XFx0XFx0Z290byBleGl0O1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMzcxLDcgKzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGlmICghcmVzKVxcbiBcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gYmluZCB0byAldSwldSwldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0cC1cXHUwMDNlc3IudHlwZSwgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyKTtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG5AQCAtNDkwLDggKzQ5MywxMiBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7XFxuIFxcdGlmICghc2MpXFxuIFxcdFxcdHNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIHVhKTtcXG4tXFx0aWYgKHNjIFxcdTAwMjZcXHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSlcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChzYyBcXHUwMDI2XFx1MDAyNiB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgTlVMTCkpIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0cmV0dXJuIHA7XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0a2ZyZWUocCk7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTc2MCwyNCArNzY3LDQ0IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcXG4gLyogdGlwY19uYW1ldGJsX3B1Ymxpc2ggLSBhZGQgc2VydmljZSBiaW5kaW5nIHRvIG5hbWUgdGFibGVcXG4gICovXFxuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXFxuK1xcdFxcdFxcdFxcdFxcdCB1MzIga2V5LCBpbnQgKmVycilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcXG4rXFx0dTMyIG1heF91c2VyX3B1YiA9IFRJUENfTUFYX1BVQkwgLSAxO1xcbiBcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4gXFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuK1xcdGJvb2wgcHJvdG9jb2xfdHlwZSA9IGZhbHNlO1xcbiBcXHR1MzIgcmNfZGVzdHM7XFxuIFxcbitcXHRpZiAodWEtXFx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVxcdTAwM2Vzci50eXBlID09IFRJUENfTElOS19TVEFURSB8fFxcbitcXHQgICAgdWEtXFx1MDAzZXNyLnR5cGUgPT0gVElQQ19UT1BfU1JWKVxcbitcXHRcXHRwcm90b2NvbF90eXBlID0gdHJ1ZTtcXG4rXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxuK1xcdGlmIChwcm90b2NvbF90eXBlKVxcbitcXHRcXHRnb3RvIGluc2VydDtcXG4gXFxuLVxcdGlmIChudC1cXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcXHUwMDNlPSBUSVBDX01BWF9QVUJMKSB7XFxuLVxcdFxcdHByX3dhcm4oXFxcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcXFxuXFxcIiwgVElQQ19NQVhfUFVCTCk7XFxuK1xcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXFxuK1xcdCAqIHNjb3BlIGFuZCBpdCBpcyBkaXN0cmlidXRlZCBpbiBidWxrLiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXInc1xcbitcXHQgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS5cXG4rXFx0ICovXFxuK1xcdGlmIChudC1cXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcXHUwMDNlPSBtYXhfdXNlcl9wdWIpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxcXG5cXFwiLCBtYXhfdXNlcl9wdWIpO1xcbiBcXHRcXHRnb3RvIGV4aXQ7XFxuIFxcdH1cXG4gXFxuK2luc2VydDpcXG4gXFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5KTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQrKztcXG4rXFx0XFx0LyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlc1xcbitcXHRcXHQgKiBzbyB0aGF0IG1heGltdW0gbnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxcbitcXHRcXHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxcbitcXHRcXHQgKiB0YWJsZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghcHJvdG9jb2xfdHlwZSlcXG4rXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQrKztcXG4gXFx0XFx0c2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7XFxuIFxcdH1cXG4gXFx0cmNfZGVzdHMgPSBudC1cXHUwMDNlcmNfZGVzdHM7XFxuQEAgLTc4Niw4ICs4MTMsODEgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gXFxuIFxcdGlmIChza2IpXFxuIFxcdFxcdHRpcGNfbm9kZV9icm9hZGNhc3QobmV0LCBza2IsIHJjX2Rlc3RzKTtcXG4rXFx0ZWxzZSBpZiAocCBcXHUwMDI2XFx1MDAyNiAocC1cXHUwMDNlc2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFKSBcXHUwMDI2XFx1MDAyNiBlcnIpXFxuK1xcdFxcdCplcnIgPSAtRU5PQlVGUztcXG4gXFx0cmV0dXJuIHA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJ3Mgc2VsZiBhZGRyZXNzXFxuKyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXFxuKyAqXFxuKyAqL1xcbitpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xcbitcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4rXFx0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XFxuK1xcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjtcXG4rXFx0c3RydWN0IHRpcGNfc2VydmljZSAqc2M7XFxuK1xcdGJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlO1xcbitcXHRzdHJ1Y3QgcHVibGljYXRpb24gKnA7XFxuK1xcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdHNrLnJlZiA9IDA7XFxuK1xcdHNrLm5vZGUgPSB0bi1cXHUwMDNlbm9kZV9hZGRyO1xcbitcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXFxuK1xcdFxcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXFx1MDAzZW5vZGVfYWRkciwgdG4tXFx1MDAzZW5vZGVfYWRkcik7XFxuK1xcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCBcXHUwMDI2dWEpO1xcbitcXHRpZiAoIXNjKSB7XFxuK1xcdFxcdHNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIFxcdTAwMjZ1YSk7XFxuK1xcdFxcdGlmICghc2MpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4rXFx0XFx0c2NfY3JlYXRlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbitcXHRzciA9IHRpcGNfc2VydmljZV9maW5kX3JhbmdlKHNjLCBcXHUwMDI2dWEpO1xcbitcXHQvKiAxLiB0aXBjX25ldF9maW5hbGl6ZV93b3JrKCkgaXMgbm90IHNjaGVkdWxlZCBiZWNhdXNlIG9mIG5hbWVzcGFjZVxcbitcXHQgKiAgICB0ZWFyZG93bi5cXG4rXFx0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIGZhaWxlZFxcbitcXHQgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC1cXHUwMDNlY2x1c3Rlcl9zY29wZVxcbitcXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cXG4rXFx0ICogMy4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxcbitcXHQgKiAgICBleGVjdXRlZCB5ZXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNyKSB7XFxuK1xcdFxcdHAgPSB0aXBjX3B1YmxfY3JlYXRlKFxcdTAwMjZ1YSwgXFx1MDAyNnNrLCB0bi1cXHUwMDNlbm9kZV9hZGRyKTtcXG4rXFx0XFx0aWYgKCFwKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiBcXG4rXFx0XFx0aWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgXFx1MDAyNmVycikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChlcnIgPT0gLUVOT0JVRlMpKSB7XFxuK1xcdFxcdFxcdGtmcmVlKHApO1xcbitcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX25vZGUsIFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSk7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rZXJyb3I6XFxuK1xcdFxcdGlmIChzY19jcmVhdGVkKSB7XFxuK1xcdFxcdFxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2c2MtXFx1MDAzZXNlcnZpY2VfbGlzdCk7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdGtmcmVlX3JjdShzYywgcmN1KTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuK1xcdH1cXG4rZXhpdDpcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC04MTAsNyArOTEwLDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbiBcXG4gXFx0cCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcXG4rXFx0XFx0aWYgKHAtXFx1MDAzZXNyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBwLVxcdTAwM2Vzci50eXBlICE9IFRJUENfTElOS19TVEFURSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcC1cXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXFxuK1xcdFxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XFxuIFxcdFxcdHNrYiA9IHRpcGNfbmFtZWRfd2l0aGRyYXcobmV0LCBwKTtcXG4gXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19zb2NrKTtcXG4gXFx0XFx0a2ZyZWVfcmN1KHAsIHJjdSk7XFxuQEAgLTg5OSw3ICsxMDAyLDYgQEAgaW50IHRpcGNfbmFtZXRibF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZudC1cXHUwMDNlbm9kZV9zY29wZSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSk7XFxuLVxcdHJ3bG9ja19pbml0KFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4gXFx0dG4tXFx1MDAzZW5hbWV0YmwgPSBudDtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtOTE5LDYgKzEwMjEsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpXFxuIFxcdHJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShzciwgdG1wciwgXFx1MDAyNnNjLVxcdTAwM2VyYW5nZXMsIHRyZWVfbm9kZSkge1xcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCBcXHUwMDI2c3ItXFx1MDAzZWFsbF9wdWJsLCBhbGxfcHVibCkge1xcbiBcXHRcXHRcXHR0aXBjX3NlcnZpY2VfcmVtb3ZlX3B1Ymwoc3IsIFxcdTAwMjZwLVxcdTAwM2VzaywgcC1cXHUwMDNla2V5KTtcXG4rXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnAtXFx1MDAzZWJpbmRpbmdfbm9kZSk7XFxuIFxcdFxcdFxcdGtmcmVlX3JjdShwLCByY3UpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJiX2VyYXNlX2F1Z21lbnRlZChcXHUwMDI2c3ItXFx1MDAzZXRyZWVfbm9kZSwgXFx1MDAyNnNjLVxcdTAwM2VyYW5nZXMsIFxcdTAwMjZzcl9jYWxsYmFja3MpO1xcbkBAIC05NDksNiArMTA1Miw4IEBAIHZvaWQgdGlwY19uYW1ldGJsX3N0b3Aoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRcXHRcXHR0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHR0bi1cXHUwMDNlbnRfc3RvcCA9IHRydWU7XFxuK1xcdHRuLVxcdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbiBcXG4gXFx0LyogVE9ETzogY2xlYXIgdG4tXFx1MDAzZW5hbWV0YmwsIGltcGxlbWVudCBwcm9wZXIgUkNVIHJ1bGVzID8gKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uZTdhMmM1MGYwOTljZiAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmhcXG4rKysgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmhcXG5AQCAtOTcsNyArOTcsNiBAQCBzdHJ1Y3QgcHVibGljYXRpb24ge1xcbiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGVcXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciB0byBzZW5kIGJ1bGsgdXBkYXRlcyB0byBuZXcgbm9kZXNcXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciBkdXJpbmcgcmUtaW5pdCBvZiBuYW1lIHRhYmxlXFxuLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZVxcbiAgKiBAbG9jYWxfcHVibF9jb3VudDogbnVtYmVyIG9mIHB1YmxpY2F0aW9ucyBpc3N1ZWQgYnkgdGhpcyBub2RlXFxuICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyXFxuICAqIEBzbmRfbnh0OiBuZXh0IHNlcXVlbmNlIG51bWJlciB0byBiZSB1c2VkXFxuQEAgLTEwNyw3ICsxMDYsNiBAQCBzdHJ1Y3QgbmFtZV90YWJsZSB7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkIHNlcnZpY2VzW1RJUENfTkFNRVRCTF9TSVpFXTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfc2NvcGU7XFxuLVxcdHJ3bG9ja190IGNsdXN0ZXJfc2NvcGVfbG9jaztcXG4gXFx0dTMyIGxvY2FsX3B1YmxfY291bnQ7XFxuIFxcdHUzMiByY19kZXN0cztcXG4gXFx0dTMyIHNuZF9ueHQ7XFxuQEAgLTEyNiwxMyArMTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEpO1xcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcXG4rXFx0XFx0XFx0XFx0XFx0IHUzMiBrZXksIGludCAqZXJyKTtcXG4gdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XFxuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBrZXkpO1xcbitpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTtcXG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25ldC5jIGIvbmV0L3RpcGMvbmV0LmNcXG5pbmRleCA3ZTY1ZDBiMGM0YThkLi43YTJjMWU2N2FjYTNkIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25ldC5jXFxuKysrIGIvbmV0L3RpcGMvbmV0LmNcXG5AQCAtMTEwLDExICsxMTAsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XFxuIFxcbiBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcilcXG4ge1xcbitcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4rXFxuIFxcdGlmICh0aXBjX293bl9pZChuZXQpKSB7XFxuIFxcdFxcdHByX2luZm8oXFxcIkNhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXHRwcl9pbmZvKFxcXCJTdGFydGVkIGluIG5ldHdvcmsgbW9kZVxcXFxuXFxcIik7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnRuLVxcdTAwM2Vub2RlX2FkZHJfc2V0LCAwKTtcXG4gXFxuIFxcdGlmIChub2RlX2lkKVxcbiBcXHRcXHR0aXBjX3NldF9ub2RlX2lkKG5ldCwgbm9kZV9pZCk7XFxuQEAgLTEyNSw4ICsxMjgsOCBAQCBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcilcXG4gXFxuIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuIHtcXG4tXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIFxcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrID0gezAsIGFkZHJ9O1xcbitcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4gXFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XFxuIFxcbiBcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXFxuQEAgLTEzOCw3ICsxNDEsMTEgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcXG4gXFx0dGlwY19uYW1lZF9yZWluaXQobmV0KTtcXG4gXFx0dGlwY19za19yZWluaXQobmV0KTtcXG4gXFx0dGlwY19tb25fcmVpbml0X3NlbGYobmV0KTtcXG4tXFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgYWRkcik7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnRuLVxcdTAwM2Vub2RlX2FkZHJfc2V0LCAxKTtcXG4rXFx0LyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUncyB0aW1lclxcbitcXHQgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLlxcbitcXHQgKi9cXG4rXFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgYWRkciwgTlVMTCk7XFxuIH1cXG4gXFxuIHZvaWQgdGlwY19uZXRfZmluYWxpemVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuYyBiL25ldC90aXBjL25vZGUuY1xcbmluZGV4IDY4M2ExMzZlNTNlZmMuLmNhNGE4ZmNjYTY0NDcgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbm9kZS5jXFxuKysrIGIvbmV0L3RpcGMvbm9kZS5jXFxuQEAgLTExMSw2ICsxMTEsNyBAQCBzdHJ1Y3QgdGlwY19iY2xpbmtfZW50cnkge1xcbiAgKiBAcGVlcl9uZXQ6IHBlZXIncyBuZXQgbmFtZXNwYWNlXFxuICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKVxcbiAgKiBAY3J5cHRvX3J4OiBSWCBjcnlwdG8gaGFuZGxlclxcbisgKiBAZGlzdF9idWxrOiBmbGFnIHRvIHJlZGlzdHJpYnV0ZSBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9uc1xcbiAgKi9cXG4gc3RydWN0IHRpcGNfbm9kZSB7XFxuIFxcdHUzMiBhZGRyO1xcbkBAIC0xNDUsNiArMTQ2LDcgQEAgc3RydWN0IHRpcGNfbm9kZSB7XFxuICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE9cXG4gXFx0c3RydWN0IHRpcGNfY3J5cHRvICpjcnlwdG9fcng7XFxuICNlbmRpZlxcbitcXHRhdG9taWNfdCBkaXN0X2J1bGs7XFxuIH07XFxuIFxcbiAvKiBOb2RlIEZTTSBzdGF0ZXMgYW5kIGV2ZW50czpcXG5AQCAtMzQ1LDYgKzM0NywxNSBAQCBzdGF0aWMgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcXG4gXFx0cmV0dXJuIG5vZGU7XFxuIH1cXG4gXFxuK3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgdGlwY19ub2RlICpub2RlO1xcbitcXG4rXFx0bm9kZSA9IHRpcGNfbm9kZV9maW5kKG5ldCwgYWRkcik7XFxuK1xcdGlmIChub2RlKVxcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZub2RlLVxcdTAwM2VkaXN0X2J1bGssIDEpO1xcbit9XFxuK1xcbiAvKiB0aXBjX25vZGVfZmluZF9ieV9pZCAtIGxvY2F0ZSBzcGVjaWZpZWQgbm9kZSBvYmplY3QgYnkgaXRzIDEyOC1iaXQgaWRcXG4gICogTm90ZTogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSB3aGVuIGEgZGlzY292ZXJ5IHJlcXVlc3QgZmFpbGVkXFxuICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsXFxuQEAgLTM5Myw2ICs0MDQsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9ja19mYXN0KHN0cnVjdCB0aXBjX25vZGUgKm4pXFxuIFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bi1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRpcGNfbm9kZV9kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4pXFxuK3tcXG4rXFx0aW50IGJlYXJlcl9pZDtcXG4rXFxuK1xcdGZvciAoYmVhcmVyX2lkID0gMDsgYmVhcmVyX2lkIFxcdTAwM2MgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCsrKVxcbitcXHRcXHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXFxuIFxcdF9fcmVsZWFzZXMobi1cXHUwMDNlbG9jaylcXG4ge1xcbkBAIC00MDIsNiArNDIxLDcgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwdWJsX2xpc3Q7XFxuIFxcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xcbiBcXHR1MzIgYmVhcmVyX2lkLCBub2RlO1xcbitcXHRpbnQgcmMgPSAwLCBlcnIgPSAwO1xcbiBcXG4gXFx0aWYgKGxpa2VseSghZmxhZ3MpKSB7XFxuIFxcdFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bi1cXHUwMDNlbG9jayk7XFxuQEAgLTQyNSwxNiArNDQ1LDI0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcXG4gXFx0XFx0dGlwY19wdWJsX25vdGlmeShuZXQsIHB1YmxfbGlzdCwgbm9kZSwgbi1cXHUwMDNlY2FwYWJpbGl0aWVzKTtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IFRJUENfTk9USUZZX05PREVfVVApXFxuLVxcdFxcdHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tXFx1MDAzZWNhcGFiaWxpdGllcyk7XFxuK1xcdFxcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cXHUwMDNlY2FwYWJpbGl0aWVzKTtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IFRJUENfTk9USUZZX0xJTktfVVApIHtcXG4gXFx0XFx0dGlwY19tb25fcGVlcl91cChuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XFxuLVxcdFxcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIHNrLnJlZik7XFxuK1xcdFxcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIHNrLnJlZiwgXFx1MDAyNmVycik7XFxuIFxcdH1cXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgVElQQ19OT1RJRllfTElOS19ET1dOKSB7XFxuIFxcdFxcdHRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XFxuIFxcdFxcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFxcdTAwMjZ1YSwgXFx1MDAyNnNrLCBzay5yZWYpO1xcbiBcXHR9XFxuK1xcbitcXHQvKiBNZW1vcnkgYWxsb2NhdGlvbiBoYXMgZmFpbGVkLiBCcmluZyB0aGUgbm9kZSBkb3duIHRvIHN0YXJ0IG92ZXIgYnVsa1xcbitcXHQgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi5cXG4rXFx0ICovXFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdHRpcGNfbm9kZV9kb3duKG4pO1xcbitcXHRlbHNlIGlmIChlcnIgPT0gLUVOT0JVRlMpXFxuK1xcdFxcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV9hc3NpZ25fcGVlcl9uZXQoc3RydWN0IHRpcGNfbm9kZSAqbiwgdTMyIGhhc2hfbWl4ZXMpXFxuQEAgLTU2NCw2ICs1OTIsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIsIHU4ICpwZWVyX2lkLFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bi1cXHUwMDNlbGlzdCk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuLVxcdTAwM2VwdWJsX2xpc3QpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bi1cXHUwMDNlY29ubl9za3MpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZuLVxcdTAwM2VkaXN0X2J1bGssIDApO1xcbiBcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZuLVxcdTAwM2ViY19lbnRyeS5uYW1lZHEpO1xcbiBcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZuLVxcdTAwM2ViY19lbnRyeS5pbnB1dHExKTtcXG4gXFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZuLVxcdTAwM2ViY19lbnRyeS5hcnJ2cSk7XFxuQEAgLTgwMyw3ICs4MzIsOCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFx0c3RydWN0IHRpcGNfbm9kZSAqbiA9IHRpbWVyX2NvbnRhaW5lcl9vZihuLCB0LCB0aW1lcik7XFxuIFxcdHN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHhtaXRxO1xcbi1cXHRpbnQgcmVtYWlucyA9IG4tXFx1MDAzZWxpbmtfY250O1xcbitcXHRpbnQgcmVtYWlucyA9IDA7XFxuK1xcdGludCBkaXN0X3JjID0gMDtcXG4gXFx0aW50IGJlYXJlcl9pZDtcXG4gXFx0aW50IHJjID0gMDtcXG4gXFxuQEAgLTgxNCw2ICs4NDQsOSBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoYXRvbWljX3hjaGcoXFx1MDAyNm4tXFx1MDAzZWRpc3RfYnVsaywgMCkpXFxuK1xcdFxcdGRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi1cXHUwMDNlbmV0LCBuLVxcdTAwM2VhZGRyKTtcXG4rXFxuICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE9cXG4gXFx0LyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi9cXG4gXFx0dGlwY19jcnlwdG9fdGltZW91dChuLVxcdTAwM2VjcnlwdG9fcngpO1xcbkBAIC04MjUsNiArODU4LDcgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIFxcdCAqL1xcbiBcXHR0aXBjX25vZGVfcmVhZF9sb2NrKG4pO1xcbiBcXHRuLVxcdTAwM2VrZWVwYWxpdmVfaW50diA9IDEwMDAwO1xcbitcXHRyZW1haW5zID0gbi1cXHUwMDNlbGlua19jbnQ7XFxuIFxcdHRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTtcXG4gXFx0Zm9yIChiZWFyZXJfaWQgPSAwOyByZW1haW5zIFxcdTAwMjZcXHUwMDI2IChiZWFyZXJfaWQgXFx1MDAzYyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCsrKSB7XFxuIFxcdFxcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XFxuQEAgLTgzNSwxMSArODY5LDEzIEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRcXHRcXHR0aXBjX25vZGVfY2FsY3VsYXRlX3RpbWVyKG4sIGxlLVxcdTAwM2VsaW5rKTtcXG4gXFx0XFx0XFx0cmMgPSB0aXBjX2xpbmtfdGltZW91dChsZS1cXHUwMDNlbGluaywgXFx1MDAyNnhtaXRxKTtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxlLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0XFx0cmVtYWlucy0tO1xcbitcXHRcXHRcXHRpZiAoZGlzdF9yYyAhPSAtRU5PQlVGUylcXG4rXFx0XFx0XFx0XFx0cmVtYWlucy0tO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTtcXG4gXFx0XFx0dGlwY19iZWFyZXJfeG1pdChuLVxcdTAwM2VuZXQsIGJlYXJlcl9pZCwgXFx1MDAyNnhtaXRxLCBcXHUwMDI2bGUtXFx1MDAzZW1hZGRyLCBuKTtcXG4tXFx0XFx0aWYgKHJjIFxcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxcbitcXHRcXHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xcbitcXHRcXHRpZiAoKHJjIFxcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKSB8fCAoZGlzdF9yYyA9PSAtRU5PQlVGUykpXFxuIFxcdFxcdFxcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XFxuIFxcdH1cXG4gXFx0bW9kX3RpbWVyKFxcdTAwMjZuLVxcdTAwM2V0aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobi1cXHUwMDNla2VlcGFsaXZlX2ludHYpKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oXFxuaW5kZXggMTU0YTViYmIwZDI5ZC4uMGY3NzdjZmU3YzAxZSAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9ub2RlLmhcXG4rKysgYi9uZXQvdGlwYy9ub2RlLmhcXG5AQCAtMTI4LDQgKzEyOCw1IEBAIGludCB0aXBjX25sX25vZGVfc2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4gaW50IHRpcGNfbmxfbm9kZV9mbHVzaF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuICNlbmRpZlxcbiB2b2lkIHRpcGNfbm9kZV9wcmVfY2xlYW51cF9uZXQoc3RydWN0IG5ldCAqZXhpdF9uZXQpO1xcbit2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xcbmluZGV4IGQ1ZDcwZWIyMzBiNTYuLjZiODNiZGZjNDM5YzMgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvc29ja2V0LmNcXG4rKysgYi9uZXQvdGlwYy9zb2NrZXQuY1xcbkBAIC0yOTE5LDcgKzI5MTksNyBAQCBzdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcXG4gXFx0XFx0cmV0dXJuIC1FQUREUklOVVNFO1xcbiBcXHRza2FkZHIucmVmID0gdHNrLVxcdTAwM2Vwb3J0aWQ7XFxuIFxcdHNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpO1xcbi1cXHRwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgXFx1MDAyNnNrYWRkciwga2V5KTtcXG4rXFx0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFxcdTAwMjZza2FkZHIsIGtleSwgTlVMTCk7XFxuIFxcdGlmICh1bmxpa2VseSghcCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTQ6MjAuMTAwMTA0NDAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA2Mzg3NjYwMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX25hbWVkX2Rpc3RyaWJ1dGVcIixcbiAgICBcInRpcGNfbmFtZWRfbm9kZV91cFwiLFxuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViXCIsXG4gICAgXCJ0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHN1YnN5c3RlbSB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgbmFtZSBkaXN0cmlidXRpb24gYW5kIHB1YmxpY2F0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSBmbGFncyB0byBgdGlwY19uZXRgIGFuZCBgdGlwY19ub2RlYCBhbmQgbW9kaWZpZXMgdGhlIG5vZGUgdGltZW91dCBhbmQgdW5sb2NrIGxvZ2ljIHRvIGhhbmRsZSByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIFRJUEMgbG9naWMsIHdoaWNoIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgZmFtaWx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNjg3ZTE0NTllZTczMWEwZDYzMmI1NjU5MGVmNzBhMTE3ZTM4MTU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDM6NTQ6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmMgYi9uZXQvdGlwYy9jb3JlLmNcbmluZGV4IDMxNTk3NWMzYmU4MTguLjBmMWQzZGRlYWUwOTUgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9jb3JlLmNcbisrKyBiL25ldC90aXBjL2NvcmUuY1xuQEAgLTYxLDYgKzYxLDkgQEAgc3RhdGljIGludCBfX25ldF9pbml0IHRpcGNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0dG4tXHUwMDNldHJpYWxfYWRkciA9IDA7XG4gXHR0bi1cdTAwM2VhZGRyX3RyaWFsX2VuZCA9IDA7XG4gXHR0bi1cdTAwM2VjYXBhYmlsaXRpZXMgPSBUSVBDX05PREVfQ0FQQUJJTElUSUVTO1xuK1x0dG4tXHUwMDNlbnRfc3RvcCA9IGZhbHNlO1xuK1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDApO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnRuLVx1MDAzZXdvcmssIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmspO1xuIFx0bWVtc2V0KHRuLVx1MDAzZW5vZGVfaWQsIDAsIHNpemVvZih0bi1cdTAwM2Vub2RlX2lkKSk7XG4gXHRtZW1zZXQodG4tXHUwMDNlbm9kZV9pZF9zdHJpbmcsIDAsIHNpemVvZih0bi1cdTAwM2Vub2RlX2lkX3N0cmluZykpO1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaFxuaW5kZXggOWNlNWY5ZmY2Y2MwMy4uOTc1YjFkNDgxODZlNiAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuaFxuKysrIGIvbmV0L3RpcGMvY29yZS5oXG5AQCAtMTQ1LDYgKzE0NSwxMiBAQCBzdHJ1Y3QgdGlwY19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4gXHQvKiBUaGUgbnVtYmVycyBvZiB3b3JrIHF1ZXVlcyBpbiBzY2hlZHVsZSAqL1xuIFx0YXRvbWljX3Qgd3FfY291bnQ7XG4rXHQvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIG5vZGUncyBhZGRyZXNzIGlzIHNldCAqL1xuK1x0YXRvbWljX3Qgbm9kZV9hZGRyX3NldDtcbitcdC8qIFRoZSBuYW1lIHRhYmxlIGhhcyBzdG9wcGVkIHdvcmtpbmcgKi9cbitcdGJvb2wgbnRfc3RvcDtcbitcdC8qIE5vZGUncyBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBuYW1lIHRhYmxlICovXG4rXHRib29sIG50X3NlbGZfbm9kZV9leGlzdDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRpcGNfbmV0ICp0aXBjX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXG5pbmRleCBiYTRmNDkwNmUxM2I3Li4wNjBjNDJkOGZkYTU0IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXG4rKysgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbkBAIC05NSw5ICs5NSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApXG4gXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlLCBcdTAwMjZudC1cdTAwM2Vub2RlX3Njb3BlKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4tXHR3cml0ZV9sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlLCBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbi1cdHdyaXRlX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgSVRFTV9TSVpFLCAwKTtcbiBcdGlmICghc2tiKSB7XG4gXHRcdHByX3dhcm4oXCJQdWJsaWNhdGlvbiBkaXN0cmlidXRpb24gZmFpbHVyZVxcblwiKTtcbkBAIC0xMjEsOSArMTE5LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApXG4gXHRzdHJ1Y3QgZGlzdHJfaXRlbSAqaXRlbTtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4tXHR3cml0ZV9sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRsaXN0X2RlbChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSk7XG4tXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGlmIChwLVx1MDAzZXNjb3BlID09IFRJUENfTk9ERV9TQ09QRSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5AQCAtMTQ2LDkgKzE0MiwxNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiAgKiBAZG5vZGU6IG5vZGUgdG8gYmUgdXBkYXRlZFxuICAqIEBwbHM6IGxpbmtlZCBsaXN0IG9mIHB1YmxpY2F0aW9uIGl0ZW1zIHRvIGJlIHBhY2tlZCBpbnRvIGJ1ZmZlciBjaGFpblxuICAqIEBzZXFubzogc2VxdWVuY2UgbnVtYmVyIGZvciB0aGlzIG1lc3NhZ2VcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4gICovXG4tc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4tXHRcdFx0ICAgICB1MzIgZG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBscywgdTE2IHNlcW5vKVxuK3N0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4rXHRcdFx0ICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4ge1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwdWJsO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG5AQCAtMTY0LDggKzE2NSw5IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuIFx0XHRcdHNrYiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIG1zZ19yZW0sXG4gXHRcdFx0XHRcdFx0ZG5vZGUpO1xuIFx0XHRcdGlmICghc2tiKSB7XG4rXHRcdFx0XHRfX3NrYl9xdWV1ZV9wdXJnZShsaXN0KTtcbiBcdFx0XHRcdHByX3dhcm4oXCJCdWxrIHB1YmxpY2F0aW9uIGZhaWx1cmVcXG5cIik7XG4tXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXHRcdFx0fVxuIFx0XHRcdGhkciA9IGJ1Zl9tc2coc2tiKTtcbiBcdFx0XHRtc2dfc2V0X2JjX2Fja19pbnZhbGlkKGhkciwgdHJ1ZSk7XG5AQCAtMTk1LDYgKzE5Nyw4MiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiBcdGhkciA9IGJ1Zl9tc2coc2tiX3BlZWtfdGFpbChsaXN0KSk7XG4gXHRtc2dfc2V0X2xhc3RfYnVsayhoZHIpO1xuIFx0bXNnX3NldF9uYW1lZF9zZXFubyhoZHIsIHNlcW5vKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGJ1aWxkIGEgbGlzdCBvZiBwdWJsaWNhdGlvbnMgbmVlZCB0byBiZSBkaXN0cmlidXRlZFxuKyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4rICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4rICogQGhlYWQ6IGxpc3Qgb2YgcHVibGljYXRpb25zXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuKyAqL1xuK3N0YXRpYyBpbnQgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoZWFkKVxuK3tcbitcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xuK1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4rXG4rXHQvKiBOYW1lIHRhYmxlIGhhcyBiZWVuIGRlbGV0ZWQgYWZ0ZXIgbmFtZXNwYWNlIHRlYXJkb3duIG9yXG4rXHQgKiBUSVBDIG1vZHVsZSBleGl0LlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkodG4tXHUwMDNlbnRfc3RvcCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogTm9kZSdzIHNlbGYgYWRkcmVzcyBpcyBub3Qgc2V0IHlldCAqL1xuK1x0aWYgKCFhdG9taWNfcmVhZChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0KSkge1xuK1x0XHQvKiBEZWZlciB0aGUgZGlzdHJpYnV0aW9uIHRvIG5vZGUncyB0aW1lciAqL1xuK1x0XHR0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhuZXQsIGRub2RlKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAodG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0KVxuK1x0XHRnb3RvIGRpc3RyaWJ1dGU7XG4rXG4rXHRpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSlcbitcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1xuK1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gdHJ1ZTtcbitcbitkaXN0cmlidXRlOlxuK1x0aWYgKG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBoZWFkLCBkbm9kZSxcbitcdFx0XHQgICAgIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIG50LVx1MDAzZXNuZF9ueHQpID09IC1FTk9CVUZTKVxuK1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlXG4rICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbisgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4raW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSlcbit7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcdHN0cnVjdCBza19idWZmX2hlYWQgaGVhZDtcbitcdGludCByYyA9IDA7XG4rXG4rXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGVhZCk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXHUwMDI2aGVhZCk7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuK1x0aWYgKCFyYyBcdTAwMjZcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZoZWFkKSkge1xuK1x0XHRpZiAodGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgMCkgPT0gLUVOT0JVRlMpXG4rXHRcdFx0cmMgPSAtRU5PQlVGUztcbitcdH1cbitcbitcdHJldHVybiByYztcbiB9XG4gXG4gLyoqXG5AQCAtMjAyLDI1ICsyODAsMzIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbiAgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbiAgKiBAY2FwYWJpbGl0aWVzOiBwZWVyIG5vZGUncyBjYXBhYmlsaXRpZXNcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4gICovXG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG4raW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xuLVx0dTE2IHNlcW5vO1xuK1x0aW50IHJjID0gMDtcbiBcbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZoZWFkKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFx0aWYgKCEoY2FwYWJpbGl0aWVzIFx1MDAyNiBUSVBDX05BTUVEX0JDQVNUKSlcbiBcdFx0bnQtXHUwMDNlcmNfZGVzdHMrKztcbi1cdHNlcW5vID0gbnQtXHUwMDNlc25kX254dDtcbitcbitcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXHUwMDI2aGVhZCk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuK1x0aWYgKCFyYyBcdTAwMjZcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZoZWFkKSkge1xuK1x0XHRpZiAodGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgMCkgPT0gLUVOT0JVRlMpXG4rXHRcdFx0cmMgPSAtRU5PQlVGUztcbitcdH1cbiBcbi1cdHJlYWRfbG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuLVx0bmFtZWRfZGlzdHJpYnV0ZShuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlLCBzZXFubyk7XG4tXHR0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbi1cdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4rXHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTQxNiw1ICs1MDEsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIGJpbmRpbmdfbm9kZSlcbiBcdFx0cC1cdTAwM2Vzay5ub2RlID0gc2VsZjtcbiBcdG50LVx1MDAzZXJjX2Rlc3RzID0gMDtcbitcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxuaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5AQCAtNjksMTEgKzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHtcbiBcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuIHZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXG4gXHRcdCAgICB1MTYgKnJjdl9ueHQsIGJvb2wgKm9wZW4pO1xuIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTtcbiB2b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXG4gXHRcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcbitpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjNiYjBjZTc4M2RiZGYgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbisrKyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4gXG4gc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbitcdFx0XHRcdCAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwLCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YiwgKnRtcDtcbiBcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjtcbkBAIC0zMzksMTAgKzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0Ym9vbCByZXMgPSBmYWxzZTtcbiBcdHUzMiBrZXkgPSBwLVx1MDAzZWtleTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7XG4tXHRpZiAoIXNyKVxuK1x0aWYgKCFzcikge1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byAgZXhpdDtcbitcdH1cbiBcbiBcdGZpcnN0ID0gbGlzdF9lbXB0eShcdTAwMjZzci1cdTAwM2VhbGxfcHVibCk7XG4gXG5AQCAtMzUzLDYgKzM1NSw4IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gYmluZCBkdXBsaWNhdGUgJXUsJXUsJXUvJXU6JXUvJXVcXG5cIixcbiBcdFx0XHRcdCBwLVx1MDAzZXNyLnR5cGUsIHAtXHUwMDNlc3IubG93ZXIsIHAtXHUwMDNlc3IudXBwZXIsXG4gXHRcdFx0XHQgbm9kZSwgcC1cdTAwM2Vzay5yZWYsIGtleSk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdCplcnIgPSAtRUVYSVNUO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuIFx0fVxuQEAgLTM3MSw3ICszNzUsNiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKCFyZXMpXG4gXHRcdHByX3dhcm4oXCJGYWlsZWQgdG8gYmluZCB0byAldSwldSwldVxcblwiLFxuIFx0XHRcdHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuQEAgLTQ5MCw4ICs0OTMsMTIgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIHVhKTtcbiBcdGlmICghc2MpXG4gXHRcdHNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIHVhKTtcbi1cdGlmIChzYyBcdTAwMjZcdTAwMjYgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHApKVxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0aWYgKHNjIFx1MDAyNlx1MDAyNiB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgTlVMTCkpIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4gXHRcdHJldHVybiBwO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4gXHRrZnJlZShwKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC03NjAsMjQgKzc2Nyw0NCBAQCB2b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG4gLyogdGlwY19uYW1ldGJsX3B1Ymxpc2ggLSBhZGQgc2VydmljZSBiaW5kaW5nIHRvIG5hbWUgdGFibGVcbiAgKi9cbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuLVx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KVxuK1x0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuK1x0XHRcdFx0XHQgdTMyIGtleSwgaW50ICplcnIpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHR1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7XG4gXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbitcdGJvb2wgcHJvdG9jb2xfdHlwZSA9IGZhbHNlO1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFxuK1x0aWYgKHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8XG4rXHQgICAgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpXG4rXHRcdHByb3RvY29sX3R5cGUgPSB0cnVlO1xuK1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAocHJvdG9jb2xfdHlwZSlcbitcdFx0Z290byBpbnNlcnQ7XG4gXG4tXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IFRJUENfTUFYX1BVQkwpIHtcbi1cdFx0cHJfd2FybihcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwiLCBUSVBDX01BWF9QVUJMKTtcbitcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXG4rXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcbitcdCAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLlxuK1x0ICovXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IG1heF91c2VyX3B1Yikge1xuK1x0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIG1heF91c2VyX3B1Yik7XG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbitpbnNlcnQ6XG4gXHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCsrO1xuK1x0XHQvKiBOb3QgY291bnQgbm9kZSBzdGF0ZSwgbGluayBzdGF0ZSBhbmQgdG9wb2xvZ3kgc2VydmVyIHR5cGVzXG4rXHRcdCAqIHNvIHRoYXQgbWF4aW11bSBudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnRcbitcdFx0ICogcHJvdG9jb2wgc2VydmljZSB0eXBlcyBmcm9tIGJlaW5nIGluc2VydGVkIGludG8gdGhlIG5hbWVcbitcdFx0ICogdGFibGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXByb3RvY29sX3R5cGUpXG4rXHRcdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCsrO1xuIFx0XHRza2IgPSB0aXBjX25hbWVkX3B1Ymxpc2gobmV0LCBwKTtcbiBcdH1cbiBcdHJjX2Rlc3RzID0gbnQtXHUwMDNlcmNfZGVzdHM7XG5AQCAtNzg2LDggKzgxMyw4MSBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFxuIFx0aWYgKHNrYilcbiBcdFx0dGlwY19ub2RlX2Jyb2FkY2FzdChuZXQsIHNrYiwgcmNfZGVzdHMpO1xuK1x0ZWxzZSBpZiAocCBcdTAwMjZcdTAwMjYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFKSBcdTAwMjZcdTAwMjYgZXJyKVxuK1x0XHQqZXJyID0gLUVOT0JVRlM7XG4gXHRyZXR1cm4gcDtcbit9XG4rXG4rLyoqXG4rICogdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIgLSBpbnNlcnQgcHVibGljYXRpb24gb2Ygbm9kZSdzIHNlbGYgYWRkcmVzc1xuKyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuKyAqL1xuK2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrO1xuK1x0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xuK1x0c3RydWN0IHRpcGNfc2VydmljZSAqc2M7XG4rXHRib29sIHNjX2NyZWF0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcDtcbitcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRzay5yZWYgPSAwO1xuK1x0c2subm9kZSA9IHRuLVx1MDAzZW5vZGVfYWRkcjtcbitcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxuK1x0XHQgICBUSVBDX05PREVfU1RBVEUsIHRuLVx1MDAzZW5vZGVfYWRkciwgdG4tXHUwMDNlbm9kZV9hZGRyKTtcbitcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCBcdTAwMjZ1YSk7XG4rXHRpZiAoIXNjKSB7XG4rXHRcdHNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIFx1MDAyNnVhKTtcbitcdFx0aWYgKCFzYylcbitcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXHRcdHNjX2NyZWF0ZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXHUwMDI2dWEpO1xuK1x0LyogMS4gdGlwY19uZXRfZmluYWxpemVfd29yaygpIGlzIG5vdCBzY2hlZHVsZWQgYmVjYXVzZSBvZiBuYW1lc3BhY2VcbitcdCAqICAgIHRlYXJkb3duLlxuK1x0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgZmFpbGVkXG4rXHQgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC1cdTAwM2VjbHVzdGVyX3Njb3BlXG4rXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbitcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxuK1x0ICogICAgZXhlY3V0ZWQgeWV0LlxuK1x0ICovXG4rXHRpZiAoIXNyKSB7XG4rXHRcdHAgPSB0aXBjX3B1YmxfY3JlYXRlKFx1MDAyNnVhLCBcdTAwMjZzaywgdG4tXHUwMDNlbm9kZV9hZGRyKTtcbitcdFx0aWYgKCFwKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4gXG4rXHRcdGlmICghdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIFx1MDAyNmVycikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoZXJyID09IC1FTk9CVUZTKSkge1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXHRcdH1cbitcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSk7XG4rXHRcdGdvdG8gZXhpdDtcbitlcnJvcjpcbitcdFx0aWYgKHNjX2NyZWF0ZWQpIHtcbitcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2c2MtXHUwMDNlc2VydmljZV9saXN0KTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdFx0XHRrZnJlZV9yY3Uoc2MsIHJjdSk7XG4rXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1x0XHR9XG4rXG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXHR9XG4rZXhpdDpcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTgxMCw3ICs5MTAsMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuK1x0XHRpZiAocC1cdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX0xJTktfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19UT1BfU1JWKVxuK1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbiBcdFx0c2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlYmluZGluZ19zb2NrKTtcbiBcdFx0a2ZyZWVfcmN1KHAsIHJjdSk7XG5AQCAtODk5LDcgKzEwMDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bnQtXHUwMDNlbm9kZV9zY29wZSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbi1cdHJ3bG9ja19pbml0KFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHR0bi1cdTAwM2VuYW1ldGJsID0gbnQ7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFx0cmV0dXJuIDA7XG5AQCAtOTE5LDYgKzEwMjEsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpXG4gXHRyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3IsIHRtcHIsIFx1MDAyNnNjLVx1MDAzZXJhbmdlcywgdHJlZV9ub2RlKSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsIFx1MDAyNnNyLVx1MDAzZWFsbF9wdWJsLCBhbGxfcHVibCkge1xuIFx0XHRcdHRpcGNfc2VydmljZV9yZW1vdmVfcHVibChzciwgXHUwMDI2cC1cdTAwM2VzaywgcC1cdTAwM2VrZXkpO1xuK1x0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbiBcdFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdFx0fVxuIFx0XHRyYl9lcmFzZV9hdWdtZW50ZWQoXHUwMDI2c3ItXHUwMDNldHJlZV9ub2RlLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIFx1MDAyNnNyX2NhbGxiYWNrcyk7XG5AQCAtOTQ5LDYgKzEwNTIsOCBAQCB2b2lkIHRpcGNfbmFtZXRibF9zdG9wKHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0XHR0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7XG4gXHRcdH1cbiBcdH1cbitcdHRuLVx1MDAzZW50X3N0b3AgPSB0cnVlO1xuK1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFxuIFx0LyogVE9ETzogY2xlYXIgdG4tXHUwMDNlbmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqL1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uZTdhMmM1MGYwOTljZiAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5AQCAtOTcsNyArOTcsNiBAQCBzdHJ1Y3QgcHVibGljYXRpb24ge1xuICAqIEBjbHVzdGVyX3Njb3BlOiBhbGwgbG9jYWwgcHVibGljYXRpb25zIHdpdGggY2x1c3RlciBzY29wZVxuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciBkdXJpbmcgcmUtaW5pdCBvZiBuYW1lIHRhYmxlXG4tICogQGNsdXN0ZXJfc2NvcGVfbG9jazogbG9jayBmb3IgYWNjZXNzaW5nIEBjbHVzdGVyX3Njb3BlXG4gICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyXG4gICogQHNuZF9ueHQ6IG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHVzZWRcbkBAIC0xMDcsNyArMTA2LDYgQEAgc3RydWN0IG5hbWVfdGFibGUge1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgc2VydmljZXNbVElQQ19OQU1FVEJMX1NJWkVdO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBjbHVzdGVyX3Njb3BlO1xuLVx0cndsb2NrX3QgY2x1c3Rlcl9zY29wZV9sb2NrO1xuIFx0dTMyIGxvY2FsX3B1YmxfY291bnQ7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXHR1MzIgc25kX254dDtcbkBAIC0xMjYsMTMgKzEyNCwxNSBAQCBib29sIHRpcGNfbmFtZXRibF9sb29rdXBfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycik7XG4gdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbiBcdFx0XHRcdFx0ICAgICB1MzIga2V5KTtcbitpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uZXQuYyBiL25ldC90aXBjL25ldC5jXG5pbmRleCA3ZTY1ZDBiMGM0YThkLi43YTJjMWU2N2FjYTNkIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmV0LmNcbisrKyBiL25ldC90aXBjL25ldC5jXG5AQCAtMTEwLDExICsxMTAsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XG4gXG4gaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpXG4ge1xuK1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4rXG4gXHRpZiAodGlwY19vd25faWQobmV0KSkge1xuIFx0XHRwcl9pbmZvKFwiQ2Fubm90IGNvbmZpZ3VyZSBub2RlIGlkZW50aXR5IHR3aWNlXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXHRwcl9pbmZvKFwiU3RhcnRlZCBpbiBuZXR3b3JrIG1vZGVcXG5cIik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDApO1xuIFxuIFx0aWYgKG5vZGVfaWQpXG4gXHRcdHRpcGNfc2V0X25vZGVfaWQobmV0LCBub2RlX2lkKTtcbkBAIC0xMjUsOCArMTI4LDggQEAgaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpXG4gXG4gc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiB7XG4tXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrID0gezAsIGFkZHJ9O1xuK1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY191YWRkciB1YTtcbiBcbiBcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxuQEAgLTEzOCw3ICsxNDEsMTEgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiBcdHRpcGNfbmFtZWRfcmVpbml0KG5ldCk7XG4gXHR0aXBjX3NrX3JlaW5pdChuZXQpO1xuIFx0dGlwY19tb25fcmVpbml0X3NlbGYobmV0KTtcbi1cdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBhZGRyKTtcbitcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMSk7XG4rXHQvKiBSZWRpc3RyaWJ1dGUgYnVsayBvZiBwdWJsaWNhdGlvbnMgdmlhIG5vZGUtdXAgZXZlbnQgb3Igbm9kZSdzIHRpbWVyXG4rXHQgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLlxuK1x0ICovXG4rXHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgYWRkciwgTlVMTCk7XG4gfVxuIFxuIHZvaWQgdGlwY19uZXRfZmluYWxpemVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5jIGIvbmV0L3RpcGMvbm9kZS5jXG5pbmRleCA2ODNhMTM2ZTUzZWZjLi5jYTRhOGZjY2E2NDQ3IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbm9kZS5jXG4rKysgYi9uZXQvdGlwYy9ub2RlLmNcbkBAIC0xMTEsNiArMTExLDcgQEAgc3RydWN0IHRpcGNfYmNsaW5rX2VudHJ5IHtcbiAgKiBAcGVlcl9uZXQ6IHBlZXIncyBuZXQgbmFtZXNwYWNlXG4gICogQHBlZXJfaGFzaF9taXg6IGhhc2ggZm9yIHRoaXMgcGVlciAoRklYTUUpXG4gICogQGNyeXB0b19yeDogUlggY3J5cHRvIGhhbmRsZXJcbisgKiBAZGlzdF9idWxrOiBmbGFnIHRvIHJlZGlzdHJpYnV0ZSBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9uc1xuICAqL1xuIHN0cnVjdCB0aXBjX25vZGUge1xuIFx0dTMyIGFkZHI7XG5AQCAtMTQ1LDYgKzE0Niw3IEBAIHN0cnVjdCB0aXBjX25vZGUge1xuICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE9cbiBcdHN0cnVjdCB0aXBjX2NyeXB0byAqY3J5cHRvX3J4O1xuICNlbmRpZlxuK1x0YXRvbWljX3QgZGlzdF9idWxrO1xuIH07XG4gXG4gLyogTm9kZSBGU00gc3RhdGVzIGFuZCBldmVudHM6XG5AQCAtMzQ1LDYgKzM0NywxNSBAQCBzdGF0aWMgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiBcdHJldHVybiBub2RlO1xuIH1cbiBcbit2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4re1xuK1x0c3RydWN0IHRpcGNfbm9kZSAqbm9kZTtcbitcbitcdG5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGFkZHIpO1xuK1x0aWYgKG5vZGUpXG4rXHRcdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VkaXN0X2J1bGssIDEpO1xuK31cbitcbiAvKiB0aXBjX25vZGVfZmluZF9ieV9pZCAtIGxvY2F0ZSBzcGVjaWZpZWQgbm9kZSBvYmplY3QgYnkgaXRzIDEyOC1iaXQgaWRcbiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWRcbiAgKiB0byBmaW5kIHRoZSBub2RlIGJ5IGl0cyAzMi1iaXQgaWQsIGFuZCBpcyBub3QgdGltZSBjcml0aWNhbFxuQEAgLTM5Myw2ICs0MDQsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9ja19mYXN0KHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bi1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbilcbit7XG4rXHRpbnQgYmVhcmVyX2lkO1xuK1xuK1x0Zm9yIChiZWFyZXJfaWQgPSAwOyBiZWFyZXJfaWQgXHUwMDNjIE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQrKylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0X19yZWxlYXNlcyhuLVx1MDAzZWxvY2spXG4ge1xuQEAgLTQwMiw2ICs0MjEsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpwdWJsX2xpc3Q7XG4gXHRzdHJ1Y3QgdGlwY191YWRkciB1YTtcbiBcdHUzMiBiZWFyZXJfaWQsIG5vZGU7XG4rXHRpbnQgcmMgPSAwLCBlcnIgPSAwO1xuIFxuIFx0aWYgKGxpa2VseSghZmxhZ3MpKSB7XG4gXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuQEAgLTQyNSwxNiArNDQ1LDI0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdFx0dGlwY19wdWJsX25vdGlmeShuZXQsIHB1YmxfbGlzdCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9OT0RFX1VQKVxuLVx0XHR0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4rXHRcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX1VQKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpO1xuLVx0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbitcdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZiwgXHUwMDI2ZXJyKTtcbiBcdH1cbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTElOS19ET1dOKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4gXHRcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbiBcdH1cbitcbitcdC8qIE1lbW9yeSBhbGxvY2F0aW9uIGhhcyBmYWlsZWQuIEJyaW5nIHRoZSBub2RlIGRvd24gdG8gc3RhcnQgb3ZlciBidWxrXG4rXHQgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHR0aXBjX25vZGVfZG93bihuKTtcbitcdGVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX2Fzc2lnbl9wZWVyX25ldChzdHJ1Y3QgdGlwY19ub2RlICpuLCB1MzIgaGFzaF9taXhlcylcbkBAIC01NjQsNiArNTkyLDcgQEAgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLCB1OCAqcGVlcl9pZCxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXB1YmxfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZWNvbm5fc2tzKTtcbitcdGF0b21pY19zZXQoXHUwMDI2bi1cdTAwM2VkaXN0X2J1bGssIDApO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5Lm5hbWVkcSk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkuaW5wdXRxMSk7XG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5hcnJ2cSk7XG5AQCAtODAzLDcgKzgzMiw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0c3RydWN0IHRpcGNfbm9kZSAqbiA9IHRpbWVyX2NvbnRhaW5lcl9vZihuLCB0LCB0aW1lcik7XG4gXHRzdHJ1Y3QgdGlwY19saW5rX2VudHJ5ICpsZTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7XG4tXHRpbnQgcmVtYWlucyA9IG4tXHUwMDNlbGlua19jbnQ7XG4rXHRpbnQgcmVtYWlucyA9IDA7XG4rXHRpbnQgZGlzdF9yYyA9IDA7XG4gXHRpbnQgYmVhcmVyX2lkO1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC04MTQsNiArODQ0LDkgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCkpXG4rXHRcdGRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi1cdTAwM2VuZXQsIG4tXHUwMDNlYWRkcik7XG4rXG4gI2lmZGVmIENPTkZJR19USVBDX0NSWVBUT1xuIFx0LyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi9cbiBcdHRpcGNfY3J5cHRvX3RpbWVvdXQobi1cdTAwM2VjcnlwdG9fcngpO1xuQEAgLTgyNSw2ICs4NTgsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdCAqL1xuIFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbiBcdG4tXHUwMDNla2VlcGFsaXZlX2ludHYgPSAxMDAwMDtcbitcdHJlbWFpbnMgPSBuLVx1MDAzZWxpbmtfY250O1xuIFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0Zm9yIChiZWFyZXJfaWQgPSAwOyByZW1haW5zIFx1MDAyNlx1MDAyNiAoYmVhcmVyX2lkIFx1MDAzYyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCsrKSB7XG4gXHRcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XG5AQCAtODM1LDExICs4NjksMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdFx0dGlwY19ub2RlX2NhbGN1bGF0ZV90aW1lcihuLCBsZS1cdTAwM2VsaW5rKTtcbiBcdFx0XHRyYyA9IHRpcGNfbGlua190aW1lb3V0KGxlLVx1MDAzZWxpbmssIFx1MDAyNnhtaXRxKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsZS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRyZW1haW5zLS07XG4rXHRcdFx0aWYgKGRpc3RfcmMgIT0gLUVOT0JVRlMpXG4rXHRcdFx0XHRyZW1haW5zLS07XG4gXHRcdH1cbiBcdFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0XHR0aXBjX2JlYXJlcl94bWl0KG4tXHUwMDNlbmV0LCBiZWFyZXJfaWQsIFx1MDAyNnhtaXRxLCBcdTAwMjZsZS1cdTAwM2VtYWRkciwgbik7XG4tXHRcdGlmIChyYyBcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxuK1x0XHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xuK1x0XHRpZiAoKHJjIFx1MDAyNiBUSVBDX0xJTktfRE9XTl9FVlQpIHx8IChkaXN0X3JjID09IC1FTk9CVUZTKSlcbiBcdFx0XHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xuIFx0fVxuIFx0bW9kX3RpbWVyKFx1MDAyNm4tXHUwMDNldGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG4tXHUwMDNla2VlcGFsaXZlX2ludHYpKTtcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmhcbmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9ub2RlLmhcbisrKyBiL25ldC90aXBjL25vZGUuaFxuQEAgLTEyOCw0ICsxMjgsNSBAQCBpbnQgdGlwY19ubF9ub2RlX3NldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gaW50IHRpcGNfbmxfbm9kZV9mbHVzaF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gI2VuZGlmXG4gdm9pZCB0aXBjX25vZGVfcHJlX2NsZWFudXBfbmV0KHN0cnVjdCBuZXQgKmV4aXRfbmV0KTtcbit2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC90aXBjL3NvY2tldC5jIGIvbmV0L3RpcGMvc29ja2V0LmNcbmluZGV4IGQ1ZDcwZWIyMzBiNTYuLjZiODNiZGZjNDM5YzMgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9zb2NrZXQuY1xuKysrIGIvbmV0L3RpcGMvc29ja2V0LmNcbkBAIC0yOTE5LDcgKzI5MTksNyBAQCBzdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbiBcdFx0cmV0dXJuIC1FQUREUklOVVNFO1xuIFx0c2thZGRyLnJlZiA9IHRzay1cdTAwM2Vwb3J0aWQ7XG4gXHRza2FkZHIubm9kZSA9IHRpcGNfb3duX2FkZHIobmV0KTtcbi1cdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcdTAwMjZza2FkZHIsIGtleSk7XG4rXHRwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgXHUwMDI2c2thZGRyLCBrZXksIE5VTEwpO1xuIFx0aWYgKHVubGlrZWx5KCFwKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMzo1NDoyMC4xMDAxMDU2NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTk1MTQ2MjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIHRoZSBMaW51eCBrZXJuZWwncyBUSVBDIChUcmFuc3BhcmVudCBJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pIHN1YnN5c3RlbS4gTG9va3MgbGlrZSBpdCB0b3VjaGVzIGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgdGhlIGNvcmUsIGhpdHRpbmcgYSBidW5jaCBvZiBmaWxlczogYGNvcmUuYy9oYCwgYG5hbWVfZGlzdHIuYy9oYCwgYG5hbWVfdGFibGUuYy9oYCwgYG5ldC5jYCwgYG5vZGUuYy9oYCwgYW5kIGBzb2NrZXQuY2AuIENsZWFybHksIHRoaXMgaXMgYSBkZWVwIGRpdmUgaW50byBUSVBDJ3MgaW50ZXJuYWxzLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKGAtRU5PQlVGU2ApIHdpdGhpbiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCBhbmQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYC4gU21hcnQgbW92ZS4gVGhvc2Uga2luZHMgb2YgZXJyb3JzIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBzaWRlIGVmZmVjdHMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5IGluIGEgY29tbXVuaWNhdGlvbiBzeXN0ZW0uIFBsdXMsIEkgc2VlIHNvbWUgbmV3IGZsYWdzIGJlaW5nIGFkZGVkIHRvIGB0aXBjX25ldGAgYW5kIGB0aXBjX25vZGVgLCB3aGljaCBpcyBvZnRlbiBhbiBpbmRpY2F0b3Igb2YgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBUSVBDIGNvcmUgbG9naWMgaXRzZWxmLlxuXG5HaXZlbiB0aGF0IFRJUEMgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgc29ja2V0IEFQSSAoYEFGX1RJUENgKSwgdGhpcyBpcyBhIGNsZWFyIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIHJlYWxseSBmb2N1cyBvbiBhcmVhcyB3aGVyZSB0aGVzZSBuZXcgZXJyb3ItaGFuZGxpbmcgcGF0aHMgY29tZSBpbnRvIHBsYXkuIExldCdzIHNlZS4uLiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQgYXJlOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYF9fdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AsIGB0aXBjX25vZGVfdGltZW91dGAsIGB0aXBjX25vZGVfd3JpdGVfdW5sb2NrYCwgYW5kIGB0aXBjX25ldF9maW5hbGl6ZWAuIEknbGwgd2FudCB0byB0YXJnZXQgdGhlc2UgZnVuY3Rpb25zLlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgKGBuZXQvdGlwYy9LY29uZmlnYCkgdG8gZW5zdXJlIHRoYXQgVElQQyBpcyBwcm9wZXJseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLlxuXG5BZnRlciB0aGF0LCBsZXQncyBhbHNvIGRvIGEgcXVpY2sgY29kZSBzZWFyY2ggdG8gdmVyaWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTU6NTIuMDUxNTcwOTMxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODc0MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUSVBDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvS2NvbmZpZy01LVxcbm5ldC90aXBjL0tjb25maWc6NjptZW51Y29uZmlnIFRJUENcXG5uZXQvdGlwYy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlRoZSBUSVBDIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0yMy1cXG5uZXQvdGlwYy9LY29uZmlnOjI0OmNvbmZpZyBUSVBDX01FRElBX0lCXFxubmV0L3RpcGMvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMjktXFx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cXG5uZXQvdGlwYy9LY29uZmlnOjMwOmNvbmZpZyBUSVBDX01FRElBX1VEUFxcbm5ldC90aXBjL0tjb25maWctMzEtXFx0Ym9vbCBcXFwiSVAvVURQIG1lZGlhIHR5cGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMzctXFxubmV0L3RpcGMvS2NvbmZpZzozODpjb25maWcgVElQQ19DUllQVE9cXG5uZXQvdGlwYy9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlRJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy01Mi1cXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcXG5uZXQvdGlwYy9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCJUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU1OjUyLjA5ODQ0NzIxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NTcwMzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBUSVBDIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgYFRJUENgIGNvbmZpZyBpcyB0aGUgY29yZSwgdGhlIGNlbnRyYWwgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBwaWVjZXMgb2YgdGhlIHN5c3RlbSBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciB0aGlzIHRoaW5nIHRvIHdvcmsuIE15IG5leHQgbW92ZSBpcyB0byBjaGVjayB0aGUgYG5ldC90aXBjL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdHlwaWNhbCBwbGFjZSBmb3IgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGRldGFpbHMsIGVzcGVjaWFsbHkgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIG91dCB3aGF0IG90aGVyIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIG9yIHdoYXQgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCBmb3IgYFRJUENgIHRvIGJlIHJlbGV2YW50IG9yIGV2ZW4gYnVpbGRhYmxlLiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIHRoYXQgS2NvbmZpZyBmaWxlIGhvbGRzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY3NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU1OjU1LjM2NDE1MjYzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVElQQyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgVElQQ1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBUSVBDIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoZSBUcmFuc3BhcmVudCBJbnRlciBQcm9jZXNzIENvbW11bmljYXRpb24gKFRJUEMpIHByb3RvY29sIGlzXFxuICAxMTpcXHRcXHQgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sXFxuICAxMjpcXHRcXHQgIG9yaWdpbmF0ZXMgZnJvbSBFcmljc3NvbiB3aGVyZSBpdCBoYXMgYmVlbiB1c2VkIGluIGNhcnJpZXIgZ3JhZGVcXG4gIDEzOlxcdFxcdCAgY2x1c3RlciBhcHBsaWNhdGlvbnMgZm9yIG1hbnkgeWVhcnMuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUaGlzIHByb3RvY29sIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2hcXG4gIDE4OlxcdFxcdCAgY2FuIGJlIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdVxcbiAgMTk6XFx0XFx0ICB3YW50KS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aXBjLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0XFxuICAyMDpcXHRcXHQgIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XFx1MDAzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTU6NTUuMzY0MjA4ODkzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwNDQxMjI1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRJUEMgRGVwZW5kZW5jaWVzIGFuZCBDb3JlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCB0b3VjaGVzIHRoZSBUSVBDIHN1YnN5c3RlbSwgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBUSVBDIGRlcGVuZHMgb24gSU5FVC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIGEgcmVzdWx0IG9mIHRoZXNlIGNoYW5nZXMuIE15IGZpcnN0IHBhc3Mgc2hvd3MgdGhlc2U6IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCwgYW5kIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBzaW5jZSB0aG9zZSBhcmUgdGhlIG9uZXMgSSBzaG91bGQgcmVhbGx5IGZvY3VzIG9uLiBJJ20gc2VlaW5nIGZyb20gYG5ldC90aXBjL25hbWVfZGlzdHIuY2AgdGhhdCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAgYXJlIGluZGVlZCBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gIFNpbWlsYXJseSwgZnJvbSBgbmV0L3RpcGMvbmFtZV90YWJsZS5jYCwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhcmUgbm9uLXN0YXRpYy4gIEZpbmFsbHksIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AgbG9va3MgZ29vZCwgZnJvbSBgbmV0L3RpcGMvbm9kZS5jYC5cblxuSSdtIG5vdGluZyB0aGF0IHRoZXJlIGFyZSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMgbGlrZSBgdGlwY19uZXRfaW5pdGAsIGB0aXBjX25ldF9maW5hbGl6ZWAsIGB0aXBjX25vZGVfdGltZW91dGAsIGFuZCBgdGlwY19ub2RlX3dyaXRlX3VubG9ja2AsIGJ1dCB0aG9zZSBhcHBlYXIgdG8gYmUgZWl0aGVyIG1vcmUgZ2VuZXJpYyBvciwgaW4gdGhlIGNhc2Ugb2YgYHRpcGNfbm9kZV90aW1lb3V0YCwgYHRpcGNfbm9kZV93cml0ZV91bmxvY2tgIGFuZCBgdGlwY19uZXRfZmluYWxpemVgLCBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGRlLXByaW9yaXRpemUgdGhlbS4gVGhlIG1haW4gY2FuZGlkYXRlcyBmb3IgY2xvc2VyIGluc3BlY3Rpb24gYXJlIHRoZSBmdW5jdGlvbnMgSSBsaXN0ZWQgYmVmb3JlLlxuXG5Pa2F5LCBsZXQncyBkb3VibGUtY2hlY2sgdGhvc2UgXCJGb2N1c1N5bWJvbHNcIi4gSSdtIGNvbmZpcm1pbmcgdGhhdCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCBpcyBkZWZpbmVkIGluIGBuYW1lX2Rpc3RyLmhgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGlzIGFsc28gaW4gYG5hbWVfdGFibGUuaGAsIGFuZCBgdGlwY19ub2RlX3NldF9kaXN0X2J1bGtgIGlzIGluIGBub2RlLmhgLiAgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBpcyBhbHNvIGluIGBuYW1lX3RhYmxlLmhgLiBJIG5lZWQgdG8gZW5zdXJlIHRob3NlIGhlYWRlcnMgYXJlIGNvcnJlY3RseSBpbmNsdWRlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gdG8gZW5zdXJlIHRoaXMgaXMgVElQQyByZWxhdGVkLCB3aGljaCBpdCBsb29rcyBsaWtlLlxuXG5TbyBteSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBUSVBDIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgc3BlY2lmaWNhbGx5IGAtRU5PQlVGU2AsIGR1cmluZyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIFRoaXMgaW50cm9kdWNlcyBzdGF0ZSBmbGFncyBhbmQgbW9kaWZpZXMgbm9kZSB0aW1lb3V0IGFuZCB1bmxvY2sgbG9naWMgdG8gZGVhbCB3aXRoIHJlLWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlZCBwdWJsaWNhdGlvbnMgd2hlbiBhbGxvY2F0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVElQQyBsb2dpYyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBBRl9USVBDYCBzb2NrZXQgZmFtaWx5LlxuXG5JJ20gY29uZmlkZW50IGluIHRoZXNlIFwiRm9jdXNTeW1ib2xzXCIgbm93OiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGFuZCBgdGlwY19ub2RlX3NldF9kaXN0X2J1bGtgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgYFRJUENgLiBOb3cgSSBjYW4gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNzMsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MDYuNDA4MzM0NDg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQyNzAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiLFxuICAgIFwidGlwY19uYW1lZF9ub2RlX3VwXCIsXG4gICAgXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICAgIFwidGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJcIixcbiAgICBcInRpcGNfbm9kZV9zZXRfZGlzdF9idWxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIGZsYWdzIHRvIGB0aXBjX25ldGAgYW5kIGB0aXBjX25vZGVgIGFuZCBtb2RpZmllcyB0aGUgbm9kZSB0aW1lb3V0IGFuZCB1bmxvY2sgbG9naWMgdG8gaGFuZGxlIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgVElQQyBsb2dpYywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBmYW1pbHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiLFxuICAgIFwidGlwY19uYW1lZF9ub2RlX3VwXCIsXG4gICAgXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICAgIFwidGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJcIixcbiAgICBcInRpcGNfbm9kZV9zZXRfZGlzdF9idWxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIGZsYWdzIHRvIGB0aXBjX25ldGAgYW5kIGB0aXBjX25vZGVgIGFuZCBtb2RpZmllcyB0aGUgbm9kZSB0aW1lb3V0IGFuZCB1bmxvY2sgbG9naWMgdG8gaGFuZGxlIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgVElQQyBsb2dpYywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBmYW1pbHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjA2LjQ4Nzc2ODk3NloiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY2MDgxMDYyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjA2LjQ4ODM3MzU3NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NTY2MDIwMjQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA2ODdlMTQ1OWVlNzMxYTBkNjMyYjU2NTkwZWY3MGExMTdlMzgxNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwMzo1NDoxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuY1xuaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuY1xuKysrIGIvbmV0L3RpcGMvY29yZS5jXG5AQCAtNjEsNiArNjEsOSBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgdGlwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHR0bi1cdTAwM2V0cmlhbF9hZGRyID0gMDtcbiBcdHRuLVx1MDAzZWFkZHJfdHJpYWxfZW5kID0gMDtcbiBcdHRuLVx1MDAzZWNhcGFiaWxpdGllcyA9IFRJUENfTk9ERV9DQVBBQklMSVRJRVM7XG4rXHR0bi1cdTAwM2VudF9zdG9wID0gZmFsc2U7XG4rXHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcbitcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XG4gXHRJTklUX1dPUksoXHUwMDI2dG4tXHUwMDNld29yaywgdGlwY19uZXRfZmluYWxpemVfd29yayk7XG4gXHRtZW1zZXQodG4tXHUwMDNlbm9kZV9pZCwgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWQpKTtcbiBcdG1lbXNldCh0bi1cdTAwM2Vub2RlX2lkX3N0cmluZywgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWRfc3RyaW5nKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5oIGIvbmV0L3RpcGMvY29yZS5oXG5pbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvY29yZS5oXG4rKysgYi9uZXQvdGlwYy9jb3JlLmhcbkBAIC0xNDUsNiArMTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdC8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovXG4gXHRhdG9taWNfdCB3cV9jb3VudDtcbitcdC8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSdzIGFkZHJlc3MgaXMgc2V0ICovXG4rXHRhdG9taWNfdCBub2RlX2FkZHJfc2V0O1xuK1x0LyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqL1xuK1x0Ym9vbCBudF9zdG9wO1xuK1x0LyogTm9kZSdzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi9cbitcdGJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0O1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbmluZGV4IGJhNGY0OTA2ZTEzYjcuLjA2MGM0MmQ4ZmRhNTQgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuY1xuQEAgLTk1LDkgKzk1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZW5vZGVfc2NvcGUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApO1xuIFx0aWYgKCFza2IpIHtcbiBcdFx0cHJfd2FybihcIlB1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXFxuXCIpO1xuQEAgLTEyMSw5ICsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdHN0cnVjdCBkaXN0cl9pdGVtICppdGVtO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbi1cdHdyaXRlX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0aWYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19OT0RFX1NDT1BFKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0xNDYsOSArMTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuICAqIEBkbm9kZTogbm9kZSB0byBiZSB1cGRhdGVkXG4gICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluXG4gICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZVxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4rICpcbiAgKi9cbi1zdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi1cdFx0XHQgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4rc3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbitcdFx0XHQgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubylcbiB7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbkBAIC0xNjQsOCArMTY1LDkgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gXHRcdFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSxcbiBcdFx0XHRcdFx0XHRkbm9kZSk7XG4gXHRcdFx0aWYgKCFza2IpIHtcbitcdFx0XHRcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xuIFx0XHRcdFx0cHJfd2FybihcIkJ1bGsgcHVibGljYXRpb24gZmFpbHVyZVxcblwiKTtcbi1cdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcdFx0XHR9XG4gXHRcdFx0aGRyID0gYnVmX21zZyhza2IpO1xuIFx0XHRcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTtcbkBAIC0xOTUsNiArMTk3LDgyIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuIFx0aGRyID0gYnVmX21zZyhza2JfcGVla190YWlsKGxpc3QpKTtcbiBcdG1zZ19zZXRfbGFzdF9idWxrKGhkcik7XG4gXHRtc2dfc2V0X25hbWVkX3NlcW5vKGhkciwgc2Vxbm8pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIF9fdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gYnVpbGQgYSBsaXN0IG9mIHB1YmxpY2F0aW9ucyBuZWVkIHRvIGJlIGRpc3RyaWJ1dGVkXG4rICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbisgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbisgKiBAaGVhZDogbGlzdCBvZiBwdWJsaWNhdGlvbnNcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4rc3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcbitcdC8qIE5hbWUgdGFibGUgaGFzIGJlZW4gZGVsZXRlZCBhZnRlciBuYW1lc3BhY2UgdGVhcmRvd24gb3JcbitcdCAqIFRJUEMgbW9kdWxlIGV4aXQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseSh0bi1cdTAwM2VudF9zdG9wKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBOb2RlJ3Mgc2VsZiBhZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovXG4rXHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQpKSB7XG4rXHRcdC8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSdzIHRpbWVyICovXG4rXHRcdHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKG5ldCwgZG5vZGUpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICh0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QpXG4rXHRcdGdvdG8gZGlzdHJpYnV0ZTtcbitcbitcdGlmICh0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihuZXQpKVxuK1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXG4rXHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSB0cnVlO1xuK1xuK2Rpc3RyaWJ1dGU6XG4rXHRpZiAobmFtZWRfZGlzdHJpYnV0ZShuZXQsIGhlYWQsIGRub2RlLFxuK1x0XHRcdCAgICAgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgbnQtXHUwMDNlc25kX254dCkgPT0gLUVOT0JVRlMpXG4rXHRcdHJldHVybiAtRU5PQlVGUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBkaXN0cmlidXRlIGFsbCBwdWJsaWNhdGlvbnMgdG8gc3BlY2lmaWVkIG5vZGVcbisgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuKyAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4rICpcbisgKi9cbitpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKVxuK3tcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xuK1x0aW50IHJjID0gMDtcbitcbitcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZoZWFkKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuK1x0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcdTAwMjZoZWFkKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAoIXJjIFx1MDAyNlx1MDAyNiAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmhlYWQpKSB7XG4rXHRcdGlmICh0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKSA9PSAtRU5PQlVGUylcbitcdFx0XHRyYyA9IC1FTk9CVUZTO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiAvKipcbkBAIC0yMDIsMjUgKzI4MCwzMiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuICAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxuICAqIEBjYXBhYmlsaXRpZXM6IHBlZXIgbm9kZSdzIGNhcGFiaWxpdGllc1xuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4rICpcbiAgKi9cbi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbitpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxuIHtcbiBcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xuIFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7XG4tXHR1MTYgc2Vxbm87XG4rXHRpbnQgcmMgPSAwO1xuIFxuIFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmhlYWQpO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gXHRpZiAoIShjYXBhYmlsaXRpZXMgXHUwMDI2IFRJUENfTkFNRURfQkNBU1QpKVxuIFx0XHRudC1cdTAwM2VyY19kZXN0cysrO1xuLVx0c2Vxbm8gPSBudC1cdTAwM2VzbmRfbnh0O1xuK1xuK1x0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcdTAwMjZoZWFkKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAoIXJjIFx1MDAyNlx1MDAyNiAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmhlYWQpKSB7XG4rXHRcdGlmICh0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKSA9PSAtRU5PQlVGUylcbitcdFx0XHRyYyA9IC1FTk9CVUZTO1xuK1x0fVxuIFxuLVx0cmVhZF9sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4tXHRuYW1lZF9kaXN0cmlidXRlKG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIHNlcW5vKTtcbi1cdHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIDApO1xuLVx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbitcdHJldHVybiByYztcbiB9XG4gXG4gLyoqXG5AQCAtNDE2LDUgKzUwMSw2IEBAIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgYmluZGluZ19ub2RlKVxuIFx0XHRwLVx1MDAzZXNrLm5vZGUgPSBzZWxmO1xuIFx0bnQtXHUwMDNlcmNfZGVzdHMgPSAwO1xuK1x0dG4tXHUwMDNlbnRfc3RvcCA9IGZhbHNlO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5oIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5pbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG4rKysgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmhcbkBAIC02OSwxMSArNjksMTIgQEAgc3RydWN0IGRpc3RyX2l0ZW0ge1xuIFxuIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpO1xuIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcbi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7XG4raW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7XG4gdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcbiBcdFx0ICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7XG4gdm9pZCB0aXBjX25hbWVkX3JlaW5pdChzdHJ1Y3QgbmV0ICpuZXQpO1xuIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCxcbiBcdFx0ICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpO1xuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpO1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuaW5kZXggMjUzYzcyZDEzNjZlYi4uM2JiMGNlNzgzZGJkZiAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuY1xuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jXG5AQCAtMzI5LDcgKzMyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYyxcbiBcbiBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYyxcbi1cdFx0XHRcdCAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wO1xuIFx0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xuQEAgLTMzOSwxMCArMzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRib29sIHJlcyA9IGZhbHNlO1xuIFx0dTMyIGtleSA9IHAtXHUwMDNla2V5O1xuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuIFx0c3IgPSB0aXBjX3NlcnZpY2VfY3JlYXRlX3JhbmdlKHNjLCBwKTtcbi1cdGlmICghc3IpXG4rXHRpZiAoIXNyKSB7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0XHRnb3RvICBleGl0O1xuK1x0fVxuIFxuIFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFx1MDAyNnNyLVx1MDAzZWFsbF9wdWJsKTtcbiBcbkBAIC0zNTMsNiArMzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBiaW5kIGR1cGxpY2F0ZSAldSwldSwldS8ldToldS8ldVxcblwiLFxuIFx0XHRcdFx0IHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcixcbiBcdFx0XHRcdCBub2RlLCBwLVx1MDAzZXNrLnJlZiwga2V5KTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0KmVyciA9IC1FRVhJU1Q7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4gXHR9XG5AQCAtMzcxLDcgKzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoIXJlcylcbiBcdFx0cHJfd2FybihcIkZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxuXCIsXG4gXHRcdFx0cC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyKTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG5AQCAtNDkwLDggKzQ5MywxMiBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRzYyA9IHRpcGNfc2VydmljZV9maW5kKG5ldCwgdWEpO1xuIFx0aWYgKCFzYylcbiBcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgdWEpO1xuLVx0aWYgKHNjIFx1MDAyNlx1MDAyNiB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCkpXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHRpZiAoc2MgXHUwMDI2XHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCBOVUxMKSkge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdFx0cmV0dXJuIHA7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdGtmcmVlKHApO1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTc2MCwyNCArNzY3LDQ0IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcbiAvKiB0aXBjX25hbWV0YmxfcHVibGlzaCAtIGFkZCBzZXJ2aWNlIGJpbmRpbmcgdG8gbmFtZSB0YWJsZVxuICAqL1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuK1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXG4rXHRpZiAodWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHxcbitcdCAgICB1YS1cdTAwM2Vzci50eXBlID09IFRJUENfVE9QX1NSVilcbitcdFx0cHJvdG9jb2xfdHlwZSA9IHRydWU7XG4rXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmIChwcm90b2NvbF90eXBlKVxuK1x0XHRnb3RvIGluc2VydDtcbiBcbi1cdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gVElQQ19NQVhfUFVCTCkge1xuLVx0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIFRJUENfTUFYX1BVQkwpO1xuK1x0LyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXJcbitcdCAqIHNjb3BlIGFuZCBpdCBpcyBkaXN0cmlidXRlZCBpbiBidWxrLiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXInc1xuK1x0ICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuXG4rXHQgKi9cbitcdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gbWF4X3VzZXJfcHViKSB7XG4rXHRcdHByX3dhcm4oXCJCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXG5cIiwgbWF4X3VzZXJfcHViKTtcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFxuK2luc2VydDpcbiBcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4rXHRcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcbitcdFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxuK1x0XHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxuK1x0XHQgKiB0YWJsZS5cbitcdFx0ICovXG4rXHRcdGlmICghcHJvdG9jb2xfdHlwZSlcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xuIFx0fVxuIFx0cmNfZGVzdHMgPSBudC1cdTAwM2VyY19kZXN0cztcbkBAIC03ODYsOCArODEzLDgxIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRpZiAoc2tiKVxuIFx0XHR0aXBjX25vZGVfYnJvYWRjYXN0KG5ldCwgc2tiLCByY19kZXN0cyk7XG4rXHRlbHNlIGlmIChwIFx1MDAyNlx1MDAyNiAocC1cdTAwM2VzY29wZSA9PSBUSVBDX0NMVVNURVJfU0NPUEUpIFx1MDAyNlx1MDAyNiBlcnIpXG4rXHRcdCplcnIgPSAtRU5PQlVGUztcbiBcdHJldHVybiBwO1xuK31cbitcbisvKipcbisgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJ3Mgc2VsZiBhZGRyZXNzXG4rICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1x0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XG4rXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7XG4rXHRzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYztcbitcdGJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuK1x0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdHNrLnJlZiA9IDA7XG4rXHRzay5ub2RlID0gdG4tXHUwMDNlbm9kZV9hZGRyO1xuK1x0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG4rXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuK1x0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIFx1MDAyNnVhKTtcbitcdGlmICghc2MpIHtcbitcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgXHUwMDI2dWEpO1xuK1x0XHRpZiAoIXNjKVxuK1x0XHRcdHJldHVybiAtRU5PQlVGUztcbitcdFx0c2NfY3JlYXRlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHRzciA9IHRpcGNfc2VydmljZV9maW5kX3JhbmdlKHNjLCBcdTAwMjZ1YSk7XG4rXHQvKiAxLiB0aXBjX25ldF9maW5hbGl6ZV93b3JrKCkgaXMgbm90IHNjaGVkdWxlZCBiZWNhdXNlIG9mIG5hbWVzcGFjZVxuK1x0ICogICAgdGVhcmRvd24uXG4rXHQgKiAyLiBPciB0aXBjX25ldF9maW5hbGl6ZSgpIC0tLVx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBmYWlsZWRcbitcdCAqICAgIHRvIGluc2VydCBub2RlIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpbnRvIG50LVx1MDAzZWNsdXN0ZXJfc2NvcGVcbitcdCAqICAgIGR1ZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuK1x0ICogMy4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgbm90XG4rXHQgKiAgICBleGVjdXRlZCB5ZXQuXG4rXHQgKi9cbitcdGlmICghc3IpIHtcbitcdFx0cCA9IHRpcGNfcHVibF9jcmVhdGUoXHUwMDI2dWEsIFx1MDAyNnNrLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuK1x0XHRpZiAoIXApXG4rXHRcdFx0Z290byBlcnJvcjtcbiBcbitcdFx0aWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgXHUwMDI2ZXJyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChlcnIgPT0gLUVOT0JVRlMpKSB7XG4rXHRcdFx0a2ZyZWUocCk7XG4rXHRcdFx0Z290byBlcnJvcjtcbitcdFx0fVxuK1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlLCBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbitcdFx0Z290byBleGl0O1xuK2Vycm9yOlxuK1x0XHRpZiAoc2NfY3JlYXRlZCkge1xuK1x0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZzYy1cdTAwM2VzZXJ2aWNlX2xpc3QpO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRcdGtmcmVlX3JjdShzYywgcmN1KTtcbitcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXHRcdH1cbitcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRU5PQlVGUztcbitcdH1cbitleGl0OlxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtODEwLDcgKzkxMCwxMCBAQCB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcbiBcdHAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4rXHRcdGlmIChwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcC1cdTAwM2Vzci50eXBlICE9IFRJUENfTElOS19TVEFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXG4rXHRcdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuIFx0XHRza2IgPSB0aXBjX25hbWVkX3dpdGhkcmF3KG5ldCwgcCk7XG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX3NvY2spO1xuIFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbkBAIC04OTksNyArMTAwMiw2IEBAIGludCB0aXBjX25hbWV0YmxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZudC1cdTAwM2Vub2RlX3Njb3BlKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0cndsb2NrX2luaXQoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdHRuLVx1MDAzZW5hbWV0YmwgPSBudDtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gXHRyZXR1cm4gMDtcbkBAIC05MTksNiArMTAyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcbiBcdHJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShzciwgdG1wciwgXHUwMDI2c2MtXHUwMDNlcmFuZ2VzLCB0cmVlX25vZGUpIHtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgXHUwMDI2c3ItXHUwMDNlYWxsX3B1YmwsIGFsbF9wdWJsKSB7XG4gXHRcdFx0dGlwY19zZXJ2aWNlX3JlbW92ZV9wdWJsKHNyLCBcdTAwMjZwLVx1MDAzZXNrLCBwLVx1MDAzZWtleSk7XG4rXHRcdFx0bGlzdF9kZWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUpO1xuIFx0XHRcdGtmcmVlX3JjdShwLCByY3UpO1xuIFx0XHR9XG4gXHRcdHJiX2VyYXNlX2F1Z21lbnRlZChcdTAwMjZzci1cdTAwM2V0cmVlX25vZGUsIFx1MDAyNnNjLVx1MDAzZXJhbmdlcywgXHUwMDI2c3JfY2FsbGJhY2tzKTtcbkBAIC05NDksNiArMTA1Miw4IEBAIHZvaWQgdGlwY19uYW1ldGJsX3N0b3Aoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRcdHRpcGNfc2VydmljZV9kZWxldGUobmV0LCBzZXJ2aWNlKTtcbiBcdFx0fVxuIFx0fVxuK1x0dG4tXHUwMDNlbnRfc3RvcCA9IHRydWU7XG4rXHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gXG4gXHQvKiBUT0RPOiBjbGVhciB0bi1cdTAwM2VuYW1ldGJsLCBpbXBsZW1lbnQgcHJvcGVyIFJDVSBydWxlcyA/ICovXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5pbmRleCA3ZmY2ZWVlYmFhZTY0Li5lN2EyYzUwZjA5OWNmIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG4rKysgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmhcbkBAIC05Nyw3ICs5Nyw2IEBAIHN0cnVjdCBwdWJsaWNhdGlvbiB7XG4gICogQGNsdXN0ZXJfc2NvcGU6IGFsbCBsb2NhbCBwdWJsaWNhdGlvbnMgd2l0aCBjbHVzdGVyIHNjb3BlXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciB0byBzZW5kIGJ1bGsgdXBkYXRlcyB0byBuZXcgbm9kZXNcbiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIGR1cmluZyByZS1pbml0IG9mIG5hbWUgdGFibGVcbi0gKiBAY2x1c3Rlcl9zY29wZV9sb2NrOiBsb2NrIGZvciBhY2Nlc3NpbmcgQGNsdXN0ZXJfc2NvcGVcbiAgKiBAbG9jYWxfcHVibF9jb3VudDogbnVtYmVyIG9mIHB1YmxpY2F0aW9ucyBpc3N1ZWQgYnkgdGhpcyBub2RlXG4gICogQHJjX2Rlc3RzOiBkZXN0aW5hdGlvbiBub2RlIGNvdW50ZXJcbiAgKiBAc25kX254dDogbmV4dCBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgdXNlZFxuQEAgLTEwNyw3ICsxMDYsNiBAQCBzdHJ1Y3QgbmFtZV90YWJsZSB7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCBzZXJ2aWNlc1tUSVBDX05BTUVUQkxfU0laRV07XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGVfc2NvcGU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfc2NvcGU7XG4tXHRyd2xvY2tfdCBjbHVzdGVyX3Njb3BlX2xvY2s7XG4gXHR1MzIgbG9jYWxfcHVibF9jb3VudDtcbiBcdHUzMiByY19kZXN0cztcbiBcdHUzMiBzbmRfbnh0O1xuQEAgLTEyNiwxMyArMTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiB2b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG4gXHRcdFx0ICAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhKTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuLVx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbitcdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbitcdFx0XHRcdFx0IHUzMiBrZXksIGludCAqZXJyKTtcbiB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHQgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpO1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuIFx0XHRcdFx0XHQgICAgIHUzMiBrZXkpO1xuK2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpO1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25ldC5jIGIvbmV0L3RpcGMvbmV0LmNcbmluZGV4IDdlNjVkMGIwYzRhOGQuLjdhMmMxZTY3YWNhM2QgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uZXQuY1xuKysrIGIvbmV0L3RpcGMvbmV0LmNcbkBAIC0xMTAsMTEgKzExMCwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTtcbiBcbiBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcilcbiB7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcbiBcdGlmICh0aXBjX293bl9pZChuZXQpKSB7XG4gXHRcdHByX2luZm8oXCJDYW5ub3QgY29uZmlndXJlIG5vZGUgaWRlbnRpdHkgdHdpY2VcXG5cIik7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcdHByX2luZm8oXCJTdGFydGVkIGluIG5ldHdvcmsgbW9kZVxcblwiKTtcbitcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XG4gXG4gXHRpZiAobm9kZV9pZClcbiBcdFx0dGlwY19zZXRfbm9kZV9pZChuZXQsIG5vZGVfaWQpO1xuQEAgLTEyNSw4ICsxMjgsOCBAQCBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcilcbiBcbiBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuIHtcbi1cdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2sgPSB7MCwgYWRkcn07XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xuIFxuIFx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5AQCAtMTM4LDcgKzE0MSwxMSBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuIFx0dGlwY19uYW1lZF9yZWluaXQobmV0KTtcbiBcdHRpcGNfc2tfcmVpbml0KG5ldCk7XG4gXHR0aXBjX21vbl9yZWluaXRfc2VsZihuZXQpO1xuLVx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIGFkZHIpO1xuK1x0YXRvbWljX3NldChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0LCAxKTtcbitcdC8qIFJlZGlzdHJpYnV0ZSBidWxrIG9mIHB1YmxpY2F0aW9ucyB2aWEgbm9kZS11cCBldmVudCBvciBub2RlJ3MgdGltZXJcbitcdCAqIGlmIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgZmFpbHMuXG4rXHQgKi9cbitcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBhZGRyLCBOVUxMKTtcbiB9XG4gXG4gdm9pZCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmNcbmluZGV4IDY4M2ExMzZlNTNlZmMuLmNhNGE4ZmNjYTY0NDcgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9ub2RlLmNcbisrKyBiL25ldC90aXBjL25vZGUuY1xuQEAgLTExMSw2ICsxMTEsNyBAQCBzdHJ1Y3QgdGlwY19iY2xpbmtfZW50cnkge1xuICAqIEBwZWVyX25ldDogcGVlcidzIG5ldCBuYW1lc3BhY2VcbiAgKiBAcGVlcl9oYXNoX21peDogaGFzaCBmb3IgdGhpcyBwZWVyIChGSVhNRSlcbiAgKiBAY3J5cHRvX3J4OiBSWCBjcnlwdG8gaGFuZGxlclxuKyAqIEBkaXN0X2J1bGs6IGZsYWcgdG8gcmVkaXN0cmlidXRlIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zXG4gICovXG4gc3RydWN0IHRpcGNfbm9kZSB7XG4gXHR1MzIgYWRkcjtcbkBAIC0xNDUsNiArMTQ2LDcgQEAgc3RydWN0IHRpcGNfbm9kZSB7XG4gI2lmZGVmIENPTkZJR19USVBDX0NSWVBUT1xuIFx0c3RydWN0IHRpcGNfY3J5cHRvICpjcnlwdG9fcng7XG4gI2VuZGlmXG4rXHRhdG9taWNfdCBkaXN0X2J1bGs7XG4gfTtcbiBcbiAvKiBOb2RlIEZTTSBzdGF0ZXMgYW5kIGV2ZW50czpcbkBAIC0zNDUsNiArMzQ3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuIFx0cmV0dXJuIG5vZGU7XG4gfVxuIFxuK3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbit7XG4rXHRzdHJ1Y3QgdGlwY19ub2RlICpub2RlO1xuK1xuK1x0bm9kZSA9IHRpcGNfbm9kZV9maW5kKG5ldCwgYWRkcik7XG4rXHRpZiAobm9kZSlcbitcdFx0YXRvbWljX3NldChcdTAwMjZub2RlLVx1MDAzZWRpc3RfYnVsaywgMSk7XG4rfVxuK1xuIC8qIHRpcGNfbm9kZV9maW5kX2J5X2lkIC0gbG9jYXRlIHNwZWNpZmllZCBub2RlIG9iamVjdCBieSBpdHMgMTI4LWJpdCBpZFxuICAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgd2hlbiBhIGRpc2NvdmVyeSByZXF1ZXN0IGZhaWxlZFxuICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsXG5AQCAtMzkzLDYgKzQwNCwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0aXBjX25vZGVfZG93bihzdHJ1Y3QgdGlwY19ub2RlICpuKVxuK3tcbitcdGludCBiZWFyZXJfaWQ7XG4rXG4rXHRmb3IgKGJlYXJlcl9pZCA9IDA7IGJlYXJlcl9pZCBcdTAwM2MgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCsrKVxuK1x0XHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHRfX3JlbGVhc2VzKG4tXHUwMDNlbG9jaylcbiB7XG5AQCAtNDAyLDYgKzQyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKnB1YmxfbGlzdDtcbiBcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xuIFx0dTMyIGJlYXJlcl9pZCwgbm9kZTtcbitcdGludCByYyA9IDAsIGVyciA9IDA7XG4gXG4gXHRpZiAobGlrZWx5KCFmbGFncykpIHtcbiBcdFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm4tXHUwMDNlbG9jayk7XG5AQCAtNDI1LDE2ICs0NDUsMjQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0XHR0aXBjX3B1Ymxfbm90aWZ5KG5ldCwgcHVibF9saXN0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFRJUENfTk9USUZZX05PREVfVVApXG4tXHRcdHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tXHUwMDNlY2FwYWJpbGl0aWVzKTtcbitcdFx0cmMgPSB0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFRJUENfTk9USUZZX0xJTktfVVApIHtcbiBcdFx0dGlwY19tb25fcGVlcl91cChuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4tXHRcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBzay5yZWYpO1xuK1x0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmLCBcdTAwMjZlcnIpO1xuIFx0fVxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX0RPV04pIHtcbiBcdFx0dGlwY19tb25fcGVlcl9kb3duKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcbiBcdFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBzay5yZWYpO1xuIFx0fVxuK1xuK1x0LyogTWVtb3J5IGFsbG9jYXRpb24gaGFzIGZhaWxlZC4gQnJpbmcgdGhlIG5vZGUgZG93biB0byBzdGFydCBvdmVyIGJ1bGtcbitcdCAqIGRpc3RyaWJ1dGlvbiB3aGVuIHRoZSBmaXJzdCBsaW5rIGlzIHVwIGFnYWluLlxuK1x0ICovXG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdHRpcGNfbm9kZV9kb3duKG4pO1xuK1x0ZWxzZSBpZiAoZXJyID09IC1FTk9CVUZTKVxuK1x0XHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfYXNzaWduX3BlZXJfbmV0KHN0cnVjdCB0aXBjX25vZGUgKm4sIHUzMiBoYXNoX21peGVzKVxuQEAgLTU2NCw2ICs1OTIsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIsIHU4ICpwZWVyX2lkLFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bi1cdTAwM2VsaXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlcHVibF9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlY29ubl9za3MpO1xuK1x0YXRvbWljX3NldChcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkubmFtZWRxKTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5pbnB1dHExKTtcbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5LmFycnZxKTtcbkBAIC04MDMsNyArODMyLDggQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRzdHJ1Y3QgdGlwY19ub2RlICpuID0gdGltZXJfY29udGFpbmVyX29mKG4sIHQsIHRpbWVyKTtcbiBcdHN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCB4bWl0cTtcbi1cdGludCByZW1haW5zID0gbi1cdTAwM2VsaW5rX2NudDtcbitcdGludCByZW1haW5zID0gMDtcbitcdGludCBkaXN0X3JjID0gMDtcbiBcdGludCBiZWFyZXJfaWQ7XG4gXHRpbnQgcmMgPSAwO1xuIFxuQEAgLTgxNCw2ICs4NDQsOSBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuK1x0aWYgKGF0b21pY194Y2hnKFx1MDAyNm4tXHUwMDNlZGlzdF9idWxrLCAwKSlcbitcdFx0ZGlzdF9yYyA9IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShuLVx1MDAzZW5ldCwgbi1cdTAwM2VhZGRyKTtcbitcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXG4gXHQvKiBUYWtlIGFueSBjcnlwdG8ga2V5IHJlbGF0ZWQgYWN0aW9ucyBmaXJzdCAqL1xuIFx0dGlwY19jcnlwdG9fdGltZW91dChuLVx1MDAzZWNyeXB0b19yeCk7XG5AQCAtODI1LDYgKzg1OCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0ICovXG4gXHR0aXBjX25vZGVfcmVhZF9sb2NrKG4pO1xuIFx0bi1cdTAwM2VrZWVwYWxpdmVfaW50diA9IDEwMDAwO1xuK1x0cmVtYWlucyA9IG4tXHUwMDNlbGlua19jbnQ7XG4gXHR0aXBjX25vZGVfcmVhZF91bmxvY2sobik7XG4gXHRmb3IgKGJlYXJlcl9pZCA9IDA7IHJlbWFpbnMgXHUwMDI2XHUwMDI2IChiZWFyZXJfaWQgXHUwMDNjIE1BWF9CRUFSRVJTKTsgYmVhcmVyX2lkKyspIHtcbiBcdFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbkBAIC04MzUsMTEgKzg2OSwxMyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdFx0XHR0aXBjX25vZGVfY2FsY3VsYXRlX3RpbWVyKG4sIGxlLVx1MDAzZWxpbmspO1xuIFx0XHRcdHJjID0gdGlwY19saW5rX3RpbWVvdXQobGUtXHUwMDNlbGluaywgXHUwMDI2eG1pdHEpO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxlLVx1MDAzZWxvY2spO1xuLVx0XHRcdHJlbWFpbnMtLTtcbitcdFx0XHRpZiAoZGlzdF9yYyAhPSAtRU5PQlVGUylcbitcdFx0XHRcdHJlbWFpbnMtLTtcbiBcdFx0fVxuIFx0XHR0aXBjX25vZGVfcmVhZF91bmxvY2sobik7XG4gXHRcdHRpcGNfYmVhcmVyX3htaXQobi1cdTAwM2VuZXQsIGJlYXJlcl9pZCwgXHUwMDI2eG1pdHEsIFx1MDAyNmxlLVx1MDAzZW1hZGRyLCBuKTtcbi1cdFx0aWYgKHJjIFx1MDAyNiBUSVBDX0xJTktfRE9XTl9FVlQpXG4rXHRcdC8qIEZvcmNlIHRoZSBub2RlIGRvd24gaW4gY2FzZSB0aGUgcmVkaXN0cmlidXRpb24gZmFpbGVkICovXG4rXHRcdGlmICgocmMgXHUwMDI2IFRJUENfTElOS19ET1dOX0VWVCkgfHwgKGRpc3RfcmMgPT0gLUVOT0JVRlMpKVxuIFx0XHRcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XG4gXHR9XG4gXHRtb2RfdGltZXIoXHUwMDI2bi1cdTAwM2V0aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobi1cdTAwM2VrZWVwYWxpdmVfaW50dikpO1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuaCBiL25ldC90aXBjL25vZGUuaFxuaW5kZXggMTU0YTViYmIwZDI5ZC4uMGY3NzdjZmU3YzAxZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25vZGUuaFxuKysrIGIvbmV0L3RpcGMvbm9kZS5oXG5AQCAtMTI4LDQgKzEyOCw1IEBAIGludCB0aXBjX25sX25vZGVfc2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBpbnQgdGlwY19ubF9ub2RlX2ZsdXNoX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiAjZW5kaWZcbiB2b2lkIHRpcGNfbm9kZV9wcmVfY2xlYW51cF9uZXQoc3RydWN0IG5ldCAqZXhpdF9uZXQpO1xuK3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZDVkNzBlYjIzMGI1Ni4uNmI4M2JkZmM0MzljMyAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4rKysgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTI5MTksNyArMjkxOSw3IEBAIHN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKVxuIFx0XHRyZXR1cm4gLUVBRERSSU5VU0U7XG4gXHRza2FkZHIucmVmID0gdHNrLVx1MDAzZXBvcnRpZDtcbiBcdHNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpO1xuLVx0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5KTtcbitcdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcdTAwMjZza2FkZHIsIGtleSwgTlVMTCk7XG4gXHRpZiAodW5saWtlbHkoIXApKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjA2LjQ4ODM3NDIzNloiLCJTZXEiOjExLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTk4MTczNzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVElQQyBQYXRjaCBmb3IgTWVtb3J5IFNhZmV0eSBhbmQgTG9naWMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgVElQQyBzdWJzeXN0ZW0gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB0b3VjaGluZyBhIGhhbmRmdWwgb2YgY29yZSBmaWxlcyByZWxhdGVkIHRvIG5hbWluZyBhbmQgZGlzdHJpYnV0aW9uLiBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgc3BlY2lmaWNhbGx5IGAtRU5PQlVGU2AsIGR1cmluZyBuYW1lIHRhYmxlIG9wZXJhdGlvbnMuIFRoZSBrZXkgZmlsZXMgaW1wYWN0ZWQgYXJlIGBjb3JlLmMvaGAsIGBuYW1lX2Rpc3RyLmMvaGAsIGBuYW1lX3RhYmxlLmMvaGAsIGBuZXQuY2AsIGBub2RlLmMvaGAsIGFuZCBgc29ja2V0LmNgLlxuXG5NeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJ20gbG9va2luZyBmb3Igd2hlcmUgbmV3IGRhdGEgc3RydWN0dXJlcyBtaWdodCBiZSBpbnRyb2R1Y2VkIG9yIGhvdyBleGlzdGluZyBvbmVzIGFyZSBtb2RpZmllZCwgZXNwZWNpYWxseSBpZiB0aGV5IGludGVyYWN0IHdpdGggdXNlciBzcGFjZS4gSXQgc2VlbXMgdGhlIGZvY3VzIGhlcmUgaXMgcm9idXN0IGVycm9yIGhhbmRsaW5nIGFyb3VuZCBidWZmZXIgYWxsb2NhdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmZXcgbmV3IGZpZWxkcyBsaWtlIGB0bi1cdTAwM2VudF9zdG9wYCwgYHRuLVx1MDAzZW50X3NlbGZfbm9kZV9leGlzdGAsIGFuZCBgdG4tXHUwMDNlbm9kZV9hZGRyX3NldGAsIGJ1dCB0aGV5IGFwcGVhciByZWxhdGVkIHRvIGNvbnRyb2xsaW5nIHRoZSBmbG93IGFyb3VuZCB0aGUgYWxsb2NhdGlvbiBlcnJvcnMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYXJlIGFsbCByZXR1cm5pbmcgZXJyb3IgY29kZXMgYW5kIHNwZWNpZmljYWxseSBoYW5kbGluZyBgLUVOT0JVRlNgLlxuXG5JJ20gemVyb2luZyBpbiBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzLiBUaGV54oCZcmUgbm93IHRha2luZyBgaW50ICplcnJgIGFyZ3VtZW50cyAoZS5nLiwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCkgb3IgcmV0dXJuaW5nIGBpbnRgIChlLmcuLCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYG5hbWVkX2Rpc3RyaWJ1dGVgKS4gVGhlIGBuYW1lZF9kaXN0cmlidXRlYCBmdW5jdGlvbiwgaW4gcGFydGljdWxhciwgY2F1Z2h0IG15IGV5ZSDigJMgaXQncyBoYW5kbGluZyBhIGBOVUxMYCByZXR1cm4gZnJvbSBgbmFtZWRfcHJlcGFyZV9idWZgIGJ5IHB1cmdpbmcgdGhlIHF1ZXVlIHdpdGggYF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO2AgYW5kIHJldHVybmluZyBgLUVOT0JVRlNgLiBUaGlzIHNlZW1zIHNvbGlkOyB3ZSdyZSBjbGVhbmluZyB1cCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCByZXNvdXJjZXMgYW5kIHByb3BhZ2F0aW5nIHRoZSBlcnJvci5cblxuQWgsIGBuYW1lZF9wcmVwYXJlX2J1ZmAgdXNlcyBgc2tiYCBhbGxvY2F0aW9uLiBJZiBpdCBmYWlscywgd2UgZ2V0IE5VTEwsIGFuZCBub3cgdGhlIGVycm9yIGhhbmRsaW5nIGlzIGluIHBsYWNlLiBUaGF0J3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuXG5cbkxldCdzIGRpc3NlY3QgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCB0byBtYWtlIHN1cmUgaXQgaXMgbm90IGxlYWtpbmcgaW5mb3JtYXRpb246XG5gYGBjXG5cdHNrLnJlZiA9IDA7XG5cdHNrLm5vZGUgPSB0bi1cdTAwM2Vub2RlX2FkZHI7XG5cdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxuXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuYGBgXG5IZXJlLCB3ZSdyZSBkZWFsaW5nIHdpdGggYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrO2Agb24gdGhlIHN0YWNrLiBJbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsLiBJIHNlZSBgc2sucmVmID0gMDtgIGFuZCBgc2subm9kZSA9IHRuLVx1MDAzZW5vZGVfYWRkcjtgIGFyZSBiZWluZyBzZXQuIE5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyYCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZpZWxkcyB0aGF0IGFyZSBpbXBvcnRhbnQuIEl0IGFwcGVhcnMgdGhlIGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIGhhbmRsZWQgZ3JhY2VmdWxseSwgcHJldmVudGluZyBwYXJ0aWFsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIGV4cG9zZWQuIE92ZXJhbGwsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGluIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIFRJUEMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjE1LjY4NjU1MDczM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwNTQxMTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oLTQ3LVxcbmluY2x1ZGUvdWFwaS9saW51eC90aXBjLmg6NDg6c3RydWN0IHRpcGNfc29ja2V0X2FkZHIge1xcbmluY2x1ZGUvdWFwaS9saW51eC90aXBjLmgtNDktXFx0X191MzIgcmVmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMzo1NjoxOC4yOTE5NjY2MzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MzUwMzgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZ2V0dGluZyBhIGZ1bGwgaGFuZGxlIG9uIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkcmA6XG5cbioqQW5hbHl6aW5nIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkcmAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoaXMgc3RydWN0dXJlLCBgdGlwY19zb2NrZXRfYWRkcmAuIEknbSBnb2luZyB0byBsb29rIGJleW9uZCBhbnkgc3VwZXJmaWNpYWwgZGVzY3JpcHRpb25zIGFuZCByZWFsbHkgZHJpbGwgZG93biBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgd2FudCB0byBzZWUgdGhlIGNvbXBsZXRlIGRlZmluaXRpb24sIHVuZGVyc3RhbmQgYWxsIHRoZSBtZW1iZXJzLCB0aGVpciBkYXRhIHR5cGVzLCBhbmQgd2hhdCBlYWNoIGZpZWxkIHNpZ25pZmllcyB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbikgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gcmVwcmVzZW50aW5nIGFkZHJlc3NlcyBmb3IgVElQQyBzb2NrZXRzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYWRkcmVzc2luZywgcm91dGluZywgYW5kIGNvbW11bmljYXRpb24gYmV0d2VlbiBwcm9jZXNzZXMgdXNpbmcgVElQQy4gSSdtIGFudGljaXBhdGluZyB0aGF0IGtub3dpbmcgdGhpcyB3aWxsIGluZm9ybSBtZSBhYm91dCBob3cgZGF0YSBpcyBzdHJ1Y3R1cmVkIGFuZCBob3cgcHJvY2Vzc2VzIGFyZSBpZGVudGlmaWVkIGFjcm9zcyB0aGUgVElQQyBuZXR3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjIxLjQ3NTQ3NDUyNloiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMTkwMzE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC90aXBjLmgtNDctXFxuaW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaDo0ODpzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaC00OS1cXHRfX3UzMiByZWY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjIyLjY5NzM4NTQ5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA3MDA2NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFRJUEMgSGVhZGVyIC0gTGluZSA0OCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGtlcm5lbCdzIFRJUEMgdXNlci1zcGFjZSBBUEkgaGVhZGVyIGZpbGUsIHNwZWNpZmljYWxseSBgaW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaGAuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDQ4LiBJJ20gZ3Vlc3NpbmcgdGhhdCBsaW5lIG1pZ2h0IGNvbnRhaW4gYSBjcml0aWNhbCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgcGVyaGFwcyBhIG1lc3NhZ2UgZm9ybWF0LCBzb2NrZXQgb3B0aW9uLCBvciBhIGNydWNpYWwgZW51bSByZWxhdGVkIHRvIGFkZHJlc3MgZmFtaWx5IG9yIG1lc3NhZ2UgdHlwZSBoYW5kbGluZyB3aXRoaW4gVElQQy4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgb3IgY29uc3RhbnRzIGRlY2xhcmVkIHRoZXJlIHRoYXQgd291bGQgYmUgdXNlZnVsIHdoZW4gZGV2ZWxvcGluZyBvciBkZWJ1Z2dpbmcgaW4gdGhlIHJlYWxtIG9mIFRJUEMtYmFzZWQgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJ20gbG9va2luZyBmb3IgYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSwgZmllbGQsIG9yIGNvbnN0YW50IHRoYXQgaXMgZ2l2aW5nIG1lIHBhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE2MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjI1LjkwNDM5NTg2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcbiAgNDE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICA0MjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ja2lvcy5oXFx1MDAzZVxcbiAgNDM6XFx0XFxuICA0NDpcXHQvKlxcbiAgNDU6XFx0ICogVElQQyBhZGRyZXNzaW5nIHByaW1pdGl2ZXNcXG4gIDQ2OlxcdCAqL1xcbiAgNDc6XFx0XFxuICA0ODpcXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciB7XFxuICA0OTpcXHRcXHRfX3UzMiByZWY7XFxuICA1MDpcXHRcXHRfX3UzMiBub2RlO1xcbiAgNTE6XFx0fTtcXG4gIDUyOlxcdFxcbiAgNTM6XFx0c3RydWN0IHRpcGNfc2VydmljZV9hZGRyIHtcXG4gIDU0OlxcdFxcdF9fdTMyIHR5cGU7XFxuICA1NTpcXHRcXHRfX3UzMiBpbnN0YW5jZTtcXG4gIDU2OlxcdH07XFxuICA1NzpcXHRcXG4gIDU4OlxcdHN0cnVjdCB0aXBjX3NlcnZpY2VfcmFuZ2Uge1xcbiAgNTk6XFx0XFx0X191MzIgdHlwZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MjUuOTA0NDk2ODY2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTExODI3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFNvY2tldCBBZGRyZXNzIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHJgIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGluaXRpYWxseS4gSXQgbG9va3MgbGlrZSBpdCBvbmx5IGNvbnRhaW5zIGByZWZgIGFuZCBgbm9kZWAuIFJpZ2h0IGF3YXksIEkgc2VlIGJvdGggYXJlIGluaXRpYWxpemVkOiBgc2sucmVmYCBpcyBzZXQgdG8gMCwgYW5kIGBzay5ub2RlYCBpcyBhc3NpZ25lZCBgdG4tXHUwMDNlbm9kZV9hZGRyYC4gU28sIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBhdCB0aGlzIHBvaW50LCB0aGUgYHNrYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHJlZCBmbGFncyB0aGVyZS5cblxuTm93LCB0aGUgbmV4dCB0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllIGlzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IHRpcGNfdWFkZHIgdWFgLiAgSSBzZWUgYHRpcGNfdWFkZHJgIGlzIGJlaW5nIGNhbGxlZCBoZXJlIHdpdGggc3BlY2lmaWMgcGFyYW1ldGVycy4gSG1tLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYHRpcGNfdWFkZHJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhvc2UgcGFyYW1ldGVyczsgdGhlIHNlcnZpY2UgcmFuZ2UsIHNjb3BlLCBub2RlIHN0YXRlLCBhbmQgdGhvc2UgYHRuLVx1MDAzZW5vZGVfYWRkcmAgYXJndW1lbnRzLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgdWFgIGlzIGFjdHVhbGx5IHBvcHVsYXRlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgZXhhY3RseSB3aGF0IGRhdGEgdGhpcyBpbml0aWFsaXphdGlvbiBpcyBwdXR0aW5nIGludG8gdGhhdCBgdWFgIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMzo1NjozMC4xMTU2ODE0NTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NjA5NTUyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY191YWRkclxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2FkZHIuaD01MD1zdHJ1Y3QgdGlwY191YWRkciB7XFxuLS1cXG5uZXQvdGlwYy9hZGRyLmgtNjMtXFxubmV0L3RpcGMvYWRkci5oOjY0OnN0YXRpYyBpbmxpbmUgdm9pZCB0aXBjX3VhZGRyKHN0cnVjdCB0aXBjX3VhZGRyICp1YSwgdTMyIGF0eXBlLCB1MzIgc2NvcGUsXFxubmV0L3RpcGMvYWRkci5oLTY1LVxcdFxcdFxcdCAgICAgIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlcilcXG4tLVxcbm5ldC90aXBjL21zZy5jPTcxMz1ib29sIHRpcGNfbXNnX2xvb2t1cF9kZXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICplcnIpXFxuLS1cXG5uZXQvdGlwYy9tc2cuYy03MzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm5ldC90aXBjL21zZy5jOjczNDpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBzY29wZSxcXG5uZXQvdGlwYy9tc2cuYy03MzUtXFx0XFx0ICAgbXNnX25hbWV0eXBlKG1zZyksIGluc3QsIGluc3QpO1xcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jPTMyMD1zdGF0aWMgdm9pZCB0aXBjX3B1YmxfcHVyZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIHUzMiBhZGRyKVxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTMyNS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzI2OlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIHAtXFx1MDAzZXNjb3BlLCBwLVxcdTAwM2Vzci50eXBlLFxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMjctXFx0XFx0ICAgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz0zNjQ9c3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTM4MC1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzgxOlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzgyLVxcdFxcdCAgIG50b2hsKGktXFx1MDAzZXR5cGUpLCBsb3dlciwgdXBwZXIpO1xcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTgzMD1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg0My1cXHRzay5ub2RlID0gdG4tXFx1MDAzZW5vZGVfYWRkcjtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6ODQ0OlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODQ1LVxcdFxcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXFx1MDAzZW5vZGVfYWRkciwgdG4tXFx1MDAzZW5vZGVfYWRkcik7XFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9OTMyPWJvb2wgdGlwY19uYW1ldGJsX3N1YnNjcmliZShzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YilcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYy05MzktXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjk0MDpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsIHR5cGUsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTk0MS1cXHRcXHQgICBzdWItXFx1MDAzZXMuc2VxLmxvd2VyLCBzdWItXFx1MDAzZXMuc2VxLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYz05NjM9dm9pZCB0aXBjX25hbWV0YmxfdW5zdWJzY3JpYmUoc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtOTY4LVxcbm5ldC90aXBjL25hbWVfdGFibGUuYzo5Njk6XFx0dGlwY191YWRkcihcXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19OT0RFX1NDT1BFLFxcbm5ldC90aXBjL25hbWVfdGFibGUuYy05NzAtXFx0XFx0ICAgc3ViLVxcdTAwM2VzLnNlcS50eXBlLCBzdWItXFx1MDAzZXMuc2VxLmxvd2VyLCBzdWItXFx1MDAzZXMuc2VxLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYz0xMTU3PXN0YXRpYyBpbnQgdGlwY19ubF9zZXJ2aWNlX2xpc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYy0xMTc2LVxcdFxcdCAgICAoIWkgXFx1MDAyNlxcdTAwMjYgKmxhc3Rfa2V5IFxcdTAwMjZcXHUwMDI2ICgqbGFzdF9sb3dlciA9PSAqbGFzdF9rZXkpKSkge1xcbm5ldC90aXBjL25hbWVfdGFibGUuYzoxMTc3OlxcdFxcdFxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfTk9ERV9TQ09QRSxcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMTE3OC1cXHRcXHRcXHRcXHQgICAqbGFzdF90eXBlLCAqbGFzdF9sb3dlciwgKmxhc3RfbG93ZXIpO1xcbi0tXFxubmV0L3RpcGMvbmV0LmM9MTI5PXN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuLS1cXG5uZXQvdGlwYy9uZXQuYy0xMzQtXFxubmV0L3RpcGMvbmV0LmM6MTM1OlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG5uZXQvdGlwYy9uZXQuYy0xMzYtXFx0XFx0ICAgVElQQ19OT0RFX1NUQVRFLCBhZGRyLCBhZGRyKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz00MTU9c3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTQzMC1cXG5uZXQvdGlwYy9ub2RlLmM6NDMxOlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfTk9ERV9TQ09QRSxcXG5uZXQvdGlwYy9ub2RlLmMtNDMyLVxcdFxcdCAgIFRJUENfTElOS19TVEFURSwgbi1cXHUwMDNlYWRkciwgbi1cXHUwMDNlYWRkcik7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yOTMyPXN0YXRpYyBpbnQgdGlwY19za193aXRoZHJhdyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI5NDAtXFx0XFx0aWYgKCF1YSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjI5NDE6XFx0XFx0XFx0dGlwY191YWRkcihcXHUwMDI2X3VhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIHAtXFx1MDAzZXNjb3BlLFxcbm5ldC90aXBjL3NvY2tldC5jLTI5NDItXFx0XFx0XFx0XFx0ICAgcC1cXHUwMDNlc3IudHlwZSwgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMwNzI9c3RhdGljIGludCB0aXBjX3NrX2pvaW4oc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY19ncm91cF9yZXEgKm1yZXEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zMDk0LVxcdG1zZ19zZXRfZGVzdF9kcm9wcGFibGUoaGRyLCB0cnVlKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzozMDk1OlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIG1yZXEtXFx1MDAzZXNjb3BlLFxcbm5ldC90aXBjL3NvY2tldC5jLTMwOTYtXFx0XFx0ICAgbXJlcS1cXHUwMDNldHlwZSwgbXJlcS1cXHUwMDNlaW5zdGFuY2UsIG1yZXEtXFx1MDAzZWluc3RhbmNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MzIuODc2NjQzOTE4WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk4MTg5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG5ldC90aXBjL2FkZHIuaGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGlzIFRJUEMgYWRkcmVzcyBpbXBsZW1lbnRhdGlvbiwgc28gbXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgbmV0L3RpcGMvYWRkci5oYCBoZWFkZXIgZmlsZS4gSXQncyBhIHN0YW5kYXJkIHByYWN0aWNlIGluIGxvdy1sZXZlbCBuZXR3b3JraW5nLCB3aGVyZSBkZWZpbml0aW9ucyBhcmUga2V5LCBhbmQgbGluZSA2NCBpcyBvZnRlbiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIHRoaXMgaXMgd2hlcmUgYW4gaW1wb3J0YW50IHN0cnVjdHVyZSBvciBjb25zdGFudCBtYXkgYmUgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgY3JpdGljYWwgcmVsYXRlZCB0byBhZGRyZXNzIGZvcm1hdCBvciBzb21lIGFzc29jaWF0ZWQgcGFyYW1ldGVycyB0byBiZSBkZWZpbmVkIGFyb3VuZCB0aGF0IHBvaW50LiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjA3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MzYuMzI2NDY1ODQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2FkZHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRzdHJ1Y3QgdGlwY191YWRkciB7XFxuICA1MTpcXHRcXHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XFxuICA1MjpcXHRcXHR1bnNpZ25lZCBjaGFyIGFkZHJ0eXBlO1xcbiAgNTM6XFx0XFx0c2lnbmVkIGNoYXIgc2NvcGU7XFxuICA1NDpcXHRcXHR1bmlvbiB7XFxuICA1NTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAgNTY6XFx0XFx0XFx0XFx0c3RydWN0IHRpcGNfc2VydmljZV9hZGRyIHNhO1xcbiAgNTc6XFx0XFx0XFx0XFx0dTMyIGxvb2t1cF9ub2RlO1xcbiAgNTg6XFx0XFx0XFx0fTtcXG4gIDU5OlxcdFxcdFxcdHN0cnVjdCB0aXBjX3NlcnZpY2VfcmFuZ2Ugc3I7XFxuICA2MDpcXHRcXHRcXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzaztcXG4gIDYxOlxcdFxcdH07XFxuICA2MjpcXHR9O1xcbiAgNjM6XFx0XFxuICA2NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGlwY191YWRkcihzdHJ1Y3QgdGlwY191YWRkciAqdWEsIHUzMiBhdHlwZSwgdTMyIHNjb3BlLFxcbiAgNjU6XFx0XFx0XFx0XFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxcbiAgNjY6XFx0e1xcbiAgNjc6XFx0XFx0dWEtXFx1MDAzZWZhbWlseSA9IEFGX1RJUEM7XFxuICA2ODpcXHRcXHR1YS1cXHUwMDNlYWRkcnR5cGUgPSBhdHlwZTtcXG4gIDY5OlxcdFxcdHVhLVxcdTAwM2VzY29wZSA9IHNjb3BlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMzo1NjozNi4zMjY1MjkwNzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMjY4MzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgdGlwY191YWRkcmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgY2xlYXJseSBvbiBgdGlwY191YWRkcmAuIFRoYXQgc2lnbmFscyBhIGRlc2lyZSBmb3IgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHNwZWNpZmljIHN0cnVjdHVyZSBvciBmdW5jdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBUSVBDIChUcmFuc3BhcmVudCBJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLiBUaGlzIHByb2JhYmx5IG1lYW5zIEknbSB3b3JraW5nIHdpdGggVElQQyBhdCBhIGZhaXJseSBsb3cgbGV2ZWwsIGRlYWxpbmcgd2l0aCBpdHMgaW50ZXJuYWwgd29ya2luZ3Mgb3IgdHJvdWJsZXNob290aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHVzZXIgYWRkcmVzc2VzLiBJIGNvdWxkIGJlIGRlYnVnZ2luZyBhIFRJUEMgaXNzdWUsIG9wdGltaXppbmcgc29tZSBjb2RlLCBvciBwZXJoYXBzIGV2ZW4gY29udHJpYnV0aW5nIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGUgZmFjdCB0aGF0IHRoZSB0aG91Z2h0IGlzIHNvIGRpcmVjdCwgXCJMZXQncyByZWFkIG1vcmUsXCIgaW5kaWNhdGVzIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSBhcmVhIG9mIGNvbmNlcm4gYW5kIGhhdmUgZGVjaWRlZCBvbiB0aGUgbmV4dCBjb3Vyc2Ugb2YgYWN0aW9uLiBJIGtub3cgd2hlcmUgdGhlIGRvY3VtZW50YXRpb24gaXMsIHRoZSBjb2RlIGlzLCBvciBib3RoLCBhbmQgSSdtIHJlYWR5IHRvIGRpZyBpbi4gTXkgdW5kZXJzdGFuZGluZyBuZWVkcyB0byBnbyBkZWVwZXIgdGhhbiB3aGF0IEkgYWxyZWFkeSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MzkuODQ5MjE0Mzk4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2FkZHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGlwY191YWRkcihzdHJ1Y3QgdGlwY191YWRkciAqdWEsIHUzMiBhdHlwZSwgdTMyIHNjb3BlLFxcbiAgNjU6XFx0XFx0XFx0XFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxcbiAgNjY6XFx0e1xcbiAgNjc6XFx0XFx0dWEtXFx1MDAzZWZhbWlseSA9IEFGX1RJUEM7XFxuICA2ODpcXHRcXHR1YS1cXHUwMDNlYWRkcnR5cGUgPSBhdHlwZTtcXG4gIDY5OlxcdFxcdHVhLVxcdTAwM2VzY29wZSA9IHNjb3BlO1xcbiAgNzA6XFx0XFx0dWEtXFx1MDAzZXNyLnR5cGUgPSB0eXBlO1xcbiAgNzE6XFx0XFx0dWEtXFx1MDAzZXNyLmxvd2VyID0gbG93ZXI7XFxuICA3MjpcXHRcXHR1YS1cXHUwMDNlc3IudXBwZXIgPSB1cHBlcjtcXG4gIDczOlxcdH1cXG4gIDc0OlxcdFxcbiAgNzU6XFx0c3RhdGljIGlubGluZSBib29sIHRpcGNfdWFkZHJfdmFsaWQoc3RydWN0IHRpcGNfdWFkZHIgKnVhLCBpbnQgbGVuKVxcbiAgNzY6XFx0e1xcbiAgNzc6XFx0XFx0dTMyIGF0eXBlO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHRpZiAobGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl90aXBjKSlcXG4gIDgwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDgxOlxcdFxcdGF0eXBlID0gdWEtXFx1MDAzZWFkZHJ0eXBlO1xcbiAgODI6XFx0XFx0aWYgKHVhLVxcdTAwM2VmYW1pbHkgIT0gQUZfVElQQylcXG4gIDgzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MzkuODQ5MjY5OTU4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMjk5Mjg1NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFRJUEMgUGF0Y2ggZm9yIE1lbW9yeSBBbGxvY2F0aW9uIEZhaWx1cmVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIFRJUEMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZm9jdXNpbmcgb24gaGFuZGxpbmcgb3V0LW9mLW1lbW9yeSAoT09NKSBzaXR1YXRpb25zLCBzcGVjaWZpY2FsbHkgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBUaGUgY29yZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBwcm9wYWdhdGluZyBgLUVOT0JVRlNgIChObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlKSBlcnJvcnMgYW5kIGltcGxlbWVudGluZyByZXRyaWVzIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBgdGlwY191YWRkcmAgc3RydWN0IGluaXRpYWxpemF0aW9uLiBJdCBpbml0aWFsaXplcyBhbGwgbWVtYmVycyBvZiB0aGUgc3RydWN0dXJlLCBzbyB0aGVyZSdzIG5vIHJpc2sgb2YgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhlcmUuXG5cbk5leHQsIEkgbG9va2VkIGF0IHRoZSBlcnJvciBoYW5kbGluZyBpbnRyb2R1Y2VkIGluIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFuZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGNvbnNpc3RlbnRseSBjaGVja3MgZm9yIGBza2JgIGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIHNldHMgdGhlIGBlcnJgIHZhcmlhYmxlIHRvIGAtRU5PQlVGU2AgYXMgZXhwZWN0ZWQuIFRoaXMgZXJyb3IgY29kZSBwcm9wYWdhdGVzLCBhbGxvd2luZyB0aGUgc3lzdGVtIHRvIHJlYWN0IGFwcHJvcHJpYXRlbHkuIEkgY29uZmlybWVkIHRoYXQgdGhlc2UgZXJyb3IgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYXZvaWRpbmcgYW55IHBvdGVudGlhbCByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5IGluIGB0aXBjX25vZGVfd3JpdGVfdW5sb2NrYCBhbmQgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCB3aGVyZSB0aGUgZXJyIHZhcmlhYmxlIGlzIHBhc3NlZCBieSByZWZlcmVuY2UuXG5cblRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBwcmV2ZW50aW5nIGluY29uc2lzdGVudCBzdGF0ZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCBieSBicmluZ2luZyBkb3duIGEgbm9kZSBvciBsaW5rIHRvIHRyaWdnZXIgYSByZS1zeW5jIGxhdGVyLiBUaGlzIGlzIGEgc291bmQgc3RyYXRlZ3kuXG5cbk15IGNvbmNlcm4gd2FzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgZWl0aGVyIHRvIHVzZXJzcGFjZSwgb3IgcmVhZCBieSB0aGUga2VybmVsLiBJIGRpZG4ndCBzZWUgYW55IGV2aWRlbmNlIG9mIHRoaXMuIFRoZSBwYXRjaCBtb2RpZmllcyBleGlzdGluZyBlcnJvciBoYW5kbGluZyBwYXRocywgYnV0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywgZGF0YSB0cmFuc2ZlcnMsIG9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgYSBjb25jZXJuLiBTdGFuZGFyZCBrZXJuZWwgbWVtb3J5IHNhZmV0eSBjaGVja3MgbGlrZSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKSBzaG91bGQgZGV0ZWN0IGFueSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGFyZSBidWdneSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIGhlcmUgdGhhdCB3b3VsZCBzdWdnZXN0IHRoYXQgZXhpc3RpbmcgS0FTQU4gd291bGQgYmUgaW5lZmZlY3RpdmUuIEtNU0FOIGZ1enppbmcgc2VlbXMgdW5uZWNlc3NhcnkuIFRoZSBwYXRjaCBpcyBhIHRhcmdldGVkIGZpeCwgYW5kIGEgdGhvcm91Z2ggc3RhdGljIGFuYWx5c2lzIGFuZCBjb2RlIHJldmlldyB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzMiwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTc6MDIuMTQ4NTU4NjQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nIGZvciBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBUSVBDIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIGFuZCBwdWJsaWNhdGlvbi4gSXQgbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMgdG8gcmV0dXJuIGVycm9yIGNvZGVzIGFuZCBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZ3JhY2VmdWxseSBieSByZXRyeWluZyBvciBicmluZ2luZyBkb3duIHRoZSBub2RlL2xpbmsuIFRoZSB2YXJpYWJsZXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byByZWNlaXZlIGVycm9yIGNvZGVzIChlLmcuLCBgZXJyYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAgaW4gdGhlIGNhbGxlcnMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgZGVhbCB3aXRoIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgcHJvcGFnYXRpb24uIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBlcnJvciBwYXRocywgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7nvv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 03:06:44 +0000 UTC FinishedAt: 2026-08-12 03:57:03 +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": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "cba9ccb47e9fa4cc77692fb896cc5ab57a667882", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC" ], "series_id": "0d628203-d998-453c-95d9-6ef157677e8a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_named_distribute", "tipc_named_node_up", "tipc_nametbl_publish", "tipc_nametb_insert_self_node_pub", "tipc_node_set_dist_bulk" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX25hbWVkX2Rpc3RyaWJ1dGUmIzM0OywKICAgICYjMzQ7dGlwY19uYW1lZF9ub2RlX3VwJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRibF9wdWJsaXNoJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViJiMzNDssCiAgICAmIzM0O3RpcGNfbm9kZV9zZXRfZGlzdF9idWxrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVElQQyBzdWJzeXN0ZW0gdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PQlVGUykgZHVyaW5nIG5hbWUgZGlzdHJpYnV0aW9uIGFuZCBwdWJsaWNhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgc3RhdGUgZmxhZ3MgdG8gYHRpcGNfbmV0YCBhbmQgYHRpcGNfbm9kZWAgYW5kIG1vZGlmaWVzIHRoZSBub2RlIHRpbWVvdXQgYW5kIHVubG9jayBsb2dpYyB0byBoYW5kbGUgcmVkaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBUSVBDIGxvZ2ljLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IGZhbWlseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA2ODdlMTQ1OWVlNzMxYTBkNjMyYjU2NTkwZWY3MGExMTdlMzgxNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwMzo1NDoxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmMgYi9uZXQvdGlwYy9jb3JlLmNcbmluZGV4IDMxNTk3NWMzYmU4MTguLjBmMWQzZGRlYWUwOTUgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2NvcmUuY1xuQEAgLTYxLDYgJiM0Mzs2MSw5IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCB0aXBjX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHRuLVx1MDAzZXRyaWFsX2FkZHIgPSAwO1xuIFx0dG4tXHUwMDNlYWRkcl90cmlhbF9lbmQgPSAwO1xuIFx0dG4tXHUwMDNlY2FwYWJpbGl0aWVzID0gVElQQ19OT0RFX0NBUEFCSUxJVElFUztcbiYjNDM7XHR0bi1cdTAwM2VudF9zdG9wID0gZmFsc2U7XG4mIzQzO1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0LCAwKTtcbiBcdElOSVRfV09SSyhcdTAwMjZ0bi1cdTAwM2V3b3JrLCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKTtcbiBcdG1lbXNldCh0bi1cdTAwM2Vub2RlX2lkLCAwLCBzaXplb2YodG4tXHUwMDNlbm9kZV9pZCkpO1xuIFx0bWVtc2V0KHRuLVx1MDAzZW5vZGVfaWRfc3RyaW5nLCAwLCBzaXplb2YodG4tXHUwMDNlbm9kZV9pZF9zdHJpbmcpKTtcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmggYi9uZXQvdGlwYy9jb3JlLmhcbmluZGV4IDljZTVmOWZmNmNjMDMuLjk3NWIxZDQ4MTg2ZTYgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2NvcmUuaFxuQEAgLTE0NSw2ICYjNDM7MTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdC8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovXG4gXHRhdG9taWNfdCB3cV9jb3VudDtcbiYjNDM7XHQvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIG5vZGUmIzM5O3MgYWRkcmVzcyBpcyBzZXQgKi9cbiYjNDM7XHRhdG9taWNfdCBub2RlX2FkZHJfc2V0O1xuJiM0MztcdC8qIFRoZSBuYW1lIHRhYmxlIGhhcyBzdG9wcGVkIHdvcmtpbmcgKi9cbiYjNDM7XHRib29sIG50X3N0b3A7XG4mIzQzO1x0LyogTm9kZSYjMzk7cyBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBuYW1lIHRhYmxlICovXG4mIzQzO1x0Ym9vbCBudF9zZWxmX25vZGVfZXhpc3Q7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aXBjX25ldCAqdGlwY19uZXQoc3RydWN0IG5ldCAqbmV0KVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuYyBiL25ldC90aXBjL25hbWVfZGlzdHIuY1xuaW5kZXggYmE0ZjQ5MDZlMTNiNy4uMDYwYzQyZDhmZGE1NCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXG5AQCAtOTUsOSAmIzQzOzk1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZW5vZGVfc2NvcGUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApO1xuIFx0aWYgKCFza2IpIHtcbiBcdFx0cHJfd2FybihcJiMzNDtQdWJsaWNhdGlvbiBkaXN0cmlidXRpb24gZmFpbHVyZVxcblwmIzM0Oyk7XG5AQCAtMTIxLDkgJiM0MzsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdHN0cnVjdCBkaXN0cl9pdGVtICppdGVtO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbi1cdHdyaXRlX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0aWYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19OT0RFX1NDT1BFKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0xNDYsOSAmIzQzOzE0MiwxNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiAgKiBAZG5vZGU6IG5vZGUgdG8gYmUgdXBkYXRlZFxuICAqIEBwbHM6IGxpbmtlZCBsaXN0IG9mIHB1YmxpY2F0aW9uIGl0ZW1zIHRvIGJlIHBhY2tlZCBpbnRvIGJ1ZmZlciBjaGFpblxuICAqIEBzZXFubzogc2VxdWVuY2UgbnVtYmVyIGZvciB0aGlzIG1lc3NhZ2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4mIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbiYjNDM7ICpcbiAgKi9cbi1zdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi1cdFx0XHQgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4mIzQzO3N0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4mIzQzO1x0XHRcdCAgICB1MzIgZG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBscywgdTE2IHNlcW5vKVxuIHtcbiBcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuQEAgLTE2NCw4ICYjNDM7MTY1LDkgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gXHRcdFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSxcbiBcdFx0XHRcdFx0XHRkbm9kZSk7XG4gXHRcdFx0aWYgKCFza2IpIHtcbiYjNDM7XHRcdFx0XHRfX3NrYl9xdWV1ZV9wdXJnZShsaXN0KTtcbiBcdFx0XHRcdHByX3dhcm4oXCYjMzQ7QnVsayBwdWJsaWNhdGlvbiBmYWlsdXJlXFxuXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXHRcdFx0fVxuIFx0XHRcdGhkciA9IGJ1Zl9tc2coc2tiKTtcbiBcdFx0XHRtc2dfc2V0X2JjX2Fja19pbnZhbGlkKGhkciwgdHJ1ZSk7XG5AQCAtMTk1LDYgJiM0MzsxOTcsODIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gXHRoZHIgPSBidWZfbXNnKHNrYl9wZWVrX3RhaWwobGlzdCkpO1xuIFx0bXNnX3NldF9sYXN0X2J1bGsoaGRyKTtcbiBcdG1zZ19zZXRfbmFtZWRfc2Vxbm8oaGRyLCBzZXFubyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBidWlsZCBhIGxpc3Qgb2YgcHVibGljYXRpb25zIG5lZWQgdG8gYmUgZGlzdHJpYnV0ZWRcbiYjNDM7ICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4mIzQzOyAqIEBoZWFkOiBsaXN0IG9mIHB1YmxpY2F0aW9uc1xuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuJiM0MzsgKlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4mIzQzO1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4mIzQzO1xuJiM0MztcdC8qIE5hbWUgdGFibGUgaGFzIGJlZW4gZGVsZXRlZCBhZnRlciBuYW1lc3BhY2UgdGVhcmRvd24gb3JcbiYjNDM7XHQgKiBUSVBDIG1vZHVsZSBleGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseSh0bi1cdTAwM2VudF9zdG9wKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBOb2RlJiMzOTtzIHNlbGYgYWRkcmVzcyBpcyBub3Qgc2V0IHlldCAqL1xuJiM0MztcdGlmICghYXRvbWljX3JlYWQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCkpIHtcbiYjNDM7XHRcdC8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSYjMzk7cyB0aW1lciAqL1xuJiM0MztcdFx0dGlwY19ub2RlX3NldF9kaXN0X2J1bGsobmV0LCBkbm9kZSk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QpXG4mIzQzO1x0XHRnb3RvIGRpc3RyaWJ1dGU7XG4mIzQzO1xuJiM0MztcdGlmICh0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihuZXQpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9CVUZTO1xuJiM0MztcbiYjNDM7XHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSB0cnVlO1xuJiM0MztcbiYjNDM7ZGlzdHJpYnV0ZTpcbiYjNDM7XHRpZiAobmFtZWRfZGlzdHJpYnV0ZShuZXQsIGhlYWQsIGRub2RlLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIG50LVx1MDAzZXNuZF9ueHQpID09IC1FTk9CVUZTKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9CVUZTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZVxuJiM0MzsgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuJiM0MzsgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4mIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbiYjNDM7ICpcbiYjNDM7ICovXG4mIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7XG4mIzQzO1x0aW50IHJjID0gMDtcbiYjNDM7XG4mIzQzO1x0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmhlYWQpO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuJiM0MztcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXHUwMDI2aGVhZCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiYjNDM7XHRpZiAoIXJjIFx1MDAyNlx1MDAyNiAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmhlYWQpKSB7XG4mIzQzO1x0XHRpZiAodGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgMCkgPT0gLUVOT0JVRlMpXG4mIzQzO1x0XHRcdHJjID0gLUVOT0JVRlM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTIwMiwyNSAmIzQzOzI4MCwzMiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuICAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxuICAqIEBjYXBhYmlsaXRpZXM6IHBlZXIgbm9kZSYjMzk7cyBjYXBhYmlsaXRpZXNcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOlxuJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4mIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbiYjNDM7ICpcbiAgKi9cbi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xuLVx0dTE2IHNlcW5vO1xuJiM0MztcdGludCByYyA9IDA7XG4gXG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGVhZCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiBcdGlmICghKGNhcGFiaWxpdGllcyBcdTAwMjYgVElQQ19OQU1FRF9CQ0FTVCkpXG4gXHRcdG50LVx1MDAzZXJjX2Rlc3RzJiM0MzsmIzQzOztcbi1cdHNlcW5vID0gbnQtXHUwMDNlc25kX254dDtcbiYjNDM7XG4mIzQzO1x0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcdTAwMjZoZWFkKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4mIzQzO1x0aWYgKCFyYyBcdTAwMjZcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZoZWFkKSkge1xuJiM0MztcdFx0aWYgKHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIDApID09IC1FTk9CVUZTKVxuJiM0MztcdFx0XHRyYyA9IC1FTk9CVUZTO1xuJiM0MztcdH1cbiBcbi1cdHJlYWRfbG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuLVx0bmFtZWRfZGlzdHJpYnV0ZShuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlLCBzZXFubyk7XG4tXHR0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbi1cdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJjO1xuIH1cbiBcbiAvKipcbkBAIC00MTYsNSAmIzQzOzUwMSw2IEBAIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgYmluZGluZ19ub2RlKVxuIFx0XHRwLVx1MDAzZXNrLm5vZGUgPSBzZWxmO1xuIFx0bnQtXHUwMDNlcmNfZGVzdHMgPSAwO1xuJiM0MztcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxuaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5AQCAtNjksMTEgJiM0Mzs2OSwxMiBAQCBzdHJ1Y3QgZGlzdHJfaXRlbSB7XG4gXG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpO1xuLXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKTtcbiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7XG4gdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcbiBcdFx0ICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7XG4gdm9pZCB0aXBjX25hbWVkX3JlaW5pdChzdHJ1Y3QgbmV0ICpuZXQpO1xuIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCxcbiBcdFx0ICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpO1xuJiM0MztpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjNiYjBjZTc4M2RiZGYgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTMyOSw3ICYjNDM7MzI5LDcgQEAgc3RhdGljIHN0cnVjdCBzZXJ2aWNlX3JhbmdlICp0aXBjX3NlcnZpY2VfY3JlYXRlX3JhbmdlKHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxuIFxuIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnApXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wO1xuIFx0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xuQEAgLTMzOSwxMCAmIzQzOzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0Ym9vbCByZXMgPSBmYWxzZTtcbiBcdHUzMiBrZXkgPSBwLVx1MDAzZWtleTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7XG4tXHRpZiAoIXNyKVxuJiM0MztcdGlmICghc3IpIHtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byAgZXhpdDtcbiYjNDM7XHR9XG4gXG4gXHRmaXJzdCA9IGxpc3RfZW1wdHkoXHUwMDI2c3ItXHUwMDNlYWxsX3B1YmwpO1xuIFxuQEAgLTM1Myw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtGYWlsZWQgdG8gYmluZCBkdXBsaWNhdGUgJXUsJXUsJXUvJXU6JXUvJXVcXG5cJiMzNDssXG4gXHRcdFx0XHQgcC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyLFxuIFx0XHRcdFx0IG5vZGUsIHAtXHUwMDNlc2sucmVmLCBrZXkpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdCplcnIgPSAtRUVYSVNUO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuIFx0fVxuQEAgLTM3MSw3ICYjNDM7Mzc1LDYgQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmICghcmVzKVxuIFx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxuXCYjMzQ7LFxuIFx0XHRcdHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuQEAgLTQ5MCw4ICYjNDM7NDkzLDEyIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7XG4gXHRpZiAoIXNjKVxuIFx0XHRzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCB1YSk7XG4tXHRpZiAoc2MgXHUwMDI2XHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSlcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4mIzQzO1x0aWYgKHNjIFx1MDAyNlx1MDAyNiB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgTlVMTCkpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuIFx0XHRyZXR1cm4gcDtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4gXHRrZnJlZShwKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC03NjAsMjQgJiM0Mzs3NjcsNDQgQEAgdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlXG4gICovXG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSlcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4mIzQzO1x0XHRcdFx0XHQgdTMyIGtleSwgaW50ICplcnIpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4mIzQzO1x0dTMyIG1heF91c2VyX3B1YiA9IFRJUENfTUFYX1BVQkwgLSAxO1xuIFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnAgPSBOVUxMO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXG4mIzQzO1x0aWYgKHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8XG4mIzQzO1x0ICAgIHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19UT1BfU1JWKVxuJiM0MztcdFx0cHJvdG9jb2xfdHlwZSA9IHRydWU7XG4mIzQzO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4mIzQzO1x0aWYgKHByb3RvY29sX3R5cGUpXG4mIzQzO1x0XHRnb3RvIGluc2VydDtcbiBcbi1cdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gVElQQ19NQVhfUFVCTCkge1xuLVx0XHRwcl93YXJuKFwmIzM0O0JpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwmIzM0OywgVElQQ19NQVhfUFVCTCk7XG4mIzQzO1x0LyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXJcbiYjNDM7XHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJiMzOTtzXG4mIzQzO1x0ICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgXHUwMDNlPSBtYXhfdXNlcl9wdWIpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7QmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCYjMzQ7LCBtYXhfdXNlcl9wdWIpO1xuIFx0XHRnb3RvIGV4aXQ7XG4gXHR9XG4gXG4mIzQzO2luc2VydDpcbiBcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcbiYjNDM7XHRcdCAqIHNvIHRoYXQgbWF4aW11bSBudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnRcbiYjNDM7XHRcdCAqIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBuYW1lXG4mIzQzO1x0XHQgKiB0YWJsZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFwcm90b2NvbF90eXBlKVxuJiM0MztcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOztcbiBcdFx0c2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7XG4gXHR9XG4gXHRyY19kZXN0cyA9IG50LVx1MDAzZXJjX2Rlc3RzO1xuQEAgLTc4Niw4ICYjNDM7ODEzLDgxIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRpZiAoc2tiKVxuIFx0XHR0aXBjX25vZGVfYnJvYWRjYXN0KG5ldCwgc2tiLCByY19kZXN0cyk7XG4mIzQzO1x0ZWxzZSBpZiAocCBcdTAwMjZcdTAwMjYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFKSBcdTAwMjZcdTAwMjYgZXJyKVxuJiM0MztcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0cmV0dXJuIHA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJiMzOTtzIHNlbGYgYWRkcmVzc1xuJiM0MzsgKiBAbmV0OiBuZXR3b3JrIG5hbWVzcGFjZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46XG4mIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuJiM0MzsgKlxuJiM0MzsgKi9cbiYjNDM7aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xuJiM0MztcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuJiM0MztcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrO1xuJiM0MztcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjtcbiYjNDM7XHRzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYztcbiYjNDM7XHRib29sIHNjX2NyZWF0ZWQgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgcHVibGljYXRpb24gKnA7XG4mIzQzO1x0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdHNrLnJlZiA9IDA7XG4mIzQzO1x0c2subm9kZSA9IHRuLVx1MDAzZW5vZGVfYWRkcjtcbiYjNDM7XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcbiYjNDM7XHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuJiM0MztcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCBcdTAwMjZ1YSk7XG4mIzQzO1x0aWYgKCFzYykge1xuJiM0MztcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgXHUwMDI2dWEpO1xuJiM0MztcdFx0aWYgKCFzYylcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuJiM0MztcdFx0c2NfY3JlYXRlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXHUwMDI2dWEpO1xuJiM0MztcdC8qIDEuIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoKSBpcyBub3Qgc2NoZWR1bGVkIGJlY2F1c2Ugb2YgbmFtZXNwYWNlXG4mIzQzO1x0ICogICAgdGVhcmRvd24uXG4mIzQzO1x0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgZmFpbGVkXG4mIzQzO1x0ICogICAgdG8gaW5zZXJ0IG5vZGUgc2VsZiBhZGRyZXNzIHB1YmxpY2F0aW9uIGludG8gbnQtXHUwMDNlY2x1c3Rlcl9zY29wZVxuJiM0MztcdCAqICAgIGR1ZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuJiM0MztcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxuJiM0MztcdCAqICAgIGV4ZWN1dGVkIHlldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNyKSB7XG4mIzQzO1x0XHRwID0gdGlwY19wdWJsX2NyZWF0ZShcdTAwMjZ1YSwgXHUwMDI2c2ssIHRuLVx1MDAzZW5vZGVfYWRkcik7XG4mIzQzO1x0XHRpZiAoIXApXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3I7XG4gXG4mIzQzO1x0XHRpZiAoIXRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCBcdTAwMjZlcnIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChlcnIgPT0gLUVOT0JVRlMpKSB7XG4mIzQzO1x0XHRcdGtmcmVlKHApO1xuJiM0MztcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuJiM0MztcdFx0Z290byBleGl0O1xuJiM0MztlcnJvcjpcbiYjNDM7XHRcdGlmIChzY19jcmVhdGVkKSB7XG4mIzQzO1x0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZzYy1cdTAwM2VzZXJ2aWNlX2xpc3QpO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0a2ZyZWVfcmN1KHNjLCByY3UpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4mIzQzO1x0fVxuJiM0MztleGl0OlxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC04MTAsNyAmIzQzOzkxMCwxMCBAQCB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcbiBcdHAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4mIzQzO1x0XHRpZiAocC1cdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19MSU5LX1NUQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXG4mIzQzO1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbiBcdFx0c2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlYmluZGluZ19zb2NrKTtcbiBcdFx0a2ZyZWVfcmN1KHAsIHJjdSk7XG5AQCAtODk5LDcgJiM0MzsxMDAyLDYgQEAgaW50IHRpcGNfbmFtZXRibF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm50LVx1MDAzZW5vZGVfc2NvcGUpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSk7XG4tXHRyd2xvY2tfaW5pdChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0dG4tXHUwMDNlbmFtZXRibCA9IG50O1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiBcdHJldHVybiAwO1xuQEAgLTkxOSw2ICYjNDM7MTAyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcbiBcdHJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShzciwgdG1wciwgXHUwMDI2c2MtXHUwMDNlcmFuZ2VzLCB0cmVlX25vZGUpIHtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgXHUwMDI2c3ItXHUwMDNlYWxsX3B1YmwsIGFsbF9wdWJsKSB7XG4gXHRcdFx0dGlwY19zZXJ2aWNlX3JlbW92ZV9wdWJsKHNyLCBcdTAwMjZwLVx1MDAzZXNrLCBwLVx1MDAzZWtleSk7XG4mIzQzO1x0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbiBcdFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdFx0fVxuIFx0XHRyYl9lcmFzZV9hdWdtZW50ZWQoXHUwMDI2c3ItXHUwMDNldHJlZV9ub2RlLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIFx1MDAyNnNyX2NhbGxiYWNrcyk7XG5AQCAtOTQ5LDYgJiM0MzsxMDUyLDggQEAgdm9pZCB0aXBjX25hbWV0Ymxfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdFx0dGlwY19zZXJ2aWNlX2RlbGV0ZShuZXQsIHNlcnZpY2UpO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0dG4tXHUwMDNlbnRfc3RvcCA9IHRydWU7XG4mIzQzO1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFxuIFx0LyogVE9ETzogY2xlYXIgdG4tXHUwMDNlbmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqL1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uZTdhMmM1MGYwOTljZiAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5AQCAtOTcsNyAmIzQzOzk3LDYgQEAgc3RydWN0IHB1YmxpY2F0aW9uIHtcbiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGVcbiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIHRvIHNlbmQgYnVsayB1cGRhdGVzIHRvIG5ldyBub2Rlc1xuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgZHVyaW5nIHJlLWluaXQgb2YgbmFtZSB0YWJsZVxuLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZVxuICAqIEBsb2NhbF9wdWJsX2NvdW50OiBudW1iZXIgb2YgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGVcbiAgKiBAcmNfZGVzdHM6IGRlc3RpbmF0aW9uIG5vZGUgY291bnRlclxuICAqIEBzbmRfbnh0OiBuZXh0IHNlcXVlbmNlIG51bWJlciB0byBiZSB1c2VkXG5AQCAtMTA3LDcgJiM0MzsxMDYsNiBAQCBzdHJ1Y3QgbmFtZV90YWJsZSB7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCBzZXJ2aWNlc1tUSVBDX05BTUVUQkxfU0laRV07XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGVfc2NvcGU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfc2NvcGU7XG4tXHRyd2xvY2tfdCBjbHVzdGVyX3Njb3BlX2xvY2s7XG4gXHR1MzIgbG9jYWxfcHVibF9jb3VudDtcbiBcdHUzMiByY19kZXN0cztcbiBcdHUzMiBzbmRfbnh0O1xuQEAgLTEyNiwxMyAmIzQzOzEyNCwxNSBAQCBib29sIHRpcGNfbmFtZXRibF9sb29rdXBfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuJiM0MztcdFx0XHRcdFx0IHUzMiBrZXksIGludCAqZXJyKTtcbiB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHQgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpO1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuIFx0XHRcdFx0XHQgICAgIHUzMiBrZXkpO1xuJiM0MztpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uZXQuYyBiL25ldC90aXBjL25ldC5jXG5pbmRleCA3ZTY1ZDBiMGM0YThkLi43YTJjMWU2N2FjYTNkIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25ldC5jXG5AQCAtMTEwLDExICYjNDM7MTEwLDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xuIFxuIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiYjNDM7XG4gXHRpZiAodGlwY19vd25faWQobmV0KSkge1xuIFx0XHRwcl9pbmZvKFwmIzM0O0Nhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcdHByX2luZm8oXCYjMzQ7U3RhcnRlZCBpbiBuZXR3b3JrIG1vZGVcXG5cJiMzNDspO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XG4gXG4gXHRpZiAobm9kZV9pZClcbiBcdFx0dGlwY19zZXRfbm9kZV9pZChuZXQsIG5vZGVfaWQpO1xuQEAgLTEyNSw4ICYjNDM7MTI4LDggQEAgaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpXG4gXG4gc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiB7XG4tXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrID0gezAsIGFkZHJ9O1xuJiM0MztcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4gXG4gXHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcbkBAIC0xMzgsNyAmIzQzOzE0MSwxMSBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuIFx0dGlwY19uYW1lZF9yZWluaXQobmV0KTtcbiBcdHRpcGNfc2tfcmVpbml0KG5ldCk7XG4gXHR0aXBjX21vbl9yZWluaXRfc2VsZihuZXQpO1xuLVx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIGFkZHIpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMSk7XG4mIzQzO1x0LyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUmIzM5O3MgdGltZXJcbiYjNDM7XHQgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLlxuJiM0MztcdCAqL1xuJiM0MztcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBhZGRyLCBOVUxMKTtcbiB9XG4gXG4gdm9pZCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmNcbmluZGV4IDY4M2ExMzZlNTNlZmMuLmNhNGE4ZmNjYTY0NDcgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9ub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuY1xuQEAgLTExMSw2ICYjNDM7MTExLDcgQEAgc3RydWN0IHRpcGNfYmNsaW5rX2VudHJ5IHtcbiAgKiBAcGVlcl9uZXQ6IHBlZXImIzM5O3MgbmV0IG5hbWVzcGFjZVxuICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKVxuICAqIEBjcnlwdG9fcng6IFJYIGNyeXB0byBoYW5kbGVyXG4mIzQzOyAqIEBkaXN0X2J1bGs6IGZsYWcgdG8gcmVkaXN0cmlidXRlIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zXG4gICovXG4gc3RydWN0IHRpcGNfbm9kZSB7XG4gXHR1MzIgYWRkcjtcbkBAIC0xNDUsNiAmIzQzOzE0Niw3IEBAIHN0cnVjdCB0aXBjX25vZGUge1xuICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE9cbiBcdHN0cnVjdCB0aXBjX2NyeXB0byAqY3J5cHRvX3J4O1xuICNlbmRpZlxuJiM0MztcdGF0b21pY190IGRpc3RfYnVsaztcbiB9O1xuIFxuIC8qIE5vZGUgRlNNIHN0YXRlcyBhbmQgZXZlbnRzOlxuQEAgLTM0NSw2ICYjNDM7MzQ3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuIFx0cmV0dXJuIG5vZGU7XG4gfVxuIFxuJiM0Mzt2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGlwY19ub2RlICpub2RlO1xuJiM0MztcbiYjNDM7XHRub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBhZGRyKTtcbiYjNDM7XHRpZiAobm9kZSlcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VkaXN0X2J1bGssIDEpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHRpcGNfbm9kZV9maW5kX2J5X2lkIC0gbG9jYXRlIHNwZWNpZmllZCBub2RlIG9iamVjdCBieSBpdHMgMTI4LWJpdCBpZFxuICAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgd2hlbiBhIGRpc2NvdmVyeSByZXF1ZXN0IGZhaWxlZFxuICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsXG5AQCAtMzkzLDYgJiM0Mzs0MDQsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9ja19mYXN0KHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bi1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRpcGNfbm9kZV9kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgYmVhcmVyX2lkO1xuJiM0MztcbiYjNDM7XHRmb3IgKGJlYXJlcl9pZCA9IDA7IGJlYXJlcl9pZCBcdTAwM2MgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCYjNDM7JiM0MzspXG4mIzQzO1x0XHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdF9fcmVsZWFzZXMobi1cdTAwM2Vsb2NrKVxuIHtcbkBAIC00MDIsNiAmIzQzOzQyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKnB1YmxfbGlzdDtcbiBcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xuIFx0dTMyIGJlYXJlcl9pZCwgbm9kZTtcbiYjNDM7XHRpbnQgcmMgPSAwLCBlcnIgPSAwO1xuIFxuIFx0aWYgKGxpa2VseSghZmxhZ3MpKSB7XG4gXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuQEAgLTQyNSwxNiAmIzQzOzQ0NSwyNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHRcdHRpcGNfcHVibF9ub3RpZnkobmV0LCBwdWJsX2xpc3QsIG5vZGUsIG4tXHUwMDNlY2FwYWJpbGl0aWVzKTtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTk9ERV9VUClcbi1cdFx0dGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuJiM0MztcdFx0cmMgPSB0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFRJUENfTk9USUZZX0xJTktfVVApIHtcbiBcdFx0dGlwY19tb25fcGVlcl91cChuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4tXHRcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBzay5yZWYpO1xuJiM0MztcdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZiwgXHUwMDI2ZXJyKTtcbiBcdH1cbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTElOS19ET1dOKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4gXHRcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0LyogTWVtb3J5IGFsbG9jYXRpb24gaGFzIGZhaWxlZC4gQnJpbmcgdGhlIG5vZGUgZG93biB0byBzdGFydCBvdmVyIGJ1bGtcbiYjNDM7XHQgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHR0aXBjX25vZGVfZG93bihuKTtcbiYjNDM7XHRlbHNlIGlmIChlcnIgPT0gLUVOT0JVRlMpXG4mIzQzO1x0XHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfYXNzaWduX3BlZXJfbmV0KHN0cnVjdCB0aXBjX25vZGUgKm4sIHUzMiBoYXNoX21peGVzKVxuQEAgLTU2NCw2ICYjNDM7NTkyLDcgQEAgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLCB1OCAqcGVlcl9pZCxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXB1YmxfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZWNvbm5fc2tzKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNm4tXHUwMDNlZGlzdF9idWxrLCAwKTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5uYW1lZHEpO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5LmlucHV0cTEpO1xuIFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkuYXJydnEpO1xuQEAgLTgwMyw3ICYjNDM7ODMyLDggQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRzdHJ1Y3QgdGlwY19ub2RlICpuID0gdGltZXJfY29udGFpbmVyX29mKG4sIHQsIHRpbWVyKTtcbiBcdHN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCB4bWl0cTtcbi1cdGludCByZW1haW5zID0gbi1cdTAwM2VsaW5rX2NudDtcbiYjNDM7XHRpbnQgcmVtYWlucyA9IDA7XG4mIzQzO1x0aW50IGRpc3RfcmMgPSAwO1xuIFx0aW50IGJlYXJlcl9pZDtcbiBcdGludCByYyA9IDA7XG4gXG5AQCAtODE0LDYgJiM0Mzs4NDQsOSBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuJiM0MztcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCkpXG4mIzQzO1x0XHRkaXN0X3JjID0gdGlwY19uYW1lZF9kaXN0cmlidXRlKG4tXHUwMDNlbmV0LCBuLVx1MDAzZWFkZHIpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXG4gXHQvKiBUYWtlIGFueSBjcnlwdG8ga2V5IHJlbGF0ZWQgYWN0aW9ucyBmaXJzdCAqL1xuIFx0dGlwY19jcnlwdG9fdGltZW91dChuLVx1MDAzZWNyeXB0b19yeCk7XG5AQCAtODI1LDYgJiM0Mzs4NTgsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdCAqL1xuIFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbiBcdG4tXHUwMDNla2VlcGFsaXZlX2ludHYgPSAxMDAwMDtcbiYjNDM7XHRyZW1haW5zID0gbi1cdTAwM2VsaW5rX2NudDtcbiBcdHRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTtcbiBcdGZvciAoYmVhcmVyX2lkID0gMDsgcmVtYWlucyBcdTAwMjZcdTAwMjYgKGJlYXJlcl9pZCBcdTAwM2MgTUFYX0JFQVJFUlMpOyBiZWFyZXJfaWQmIzQzOyYjNDM7KSB7XG4gXHRcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XG5AQCAtODM1LDExICYjNDM7ODY5LDEzIEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0XHRcdHRpcGNfbm9kZV9jYWxjdWxhdGVfdGltZXIobiwgbGUtXHUwMDNlbGluayk7XG4gXHRcdFx0cmMgPSB0aXBjX2xpbmtfdGltZW91dChsZS1cdTAwM2VsaW5rLCBcdTAwMjZ4bWl0cSk7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bGUtXHUwMDNlbG9jayk7XG4tXHRcdFx0cmVtYWlucy0tO1xuJiM0MztcdFx0XHRpZiAoZGlzdF9yYyAhPSAtRU5PQlVGUylcbiYjNDM7XHRcdFx0XHRyZW1haW5zLS07XG4gXHRcdH1cbiBcdFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0XHR0aXBjX2JlYXJlcl94bWl0KG4tXHUwMDNlbmV0LCBiZWFyZXJfaWQsIFx1MDAyNnhtaXRxLCBcdTAwMjZsZS1cdTAwM2VtYWRkciwgbik7XG4tXHRcdGlmIChyYyBcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxuJiM0MztcdFx0LyogRm9yY2UgdGhlIG5vZGUgZG93biBpbiBjYXNlIHRoZSByZWRpc3RyaWJ1dGlvbiBmYWlsZWQgKi9cbiYjNDM7XHRcdGlmICgocmMgXHUwMDI2IFRJUENfTElOS19ET1dOX0VWVCkgfHwgKGRpc3RfcmMgPT0gLUVOT0JVRlMpKVxuIFx0XHRcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XG4gXHR9XG4gXHRtb2RfdGltZXIoXHUwMDI2bi1cdTAwM2V0aW1lciwgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKG4tXHUwMDNla2VlcGFsaXZlX2ludHYpKTtcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmhcbmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9ub2RlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuaFxuQEAgLTEyOCw0ICYjNDM7MTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCB0aXBjX25sX25vZGVfZmx1c2hfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuICNlbmRpZlxuIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7XG4mIzQzO3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZDVkNzBlYjIzMGI1Ni4uNmI4M2JkZmM0MzljMyAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTI5MTksNyAmIzQzOzI5MTksNyBAQCBzdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbiBcdFx0cmV0dXJuIC1FQUREUklOVVNFO1xuIFx0c2thZGRyLnJlZiA9IHRzay1cdTAwM2Vwb3J0aWQ7XG4gXHRza2FkZHIubm9kZSA9IHRpcGNfb3duX2FkZHIobmV0KTtcbi1cdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcdTAwMjZza2FkZHIsIGtleSk7XG4mIzQzO1x0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5LCBOVUxMKTtcbiBcdGlmICh1bmxpa2VseSghcCkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19uYW1lZF9kaXN0cmlidXRlJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZWRfbm9kZV91cCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0YmxfcHVibGlzaCYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiYjMzQ7LAogICAgJiMzNDt0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVElQQyBzdWJzeXN0ZW0gdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PQlVGUykgZHVyaW5nIG5hbWUgZGlzdHJpYnV0aW9uIGFuZCBwdWJsaWNhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgc3RhdGUgZmxhZ3MgdG8gYHRpcGNfbmV0YCBhbmQgYHRpcGNfbm9kZWAgYW5kIG1vZGlmaWVzIHRoZSBub2RlIHRpbWVvdXQgYW5kIHVubG9jayBsb2dpYyB0byBoYW5kbGUgcmVkaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBUSVBDIGxvZ2ljLCB3aGljaCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgdGhlIEFGX1RJUEMgc29ja2V0IGZhbWlseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA2ODdlMTQ1OWVlNzMxYTBkNjMyYjU2NTkwZWY3MGExMTdlMzgxNTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwMzo1NDoxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuYwppbmRleCAzMTU5NzVjM2JlODE4Li4wZjFkM2RkZWFlMDk1IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvY29yZS5jCkBAIC02MSw2ICYjNDM7NjEsOSBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgdGlwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJdG4tJmd0O3RyaWFsX2FkZHIgPSAwOwogCXRuLSZndDthZGRyX3RyaWFsX2VuZCA9IDA7CiAJdG4tJmd0O2NhcGFiaWxpdGllcyA9IFRJUENfTk9ERV9DQVBBQklMSVRJRVM7CiYjNDM7CXRuLSZndDtudF9zdG9wID0gZmFsc2U7CiYjNDM7CXRuLSZndDtudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3RuLSZndDtub2RlX2FkZHJfc2V0LCAwKTsKIAlJTklUX1dPUksoJmFtcDt0bi0mZ3Q7d29yaywgdGlwY19uZXRfZmluYWxpemVfd29yayk7CiAJbWVtc2V0KHRuLSZndDtub2RlX2lkLCAwLCBzaXplb2YodG4tJmd0O25vZGVfaWQpKTsKIAltZW1zZXQodG4tJmd0O25vZGVfaWRfc3RyaW5nLCAwLCBzaXplb2YodG4tJmd0O25vZGVfaWRfc3RyaW5nKSk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmggYi9uZXQvdGlwYy9jb3JlLmgKaW5kZXggOWNlNWY5ZmY2Y2MwMy4uOTc1YjFkNDgxODZlNiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2NvcmUuaApAQCAtMTQ1LDYgJiM0MzsxNDUsMTIgQEAgc3RydWN0IHRpcGNfbmV0IHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAkvKiBUaGUgbnVtYmVycyBvZiB3b3JrIHF1ZXVlcyBpbiBzY2hlZHVsZSAqLwogCWF0b21pY190IHdxX2NvdW50OwomIzQzOwkvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIG5vZGUmIzM5O3MgYWRkcmVzcyBpcyBzZXQgKi8KJiM0MzsJYXRvbWljX3Qgbm9kZV9hZGRyX3NldDsKJiM0MzsJLyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqLwomIzQzOwlib29sIG50X3N0b3A7CiYjNDM7CS8qIE5vZGUmIzM5O3Mgc2VsZiBhZGRyZXNzIHB1YmxpY2F0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbmFtZSB0YWJsZSAqLwomIzQzOwlib29sIG50X3NlbGZfbm9kZV9leGlzdDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRpcGNfbmV0ICp0aXBjX25ldChzdHJ1Y3QgbmV0ICpuZXQpCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKaW5kZXggYmE0ZjQ5MDZlMTNiNy4uMDYwYzQyZDhmZGE1NCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwpAQCAtOTUsOSAmIzQzOzk1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCkKIAkJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtwLSZndDtiaW5kaW5nX25vZGUsICZhbXA7bnQtJmd0O25vZGVfc2NvcGUpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0Jd3JpdGVfbG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmFtcDtwLSZndDtiaW5kaW5nX25vZGUsICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUpOwotCXdyaXRlX3VubG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwogCXNrYiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIElURU1fU0laRSwgMCk7CiAJaWYgKCFza2IpIHsKIAkJcHJfd2FybigmIzM0O1B1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXG4mIzM0Oyk7CkBAIC0xMjEsOSAmIzQzOzExOSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKQogCXN0cnVjdCBkaXN0cl9pdGVtICppdGVtOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQl3cml0ZV9sb2NrX2JoKCZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGVfbG9jayk7CiAJbGlzdF9kZWwoJmFtcDtwLSZndDtiaW5kaW5nX25vZGUpOwotCXdyaXRlX3VubG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwogCWlmIChwLSZndDtzY29wZSA9PSBUSVBDX05PREVfU0NPUEUpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xNDYsOSAmIzQzOzE0MiwxNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCkKICAqIEBkbm9kZTogbm9kZSB0byBiZSB1cGRhdGVkCiAgKiBAcGxzOiBsaW5rZWQgbGlzdCBvZiBwdWJsaWNhdGlvbiBpdGVtcyB0byBiZSBwYWNrZWQgaW50byBidWZmZXIgY2hhaW4KICAqIEBzZXFubzogc2VxdWVuY2UgbnVtYmVyIGZvciB0aGlzIG1lc3NhZ2UKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzCiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZQomIzQzOyAqCiAgKi8KLXN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAotCQkJICAgICB1MzIgZG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBscywgdTE2IHNlcW5vKQomIzQzO3N0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiYjNDM7CQkJICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pCiB7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwpAQCAtMTY0LDggJiM0MzsxNjUsOSBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKIAkJCXNrYiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIG1zZ19yZW0sCiAJCQkJCQlkbm9kZSk7CiAJCQlpZiAoIXNrYikgewomIzQzOwkJCQlfX3NrYl9xdWV1ZV9wdXJnZShsaXN0KTsKIAkJCQlwcl93YXJuKCYjMzQ7QnVsayBwdWJsaWNhdGlvbiBmYWlsdXJlXG4mIzM0Oyk7Ci0JCQkJcmV0dXJuOwomIzQzOwkJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCQl9CiAJCQloZHIgPSBidWZfbXNnKHNrYik7CiAJCQltc2dfc2V0X2JjX2Fja19pbnZhbGlkKGhkciwgdHJ1ZSk7CkBAIC0xOTUsNiAmIzQzOzE5Nyw4MiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKIAloZHIgPSBidWZfbXNnKHNrYl9wZWVrX3RhaWwobGlzdCkpOwogCW1zZ19zZXRfbGFzdF9idWxrKGhkcik7CiAJbXNnX3NldF9uYW1lZF9zZXFubyhoZHIsIHNlcW5vKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIF9fdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gYnVpbGQgYSBsaXN0IG9mIHB1YmxpY2F0aW9ucyBuZWVkIHRvIGJlIGRpc3RyaWJ1dGVkCiYjNDM7ICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2UKJiM0MzsgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGUKJiM0MzsgKiBAaGVhZDogbGlzdCBvZiBwdWJsaWNhdGlvbnMKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzCiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZQomIzQzOyAqCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwKJiM0MzsJCQkJICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGVhZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsKJiM0MzsJLyogTmFtZSB0YWJsZSBoYXMgYmVlbiBkZWxldGVkIGFmdGVyIG5hbWVzcGFjZSB0ZWFyZG93biBvcgomIzQzOwkgKiBUSVBDIG1vZHVsZSBleGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHVubGlrZWx5KHRuLSZndDtudF9zdG9wKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBOb2RlJiMzOTtzIHNlbGYgYWRkcmVzcyBpcyBub3Qgc2V0IHlldCAqLwomIzQzOwlpZiAoIWF0b21pY19yZWFkKCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQpKSB7CiYjNDM7CQkvKiBEZWZlciB0aGUgZGlzdHJpYnV0aW9uIHRvIG5vZGUmIzM5O3MgdGltZXIgKi8KJiM0MzsJCXRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKG5ldCwgZG5vZGUpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRuLSZndDtudF9zZWxmX25vZGVfZXhpc3QpCiYjNDM7CQlnb3RvIGRpc3RyaWJ1dGU7CiYjNDM7CiYjNDM7CWlmICh0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihuZXQpKQomIzQzOwkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwomIzQzOwl0bi0mZ3Q7bnRfc2VsZl9ub2RlX2V4aXN0ID0gdHJ1ZTsKJiM0MzsKJiM0MztkaXN0cmlidXRlOgomIzQzOwlpZiAobmFtZWRfZGlzdHJpYnV0ZShuZXQsIGhlYWQsIGRub2RlLAomIzQzOwkJCSAgICAgJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSwgbnQtJmd0O3NuZF9ueHQpID09IC1FTk9CVUZTKQomIzQzOwkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlCiYjNDM7ICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2UKJiM0MzsgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGUKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzCiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZQomIzQzOyAqCiYjNDM7ICovCiYjNDM7aW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7CiYjNDM7CWludCByYyA9IDA7CiYjNDM7CiYjNDM7CV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO2hlYWQpOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJcmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCAmYW1wO2hlYWQpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwomIzQzOwlpZiAoIXJjICZhbXA7JmFtcDsgIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO2hlYWQpKSB7CiYjNDM7CQlpZiAodGlwY19ub2RlX3htaXQobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAwKSA9PSAtRU5PQlVGUykKJiM0MzsJCQlyYyA9IC1FTk9CVUZTOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yMDIsMjUgJiM0MzsyODAsMzIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZQogICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiAgKiBAY2FwYWJpbGl0aWVzOiBwZWVyIG5vZGUmIzM5O3MgY2FwYWJpbGl0aWVzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgogICovCi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcykKJiM0MztpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwogCXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCBza19idWZmX2hlYWQgaGVhZDsKLQl1MTYgc2Vxbm87CiYjNDM7CWludCByYyA9IDA7CiAKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIAlpZiAoIShjYXBhYmlsaXRpZXMgJmFtcDsgVElQQ19OQU1FRF9CQ0FTVCkpCiAJCW50LSZndDtyY19kZXN0cyYjNDM7JiM0Mzs7Ci0Jc2Vxbm8gPSBudC0mZ3Q7c25kX254dDsKJiM0MzsKJiM0MzsJcmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCAmYW1wO2hlYWQpOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CWlmICghcmMgJmFtcDsmYW1wOyAhc2tiX3F1ZXVlX2VtcHR5KCZhbXA7aGVhZCkpIHsKJiM0MzsJCWlmICh0aXBjX25vZGVfeG1pdChuZXQsICZhbXA7aGVhZCwgZG5vZGUsIDApID09IC1FTk9CVUZTKQomIzQzOwkJCXJjID0gLUVOT0JVRlM7CiYjNDM7CX0KIAotCXJlYWRfbG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwotCW5hbWVkX2Rpc3RyaWJ1dGUobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlLCBzZXFubyk7Ci0JdGlwY19ub2RlX3htaXQobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAwKTsKLQlyZWFkX3VubG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwomIzQzOwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtNDE2LDUgJiM0Mzs1MDEsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldCkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlLCBiaW5kaW5nX25vZGUpCiAJCXAtJmd0O3NrLm5vZGUgPSBzZWxmOwogCW50LSZndDtyY19kZXN0cyA9IDA7CiYjNDM7CXRuLSZndDtudF9zdG9wID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaAppbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oCkBAIC02OSwxMSAmIzQzOzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHsKIAogc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7CiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7Ci12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7CiB2b2lkIHRpcGNfbmFtZWRfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbmFtZWRxLAogCQkgICAgdTE2ICpyY3Zfbnh0LCBib29sICpvcGVuKTsKIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTsKIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCwKIAkJICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpOwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuYwppbmRleCAyNTNjNzJkMTM2NmViLi4zYmIwY2U3ODNkYmRmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYywKIAogc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLAotCQkJCSAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwKQomIzQzOwkJCQkgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCwgaW50ICplcnIpCiB7CiAJc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIsICp0bXA7CiAJc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyOwpAQCAtMzM5LDEwICYjNDM7MzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJYm9vbCByZXMgPSBmYWxzZTsKIAl1MzIga2V5ID0gcC0mZ3Q7a2V5OwogCi0Jc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7Ci0JaWYgKCFzcikKJiM0MzsJaWYgKCFzcikgewomIzQzOwkJaWYgKGVycikKJiM0MzsJCQkqZXJyID0gLUVOT0JVRlM7CiAJCWdvdG8gIGV4aXQ7CiYjNDM7CX0KIAogCWZpcnN0ID0gbGlzdF9lbXB0eSgmYW1wO3NyLSZndDthbGxfcHVibCk7CiAKQEAgLTM1Myw2ICYjNDM7MzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIGJpbmQgZHVwbGljYXRlICV1LCV1LCV1LyV1OiV1LyV1XG4mIzM0OywKIAkJCQkgcC0mZ3Q7c3IudHlwZSwgcC0mZ3Q7c3IubG93ZXIsIHAtJmd0O3NyLnVwcGVyLAogCQkJCSBub2RlLCBwLSZndDtzay5yZWYsIGtleSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJKmVyciA9IC1FRVhJU1Q7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC0zNzEsNyAmIzQzOzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKCFyZXMpCiAJCXByX3dhcm4oJiMzNDtGYWlsZWQgdG8gYmluZCB0byAldSwldSwldVxuJiMzNDssCiAJCQlwLSZndDtzci50eXBlLCBwLSZndDtzci5sb3dlciwgcC0mZ3Q7c3IudXBwZXIpOwotCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTQ5MCw4ICYjNDM7NDkzLDEyIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAlzYyA9IHRpcGNfc2VydmljZV9maW5kKG5ldCwgdWEpOwogCWlmICghc2MpCiAJCXNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIHVhKTsKLQlpZiAoc2MgJmFtcDsmYW1wOyB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCkpCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKJiM0MzsJaWYgKHNjICZhbXA7JmFtcDsgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIE5VTEwpKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKIAkJcmV0dXJuIHA7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiAJa2ZyZWUocCk7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03NjAsMjQgJiM0Mzs3NjcsNDQgQEAgdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLAogLyogdGlwY19uYW1ldGJsX3B1Ymxpc2ggLSBhZGQgc2VydmljZSBiaW5kaW5nIHRvIG5hbWUgdGFibGUKICAqLwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKLQkJCQkJIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSkKJiM0MzsJCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCiYjNDM7CQkJCQkgdTMyIGtleSwgaW50ICplcnIpCiB7CiAJc3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7CiYjNDM7CXUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTsKIAlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnAgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwomIzQzOwlib29sIHByb3RvY29sX3R5cGUgPSBmYWxzZTsKIAl1MzIgcmNfZGVzdHM7CiAKJiM0MzsJaWYgKHVhLSZndDtzci50eXBlID09IFRJUENfTk9ERV9TVEFURSB8fCB1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHwKJiM0MzsJICAgIHVhLSZndDtzci50eXBlID09IFRJUENfVE9QX1NSVikKJiM0MzsJCXByb3RvY29sX3R5cGUgPSB0cnVlOwomIzQzOwogCXNwaW5fbG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwomIzQzOwlpZiAocHJvdG9jb2xfdHlwZSkKJiM0MzsJCWdvdG8gaW5zZXJ0OwogCi0JaWYgKG50LSZndDtsb2NhbF9wdWJsX2NvdW50ICZndDs9IFRJUENfTUFYX1BVQkwpIHsKLQkJcHJfd2FybigmIzM0O0JpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxuJiMzNDssIFRJUENfTUFYX1BVQkwpOwomIzQzOwkvKiBSZXNlcnZlIG9uZSBlbnRyeSBmb3Igbm9kZSBzdGF0ZSBzZXJ2aWNlIHR5cGUgYmVjYXVzZSBpdCBoYXMgY2x1c3RlcgomIzQzOwkgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJiMzOTtzCiYjNDM7CSAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLgomIzQzOwkgKi8KJiM0MzsJaWYgKG50LSZndDtsb2NhbF9wdWJsX2NvdW50ICZndDs9IG1heF91c2VyX3B1YikgewomIzQzOwkJcHJfd2FybigmIzM0O0JpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxuJiMzNDssIG1heF91c2VyX3B1Yik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKJiM0MztpbnNlcnQ6CiAJcCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5KTsKIAlpZiAocCkgewotCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CQkvKiBOb3QgY291bnQgbm9kZSBzdGF0ZSwgbGluayBzdGF0ZSBhbmQgdG9wb2xvZ3kgc2VydmVyIHR5cGVzCiYjNDM7CQkgKiBzbyB0aGF0IG1heGltdW0gbnQtJmd0O2xvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudAomIzQzOwkJICogcHJvdG9jb2wgc2VydmljZSB0eXBlcyBmcm9tIGJlaW5nIGluc2VydGVkIGludG8gdGhlIG5hbWUKJiM0MzsJCSAqIHRhYmxlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIXByb3RvY29sX3R5cGUpCiYjNDM7CQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7OwogCQlza2IgPSB0aXBjX25hbWVkX3B1Ymxpc2gobmV0LCBwKTsKIAl9CiAJcmNfZGVzdHMgPSBudC0mZ3Q7cmNfZGVzdHM7CkBAIC03ODYsOCAmIzQzOzgxMyw4MSBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCiAJaWYgKHNrYikKIAkJdGlwY19ub2RlX2Jyb2FkY2FzdChuZXQsIHNrYiwgcmNfZGVzdHMpOwomIzQzOwllbHNlIGlmIChwICZhbXA7JmFtcDsgKHAtJmd0O3Njb3BlID09IFRJUENfQ0xVU1RFUl9TQ09QRSkgJmFtcDsmYW1wOyBlcnIpCiYjNDM7CQkqZXJyID0gLUVOT0JVRlM7CiAJcmV0dXJuIHA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViIC0gaW5zZXJ0IHB1YmxpY2F0aW9uIG9mIG5vZGUmIzM5O3Mgc2VsZiBhZGRyZXNzCiYjNDM7ICogQG5ldDogbmV0d29yayBuYW1lc3BhY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybjoKJiM0MzsgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzCiYjNDM7ICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZQomIzQzOyAqCiYjNDM7ICovCiYjNDM7aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsJc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7CiYjNDM7CXN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjsKJiM0MzsJc3RydWN0IHRpcGNfc2VydmljZSAqc2M7CiYjNDM7CWJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgcHVibGljYXRpb24gKnA7CiYjNDM7CXN0cnVjdCB0aXBjX3VhZGRyIHVhOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJc2sucmVmID0gMDsKJiM0MzsJc2subm9kZSA9IHRuLSZndDtub2RlX2FkZHI7CiYjNDM7CXRpcGNfdWFkZHIoJmFtcDt1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsCiYjNDM7CQkgICBUSVBDX05PREVfU1RBVEUsIHRuLSZndDtub2RlX2FkZHIsIHRuLSZndDtub2RlX2FkZHIpOwomIzQzOwlzYyA9IHRpcGNfc2VydmljZV9maW5kKG5ldCwgJmFtcDt1YSk7CiYjNDM7CWlmICghc2MpIHsKJiM0MzsJCXNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsICZhbXA7dWEpOwomIzQzOwkJaWYgKCFzYykKJiM0MzsJCQlyZXR1cm4gLUVOT0JVRlM7CiYjNDM7CQlzY19jcmVhdGVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CXNyID0gdGlwY19zZXJ2aWNlX2ZpbmRfcmFuZ2Uoc2MsICZhbXA7dWEpOwomIzQzOwkvKiAxLiB0aXBjX25ldF9maW5hbGl6ZV93b3JrKCkgaXMgbm90IHNjaGVkdWxlZCBiZWNhdXNlIG9mIG5hbWVzcGFjZQomIzQzOwkgKiAgICB0ZWFyZG93bi4KJiM0MzsJICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIGZhaWxlZAomIzQzOwkgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC0mZ3Q7Y2x1c3Rlcl9zY29wZQomIzQzOwkgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KJiM0MzsJICogMy4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS0mZ3Q7IHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdAomIzQzOwkgKiAgICBleGVjdXRlZCB5ZXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXNyKSB7CiYjNDM7CQlwID0gdGlwY19wdWJsX2NyZWF0ZSgmYW1wO3VhLCAmYW1wO3NrLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJCWlmICghcCkKJiM0MzsJCQlnb3RvIGVycm9yOwogCiYjNDM7CQlpZiAoIXRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCAmYW1wO2VycikgJmFtcDsmYW1wOwomIzQzOwkJICAgIChlcnIgPT0gLUVOT0JVRlMpKSB7CiYjNDM7CQkJa2ZyZWUocCk7CiYjNDM7CQkJZ290byBlcnJvcjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDtwLSZndDtiaW5kaW5nX25vZGUsICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUpOwomIzQzOwkJZ290byBleGl0OwomIzQzO2Vycm9yOgomIzQzOwkJaWYgKHNjX2NyZWF0ZWQpIHsKJiM0MzsJCQlobGlzdF9kZWxfaW5pdF9yY3UoJmFtcDtzYy0mZ3Q7c2VydmljZV9saXN0KTsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKJiM0MzsJCQlrZnJlZV9yY3Uoc2MsIHJjdSk7CiYjNDM7CQkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwkJfQomIzQzOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT0JVRlM7CiYjNDM7CX0KJiM0MztleGl0OgomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtODEwLDcgJiM0Mzs5MTAsMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAKIAlwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpOwogCWlmIChwKSB7Ci0JCW50LSZndDtsb2NhbF9wdWJsX2NvdW50LS07CiYjNDM7CQlpZiAocC0mZ3Q7c3IudHlwZSAhPSBUSVBDX05PREVfU1RBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgIHAtJmd0O3NyLnR5cGUgIT0gVElQQ19MSU5LX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfVE9QX1NSVikKJiM0MzsJCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwogCQlza2IgPSB0aXBjX25hbWVkX3dpdGhkcmF3KG5ldCwgcCk7CiAJCWxpc3RfZGVsX2luaXQoJmFtcDtwLSZndDtiaW5kaW5nX3NvY2spOwogCQlrZnJlZV9yY3UocCwgcmN1KTsKQEAgLTg5OSw3ICYjNDM7MTAwMiw2IEBAIGludCB0aXBjX25hbWV0YmxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO250LSZndDtub2RlX3Njb3BlKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlKTsKLQlyd2xvY2tfaW5pdCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwogCXRuLSZndDtuYW1ldGJsID0gbnQ7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKIAlyZXR1cm4gMDsKQEAgLTkxOSw2ICYjNDM7MTAyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYykKIAlyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3IsIHRtcHIsICZhbXA7c2MtJmd0O3JhbmdlcywgdHJlZV9ub2RlKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsICZhbXA7c3ItJmd0O2FsbF9wdWJsLCBhbGxfcHVibCkgewogCQkJdGlwY19zZXJ2aWNlX3JlbW92ZV9wdWJsKHNyLCAmYW1wO3AtJmd0O3NrLCBwLSZndDtrZXkpOwomIzQzOwkJCWxpc3RfZGVsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlKTsKIAkJCWtmcmVlX3JjdShwLCByY3UpOwogCQl9CiAJCXJiX2VyYXNlX2F1Z21lbnRlZCgmYW1wO3NyLSZndDt0cmVlX25vZGUsICZhbXA7c2MtJmd0O3JhbmdlcywgJmFtcDtzcl9jYWxsYmFja3MpOwpAQCAtOTQ5LDYgJiM0MzsxMDUyLDggQEAgdm9pZCB0aXBjX25hbWV0Ymxfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpCiAJCQl0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7CiAJCX0KIAl9CiYjNDM7CXRuLSZndDtudF9zdG9wID0gdHJ1ZTsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAKIAkvKiBUT0RPOiBjbGVhciB0bi0mZ3Q7bmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oCmluZGV4IDdmZjZlZWViYWFlNjQuLmU3YTJjNTBmMDk5Y2YgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmgKQEAgLTk3LDcgJiM0Mzs5Nyw2IEBAIHN0cnVjdCBwdWJsaWNhdGlvbiB7CiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGUKICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzCiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIGR1cmluZyByZS1pbml0IG9mIG5hbWUgdGFibGUKLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZQogICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZQogICogQHJjX2Rlc3RzOiBkZXN0aW5hdGlvbiBub2RlIGNvdW50ZXIKICAqIEBzbmRfbnh0OiBuZXh0IHNlcXVlbmNlIG51bWJlciB0byBiZSB1c2VkCkBAIC0xMDcsNyAmIzQzOzEwNiw2IEBAIHN0cnVjdCBuYW1lX3RhYmxlIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBzZXJ2aWNlc1tUSVBDX05BTUVUQkxfU0laRV07CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlOwogCXN0cnVjdCBsaXN0X2hlYWQgY2x1c3Rlcl9zY29wZTsKLQlyd2xvY2tfdCBjbHVzdGVyX3Njb3BlX2xvY2s7CiAJdTMyIGxvY2FsX3B1YmxfY291bnQ7CiAJdTMyIHJjX2Rlc3RzOwogCXUzMiBzbmRfbnh0OwpAQCAtMTI2LDEzICYjNDM7MTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIAkJCSAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7CiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAotCQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTsKJiM0MzsJCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCiYjNDM7CQkJCQkgdTMyIGtleSwgaW50ICplcnIpOwogdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpOwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCiAJCQkJCSAgICAgdTMyIGtleSk7CiYjNDM7aW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldCk7CiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywKZGlmZiAtLWdpdCBhL25ldC90aXBjL25ldC5jIGIvbmV0L3RpcGMvbmV0LmMKaW5kZXggN2U2NWQwYjBjNGE4ZC4uN2EyYzFlNjdhY2EzZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmV0LmMKQEAgLTExMCwxMSAmIzQzOzExMCwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTsKIAogaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpCiB7CiYjNDM7CXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwomIzQzOwogCWlmICh0aXBjX293bl9pZChuZXQpKSB7CiAJCXByX2luZm8oJiMzNDtDYW5ub3QgY29uZmlndXJlIG5vZGUgaWRlbnRpdHkgdHdpY2VcbiYjMzQ7KTsKIAkJcmV0dXJuIC0xOwogCX0KIAlwcl9pbmZvKCYjMzQ7U3RhcnRlZCBpbiBuZXR3b3JrIG1vZGVcbiYjMzQ7KTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3RuLSZndDtub2RlX2FkZHJfc2V0LCAwKTsKIAogCWlmIChub2RlX2lkKQogCQl0aXBjX3NldF9ub2RlX2lkKG5ldCwgbm9kZV9pZCk7CkBAIC0xMjUsOCAmIzQzOzEyOCw4IEBAIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKQogCiBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKQogewotCXN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpOwogCXN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrID0gezAsIGFkZHJ9OwomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKIAlzdHJ1Y3QgdGlwY191YWRkciB1YTsKIAogCXRpcGNfdWFkZHIoJmFtcDt1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsCkBAIC0xMzgsNyAmIzQzOzE0MSwxMSBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKQogCXRpcGNfbmFtZWRfcmVpbml0KG5ldCk7CiAJdGlwY19za19yZWluaXQobmV0KTsKIAl0aXBjX21vbl9yZWluaXRfc2VsZihuZXQpOwotCXRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgJmFtcDt1YSwgJmFtcDtzaywgYWRkcik7CiYjNDM7CWF0b21pY19zZXQoJmFtcDt0bi0mZ3Q7bm9kZV9hZGRyX3NldCwgMSk7CiYjNDM7CS8qIFJlZGlzdHJpYnV0ZSBidWxrIG9mIHB1YmxpY2F0aW9ucyB2aWEgbm9kZS11cCBldmVudCBvciBub2RlJiMzOTtzIHRpbWVyCiYjNDM7CSAqIGlmIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgZmFpbHMuCiYjNDM7CSAqLwomIzQzOwl0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsICZhbXA7dWEsICZhbXA7c2ssIGFkZHIsIE5VTEwpOwogfQogCiB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5jIGIvbmV0L3RpcGMvbm9kZS5jCmluZGV4IDY4M2ExMzZlNTNlZmMuLmNhNGE4ZmNjYTY0NDcgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9ub2RlLmMKQEAgLTExMSw2ICYjNDM7MTExLDcgQEAgc3RydWN0IHRpcGNfYmNsaW5rX2VudHJ5IHsKICAqIEBwZWVyX25ldDogcGVlciYjMzk7cyBuZXQgbmFtZXNwYWNlCiAgKiBAcGVlcl9oYXNoX21peDogaGFzaCBmb3IgdGhpcyBwZWVyIChGSVhNRSkKICAqIEBjcnlwdG9fcng6IFJYIGNyeXB0byBoYW5kbGVyCiYjNDM7ICogQGRpc3RfYnVsazogZmxhZyB0byByZWRpc3RyaWJ1dGUgY2x1c3Rlci1zY29wZSBwdWJsaWNhdGlvbnMKICAqLwogc3RydWN0IHRpcGNfbm9kZSB7CiAJdTMyIGFkZHI7CkBAIC0xNDUsNiAmIzQzOzE0Niw3IEBAIHN0cnVjdCB0aXBjX25vZGUgewogI2lmZGVmIENPTkZJR19USVBDX0NSWVBUTwogCXN0cnVjdCB0aXBjX2NyeXB0byAqY3J5cHRvX3J4OwogI2VuZGlmCiYjNDM7CWF0b21pY190IGRpc3RfYnVsazsKIH07CiAKIC8qIE5vZGUgRlNNIHN0YXRlcyBhbmQgZXZlbnRzOgpAQCAtMzQ1LDYgJiM0MzszNDcsMTUgQEAgc3RhdGljIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiAJcmV0dXJuIG5vZGU7CiB9CiAKJiM0Mzt2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGlwY19ub2RlICpub2RlOwomIzQzOwomIzQzOwlub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBhZGRyKTsKJiM0MzsJaWYgKG5vZGUpCiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7bm9kZS0mZ3Q7ZGlzdF9idWxrLCAxKTsKJiM0Mzt9CiYjNDM7CiAvKiB0aXBjX25vZGVfZmluZF9ieV9pZCAtIGxvY2F0ZSBzcGVjaWZpZWQgbm9kZSBvYmplY3QgYnkgaXRzIDEyOC1iaXQgaWQKICAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgd2hlbiBhIGRpc2NvdmVyeSByZXF1ZXN0IGZhaWxlZAogICogdG8gZmluZCB0aGUgbm9kZSBieSBpdHMgMzItYml0IGlkLCBhbmQgaXMgbm90IHRpbWUgY3JpdGljYWwKQEAgLTM5Myw2ICYjNDM7NDA0LDE0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2tfZmFzdChzdHJ1Y3QgdGlwY19ub2RlICpuKQogCXdyaXRlX3VubG9ja19iaCgmYW1wO24tJmd0O2xvY2spOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbikKJiM0Mzt7CiYjNDM7CWludCBiZWFyZXJfaWQ7CiYjNDM7CiYjNDM7CWZvciAoYmVhcmVyX2lkID0gMDsgYmVhcmVyX2lkICZsdDsgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCYjNDM7JiM0MzspCiYjNDM7CQl0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbikKIAlfX3JlbGVhc2VzKG4tJmd0O2xvY2spCiB7CkBAIC00MDIsNiAmIzQzOzQyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbikKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwdWJsX2xpc3Q7CiAJc3RydWN0IHRpcGNfdWFkZHIgdWE7CiAJdTMyIGJlYXJlcl9pZCwgbm9kZTsKJiM0MzsJaW50IHJjID0gMCwgZXJyID0gMDsKIAogCWlmIChsaWtlbHkoIWZsYWdzKSkgewogCQl3cml0ZV91bmxvY2tfYmgoJmFtcDtuLSZndDtsb2NrKTsKQEAgLTQyNSwxNiAmIzQzOzQ0NSwyNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJCXRpcGNfcHVibF9ub3RpZnkobmV0LCBwdWJsX2xpc3QsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgVElQQ19OT1RJRllfTk9ERV9VUCkKLQkJdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi0mZ3Q7Y2FwYWJpbGl0aWVzKTsKJiM0MzsJCXJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi0mZ3Q7Y2FwYWJpbGl0aWVzKTsKIAogCWlmIChmbGFncyAmYW1wOyBUSVBDX05PVElGWV9MSU5LX1VQKSB7CiAJCXRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpOwotCQl0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsICZhbXA7dWEsICZhbXA7c2ssIHNrLnJlZik7CiYjNDM7CQl0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsICZhbXA7dWEsICZhbXA7c2ssIHNrLnJlZiwgJmFtcDtlcnIpOwogCX0KIAlpZiAoZmxhZ3MgJmFtcDsgVElQQ19OT1RJRllfTElOS19ET1dOKSB7CiAJCXRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7CiAJCXRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsICZhbXA7dWEsICZhbXA7c2ssIHNrLnJlZik7CiAJfQomIzQzOwomIzQzOwkvKiBNZW1vcnkgYWxsb2NhdGlvbiBoYXMgZmFpbGVkLiBCcmluZyB0aGUgbm9kZSBkb3duIHRvIHN0YXJ0IG92ZXIgYnVsawomIzQzOwkgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi4KJiM0MzsJICovCiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQl0aXBjX25vZGVfZG93bihuKTsKJiM0MzsJZWxzZSBpZiAoZXJyID09IC1FTk9CVUZTKQomIzQzOwkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgdGlwY19ub2RlX2Fzc2lnbl9wZWVyX25ldChzdHJ1Y3QgdGlwY19ub2RlICpuLCB1MzIgaGFzaF9taXhlcykKQEAgLTU2NCw2ICYjNDM7NTkyLDcgQEAgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLCB1OCAqcGVlcl9pZCwKIAlJTklUX0xJU1RfSEVBRCgmYW1wO24tJmd0O2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7bi0mZ3Q7cHVibF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO24tJmd0O2Nvbm5fc2tzKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO24tJmd0O2Rpc3RfYnVsaywgMCk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO24tJmd0O2JjX2VudHJ5Lm5hbWVkcSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO24tJmd0O2JjX2VudHJ5LmlucHV0cTEpOwogCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO24tJmd0O2JjX2VudHJ5LmFycnZxKTsKQEAgLTgwMyw3ICYjNDM7ODMyLDggQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJc3RydWN0IHRpcGNfbm9kZSAqbiA9IHRpbWVyX2NvbnRhaW5lcl9vZihuLCB0LCB0aW1lcik7CiAJc3RydWN0IHRpcGNfbGlua19lbnRyeSAqbGU7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB4bWl0cTsKLQlpbnQgcmVtYWlucyA9IG4tJmd0O2xpbmtfY250OwomIzQzOwlpbnQgcmVtYWlucyA9IDA7CiYjNDM7CWludCBkaXN0X3JjID0gMDsKIAlpbnQgYmVhcmVyX2lkOwogCWludCByYyA9IDA7CiAKQEAgLTgxNCw2ICYjNDM7ODQ0LDkgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJaWYgKGF0b21pY194Y2hnKCZhbXA7bi0mZ3Q7ZGlzdF9idWxrLCAwKSkKJiM0MzsJCWRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi0mZ3Q7bmV0LCBuLSZndDthZGRyKTsKJiM0MzsKICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE8KIAkvKiBUYWtlIGFueSBjcnlwdG8ga2V5IHJlbGF0ZWQgYWN0aW9ucyBmaXJzdCAqLwogCXRpcGNfY3J5cHRvX3RpbWVvdXQobi0mZ3Q7Y3J5cHRvX3J4KTsKQEAgLTgyNSw2ICYjNDM7ODU4LDcgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJICovCiAJdGlwY19ub2RlX3JlYWRfbG9jayhuKTsKIAluLSZndDtrZWVwYWxpdmVfaW50diA9IDEwMDAwOwomIzQzOwlyZW1haW5zID0gbi0mZ3Q7bGlua19jbnQ7CiAJdGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pOwogCWZvciAoYmVhcmVyX2lkID0gMDsgcmVtYWlucyAmYW1wOyZhbXA7IChiZWFyZXJfaWQgJmx0OyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCYjNDM7JiM0MzspIHsKIAkJdGlwY19ub2RlX3JlYWRfbG9jayhuKTsKQEAgLTgzNSwxMSAmIzQzOzg2OSwxMyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIAkJCXRpcGNfbm9kZV9jYWxjdWxhdGVfdGltZXIobiwgbGUtJmd0O2xpbmspOwogCQkJcmMgPSB0aXBjX2xpbmtfdGltZW91dChsZS0mZ3Q7bGluaywgJmFtcDt4bWl0cSk7CiAJCQlzcGluX3VubG9ja19iaCgmYW1wO2xlLSZndDtsb2NrKTsKLQkJCXJlbWFpbnMtLTsKJiM0MzsJCQlpZiAoZGlzdF9yYyAhPSAtRU5PQlVGUykKJiM0MzsJCQkJcmVtYWlucy0tOwogCQl9CiAJCXRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTsKIAkJdGlwY19iZWFyZXJfeG1pdChuLSZndDtuZXQsIGJlYXJlcl9pZCwgJmFtcDt4bWl0cSwgJmFtcDtsZS0mZ3Q7bWFkZHIsIG4pOwotCQlpZiAocmMgJmFtcDsgVElQQ19MSU5LX0RPV05fRVZUKQomIzQzOwkJLyogRm9yY2UgdGhlIG5vZGUgZG93biBpbiBjYXNlIHRoZSByZWRpc3RyaWJ1dGlvbiBmYWlsZWQgKi8KJiM0MzsJCWlmICgocmMgJmFtcDsgVElQQ19MSU5LX0RPV05fRVZUKSB8fCAoZGlzdF9yYyA9PSAtRU5PQlVGUykpCiAJCQl0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpOwogCX0KIAltb2RfdGltZXIoJmFtcDtuLSZndDt0aW1lciwgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKG4tJmd0O2tlZXBhbGl2ZV9pbnR2KSk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmgKaW5kZXggMTU0YTViYmIwZDI5ZC4uMGY3NzdjZmU3YzAxZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25vZGUuaApAQCAtMTI4LDQgJiM0MzsxMjgsNSBAQCBpbnQgdGlwY19ubF9ub2RlX3NldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiBpbnQgdGlwY19ubF9ub2RlX2ZsdXNoX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKICNlbmRpZgogdm9pZCB0aXBjX25vZGVfcHJlX2NsZWFudXBfbmV0KHN0cnVjdCBuZXQgKmV4aXRfbmV0KTsKJiM0Mzt2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zb2NrZXQuYyBiL25ldC90aXBjL3NvY2tldC5jCmluZGV4IGQ1ZDcwZWIyMzBiNTYuLjZiODNiZGZjNDM5YzMgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3NvY2tldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL3NvY2tldC5jCkBAIC0yOTE5LDcgJiM0MzsyOTE5LDcgQEAgc3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY191YWRkciAqdWEpCiAJCXJldHVybiAtRUFERFJJTlVTRTsKIAlza2FkZHIucmVmID0gdHNrLSZndDtwb3J0aWQ7CiAJc2thZGRyLm5vZGUgPSB0aXBjX293bl9hZGRyKG5ldCk7Ci0JcCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsICZhbXA7c2thZGRyLCBrZXkpOwomIzQzOwlwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgJmFtcDtza2FkZHIsIGtleSwgTlVMTCk7CiAJaWYgKHVubGlrZWx5KCFwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NDIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVElQQyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiB0aGUgTGludXgga2VybmVsJiMzOTtzIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikgc3Vic3lzdGVtLiBMb29rcyBsaWtlIGl0IHRvdWNoZXMgYSBzaWduaWZpY2FudCBjaHVuayBvZiB0aGUgY29yZSwgaGl0dGluZyBhIGJ1bmNoIG9mIGZpbGVzOiBgY29yZS5jL2hgLCBgbmFtZV9kaXN0ci5jL2hgLCBgbmFtZV90YWJsZS5jL2hgLCBgbmV0LmNgLCBgbm9kZS5jL2hgLCBhbmQgYHNvY2tldC5jYC4gQ2xlYXJseSwgdGhpcyBpcyBhIGRlZXAgZGl2ZSBpbnRvIFRJUEMmIzM5O3MgaW50ZXJuYWxzLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaW1wcm92aW5nIGVycm9yIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIChgLUVOT0JVRlNgKSB3aXRoaW4gYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAgYW5kIGB0aXBjX25hbWV0YmxfcHVibGlzaGAuIFNtYXJ0IG1vdmUuIFRob3NlIGtpbmRzIG9mIGVycm9ycyBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgc2lkZSBlZmZlY3RzIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBpbiBhIGNvbW11bmljYXRpb24gc3lzdGVtLiBQbHVzLCBJIHNlZSBzb21lIG5ldyBmbGFncyBiZWluZyBhZGRlZCB0byBgdGlwY19uZXRgIGFuZCBgdGlwY19ub2RlYCwgd2hpY2ggaXMgb2Z0ZW4gYW4gaW5kaWNhdG9yIG9mIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgVElQQyBjb3JlIGxvZ2ljIGl0c2VsZi4KCkdpdmVuIHRoYXQgVElQQyBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBzb2NrZXQgQVBJIChgQUZfVElQQ2ApLCB0aGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgcmVhbGx5IGZvY3VzIG9uIGFyZWFzIHdoZXJlIHRoZXNlIG5ldyBlcnJvci1oYW5kbGluZyBwYXRocyBjb21lIGludG8gcGxheS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQgYXJlOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYF9fdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AsIGB0aXBjX25vZGVfdGltZW91dGAsIGB0aXBjX25vZGVfd3JpdGVfdW5sb2NrYCwgYW5kIGB0aXBjX25ldF9maW5hbGl6ZWAuIEkmIzM5O2xsIHdhbnQgdG8gdGFyZ2V0IHRoZXNlIGZ1bmN0aW9ucy4KCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgKGBuZXQvdGlwYy9LY29uZmlnYCkgdG8gZW5zdXJlIHRoYXQgVElQQyBpcyBwcm9wZXJseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLgoKQWZ0ZXIgdGhhdCwgbGV0JiMzOTtzIGFsc28gZG8gYSBxdWljayBjb2RlIHNlYXJjaCB0byB2ZXJpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVElQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC90aXBjL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZy01LVxubmV0L3RpcGMvS2NvbmZpZzo2Om1lbnVjb25maWcgVElQQ1xubmV0L3RpcGMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFRJUEMgUHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTIzLVxubmV0L3RpcGMvS2NvbmZpZzoyNDpjb25maWcgVElQQ19NRURJQV9JQlxubmV0L3RpcGMvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvdGlwYy9LY29uZmlnLTI5LVx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cbm5ldC90aXBjL0tjb25maWc6MzA6Y29uZmlnIFRJUENfTUVESUFfVURQXG5uZXQvdGlwYy9LY29uZmlnLTMxLVx0Ym9vbCBcJiMzNDtJUC9VRFAgbWVkaWEgdHlwZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3RpcGMvS2NvbmZpZy0zNy1cbm5ldC90aXBjL0tjb25maWc6Mzg6Y29uZmlnIFRJUENfQ1JZUFRPXG5uZXQvdGlwYy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90aXBjL0tjb25maWctNTItXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcbm5ldC90aXBjL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjY3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVElQQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBgVElQQ2AgY29uZmlnIGlzIHRoZSBjb3JlLCB0aGUgY2VudHJhbCBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcywgZmlndXJlIG91dCB3aGF0IG90aGVyIHBpZWNlcyBvZiB0aGUgc3lzdGVtIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIHRoaXMgdGhpbmcgdG8gd29yay4gTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBgbmV0L3RpcGMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgdHlwaWNhbCBwbGFjZSBmb3IgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGRldGFpbHMsIGVzcGVjaWFsbHkgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgb3V0IHdoYXQgb3RoZXIgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgb3Igd2hhdCBjb25kaXRpb25zIG11c3QgYmUgbWV0IGZvciBgVElQQ2AgdG8gYmUgcmVsZXZhbnQgb3IgZXZlbiBidWlsZGFibGUuIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIHRoYXQgS2NvbmZpZyBmaWxlIGhvbGRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRJUEMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFRJUENcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBUSVBDIFByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhlIFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbiAoVElQQykgcHJvdG9jb2wgaXNcbiAgMTE6XHRcdCAgc3BlY2lhbGx5IGRlc2lnbmVkIGZvciBpbnRyYSBjbHVzdGVyIGNvbW11bmljYXRpb24uIFRoaXMgcHJvdG9jb2xcbiAgMTI6XHRcdCAgb3JpZ2luYXRlcyBmcm9tIEVyaWNzc29uIHdoZXJlIGl0IGhhcyBiZWVuIHVzZWQgaW4gY2FycmllciBncmFkZVxuICAxMzpcdFx0ICBjbHVzdGVyIGFwcGxpY2F0aW9ucyBmb3IgbWFueSB5ZWFycy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVGhpcyBwcm90b2NvbCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoXG4gIDE4Olx0XHQgIGNhbiBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcbiAgMTk6XHRcdCAgd2FudCkuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlwYy4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdFxuICAyMDpcdFx0ICBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XHUwMDNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTczCgkJCQkJCQlvdXRwdXQ6IDE4NQoJCQkJCQkJdGhvdWdodHM6IDc2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVElQQyBEZXBlbmRlbmNpZXMgYW5kIENvcmUgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgdG91Y2hlcyB0aGUgVElQQyBzdWJzeXN0ZW0sIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgVElQQyBkZXBlbmRzIG9uIElORVQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBhcyBhIHJlc3VsdCBvZiB0aGVzZSBjaGFuZ2VzLiBNeSBmaXJzdCBwYXNzIHNob3dzIHRoZXNlOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGFuZCBgdGlwY19ub2RlX3NldF9kaXN0X2J1bGtgLgoKTm93LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMsIHNpbmNlIHRob3NlIGFyZSB0aGUgb25lcyBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24uIEkmIzM5O20gc2VlaW5nIGZyb20gYG5ldC90aXBjL25hbWVfZGlzdHIuY2AgdGhhdCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAgYXJlIGluZGVlZCBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gIFNpbWlsYXJseSwgZnJvbSBgbmV0L3RpcGMvbmFtZV90YWJsZS5jYCwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhcmUgbm9uLXN0YXRpYy4gIEZpbmFsbHksIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AgbG9va3MgZ29vZCwgZnJvbSBgbmV0L3RpcGMvbm9kZS5jYC4KCkkmIzM5O20gbm90aW5nIHRoYXQgdGhlcmUgYXJlIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9ucyBsaWtlIGB0aXBjX25ldF9pbml0YCwgYHRpcGNfbmV0X2ZpbmFsaXplYCwgYHRpcGNfbm9kZV90aW1lb3V0YCwgYW5kIGB0aXBjX25vZGVfd3JpdGVfdW5sb2NrYCwgYnV0IHRob3NlIGFwcGVhciB0byBiZSBlaXRoZXIgbW9yZSBnZW5lcmljIG9yLCBpbiB0aGUgY2FzZSBvZiBgdGlwY19ub2RlX3RpbWVvdXRgLCBgdGlwY19ub2RlX3dyaXRlX3VubG9ja2AgYW5kIGB0aXBjX25ldF9maW5hbGl6ZWAsIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgZGUtcHJpb3JpdGl6ZSB0aGVtLiBUaGUgbWFpbiBjYW5kaWRhdGVzIGZvciBjbG9zZXIgaW5zcGVjdGlvbiBhcmUgdGhlIGZ1bmN0aW9ucyBJIGxpc3RlZCBiZWZvcmUuCgpPa2F5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRob3NlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsuIEkmIzM5O20gY29uZmlybWluZyB0aGF0IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgIGlzIGRlZmluZWQgaW4gYG5hbWVfZGlzdHIuaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgaXMgYWxzbyBpbiBgbmFtZV90YWJsZS5oYCwgYW5kIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AgaXMgaW4gYG5vZGUuaGAuICBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgIGlzIGFsc28gaW4gYG5hbWVfdGFibGUuaGAuIEkgbmVlZCB0byBlbnN1cmUgdGhvc2UgaGVhZGVycyBhcmUgY29ycmVjdGx5IGluY2x1ZGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gdG8gZW5zdXJlIHRoaXMgaXMgVElQQyByZWxhdGVkLCB3aGljaCBpdCBsb29rcyBsaWtlLgoKU28gbXkgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgVElQQyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMsIHNwZWNpZmljYWxseSBgLUVOT0JVRlNgLCBkdXJpbmcgbmFtZSBkaXN0cmlidXRpb24gYW5kIHB1YmxpY2F0aW9uLiBUaGlzIGludHJvZHVjZXMgc3RhdGUgZmxhZ3MgYW5kIG1vZGlmaWVzIG5vZGUgdGltZW91dCBhbmQgdW5sb2NrIGxvZ2ljIHRvIGRlYWwgd2l0aCByZS1kaXN0cmlidXRpb24gb2YgY2x1c3Rlci1zY29wZWQgcHVibGljYXRpb25zIHdoZW4gYWxsb2NhdGlvbiBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFRJUEMgbG9naWMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgQUZfVElQQ2Agc29ja2V0IGZhbWlseS4KCkkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsgbm93OiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGFuZCBgdGlwY19ub2RlX3NldF9kaXN0X2J1bGtgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgYFRJUENgLiBOb3cgSSBjYW4gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSYjMzQ7LAogICAgJiMzNDt0aXBjX25hbWVkX25vZGVfdXAmIzM0OywKICAgICYjMzQ7dGlwY19uYW1ldGJsX3B1Ymxpc2gmIzM0OywKICAgICYjMzQ7dGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWImIzM0OywKICAgICYjMzQ7dGlwY19ub2RlX3NldF9kaXN0X2J1bGsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIGZsYWdzIHRvIGB0aXBjX25ldGAgYW5kIGB0aXBjX25vZGVgIGFuZCBtb2RpZmllcyB0aGUgbm9kZSB0aW1lb3V0IGFuZCB1bmxvY2sgbG9naWMgdG8gaGFuZGxlIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgVElQQyBsb2dpYywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBmYW1pbHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX25hbWVkX2Rpc3RyaWJ1dGUmIzM0OywKICAgICYjMzQ7dGlwY19uYW1lZF9ub2RlX3VwJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRibF9wdWJsaXNoJiMzNDssCiAgICAmIzM0O3RpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViJiMzNDssCiAgICAmIzM0O3RpcGNfbm9kZV9zZXRfZGlzdF9idWxrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHN1YnN5c3RlbSB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgbmFtZSBkaXN0cmlidXRpb24gYW5kIHB1YmxpY2F0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSBmbGFncyB0byBgdGlwY19uZXRgIGFuZCBgdGlwY19ub2RlYCBhbmQgbW9kaWZpZXMgdGhlIG5vZGUgdGltZW91dCBhbmQgdW5sb2NrIGxvZ2ljIHRvIGhhbmRsZSByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIFRJUEMgbG9naWMsIHdoaWNoIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgZmFtaWx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDM6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwNjg3ZTE0NTllZTczMWEwZDYzMmI1NjU5MGVmNzBhMTE3ZTM4MTU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDM6NTQ6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmMgYi9uZXQvdGlwYy9jb3JlLmMKaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2NvcmUuYwpAQCAtNjEsNiAmIzQzOzYxLDkgQEAgc3RhdGljIGludCBfX25ldF9pbml0IHRpcGNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogCXRuLSZndDt0cmlhbF9hZGRyID0gMDsKIAl0bi0mZ3Q7YWRkcl90cmlhbF9lbmQgPSAwOwogCXRuLSZndDtjYXBhYmlsaXRpZXMgPSBUSVBDX05PREVfQ0FQQUJJTElUSUVTOwomIzQzOwl0bi0mZ3Q7bnRfc3RvcCA9IGZhbHNlOwomIzQzOwl0bi0mZ3Q7bnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7CiYjNDM7CWF0b21pY19zZXQoJmFtcDt0bi0mZ3Q7bm9kZV9hZGRyX3NldCwgMCk7CiAJSU5JVF9XT1JLKCZhbXA7dG4tJmd0O3dvcmssIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmspOwogCW1lbXNldCh0bi0mZ3Q7bm9kZV9pZCwgMCwgc2l6ZW9mKHRuLSZndDtub2RlX2lkKSk7CiAJbWVtc2V0KHRuLSZndDtub2RlX2lkX3N0cmluZywgMCwgc2l6ZW9mKHRuLSZndDtub2RlX2lkX3N0cmluZykpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5oIGIvbmV0L3RpcGMvY29yZS5oCmluZGV4IDljZTVmOWZmNmNjMDMuLjk3NWIxZDQ4MTg2ZTYgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9jb3JlLmgKQEAgLTE0NSw2ICYjNDM7MTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJLyogVGhlIG51bWJlcnMgb2Ygd29yayBxdWV1ZXMgaW4gc2NoZWR1bGUgKi8KIAlhdG9taWNfdCB3cV9jb3VudDsKJiM0MzsJLyogRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBub2RlJiMzOTtzIGFkZHJlc3MgaXMgc2V0ICovCiYjNDM7CWF0b21pY190IG5vZGVfYWRkcl9zZXQ7CiYjNDM7CS8qIFRoZSBuYW1lIHRhYmxlIGhhcyBzdG9wcGVkIHdvcmtpbmcgKi8KJiM0MzsJYm9vbCBudF9zdG9wOwomIzQzOwkvKiBOb2RlJiMzOTtzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi8KJiM0MzsJYm9vbCBudF9zZWxmX25vZGVfZXhpc3Q7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aXBjX25ldCAqdGlwY19uZXQoc3RydWN0IG5ldCAqbmV0KQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCmluZGV4IGJhNGY0OTA2ZTEzYjcuLjA2MGM0MmQ4ZmRhNTQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKQEAgLTk1LDkgJiM0Mzs5NSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApCiAJCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCAmYW1wO250LSZndDtub2RlX3Njb3BlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXdyaXRlX2xvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlKTsKLQl3cml0ZV91bmxvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAlza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApOwogCWlmICghc2tiKSB7CiAJCXByX3dhcm4oJiMzNDtQdWJsaWNhdGlvbiBkaXN0cmlidXRpb24gZmFpbHVyZVxuJiMzNDspOwpAQCAtMTIxLDkgJiM0MzsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCkKIAlzdHJ1Y3QgZGlzdHJfaXRlbSAqaXRlbTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0Jd3JpdGVfbG9ja19iaCgmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlX2xvY2spOwogCWxpc3RfZGVsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlKTsKLQl3cml0ZV91bmxvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAlpZiAocC0mZ3Q7c2NvcGUgPT0gVElQQ19OT0RFX1NDT1BFKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMTQ2LDkgJiM0MzsxNDIsMTQgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApCiAgKiBAZG5vZGU6IG5vZGUgdG8gYmUgdXBkYXRlZAogICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluCiAgKiBAc2Vxbm86IHNlcXVlbmNlIG51bWJlciBmb3IgdGhpcyBtZXNzYWdlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgogICovCi1zdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKLQkJCSAgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubykKJiM0MztzdGF0aWMgaW50IG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAomIzQzOwkJCSAgICB1MzIgZG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBscywgdTE2IHNlcW5vKQogewogCXN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKQEAgLTE2NCw4ICYjNDM7MTY1LDkgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiAJCQlza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBtc2dfcmVtLAogCQkJCQkJZG5vZGUpOwogCQkJaWYgKCFza2IpIHsKJiM0MzsJCQkJX19za2JfcXVldWVfcHVyZ2UobGlzdCk7CiAJCQkJcHJfd2FybigmIzM0O0J1bGsgcHVibGljYXRpb24gZmFpbHVyZVxuJiMzNDspOwotCQkJCXJldHVybjsKJiM0MzsJCQkJcmV0dXJuIC1FTk9CVUZTOwogCQkJfQogCQkJaGRyID0gYnVmX21zZyhza2IpOwogCQkJbXNnX3NldF9iY19hY2tfaW52YWxpZChoZHIsIHRydWUpOwpAQCAtMTk1LDYgJiM0MzsxOTcsODIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiAJaGRyID0gYnVmX21zZyhza2JfcGVla190YWlsKGxpc3QpKTsKIAltc2dfc2V0X2xhc3RfYnVsayhoZHIpOwogCW1zZ19zZXRfbmFtZWRfc2Vxbm8oaGRyLCBzZXFubyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGJ1aWxkIGEgbGlzdCBvZiBwdWJsaWNhdGlvbnMgbmVlZCB0byBiZSBkaXN0cmlidXRlZAomIzQzOyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiYjNDM7ICogQGhlYWQ6IGxpc3Qgb2YgcHVibGljYXRpb25zCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsCiYjNDM7CQkJCSAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CiYjNDM7CS8qIE5hbWUgdGFibGUgaGFzIGJlZW4gZGVsZXRlZCBhZnRlciBuYW1lc3BhY2UgdGVhcmRvd24gb3IKJiM0MzsJICogVElQQyBtb2R1bGUgZXhpdC4KJiM0MzsJICovCiYjNDM7CWlmICh1bmxpa2VseSh0bi0mZ3Q7bnRfc3RvcCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogTm9kZSYjMzk7cyBzZWxmIGFkZHJlc3MgaXMgbm90IHNldCB5ZXQgKi8KJiM0MzsJaWYgKCFhdG9taWNfcmVhZCgmYW1wO3RuLSZndDtub2RlX2FkZHJfc2V0KSkgewomIzQzOwkJLyogRGVmZXIgdGhlIGRpc3RyaWJ1dGlvbiB0byBub2RlJiMzOTtzIHRpbWVyICovCiYjNDM7CQl0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhuZXQsIGRub2RlKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0bi0mZ3Q7bnRfc2VsZl9ub2RlX2V4aXN0KQomIzQzOwkJZ290byBkaXN0cmlidXRlOwomIzQzOwomIzQzOwlpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSkKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJdG4tJmd0O250X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7CiYjNDM7CiYjNDM7ZGlzdHJpYnV0ZToKJiM0MzsJaWYgKG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBoZWFkLCBkbm9kZSwKJiM0MzsJCQkgICAgICZhbXA7bnQtJmd0O2NsdXN0ZXJfc2NvcGUsIG50LSZndDtzbmRfbnh0KSA9PSAtRU5PQlVGUykKJiM0MzsJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZQomIzQzOyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkOwomIzQzOwlpbnQgcmMgPSAwOwomIzQzOwomIzQzOwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiYjNDM7CXJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgJmFtcDtoZWFkKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKCFyYyAmYW1wOyZhbXA7ICFza2JfcXVldWVfZW1wdHkoJmFtcDtoZWFkKSkgewomIzQzOwkJaWYgKHRpcGNfbm9kZV94bWl0KG5ldCwgJmFtcDtoZWFkLCBkbm9kZSwgMCkgPT0gLUVOT0JVRlMpCiYjNDM7CQkJcmMgPSAtRU5PQlVGUzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtMjAyLDI1ICYjNDM7MjgwLDMyIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAogICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2UKICAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZQogICogQGNhcGFiaWxpdGllczogcGVlciBub2RlJiMzOTtzIGNhcGFiaWxpdGllcwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3MKJiM0MzsgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlCiYjNDM7ICoKICAqLwotdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpCiYjNDM7aW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcykKIHsKIAlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKIAlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7Ci0JdTE2IHNlcW5vOwomIzQzOwlpbnQgcmMgPSAwOwogCiAJX19za2JfcXVldWVfaGVhZF9pbml0KCZhbXA7aGVhZCk7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAJaWYgKCEoY2FwYWJpbGl0aWVzICZhbXA7IFRJUENfTkFNRURfQkNBU1QpKQogCQludC0mZ3Q7cmNfZGVzdHMmIzQzOyYjNDM7OwotCXNlcW5vID0gbnQtJmd0O3NuZF9ueHQ7CiYjNDM7CiYjNDM7CXJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgJmFtcDtoZWFkKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwomIzQzOwlpZiAoIXJjICZhbXA7JmFtcDsgIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO2hlYWQpKSB7CiYjNDM7CQlpZiAodGlwY19ub2RlX3htaXQobmV0LCAmYW1wO2hlYWQsIGRub2RlLCAwKSA9PSAtRU5PQlVGUykKJiM0MzsJCQlyYyA9IC1FTk9CVUZTOwomIzQzOwl9CiAKLQlyZWFkX2xvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKLQluYW1lZF9kaXN0cmlidXRlKG5ldCwgJmFtcDtoZWFkLCBkbm9kZSwgJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSwgc2Vxbm8pOwotCXRpcGNfbm9kZV94bWl0KG5ldCwgJmFtcDtoZWFkLCBkbm9kZSwgMCk7Ci0JcmVhZF91bmxvY2tfYmgoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKJiM0MzsJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTQxNiw1ICYjNDM7NTAxLDYgQEAgdm9pZCB0aXBjX25hbWVkX3JlaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSwgYmluZGluZ19ub2RlKQogCQlwLSZndDtzay5ub2RlID0gc2VsZjsKIAludC0mZ3Q7cmNfZGVzdHMgPSAwOwomIzQzOwl0bi0mZ3Q7bnRfc3RvcCA9IGZhbHNlOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmggYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmgKaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfZGlzdHIuaApAQCAtNjksMTEgJiM0Mzs2OSwxMiBAQCBzdHJ1Y3QgZGlzdHJfaXRlbSB7CiAKIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpOwogc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpOwotdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpOwomIzQzO2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpOwogdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSwKIAkJICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7CiB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldCk7CiB2b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsCiAJCSAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTsKJiM0MztpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKaW5kZXggMjUzYzcyZDEzNjZlYi4uM2JiMGNlNzgzZGJkZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25hbWVfdGFibGUuYwpAQCAtMzI5LDcgJiM0MzszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsCiAKIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJICAgICBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYywKLQkJCQkgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcCkKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKQogewogCXN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wOwogCXN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjsKQEAgLTMzOSwxMCAmIzQzOzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCWJvb2wgcmVzID0gZmFsc2U7CiAJdTMyIGtleSA9IHAtJmd0O2tleTsKIAotCXNwaW5fbG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKIAlzciA9IHRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc2MsIHApOwotCWlmICghc3IpCiYjNDM7CWlmICghc3IpIHsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJKmVyciA9IC1FTk9CVUZTOwogCQlnb3RvICBleGl0OwomIzQzOwl9CiAKIAlmaXJzdCA9IGxpc3RfZW1wdHkoJmFtcDtzci0mZ3Q7YWxsX3B1YmwpOwogCkBAIC0zNTMsNiAmIzQzOzM1NSw4IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byBiaW5kIGR1cGxpY2F0ZSAldSwldSwldS8ldToldS8ldVxuJiMzNDssCiAJCQkJIHAtJmd0O3NyLnR5cGUsIHAtJmd0O3NyLmxvd2VyLCBwLSZndDtzci51cHBlciwKIAkJCQkgbm9kZSwgcC0mZ3Q7c2sucmVmLCBrZXkpOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCSplcnIgPSAtRUVYSVNUOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpAQCAtMzcxLDcgJiM0MzszNzUsNiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCWlmICghcmVzKQogCQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIGJpbmQgdG8gJXUsJXUsJXVcbiYjMzQ7LAogCQkJcC0mZ3Q7c3IudHlwZSwgcC0mZ3Q7c3IubG93ZXIsIHAtJmd0O3NyLnVwcGVyKTsKLQlzcGluX3VubG9ja19iaCgmYW1wO3NjLSZndDtsb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC00OTAsOCAmIzQzOzQ5MywxMiBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCiAJc2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIHVhKTsKIAlpZiAoIXNjKQogCQlzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCB1YSk7Ci0JaWYgKHNjICZhbXA7JmFtcDsgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHApKQomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CWlmIChzYyAmYW1wOyZhbXA7IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCBOVUxMKSkgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiAJCXJldHVybiBwOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwogCWtmcmVlKHApOwogCXJldHVybiBOVUxMOwogfQpAQCAtNzYwLDI0ICYjNDM7NzY3LDQ0IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCwKIC8qIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIHNlcnZpY2UgYmluZGluZyB0byBuYW1lIHRhYmxlCiAgKi8KIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCi0JCQkJCSBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpCiYjNDM7CQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLAomIzQzOwkJCQkJIHUzMiBrZXksIGludCAqZXJyKQogewogCXN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpOwomIzQzOwl1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7CiAJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKJiM0MzsJYm9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7CiAJdTMyIHJjX2Rlc3RzOwogCiYjNDM7CWlmICh1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtJmd0O3NyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8CiYjNDM7CSAgICB1YS0mZ3Q7c3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpCiYjNDM7CQlwcm90b2NvbF90eXBlID0gdHJ1ZTsKJiM0MzsKIAlzcGluX2xvY2tfYmgoJmFtcDt0bi0mZ3Q7bmFtZXRibF9sb2NrKTsKJiM0MzsJaWYgKHByb3RvY29sX3R5cGUpCiYjNDM7CQlnb3RvIGluc2VydDsKIAotCWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBUSVBDX01BWF9QVUJMKSB7Ci0JCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBUSVBDX01BWF9QVUJMKTsKJiM0MzsJLyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXIKJiM0MzsJICogc2NvcGUgYW5kIGl0IGlzIGRpc3RyaWJ1dGVkIGluIGJ1bGsuIFNvLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdXNlciYjMzk7cwomIzQzOwkgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS4KJiM0MzsJICovCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfcHVibF9jb3VudCAmZ3Q7PSBtYXhfdXNlcl9wdWIpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDtCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcbiYjMzQ7LCBtYXhfdXNlcl9wdWIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiYjNDM7aW5zZXJ0OgogCXAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7CiAJaWYgKHApIHsKLQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJLyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlcwomIzQzOwkJICogc28gdGhhdCBtYXhpbXVtIG50LSZndDtsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnQKJiM0MzsJCSAqIHByb3RvY29sIHNlcnZpY2UgdHlwZXMgZnJvbSBiZWluZyBpbnNlcnRlZCBpbnRvIHRoZSBuYW1lCiYjNDM7CQkgKiB0YWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFwcm90b2NvbF90eXBlKQomIzQzOwkJCW50LSZndDtsb2NhbF9wdWJsX2NvdW50JiM0MzsmIzQzOzsKIAkJc2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7CiAJfQogCXJjX2Rlc3RzID0gbnQtJmd0O3JjX2Rlc3RzOwpAQCAtNzg2LDggJiM0Mzs4MTMsODEgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAogCWlmIChza2IpCiAJCXRpcGNfbm9kZV9icm9hZGNhc3QobmV0LCBza2IsIHJjX2Rlc3RzKTsKJiM0MzsJZWxzZSBpZiAocCAmYW1wOyZhbXA7IChwLSZndDtzY29wZSA9PSBUSVBDX0NMVVNURVJfU0NPUEUpICZhbXA7JmFtcDsgZXJyKQomIzQzOwkJKmVyciA9IC1FTk9CVUZTOwogCXJldHVybiBwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJiMzOTtzIHNlbGYgYWRkcmVzcwomIzQzOyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46CiYjNDM7ICogKiAwICAgICAgICAgIC0gU3VjY2VzcwomIzQzOyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUKJiM0MzsgKgomIzQzOyAqLwomIzQzO2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiYjNDM7CXN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrOwomIzQzOwlzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7CiYjNDM7CXN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjOwomIzQzOwlib29sIHNjX2NyZWF0ZWQgPSBmYWxzZTsKJiM0MzsJc3RydWN0IHB1YmxpY2F0aW9uICpwOwomIzQzOwlzdHJ1Y3QgdGlwY191YWRkciB1YTsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CXNrLnJlZiA9IDA7CiYjNDM7CXNrLm5vZGUgPSB0bi0mZ3Q7bm9kZV9hZGRyOwomIzQzOwl0aXBjX3VhZGRyKCZhbXA7dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLAomIzQzOwkJICAgVElQQ19OT0RFX1NUQVRFLCB0bi0mZ3Q7bm9kZV9hZGRyLCB0bi0mZ3Q7bm9kZV9hZGRyKTsKJiM0MzsJc2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsICZhbXA7dWEpOwomIzQzOwlpZiAoIXNjKSB7CiYjNDM7CQlzYyA9IHRpcGNfc2VydmljZV9jcmVhdGUobmV0LCAmYW1wO3VhKTsKJiM0MzsJCWlmICghc2MpCiYjNDM7CQkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwkJc2NfY3JlYXRlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwlzciA9IHRpcGNfc2VydmljZV9maW5kX3JhbmdlKHNjLCAmYW1wO3VhKTsKJiM0MzsJLyogMS4gdGlwY19uZXRfZmluYWxpemVfd29yaygpIGlzIG5vdCBzY2hlZHVsZWQgYmVjYXVzZSBvZiBuYW1lc3BhY2UKJiM0MzsJICogICAgdGVhcmRvd24uCiYjNDM7CSAqIDIuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tJmd0OyB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBmYWlsZWQKJiM0MzsJICogICAgdG8gaW5zZXJ0IG5vZGUgc2VsZiBhZGRyZXNzIHB1YmxpY2F0aW9uIGludG8gbnQtJmd0O2NsdXN0ZXJfc2NvcGUKJiM0MzsJICogICAgZHVlIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCiYjNDM7CSAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tJmd0OyB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBub3QKJiM0MzsJICogICAgZXhlY3V0ZWQgeWV0LgomIzQzOwkgKi8KJiM0MzsJaWYgKCFzcikgewomIzQzOwkJcCA9IHRpcGNfcHVibF9jcmVhdGUoJmFtcDt1YSwgJmFtcDtzaywgdG4tJmd0O25vZGVfYWRkcik7CiYjNDM7CQlpZiAoIXApCiYjNDM7CQkJZ290byBlcnJvcjsKIAomIzQzOwkJaWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgJmFtcDtlcnIpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoZXJyID09IC1FTk9CVUZTKSkgewomIzQzOwkJCWtmcmVlKHApOwomIzQzOwkJCWdvdG8gZXJyb3I7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7cC0mZ3Q7YmluZGluZ19ub2RlLCAmYW1wO250LSZndDtjbHVzdGVyX3Njb3BlKTsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MztlcnJvcjoKJiM0MzsJCWlmIChzY19jcmVhdGVkKSB7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7c2MtJmd0O3NlcnZpY2VfbGlzdCk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CQkJa2ZyZWVfcmN1KHNjLCByY3UpOwomIzQzOwkJCXJldHVybiAtRU5PQlVGUzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7c2MtJmd0O2xvY2spOwomIzQzOwkJcmV0dXJuIC1FTk9CVUZTOwomIzQzOwl9CiYjNDM7ZXhpdDoKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtzYy0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKQEAgLTgxMCw3ICYjNDM7OTEwLDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCiAJcCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTsKIAlpZiAocCkgewotCQludC0mZ3Q7bG9jYWxfcHVibF9jb3VudC0tOwomIzQzOwkJaWYgKHAtJmd0O3NyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwLSZndDtzci50eXBlICE9IFRJUENfTElOS19TVEFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgcC0mZ3Q7c3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpCiYjNDM7CQkJbnQtJmd0O2xvY2FsX3B1YmxfY291bnQtLTsKIAkJc2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7YmluZGluZ19zb2NrKTsKIAkJa2ZyZWVfcmN1KHAsIHJjdSk7CkBAIC04OTksNyAmIzQzOzEwMDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KQogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7bm9kZV9zY29wZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZSk7Ci0Jcndsb2NrX2luaXQoJmFtcDtudC0mZ3Q7Y2x1c3Rlcl9zY29wZV9sb2NrKTsKIAl0bi0mZ3Q7bmFtZXRibCA9IG50OwogCXNwaW5fbG9ja19pbml0KCZhbXA7dG4tJmd0O25hbWV0YmxfbG9jayk7CiAJcmV0dXJuIDA7CkBAIC05MTksNiAmIzQzOzEwMjEsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpCiAJcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKHNyLCB0bXByLCAmYW1wO3NjLSZndDtyYW5nZXMsIHRyZWVfbm9kZSkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCAmYW1wO3NyLSZndDthbGxfcHVibCwgYWxsX3B1YmwpIHsKIAkJCXRpcGNfc2VydmljZV9yZW1vdmVfcHVibChzciwgJmFtcDtwLSZndDtzaywgcC0mZ3Q7a2V5KTsKJiM0MzsJCQlsaXN0X2RlbCgmYW1wO3AtJmd0O2JpbmRpbmdfbm9kZSk7CiAJCQlrZnJlZV9yY3UocCwgcmN1KTsKIAkJfQogCQlyYl9lcmFzZV9hdWdtZW50ZWQoJmFtcDtzci0mZ3Q7dHJlZV9ub2RlLCAmYW1wO3NjLSZndDtyYW5nZXMsICZhbXA7c3JfY2FsbGJhY2tzKTsKQEAgLTk0OSw2ICYjNDM7MTA1Miw4IEBAIHZvaWQgdGlwY19uYW1ldGJsX3N0b3Aoc3RydWN0IG5ldCAqbmV0KQogCQkJdGlwY19zZXJ2aWNlX2RlbGV0ZShuZXQsIHNlcnZpY2UpOwogCQl9CiAJfQomIzQzOwl0bi0mZ3Q7bnRfc3RvcCA9IHRydWU7CiYjNDM7CXRuLSZndDtudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3RuLSZndDtuYW1ldGJsX2xvY2spOwogCiAJLyogVE9ETzogY2xlYXIgdG4tJmd0O25hbWV0YmwsIGltcGxlbWVudCBwcm9wZXIgUkNVIHJ1bGVzID8gKi8KZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaAppbmRleCA3ZmY2ZWVlYmFhZTY0Li5lN2EyYzUwZjA5OWNmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oCkBAIC05Nyw3ICYjNDM7OTcsNiBAQCBzdHJ1Y3QgcHVibGljYXRpb24gewogICogQGNsdXN0ZXJfc2NvcGU6IGFsbCBsb2NhbCBwdWJsaWNhdGlvbnMgd2l0aCBjbHVzdGVyIHNjb3BlCiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIHRvIHNlbmQgYnVsayB1cGRhdGVzIHRvIG5ldyBub2RlcwogICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciBkdXJpbmcgcmUtaW5pdCBvZiBuYW1lIHRhYmxlCi0gKiBAY2x1c3Rlcl9zY29wZV9sb2NrOiBsb2NrIGZvciBhY2Nlc3NpbmcgQGNsdXN0ZXJfc2NvcGUKICAqIEBsb2NhbF9wdWJsX2NvdW50OiBudW1iZXIgb2YgcHVibGljYXRpb25zIGlzc3VlZCBieSB0aGlzIG5vZGUKICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyCiAgKiBAc25kX254dDogbmV4dCBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgdXNlZApAQCAtMTA3LDcgJiM0MzsxMDYsNiBAQCBzdHJ1Y3QgbmFtZV90YWJsZSB7CiAJc3RydWN0IGhsaXN0X2hlYWQgc2VydmljZXNbVElQQ19OQU1FVEJMX1NJWkVdOwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZV9zY29wZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfc2NvcGU7Ci0Jcndsb2NrX3QgY2x1c3Rlcl9zY29wZV9sb2NrOwogCXUzMiBsb2NhbF9wdWJsX2NvdW50OwogCXUzMiByY19kZXN0czsKIAl1MzIgc25kX254dDsKQEAgLTEyNiwxMyAmIzQzOzEyNCwxNSBAQCBib29sIHRpcGNfbmFtZXRibF9sb29rdXBfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiB2b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsCiAJCQkgICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEpOwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKLQkJCQkJIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7CiYjNDM7CQkJCQkgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLAomIzQzOwkJCQkJIHUzMiBrZXksIGludCAqZXJyKTsKIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLAogCQkJICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTsKIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsCiAJCQkJCSAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLAogCQkJCQkgICAgIHUzMiBrZXkpOwomIzQzO2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpOwogc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSwKIAkJCQkJICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uZXQuYyBiL25ldC90aXBjL25ldC5jCmluZGV4IDdlNjVkMGIwYzRhOGQuLjdhMmMxZTY3YWNhM2QgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL25ldC5jCkBAIC0xMTAsMTEgJiM0MzsxMTAsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7CiAKIGludCB0aXBjX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCwgdTggKm5vZGVfaWQsIHUzMiBhZGRyKQogewomIzQzOwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKJiM0MzsKIAlpZiAodGlwY19vd25faWQobmV0KSkgewogCQlwcl9pbmZvKCYjMzQ7Q2Fubm90IGNvbmZpZ3VyZSBub2RlIGlkZW50aXR5IHR3aWNlXG4mIzM0Oyk7CiAJCXJldHVybiAtMTsKIAl9CiAJcHJfaW5mbygmIzM0O1N0YXJ0ZWQgaW4gbmV0d29yayBtb2RlXG4mIzM0Oyk7CiYjNDM7CWF0b21pY19zZXQoJmFtcDt0bi0mZ3Q7bm9kZV9hZGRyX3NldCwgMCk7CiAKIAlpZiAobm9kZV9pZCkKIAkJdGlwY19zZXRfbm9kZV9pZChuZXQsIG5vZGVfaWQpOwpAQCAtMTI1LDggJiM0MzsxMjgsOCBAQCBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcikKIAogc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKIHsKLQlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTsKIAlzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzayA9IHswLCBhZGRyfTsKJiM0MzsJc3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7CiAJc3RydWN0IHRpcGNfdWFkZHIgdWE7CiAKIAl0aXBjX3VhZGRyKCZhbXA7dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLApAQCAtMTM4LDcgJiM0MzsxNDEsMTEgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKIAl0aXBjX25hbWVkX3JlaW5pdChuZXQpOwogCXRpcGNfc2tfcmVpbml0KG5ldCk7CiAJdGlwY19tb25fcmVpbml0X3NlbGYobmV0KTsKLQl0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsICZhbXA7dWEsICZhbXA7c2ssIGFkZHIpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7dG4tJmd0O25vZGVfYWRkcl9zZXQsIDEpOwomIzQzOwkvKiBSZWRpc3RyaWJ1dGUgYnVsayBvZiBwdWJsaWNhdGlvbnMgdmlhIG5vZGUtdXAgZXZlbnQgb3Igbm9kZSYjMzk7cyB0aW1lcgomIzQzOwkgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLgomIzQzOwkgKi8KJiM0MzsJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBhZGRyLCBOVUxMKTsKIH0KIAogdm9pZCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuYyBiL25ldC90aXBjL25vZGUuYwppbmRleCA2ODNhMTM2ZTUzZWZjLi5jYTRhOGZjY2E2NDQ3IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9ub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbm9kZS5jCkBAIC0xMTEsNiAmIzQzOzExMSw3IEBAIHN0cnVjdCB0aXBjX2JjbGlua19lbnRyeSB7CiAgKiBAcGVlcl9uZXQ6IHBlZXImIzM5O3MgbmV0IG5hbWVzcGFjZQogICogQHBlZXJfaGFzaF9taXg6IGhhc2ggZm9yIHRoaXMgcGVlciAoRklYTUUpCiAgKiBAY3J5cHRvX3J4OiBSWCBjcnlwdG8gaGFuZGxlcgomIzQzOyAqIEBkaXN0X2J1bGs6IGZsYWcgdG8gcmVkaXN0cmlidXRlIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zCiAgKi8KIHN0cnVjdCB0aXBjX25vZGUgewogCXUzMiBhZGRyOwpAQCAtMTQ1LDYgJiM0MzsxNDYsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlIHsKICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE8KIAlzdHJ1Y3QgdGlwY19jcnlwdG8gKmNyeXB0b19yeDsKICNlbmRpZgomIzQzOwlhdG9taWNfdCBkaXN0X2J1bGs7CiB9OwogCiAvKiBOb2RlIEZTTSBzdGF0ZXMgYW5kIGV2ZW50czoKQEAgLTM0NSw2ICYjNDM7MzQ3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKQogCXJldHVybiBub2RlOwogfQogCiYjNDM7dm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpcGNfbm9kZSAqbm9kZTsKJiM0MzsKJiM0MzsJbm9kZSA9IHRpcGNfbm9kZV9maW5kKG5ldCwgYWRkcik7CiYjNDM7CWlmIChub2RlKQomIzQzOwkJYXRvbWljX3NldCgmYW1wO25vZGUtJmd0O2Rpc3RfYnVsaywgMSk7CiYjNDM7fQomIzQzOwogLyogdGlwY19ub2RlX2ZpbmRfYnlfaWQgLSBsb2NhdGUgc3BlY2lmaWVkIG5vZGUgb2JqZWN0IGJ5IGl0cyAxMjgtYml0IGlkCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWQKICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsCkBAIC0zOTMsNiAmIzQzOzQwNCwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbikKIAl3cml0ZV91bmxvY2tfYmgoJmFtcDtuLSZndDtsb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHRpcGNfbm9kZV9kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4pCiYjNDM7ewomIzQzOwlpbnQgYmVhcmVyX2lkOwomIzQzOwomIzQzOwlmb3IgKGJlYXJlcl9pZCA9IDA7IGJlYXJlcl9pZCAmbHQ7IE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQmIzQzOyYjNDM7KQomIzQzOwkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJX19yZWxlYXNlcyhuLSZndDtsb2NrKQogewpAQCAtNDAyLDYgJiM0Mzs0MjEsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pCiAJc3RydWN0IGxpc3RfaGVhZCAqcHVibF9saXN0OwogCXN0cnVjdCB0aXBjX3VhZGRyIHVhOwogCXUzMiBiZWFyZXJfaWQsIG5vZGU7CiYjNDM7CWludCByYyA9IDAsIGVyciA9IDA7CiAKIAlpZiAobGlrZWx5KCFmbGFncykpIHsKIAkJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bi0mZ3Q7bG9jayk7CkBAIC00MjUsMTYgJiM0Mzs0NDUsMjQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKQogCQl0aXBjX3B1Ymxfbm90aWZ5KG5ldCwgcHVibF9saXN0LCBub2RlLCBuLSZndDtjYXBhYmlsaXRpZXMpOwogCiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX05PREVfVVApCi0JCXRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiYjNDM7CQlyYyA9IHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tJmd0O2NhcGFiaWxpdGllcyk7CiAKIAlpZiAoZmxhZ3MgJmFtcDsgVElQQ19OT1RJRllfTElOS19VUCkgewogCQl0aXBjX21vbl9wZWVyX3VwKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTsKLQkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwomIzQzOwkJdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYsICZhbXA7ZXJyKTsKIAl9CiAJaWYgKGZsYWdzICZhbXA7IFRJUENfTk9USUZZX0xJTktfRE9XTikgewogCQl0aXBjX21vbl9wZWVyX2Rvd24obmV0LCBub2RlLCBiZWFyZXJfaWQpOwogCQl0aXBjX25hbWV0Ymxfd2l0aGRyYXcobmV0LCAmYW1wO3VhLCAmYW1wO3NrLCBzay5yZWYpOwogCX0KJiM0MzsKJiM0MzsJLyogTWVtb3J5IGFsbG9jYXRpb24gaGFzIGZhaWxlZC4gQnJpbmcgdGhlIG5vZGUgZG93biB0byBzdGFydCBvdmVyIGJ1bGsKJiM0MzsJICogZGlzdHJpYnV0aW9uIHdoZW4gdGhlIGZpcnN0IGxpbmsgaXMgdXAgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwlpZiAocmMgJmx0OyAwKQomIzQzOwkJdGlwY19ub2RlX2Rvd24obik7CiYjNDM7CWVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUykKJiM0MzsJCXRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV9hc3NpZ25fcGVlcl9uZXQoc3RydWN0IHRpcGNfbm9kZSAqbiwgdTMyIGhhc2hfbWl4ZXMpCkBAIC01NjQsNiAmIzQzOzU5Miw3IEBAIHN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTggKnBlZXJfaWQsCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtsaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO24tJmd0O3B1YmxfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuLSZndDtjb25uX3Nrcyk7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtuLSZndDtkaXN0X2J1bGssIDApOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5uYW1lZHEpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5pbnB1dHExKTsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtuLSZndDtiY19lbnRyeS5hcnJ2cSk7CkBAIC04MDMsNyAmIzQzOzgzMiw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCXN0cnVjdCB0aXBjX25vZGUgKm4gPSB0aW1lcl9jb250YWluZXJfb2YobiwgdCwgdGltZXIpOwogCXN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlOwogCXN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7Ci0JaW50IHJlbWFpbnMgPSBuLSZndDtsaW5rX2NudDsKJiM0MzsJaW50IHJlbWFpbnMgPSAwOwomIzQzOwlpbnQgZGlzdF9yYyA9IDA7CiAJaW50IGJlYXJlcl9pZDsKIAlpbnQgcmMgPSAwOwogCkBAIC04MTQsNiAmIzQzOzg0NCw5IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQlyZXR1cm47CiAJfQogCiYjNDM7CWlmIChhdG9taWNfeGNoZygmYW1wO24tJmd0O2Rpc3RfYnVsaywgMCkpCiYjNDM7CQlkaXN0X3JjID0gdGlwY19uYW1lZF9kaXN0cmlidXRlKG4tJmd0O25ldCwgbi0mZ3Q7YWRkcik7CiYjNDM7CiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPCiAJLyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi8KIAl0aXBjX2NyeXB0b190aW1lb3V0KG4tJmd0O2NyeXB0b19yeCk7CkBAIC04MjUsNiAmIzQzOzg1OCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCSAqLwogCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CiAJbi0mZ3Q7a2VlcGFsaXZlX2ludHYgPSAxMDAwMDsKJiM0MzsJcmVtYWlucyA9IG4tJmd0O2xpbmtfY250OwogCXRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTsKIAlmb3IgKGJlYXJlcl9pZCA9IDA7IHJlbWFpbnMgJmFtcDsmYW1wOyAoYmVhcmVyX2lkICZsdDsgTUFYX0JFQVJFUlMpOyBiZWFyZXJfaWQmIzQzOyYjNDM7KSB7CiAJCXRpcGNfbm9kZV9yZWFkX2xvY2sobik7CkBAIC04MzUsMTEgJiM0Mzs4NjksMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJCQl0aXBjX25vZGVfY2FsY3VsYXRlX3RpbWVyKG4sIGxlLSZndDtsaW5rKTsKIAkJCXJjID0gdGlwY19saW5rX3RpbWVvdXQobGUtJmd0O2xpbmssICZhbXA7eG1pdHEpOwogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtsZS0mZ3Q7bG9jayk7Ci0JCQlyZW1haW5zLS07CiYjNDM7CQkJaWYgKGRpc3RfcmMgIT0gLUVOT0JVRlMpCiYjNDM7CQkJCXJlbWFpbnMtLTsKIAkJfQogCQl0aXBjX25vZGVfcmVhZF91bmxvY2sobik7CiAJCXRpcGNfYmVhcmVyX3htaXQobi0mZ3Q7bmV0LCBiZWFyZXJfaWQsICZhbXA7eG1pdHEsICZhbXA7bGUtJmd0O21hZGRyLCBuKTsKLQkJaWYgKHJjICZhbXA7IFRJUENfTElOS19ET1dOX0VWVCkKJiM0MzsJCS8qIEZvcmNlIHRoZSBub2RlIGRvd24gaW4gY2FzZSB0aGUgcmVkaXN0cmlidXRpb24gZmFpbGVkICovCiYjNDM7CQlpZiAoKHJjICZhbXA7IFRJUENfTElOS19ET1dOX0VWVCkgfHwgKGRpc3RfcmMgPT0gLUVOT0JVRlMpKQogCQkJdGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTsKIAl9CiAJbW9kX3RpbWVyKCZhbXA7bi0mZ3Q7dGltZXIsIGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhuLSZndDtrZWVwYWxpdmVfaW50dikpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oCmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9ub2RlLmgKQEAgLTEyOCw0ICYjNDM7MTI4LDUgQEAgaW50IHRpcGNfbmxfbm9kZV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IHRpcGNfbmxfbm9kZV9mbHVzaF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiAjZW5kaWYKIHZvaWQgdGlwY19ub2RlX3ByZV9jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpleGl0X25ldCk7CiYjNDM7dm9pZCB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCBkNWQ3MGViMjMwYjU2Li42YjgzYmRmYzQzOWMzIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtMjkxOSw3ICYjNDM7MjkxOSw3IEBAIHN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKQogCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJc2thZGRyLnJlZiA9IHRzay0mZ3Q7cG9ydGlkOwogCXNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpOwotCXAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCAmYW1wO3NrYWRkciwga2V5KTsKJiM0MzsJcCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsICZhbXA7c2thZGRyLCBrZXksIE5VTEwpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQzOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDYzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRJUEMgUGF0Y2ggZm9yIE1lbW9yeSBTYWZldHkgYW5kIExvZ2ljKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBUSVBDIHN1YnN5c3RlbSB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIGEgaGFuZGZ1bCBvZiBjb3JlIGZpbGVzIHJlbGF0ZWQgdG8gbmFtaW5nIGFuZCBkaXN0cmlidXRpb24uIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgc3BlY2lmaWNhbGx5IGAtRU5PQlVGU2AsIGR1cmluZyBuYW1lIHRhYmxlIG9wZXJhdGlvbnMuIFRoZSBrZXkgZmlsZXMgaW1wYWN0ZWQgYXJlIGBjb3JlLmMvaGAsIGBuYW1lX2Rpc3RyLmMvaGAsIGBuYW1lX3RhYmxlLmMvaGAsIGBuZXQuY2AsIGBub2RlLmMvaGAsIGFuZCBgc29ja2V0LmNgLgoKTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG1pZ2h0IGJlIGludHJvZHVjZWQgb3IgaG93IGV4aXN0aW5nIG9uZXMgYXJlIG1vZGlmaWVkLCBlc3BlY2lhbGx5IGlmIHRoZXkgaW50ZXJhY3Qgd2l0aCB1c2VyIHNwYWNlLiBJdCBzZWVtcyB0aGUgZm9jdXMgaGVyZSBpcyByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIGJ1ZmZlciBhbGxvY2F0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZldyBuZXcgZmllbGRzIGxpa2UgYHRuLSZndDtudF9zdG9wYCwgYHRuLSZndDtudF9zZWxmX25vZGVfZXhpc3RgLCBhbmQgYHRuLSZndDtub2RlX2FkZHJfc2V0YCwgYnV0IHRoZXkgYXBwZWFyIHJlbGF0ZWQgdG8gY29udHJvbGxpbmcgdGhlIGZsb3cgYXJvdW5kIHRoZSBhbGxvY2F0aW9uIGVycm9ycy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYHRpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZWAsIGB0aXBjX25hbWVkX25vZGVfdXBgLCBhbmQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhcmUgYWxsIHJldHVybmluZyBlcnJvciBjb2RlcyBhbmQgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGAtRU5PQlVGU2AuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlcy4gVGhleeKAmXJlIG5vdyB0YWtpbmcgYGludCAqZXJyYCBhcmd1bWVudHMgKGUuZy4sIGB0aXBjX25hbWV0YmxfcHVibGlzaGApIG9yIHJldHVybmluZyBgaW50YCAoZS5nLiwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGBuYW1lZF9kaXN0cmlidXRlYCkuIFRoZSBgbmFtZWRfZGlzdHJpYnV0ZWAgZnVuY3Rpb24sIGluIHBhcnRpY3VsYXIsIGNhdWdodCBteSBleWUg4oCTIGl0JiMzOTtzIGhhbmRsaW5nIGEgYE5VTExgIHJldHVybiBmcm9tIGBuYW1lZF9wcmVwYXJlX2J1ZmAgYnkgcHVyZ2luZyB0aGUgcXVldWUgd2l0aCBgX19za2JfcXVldWVfcHVyZ2UobGlzdCk7YCBhbmQgcmV0dXJuaW5nIGAtRU5PQlVGU2AuIFRoaXMgc2VlbXMgc29saWQ7IHdlJiMzOTtyZSBjbGVhbmluZyB1cCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCByZXNvdXJjZXMgYW5kIHByb3BhZ2F0aW5nIHRoZSBlcnJvci4KCkFoLCBgbmFtZWRfcHJlcGFyZV9idWZgIHVzZXMgYHNrYmAgYWxsb2NhdGlvbi4gSWYgaXQgZmFpbHMsIHdlIGdldCBOVUxMLCBhbmQgbm93IHRoZSBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZS4gVGhhdCYjMzk7cyBnb29kIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4KCkxldCYjMzk7cyBkaXNzZWN0IGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCBsZWFraW5nIGluZm9ybWF0aW9uOgpgYGBjCglzay5yZWYgPSAwOwoJc2subm9kZSA9IHRuLSZndDtub2RlX2FkZHI7Cgl0aXBjX3VhZGRyKCZhbXA7dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLAoJCSAgIFRJUENfTk9ERV9TVEFURSwgdG4tJmd0O25vZGVfYWRkciwgdG4tJmd0O25vZGVfYWRkcik7CmBgYApIZXJlLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzaztgIG9uIHRoZSBzdGFjay4gSW5pdGlhbGl6YXRpb24gaXMgY3J1Y2lhbC4gSSBzZWUgYHNrLnJlZiA9IDA7YCBhbmQgYHNrLm5vZGUgPSB0bi0mZ3Q7bm9kZV9hZGRyO2AgYXJlIGJlaW5nIHNldC4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHJgIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZpZWxkcyB0aGF0IGFyZSBpbXBvcnRhbnQuIEl0IGFwcGVhcnMgdGhlIGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIGhhbmRsZWQgZ3JhY2VmdWxseSwgcHJldmVudGluZyBwYXJ0aWFsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIGV4cG9zZWQuIE92ZXJhbGwsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGluIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIFRJUEMgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaC00Ny1cbmluY2x1ZGUvdWFwaS9saW51eC90aXBjLmg6NDg6c3RydWN0IHRpcGNfc29ja2V0X2FkZHIge1xuaW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaC00OS1cdF9fdTMyIHJlZjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDM6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NDcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBnZXR0aW5nIGEgZnVsbCBoYW5kbGUgb24gYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyYDoKCioqQW5hbHl6aW5nIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkcmAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGlzIHN0cnVjdHVyZSwgYHRpcGNfc29ja2V0X2FkZHJgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYmV5b25kIGFueSBzdXBlcmZpY2lhbCBkZXNjcmlwdGlvbnMgYW5kIHJlYWxseSBkcmlsbCBkb3duIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSB3YW50IHRvIHNlZSB0aGUgY29tcGxldGUgZGVmaW5pdGlvbiwgdW5kZXJzdGFuZCBhbGwgdGhlIG1lbWJlcnMsIHRoZWlyIGRhdGEgdHlwZXMsIGFuZCB3aGF0IGVhY2ggZmllbGQgc2lnbmlmaWVzIHdpdGhpbiB0aGUgVElQQyAoVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uKSBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiByZXByZXNlbnRpbmcgYWRkcmVzc2VzIGZvciBUSVBDIHNvY2tldHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYWRkcmVzc2luZywgcm91dGluZywgYW5kIGNvbW11bmljYXRpb24gYmV0d2VlbiBwcm9jZXNzZXMgdXNpbmcgVElQQy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBrbm93aW5nIHRoaXMgd2lsbCBpbmZvcm0gbWUgYWJvdXQgaG93IGRhdGEgaXMgc3RydWN0dXJlZCBhbmQgaG93IHByb2Nlc3NlcyBhcmUgaWRlbnRpZmllZCBhY3Jvc3MgdGhlIFRJUEMgbmV0d29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oLTQ3LVxuaW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaDo0ODpzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciB7XG5pbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oLTQ5LVx0X191MzIgcmVmO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE2MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gVElQQyBIZWFkZXIgLSBMaW5lIDQ4KioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBrZXJuZWwmIzM5O3MgVElQQyB1c2VyLXNwYWNlIEFQSSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oYC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDQ4LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbGluZSBtaWdodCBjb250YWluIGEgY3JpdGljYWwgc3RydWN0dXJlIGRlZmluaXRpb24sIHBlcmhhcHMgYSBtZXNzYWdlIGZvcm1hdCwgc29ja2V0IG9wdGlvbiwgb3IgYSBjcnVjaWFsIGVudW0gcmVsYXRlZCB0byBhZGRyZXNzIGZhbWlseSBvciBtZXNzYWdlIHR5cGUgaGFuZGxpbmcgd2l0aGluIFRJUEMuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbnN0YW50cyBkZWNsYXJlZCB0aGVyZSB0aGF0IHdvdWxkIGJlIHVzZWZ1bCB3aGVuIGRldmVsb3Bpbmcgb3IgZGVidWdnaW5nIGluIHRoZSByZWFsbSBvZiBUSVBDLWJhc2VkIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gSSYjMzk7bSBsb29raW5nIGZvciBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlLCBmaWVsZCwgb3IgY29uc3RhbnQgdGhhdCBpcyBnaXZpbmcgbWUgcGF1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcbiAgNDE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gIDQyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc29ja2lvcy5oXHUwMDNlXG4gIDQzOlx0XG4gIDQ0Olx0LypcbiAgNDU6XHQgKiBUSVBDIGFkZHJlc3NpbmcgcHJpbWl0aXZlc1xuICA0NjpcdCAqL1xuICA0NzpcdFxuICA0ODpcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHtcbiAgNDk6XHRcdF9fdTMyIHJlZjtcbiAgNTA6XHRcdF9fdTMyIG5vZGU7XG4gIDUxOlx0fTtcbiAgNTI6XHRcbiAgNTM6XHRzdHJ1Y3QgdGlwY19zZXJ2aWNlX2FkZHIge1xuICA1NDpcdFx0X191MzIgdHlwZTtcbiAgNTU6XHRcdF9fdTMyIGluc3RhbmNlO1xuICA1NjpcdH07XG4gIDU3Olx0XG4gIDU4Olx0c3RydWN0IHRpcGNfc2VydmljZV9yYW5nZSB7XG4gIDU5Olx0XHRfX3UzMiB0eXBlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYxMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbml0aWFsIEFzc2Vzc21lbnQgb2YgU29ja2V0IEFkZHJlc3MgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyYCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbml0aWFsbHkuIEl0IGxvb2tzIGxpa2UgaXQgb25seSBjb250YWlucyBgcmVmYCBhbmQgYG5vZGVgLiBSaWdodCBhd2F5LCBJIHNlZSBib3RoIGFyZSBpbml0aWFsaXplZDogYHNrLnJlZmAgaXMgc2V0IHRvIDAsIGFuZCBgc2subm9kZWAgaXMgYXNzaWduZWQgYHRuLSZndDtub2RlX2FkZHJgLiBTbywgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGF0IHRoaXMgcG9pbnQsIHRoZSBgc2tgIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gcmVkIGZsYWdzIHRoZXJlLgoKTm93LCB0aGUgbmV4dCB0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllIGlzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IHRpcGNfdWFkZHIgdWFgLiAgSSBzZWUgYHRpcGNfdWFkZHJgIGlzIGJlaW5nIGNhbGxlZCBoZXJlIHdpdGggc3BlY2lmaWMgcGFyYW1ldGVycy4gSG1tLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYHRpcGNfdWFkZHJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoIHRob3NlIHBhcmFtZXRlcnM7IHRoZSBzZXJ2aWNlIHJhbmdlLCBzY29wZSwgbm9kZSBzdGF0ZSwgYW5kIHRob3NlIGB0bi0mZ3Q7bm9kZV9hZGRyYCBhcmd1bWVudHMuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGB1YWAgaXMgYWN0dWFsbHkgcG9wdWxhdGVkLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBleGFjdGx5IHdoYXQgZGF0YSB0aGlzIGluaXRpYWxpemF0aW9uIGlzIHB1dHRpbmcgaW50byB0aGF0IGB1YWAgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX3VhZGRyXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2FkZHIuaD01MD1zdHJ1Y3QgdGlwY191YWRkciB7XG4tLVxubmV0L3RpcGMvYWRkci5oLTYzLVxubmV0L3RpcGMvYWRkci5oOjY0OnN0YXRpYyBpbmxpbmUgdm9pZCB0aXBjX3VhZGRyKHN0cnVjdCB0aXBjX3VhZGRyICp1YSwgdTMyIGF0eXBlLCB1MzIgc2NvcGUsXG5uZXQvdGlwYy9hZGRyLmgtNjUtXHRcdFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxuLS1cbm5ldC90aXBjL21zZy5jPTcxMz1ib29sIHRpcGNfbXNnX2xvb2t1cF9kZXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICplcnIpXG4tLVxubmV0L3RpcGMvbXNnLmMtNzMzLVx0XHRyZXR1cm4gZmFsc2U7XG5uZXQvdGlwYy9tc2cuYzo3MzQ6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIHNjb3BlLFxubmV0L3RpcGMvbXNnLmMtNzM1LVx0XHQgICBtc2dfbmFtZXR5cGUobXNnKSwgaW5zdCwgaW5zdCk7XG4tLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jPTMyMD1zdGF0aWMgdm9pZCB0aXBjX3B1YmxfcHVyZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIHUzMiBhZGRyKVxuLS1cbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMjUtXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzI2Olx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBwLVx1MDAzZXNjb3BlLCBwLVx1MDAzZXNyLnR5cGUsXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzI3LVx0XHQgICBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyKTtcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM9MzY0PXN0YXRpYyBib29sIHRpcGNfdXBkYXRlX25hbWV0Ymwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZGlzdHJfaXRlbSAqaSxcbi0tXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzgwLVxubmV0L3RpcGMvbmFtZV9kaXN0ci5jOjM4MTpcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTM4Mi1cdFx0ICAgbnRvaGwoaS1cdTAwM2V0eXBlKSwgbG93ZXIsIHVwcGVyKTtcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9ODMwPWludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg0My1cdHNrLm5vZGUgPSB0bi1cdTAwM2Vub2RlX2FkZHI7XG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6ODQ0Olx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODQ1LVx0XHQgICBUSVBDX05PREVfU1RBVEUsIHRuLVx1MDAzZW5vZGVfYWRkciwgdG4tXHUwMDNlbm9kZV9hZGRyKTtcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9OTMyPWJvb2wgdGlwY19uYW1ldGJsX3N1YnNjcmliZShzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1Yilcbi0tXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtOTM5LVxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjk0MDpcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19OT0RFX1NDT1BFLCB0eXBlLFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTk0MS1cdFx0ICAgc3ViLVx1MDAzZXMuc2VxLmxvd2VyLCBzdWItXHUwMDNlcy5zZXEudXBwZXIpO1xuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYz05NjM9dm9pZCB0aXBjX25hbWV0YmxfdW5zdWJzY3JpYmUoc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIpXG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTk2OC1cbm5ldC90aXBjL25hbWVfdGFibGUuYzo5Njk6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfTk9ERV9TQ09QRSxcbm5ldC90aXBjL25hbWVfdGFibGUuYy05NzAtXHRcdCAgIHN1Yi1cdTAwM2VzLnNlcS50eXBlLCBzdWItXHUwMDNlcy5zZXEubG93ZXIsIHN1Yi1cdTAwM2VzLnNlcS51cHBlcik7XG4tLVxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTExNTc9c3RhdGljIGludCB0aXBjX25sX3NlcnZpY2VfbGlzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLFxuLS1cbm5ldC90aXBjL25hbWVfdGFibGUuYy0xMTc2LVx0XHQgICAgKCFpIFx1MDAyNlx1MDAyNiAqbGFzdF9rZXkgXHUwMDI2XHUwMDI2ICgqbGFzdF9sb3dlciA9PSAqbGFzdF9rZXkpKSkge1xubmV0L3RpcGMvbmFtZV90YWJsZS5jOjExNzc6XHRcdFx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMTE3OC1cdFx0XHRcdCAgICpsYXN0X3R5cGUsICpsYXN0X2xvd2VyLCAqbGFzdF9sb3dlcik7XG4tLVxubmV0L3RpcGMvbmV0LmM9MTI5PXN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4tLVxubmV0L3RpcGMvbmV0LmMtMTM0LVxubmV0L3RpcGMvbmV0LmM6MTM1Olx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5uZXQvdGlwYy9uZXQuYy0xMzYtXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgYWRkciwgYWRkcik7XG4tLVxubmV0L3RpcGMvbm9kZS5jPTQxNT1zdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4tLVxubmV0L3RpcGMvbm9kZS5jLTQzMC1cbm5ldC90aXBjL25vZGUuYzo0MzE6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfTk9ERV9TQ09QRSxcbm5ldC90aXBjL25vZGUuYy00MzItXHRcdCAgIFRJUENfTElOS19TVEFURSwgbi1cdTAwM2VhZGRyLCBuLVx1MDAzZWFkZHIpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTI5MzI9c3RhdGljIGludCB0aXBjX3NrX3dpdGhkcmF3KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKVxuLS1cbm5ldC90aXBjL3NvY2tldC5jLTI5NDAtXHRcdGlmICghdWEpIHtcbm5ldC90aXBjL3NvY2tldC5jOjI5NDE6XHRcdFx0dGlwY191YWRkcihcdTAwMjZfdWEsIFRJUENfU0VSVklDRV9SQU5HRSwgcC1cdTAwM2VzY29wZSxcbm5ldC90aXBjL3NvY2tldC5jLTI5NDItXHRcdFx0XHQgICBwLVx1MDAzZXNyLnR5cGUsIHAtXHUwMDNlc3IubG93ZXIsIHAtXHUwMDNlc3IudXBwZXIpO1xuLS1cbm5ldC90aXBjL3NvY2tldC5jPTMwNzI9c3RhdGljIGludCB0aXBjX3NrX2pvaW4oc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY19ncm91cF9yZXEgKm1yZXEpXG4tLVxubmV0L3RpcGMvc29ja2V0LmMtMzA5NC1cdG1zZ19zZXRfZGVzdF9kcm9wcGFibGUoaGRyLCB0cnVlKTtcbm5ldC90aXBjL3NvY2tldC5jOjMwOTU6XHR0aXBjX3VhZGRyKFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIG1yZXEtXHUwMDNlc2NvcGUsXG5uZXQvdGlwYy9zb2NrZXQuYy0zMDk2LVx0XHQgICBtcmVxLVx1MDAzZXR5cGUsIG1yZXEtXHUwMDNlaW5zdGFuY2UsIG1yZXEtXHUwMDNlaW5zdGFuY2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTYwNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG5ldC90aXBjL2FkZHIuaGAqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBUSVBDIGFkZHJlc3MgaW1wbGVtZW50YXRpb24sIHNvIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYG5ldC90aXBjL2FkZHIuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIGEgc3RhbmRhcmQgcHJhY3RpY2UgaW4gbG93LWxldmVsIG5ldHdvcmtpbmcsIHdoZXJlIGRlZmluaXRpb25zIGFyZSBrZXksIGFuZCBsaW5lIDY0IGlzIG9mdGVuIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYXMgdGhpcyBpcyB3aGVyZSBhbiBpbXBvcnRhbnQgc3RydWN0dXJlIG9yIGNvbnN0YW50IG1heSBiZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgY3JpdGljYWwgcmVsYXRlZCB0byBhZGRyZXNzIGZvcm1hdCBvciBzb21lIGFzc29jaWF0ZWQgcGFyYW1ldGVycyB0byBiZSBkZWZpbmVkIGFyb3VuZCB0aGF0IHBvaW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2FkZHIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRzdHJ1Y3QgdGlwY191YWRkciB7XG4gIDUxOlx0XHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XG4gIDUyOlx0XHR1bnNpZ25lZCBjaGFyIGFkZHJ0eXBlO1xuICA1MzpcdFx0c2lnbmVkIGNoYXIgc2NvcGU7XG4gIDU0Olx0XHR1bmlvbiB7XG4gIDU1Olx0XHRcdHN0cnVjdCB7XG4gIDU2Olx0XHRcdFx0c3RydWN0IHRpcGNfc2VydmljZV9hZGRyIHNhO1xuICA1NzpcdFx0XHRcdHUzMiBsb29rdXBfbm9kZTtcbiAgNTg6XHRcdFx0fTtcbiAgNTk6XHRcdFx0c3RydWN0IHRpcGNfc2VydmljZV9yYW5nZSBzcjtcbiAgNjA6XHRcdFx0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XG4gIDYxOlx0XHR9O1xuICA2MjpcdH07XG4gIDYzOlx0XG4gIDY0Olx0c3RhdGljIGlubGluZSB2b2lkIHRpcGNfdWFkZHIoc3RydWN0IHRpcGNfdWFkZHIgKnVhLCB1MzIgYXR5cGUsIHUzMiBzY29wZSxcbiAgNjU6XHRcdFx0XHQgICAgICB1MzIgdHlwZSwgdTMyIGxvd2VyLCB1MzIgdXBwZXIpXG4gIDY2Olx0e1xuICA2NzpcdFx0dWEtXHUwMDNlZmFtaWx5ID0gQUZfVElQQztcbiAgNjg6XHRcdHVhLVx1MDAzZWFkZHJ0eXBlID0gYXR5cGU7XG4gIDY5Olx0XHR1YS1cdTAwM2VzY29wZSA9IHNjb3BlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA3NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gYHRpcGNfdWFkZHJgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBjbGVhcmx5IG9uIGB0aXBjX3VhZGRyYC4gVGhhdCBzaWduYWxzIGEgZGVzaXJlIGZvciBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc3BlY2lmaWMgc3RydWN0dXJlIG9yIGZ1bmN0aW9uLCBsaWtlbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIFRJUEMgKFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbikuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMuIFRoaXMgcHJvYmFibHkgbWVhbnMgSSYjMzk7bSB3b3JraW5nIHdpdGggVElQQyBhdCBhIGZhaXJseSBsb3cgbGV2ZWwsIGRlYWxpbmcgd2l0aCBpdHMgaW50ZXJuYWwgd29ya2luZ3Mgb3IgdHJvdWJsZXNob290aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHVzZXIgYWRkcmVzc2VzLiBJIGNvdWxkIGJlIGRlYnVnZ2luZyBhIFRJUEMgaXNzdWUsIG9wdGltaXppbmcgc29tZSBjb2RlLCBvciBwZXJoYXBzIGV2ZW4gY29udHJpYnV0aW5nIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGUgZmFjdCB0aGF0IHRoZSB0aG91Z2h0IGlzIHNvIGRpcmVjdCwgJiMzNDtMZXQmIzM5O3MgcmVhZCBtb3JlLCYjMzQ7IGluZGljYXRlcyBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgdGhlIGFyZWEgb2YgY29uY2VybiBhbmQgaGF2ZSBkZWNpZGVkIG9uIHRoZSBuZXh0IGNvdXJzZSBvZiBhY3Rpb24uIEkga25vdyB3aGVyZSB0aGUgZG9jdW1lbnRhdGlvbiBpcywgdGhlIGNvZGUgaXMsIG9yIGJvdGgsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGRpZyBpbi4gTXkgdW5kZXJzdGFuZGluZyBuZWVkcyB0byBnbyBkZWVwZXIgdGhhbiB3aGF0IEkgYWxyZWFkeSBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90aXBjL2FkZHIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgdGlwY191YWRkcihzdHJ1Y3QgdGlwY191YWRkciAqdWEsIHUzMiBhdHlwZSwgdTMyIHNjb3BlLFxuICA2NTpcdFx0XHRcdCAgICAgIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlcilcbiAgNjY6XHR7XG4gIDY3Olx0XHR1YS1cdTAwM2VmYW1pbHkgPSBBRl9USVBDO1xuICA2ODpcdFx0dWEtXHUwMDNlYWRkcnR5cGUgPSBhdHlwZTtcbiAgNjk6XHRcdHVhLVx1MDAzZXNjb3BlID0gc2NvcGU7XG4gIDcwOlx0XHR1YS1cdTAwM2Vzci50eXBlID0gdHlwZTtcbiAgNzE6XHRcdHVhLVx1MDAzZXNyLmxvd2VyID0gbG93ZXI7XG4gIDcyOlx0XHR1YS1cdTAwM2Vzci51cHBlciA9IHVwcGVyO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgaW5saW5lIGJvb2wgdGlwY191YWRkcl92YWxpZChzdHJ1Y3QgdGlwY191YWRkciAqdWEsIGludCBsZW4pXG4gIDc2Olx0e1xuICA3NzpcdFx0dTMyIGF0eXBlO1xuICA3ODpcdFxuICA3OTpcdFx0aWYgKGxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl90aXBjKSlcbiAgODA6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICA4MTpcdFx0YXR5cGUgPSB1YS1cdTAwM2VhZGRydHlwZTtcbiAgODI6XHRcdGlmICh1YS1cdTAwM2VmYW1pbHkgIT0gQUZfVElQQylcbiAgODM6XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzMgoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiAyNjYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFRJUEMgUGF0Y2ggZm9yIE1lbW9yeSBBbGxvY2F0aW9uIEZhaWx1cmVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgVElQQyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gaGFuZGxpbmcgb3V0LW9mLW1lbW9yeSAoT09NKSBzaXR1YXRpb25zLCBzcGVjaWZpY2FsbHkgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBUaGUgY29yZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBwcm9wYWdhdGluZyBgLUVOT0JVRlNgIChObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlKSBlcnJvcnMgYW5kIGltcGxlbWVudGluZyByZXRyaWVzIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCgpGaXJzdCwgSSBleGFtaW5lZCB0aGUgYHRpcGNfdWFkZHJgIHN0cnVjdCBpbml0aWFsaXphdGlvbi4gSXQgaW5pdGlhbGl6ZXMgYWxsIG1lbWJlcnMgb2YgdGhlIHN0cnVjdHVyZSwgc28gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGVyZS4KCk5leHQsIEkgbG9va2VkIGF0IHRoZSBlcnJvciBoYW5kbGluZyBpbnRyb2R1Y2VkIGluIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFuZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGNvbnNpc3RlbnRseSBjaGVja3MgZm9yIGBza2JgIGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIHNldHMgdGhlIGBlcnJgIHZhcmlhYmxlIHRvIGAtRU5PQlVGU2AgYXMgZXhwZWN0ZWQuIFRoaXMgZXJyb3IgY29kZSBwcm9wYWdhdGVzLCBhbGxvd2luZyB0aGUgc3lzdGVtIHRvIHJlYWN0IGFwcHJvcHJpYXRlbHkuIEkgY29uZmlybWVkIHRoYXQgdGhlc2UgZXJyb3IgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYXZvaWRpbmcgYW55IHBvdGVudGlhbCByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5IGluIGB0aXBjX25vZGVfd3JpdGVfdW5sb2NrYCBhbmQgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCB3aGVyZSB0aGUgZXJyIHZhcmlhYmxlIGlzIHBhc3NlZCBieSByZWZlcmVuY2UuCgpUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gcHJldmVudGluZyBpbmNvbnNpc3RlbnQgc3RhdGUgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscywgYnkgYnJpbmdpbmcgZG93biBhIG5vZGUgb3IgbGluayB0byB0cmlnZ2VyIGEgcmUtc3luYyBsYXRlci4gVGhpcyBpcyBhIHNvdW5kIHN0cmF0ZWd5LgoKTXkgY29uY2VybiB3YXMgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBlaXRoZXIgdG8gdXNlcnNwYWNlLCBvciByZWFkIGJ5IHRoZSBrZXJuZWwuIEkgZGlkbiYjMzk7dCBzZWUgYW55IGV2aWRlbmNlIG9mIHRoaXMuIFRoZSBwYXRjaCBtb2RpZmllcyBleGlzdGluZyBlcnJvciBoYW5kbGluZyBwYXRocywgYnV0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGRhdGEgdHJhbnNmZXJzLCBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGEgY29uY2Vybi4gU3RhbmRhcmQga2VybmVsIG1lbW9yeSBzYWZldHkgY2hlY2tzIGxpa2UgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNBTml0aXplcikgc2hvdWxkIGRldGVjdCBhbnkgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlmIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBhcmUgYnVnZ3ksIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyBoZXJlIHRoYXQgd291bGQgc3VnZ2VzdCB0aGF0IGV4aXN0aW5nIEtBU0FOIHdvdWxkIGJlIGluZWZmZWN0aXZlLiBLTVNBTiBmdXp6aW5nIHNlZW1zIHVubmVjZXNzYXJ5LiBUaGUgcGF0Y2ggaXMgYSB0YXJnZXRlZCBmaXgsIGFuZCBhIHRob3JvdWdoIHN0YXRpYyBhbmFseXNpcyBhbmQgY29kZSByZXZpZXcgd2lsbCBiZSBzdWZmaWNpZW50IHRvIGVuc3VyZSBjb3JyZWN0bmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMzo1NDoxOC43OTExMzMwNzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMzNTc0NTU5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiLFxuICAgIFwidGlwY19uYW1lZF9ub2RlX3VwXCIsXG4gICAgXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICAgIFwidGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJcIixcbiAgICBcInRpcGNfbm9kZV9zZXRfZGlzdF9idWxrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nIGZvciBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBUSVBDIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIGFuZCBwdWJsaWNhdGlvbi4gSXQgbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMgdG8gcmV0dXJuIGVycm9yIGNvZGVzIGFuZCBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZ3JhY2VmdWxseSBieSByZXRyeWluZyBvciBicmluZ2luZyBkb3duIHRoZSBub2RlL2xpbmsuIFRoZSB2YXJpYWJsZXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byByZWNlaXZlIGVycm9yIGNvZGVzIChlLmcuLCBgZXJyYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAgaW4gdGhlIGNhbGxlcnMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgZGVhbCB3aXRoIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgcHJvcGFnYXRpb24uIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBlcnJvciBwYXRocywgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIGZsYWdzIHRvIGB0aXBjX25ldGAgYW5kIGB0aXBjX25vZGVgIGFuZCBtb2RpZmllcyB0aGUgbm9kZSB0aW1lb3V0IGFuZCB1bmxvY2sgbG9naWMgdG8gaGFuZGxlIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgVElQQyBsb2dpYywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBmYW1pbHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU0OjE4Ljc5MTEzODYwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwODExMzEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA2ODdlMTQ1OWVlNzMxYTBkNjMyYjU2NTkwZWY3MGExMTdlMzgxNTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDM6NTQ6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5jIGIvbmV0L3RpcGMvY29yZS5jXFxuaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9jb3JlLmNcXG4rKysgYi9uZXQvdGlwYy9jb3JlLmNcXG5AQCAtNjEsNiArNjEsOSBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgdGlwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdHRuLVxcdTAwM2V0cmlhbF9hZGRyID0gMDtcXG4gXFx0dG4tXFx1MDAzZWFkZHJfdHJpYWxfZW5kID0gMDtcXG4gXFx0dG4tXFx1MDAzZWNhcGFiaWxpdGllcyA9IFRJUENfTk9ERV9DQVBBQklMSVRJRVM7XFxuK1xcdHRuLVxcdTAwM2VudF9zdG9wID0gZmFsc2U7XFxuK1xcdHRuLVxcdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2dG4tXFx1MDAzZW5vZGVfYWRkcl9zZXQsIDApO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnRuLVxcdTAwM2V3b3JrLCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKTtcXG4gXFx0bWVtc2V0KHRuLVxcdTAwM2Vub2RlX2lkLCAwLCBzaXplb2YodG4tXFx1MDAzZW5vZGVfaWQpKTtcXG4gXFx0bWVtc2V0KHRuLVxcdTAwM2Vub2RlX2lkX3N0cmluZywgMCwgc2l6ZW9mKHRuLVxcdTAwM2Vub2RlX2lkX3N0cmluZykpO1xcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmggYi9uZXQvdGlwYy9jb3JlLmhcXG5pbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL2NvcmUuaFxcbisrKyBiL25ldC90aXBjL2NvcmUuaFxcbkBAIC0xNDUsNiArMTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbiBcXHQvKiBUaGUgbnVtYmVycyBvZiB3b3JrIHF1ZXVlcyBpbiBzY2hlZHVsZSAqL1xcbiBcXHRhdG9taWNfdCB3cV9jb3VudDtcXG4rXFx0LyogRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBub2RlJ3MgYWRkcmVzcyBpcyBzZXQgKi9cXG4rXFx0YXRvbWljX3Qgbm9kZV9hZGRyX3NldDtcXG4rXFx0LyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqL1xcbitcXHRib29sIG50X3N0b3A7XFxuK1xcdC8qIE5vZGUncyBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBuYW1lIHRhYmxlICovXFxuK1xcdGJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0O1xcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXFxuaW5kZXggYmE0ZjQ5MDZlMTNiNy4uMDYwYzQyZDhmZGE1NCAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcXG4rKysgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcXG5AQCAtOTUsOSArOTUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxcbiBcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19ub2RlLCBcXHUwMDI2bnQtXFx1MDAzZW5vZGVfc2NvcGUpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbi1cXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4gXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19ub2RlLCBcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xcbi1cXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNm50LVxcdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xcbiBcXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApO1xcbiBcXHRpZiAoIXNrYikge1xcbiBcXHRcXHRwcl93YXJuKFxcXCJQdWJsaWNhdGlvbiBkaXN0cmlidXRpb24gZmFpbHVyZVxcXFxuXFxcIik7XFxuQEAgLTEyMSw5ICsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcXG4gXFx0c3RydWN0IGRpc3RyX2l0ZW0gKml0ZW07XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbi1cXHR3cml0ZV9sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4gXFx0bGlzdF9kZWwoXFx1MDAyNnAtXFx1MDAzZWJpbmRpbmdfbm9kZSk7XFxuLVxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XFxuIFxcdGlmIChwLVxcdTAwM2VzY29wZSA9PSBUSVBDX05PREVfU0NPUEUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG5AQCAtMTQ2LDkgKzE0MiwxNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcXG4gICogQGRub2RlOiBub2RlIHRvIGJlIHVwZGF0ZWRcXG4gICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluXFxuICAqIEBzZXFubzogc2VxdWVuY2UgbnVtYmVyIGZvciB0aGlzIG1lc3NhZ2VcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXFxuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcXG4rICpcXG4gICovXFxuLXN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxcbi1cXHRcXHRcXHQgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXFxuK3N0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuK1xcdFxcdFxcdCAgICB1MzIgZG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBscywgdTE2IHNlcW5vKVxcbiB7XFxuIFxcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuQEAgLTE2NCw4ICsxNjUsOSBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcXG4gXFx0XFx0XFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ZG5vZGUpO1xcbiBcXHRcXHRcXHRpZiAoIXNrYikge1xcbitcXHRcXHRcXHRcXHRfX3NrYl9xdWV1ZV9wdXJnZShsaXN0KTtcXG4gXFx0XFx0XFx0XFx0cHJfd2FybihcXFwiQnVsayBwdWJsaWNhdGlvbiBmYWlsdXJlXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aGRyID0gYnVmX21zZyhza2IpO1xcbiBcXHRcXHRcXHRtc2dfc2V0X2JjX2Fja19pbnZhbGlkKGhkciwgdHJ1ZSk7XFxuQEAgLTE5NSw2ICsxOTcsODIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuIFxcdGhkciA9IGJ1Zl9tc2coc2tiX3BlZWtfdGFpbChsaXN0KSk7XFxuIFxcdG1zZ19zZXRfbGFzdF9idWxrKGhkcik7XFxuIFxcdG1zZ19zZXRfbmFtZWRfc2Vxbm8oaGRyLCBzZXFubyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIF9fdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gYnVpbGQgYSBsaXN0IG9mIHB1YmxpY2F0aW9ucyBuZWVkIHRvIGJlIGRpc3RyaWJ1dGVkXFxuKyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuKyAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxcbisgKiBAaGVhZDogbGlzdCBvZiBwdWJsaWNhdGlvbnNcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXFxuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcXG4rICpcXG4rICovXFxuK3N0YXRpYyBpbnQgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXFxuK3tcXG4rXFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XFxuK1xcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xcbitcXG4rXFx0LyogTmFtZSB0YWJsZSBoYXMgYmVlbiBkZWxldGVkIGFmdGVyIG5hbWVzcGFjZSB0ZWFyZG93biBvclxcbitcXHQgKiBUSVBDIG1vZHVsZSBleGl0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHVubGlrZWx5KHRuLVxcdTAwM2VudF9zdG9wKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBOb2RlJ3Mgc2VsZiBhZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovXFxuK1xcdGlmICghYXRvbWljX3JlYWQoXFx1MDAyNnRuLVxcdTAwM2Vub2RlX2FkZHJfc2V0KSkge1xcbitcXHRcXHQvKiBEZWZlciB0aGUgZGlzdHJpYnV0aW9uIHRvIG5vZGUncyB0aW1lciAqL1xcbitcXHRcXHR0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhuZXQsIGRub2RlKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh0bi1cXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0KVxcbitcXHRcXHRnb3RvIGRpc3RyaWJ1dGU7XFxuK1xcbitcXHRpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbitcXG4rXFx0dG4tXFx1MDAzZW50X3NlbGZfbm9kZV9leGlzdCA9IHRydWU7XFxuK1xcbitkaXN0cmlidXRlOlxcbitcXHRpZiAobmFtZWRfZGlzdHJpYnV0ZShuZXQsIGhlYWQsIGRub2RlLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSwgbnQtXFx1MDAzZXNuZF9ueHQpID09IC1FTk9CVUZTKVxcbitcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHRpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGRpc3RyaWJ1dGUgYWxsIHB1YmxpY2F0aW9ucyB0byBzcGVjaWZpZWQgbm9kZVxcbisgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxcbisgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXFxuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcXG4rICpcXG4rICovXFxuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuK1xcdHN0cnVjdCBza19idWZmX2hlYWQgaGVhZDtcXG4rXFx0aW50IHJjID0gMDtcXG4rXFxuK1xcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aGVhZCk7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxuK1xcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXFx1MDAyNmhlYWQpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxuK1xcdGlmICghcmMgXFx1MDAyNlxcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2aGVhZCkpIHtcXG4rXFx0XFx0aWYgKHRpcGNfbm9kZV94bWl0KG5ldCwgXFx1MDAyNmhlYWQsIGRub2RlLCAwKSA9PSAtRU5PQlVGUylcXG4rXFx0XFx0XFx0cmMgPSAtRU5PQlVGUztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjAyLDI1ICsyODAsMzIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXFxuICAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXFxuICAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxcbiAgKiBAY2FwYWJpbGl0aWVzOiBwZWVyIG5vZGUncyBjYXBhYmlsaXRpZXNcXG4rICpcXG4rICogUmV0dXJuOlxcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXFxuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcXG4rICpcXG4gICovXFxuLXZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxcbitpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxcbiB7XFxuIFxcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xcbiBcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4gXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xcbi1cXHR1MTYgc2Vxbm87XFxuK1xcdGludCByYyA9IDA7XFxuIFxcbiBcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmhlYWQpO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbiBcXHRpZiAoIShjYXBhYmlsaXRpZXMgXFx1MDAyNiBUSVBDX05BTUVEX0JDQVNUKSlcXG4gXFx0XFx0bnQtXFx1MDAzZXJjX2Rlc3RzKys7XFxuLVxcdHNlcW5vID0gbnQtXFx1MDAzZXNuZF9ueHQ7XFxuK1xcbitcXHRyYyA9IF9fdGlwY19uYW1lZF9kaXN0cmlidXRlKG5ldCwgZG5vZGUsIFxcdTAwMjZoZWFkKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbitcXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2ICFza2JfcXVldWVfZW1wdHkoXFx1MDAyNmhlYWQpKSB7XFxuK1xcdFxcdGlmICh0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZoZWFkLCBkbm9kZSwgMCkgPT0gLUVOT0JVRlMpXFxuK1xcdFxcdFxcdHJjID0gLUVOT0JVRlM7XFxuK1xcdH1cXG4gXFxuLVxcdHJlYWRfbG9ja19iaChcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XFxuLVxcdG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBcXHUwMDI2aGVhZCwgZG5vZGUsIFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSwgc2Vxbm8pO1xcbi1cXHR0aXBjX25vZGVfeG1pdChuZXQsIFxcdTAwMjZoZWFkLCBkbm9kZSwgMCk7XFxuLVxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNDE2LDUgKzUwMSw2IEBAIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBcXHUwMDI2bnQtXFx1MDAzZWNsdXN0ZXJfc2NvcGUsIGJpbmRpbmdfbm9kZSlcXG4gXFx0XFx0cC1cXHUwMDNlc2subm9kZSA9IHNlbGY7XFxuIFxcdG50LVxcdTAwM2VyY19kZXN0cyA9IDA7XFxuK1xcdHRuLVxcdTAwM2VudF9zdG9wID0gZmFsc2U7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0bi1cXHUwMDNlbmFtZXRibF9sb2NrKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmggYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmhcXG5pbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxcbkBAIC02OSwxMSArNjksMTIgQEAgc3RydWN0IGRpc3RyX2l0ZW0ge1xcbiBcXG4gc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XFxuIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcXG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xcbitpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKTtcXG4gdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcXG4gXFx0XFx0ICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7XFxuIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTtcXG4gdm9pZCB0aXBjX3B1Ymxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGxpc3RfaGVhZCAqbnN1Yl9saXN0LFxcbiBcXHRcXHQgICAgICB1MzIgYWRkciwgdTE2IGNhcGFiaWxpdGllcyk7XFxuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpO1xcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjNiYjBjZTc4M2RiZGYgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jXFxuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXFxuIFxcbiBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0aXBjX3NlcnZpY2UgKnNjLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKVxcbiB7XFxuIFxcdHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wO1xcbiBcXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7XFxuQEAgLTMzOSwxMCArMzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGJvb2wgcmVzID0gZmFsc2U7XFxuIFxcdHUzMiBrZXkgPSBwLVxcdTAwM2VrZXk7XFxuIFxcbi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0c3IgPSB0aXBjX3NlcnZpY2VfY3JlYXRlX3JhbmdlKHNjLCBwKTtcXG4tXFx0aWYgKCFzcilcXG4rXFx0aWYgKCFzcikge1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHQqZXJyID0gLUVOT0JVRlM7XFxuIFxcdFxcdGdvdG8gIGV4aXQ7XFxuK1xcdH1cXG4gXFxuIFxcdGZpcnN0ID0gbGlzdF9lbXB0eShcXHUwMDI2c3ItXFx1MDAzZWFsbF9wdWJsKTtcXG4gXFxuQEAgLTM1Myw2ICszNTUsOCBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiRmFpbGVkIHRvIGJpbmQgZHVwbGljYXRlICV1LCV1LCV1LyV1OiV1LyV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgcC1cXHUwMDNlc3IudHlwZSwgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyLFxcbiBcXHRcXHRcXHRcXHQgbm9kZSwgcC1cXHUwMDNlc2sucmVmLCBrZXkpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHQqZXJyID0gLUVFWElTVDtcXG4gXFx0XFx0XFx0Z290byBleGl0O1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMzcxLDcgKzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGlmICghcmVzKVxcbiBcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gYmluZCB0byAldSwldSwldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0cC1cXHUwMDNlc3IudHlwZSwgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyKTtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG5AQCAtNDkwLDggKzQ5MywxMiBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCB1YSk7XFxuIFxcdGlmICghc2MpXFxuIFxcdFxcdHNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIHVhKTtcXG4tXFx0aWYgKHNjIFxcdTAwMjZcXHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwKSlcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlbG9jayk7XFxuK1xcdGlmIChzYyBcXHUwMDI2XFx1MDAyNiB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgTlVMTCkpIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0cmV0dXJuIHA7XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4gXFx0a2ZyZWUocCk7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTc2MCwyNCArNzY3LDQ0IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcXG4gLyogdGlwY19uYW1ldGJsX3B1Ymxpc2ggLSBhZGQgc2VydmljZSBiaW5kaW5nIHRvIG5hbWUgdGFibGVcXG4gICovXFxuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXFxuK1xcdFxcdFxcdFxcdFxcdCB1MzIga2V5LCBpbnQgKmVycilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcXG4rXFx0dTMyIG1heF91c2VyX3B1YiA9IFRJUENfTUFYX1BVQkwgLSAxO1xcbiBcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4gXFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XFxuK1xcdGJvb2wgcHJvdG9jb2xfdHlwZSA9IGZhbHNlO1xcbiBcXHR1MzIgcmNfZGVzdHM7XFxuIFxcbitcXHRpZiAodWEtXFx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVxcdTAwM2Vzci50eXBlID09IFRJUENfTElOS19TVEFURSB8fFxcbitcXHQgICAgdWEtXFx1MDAzZXNyLnR5cGUgPT0gVElQQ19UT1BfU1JWKVxcbitcXHRcXHRwcm90b2NvbF90eXBlID0gdHJ1ZTtcXG4rXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dG4tXFx1MDAzZW5hbWV0YmxfbG9jayk7XFxuK1xcdGlmIChwcm90b2NvbF90eXBlKVxcbitcXHRcXHRnb3RvIGluc2VydDtcXG4gXFxuLVxcdGlmIChudC1cXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcXHUwMDNlPSBUSVBDX01BWF9QVUJMKSB7XFxuLVxcdFxcdHByX3dhcm4oXFxcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcXFxuXFxcIiwgVElQQ19NQVhfUFVCTCk7XFxuK1xcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXFxuK1xcdCAqIHNjb3BlIGFuZCBpdCBpcyBkaXN0cmlidXRlZCBpbiBidWxrLiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXInc1xcbitcXHQgKiBwdWJsaWNhdGlvbnMgaXMgKFRJUENfTUFYX1BVQkwgLSAxKS5cXG4rXFx0ICovXFxuK1xcdGlmIChudC1cXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcXHUwMDNlPSBtYXhfdXNlcl9wdWIpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxcXG5cXFwiLCBtYXhfdXNlcl9wdWIpO1xcbiBcXHRcXHRnb3RvIGV4aXQ7XFxuIFxcdH1cXG4gXFxuK2luc2VydDpcXG4gXFx0cCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChuZXQsIHVhLCBzaywga2V5KTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQrKztcXG4rXFx0XFx0LyogTm90IGNvdW50IG5vZGUgc3RhdGUsIGxpbmsgc3RhdGUgYW5kIHRvcG9sb2d5IHNlcnZlciB0eXBlc1xcbitcXHRcXHQgKiBzbyB0aGF0IG1heGltdW0gbnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxcbitcXHRcXHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxcbitcXHRcXHQgKiB0YWJsZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghcHJvdG9jb2xfdHlwZSlcXG4rXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQrKztcXG4gXFx0XFx0c2tiID0gdGlwY19uYW1lZF9wdWJsaXNoKG5ldCwgcCk7XFxuIFxcdH1cXG4gXFx0cmNfZGVzdHMgPSBudC1cXHUwMDNlcmNfZGVzdHM7XFxuQEAgLTc4Niw4ICs4MTMsODEgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gXFxuIFxcdGlmIChza2IpXFxuIFxcdFxcdHRpcGNfbm9kZV9icm9hZGNhc3QobmV0LCBza2IsIHJjX2Rlc3RzKTtcXG4rXFx0ZWxzZSBpZiAocCBcXHUwMDI2XFx1MDAyNiAocC1cXHUwMDNlc2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFKSBcXHUwMDI2XFx1MDAyNiBlcnIpXFxuK1xcdFxcdCplcnIgPSAtRU5PQlVGUztcXG4gXFx0cmV0dXJuIHA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJ3Mgc2VsZiBhZGRyZXNzXFxuKyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXFxuKyAqXFxuKyAqIFJldHVybjpcXG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXFxuKyAqXFxuKyAqL1xcbitpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbit7XFxuK1xcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xcbitcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4rXFx0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XFxuK1xcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjtcXG4rXFx0c3RydWN0IHRpcGNfc2VydmljZSAqc2M7XFxuK1xcdGJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlO1xcbitcXHRzdHJ1Y3QgcHVibGljYXRpb24gKnA7XFxuK1xcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdHNrLnJlZiA9IDA7XFxuK1xcdHNrLm5vZGUgPSB0bi1cXHUwMDNlbm9kZV9hZGRyO1xcbitcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXFxuK1xcdFxcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXFx1MDAzZW5vZGVfYWRkciwgdG4tXFx1MDAzZW5vZGVfYWRkcik7XFxuK1xcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCBcXHUwMDI2dWEpO1xcbitcXHRpZiAoIXNjKSB7XFxuK1xcdFxcdHNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIFxcdTAwMjZ1YSk7XFxuK1xcdFxcdGlmICghc2MpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4rXFx0XFx0c2NfY3JlYXRlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbitcXHRzciA9IHRpcGNfc2VydmljZV9maW5kX3JhbmdlKHNjLCBcXHUwMDI2dWEpO1xcbitcXHQvKiAxLiB0aXBjX25ldF9maW5hbGl6ZV93b3JrKCkgaXMgbm90IHNjaGVkdWxlZCBiZWNhdXNlIG9mIG5hbWVzcGFjZVxcbitcXHQgKiAgICB0ZWFyZG93bi5cXG4rXFx0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIGZhaWxlZFxcbitcXHQgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC1cXHUwMDNlY2x1c3Rlcl9zY29wZVxcbitcXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cXG4rXFx0ICogMy4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxcbitcXHQgKiAgICBleGVjdXRlZCB5ZXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNyKSB7XFxuK1xcdFxcdHAgPSB0aXBjX3B1YmxfY3JlYXRlKFxcdTAwMjZ1YSwgXFx1MDAyNnNrLCB0bi1cXHUwMDNlbm9kZV9hZGRyKTtcXG4rXFx0XFx0aWYgKCFwKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiBcXG4rXFx0XFx0aWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgXFx1MDAyNmVycikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChlcnIgPT0gLUVOT0JVRlMpKSB7XFxuK1xcdFxcdFxcdGtmcmVlKHApO1xcbitcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwLVxcdTAwM2ViaW5kaW5nX25vZGUsIFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSk7XFxuK1xcdFxcdGdvdG8gZXhpdDtcXG4rZXJyb3I6XFxuK1xcdFxcdGlmIChzY19jcmVhdGVkKSB7XFxuK1xcdFxcdFxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2c2MtXFx1MDAzZXNlcnZpY2VfbGlzdCk7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZzYy1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdGtmcmVlX3JjdShzYywgcmN1KTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c2MtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuK1xcdH1cXG4rZXhpdDpcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNjLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC04MTAsNyArOTEwLDEwIEBAIHZvaWQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbiBcXG4gXFx0cCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHVhLCBzaywga2V5KTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0bnQtXFx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcXG4rXFx0XFx0aWYgKHAtXFx1MDAzZXNyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBwLVxcdTAwM2Vzci50eXBlICE9IFRJUENfTElOS19TVEFURSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcC1cXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXFxuK1xcdFxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XFxuIFxcdFxcdHNrYiA9IHRpcGNfbmFtZWRfd2l0aGRyYXcobmV0LCBwKTtcXG4gXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlYmluZGluZ19zb2NrKTtcXG4gXFx0XFx0a2ZyZWVfcmN1KHAsIHJjdSk7XFxuQEAgLTg5OSw3ICsxMDAyLDYgQEAgaW50IHRpcGNfbmFtZXRibF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZudC1cXHUwMDNlbm9kZV9zY29wZSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZSk7XFxuLVxcdHJ3bG9ja19pbml0KFxcdTAwMjZudC1cXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcXG4gXFx0dG4tXFx1MDAzZW5hbWV0YmwgPSBudDtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtOTE5LDYgKzEwMjEsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpXFxuIFxcdHJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShzciwgdG1wciwgXFx1MDAyNnNjLVxcdTAwM2VyYW5nZXMsIHRyZWVfbm9kZSkge1xcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCBcXHUwMDI2c3ItXFx1MDAzZWFsbF9wdWJsLCBhbGxfcHVibCkge1xcbiBcXHRcXHRcXHR0aXBjX3NlcnZpY2VfcmVtb3ZlX3B1Ymwoc3IsIFxcdTAwMjZwLVxcdTAwM2VzaywgcC1cXHUwMDNla2V5KTtcXG4rXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnAtXFx1MDAzZWJpbmRpbmdfbm9kZSk7XFxuIFxcdFxcdFxcdGtmcmVlX3JjdShwLCByY3UpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJiX2VyYXNlX2F1Z21lbnRlZChcXHUwMDI2c3ItXFx1MDAzZXRyZWVfbm9kZSwgXFx1MDAyNnNjLVxcdTAwM2VyYW5nZXMsIFxcdTAwMjZzcl9jYWxsYmFja3MpO1xcbkBAIC05NDksNiArMTA1Miw4IEBAIHZvaWQgdGlwY19uYW1ldGJsX3N0b3Aoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRcXHRcXHR0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHR0bi1cXHUwMDNlbnRfc3RvcCA9IHRydWU7XFxuK1xcdHRuLVxcdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRuLVxcdTAwM2VuYW1ldGJsX2xvY2spO1xcbiBcXG4gXFx0LyogVE9ETzogY2xlYXIgdG4tXFx1MDAzZW5hbWV0YmwsIGltcGxlbWVudCBwcm9wZXIgUkNVIHJ1bGVzID8gKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uZTdhMmM1MGYwOTljZiAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmhcXG4rKysgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmhcXG5AQCAtOTcsNyArOTcsNiBAQCBzdHJ1Y3QgcHVibGljYXRpb24ge1xcbiAgKiBAY2x1c3Rlcl9zY29wZTogYWxsIGxvY2FsIHB1YmxpY2F0aW9ucyB3aXRoIGNsdXN0ZXIgc2NvcGVcXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciB0byBzZW5kIGJ1bGsgdXBkYXRlcyB0byBuZXcgbm9kZXNcXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciBkdXJpbmcgcmUtaW5pdCBvZiBuYW1lIHRhYmxlXFxuLSAqIEBjbHVzdGVyX3Njb3BlX2xvY2s6IGxvY2sgZm9yIGFjY2Vzc2luZyBAY2x1c3Rlcl9zY29wZVxcbiAgKiBAbG9jYWxfcHVibF9jb3VudDogbnVtYmVyIG9mIHB1YmxpY2F0aW9ucyBpc3N1ZWQgYnkgdGhpcyBub2RlXFxuICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyXFxuICAqIEBzbmRfbnh0OiBuZXh0IHNlcXVlbmNlIG51bWJlciB0byBiZSB1c2VkXFxuQEAgLTEwNyw3ICsxMDYsNiBAQCBzdHJ1Y3QgbmFtZV90YWJsZSB7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkIHNlcnZpY2VzW1RJUENfTkFNRVRCTF9TSVpFXTtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfc2NvcGU7XFxuLVxcdHJ3bG9ja190IGNsdXN0ZXJfc2NvcGVfbG9jaztcXG4gXFx0dTMyIGxvY2FsX3B1YmxfY291bnQ7XFxuIFxcdHUzMiByY19kZXN0cztcXG4gXFx0dTMyIHNuZF9ueHQ7XFxuQEAgLTEyNiwxMyArMTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEpO1xcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcXG4rXFx0XFx0XFx0XFx0XFx0IHUzMiBrZXksIGludCAqZXJyKTtcXG4gdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XFxuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBrZXkpO1xcbitpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTtcXG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25ldC5jIGIvbmV0L3RpcGMvbmV0LmNcXG5pbmRleCA3ZTY1ZDBiMGM0YThkLi43YTJjMWU2N2FjYTNkIDEwMDY0NFxcbi0tLSBhL25ldC90aXBjL25ldC5jXFxuKysrIGIvbmV0L3RpcGMvbmV0LmNcXG5AQCAtMTEwLDExICsxMTAsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XFxuIFxcbiBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcilcXG4ge1xcbitcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4rXFxuIFxcdGlmICh0aXBjX293bl9pZChuZXQpKSB7XFxuIFxcdFxcdHByX2luZm8oXFxcIkNhbm5vdCBjb25maWd1cmUgbm9kZSBpZGVudGl0eSB0d2ljZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXHRwcl9pbmZvKFxcXCJTdGFydGVkIGluIG5ldHdvcmsgbW9kZVxcXFxuXFxcIik7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnRuLVxcdTAwM2Vub2RlX2FkZHJfc2V0LCAwKTtcXG4gXFxuIFxcdGlmIChub2RlX2lkKVxcbiBcXHRcXHR0aXBjX3NldF9ub2RlX2lkKG5ldCwgbm9kZV9pZCk7XFxuQEAgLTEyNSw4ICsxMjgsOCBAQCBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcilcXG4gXFxuIHN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuIHtcXG4tXFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XFxuIFxcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrID0gezAsIGFkZHJ9O1xcbitcXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcXG4gXFx0c3RydWN0IHRpcGNfdWFkZHIgdWE7XFxuIFxcbiBcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXFxuQEAgLTEzOCw3ICsxNDEsMTEgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcXG4gXFx0dGlwY19uYW1lZF9yZWluaXQobmV0KTtcXG4gXFx0dGlwY19za19yZWluaXQobmV0KTtcXG4gXFx0dGlwY19tb25fcmVpbml0X3NlbGYobmV0KTtcXG4tXFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgYWRkcik7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnRuLVxcdTAwM2Vub2RlX2FkZHJfc2V0LCAxKTtcXG4rXFx0LyogUmVkaXN0cmlidXRlIGJ1bGsgb2YgcHVibGljYXRpb25zIHZpYSBub2RlLXVwIGV2ZW50IG9yIG5vZGUncyB0aW1lclxcbitcXHQgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLlxcbitcXHQgKi9cXG4rXFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcXHUwMDI2dWEsIFxcdTAwMjZzaywgYWRkciwgTlVMTCk7XFxuIH1cXG4gXFxuIHZvaWQgdGlwY19uZXRfZmluYWxpemVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuYyBiL25ldC90aXBjL25vZGUuY1xcbmluZGV4IDY4M2ExMzZlNTNlZmMuLmNhNGE4ZmNjYTY0NDcgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbm9kZS5jXFxuKysrIGIvbmV0L3RpcGMvbm9kZS5jXFxuQEAgLTExMSw2ICsxMTEsNyBAQCBzdHJ1Y3QgdGlwY19iY2xpbmtfZW50cnkge1xcbiAgKiBAcGVlcl9uZXQ6IHBlZXIncyBuZXQgbmFtZXNwYWNlXFxuICAqIEBwZWVyX2hhc2hfbWl4OiBoYXNoIGZvciB0aGlzIHBlZXIgKEZJWE1FKVxcbiAgKiBAY3J5cHRvX3J4OiBSWCBjcnlwdG8gaGFuZGxlclxcbisgKiBAZGlzdF9idWxrOiBmbGFnIHRvIHJlZGlzdHJpYnV0ZSBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9uc1xcbiAgKi9cXG4gc3RydWN0IHRpcGNfbm9kZSB7XFxuIFxcdHUzMiBhZGRyO1xcbkBAIC0xNDUsNiArMTQ2LDcgQEAgc3RydWN0IHRpcGNfbm9kZSB7XFxuICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE9cXG4gXFx0c3RydWN0IHRpcGNfY3J5cHRvICpjcnlwdG9fcng7XFxuICNlbmRpZlxcbitcXHRhdG9taWNfdCBkaXN0X2J1bGs7XFxuIH07XFxuIFxcbiAvKiBOb2RlIEZTTSBzdGF0ZXMgYW5kIGV2ZW50czpcXG5AQCAtMzQ1LDYgKzM0NywxNSBAQCBzdGF0aWMgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcXG4gXFx0cmV0dXJuIG5vZGU7XFxuIH1cXG4gXFxuK3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgdGlwY19ub2RlICpub2RlO1xcbitcXG4rXFx0bm9kZSA9IHRpcGNfbm9kZV9maW5kKG5ldCwgYWRkcik7XFxuK1xcdGlmIChub2RlKVxcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZub2RlLVxcdTAwM2VkaXN0X2J1bGssIDEpO1xcbit9XFxuK1xcbiAvKiB0aXBjX25vZGVfZmluZF9ieV9pZCAtIGxvY2F0ZSBzcGVjaWZpZWQgbm9kZSBvYmplY3QgYnkgaXRzIDEyOC1iaXQgaWRcXG4gICogTm90ZTogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSB3aGVuIGEgZGlzY292ZXJ5IHJlcXVlc3QgZmFpbGVkXFxuICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsXFxuQEAgLTM5Myw2ICs0MDQsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9ja19mYXN0KHN0cnVjdCB0aXBjX25vZGUgKm4pXFxuIFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bi1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRpcGNfbm9kZV9kb3duKHN0cnVjdCB0aXBjX25vZGUgKm4pXFxuK3tcXG4rXFx0aW50IGJlYXJlcl9pZDtcXG4rXFxuK1xcdGZvciAoYmVhcmVyX2lkID0gMDsgYmVhcmVyX2lkIFxcdTAwM2MgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCsrKVxcbitcXHRcXHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXFxuIFxcdF9fcmVsZWFzZXMobi1cXHUwMDNlbG9jaylcXG4ge1xcbkBAIC00MDIsNiArNDIxLDcgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwdWJsX2xpc3Q7XFxuIFxcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xcbiBcXHR1MzIgYmVhcmVyX2lkLCBub2RlO1xcbitcXHRpbnQgcmMgPSAwLCBlcnIgPSAwO1xcbiBcXG4gXFx0aWYgKGxpa2VseSghZmxhZ3MpKSB7XFxuIFxcdFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bi1cXHUwMDNlbG9jayk7XFxuQEAgLTQyNSwxNiArNDQ1LDI0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcXG4gXFx0XFx0dGlwY19wdWJsX25vdGlmeShuZXQsIHB1YmxfbGlzdCwgbm9kZSwgbi1cXHUwMDNlY2FwYWJpbGl0aWVzKTtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IFRJUENfTk9USUZZX05PREVfVVApXFxuLVxcdFxcdHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tXFx1MDAzZWNhcGFiaWxpdGllcyk7XFxuK1xcdFxcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cXHUwMDNlY2FwYWJpbGl0aWVzKTtcXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IFRJUENfTk9USUZZX0xJTktfVVApIHtcXG4gXFx0XFx0dGlwY19tb25fcGVlcl91cChuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XFxuLVxcdFxcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIHNrLnJlZik7XFxuK1xcdFxcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXFx1MDAyNnVhLCBcXHUwMDI2c2ssIHNrLnJlZiwgXFx1MDAyNmVycik7XFxuIFxcdH1cXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgVElQQ19OT1RJRllfTElOS19ET1dOKSB7XFxuIFxcdFxcdHRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XFxuIFxcdFxcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFxcdTAwMjZ1YSwgXFx1MDAyNnNrLCBzay5yZWYpO1xcbiBcXHR9XFxuK1xcbitcXHQvKiBNZW1vcnkgYWxsb2NhdGlvbiBoYXMgZmFpbGVkLiBCcmluZyB0aGUgbm9kZSBkb3duIHRvIHN0YXJ0IG92ZXIgYnVsa1xcbitcXHQgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi5cXG4rXFx0ICovXFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdHRpcGNfbm9kZV9kb3duKG4pO1xcbitcXHRlbHNlIGlmIChlcnIgPT0gLUVOT0JVRlMpXFxuK1xcdFxcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV9hc3NpZ25fcGVlcl9uZXQoc3RydWN0IHRpcGNfbm9kZSAqbiwgdTMyIGhhc2hfbWl4ZXMpXFxuQEAgLTU2NCw2ICs1OTIsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIsIHU4ICpwZWVyX2lkLFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bi1cXHUwMDNlbGlzdCk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuLVxcdTAwM2VwdWJsX2xpc3QpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bi1cXHUwMDNlY29ubl9za3MpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZuLVxcdTAwM2VkaXN0X2J1bGssIDApO1xcbiBcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZuLVxcdTAwM2ViY19lbnRyeS5uYW1lZHEpO1xcbiBcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZuLVxcdTAwM2ViY19lbnRyeS5pbnB1dHExKTtcXG4gXFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZuLVxcdTAwM2ViY19lbnRyeS5hcnJ2cSk7XFxuQEAgLTgwMyw3ICs4MzIsOCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFx0c3RydWN0IHRpcGNfbm9kZSAqbiA9IHRpbWVyX2NvbnRhaW5lcl9vZihuLCB0LCB0aW1lcik7XFxuIFxcdHN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHhtaXRxO1xcbi1cXHRpbnQgcmVtYWlucyA9IG4tXFx1MDAzZWxpbmtfY250O1xcbitcXHRpbnQgcmVtYWlucyA9IDA7XFxuK1xcdGludCBkaXN0X3JjID0gMDtcXG4gXFx0aW50IGJlYXJlcl9pZDtcXG4gXFx0aW50IHJjID0gMDtcXG4gXFxuQEAgLTgxNCw2ICs4NDQsOSBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoYXRvbWljX3hjaGcoXFx1MDAyNm4tXFx1MDAzZWRpc3RfYnVsaywgMCkpXFxuK1xcdFxcdGRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi1cXHUwMDNlbmV0LCBuLVxcdTAwM2VhZGRyKTtcXG4rXFxuICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE9cXG4gXFx0LyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi9cXG4gXFx0dGlwY19jcnlwdG9fdGltZW91dChuLVxcdTAwM2VjcnlwdG9fcngpO1xcbkBAIC04MjUsNiArODU4LDcgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIFxcdCAqL1xcbiBcXHR0aXBjX25vZGVfcmVhZF9sb2NrKG4pO1xcbiBcXHRuLVxcdTAwM2VrZWVwYWxpdmVfaW50diA9IDEwMDAwO1xcbitcXHRyZW1haW5zID0gbi1cXHUwMDNlbGlua19jbnQ7XFxuIFxcdHRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTtcXG4gXFx0Zm9yIChiZWFyZXJfaWQgPSAwOyByZW1haW5zIFxcdTAwMjZcXHUwMDI2IChiZWFyZXJfaWQgXFx1MDAzYyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCsrKSB7XFxuIFxcdFxcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XFxuQEAgLTgzNSwxMSArODY5LDEzIEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRcXHRcXHR0aXBjX25vZGVfY2FsY3VsYXRlX3RpbWVyKG4sIGxlLVxcdTAwM2VsaW5rKTtcXG4gXFx0XFx0XFx0cmMgPSB0aXBjX2xpbmtfdGltZW91dChsZS1cXHUwMDNlbGluaywgXFx1MDAyNnhtaXRxKTtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmxlLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0XFx0cmVtYWlucy0tO1xcbitcXHRcXHRcXHRpZiAoZGlzdF9yYyAhPSAtRU5PQlVGUylcXG4rXFx0XFx0XFx0XFx0cmVtYWlucy0tO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHRpcGNfbm9kZV9yZWFkX3VubG9jayhuKTtcXG4gXFx0XFx0dGlwY19iZWFyZXJfeG1pdChuLVxcdTAwM2VuZXQsIGJlYXJlcl9pZCwgXFx1MDAyNnhtaXRxLCBcXHUwMDI2bGUtXFx1MDAzZW1hZGRyLCBuKTtcXG4tXFx0XFx0aWYgKHJjIFxcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxcbitcXHRcXHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xcbitcXHRcXHRpZiAoKHJjIFxcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKSB8fCAoZGlzdF9yYyA9PSAtRU5PQlVGUykpXFxuIFxcdFxcdFxcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XFxuIFxcdH1cXG4gXFx0bW9kX3RpbWVyKFxcdTAwMjZuLVxcdTAwM2V0aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobi1cXHUwMDNla2VlcGFsaXZlX2ludHYpKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5oIGIvbmV0L3RpcGMvbm9kZS5oXFxuaW5kZXggMTU0YTViYmIwZDI5ZC4uMGY3NzdjZmU3YzAxZSAxMDA2NDRcXG4tLS0gYS9uZXQvdGlwYy9ub2RlLmhcXG4rKysgYi9uZXQvdGlwYy9ub2RlLmhcXG5AQCAtMTI4LDQgKzEyOCw1IEBAIGludCB0aXBjX25sX25vZGVfc2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4gaW50IHRpcGNfbmxfbm9kZV9mbHVzaF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuICNlbmRpZlxcbiB2b2lkIHRpcGNfbm9kZV9wcmVfY2xlYW51cF9uZXQoc3RydWN0IG5ldCAqZXhpdF9uZXQpO1xcbit2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xcbmluZGV4IGQ1ZDcwZWIyMzBiNTYuLjZiODNiZGZjNDM5YzMgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvc29ja2V0LmNcXG4rKysgYi9uZXQvdGlwYy9zb2NrZXQuY1xcbkBAIC0yOTE5LDcgKzI5MTksNyBAQCBzdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcXG4gXFx0XFx0cmV0dXJuIC1FQUREUklOVVNFO1xcbiBcXHRza2FkZHIucmVmID0gdHNrLVxcdTAwM2Vwb3J0aWQ7XFxuIFxcdHNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpO1xcbi1cXHRwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgXFx1MDAyNnNrYWRkciwga2V5KTtcXG4rXFx0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFxcdTAwMjZza2FkZHIsIGtleSwgTlVMTCk7XFxuIFxcdGlmICh1bmxpa2VseSghcCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTQ6MjAuMTAwMTA0NDAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA2Mzg3NjYwMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX25hbWVkX2Rpc3RyaWJ1dGVcIixcbiAgICBcInRpcGNfbmFtZWRfbm9kZV91cFwiLFxuICAgIFwidGlwY19uYW1ldGJsX3B1Ymxpc2hcIixcbiAgICBcInRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViXCIsXG4gICAgXCJ0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUSVBDIHN1YnN5c3RlbSB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgbmFtZSBkaXN0cmlidXRpb24gYW5kIHB1YmxpY2F0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSBmbGFncyB0byBgdGlwY19uZXRgIGFuZCBgdGlwY19ub2RlYCBhbmQgbW9kaWZpZXMgdGhlIG5vZGUgdGltZW91dCBhbmQgdW5sb2NrIGxvZ2ljIHRvIGhhbmRsZSByZWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9ucyB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIFRJUEMgbG9naWMsIHdoaWNoIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgQUZfVElQQyBzb2NrZXQgZmFtaWx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNjg3ZTE0NTllZTczMWEwZDYzMmI1NjU5MGVmNzBhMTE3ZTM4MTU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDM6NTQ6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmMgYi9uZXQvdGlwYy9jb3JlLmNcbmluZGV4IDMxNTk3NWMzYmU4MTguLjBmMWQzZGRlYWUwOTUgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9jb3JlLmNcbisrKyBiL25ldC90aXBjL2NvcmUuY1xuQEAgLTYxLDYgKzYxLDkgQEAgc3RhdGljIGludCBfX25ldF9pbml0IHRpcGNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0dG4tXHUwMDNldHJpYWxfYWRkciA9IDA7XG4gXHR0bi1cdTAwM2VhZGRyX3RyaWFsX2VuZCA9IDA7XG4gXHR0bi1cdTAwM2VjYXBhYmlsaXRpZXMgPSBUSVBDX05PREVfQ0FQQUJJTElUSUVTO1xuK1x0dG4tXHUwMDNlbnRfc3RvcCA9IGZhbHNlO1xuK1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDApO1xuIFx0SU5JVF9XT1JLKFx1MDAyNnRuLVx1MDAzZXdvcmssIHRpcGNfbmV0X2ZpbmFsaXplX3dvcmspO1xuIFx0bWVtc2V0KHRuLVx1MDAzZW5vZGVfaWQsIDAsIHNpemVvZih0bi1cdTAwM2Vub2RlX2lkKSk7XG4gXHRtZW1zZXQodG4tXHUwMDNlbm9kZV9pZF9zdHJpbmcsIDAsIHNpemVvZih0bi1cdTAwM2Vub2RlX2lkX3N0cmluZykpO1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuaCBiL25ldC90aXBjL2NvcmUuaFxuaW5kZXggOWNlNWY5ZmY2Y2MwMy4uOTc1YjFkNDgxODZlNiAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuaFxuKysrIGIvbmV0L3RpcGMvY29yZS5oXG5AQCAtMTQ1LDYgKzE0NSwxMiBAQCBzdHJ1Y3QgdGlwY19uZXQge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4gXHQvKiBUaGUgbnVtYmVycyBvZiB3b3JrIHF1ZXVlcyBpbiBzY2hlZHVsZSAqL1xuIFx0YXRvbWljX3Qgd3FfY291bnQ7XG4rXHQvKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIG5vZGUncyBhZGRyZXNzIGlzIHNldCAqL1xuK1x0YXRvbWljX3Qgbm9kZV9hZGRyX3NldDtcbitcdC8qIFRoZSBuYW1lIHRhYmxlIGhhcyBzdG9wcGVkIHdvcmtpbmcgKi9cbitcdGJvb2wgbnRfc3RvcDtcbitcdC8qIE5vZGUncyBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBuYW1lIHRhYmxlICovXG4rXHRib29sIG50X3NlbGZfbm9kZV9leGlzdDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRpcGNfbmV0ICp0aXBjX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXG5pbmRleCBiYTRmNDkwNmUxM2I3Li4wNjBjNDJkOGZkYTU0IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jXG4rKysgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbkBAIC05NSw5ICs5NSw3IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApXG4gXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlLCBcdTAwMjZudC1cdTAwM2Vub2RlX3Njb3BlKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4tXHR3cml0ZV9sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlLCBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbi1cdHdyaXRlX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgSVRFTV9TSVpFLCAwKTtcbiBcdGlmICghc2tiKSB7XG4gXHRcdHByX3dhcm4oXCJQdWJsaWNhdGlvbiBkaXN0cmlidXRpb24gZmFpbHVyZVxcblwiKTtcbkBAIC0xMjEsOSArMTE5LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnApXG4gXHRzdHJ1Y3QgZGlzdHJfaXRlbSAqaXRlbTtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4tXHR3cml0ZV9sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRsaXN0X2RlbChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSk7XG4tXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGlmIChwLVx1MDAzZXNjb3BlID09IFRJUENfTk9ERV9TQ09QRSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG5AQCAtMTQ2LDkgKzE0MiwxNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiAgKiBAZG5vZGU6IG5vZGUgdG8gYmUgdXBkYXRlZFxuICAqIEBwbHM6IGxpbmtlZCBsaXN0IG9mIHB1YmxpY2F0aW9uIGl0ZW1zIHRvIGJlIHBhY2tlZCBpbnRvIGJ1ZmZlciBjaGFpblxuICAqIEBzZXFubzogc2VxdWVuY2UgbnVtYmVyIGZvciB0aGlzIG1lc3NhZ2VcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4gICovXG4tc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4tXHRcdFx0ICAgICB1MzIgZG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBscywgdTE2IHNlcW5vKVxuK3N0YXRpYyBpbnQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4rXHRcdFx0ICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4ge1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwdWJsO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG5AQCAtMTY0LDggKzE2NSw5IEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuIFx0XHRcdHNrYiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIG1zZ19yZW0sXG4gXHRcdFx0XHRcdFx0ZG5vZGUpO1xuIFx0XHRcdGlmICghc2tiKSB7XG4rXHRcdFx0XHRfX3NrYl9xdWV1ZV9wdXJnZShsaXN0KTtcbiBcdFx0XHRcdHByX3dhcm4oXCJCdWxrIHB1YmxpY2F0aW9uIGZhaWx1cmVcXG5cIik7XG4tXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXHRcdFx0fVxuIFx0XHRcdGhkciA9IGJ1Zl9tc2coc2tiKTtcbiBcdFx0XHRtc2dfc2V0X2JjX2Fja19pbnZhbGlkKGhkciwgdHJ1ZSk7XG5AQCAtMTk1LDYgKzE5Nyw4MiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiBcdGhkciA9IGJ1Zl9tc2coc2tiX3BlZWtfdGFpbChsaXN0KSk7XG4gXHRtc2dfc2V0X2xhc3RfYnVsayhoZHIpO1xuIFx0bXNnX3NldF9uYW1lZF9zZXFubyhoZHIsIHNlcW5vKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZSAtIGJ1aWxkIGEgbGlzdCBvZiBwdWJsaWNhdGlvbnMgbmVlZCB0byBiZSBkaXN0cmlidXRlZFxuKyAqIEBuZXQ6IHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlXG4rICogQGRub2RlOiBkZXN0aW5hdGlvbiBub2RlXG4rICogQGhlYWQ6IGxpc3Qgb2YgcHVibGljYXRpb25zXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuKyAqL1xuK3N0YXRpYyBpbnQgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoZWFkKVxuK3tcbitcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xuK1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4rXG4rXHQvKiBOYW1lIHRhYmxlIGhhcyBiZWVuIGRlbGV0ZWQgYWZ0ZXIgbmFtZXNwYWNlIHRlYXJkb3duIG9yXG4rXHQgKiBUSVBDIG1vZHVsZSBleGl0LlxuK1x0ICovXG4rXHRpZiAodW5saWtlbHkodG4tXHUwMDNlbnRfc3RvcCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogTm9kZSdzIHNlbGYgYWRkcmVzcyBpcyBub3Qgc2V0IHlldCAqL1xuK1x0aWYgKCFhdG9taWNfcmVhZChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0KSkge1xuK1x0XHQvKiBEZWZlciB0aGUgZGlzdHJpYnV0aW9uIHRvIG5vZGUncyB0aW1lciAqL1xuK1x0XHR0aXBjX25vZGVfc2V0X2Rpc3RfYnVsayhuZXQsIGRub2RlKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAodG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0KVxuK1x0XHRnb3RvIGRpc3RyaWJ1dGU7XG4rXG4rXHRpZiAodGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIobmV0KSlcbitcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1xuK1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gdHJ1ZTtcbitcbitkaXN0cmlidXRlOlxuK1x0aWYgKG5hbWVkX2Rpc3RyaWJ1dGUobmV0LCBoZWFkLCBkbm9kZSxcbitcdFx0XHQgICAgIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIG50LVx1MDAzZXNuZF9ueHQpID09IC1FTk9CVUZTKVxuK1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gZGlzdHJpYnV0ZSBhbGwgcHVibGljYXRpb25zIHRvIHNwZWNpZmllZCBub2RlXG4rICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbisgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4raW50IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSlcbit7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcdHN0cnVjdCBza19idWZmX2hlYWQgaGVhZDtcbitcdGludCByYyA9IDA7XG4rXG4rXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGVhZCk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXHUwMDI2aGVhZCk7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuK1x0aWYgKCFyYyBcdTAwMjZcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZoZWFkKSkge1xuK1x0XHRpZiAodGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgMCkgPT0gLUVOT0JVRlMpXG4rXHRcdFx0cmMgPSAtRU5PQlVGUztcbitcdH1cbitcbitcdHJldHVybiByYztcbiB9XG4gXG4gLyoqXG5AQCAtMjAyLDI1ICsyODAsMzIgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbiAgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbiAgKiBAY2FwYWJpbGl0aWVzOiBwZWVyIG5vZGUncyBjYXBhYmlsaXRpZXNcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4gICovXG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpXG4raW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xuLVx0dTE2IHNlcW5vO1xuK1x0aW50IHJjID0gMDtcbiBcbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZoZWFkKTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFx0aWYgKCEoY2FwYWJpbGl0aWVzIFx1MDAyNiBUSVBDX05BTUVEX0JDQVNUKSlcbiBcdFx0bnQtXHUwMDNlcmNfZGVzdHMrKztcbi1cdHNlcW5vID0gbnQtXHUwMDNlc25kX254dDtcbitcbitcdHJjID0gX190aXBjX25hbWVkX2Rpc3RyaWJ1dGUobmV0LCBkbm9kZSwgXHUwMDI2aGVhZCk7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuK1x0aWYgKCFyYyBcdTAwMjZcdTAwMjYgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZoZWFkKSkge1xuK1x0XHRpZiAodGlwY19ub2RlX3htaXQobmV0LCBcdTAwMjZoZWFkLCBkbm9kZSwgMCkgPT0gLUVOT0JVRlMpXG4rXHRcdFx0cmMgPSAtRU5PQlVGUztcbitcdH1cbiBcbi1cdHJlYWRfbG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuLVx0bmFtZWRfZGlzdHJpYnV0ZShuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlLCBzZXFubyk7XG4tXHR0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKTtcbi1cdHJlYWRfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4rXHRyZXR1cm4gcmM7XG4gfVxuIFxuIC8qKlxuQEAgLTQxNiw1ICs1MDEsNiBAQCB2b2lkIHRpcGNfbmFtZWRfcmVpbml0KHN0cnVjdCBuZXQgKm5ldClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIGJpbmRpbmdfbm9kZSlcbiBcdFx0cC1cdTAwM2Vzay5ub2RlID0gc2VsZjtcbiBcdG50LVx1MDAzZXJjX2Rlc3RzID0gMDtcbitcdHRuLVx1MDAzZW50X3N0b3AgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaFxuaW5kZXggYzY3N2Y2ZjA4MmRmYi4uMjA0MzA5NmFlOTY3ZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5AQCAtNjksMTEgKzY5LDEyIEBAIHN0cnVjdCBkaXN0cl9pdGVtIHtcbiBcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcbiBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCk7XG4tdm9pZCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuK2ludCB0aXBjX25hbWVkX25vZGVfdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUxNiBjYXBhYmlsaXRpZXMpO1xuIHZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHEsXG4gXHRcdCAgICB1MTYgKnJjdl9ueHQsIGJvb2wgKm9wZW4pO1xuIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KTtcbiB2b2lkIHRpcGNfcHVibF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsXG4gXHRcdCAgICAgIHUzMiBhZGRyLCB1MTYgY2FwYWJpbGl0aWVzKTtcbitpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbmluZGV4IDI1M2M3MmQxMzY2ZWIuLjNiYjBjZTc4M2RiZGYgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmNcbisrKyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuQEAgLTMyOSw3ICszMjksNyBAQCBzdGF0aWMgc3RydWN0IHNlcnZpY2VfcmFuZ2UgKnRpcGNfc2VydmljZV9jcmVhdGVfcmFuZ2Uoc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4gXG4gc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc2VydmljZSAqc2MsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbitcdFx0XHRcdCAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwLCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YiwgKnRtcDtcbiBcdHN0cnVjdCBzZXJ2aWNlX3JhbmdlICpzcjtcbkBAIC0zMzksMTAgKzMzOSwxMiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0Ym9vbCByZXMgPSBmYWxzZTtcbiBcdHUzMiBrZXkgPSBwLVx1MDAzZWtleTtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHNyID0gdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzYywgcCk7XG4tXHRpZiAoIXNyKVxuK1x0aWYgKCFzcikge1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdCplcnIgPSAtRU5PQlVGUztcbiBcdFx0Z290byAgZXhpdDtcbitcdH1cbiBcbiBcdGZpcnN0ID0gbGlzdF9lbXB0eShcdTAwMjZzci1cdTAwM2VhbGxfcHVibCk7XG4gXG5AQCAtMzUzLDYgKzM1NSw4IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0cHJfZGVidWcoXCJGYWlsZWQgdG8gYmluZCBkdXBsaWNhdGUgJXUsJXUsJXUvJXU6JXUvJXVcXG5cIixcbiBcdFx0XHRcdCBwLVx1MDAzZXNyLnR5cGUsIHAtXHUwMDNlc3IubG93ZXIsIHAtXHUwMDNlc3IudXBwZXIsXG4gXHRcdFx0XHQgbm9kZSwgcC1cdTAwM2Vzay5yZWYsIGtleSk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdCplcnIgPSAtRUVYSVNUO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuIFx0fVxuQEAgLTM3MSw3ICszNzUsNiBAQCBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKCFyZXMpXG4gXHRcdHByX3dhcm4oXCJGYWlsZWQgdG8gYmluZCB0byAldSwldSwldVxcblwiLFxuIFx0XHRcdHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcik7XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuQEAgLTQ5MCw4ICs0OTMsMTIgQEAgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIHVhKTtcbiBcdGlmICghc2MpXG4gXHRcdHNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIHVhKTtcbi1cdGlmIChzYyBcdTAwMjZcdTAwMjYgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHApKVxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0aWYgKHNjIFx1MDAyNlx1MDAyNiB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgTlVMTCkpIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4gXHRcdHJldHVybiBwO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4gXHRrZnJlZShwKTtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC03NjAsMjQgKzc2Nyw0NCBAQCB2b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG4gLyogdGlwY19uYW1ldGJsX3B1Ymxpc2ggLSBhZGQgc2VydmljZSBiaW5kaW5nIHRvIG5hbWUgdGFibGVcbiAgKi9cbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuLVx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KVxuK1x0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuK1x0XHRcdFx0XHQgdTMyIGtleSwgaW50ICplcnIpXG4ge1xuIFx0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHR1MzIgbWF4X3VzZXJfcHViID0gVElQQ19NQVhfUFVCTCAtIDE7XG4gXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbitcdGJvb2wgcHJvdG9jb2xfdHlwZSA9IGZhbHNlO1xuIFx0dTMyIHJjX2Rlc3RzO1xuIFxuK1x0aWYgKHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19OT0RFX1NUQVRFIHx8IHVhLVx1MDAzZXNyLnR5cGUgPT0gVElQQ19MSU5LX1NUQVRFIHx8XG4rXHQgICAgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX1RPUF9TUlYpXG4rXHRcdHByb3RvY29sX3R5cGUgPSB0cnVlO1xuK1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAocHJvdG9jb2xfdHlwZSlcbitcdFx0Z290byBpbnNlcnQ7XG4gXG4tXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IFRJUENfTUFYX1BVQkwpIHtcbi1cdFx0cHJfd2FybihcIkJpbmQgZmFpbGVkLCBtYXggbGltaXQgJXUgcmVhY2hlZFxcblwiLCBUSVBDX01BWF9QVUJMKTtcbitcdC8qIFJlc2VydmUgb25lIGVudHJ5IGZvciBub2RlIHN0YXRlIHNlcnZpY2UgdHlwZSBiZWNhdXNlIGl0IGhhcyBjbHVzdGVyXG4rXHQgKiBzY29wZSBhbmQgaXQgaXMgZGlzdHJpYnV0ZWQgaW4gYnVsay4gU28sIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VyJ3NcbitcdCAqIHB1YmxpY2F0aW9ucyBpcyAoVElQQ19NQVhfUFVCTCAtIDEpLlxuK1x0ICovXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCBcdTAwM2U9IG1heF91c2VyX3B1Yikge1xuK1x0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIG1heF91c2VyX3B1Yik7XG4gXHRcdGdvdG8gZXhpdDtcbiBcdH1cbiBcbitpbnNlcnQ6XG4gXHRwID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCsrO1xuK1x0XHQvKiBOb3QgY291bnQgbm9kZSBzdGF0ZSwgbGluayBzdGF0ZSBhbmQgdG9wb2xvZ3kgc2VydmVyIHR5cGVzXG4rXHRcdCAqIHNvIHRoYXQgbWF4aW11bSBudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IGRvZXMgbm90IHByZXZlbnRcbitcdFx0ICogcHJvdG9jb2wgc2VydmljZSB0eXBlcyBmcm9tIGJlaW5nIGluc2VydGVkIGludG8gdGhlIG5hbWVcbitcdFx0ICogdGFibGUuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXByb3RvY29sX3R5cGUpXG4rXHRcdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudCsrO1xuIFx0XHRza2IgPSB0aXBjX25hbWVkX3B1Ymxpc2gobmV0LCBwKTtcbiBcdH1cbiBcdHJjX2Rlc3RzID0gbnQtXHUwMDNlcmNfZGVzdHM7XG5AQCAtNzg2LDggKzgxMyw4MSBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFxuIFx0aWYgKHNrYilcbiBcdFx0dGlwY19ub2RlX2Jyb2FkY2FzdChuZXQsIHNrYiwgcmNfZGVzdHMpO1xuK1x0ZWxzZSBpZiAocCBcdTAwMjZcdTAwMjYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19DTFVTVEVSX1NDT1BFKSBcdTAwMjZcdTAwMjYgZXJyKVxuK1x0XHQqZXJyID0gLUVOT0JVRlM7XG4gXHRyZXR1cm4gcDtcbit9XG4rXG4rLyoqXG4rICogdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIgLSBpbnNlcnQgcHVibGljYXRpb24gb2Ygbm9kZSdzIHNlbGYgYWRkcmVzc1xuKyAqIEBuZXQ6IG5ldHdvcmsgbmFtZXNwYWNlXG4rICpcbisgKiBSZXR1cm46XG4rICogKiAwICAgICAgICAgIC0gU3VjY2Vzc1xuKyAqICogLUVOT0JVRlMgICAtIE5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGVcbisgKlxuKyAqL1xuK2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpXG4re1xuK1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrO1xuK1x0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xuK1x0c3RydWN0IHRpcGNfc2VydmljZSAqc2M7XG4rXHRib29sIHNjX2NyZWF0ZWQgPSBmYWxzZTtcbitcdHN0cnVjdCBwdWJsaWNhdGlvbiAqcDtcbitcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRzay5yZWYgPSAwO1xuK1x0c2subm9kZSA9IHRuLVx1MDAzZW5vZGVfYWRkcjtcbitcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxuK1x0XHQgICBUSVBDX05PREVfU1RBVEUsIHRuLVx1MDAzZW5vZGVfYWRkciwgdG4tXHUwMDNlbm9kZV9hZGRyKTtcbitcdHNjID0gdGlwY19zZXJ2aWNlX2ZpbmQobmV0LCBcdTAwMjZ1YSk7XG4rXHRpZiAoIXNjKSB7XG4rXHRcdHNjID0gdGlwY19zZXJ2aWNlX2NyZWF0ZShuZXQsIFx1MDAyNnVhKTtcbitcdFx0aWYgKCFzYylcbitcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXHRcdHNjX2NyZWF0ZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0c3IgPSB0aXBjX3NlcnZpY2VfZmluZF9yYW5nZShzYywgXHUwMDI2dWEpO1xuK1x0LyogMS4gdGlwY19uZXRfZmluYWxpemVfd29yaygpIGlzIG5vdCBzY2hlZHVsZWQgYmVjYXVzZSBvZiBuYW1lc3BhY2VcbitcdCAqICAgIHRlYXJkb3duLlxuK1x0ICogMi4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgZmFpbGVkXG4rXHQgKiAgICB0byBpbnNlcnQgbm9kZSBzZWxmIGFkZHJlc3MgcHVibGljYXRpb24gaW50byBudC1cdTAwM2VjbHVzdGVyX3Njb3BlXG4rXHQgKiAgICBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbitcdCAqIDMuIE9yIHRpcGNfbmV0X2ZpbmFsaXplKCkgLS0tXHUwMDNlIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgaGFzIG5vdFxuK1x0ICogICAgZXhlY3V0ZWQgeWV0LlxuK1x0ICovXG4rXHRpZiAoIXNyKSB7XG4rXHRcdHAgPSB0aXBjX3B1YmxfY3JlYXRlKFx1MDAyNnVhLCBcdTAwMjZzaywgdG4tXHUwMDNlbm9kZV9hZGRyKTtcbitcdFx0aWYgKCFwKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4gXG4rXHRcdGlmICghdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKG5ldCwgc2MsIHAsIFx1MDAyNmVycikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoZXJyID09IC1FTk9CVUZTKSkge1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXHRcdH1cbitcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwLVx1MDAzZWJpbmRpbmdfbm9kZSwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSk7XG4rXHRcdGdvdG8gZXhpdDtcbitlcnJvcjpcbitcdFx0aWYgKHNjX2NyZWF0ZWQpIHtcbitcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2c2MtXHUwMDNlc2VydmljZV9saXN0KTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbitcdFx0XHRrZnJlZV9yY3Uoc2MsIHJjdSk7XG4rXHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuK1x0XHR9XG4rXG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXHR9XG4rZXhpdDpcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTgxMCw3ICs5MTAsMTAgQEAgdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRwID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG5ldCwgdWEsIHNrLCBrZXkpO1xuIFx0aWYgKHApIHtcbi1cdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuK1x0XHRpZiAocC1cdTAwM2Vzci50eXBlICE9IFRJUENfTk9ERV9TVEFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX0xJTktfU1RBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19UT1BfU1JWKVxuK1x0XHRcdG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQtLTtcbiBcdFx0c2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHApO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlYmluZGluZ19zb2NrKTtcbiBcdFx0a2ZyZWVfcmN1KHAsIHJjdSk7XG5AQCAtODk5LDcgKzEwMDIsNiBAQCBpbnQgdGlwY19uYW1ldGJsX2luaXQoc3RydWN0IG5ldCAqbmV0KVxuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bnQtXHUwMDNlbm9kZV9zY29wZSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbi1cdHJ3bG9ja19pbml0KFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHR0bi1cdTAwM2VuYW1ldGJsID0gbnQ7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFx0cmV0dXJuIDA7XG5AQCAtOTE5LDYgKzEwMjEsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX3NlcnZpY2VfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc2VydmljZSAqc2MpXG4gXHRyYnRyZWVfcG9zdG9yZGVyX2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3IsIHRtcHIsIFx1MDAyNnNjLVx1MDAzZXJhbmdlcywgdHJlZV9ub2RlKSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsIFx1MDAyNnNyLVx1MDAzZWFsbF9wdWJsLCBhbGxfcHVibCkge1xuIFx0XHRcdHRpcGNfc2VydmljZV9yZW1vdmVfcHVibChzciwgXHUwMDI2cC1cdTAwM2VzaywgcC1cdTAwM2VrZXkpO1xuK1x0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbiBcdFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdFx0fVxuIFx0XHRyYl9lcmFzZV9hdWdtZW50ZWQoXHUwMDI2c3ItXHUwMDNldHJlZV9ub2RlLCBcdTAwMjZzYy1cdTAwM2VyYW5nZXMsIFx1MDAyNnNyX2NhbGxiYWNrcyk7XG5AQCAtOTQ5LDYgKzEwNTIsOCBAQCB2b2lkIHRpcGNfbmFtZXRibF9zdG9wKHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0XHR0aXBjX3NlcnZpY2VfZGVsZXRlKG5ldCwgc2VydmljZSk7XG4gXHRcdH1cbiBcdH1cbitcdHRuLVx1MDAzZW50X3N0b3AgPSB0cnVlO1xuK1x0dG4tXHUwMDNlbnRfc2VsZl9ub2RlX2V4aXN0ID0gZmFsc2U7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuIFxuIFx0LyogVE9ETzogY2xlYXIgdG4tXHUwMDNlbmFtZXRibCwgaW1wbGVtZW50IHByb3BlciBSQ1UgcnVsZXMgPyAqL1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuaCBiL25ldC90aXBjL25hbWVfdGFibGUuaFxuaW5kZXggN2ZmNmVlZWJhYWU2NC4uZTdhMmM1MGYwOTljZiAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuaFxuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5AQCAtOTcsNyArOTcsNiBAQCBzdHJ1Y3QgcHVibGljYXRpb24ge1xuICAqIEBjbHVzdGVyX3Njb3BlOiBhbGwgbG9jYWwgcHVibGljYXRpb25zIHdpdGggY2x1c3RlciBzY29wZVxuICAqICAgICAgICAgICAgICAgLSB1c2VkIGJ5IG5hbWVfZGlzdHIgdG8gc2VuZCBidWxrIHVwZGF0ZXMgdG8gbmV3IG5vZGVzXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciBkdXJpbmcgcmUtaW5pdCBvZiBuYW1lIHRhYmxlXG4tICogQGNsdXN0ZXJfc2NvcGVfbG9jazogbG9jayBmb3IgYWNjZXNzaW5nIEBjbHVzdGVyX3Njb3BlXG4gICogQGxvY2FsX3B1YmxfY291bnQ6IG51bWJlciBvZiBwdWJsaWNhdGlvbnMgaXNzdWVkIGJ5IHRoaXMgbm9kZVxuICAqIEByY19kZXN0czogZGVzdGluYXRpb24gbm9kZSBjb3VudGVyXG4gICogQHNuZF9ueHQ6IG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHVzZWRcbkBAIC0xMDcsNyArMTA2LDYgQEAgc3RydWN0IG5hbWVfdGFibGUge1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgc2VydmljZXNbVElQQ19OQU1FVEJMX1NJWkVdO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBub2RlX3Njb3BlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBjbHVzdGVyX3Njb3BlO1xuLVx0cndsb2NrX3QgY2x1c3Rlcl9zY29wZV9sb2NrO1xuIFx0dTMyIGxvY2FsX3B1YmxfY291bnQ7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXHR1MzIgc25kX254dDtcbkBAIC0xMjYsMTMgKzEyNCwxNSBAQCBib29sIHRpcGNfbmFtZXRibF9sb29rdXBfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gdm9pZCB0aXBjX25hbWV0YmxfYnVpbGRfZ3JvdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ncm91cCAqZ3JwLFxuIFx0XHRcdCAgICAgIHN0cnVjdCB0aXBjX3VhZGRyICp1YSk7XG4gc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbi1cdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzaywgdTMyIGtleSk7XG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycik7XG4gdm9pZCB0aXBjX25hbWV0Ymxfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0ICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbiBcdFx0XHRcdFx0ICAgICB1MzIga2V5KTtcbitpbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uZXQuYyBiL25ldC90aXBjL25ldC5jXG5pbmRleCA3ZTY1ZDBiMGM0YThkLi43YTJjMWU2N2FjYTNkIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmV0LmNcbisrKyBiL25ldC90aXBjL25ldC5jXG5AQCAtMTEwLDExICsxMTAsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XG4gXG4gaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpXG4ge1xuK1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4rXG4gXHRpZiAodGlwY19vd25faWQobmV0KSkge1xuIFx0XHRwcl9pbmZvKFwiQ2Fubm90IGNvbmZpZ3VyZSBub2RlIGlkZW50aXR5IHR3aWNlXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXHRwcl9pbmZvKFwiU3RhcnRlZCBpbiBuZXR3b3JrIG1vZGVcXG5cIik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQsIDApO1xuIFxuIFx0aWYgKG5vZGVfaWQpXG4gXHRcdHRpcGNfc2V0X25vZGVfaWQobmV0LCBub2RlX2lkKTtcbkBAIC0xMjUsOCArMTI4LDggQEAgaW50IHRpcGNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0LCB1OCAqbm9kZV9pZCwgdTMyIGFkZHIpXG4gXG4gc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiB7XG4tXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrID0gezAsIGFkZHJ9O1xuK1x0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3QgdGlwY191YWRkciB1YTtcbiBcbiBcdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxuQEAgLTEzOCw3ICsxNDEsMTEgQEAgc3RhdGljIHZvaWQgdGlwY19uZXRfZmluYWxpemUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiBcdHRpcGNfbmFtZWRfcmVpbml0KG5ldCk7XG4gXHR0aXBjX3NrX3JlaW5pdChuZXQpO1xuIFx0dGlwY19tb25fcmVpbml0X3NlbGYobmV0KTtcbi1cdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBhZGRyKTtcbitcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMSk7XG4rXHQvKiBSZWRpc3RyaWJ1dGUgYnVsayBvZiBwdWJsaWNhdGlvbnMgdmlhIG5vZGUtdXAgZXZlbnQgb3Igbm9kZSdzIHRpbWVyXG4rXHQgKiBpZiB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGZhaWxzLlxuK1x0ICovXG4rXHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgYWRkciwgTlVMTCk7XG4gfVxuIFxuIHZvaWQgdGlwY19uZXRfZmluYWxpemVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5jIGIvbmV0L3RpcGMvbm9kZS5jXG5pbmRleCA2ODNhMTM2ZTUzZWZjLi5jYTRhOGZjY2E2NDQ3IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbm9kZS5jXG4rKysgYi9uZXQvdGlwYy9ub2RlLmNcbkBAIC0xMTEsNiArMTExLDcgQEAgc3RydWN0IHRpcGNfYmNsaW5rX2VudHJ5IHtcbiAgKiBAcGVlcl9uZXQ6IHBlZXIncyBuZXQgbmFtZXNwYWNlXG4gICogQHBlZXJfaGFzaF9taXg6IGhhc2ggZm9yIHRoaXMgcGVlciAoRklYTUUpXG4gICogQGNyeXB0b19yeDogUlggY3J5cHRvIGhhbmRsZXJcbisgKiBAZGlzdF9idWxrOiBmbGFnIHRvIHJlZGlzdHJpYnV0ZSBjbHVzdGVyLXNjb3BlIHB1YmxpY2F0aW9uc1xuICAqL1xuIHN0cnVjdCB0aXBjX25vZGUge1xuIFx0dTMyIGFkZHI7XG5AQCAtMTQ1LDYgKzE0Niw3IEBAIHN0cnVjdCB0aXBjX25vZGUge1xuICNpZmRlZiBDT05GSUdfVElQQ19DUllQVE9cbiBcdHN0cnVjdCB0aXBjX2NyeXB0byAqY3J5cHRvX3J4O1xuICNlbmRpZlxuK1x0YXRvbWljX3QgZGlzdF9idWxrO1xuIH07XG4gXG4gLyogTm9kZSBGU00gc3RhdGVzIGFuZCBldmVudHM6XG5AQCAtMzQ1LDYgKzM0NywxNSBAQCBzdGF0aWMgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbiBcdHJldHVybiBub2RlO1xuIH1cbiBcbit2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXG4re1xuK1x0c3RydWN0IHRpcGNfbm9kZSAqbm9kZTtcbitcbitcdG5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGFkZHIpO1xuK1x0aWYgKG5vZGUpXG4rXHRcdGF0b21pY19zZXQoXHUwMDI2bm9kZS1cdTAwM2VkaXN0X2J1bGssIDEpO1xuK31cbitcbiAvKiB0aXBjX25vZGVfZmluZF9ieV9pZCAtIGxvY2F0ZSBzcGVjaWZpZWQgbm9kZSBvYmplY3QgYnkgaXRzIDEyOC1iaXQgaWRcbiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWRcbiAgKiB0byBmaW5kIHRoZSBub2RlIGJ5IGl0cyAzMi1iaXQgaWQsIGFuZCBpcyBub3QgdGltZSBjcml0aWNhbFxuQEAgLTM5Myw2ICs0MDQsMTQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9ja19mYXN0KHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bi1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGlwY19ub2RlX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbilcbit7XG4rXHRpbnQgYmVhcmVyX2lkO1xuK1xuK1x0Zm9yIChiZWFyZXJfaWQgPSAwOyBiZWFyZXJfaWQgXHUwMDNjIE1BWF9CRUFSRVJTOyBiZWFyZXJfaWQrKylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0X19yZWxlYXNlcyhuLVx1MDAzZWxvY2spXG4ge1xuQEAgLTQwMiw2ICs0MjEsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICpwdWJsX2xpc3Q7XG4gXHRzdHJ1Y3QgdGlwY191YWRkciB1YTtcbiBcdHUzMiBiZWFyZXJfaWQsIG5vZGU7XG4rXHRpbnQgcmMgPSAwLCBlcnIgPSAwO1xuIFxuIFx0aWYgKGxpa2VseSghZmxhZ3MpKSB7XG4gXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuQEAgLTQyNSwxNiArNDQ1LDI0IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdFx0dGlwY19wdWJsX25vdGlmeShuZXQsIHB1YmxfbGlzdCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9OT0RFX1VQKVxuLVx0XHR0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4rXHRcdHJjID0gdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgbm9kZSwgbi1cdTAwM2VjYXBhYmlsaXRpZXMpO1xuIFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX1VQKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfdXAobmV0LCBub2RlLCBiZWFyZXJfaWQpO1xuLVx0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbitcdFx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIHNrLnJlZiwgXHUwMDI2ZXJyKTtcbiBcdH1cbiBcdGlmIChmbGFncyBcdTAwMjYgVElQQ19OT1RJRllfTElOS19ET1dOKSB7XG4gXHRcdHRpcGNfbW9uX3BlZXJfZG93bihuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4gXHRcdHRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmKTtcbiBcdH1cbitcbitcdC8qIE1lbW9yeSBhbGxvY2F0aW9uIGhhcyBmYWlsZWQuIEJyaW5nIHRoZSBub2RlIGRvd24gdG8gc3RhcnQgb3ZlciBidWxrXG4rXHQgKiBkaXN0cmlidXRpb24gd2hlbiB0aGUgZmlyc3QgbGluayBpcyB1cCBhZ2Fpbi5cbitcdCAqL1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHR0aXBjX25vZGVfZG93bihuKTtcbitcdGVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUylcbitcdFx0dGlwY19ub2RlX2xpbmtfZG93bihuLCBiZWFyZXJfaWQsIGZhbHNlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGlwY19ub2RlX2Fzc2lnbl9wZWVyX25ldChzdHJ1Y3QgdGlwY19ub2RlICpuLCB1MzIgaGFzaF9taXhlcylcbkBAIC01NjQsNiArNTkyLDcgQEAgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyLCB1OCAqcGVlcl9pZCxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXB1YmxfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZWNvbm5fc2tzKTtcbitcdGF0b21pY19zZXQoXHUwMDI2bi1cdTAwM2VkaXN0X2J1bGssIDApO1xuIFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5Lm5hbWVkcSk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkuaW5wdXRxMSk7XG4gXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5hcnJ2cSk7XG5AQCAtODAzLDcgKzgzMiw4IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0c3RydWN0IHRpcGNfbm9kZSAqbiA9IHRpbWVyX2NvbnRhaW5lcl9vZihuLCB0LCB0aW1lcik7XG4gXHRzdHJ1Y3QgdGlwY19saW5rX2VudHJ5ICpsZTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgeG1pdHE7XG4tXHRpbnQgcmVtYWlucyA9IG4tXHUwMDNlbGlua19jbnQ7XG4rXHRpbnQgcmVtYWlucyA9IDA7XG4rXHRpbnQgZGlzdF9yYyA9IDA7XG4gXHRpbnQgYmVhcmVyX2lkO1xuIFx0aW50IHJjID0gMDtcbiBcbkBAIC04MTQsNiArODQ0LDkgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbitcdGlmIChhdG9taWNfeGNoZyhcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCkpXG4rXHRcdGRpc3RfcmMgPSB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUobi1cdTAwM2VuZXQsIG4tXHUwMDNlYWRkcik7XG4rXG4gI2lmZGVmIENPTkZJR19USVBDX0NSWVBUT1xuIFx0LyogVGFrZSBhbnkgY3J5cHRvIGtleSByZWxhdGVkIGFjdGlvbnMgZmlyc3QgKi9cbiBcdHRpcGNfY3J5cHRvX3RpbWVvdXQobi1cdTAwM2VjcnlwdG9fcngpO1xuQEAgLTgyNSw2ICs4NTgsNyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdCAqL1xuIFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbiBcdG4tXHUwMDNla2VlcGFsaXZlX2ludHYgPSAxMDAwMDtcbitcdHJlbWFpbnMgPSBuLVx1MDAzZWxpbmtfY250O1xuIFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0Zm9yIChiZWFyZXJfaWQgPSAwOyByZW1haW5zIFx1MDAyNlx1MDAyNiAoYmVhcmVyX2lkIFx1MDAzYyBNQVhfQkVBUkVSUyk7IGJlYXJlcl9pZCsrKSB7XG4gXHRcdHRpcGNfbm9kZV9yZWFkX2xvY2sobik7XG5AQCAtODM1LDExICs4NjksMTMgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRcdFx0dGlwY19ub2RlX2NhbGN1bGF0ZV90aW1lcihuLCBsZS1cdTAwM2VsaW5rKTtcbiBcdFx0XHRyYyA9IHRpcGNfbGlua190aW1lb3V0KGxlLVx1MDAzZWxpbmssIFx1MDAyNnhtaXRxKTtcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZsZS1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRyZW1haW5zLS07XG4rXHRcdFx0aWYgKGRpc3RfcmMgIT0gLUVOT0JVRlMpXG4rXHRcdFx0XHRyZW1haW5zLS07XG4gXHRcdH1cbiBcdFx0dGlwY19ub2RlX3JlYWRfdW5sb2NrKG4pO1xuIFx0XHR0aXBjX2JlYXJlcl94bWl0KG4tXHUwMDNlbmV0LCBiZWFyZXJfaWQsIFx1MDAyNnhtaXRxLCBcdTAwMjZsZS1cdTAwM2VtYWRkciwgbik7XG4tXHRcdGlmIChyYyBcdTAwMjYgVElQQ19MSU5LX0RPV05fRVZUKVxuK1x0XHQvKiBGb3JjZSB0aGUgbm9kZSBkb3duIGluIGNhc2UgdGhlIHJlZGlzdHJpYnV0aW9uIGZhaWxlZCAqL1xuK1x0XHRpZiAoKHJjIFx1MDAyNiBUSVBDX0xJTktfRE9XTl9FVlQpIHx8IChkaXN0X3JjID09IC1FTk9CVUZTKSlcbiBcdFx0XHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xuIFx0fVxuIFx0bW9kX3RpbWVyKFx1MDAyNm4tXHUwMDNldGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG4tXHUwMDNla2VlcGFsaXZlX2ludHYpKTtcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmggYi9uZXQvdGlwYy9ub2RlLmhcbmluZGV4IDE1NGE1YmJiMGQyOWQuLjBmNzc3Y2ZlN2MwMWUgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9ub2RlLmhcbisrKyBiL25ldC90aXBjL25vZGUuaFxuQEAgLTEyOCw0ICsxMjgsNSBAQCBpbnQgdGlwY19ubF9ub2RlX3NldF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gaW50IHRpcGNfbmxfbm9kZV9mbHVzaF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gI2VuZGlmXG4gdm9pZCB0aXBjX25vZGVfcHJlX2NsZWFudXBfbmV0KHN0cnVjdCBuZXQgKmV4aXRfbmV0KTtcbit2b2lkIHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC90aXBjL3NvY2tldC5jIGIvbmV0L3RpcGMvc29ja2V0LmNcbmluZGV4IGQ1ZDcwZWIyMzBiNTYuLjZiODNiZGZjNDM5YzMgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9zb2NrZXQuY1xuKysrIGIvbmV0L3RpcGMvc29ja2V0LmNcbkBAIC0yOTE5LDcgKzI5MTksNyBAQCBzdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcbiBcdFx0cmV0dXJuIC1FQUREUklOVVNFO1xuIFx0c2thZGRyLnJlZiA9IHRzay1cdTAwM2Vwb3J0aWQ7XG4gXHRza2FkZHIubm9kZSA9IHRpcGNfb3duX2FkZHIobmV0KTtcbi1cdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcdTAwMjZza2FkZHIsIGtleSk7XG4rXHRwID0gdGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCB1YSwgXHUwMDI2c2thZGRyLCBrZXksIE5VTEwpO1xuIFx0aWYgKHVubGlrZWx5KCFwKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMzo1NDoyMC4xMDAxMDU2NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTk1MTQ2MjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUSVBDIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBwb2tpbmcgYXJvdW5kIGluIHRoZSBMaW51eCBrZXJuZWwncyBUSVBDIChUcmFuc3BhcmVudCBJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pIHN1YnN5c3RlbS4gTG9va3MgbGlrZSBpdCB0b3VjaGVzIGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgdGhlIGNvcmUsIGhpdHRpbmcgYSBidW5jaCBvZiBmaWxlczogYGNvcmUuYy9oYCwgYG5hbWVfZGlzdHIuYy9oYCwgYG5hbWVfdGFibGUuYy9oYCwgYG5ldC5jYCwgYG5vZGUuYy9oYCwgYW5kIGBzb2NrZXQuY2AuIENsZWFybHksIHRoaXMgaXMgYSBkZWVwIGRpdmUgaW50byBUSVBDJ3MgaW50ZXJuYWxzLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKGAtRU5PQlVGU2ApIHdpdGhpbiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCBhbmQgYHRpcGNfbmFtZXRibF9wdWJsaXNoYC4gU21hcnQgbW92ZS4gVGhvc2Uga2luZHMgb2YgZXJyb3JzIGNhbiBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBzaWRlIGVmZmVjdHMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5IGluIGEgY29tbXVuaWNhdGlvbiBzeXN0ZW0uIFBsdXMsIEkgc2VlIHNvbWUgbmV3IGZsYWdzIGJlaW5nIGFkZGVkIHRvIGB0aXBjX25ldGAgYW5kIGB0aXBjX25vZGVgLCB3aGljaCBpcyBvZnRlbiBhbiBpbmRpY2F0b3Igb2YgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBUSVBDIGNvcmUgbG9naWMgaXRzZWxmLlxuXG5HaXZlbiB0aGF0IFRJUEMgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgc29ja2V0IEFQSSAoYEFGX1RJUENgKSwgdGhpcyBpcyBhIGNsZWFyIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIHJlYWxseSBmb2N1cyBvbiBhcmVhcyB3aGVyZSB0aGVzZSBuZXcgZXJyb3ItaGFuZGxpbmcgcGF0aHMgY29tZSBpbnRvIHBsYXkuIExldCdzIHNlZS4uLiB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQgYXJlOiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYF9fdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AsIGB0aXBjX25vZGVfdGltZW91dGAsIGB0aXBjX25vZGVfd3JpdGVfdW5sb2NrYCwgYW5kIGB0aXBjX25ldF9maW5hbGl6ZWAuIEknbGwgd2FudCB0byB0YXJnZXQgdGhlc2UgZnVuY3Rpb25zLlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBLY29uZmlnIGZpbGUgKGBuZXQvdGlwYy9LY29uZmlnYCkgdG8gZW5zdXJlIHRoYXQgVElQQyBpcyBwcm9wZXJseSBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLlxuXG5BZnRlciB0aGF0LCBsZXQncyBhbHNvIGRvIGEgcXVpY2sgY29kZSBzZWFyY2ggdG8gdmVyaWZ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDQyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTU6NTIuMDUxNTcwOTMxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODc0MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUSVBDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvS2NvbmZpZy01LVxcbm5ldC90aXBjL0tjb25maWc6NjptZW51Y29uZmlnIFRJUENcXG5uZXQvdGlwYy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIlRoZSBUSVBDIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy0yMy1cXG5uZXQvdGlwYy9LY29uZmlnOjI0OmNvbmZpZyBUSVBDX01FRElBX0lCXFxubmV0L3RpcGMvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMjktXFx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cXG5uZXQvdGlwYy9LY29uZmlnOjMwOmNvbmZpZyBUSVBDX01FRElBX1VEUFxcbm5ldC90aXBjL0tjb25maWctMzEtXFx0Ym9vbCBcXFwiSVAvVURQIG1lZGlhIHR5cGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90aXBjL0tjb25maWctMzctXFxubmV0L3RpcGMvS2NvbmZpZzozODpjb25maWcgVElQQ19DUllQVE9cXG5uZXQvdGlwYy9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIlRJUEMgZW5jcnlwdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3RpcGMvS2NvbmZpZy01Mi1cXG5uZXQvdGlwYy9LY29uZmlnOjUzOmNvbmZpZyBUSVBDX0RJQUdcXG5uZXQvdGlwYy9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCJUSVBDOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU1OjUyLjA5ODQ0NzIxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NTcwMzQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBUSVBDIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgYFRJUENgIGNvbmZpZyBpcyB0aGUgY29yZSwgdGhlIGNlbnRyYWwgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMsIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBwaWVjZXMgb2YgdGhlIHN5c3RlbSBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciB0aGlzIHRoaW5nIHRvIHdvcmsuIE15IG5leHQgbW92ZSBpcyB0byBjaGVjayB0aGUgYG5ldC90aXBjL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdHlwaWNhbCBwbGFjZSBmb3IgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGRldGFpbHMsIGVzcGVjaWFsbHkgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIG91dCB3aGF0IG90aGVyIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIG9yIHdoYXQgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCBmb3IgYFRJUENgIHRvIGJlIHJlbGV2YW50IG9yIGV2ZW4gYnVpbGRhYmxlLiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIHRoYXQgS2NvbmZpZyBmaWxlIGhvbGRzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY3NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU1OjU1LjM2NDE1MjYzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVElQQyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgVElQQ1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBUSVBDIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoZSBUcmFuc3BhcmVudCBJbnRlciBQcm9jZXNzIENvbW11bmljYXRpb24gKFRJUEMpIHByb3RvY29sIGlzXFxuICAxMTpcXHRcXHQgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sXFxuICAxMjpcXHRcXHQgIG9yaWdpbmF0ZXMgZnJvbSBFcmljc3NvbiB3aGVyZSBpdCBoYXMgYmVlbiB1c2VkIGluIGNhcnJpZXIgZ3JhZGVcXG4gIDEzOlxcdFxcdCAgY2x1c3RlciBhcHBsaWNhdGlvbnMgZm9yIG1hbnkgeWVhcnMuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBUaGlzIHByb3RvY29sIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2hcXG4gIDE4OlxcdFxcdCAgY2FuIGJlIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdVxcbiAgMTk6XFx0XFx0ICB3YW50KS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aXBjLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0XFxuICAyMDpcXHRcXHQgIGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlIGFuZCByZWFkIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XFx1MDAzZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTU6NTUuMzY0MjA4ODkzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwNDQxMjI1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRJUEMgRGVwZW5kZW5jaWVzIGFuZCBDb3JlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCB0b3VjaGVzIHRoZSBUSVBDIHN1YnN5c3RlbSwgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBUSVBDIGRlcGVuZHMgb24gSU5FVC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIGFzIGEgcmVzdWx0IG9mIHRoZXNlIGNoYW5nZXMuIE15IGZpcnN0IHBhc3Mgc2hvd3MgdGhlc2U6IGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCwgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCwgYW5kIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBzaW5jZSB0aG9zZSBhcmUgdGhlIG9uZXMgSSBzaG91bGQgcmVhbGx5IGZvY3VzIG9uLiBJJ20gc2VlaW5nIGZyb20gYG5ldC90aXBjL25hbWVfZGlzdHIuY2AgdGhhdCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCBhbmQgYHRpcGNfbmFtZWRfbm9kZV91cGAgYXJlIGluZGVlZCBub24tc3RhdGljIGFuZCBleHBvcnRlZC4gIFNpbWlsYXJseSwgZnJvbSBgbmV0L3RpcGMvbmFtZV90YWJsZS5jYCwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBhbmQgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCBhcmUgbm9uLXN0YXRpYy4gIEZpbmFsbHksIGB0aXBjX25vZGVfc2V0X2Rpc3RfYnVsa2AgbG9va3MgZ29vZCwgZnJvbSBgbmV0L3RpcGMvbm9kZS5jYC5cblxuSSdtIG5vdGluZyB0aGF0IHRoZXJlIGFyZSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMgbGlrZSBgdGlwY19uZXRfaW5pdGAsIGB0aXBjX25ldF9maW5hbGl6ZWAsIGB0aXBjX25vZGVfdGltZW91dGAsIGFuZCBgdGlwY19ub2RlX3dyaXRlX3VubG9ja2AsIGJ1dCB0aG9zZSBhcHBlYXIgdG8gYmUgZWl0aGVyIG1vcmUgZ2VuZXJpYyBvciwgaW4gdGhlIGNhc2Ugb2YgYHRpcGNfbm9kZV90aW1lb3V0YCwgYHRpcGNfbm9kZV93cml0ZV91bmxvY2tgIGFuZCBgdGlwY19uZXRfZmluYWxpemVgLCBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGRlLXByaW9yaXRpemUgdGhlbS4gVGhlIG1haW4gY2FuZGlkYXRlcyBmb3IgY2xvc2VyIGluc3BlY3Rpb24gYXJlIHRoZSBmdW5jdGlvbnMgSSBsaXN0ZWQgYmVmb3JlLlxuXG5Pa2F5LCBsZXQncyBkb3VibGUtY2hlY2sgdGhvc2UgXCJGb2N1c1N5bWJvbHNcIi4gSSdtIGNvbmZpcm1pbmcgdGhhdCBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCBpcyBkZWZpbmVkIGluIGBuYW1lX2Rpc3RyLmhgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGlzIGFsc28gaW4gYG5hbWVfdGFibGUuaGAsIGFuZCBgdGlwY19ub2RlX3NldF9kaXN0X2J1bGtgIGlzIGluIGBub2RlLmhgLiAgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCBpcyBhbHNvIGluIGBuYW1lX3RhYmxlLmhgLiBJIG5lZWQgdG8gZW5zdXJlIHRob3NlIGhlYWRlcnMgYXJlIGNvcnJlY3RseSBpbmNsdWRlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gdG8gZW5zdXJlIHRoaXMgaXMgVElQQyByZWxhdGVkLCB3aGljaCBpdCBsb29rcyBsaWtlLlxuXG5TbyBteSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBUSVBDIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgc3BlY2lmaWNhbGx5IGAtRU5PQlVGU2AsIGR1cmluZyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIFRoaXMgaW50cm9kdWNlcyBzdGF0ZSBmbGFncyBhbmQgbW9kaWZpZXMgbm9kZSB0aW1lb3V0IGFuZCB1bmxvY2sgbG9naWMgdG8gZGVhbCB3aXRoIHJlLWRpc3RyaWJ1dGlvbiBvZiBjbHVzdGVyLXNjb3BlZCBwdWJsaWNhdGlvbnMgd2hlbiBhbGxvY2F0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVElQQyBsb2dpYyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBBRl9USVBDYCBzb2NrZXQgZmFtaWx5LlxuXG5JJ20gY29uZmlkZW50IGluIHRoZXNlIFwiRm9jdXNTeW1ib2xzXCIgbm93OiBgdGlwY19uYW1lZF9kaXN0cmlidXRlYCwgYHRpcGNfbmFtZWRfbm9kZV91cGAsIGB0aXBjX25hbWV0YmxfcHVibGlzaGAsIGB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YmAsIGFuZCBgdGlwY19ub2RlX3NldF9kaXN0X2J1bGtgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgYFRJUENgLiBOb3cgSSBjYW4gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNzMsIk91dHB1dFRva2VucyI6MTg1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MDYuNDA4MzM0NDg3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTQyNzAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiLFxuICAgIFwidGlwY19uYW1lZF9ub2RlX3VwXCIsXG4gICAgXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICAgIFwidGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJcIixcbiAgICBcInRpcGNfbm9kZV9zZXRfZGlzdF9idWxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIGZsYWdzIHRvIGB0aXBjX25ldGAgYW5kIGB0aXBjX25vZGVgIGFuZCBtb2RpZmllcyB0aGUgbm9kZSB0aW1lb3V0IGFuZCB1bmxvY2sgbG9naWMgdG8gaGFuZGxlIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgVElQQyBsb2dpYywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBmYW1pbHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfbmFtZWRfZGlzdHJpYnV0ZVwiLFxuICAgIFwidGlwY19uYW1lZF9ub2RlX3VwXCIsXG4gICAgXCJ0aXBjX25hbWV0YmxfcHVibGlzaFwiLFxuICAgIFwidGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJcIixcbiAgICBcInRpcGNfbm9kZV9zZXRfZGlzdF9idWxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRJUEMgc3Vic3lzdGVtIHRvIGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBuYW1lIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IGludHJvZHVjZXMgbmV3IHN0YXRlIGZsYWdzIHRvIGB0aXBjX25ldGAgYW5kIGB0aXBjX25vZGVgIGFuZCBtb2RpZmllcyB0aGUgbm9kZSB0aW1lb3V0IGFuZCB1bmxvY2sgbG9naWMgdG8gaGFuZGxlIHJlZGlzdHJpYnV0aW9uIG9mIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgVElQQyBsb2dpYywgd2hpY2ggaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdmlhIHRoZSBBRl9USVBDIHNvY2tldCBmYW1pbHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjA2LjQ4Nzc2ODk3NloiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY2MDgxMDYyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjA2LjQ4ODM3MzU3NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NTY2MDIwMjQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA2ODdlMTQ1OWVlNzMxYTBkNjMyYjU2NTkwZWY3MGExMTdlMzgxNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwMzo1NDoxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuY1xuaW5kZXggMzE1OTc1YzNiZTgxOC4uMGYxZDNkZGVhZTA5NSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2NvcmUuY1xuKysrIGIvbmV0L3RpcGMvY29yZS5jXG5AQCAtNjEsNiArNjEsOSBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgdGlwY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHR0bi1cdTAwM2V0cmlhbF9hZGRyID0gMDtcbiBcdHRuLVx1MDAzZWFkZHJfdHJpYWxfZW5kID0gMDtcbiBcdHRuLVx1MDAzZWNhcGFiaWxpdGllcyA9IFRJUENfTk9ERV9DQVBBQklMSVRJRVM7XG4rXHR0bi1cdTAwM2VudF9zdG9wID0gZmFsc2U7XG4rXHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcbitcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XG4gXHRJTklUX1dPUksoXHUwMDI2dG4tXHUwMDNld29yaywgdGlwY19uZXRfZmluYWxpemVfd29yayk7XG4gXHRtZW1zZXQodG4tXHUwMDNlbm9kZV9pZCwgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWQpKTtcbiBcdG1lbXNldCh0bi1cdTAwM2Vub2RlX2lkX3N0cmluZywgMCwgc2l6ZW9mKHRuLVx1MDAzZW5vZGVfaWRfc3RyaW5nKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5oIGIvbmV0L3RpcGMvY29yZS5oXG5pbmRleCA5Y2U1ZjlmZjZjYzAzLi45NzViMWQ0ODE4NmU2IDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvY29yZS5oXG4rKysgYi9uZXQvdGlwYy9jb3JlLmhcbkBAIC0xNDUsNiArMTQ1LDEyIEBAIHN0cnVjdCB0aXBjX25ldCB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbiBcdC8qIFRoZSBudW1iZXJzIG9mIHdvcmsgcXVldWVzIGluIHNjaGVkdWxlICovXG4gXHRhdG9taWNfdCB3cV9jb3VudDtcbitcdC8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9kZSdzIGFkZHJlc3MgaXMgc2V0ICovXG4rXHRhdG9taWNfdCBub2RlX2FkZHJfc2V0O1xuK1x0LyogVGhlIG5hbWUgdGFibGUgaGFzIHN0b3BwZWQgd29ya2luZyAqL1xuK1x0Ym9vbCBudF9zdG9wO1xuK1x0LyogTm9kZSdzIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIG5hbWUgdGFibGUgKi9cbitcdGJvb2wgbnRfc2VsZl9ub2RlX2V4aXN0O1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19uZXQgKnRpcGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbmluZGV4IGJhNGY0OTA2ZTEzYjcuLjA2MGM0MmQ4ZmRhNTQgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmNcbisrKyBiL25ldC90aXBjL25hbWVfZGlzdHIuY1xuQEAgLTk1LDkgKzk1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZW5vZGVfc2NvcGUpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4gXHRza2IgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApO1xuIFx0aWYgKCFza2IpIHtcbiBcdFx0cHJfd2FybihcIlB1YmxpY2F0aW9uIGRpc3RyaWJ1dGlvbiBmYWlsdXJlXFxuXCIpO1xuQEAgLTEyMSw5ICsxMTksNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwdWJsaWNhdGlvbiAqcClcbiBcdHN0cnVjdCBkaXN0cl9pdGVtICppdGVtO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbi1cdHdyaXRlX2xvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlKTtcbi1cdHdyaXRlX3VubG9ja19iaChcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlX2xvY2spO1xuIFx0aWYgKHAtXHUwMDNlc2NvcGUgPT0gVElQQ19OT0RFX1NDT1BFKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbkBAIC0xNDYsOSArMTQyLDE0IEBAIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuICAqIEBkbm9kZTogbm9kZSB0byBiZSB1cGRhdGVkXG4gICogQHBsczogbGlua2VkIGxpc3Qgb2YgcHVibGljYXRpb24gaXRlbXMgdG8gYmUgcGFja2VkIGludG8gYnVmZmVyIGNoYWluXG4gICogQHNlcW5vOiBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgbWVzc2FnZVxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4rICpcbiAgKi9cbi1zdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbi1cdFx0XHQgICAgIHUzMiBkbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGxzLCB1MTYgc2Vxbm8pXG4rc3RhdGljIGludCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbitcdFx0XHQgICAgdTMyIGRub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwbHMsIHUxNiBzZXFubylcbiB7XG4gXHRzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbkBAIC0xNjQsOCArMTY1LDkgQEAgc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsXG4gXHRcdFx0c2tiID0gbmFtZWRfcHJlcGFyZV9idWYobmV0LCBQVUJMSUNBVElPTiwgbXNnX3JlbSxcbiBcdFx0XHRcdFx0XHRkbm9kZSk7XG4gXHRcdFx0aWYgKCFza2IpIHtcbitcdFx0XHRcdF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO1xuIFx0XHRcdFx0cHJfd2FybihcIkJ1bGsgcHVibGljYXRpb24gZmFpbHVyZVxcblwiKTtcbi1cdFx0XHRcdHJldHVybjtcbitcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcdFx0XHR9XG4gXHRcdFx0aGRyID0gYnVmX21zZyhza2IpO1xuIFx0XHRcdG1zZ19zZXRfYmNfYWNrX2ludmFsaWQoaGRyLCB0cnVlKTtcbkBAIC0xOTUsNiArMTk3LDgyIEBAIHN0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LFxuIFx0aGRyID0gYnVmX21zZyhza2JfcGVla190YWlsKGxpc3QpKTtcbiBcdG1zZ19zZXRfbGFzdF9idWxrKGhkcik7XG4gXHRtc2dfc2V0X25hbWVkX3NlcW5vKGhkciwgc2Vxbm8pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIF9fdGlwY19uYW1lZF9kaXN0cmlidXRlIC0gYnVpbGQgYSBsaXN0IG9mIHB1YmxpY2F0aW9ucyBuZWVkIHRvIGJlIGRpc3RyaWJ1dGVkXG4rICogQG5ldDogdGhlIGFzc29jaWF0ZWQgbmV0d29yayBuYW1lc3BhY2VcbisgKiBAZG5vZGU6IGRlc3RpbmF0aW9uIG5vZGVcbisgKiBAaGVhZDogbGlzdCBvZiBwdWJsaWNhdGlvbnNcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4rc3RhdGljIGludCBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmX2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IG5hbWVfdGFibGUgKm50ID0gdGlwY19uYW1lX3RhYmxlKG5ldCk7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcbitcdC8qIE5hbWUgdGFibGUgaGFzIGJlZW4gZGVsZXRlZCBhZnRlciBuYW1lc3BhY2UgdGVhcmRvd24gb3JcbitcdCAqIFRJUEMgbW9kdWxlIGV4aXQuXG4rXHQgKi9cbitcdGlmICh1bmxpa2VseSh0bi1cdTAwM2VudF9zdG9wKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBOb2RlJ3Mgc2VsZiBhZGRyZXNzIGlzIG5vdCBzZXQgeWV0ICovXG4rXHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnRuLVx1MDAzZW5vZGVfYWRkcl9zZXQpKSB7XG4rXHRcdC8qIERlZmVyIHRoZSBkaXN0cmlidXRpb24gdG8gbm9kZSdzIHRpbWVyICovXG4rXHRcdHRpcGNfbm9kZV9zZXRfZGlzdF9idWxrKG5ldCwgZG5vZGUpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICh0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QpXG4rXHRcdGdvdG8gZGlzdHJpYnV0ZTtcbitcbitcdGlmICh0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihuZXQpKVxuK1x0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXG4rXHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSB0cnVlO1xuK1xuK2Rpc3RyaWJ1dGU6XG4rXHRpZiAobmFtZWRfZGlzdHJpYnV0ZShuZXQsIGhlYWQsIGRub2RlLFxuK1x0XHRcdCAgICAgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgbnQtXHUwMDNlc25kX254dCkgPT0gLUVOT0JVRlMpXG4rXHRcdHJldHVybiAtRU5PQlVGUztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUgLSBkaXN0cmlidXRlIGFsbCBwdWJsaWNhdGlvbnMgdG8gc3BlY2lmaWVkIG5vZGVcbisgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuKyAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4rICpcbisgKi9cbitpbnQgdGlwY19uYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKVxuK3tcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1x0c3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkO1xuK1x0aW50IHJjID0gMDtcbitcbitcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZoZWFkKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0bi1cdTAwM2VuYW1ldGJsX2xvY2spO1xuK1x0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcdTAwMjZoZWFkKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAoIXJjIFx1MDAyNlx1MDAyNiAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmhlYWQpKSB7XG4rXHRcdGlmICh0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKSA9PSAtRU5PQlVGUylcbitcdFx0XHRyYyA9IC1FTk9CVUZTO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiAvKipcbkBAIC0yMDIsMjUgKzI4MCwzMiBAQCBzdGF0aWMgdm9pZCBuYW1lZF9kaXN0cmlidXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCxcbiAgKiBAbmV0OiB0aGUgYXNzb2NpYXRlZCBuZXR3b3JrIG5hbWVzcGFjZVxuICAqIEBkbm9kZTogZGVzdGluYXRpb24gbm9kZVxuICAqIEBjYXBhYmlsaXRpZXM6IHBlZXIgbm9kZSdzIGNhcGFiaWxpdGllc1xuKyAqXG4rICogUmV0dXJuOlxuKyAqICogMCAgICAgICAgICAtIFN1Y2Nlc3NcbisgKiAqIC1FTk9CVUZTICAgLSBObyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlXG4rICpcbiAgKi9cbi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcylcbitpbnQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MTYgY2FwYWJpbGl0aWVzKVxuIHtcbiBcdHN0cnVjdCBuYW1lX3RhYmxlICpudCA9IHRpcGNfbmFtZV90YWJsZShuZXQpO1xuIFx0c3RydWN0IHRpcGNfbmV0ICp0biA9IHRpcGNfbmV0KG5ldCk7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhlYWQ7XG4tXHR1MTYgc2Vxbm87XG4rXHRpbnQgcmMgPSAwO1xuIFxuIFx0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNmhlYWQpO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gXHRpZiAoIShjYXBhYmlsaXRpZXMgXHUwMDI2IFRJUENfTkFNRURfQkNBU1QpKVxuIFx0XHRudC1cdTAwM2VyY19kZXN0cysrO1xuLVx0c2Vxbm8gPSBudC1cdTAwM2VzbmRfbnh0O1xuK1xuK1x0cmMgPSBfX3RpcGNfbmFtZWRfZGlzdHJpYnV0ZShuZXQsIGRub2RlLCBcdTAwMjZoZWFkKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4rXHRpZiAoIXJjIFx1MDAyNlx1MDAyNiAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmhlYWQpKSB7XG4rXHRcdGlmICh0aXBjX25vZGVfeG1pdChuZXQsIFx1MDAyNmhlYWQsIGRub2RlLCAwKSA9PSAtRU5PQlVGUylcbitcdFx0XHRyYyA9IC1FTk9CVUZTO1xuK1x0fVxuIFxuLVx0cmVhZF9sb2NrX2JoKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGVfbG9jayk7XG4tXHRuYW1lZF9kaXN0cmlidXRlKG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUsIHNlcW5vKTtcbi1cdHRpcGNfbm9kZV94bWl0KG5ldCwgXHUwMDI2aGVhZCwgZG5vZGUsIDApO1xuLVx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbitcdHJldHVybiByYztcbiB9XG4gXG4gLyoqXG5AQCAtNDE2LDUgKzUwMSw2IEBAIHZvaWQgdGlwY19uYW1lZF9yZWluaXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZSwgYmluZGluZ19ub2RlKVxuIFx0XHRwLVx1MDAzZXNrLm5vZGUgPSBzZWxmO1xuIFx0bnQtXHUwMDNlcmNfZGVzdHMgPSAwO1xuK1x0dG4tXHUwMDNlbnRfc3RvcCA9IGZhbHNlO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5oIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG5pbmRleCBjNjc3ZjZmMDgyZGZiLi4yMDQzMDk2YWU5NjdkIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5oXG4rKysgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmhcbkBAIC02OSwxMSArNjksMTIgQEAgc3RydWN0IGRpc3RyX2l0ZW0ge1xuIFxuIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpO1xuIHN0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTtcbi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7XG4raW50IHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTE2IGNhcGFiaWxpdGllcyk7XG4gdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcSxcbiBcdFx0ICAgIHUxNiAqcmN2X254dCwgYm9vbCAqb3Blbik7XG4gdm9pZCB0aXBjX25hbWVkX3JlaW5pdChzdHJ1Y3QgbmV0ICpuZXQpO1xuIHZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsaXN0X2hlYWQgKm5zdWJfbGlzdCxcbiBcdFx0ICAgICAgdTMyIGFkZHIsIHUxNiBjYXBhYmlsaXRpZXMpO1xuK2ludCB0aXBjX25hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUpO1xuIFxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfdGFibGUuYyBiL25ldC90aXBjL25hbWVfdGFibGUuY1xuaW5kZXggMjUzYzcyZDEzNjZlYi4uM2JiMGNlNzgzZGJkZiAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25hbWVfdGFibGUuY1xuKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jXG5AQCAtMzI5LDcgKzMyOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqdGlwY19zZXJ2aWNlX2NyZWF0ZV9yYW5nZShzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYyxcbiBcbiBzdGF0aWMgYm9vbCB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1Ymwoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYyxcbi1cdFx0XHRcdCAgICAgc3RydWN0IHB1YmxpY2F0aW9uICpwKVxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIGludCAqZXJyKVxuIHtcbiBcdHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViLCAqdG1wO1xuIFx0c3RydWN0IHNlcnZpY2VfcmFuZ2UgKnNyO1xuQEAgLTMzOSwxMCArMzM5LDEyIEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRib29sIHJlcyA9IGZhbHNlO1xuIFx0dTMyIGtleSA9IHAtXHUwMDNla2V5O1xuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuIFx0c3IgPSB0aXBjX3NlcnZpY2VfY3JlYXRlX3JhbmdlKHNjLCBwKTtcbi1cdGlmICghc3IpXG4rXHRpZiAoIXNyKSB7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0KmVyciA9IC1FTk9CVUZTO1xuIFx0XHRnb3RvICBleGl0O1xuK1x0fVxuIFxuIFx0Zmlyc3QgPSBsaXN0X2VtcHR5KFx1MDAyNnNyLVx1MDAzZWFsbF9wdWJsKTtcbiBcbkBAIC0zNTMsNiArMzU1LDggQEAgc3RhdGljIGJvb2wgdGlwY19zZXJ2aWNlX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRwcl9kZWJ1ZyhcIkZhaWxlZCB0byBiaW5kIGR1cGxpY2F0ZSAldSwldSwldS8ldToldS8ldVxcblwiLFxuIFx0XHRcdFx0IHAtXHUwMDNlc3IudHlwZSwgcC1cdTAwM2Vzci5sb3dlciwgcC1cdTAwM2Vzci51cHBlcixcbiBcdFx0XHRcdCBub2RlLCBwLVx1MDAzZXNrLnJlZiwga2V5KTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0KmVyciA9IC1FRVhJU1Q7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4gXHR9XG5AQCAtMzcxLDcgKzM3NSw2IEBAIHN0YXRpYyBib29sIHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoIXJlcylcbiBcdFx0cHJfd2FybihcIkZhaWxlZCB0byBiaW5kIHRvICV1LCV1LCV1XFxuXCIsXG4gXHRcdFx0cC1cdTAwM2Vzci50eXBlLCBwLVx1MDAzZXNyLmxvd2VyLCBwLVx1MDAzZXNyLnVwcGVyKTtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG5AQCAtNDkwLDggKzQ5MywxMiBAQCBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRzYyA9IHRpcGNfc2VydmljZV9maW5kKG5ldCwgdWEpO1xuIFx0aWYgKCFzYylcbiBcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgdWEpO1xuLVx0aWYgKHNjIFx1MDAyNlx1MDAyNiB0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCkpXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHRpZiAoc2MgXHUwMDI2XHUwMDI2IHRpcGNfc2VydmljZV9pbnNlcnRfcHVibChuZXQsIHNjLCBwLCBOVUxMKSkge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdFx0cmV0dXJuIHA7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZzYy1cdTAwM2Vsb2NrKTtcbiBcdGtmcmVlKHApO1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTc2MCwyNCArNzY3LDQ0IEBAIHZvaWQgdGlwY19uYW1ldGJsX2J1aWxkX2dyb3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfZ3JvdXAgKmdycCxcbiAvKiB0aXBjX25hbWV0YmxfcHVibGlzaCAtIGFkZCBzZXJ2aWNlIGJpbmRpbmcgdG8gbmFtZSB0YWJsZVxuICAqL1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssXG4rXHRcdFx0XHRcdCB1MzIga2V5LCBpbnQgKmVycilcbiB7XG4gXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHUzMiBtYXhfdXNlcl9wdWIgPSBUSVBDX01BWF9QVUJMIC0gMTtcbiBcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHB1YmxpY2F0aW9uICpwID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuK1x0Ym9vbCBwcm90b2NvbF90eXBlID0gZmFsc2U7XG4gXHR1MzIgcmNfZGVzdHM7XG4gXG4rXHRpZiAodWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX05PREVfU1RBVEUgfHwgdWEtXHUwMDNlc3IudHlwZSA9PSBUSVBDX0xJTktfU1RBVEUgfHxcbitcdCAgICB1YS1cdTAwM2Vzci50eXBlID09IFRJUENfVE9QX1NSVilcbitcdFx0cHJvdG9jb2xfdHlwZSA9IHRydWU7XG4rXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dG4tXHUwMDNlbmFtZXRibF9sb2NrKTtcbitcdGlmIChwcm90b2NvbF90eXBlKVxuK1x0XHRnb3RvIGluc2VydDtcbiBcbi1cdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gVElQQ19NQVhfUFVCTCkge1xuLVx0XHRwcl93YXJuKFwiQmluZCBmYWlsZWQsIG1heCBsaW1pdCAldSByZWFjaGVkXFxuXCIsIFRJUENfTUFYX1BVQkwpO1xuK1x0LyogUmVzZXJ2ZSBvbmUgZW50cnkgZm9yIG5vZGUgc3RhdGUgc2VydmljZSB0eXBlIGJlY2F1c2UgaXQgaGFzIGNsdXN0ZXJcbitcdCAqIHNjb3BlIGFuZCBpdCBpcyBkaXN0cmlidXRlZCBpbiBidWxrLiBTbywgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXInc1xuK1x0ICogcHVibGljYXRpb25zIGlzIChUSVBDX01BWF9QVUJMIC0gMSkuXG4rXHQgKi9cbitcdGlmIChudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50IFx1MDAzZT0gbWF4X3VzZXJfcHViKSB7XG4rXHRcdHByX3dhcm4oXCJCaW5kIGZhaWxlZCwgbWF4IGxpbWl0ICV1IHJlYWNoZWRcXG5cIiwgbWF4X3VzZXJfcHViKTtcbiBcdFx0Z290byBleGl0O1xuIFx0fVxuIFxuK2luc2VydDpcbiBcdHAgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4rXHRcdC8qIE5vdCBjb3VudCBub2RlIHN0YXRlLCBsaW5rIHN0YXRlIGFuZCB0b3BvbG9neSBzZXJ2ZXIgdHlwZXNcbitcdFx0ICogc28gdGhhdCBtYXhpbXVtIG50LVx1MDAzZWxvY2FsX3B1YmxfY291bnQgZG9lcyBub3QgcHJldmVudFxuK1x0XHQgKiBwcm90b2NvbCBzZXJ2aWNlIHR5cGVzIGZyb20gYmVpbmcgaW5zZXJ0ZWQgaW50byB0aGUgbmFtZVxuK1x0XHQgKiB0YWJsZS5cbitcdFx0ICovXG4rXHRcdGlmICghcHJvdG9jb2xfdHlwZSlcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50Kys7XG4gXHRcdHNrYiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHApO1xuIFx0fVxuIFx0cmNfZGVzdHMgPSBudC1cdTAwM2VyY19kZXN0cztcbkBAIC03ODYsOCArODEzLDgxIEBAIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXG4gXHRpZiAoc2tiKVxuIFx0XHR0aXBjX25vZGVfYnJvYWRjYXN0KG5ldCwgc2tiLCByY19kZXN0cyk7XG4rXHRlbHNlIGlmIChwIFx1MDAyNlx1MDAyNiAocC1cdTAwM2VzY29wZSA9PSBUSVBDX0NMVVNURVJfU0NPUEUpIFx1MDAyNlx1MDAyNiBlcnIpXG4rXHRcdCplcnIgPSAtRU5PQlVGUztcbiBcdHJldHVybiBwO1xuK31cbitcbisvKipcbisgKiB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YiAtIGluc2VydCBwdWJsaWNhdGlvbiBvZiBub2RlJ3Mgc2VsZiBhZGRyZXNzXG4rICogQG5ldDogbmV0d29yayBuYW1lc3BhY2VcbisgKlxuKyAqIFJldHVybjpcbisgKiAqIDAgICAgICAgICAgLSBTdWNjZXNzXG4rICogKiAtRU5PQlVGUyAgIC0gTm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZVxuKyAqXG4rICovXG4raW50IHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViKHN0cnVjdCBuZXQgKm5ldClcbit7XG4rXHRzdHJ1Y3QgbmFtZV90YWJsZSAqbnQgPSB0aXBjX25hbWVfdGFibGUobmV0KTtcbitcdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuK1x0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2s7XG4rXHRzdHJ1Y3Qgc2VydmljZV9yYW5nZSAqc3I7XG4rXHRzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYztcbitcdGJvb2wgc2NfY3JlYXRlZCA9IGZhbHNlO1xuK1x0c3RydWN0IHB1YmxpY2F0aW9uICpwO1xuK1x0c3RydWN0IHRpcGNfdWFkZHIgdWE7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdHNrLnJlZiA9IDA7XG4rXHRzay5ub2RlID0gdG4tXHUwMDNlbm9kZV9hZGRyO1xuK1x0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG4rXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuK1x0c2MgPSB0aXBjX3NlcnZpY2VfZmluZChuZXQsIFx1MDAyNnVhKTtcbitcdGlmICghc2MpIHtcbitcdFx0c2MgPSB0aXBjX3NlcnZpY2VfY3JlYXRlKG5ldCwgXHUwMDI2dWEpO1xuK1x0XHRpZiAoIXNjKVxuK1x0XHRcdHJldHVybiAtRU5PQlVGUztcbitcdFx0c2NfY3JlYXRlZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHRzciA9IHRpcGNfc2VydmljZV9maW5kX3JhbmdlKHNjLCBcdTAwMjZ1YSk7XG4rXHQvKiAxLiB0aXBjX25ldF9maW5hbGl6ZV93b3JrKCkgaXMgbm90IHNjaGVkdWxlZCBiZWNhdXNlIG9mIG5hbWVzcGFjZVxuK1x0ICogICAgdGVhcmRvd24uXG4rXHQgKiAyLiBPciB0aXBjX25ldF9maW5hbGl6ZSgpIC0tLVx1MDAzZSB0aXBjX25hbWV0YmxfcHVibGlzaCgpIGhhcyBmYWlsZWRcbitcdCAqICAgIHRvIGluc2VydCBub2RlIHNlbGYgYWRkcmVzcyBwdWJsaWNhdGlvbiBpbnRvIG50LVx1MDAzZWNsdXN0ZXJfc2NvcGVcbitcdCAqICAgIGR1ZSB0byBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuK1x0ICogMy4gT3IgdGlwY19uZXRfZmluYWxpemUoKSAtLS1cdTAwM2UgdGlwY19uYW1ldGJsX3B1Ymxpc2goKSBoYXMgbm90XG4rXHQgKiAgICBleGVjdXRlZCB5ZXQuXG4rXHQgKi9cbitcdGlmICghc3IpIHtcbitcdFx0cCA9IHRpcGNfcHVibF9jcmVhdGUoXHUwMDI2dWEsIFx1MDAyNnNrLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuK1x0XHRpZiAoIXApXG4rXHRcdFx0Z290byBlcnJvcjtcbiBcbitcdFx0aWYgKCF0aXBjX3NlcnZpY2VfaW5zZXJ0X3B1YmwobmV0LCBzYywgcCwgXHUwMDI2ZXJyKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChlcnIgPT0gLUVOT0JVRlMpKSB7XG4rXHRcdFx0a2ZyZWUocCk7XG4rXHRcdFx0Z290byBlcnJvcjtcbitcdFx0fVxuK1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnAtXHUwMDNlYmluZGluZ19ub2RlLCBcdTAwMjZudC1cdTAwM2VjbHVzdGVyX3Njb3BlKTtcbitcdFx0Z290byBleGl0O1xuK2Vycm9yOlxuK1x0XHRpZiAoc2NfY3JlYXRlZCkge1xuK1x0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZzYy1cdTAwM2VzZXJ2aWNlX2xpc3QpO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNjLVx1MDAzZWxvY2spO1xuK1x0XHRcdGtmcmVlX3JjdShzYywgcmN1KTtcbitcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4rXHRcdH1cbitcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRU5PQlVGUztcbitcdH1cbitleGl0OlxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c2MtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyoqXG5AQCAtODEwLDcgKzkxMCwxMCBAQCB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcbiBcdHAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCB1YSwgc2ssIGtleSk7XG4gXHRpZiAocCkge1xuLVx0XHRudC1cdTAwM2Vsb2NhbF9wdWJsX2NvdW50LS07XG4rXHRcdGlmIChwLVx1MDAzZXNyLnR5cGUgIT0gVElQQ19OT0RFX1NUQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcC1cdTAwM2Vzci50eXBlICE9IFRJUENfTElOS19TVEFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHAtXHUwMDNlc3IudHlwZSAhPSBUSVBDX1RPUF9TUlYpXG4rXHRcdFx0bnQtXHUwMDNlbG9jYWxfcHVibF9jb3VudC0tO1xuIFx0XHRza2IgPSB0aXBjX25hbWVkX3dpdGhkcmF3KG5ldCwgcCk7XG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX3NvY2spO1xuIFx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbkBAIC04OTksNyArMTAwMiw2IEBAIGludCB0aXBjX25hbWV0YmxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZudC1cdTAwM2Vub2RlX3Njb3BlKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm50LVx1MDAzZWNsdXN0ZXJfc2NvcGUpO1xuLVx0cndsb2NrX2luaXQoXHUwMDI2bnQtXHUwMDNlY2x1c3Rlcl9zY29wZV9sb2NrKTtcbiBcdHRuLVx1MDAzZW5hbWV0YmwgPSBudDtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gXHRyZXR1cm4gMDtcbkBAIC05MTksNiArMTAyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfc2VydmljZV9kZWxldGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19zZXJ2aWNlICpzYylcbiBcdHJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShzciwgdG1wciwgXHUwMDI2c2MtXHUwMDNlcmFuZ2VzLCB0cmVlX25vZGUpIHtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgXHUwMDI2c3ItXHUwMDNlYWxsX3B1YmwsIGFsbF9wdWJsKSB7XG4gXHRcdFx0dGlwY19zZXJ2aWNlX3JlbW92ZV9wdWJsKHNyLCBcdTAwMjZwLVx1MDAzZXNrLCBwLVx1MDAzZWtleSk7XG4rXHRcdFx0bGlzdF9kZWwoXHUwMDI2cC1cdTAwM2ViaW5kaW5nX25vZGUpO1xuIFx0XHRcdGtmcmVlX3JjdShwLCByY3UpO1xuIFx0XHR9XG4gXHRcdHJiX2VyYXNlX2F1Z21lbnRlZChcdTAwMjZzci1cdTAwM2V0cmVlX25vZGUsIFx1MDAyNnNjLVx1MDAzZXJhbmdlcywgXHUwMDI2c3JfY2FsbGJhY2tzKTtcbkBAIC05NDksNiArMTA1Miw4IEBAIHZvaWQgdGlwY19uYW1ldGJsX3N0b3Aoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRcdHRpcGNfc2VydmljZV9kZWxldGUobmV0LCBzZXJ2aWNlKTtcbiBcdFx0fVxuIFx0fVxuK1x0dG4tXHUwMDNlbnRfc3RvcCA9IHRydWU7XG4rXHR0bi1cdTAwM2VudF9zZWxmX25vZGVfZXhpc3QgPSBmYWxzZTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRuLVx1MDAzZW5hbWV0YmxfbG9jayk7XG4gXG4gXHQvKiBUT0RPOiBjbGVhciB0bi1cdTAwM2VuYW1ldGJsLCBpbXBsZW1lbnQgcHJvcGVyIFJDVSBydWxlcyA/ICovXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG5pbmRleCA3ZmY2ZWVlYmFhZTY0Li5lN2EyYzUwZjA5OWNmIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oXG4rKysgYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmhcbkBAIC05Nyw3ICs5Nyw2IEBAIHN0cnVjdCBwdWJsaWNhdGlvbiB7XG4gICogQGNsdXN0ZXJfc2NvcGU6IGFsbCBsb2NhbCBwdWJsaWNhdGlvbnMgd2l0aCBjbHVzdGVyIHNjb3BlXG4gICogICAgICAgICAgICAgICAtIHVzZWQgYnkgbmFtZV9kaXN0ciB0byBzZW5kIGJ1bGsgdXBkYXRlcyB0byBuZXcgbm9kZXNcbiAgKiAgICAgICAgICAgICAgIC0gdXNlZCBieSBuYW1lX2Rpc3RyIGR1cmluZyByZS1pbml0IG9mIG5hbWUgdGFibGVcbi0gKiBAY2x1c3Rlcl9zY29wZV9sb2NrOiBsb2NrIGZvciBhY2Nlc3NpbmcgQGNsdXN0ZXJfc2NvcGVcbiAgKiBAbG9jYWxfcHVibF9jb3VudDogbnVtYmVyIG9mIHB1YmxpY2F0aW9ucyBpc3N1ZWQgYnkgdGhpcyBub2RlXG4gICogQHJjX2Rlc3RzOiBkZXN0aW5hdGlvbiBub2RlIGNvdW50ZXJcbiAgKiBAc25kX254dDogbmV4dCBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgdXNlZFxuQEAgLTEwNyw3ICsxMDYsNiBAQCBzdHJ1Y3QgbmFtZV90YWJsZSB7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCBzZXJ2aWNlc1tUSVBDX05BTUVUQkxfU0laRV07XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGVfc2NvcGU7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfc2NvcGU7XG4tXHRyd2xvY2tfdCBjbHVzdGVyX3Njb3BlX2xvY2s7XG4gXHR1MzIgbG9jYWxfcHVibF9jb3VudDtcbiBcdHUzMiByY19kZXN0cztcbiBcdHUzMiBzbmRfbnh0O1xuQEAgLTEyNiwxMyArMTI0LDE1IEBAIGJvb2wgdGlwY19uYW1ldGJsX2xvb2t1cF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiB2b2lkIHRpcGNfbmFtZXRibF9idWlsZF9ncm91cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2dyb3VwICpncnAsXG4gXHRcdFx0ICAgICAgc3RydWN0IHRpcGNfdWFkZHIgKnVhKTtcbiBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfdWFkZHIgKnVhLFxuLVx0XHRcdFx0XHQgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLCB1MzIga2V5KTtcbitcdFx0XHRcdFx0IHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyICpzayxcbitcdFx0XHRcdFx0IHUzMiBrZXksIGludCAqZXJyKTtcbiB2b2lkIHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX3VhZGRyICp1YSxcbiBcdFx0XHQgICBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciAqc2ssIHUzMiBrZXkpO1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuIFx0XHRcdFx0XHQgICAgIHUzMiBrZXkpO1xuK2ludCB0aXBjX25hbWV0Yl9pbnNlcnRfc2VsZl9ub2RlX3B1YihzdHJ1Y3QgbmV0ICpuZXQpO1xuIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGlwY191YWRkciAqdWEsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHRpcGNfc29ja2V0X2FkZHIgKnNrLFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL25ldC5jIGIvbmV0L3RpcGMvbmV0LmNcbmluZGV4IDdlNjVkMGIwYzRhOGQuLjdhMmMxZTY3YWNhM2QgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9uZXQuY1xuKysrIGIvbmV0L3RpcGMvbmV0LmNcbkBAIC0xMTAsMTEgKzExMCwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTtcbiBcbiBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcilcbiB7XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbitcbiBcdGlmICh0aXBjX293bl9pZChuZXQpKSB7XG4gXHRcdHByX2luZm8oXCJDYW5ub3QgY29uZmlndXJlIG5vZGUgaWRlbnRpdHkgdHdpY2VcXG5cIik7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcdHByX2luZm8oXCJTdGFydGVkIGluIG5ldHdvcmsgbW9kZVxcblwiKTtcbitcdGF0b21pY19zZXQoXHUwMDI2dG4tXHUwMDNlbm9kZV9hZGRyX3NldCwgMCk7XG4gXG4gXHRpZiAobm9kZV9pZClcbiBcdFx0dGlwY19zZXRfbm9kZV9pZChuZXQsIG5vZGVfaWQpO1xuQEAgLTEyNSw4ICsxMjgsOCBAQCBpbnQgdGlwY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHU4ICpub2RlX2lkLCB1MzIgYWRkcilcbiBcbiBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuIHtcbi1cdHN0cnVjdCB0aXBjX25ldCAqdG4gPSB0aXBjX25ldChuZXQpO1xuIFx0c3RydWN0IHRpcGNfc29ja2V0X2FkZHIgc2sgPSB7MCwgYWRkcn07XG4rXHRzdHJ1Y3QgdGlwY19uZXQgKnRuID0gdGlwY19uZXQobmV0KTtcbiBcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xuIFxuIFx0dGlwY191YWRkcihcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX0NMVVNURVJfU0NPUEUsXG5AQCAtMTM4LDcgKzE0MSwxMSBAQCBzdGF0aWMgdm9pZCB0aXBjX25ldF9maW5hbGl6ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuIFx0dGlwY19uYW1lZF9yZWluaXQobmV0KTtcbiBcdHRpcGNfc2tfcmVpbml0KG5ldCk7XG4gXHR0aXBjX21vbl9yZWluaXRfc2VsZihuZXQpO1xuLVx0dGlwY19uYW1ldGJsX3B1Ymxpc2gobmV0LCBcdTAwMjZ1YSwgXHUwMDI2c2ssIGFkZHIpO1xuK1x0YXRvbWljX3NldChcdTAwMjZ0bi1cdTAwM2Vub2RlX2FkZHJfc2V0LCAxKTtcbitcdC8qIFJlZGlzdHJpYnV0ZSBidWxrIG9mIHB1YmxpY2F0aW9ucyB2aWEgbm9kZS11cCBldmVudCBvciBub2RlJ3MgdGltZXJcbitcdCAqIGlmIHRpcGNfbmFtZXRibF9wdWJsaXNoKCkgZmFpbHMuXG4rXHQgKi9cbitcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBhZGRyLCBOVUxMKTtcbiB9XG4gXG4gdm9pZCB0aXBjX25ldF9maW5hbGl6ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmNcbmluZGV4IDY4M2ExMzZlNTNlZmMuLmNhNGE4ZmNjYTY0NDcgMTAwNjQ0XG4tLS0gYS9uZXQvdGlwYy9ub2RlLmNcbisrKyBiL25ldC90aXBjL25vZGUuY1xuQEAgLTExMSw2ICsxMTEsNyBAQCBzdHJ1Y3QgdGlwY19iY2xpbmtfZW50cnkge1xuICAqIEBwZWVyX25ldDogcGVlcidzIG5ldCBuYW1lc3BhY2VcbiAgKiBAcGVlcl9oYXNoX21peDogaGFzaCBmb3IgdGhpcyBwZWVyIChGSVhNRSlcbiAgKiBAY3J5cHRvX3J4OiBSWCBjcnlwdG8gaGFuZGxlclxuKyAqIEBkaXN0X2J1bGs6IGZsYWcgdG8gcmVkaXN0cmlidXRlIGNsdXN0ZXItc2NvcGUgcHVibGljYXRpb25zXG4gICovXG4gc3RydWN0IHRpcGNfbm9kZSB7XG4gXHR1MzIgYWRkcjtcbkBAIC0xNDUsNiArMTQ2LDcgQEAgc3RydWN0IHRpcGNfbm9kZSB7XG4gI2lmZGVmIENPTkZJR19USVBDX0NSWVBUT1xuIFx0c3RydWN0IHRpcGNfY3J5cHRvICpjcnlwdG9fcng7XG4gI2VuZGlmXG4rXHRhdG9taWNfdCBkaXN0X2J1bGs7XG4gfTtcbiBcbiAvKiBOb2RlIEZTTSBzdGF0ZXMgYW5kIGV2ZW50czpcbkBAIC0zNDUsNiArMzQ3LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKVxuIFx0cmV0dXJuIG5vZGU7XG4gfVxuIFxuK3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcilcbit7XG4rXHRzdHJ1Y3QgdGlwY19ub2RlICpub2RlO1xuK1xuK1x0bm9kZSA9IHRpcGNfbm9kZV9maW5kKG5ldCwgYWRkcik7XG4rXHRpZiAobm9kZSlcbitcdFx0YXRvbWljX3NldChcdTAwMjZub2RlLVx1MDAzZWRpc3RfYnVsaywgMSk7XG4rfVxuK1xuIC8qIHRpcGNfbm9kZV9maW5kX2J5X2lkIC0gbG9jYXRlIHNwZWNpZmllZCBub2RlIG9iamVjdCBieSBpdHMgMTI4LWJpdCBpZFxuICAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgd2hlbiBhIGRpc2NvdmVyeSByZXF1ZXN0IGZhaWxlZFxuICAqIHRvIGZpbmQgdGhlIG5vZGUgYnkgaXRzIDMyLWJpdCBpZCwgYW5kIGlzIG5vdCB0aW1lIGNyaXRpY2FsXG5AQCAtMzkzLDYgKzQwNCwxNCBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrX2Zhc3Qoc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdHdyaXRlX3VubG9ja19iaChcdTAwMjZuLVx1MDAzZWxvY2spO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0aXBjX25vZGVfZG93bihzdHJ1Y3QgdGlwY19ub2RlICpuKVxuK3tcbitcdGludCBiZWFyZXJfaWQ7XG4rXG4rXHRmb3IgKGJlYXJlcl9pZCA9IDA7IGJlYXJlcl9pZCBcdTAwM2MgTUFYX0JFQVJFUlM7IGJlYXJlcl9pZCsrKVxuK1x0XHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfd3JpdGVfdW5sb2NrKHN0cnVjdCB0aXBjX25vZGUgKm4pXG4gXHRfX3JlbGVhc2VzKG4tXHUwMDNlbG9jaylcbiB7XG5AQCAtNDAyLDYgKzQyMSw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV93cml0ZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbilcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKnB1YmxfbGlzdDtcbiBcdHN0cnVjdCB0aXBjX3VhZGRyIHVhO1xuIFx0dTMyIGJlYXJlcl9pZCwgbm9kZTtcbitcdGludCByYyA9IDAsIGVyciA9IDA7XG4gXG4gXHRpZiAobGlrZWx5KCFmbGFncykpIHtcbiBcdFx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNm4tXHUwMDNlbG9jayk7XG5AQCAtNDI1LDE2ICs0NDUsMjQgQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxuIFx0XHR0aXBjX3B1Ymxfbm90aWZ5KG5ldCwgcHVibF9saXN0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFRJUENfTk9USUZZX05PREVfVVApXG4tXHRcdHRpcGNfbmFtZWRfbm9kZV91cChuZXQsIG5vZGUsIG4tXHUwMDNlY2FwYWJpbGl0aWVzKTtcbitcdFx0cmMgPSB0aXBjX25hbWVkX25vZGVfdXAobmV0LCBub2RlLCBuLVx1MDAzZWNhcGFiaWxpdGllcyk7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFRJUENfTk9USUZZX0xJTktfVVApIHtcbiBcdFx0dGlwY19tb25fcGVlcl91cChuZXQsIG5vZGUsIGJlYXJlcl9pZCk7XG4tXHRcdHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBzay5yZWYpO1xuK1x0XHR0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIFx1MDAyNnVhLCBcdTAwMjZzaywgc2sucmVmLCBcdTAwMjZlcnIpO1xuIFx0fVxuIFx0aWYgKGZsYWdzIFx1MDAyNiBUSVBDX05PVElGWV9MSU5LX0RPV04pIHtcbiBcdFx0dGlwY19tb25fcGVlcl9kb3duKG5ldCwgbm9kZSwgYmVhcmVyX2lkKTtcbiBcdFx0dGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgXHUwMDI2dWEsIFx1MDAyNnNrLCBzay5yZWYpO1xuIFx0fVxuK1xuK1x0LyogTWVtb3J5IGFsbG9jYXRpb24gaGFzIGZhaWxlZC4gQnJpbmcgdGhlIG5vZGUgZG93biB0byBzdGFydCBvdmVyIGJ1bGtcbitcdCAqIGRpc3RyaWJ1dGlvbiB3aGVuIHRoZSBmaXJzdCBsaW5rIGlzIHVwIGFnYWluLlxuK1x0ICovXG4rXHRpZiAocmMgXHUwMDNjIDApXG4rXHRcdHRpcGNfbm9kZV9kb3duKG4pO1xuK1x0ZWxzZSBpZiAoZXJyID09IC1FTk9CVUZTKVxuK1x0XHR0aXBjX25vZGVfbGlua19kb3duKG4sIGJlYXJlcl9pZCwgZmFsc2UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0aXBjX25vZGVfYXNzaWduX3BlZXJfbmV0KHN0cnVjdCB0aXBjX25vZGUgKm4sIHUzMiBoYXNoX21peGVzKVxuQEAgLTU2NCw2ICs1OTIsNyBAQCBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX25vZGVfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIsIHU4ICpwZWVyX2lkLFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bi1cdTAwM2VsaXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlcHVibF9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm4tXHUwMDNlY29ubl9za3MpO1xuK1x0YXRvbWljX3NldChcdTAwMjZuLVx1MDAzZWRpc3RfYnVsaywgMCk7XG4gXHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm4tXHUwMDNlYmNfZW50cnkubmFtZWRxKTtcbiBcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bi1cdTAwM2ViY19lbnRyeS5pbnB1dHExKTtcbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZuLVx1MDAzZWJjX2VudHJ5LmFycnZxKTtcbkBAIC04MDMsNyArODMyLDggQEAgc3RhdGljIHZvaWQgdGlwY19ub2RlX3RpbWVvdXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXHRzdHJ1Y3QgdGlwY19ub2RlICpuID0gdGltZXJfY29udGFpbmVyX29mKG4sIHQsIHRpbWVyKTtcbiBcdHN0cnVjdCB0aXBjX2xpbmtfZW50cnkgKmxlO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCB4bWl0cTtcbi1cdGludCByZW1haW5zID0gbi1cdTAwM2VsaW5rX2NudDtcbitcdGludCByZW1haW5zID0gMDtcbitcdGludCBkaXN0X3JjID0gMDtcbiBcdGludCBiZWFyZXJfaWQ7XG4gXHRpbnQgcmMgPSAwO1xuIFxuQEAgLTgxNCw2ICs4NDQsOSBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuK1x0aWYgKGF0b21pY194Y2hnKFx1MDAyNm4tXHUwMDNlZGlzdF9idWxrLCAwKSlcbitcdFx0ZGlzdF9yYyA9IHRpcGNfbmFtZWRfZGlzdHJpYnV0ZShuLVx1MDAzZW5ldCwgbi1cdTAwM2VhZGRyKTtcbitcbiAjaWZkZWYgQ09ORklHX1RJUENfQ1JZUFRPXG4gXHQvKiBUYWtlIGFueSBjcnlwdG8ga2V5IHJlbGF0ZWQgYWN0aW9ucyBmaXJzdCAqL1xuIFx0dGlwY19jcnlwdG9fdGltZW91dChuLVx1MDAzZWNyeXB0b19yeCk7XG5AQCAtODI1LDYgKzg1OCw3IEBAIHN0YXRpYyB2b2lkIHRpcGNfbm9kZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0ICovXG4gXHR0aXBjX25vZGVfcmVhZF9sb2NrKG4pO1xuIFx0bi1cdTAwM2VrZWVwYWxpdmVfaW50diA9IDEwMDAwO1xuK1x0cmVtYWlucyA9IG4tXHUwMDNlbGlua19jbnQ7XG4gXHR0aXBjX25vZGVfcmVhZF91bmxvY2sobik7XG4gXHRmb3IgKGJlYXJlcl9pZCA9IDA7IHJlbWFpbnMgXHUwMDI2XHUwMDI2IChiZWFyZXJfaWQgXHUwMDNjIE1BWF9CRUFSRVJTKTsgYmVhcmVyX2lkKyspIHtcbiBcdFx0dGlwY19ub2RlX3JlYWRfbG9jayhuKTtcbkBAIC04MzUsMTEgKzg2OSwxMyBAQCBzdGF0aWMgdm9pZCB0aXBjX25vZGVfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbiBcdFx0XHR0aXBjX25vZGVfY2FsY3VsYXRlX3RpbWVyKG4sIGxlLVx1MDAzZWxpbmspO1xuIFx0XHRcdHJjID0gdGlwY19saW5rX3RpbWVvdXQobGUtXHUwMDNlbGluaywgXHUwMDI2eG1pdHEpO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmxlLVx1MDAzZWxvY2spO1xuLVx0XHRcdHJlbWFpbnMtLTtcbitcdFx0XHRpZiAoZGlzdF9yYyAhPSAtRU5PQlVGUylcbitcdFx0XHRcdHJlbWFpbnMtLTtcbiBcdFx0fVxuIFx0XHR0aXBjX25vZGVfcmVhZF91bmxvY2sobik7XG4gXHRcdHRpcGNfYmVhcmVyX3htaXQobi1cdTAwM2VuZXQsIGJlYXJlcl9pZCwgXHUwMDI2eG1pdHEsIFx1MDAyNmxlLVx1MDAzZW1hZGRyLCBuKTtcbi1cdFx0aWYgKHJjIFx1MDAyNiBUSVBDX0xJTktfRE9XTl9FVlQpXG4rXHRcdC8qIEZvcmNlIHRoZSBub2RlIGRvd24gaW4gY2FzZSB0aGUgcmVkaXN0cmlidXRpb24gZmFpbGVkICovXG4rXHRcdGlmICgocmMgXHUwMDI2IFRJUENfTElOS19ET1dOX0VWVCkgfHwgKGRpc3RfcmMgPT0gLUVOT0JVRlMpKVxuIFx0XHRcdHRpcGNfbm9kZV9saW5rX2Rvd24obiwgYmVhcmVyX2lkLCBmYWxzZSk7XG4gXHR9XG4gXHRtb2RfdGltZXIoXHUwMDI2bi1cdTAwM2V0aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobi1cdTAwM2VrZWVwYWxpdmVfaW50dikpO1xuZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuaCBiL25ldC90aXBjL25vZGUuaFxuaW5kZXggMTU0YTViYmIwZDI5ZC4uMGY3NzdjZmU3YzAxZSAxMDA2NDRcbi0tLSBhL25ldC90aXBjL25vZGUuaFxuKysrIGIvbmV0L3RpcGMvbm9kZS5oXG5AQCAtMTI4LDQgKzEyOCw1IEBAIGludCB0aXBjX25sX25vZGVfc2V0X2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBpbnQgdGlwY19ubF9ub2RlX2ZsdXNoX2tleShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiAjZW5kaWZcbiB2b2lkIHRpcGNfbm9kZV9wcmVfY2xlYW51cF9uZXQoc3RydWN0IG5ldCAqZXhpdF9uZXQpO1xuK3ZvaWQgdGlwY19ub2RlX3NldF9kaXN0X2J1bGsoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuY1xuaW5kZXggZDVkNzBlYjIzMGI1Ni4uNmI4M2JkZmM0MzljMyAxMDA2NDRcbi0tLSBhL25ldC90aXBjL3NvY2tldC5jXG4rKysgYi9uZXQvdGlwYy9zb2NrZXQuY1xuQEAgLTI5MTksNyArMjkxOSw3IEBAIHN0YXRpYyBpbnQgdGlwY19za19wdWJsaXNoKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfdWFkZHIgKnVhKVxuIFx0XHRyZXR1cm4gLUVBRERSSU5VU0U7XG4gXHRza2FkZHIucmVmID0gdHNrLVx1MDAzZXBvcnRpZDtcbiBcdHNrYWRkci5ub2RlID0gdGlwY19vd25fYWRkcihuZXQpO1xuLVx0cCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgdWEsIFx1MDAyNnNrYWRkciwga2V5KTtcbitcdHAgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHVhLCBcdTAwMjZza2FkZHIsIGtleSwgTlVMTCk7XG4gXHRpZiAodW5saWtlbHkoIXApKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjA2LjQ4ODM3NDIzNloiLCJTZXEiOjExLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTk4MTczNzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVElQQyBQYXRjaCBmb3IgTWVtb3J5IFNhZmV0eSBhbmQgTG9naWMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgVElQQyBzdWJzeXN0ZW0gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNwZWNpZmljYWxseSB0b3VjaGluZyBhIGhhbmRmdWwgb2YgY29yZSBmaWxlcyByZWxhdGVkIHRvIG5hbWluZyBhbmQgZGlzdHJpYnV0aW9uLiBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcywgc3BlY2lmaWNhbGx5IGAtRU5PQlVGU2AsIGR1cmluZyBuYW1lIHRhYmxlIG9wZXJhdGlvbnMuIFRoZSBrZXkgZmlsZXMgaW1wYWN0ZWQgYXJlIGBjb3JlLmMvaGAsIGBuYW1lX2Rpc3RyLmMvaGAsIGBuYW1lX3RhYmxlLmMvaGAsIGBuZXQuY2AsIGBub2RlLmMvaGAsIGFuZCBgc29ja2V0LmNgLlxuXG5NeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJ20gbG9va2luZyBmb3Igd2hlcmUgbmV3IGRhdGEgc3RydWN0dXJlcyBtaWdodCBiZSBpbnRyb2R1Y2VkIG9yIGhvdyBleGlzdGluZyBvbmVzIGFyZSBtb2RpZmllZCwgZXNwZWNpYWxseSBpZiB0aGV5IGludGVyYWN0IHdpdGggdXNlciBzcGFjZS4gSXQgc2VlbXMgdGhlIGZvY3VzIGhlcmUgaXMgcm9idXN0IGVycm9yIGhhbmRsaW5nIGFyb3VuZCBidWZmZXIgYWxsb2NhdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmZXcgbmV3IGZpZWxkcyBsaWtlIGB0bi1cdTAwM2VudF9zdG9wYCwgYHRuLVx1MDAzZW50X3NlbGZfbm9kZV9leGlzdGAsIGFuZCBgdG4tXHUwMDNlbm9kZV9hZGRyX3NldGAsIGJ1dCB0aGV5IGFwcGVhciByZWxhdGVkIHRvIGNvbnRyb2xsaW5nIHRoZSBmbG93IGFyb3VuZCB0aGUgYWxsb2NhdGlvbiBlcnJvcnMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgX190aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYW5kIGB0aXBjX25hbWV0YmxfcHVibGlzaGAgYXJlIGFsbCByZXR1cm5pbmcgZXJyb3IgY29kZXMgYW5kIHNwZWNpZmljYWxseSBoYW5kbGluZyBgLUVOT0JVRlNgLlxuXG5JJ20gemVyb2luZyBpbiBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzLiBUaGV54oCZcmUgbm93IHRha2luZyBgaW50ICplcnJgIGFyZ3VtZW50cyAoZS5nLiwgYHRpcGNfbmFtZXRibF9wdWJsaXNoYCkgb3IgcmV0dXJuaW5nIGBpbnRgIChlLmcuLCBgdGlwY19uYW1lZF9ub2RlX3VwYCwgYG5hbWVkX2Rpc3RyaWJ1dGVgKS4gVGhlIGBuYW1lZF9kaXN0cmlidXRlYCBmdW5jdGlvbiwgaW4gcGFydGljdWxhciwgY2F1Z2h0IG15IGV5ZSDigJMgaXQncyBoYW5kbGluZyBhIGBOVUxMYCByZXR1cm4gZnJvbSBgbmFtZWRfcHJlcGFyZV9idWZgIGJ5IHB1cmdpbmcgdGhlIHF1ZXVlIHdpdGggYF9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpO2AgYW5kIHJldHVybmluZyBgLUVOT0JVRlNgLiBUaGlzIHNlZW1zIHNvbGlkOyB3ZSdyZSBjbGVhbmluZyB1cCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCByZXNvdXJjZXMgYW5kIHByb3BhZ2F0aW5nIHRoZSBlcnJvci5cblxuQWgsIGBuYW1lZF9wcmVwYXJlX2J1ZmAgdXNlcyBgc2tiYCBhbGxvY2F0aW9uLiBJZiBpdCBmYWlscywgd2UgZ2V0IE5VTEwsIGFuZCBub3cgdGhlIGVycm9yIGhhbmRsaW5nIGlzIGluIHBsYWNlLiBUaGF0J3MgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuXG5cbkxldCdzIGRpc3NlY3QgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCB0byBtYWtlIHN1cmUgaXQgaXMgbm90IGxlYWtpbmcgaW5mb3JtYXRpb246XG5gYGBjXG5cdHNrLnJlZiA9IDA7XG5cdHNrLm5vZGUgPSB0bi1cdTAwM2Vub2RlX2FkZHI7XG5cdHRpcGNfdWFkZHIoXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19DTFVTVEVSX1NDT1BFLFxuXHRcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXHUwMDNlbm9kZV9hZGRyLCB0bi1cdTAwM2Vub2RlX2FkZHIpO1xuYGBgXG5IZXJlLCB3ZSdyZSBkZWFsaW5nIHdpdGggYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyIHNrO2Agb24gdGhlIHN0YWNrLiBJbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsLiBJIHNlZSBgc2sucmVmID0gMDtgIGFuZCBgc2subm9kZSA9IHRuLVx1MDAzZW5vZGVfYWRkcjtgIGFyZSBiZWluZyBzZXQuIE5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0aXBjX3NvY2tldF9hZGRyYCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZpZWxkcyB0aGF0IGFyZSBpbXBvcnRhbnQuIEl0IGFwcGVhcnMgdGhlIGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIGhhbmRsZWQgZ3JhY2VmdWxseSwgcHJldmVudGluZyBwYXJ0aWFsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIGJlaW5nIGV4cG9zZWQuIE92ZXJhbGwsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGluIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIFRJUEMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjE1LjY4NjU1MDczM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwNTQxMTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oLTQ3LVxcbmluY2x1ZGUvdWFwaS9saW51eC90aXBjLmg6NDg6c3RydWN0IHRpcGNfc29ja2V0X2FkZHIge1xcbmluY2x1ZGUvdWFwaS9saW51eC90aXBjLmgtNDktXFx0X191MzIgcmVmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMzo1NjoxOC4yOTE5NjY2MzJaIiwiU2VxIjoxMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MzUwMzgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZ2V0dGluZyBhIGZ1bGwgaGFuZGxlIG9uIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkcmA6XG5cbioqQW5hbHl6aW5nIGBzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkcmAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoaXMgc3RydWN0dXJlLCBgdGlwY19zb2NrZXRfYWRkcmAuIEknbSBnb2luZyB0byBsb29rIGJleW9uZCBhbnkgc3VwZXJmaWNpYWwgZGVzY3JpcHRpb25zIGFuZCByZWFsbHkgZHJpbGwgZG93biBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkgd2FudCB0byBzZWUgdGhlIGNvbXBsZXRlIGRlZmluaXRpb24sIHVuZGVyc3RhbmQgYWxsIHRoZSBtZW1iZXJzLCB0aGVpciBkYXRhIHR5cGVzLCBhbmQgd2hhdCBlYWNoIGZpZWxkIHNpZ25pZmllcyB3aXRoaW4gdGhlIFRJUEMgKFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbikgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gcmVwcmVzZW50aW5nIGFkZHJlc3NlcyBmb3IgVElQQyBzb2NrZXRzLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYWRkcmVzc2luZywgcm91dGluZywgYW5kIGNvbW11bmljYXRpb24gYmV0d2VlbiBwcm9jZXNzZXMgdXNpbmcgVElQQy4gSSdtIGFudGljaXBhdGluZyB0aGF0IGtub3dpbmcgdGhpcyB3aWxsIGluZm9ybSBtZSBhYm91dCBob3cgZGF0YSBpcyBzdHJ1Y3R1cmVkIGFuZCBob3cgcHJvY2Vzc2VzIGFyZSBpZGVudGlmaWVkIGFjcm9zcyB0aGUgVElQQyBuZXR3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg0NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjIxLjQ3NTQ3NDUyNloiLCJTZXEiOjE0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMTkwMzE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC90aXBjLmgtNDctXFxuaW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaDo0ODpzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaC00OS1cXHRfX3UzMiByZWY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjIyLjY5NzM4NTQ5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA3MDA2NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFRJUEMgSGVhZGVyIC0gTGluZSA0OCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGtlcm5lbCdzIFRJUEMgdXNlci1zcGFjZSBBUEkgaGVhZGVyIGZpbGUsIHNwZWNpZmljYWxseSBgaW5jbHVkZS91YXBpL2xpbnV4L3RpcGMuaGAuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDQ4LiBJJ20gZ3Vlc3NpbmcgdGhhdCBsaW5lIG1pZ2h0IGNvbnRhaW4gYSBjcml0aWNhbCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgcGVyaGFwcyBhIG1lc3NhZ2UgZm9ybWF0LCBzb2NrZXQgb3B0aW9uLCBvciBhIGNydWNpYWwgZW51bSByZWxhdGVkIHRvIGFkZHJlc3MgZmFtaWx5IG9yIG1lc3NhZ2UgdHlwZSBoYW5kbGluZyB3aXRoaW4gVElQQy4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgb3IgY29uc3RhbnRzIGRlY2xhcmVkIHRoZXJlIHRoYXQgd291bGQgYmUgdXNlZnVsIHdoZW4gZGV2ZWxvcGluZyBvciBkZWJ1Z2dpbmcgaW4gdGhlIHJlYWxtIG9mIFRJUEMtYmFzZWQgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJ20gbG9va2luZyBmb3IgYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSwgZmllbGQsIG9yIGNvbnN0YW50IHRoYXQgaXMgZ2l2aW5nIG1lIHBhdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE2MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAzOjU2OjI1LjkwNDM5NTg2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvdGlwYy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcbiAgNDE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICA0MjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc29ja2lvcy5oXFx1MDAzZVxcbiAgNDM6XFx0XFxuICA0NDpcXHQvKlxcbiAgNDU6XFx0ICogVElQQyBhZGRyZXNzaW5nIHByaW1pdGl2ZXNcXG4gIDQ2OlxcdCAqL1xcbiAgNDc6XFx0XFxuICA0ODpcXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciB7XFxuICA0OTpcXHRcXHRfX3UzMiByZWY7XFxuICA1MDpcXHRcXHRfX3UzMiBub2RlO1xcbiAgNTE6XFx0fTtcXG4gIDUyOlxcdFxcbiAgNTM6XFx0c3RydWN0IHRpcGNfc2VydmljZV9hZGRyIHtcXG4gIDU0OlxcdFxcdF9fdTMyIHR5cGU7XFxuICA1NTpcXHRcXHRfX3UzMiBpbnN0YW5jZTtcXG4gIDU2OlxcdH07XFxuICA1NzpcXHRcXG4gIDU4OlxcdHN0cnVjdCB0aXBjX3NlcnZpY2VfcmFuZ2Uge1xcbiAgNTk6XFx0XFx0X191MzIgdHlwZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MjUuOTA0NDk2ODY2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTExODI3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFNvY2tldCBBZGRyZXNzIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IHRpcGNfc29ja2V0X2FkZHJgIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGluaXRpYWxseS4gSXQgbG9va3MgbGlrZSBpdCBvbmx5IGNvbnRhaW5zIGByZWZgIGFuZCBgbm9kZWAuIFJpZ2h0IGF3YXksIEkgc2VlIGJvdGggYXJlIGluaXRpYWxpemVkOiBgc2sucmVmYCBpcyBzZXQgdG8gMCwgYW5kIGBzay5ub2RlYCBpcyBhc3NpZ25lZCBgdG4tXHUwMDNlbm9kZV9hZGRyYC4gU28sIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBhdCB0aGlzIHBvaW50LCB0aGUgYHNrYCBzdHJ1Y3R1cmUgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHJlZCBmbGFncyB0aGVyZS5cblxuTm93LCB0aGUgbmV4dCB0aGluZyB0aGF0IGNhdGNoZXMgbXkgZXllIGlzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IHRpcGNfdWFkZHIgdWFgLiAgSSBzZWUgYHRpcGNfdWFkZHJgIGlzIGJlaW5nIGNhbGxlZCBoZXJlIHdpdGggc3BlY2lmaWMgcGFyYW1ldGVycy4gSG1tLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYHRpcGNfdWFkZHJgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhvc2UgcGFyYW1ldGVyczsgdGhlIHNlcnZpY2UgcmFuZ2UsIHNjb3BlLCBub2RlIHN0YXRlLCBhbmQgdGhvc2UgYHRuLVx1MDAzZW5vZGVfYWRkcmAgYXJndW1lbnRzLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgdWFgIGlzIGFjdHVhbGx5IHBvcHVsYXRlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgZXhhY3RseSB3aGF0IGRhdGEgdGhpcyBpbml0aWFsaXphdGlvbiBpcyBwdXR0aW5nIGludG8gdGhhdCBgdWFgIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMzo1NjozMC4xMTU2ODE0NTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NjA5NTUyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY191YWRkclxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2FkZHIuaD01MD1zdHJ1Y3QgdGlwY191YWRkciB7XFxuLS1cXG5uZXQvdGlwYy9hZGRyLmgtNjMtXFxubmV0L3RpcGMvYWRkci5oOjY0OnN0YXRpYyBpbmxpbmUgdm9pZCB0aXBjX3VhZGRyKHN0cnVjdCB0aXBjX3VhZGRyICp1YSwgdTMyIGF0eXBlLCB1MzIgc2NvcGUsXFxubmV0L3RpcGMvYWRkci5oLTY1LVxcdFxcdFxcdCAgICAgIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlcilcXG4tLVxcbm5ldC90aXBjL21zZy5jPTcxMz1ib29sIHRpcGNfbXNnX2xvb2t1cF9kZXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICplcnIpXFxuLS1cXG5uZXQvdGlwYy9tc2cuYy03MzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm5ldC90aXBjL21zZy5jOjczNDpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBzY29wZSxcXG5uZXQvdGlwYy9tc2cuYy03MzUtXFx0XFx0ICAgbXNnX25hbWV0eXBlKG1zZyksIGluc3QsIGluc3QpO1xcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jPTMyMD1zdGF0aWMgdm9pZCB0aXBjX3B1YmxfcHVyZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnAsIHUzMiBhZGRyKVxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTMyNS1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzI2OlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIHAtXFx1MDAzZXNjb3BlLCBwLVxcdTAwM2Vzci50eXBlLFxcbm5ldC90aXBjL25hbWVfZGlzdHIuYy0zMjctXFx0XFx0ICAgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfZGlzdHIuYz0zNjQ9c3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkaXN0cl9pdGVtICppLFxcbi0tXFxubmV0L3RpcGMvbmFtZV9kaXN0ci5jLTM4MC1cXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmM6MzgxOlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG5uZXQvdGlwYy9uYW1lX2Rpc3RyLmMtMzgyLVxcdFxcdCAgIG50b2hsKGktXFx1MDAzZXR5cGUpLCBsb3dlciwgdXBwZXIpO1xcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jPTgzMD1pbnQgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWIoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTg0My1cXHRzay5ub2RlID0gdG4tXFx1MDAzZW5vZGVfYWRkcjtcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM6ODQ0OlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtODQ1LVxcdFxcdCAgIFRJUENfTk9ERV9TVEFURSwgdG4tXFx1MDAzZW5vZGVfYWRkciwgdG4tXFx1MDAzZW5vZGVfYWRkcik7XFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmM9OTMyPWJvb2wgdGlwY19uYW1ldGJsX3N1YnNjcmliZShzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YilcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYy05MzktXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jOjk0MDpcXHR0aXBjX3VhZGRyKFxcdTAwMjZ1YSwgVElQQ19TRVJWSUNFX1JBTkdFLCBUSVBDX05PREVfU0NPUEUsIHR5cGUsXFxubmV0L3RpcGMvbmFtZV90YWJsZS5jLTk0MS1cXHRcXHQgICBzdWItXFx1MDAzZXMuc2VxLmxvd2VyLCBzdWItXFx1MDAzZXMuc2VxLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYz05NjM9dm9pZCB0aXBjX25hbWV0YmxfdW5zdWJzY3JpYmUoc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIpXFxuLS1cXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtOTY4LVxcbm5ldC90aXBjL25hbWVfdGFibGUuYzo5Njk6XFx0dGlwY191YWRkcihcXHUwMDI2dWEsIFRJUENfU0VSVklDRV9SQU5HRSwgVElQQ19OT0RFX1NDT1BFLFxcbm5ldC90aXBjL25hbWVfdGFibGUuYy05NzAtXFx0XFx0ICAgc3ViLVxcdTAwM2VzLnNlcS50eXBlLCBzdWItXFx1MDAzZXMuc2VxLmxvd2VyLCBzdWItXFx1MDAzZXMuc2VxLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYz0xMTU3PXN0YXRpYyBpbnQgdGlwY19ubF9zZXJ2aWNlX2xpc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyxcXG4tLVxcbm5ldC90aXBjL25hbWVfdGFibGUuYy0xMTc2LVxcdFxcdCAgICAoIWkgXFx1MDAyNlxcdTAwMjYgKmxhc3Rfa2V5IFxcdTAwMjZcXHUwMDI2ICgqbGFzdF9sb3dlciA9PSAqbGFzdF9rZXkpKSkge1xcbm5ldC90aXBjL25hbWVfdGFibGUuYzoxMTc3OlxcdFxcdFxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfTk9ERV9TQ09QRSxcXG5uZXQvdGlwYy9uYW1lX3RhYmxlLmMtMTE3OC1cXHRcXHRcXHRcXHQgICAqbGFzdF90eXBlLCAqbGFzdF9sb3dlciwgKmxhc3RfbG93ZXIpO1xcbi0tXFxubmV0L3RpcGMvbmV0LmM9MTI5PXN0YXRpYyB2b2lkIHRpcGNfbmV0X2ZpbmFsaXplKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpXFxuLS1cXG5uZXQvdGlwYy9uZXQuYy0xMzQtXFxubmV0L3RpcGMvbmV0LmM6MTM1OlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfQ0xVU1RFUl9TQ09QRSxcXG5uZXQvdGlwYy9uZXQuYy0xMzYtXFx0XFx0ICAgVElQQ19OT0RFX1NUQVRFLCBhZGRyLCBhZGRyKTtcXG4tLVxcbm5ldC90aXBjL25vZGUuYz00MTU9c3RhdGljIHZvaWQgdGlwY19ub2RlX3dyaXRlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpuKVxcbi0tXFxubmV0L3RpcGMvbm9kZS5jLTQzMC1cXG5uZXQvdGlwYy9ub2RlLmM6NDMxOlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIFRJUENfTk9ERV9TQ09QRSxcXG5uZXQvdGlwYy9ub2RlLmMtNDMyLVxcdFxcdCAgIFRJUENfTElOS19TVEFURSwgbi1cXHUwMDNlYWRkciwgbi1cXHUwMDNlYWRkcik7XFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYz0yOTMyPXN0YXRpYyBpbnQgdGlwY19za193aXRoZHJhdyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCB0aXBjX3VhZGRyICp1YSlcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jLTI5NDAtXFx0XFx0aWYgKCF1YSkge1xcbm5ldC90aXBjL3NvY2tldC5jOjI5NDE6XFx0XFx0XFx0dGlwY191YWRkcihcXHUwMDI2X3VhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIHAtXFx1MDAzZXNjb3BlLFxcbm5ldC90aXBjL3NvY2tldC5jLTI5NDItXFx0XFx0XFx0XFx0ICAgcC1cXHUwMDNlc3IudHlwZSwgcC1cXHUwMDNlc3IubG93ZXIsIHAtXFx1MDAzZXNyLnVwcGVyKTtcXG4tLVxcbm5ldC90aXBjL3NvY2tldC5jPTMwNzI9c3RhdGljIGludCB0aXBjX3NrX2pvaW4oc3RydWN0IHRpcGNfc29jayAqdHNrLCBzdHJ1Y3QgdGlwY19ncm91cF9yZXEgKm1yZXEpXFxuLS1cXG5uZXQvdGlwYy9zb2NrZXQuYy0zMDk0LVxcdG1zZ19zZXRfZGVzdF9kcm9wcGFibGUoaGRyLCB0cnVlKTtcXG5uZXQvdGlwYy9zb2NrZXQuYzozMDk1OlxcdHRpcGNfdWFkZHIoXFx1MDAyNnVhLCBUSVBDX1NFUlZJQ0VfUkFOR0UsIG1yZXEtXFx1MDAzZXNjb3BlLFxcbm5ldC90aXBjL3NvY2tldC5jLTMwOTYtXFx0XFx0ICAgbXJlcS1cXHUwMDNldHlwZSwgbXJlcS1cXHUwMDNlaW5zdGFuY2UsIG1yZXEtXFx1MDAzZWluc3RhbmNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MzIuODc2NjQzOTE4WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk4MTg5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG5ldC90aXBjL2FkZHIuaGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGlzIFRJUEMgYWRkcmVzcyBpbXBsZW1lbnRhdGlvbiwgc28gbXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgbmV0L3RpcGMvYWRkci5oYCBoZWFkZXIgZmlsZS4gSXQncyBhIHN0YW5kYXJkIHByYWN0aWNlIGluIGxvdy1sZXZlbCBuZXR3b3JraW5nLCB3aGVyZSBkZWZpbml0aW9ucyBhcmUga2V5LCBhbmQgbGluZSA2NCBpcyBvZnRlbiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIHRoaXMgaXMgd2hlcmUgYW4gaW1wb3J0YW50IHN0cnVjdHVyZSBvciBjb25zdGFudCBtYXkgYmUgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgY3JpdGljYWwgcmVsYXRlZCB0byBhZGRyZXNzIGZvcm1hdCBvciBzb21lIGFzc29jaWF0ZWQgcGFyYW1ldGVycyB0byBiZSBkZWZpbmVkIGFyb3VuZCB0aGF0IHBvaW50LiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjA3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MzYuMzI2NDY1ODQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2FkZHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRzdHJ1Y3QgdGlwY191YWRkciB7XFxuICA1MTpcXHRcXHR1bnNpZ25lZCBzaG9ydCBmYW1pbHk7XFxuICA1MjpcXHRcXHR1bnNpZ25lZCBjaGFyIGFkZHJ0eXBlO1xcbiAgNTM6XFx0XFx0c2lnbmVkIGNoYXIgc2NvcGU7XFxuICA1NDpcXHRcXHR1bmlvbiB7XFxuICA1NTpcXHRcXHRcXHRzdHJ1Y3Qge1xcbiAgNTY6XFx0XFx0XFx0XFx0c3RydWN0IHRpcGNfc2VydmljZV9hZGRyIHNhO1xcbiAgNTc6XFx0XFx0XFx0XFx0dTMyIGxvb2t1cF9ub2RlO1xcbiAgNTg6XFx0XFx0XFx0fTtcXG4gIDU5OlxcdFxcdFxcdHN0cnVjdCB0aXBjX3NlcnZpY2VfcmFuZ2Ugc3I7XFxuICA2MDpcXHRcXHRcXHRzdHJ1Y3QgdGlwY19zb2NrZXRfYWRkciBzaztcXG4gIDYxOlxcdFxcdH07XFxuICA2MjpcXHR9O1xcbiAgNjM6XFx0XFxuICA2NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGlwY191YWRkcihzdHJ1Y3QgdGlwY191YWRkciAqdWEsIHUzMiBhdHlwZSwgdTMyIHNjb3BlLFxcbiAgNjU6XFx0XFx0XFx0XFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxcbiAgNjY6XFx0e1xcbiAgNjc6XFx0XFx0dWEtXFx1MDAzZWZhbWlseSA9IEFGX1RJUEM7XFxuICA2ODpcXHRcXHR1YS1cXHUwMDNlYWRkcnR5cGUgPSBhdHlwZTtcXG4gIDY5OlxcdFxcdHVhLVxcdTAwM2VzY29wZSA9IHNjb3BlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMzo1NjozNi4zMjY1MjkwNzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyMjY4MzM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgdGlwY191YWRkcmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgY2xlYXJseSBvbiBgdGlwY191YWRkcmAuIFRoYXQgc2lnbmFscyBhIGRlc2lyZSBmb3IgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHNwZWNpZmljIHN0cnVjdHVyZSBvciBmdW5jdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBUSVBDIChUcmFuc3BhcmVudCBJbnRlci1Qcm9jZXNzIENvbW11bmljYXRpb24pLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLiBUaGlzIHByb2JhYmx5IG1lYW5zIEknbSB3b3JraW5nIHdpdGggVElQQyBhdCBhIGZhaXJseSBsb3cgbGV2ZWwsIGRlYWxpbmcgd2l0aCBpdHMgaW50ZXJuYWwgd29ya2luZ3Mgb3IgdHJvdWJsZXNob290aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIHVzZXIgYWRkcmVzc2VzLiBJIGNvdWxkIGJlIGRlYnVnZ2luZyBhIFRJUEMgaXNzdWUsIG9wdGltaXppbmcgc29tZSBjb2RlLCBvciBwZXJoYXBzIGV2ZW4gY29udHJpYnV0aW5nIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGUgZmFjdCB0aGF0IHRoZSB0aG91Z2h0IGlzIHNvIGRpcmVjdCwgXCJMZXQncyByZWFkIG1vcmUsXCIgaW5kaWNhdGVzIEkndmUgYWxyZWFkeSBpZGVudGlmaWVkIHRoZSBhcmVhIG9mIGNvbmNlcm4gYW5kIGhhdmUgZGVjaWRlZCBvbiB0aGUgbmV4dCBjb3Vyc2Ugb2YgYWN0aW9uLiBJIGtub3cgd2hlcmUgdGhlIGRvY3VtZW50YXRpb24gaXMsIHRoZSBjb2RlIGlzLCBvciBib3RoLCBhbmQgSSdtIHJlYWR5IHRvIGRpZyBpbi4gTXkgdW5kZXJzdGFuZGluZyBuZWVkcyB0byBnbyBkZWVwZXIgdGhhbiB3aGF0IEkgYWxyZWFkeSBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MzkuODQ5MjE0Mzk4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2FkZHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2NCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGlwY191YWRkcihzdHJ1Y3QgdGlwY191YWRkciAqdWEsIHUzMiBhdHlwZSwgdTMyIHNjb3BlLFxcbiAgNjU6XFx0XFx0XFx0XFx0ICAgICAgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyKVxcbiAgNjY6XFx0e1xcbiAgNjc6XFx0XFx0dWEtXFx1MDAzZWZhbWlseSA9IEFGX1RJUEM7XFxuICA2ODpcXHRcXHR1YS1cXHUwMDNlYWRkcnR5cGUgPSBhdHlwZTtcXG4gIDY5OlxcdFxcdHVhLVxcdTAwM2VzY29wZSA9IHNjb3BlO1xcbiAgNzA6XFx0XFx0dWEtXFx1MDAzZXNyLnR5cGUgPSB0eXBlO1xcbiAgNzE6XFx0XFx0dWEtXFx1MDAzZXNyLmxvd2VyID0gbG93ZXI7XFxuICA3MjpcXHRcXHR1YS1cXHUwMDNlc3IudXBwZXIgPSB1cHBlcjtcXG4gIDczOlxcdH1cXG4gIDc0OlxcdFxcbiAgNzU6XFx0c3RhdGljIGlubGluZSBib29sIHRpcGNfdWFkZHJfdmFsaWQoc3RydWN0IHRpcGNfdWFkZHIgKnVhLCBpbnQgbGVuKVxcbiAgNzY6XFx0e1xcbiAgNzc6XFx0XFx0dTMyIGF0eXBlO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHRpZiAobGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl90aXBjKSlcXG4gIDgwOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDgxOlxcdFxcdGF0eXBlID0gdWEtXFx1MDAzZWFkZHJ0eXBlO1xcbiAgODI6XFx0XFx0aWYgKHVhLVxcdTAwM2VmYW1pbHkgIT0gQUZfVElQQylcXG4gIDgzOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTY6MzkuODQ5MjY5OTU4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyMjk5Mjg1NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFRJUEMgUGF0Y2ggZm9yIE1lbW9yeSBBbGxvY2F0aW9uIEZhaWx1cmVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIFRJUEMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZm9jdXNpbmcgb24gaGFuZGxpbmcgb3V0LW9mLW1lbW9yeSAoT09NKSBzaXR1YXRpb25zLCBzcGVjaWZpY2FsbHkgZHVyaW5nIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uLiBUaGUgY29yZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBwcm9wYWdhdGluZyBgLUVOT0JVRlNgIChObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlKSBlcnJvcnMgYW5kIGltcGxlbWVudGluZyByZXRyaWVzIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBgdGlwY191YWRkcmAgc3RydWN0IGluaXRpYWxpemF0aW9uLiBJdCBpbml0aWFsaXplcyBhbGwgbWVtYmVycyBvZiB0aGUgc3RydWN0dXJlLCBzbyB0aGVyZSdzIG5vIHJpc2sgb2YgdXNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhlcmUuXG5cbk5leHQsIEkgbG9va2VkIGF0IHRoZSBlcnJvciBoYW5kbGluZyBpbnRyb2R1Y2VkIGluIGB0aXBjX25hbWVkX2Rpc3RyaWJ1dGVgLCBgdGlwY19uYW1ldGJsX3B1Ymxpc2hgLCBgdGlwY19uYW1ldGJfaW5zZXJ0X3NlbGZfbm9kZV9wdWJgIGFuZCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gVGhlIHBhdGNoIGNvbnNpc3RlbnRseSBjaGVja3MgZm9yIGBza2JgIGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIHNldHMgdGhlIGBlcnJgIHZhcmlhYmxlIHRvIGAtRU5PQlVGU2AgYXMgZXhwZWN0ZWQuIFRoaXMgZXJyb3IgY29kZSBwcm9wYWdhdGVzLCBhbGxvd2luZyB0aGUgc3lzdGVtIHRvIHJlYWN0IGFwcHJvcHJpYXRlbHkuIEkgY29uZmlybWVkIHRoYXQgdGhlc2UgZXJyb3IgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYXZvaWRpbmcgYW55IHBvdGVudGlhbCByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5IGluIGB0aXBjX25vZGVfd3JpdGVfdW5sb2NrYCBhbmQgYHRpcGNfbmFtZXRiX2luc2VydF9zZWxmX25vZGVfcHViYCB3aGVyZSB0aGUgZXJyIHZhcmlhYmxlIGlzIHBhc3NlZCBieSByZWZlcmVuY2UuXG5cblRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBwcmV2ZW50aW5nIGluY29uc2lzdGVudCBzdGF0ZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCBieSBicmluZ2luZyBkb3duIGEgbm9kZSBvciBsaW5rIHRvIHRyaWdnZXIgYSByZS1zeW5jIGxhdGVyLiBUaGlzIGlzIGEgc291bmQgc3RyYXRlZ3kuXG5cbk15IGNvbmNlcm4gd2FzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgZWl0aGVyIHRvIHVzZXJzcGFjZSwgb3IgcmVhZCBieSB0aGUga2VybmVsLiBJIGRpZG4ndCBzZWUgYW55IGV2aWRlbmNlIG9mIHRoaXMuIFRoZSBwYXRjaCBtb2RpZmllcyBleGlzdGluZyBlcnJvciBoYW5kbGluZyBwYXRocywgYnV0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcywgZGF0YSB0cmFuc2ZlcnMsIG9yIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgYSBjb25jZXJuLiBTdGFuZGFyZCBrZXJuZWwgbWVtb3J5IHNhZmV0eSBjaGVja3MgbGlrZSBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKSBzaG91bGQgZGV0ZWN0IGFueSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaWYgdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGFyZSBidWdneSwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIGhlcmUgdGhhdCB3b3VsZCBzdWdnZXN0IHRoYXQgZXhpc3RpbmcgS0FTQU4gd291bGQgYmUgaW5lZmZlY3RpdmUuIEtNU0FOIGZ1enppbmcgc2VlbXMgdW5uZWNlc3NhcnkuIFRoZSBwYXRjaCBpcyBhIHRhcmdldGVkIGZpeCwgYW5kIGEgdGhvcm91Z2ggc3RhdGljIGFuYWx5c2lzIGFuZCBjb2RlIHJldmlldyB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzMiwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDM6NTc6MDIuMTQ4NTU4NjQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGVycm9yIGhhbmRsaW5nIGZvciBidWZmZXIgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT0JVRlMpIGR1cmluZyBUSVBDIG5hbWUgdGFibGUgZGlzdHJpYnV0aW9uIGFuZCBwdWJsaWNhdGlvbi4gSXQgbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMgdG8gcmV0dXJuIGVycm9yIGNvZGVzIGFuZCBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZ3JhY2VmdWxseSBieSByZXRyeWluZyBvciBicmluZ2luZyBkb3duIHRoZSBub2RlL2xpbmsuIFRoZSB2YXJpYWJsZXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byByZWNlaXZlIGVycm9yIGNvZGVzIChlLmcuLCBgZXJyYCkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAgaW4gdGhlIGNhbGxlcnMuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgZGVhbCB3aXRoIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgcHJvcGFnYXRpb24uIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBlcnJvciBwYXRocywgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZyBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9CVUZTKSBkdXJpbmcgVElQQyBuYW1lIHRhYmxlIGRpc3RyaWJ1dGlvbiBhbmQgcHVibGljYXRpb24uIEl0IG1vZGlmaWVzIHNldmVyYWwgZnVuY3Rpb25zIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGdyYWNlZnVsbHkgYnkgcmV0cnlpbmcgb3IgYnJpbmdpbmcgZG93biB0aGUgbm9kZS9saW5rLiBUaGUgdmFyaWFibGVzIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gcmVjZWl2ZSBlcnJvciBjb2RlcyAoZS5nLiwgYGVycmApIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwIGluIHRoZSBjYWxsZXJzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGRlYWwgd2l0aCBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgZXJyb3IgcGF0aHMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7nvv[1] Phase: Succeeded StartedAt: 2026-08-12 03:57:13 +0000 UTC FinishedAt: 2026-08-12 03:57:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 03:57:13 +0000 UTC FinishedAt: 2026-08-12 03:57:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2] Phase: Succeeded StartedAt: 2026-08-12 03:57:13 +0000 UTC FinishedAt: 2026-08-12 07:38:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 03:57:13 +0000 UTC FinishedAt: 2026-08-12 07:38:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 03:57:13 +0000 UTC FinishedAt: 2026-08-12 03:57:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 03:57:13 +0000 UTC FinishedAt: 2026-08-12 03:57:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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-workflowz7nvv/series-workflowz7nvv-convert-artifact-3143551172/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 03:57:23 +0000 UTC FinishedAt: 2026-08-12 04:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 03:57:23 +0000 UTC FinishedAt: 2026-08-12 04:14:08 +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:*72e9533c-ab4b-416b-bae0-63819a9ffad8,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-workflowz7nvv/series-workflowz7nvv-convert-artifact-3143551172/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": "d5d80c54-996a-4a63-8f59-14422f3f7d8f", "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-workflowz7nvv/series-workflowz7nvv-build-action-2796882946/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 03:57:23 +0000 UTC FinishedAt: 2026-08-12 04:13:58 +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:*72e9533c-ab4b-416b-bae0-63819a9ffad8,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-workflowz7nvv/series-workflowz7nvv-convert-artifact-3143551172/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": "d5d80c54-996a-4a63-8f59-14422f3f7d8f", "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-workflowz7nvv/series-workflowz7nvv-build-action-2796882946/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:14:08 +0000 UTC FinishedAt: 2026-08-12 04:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:14:08 +0000 UTC FinishedAt: 2026-08-12 04:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:14:08 +0000 UTC FinishedAt: 2026-08-12 04:14:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:14:08 +0000 UTC FinishedAt: 2026-08-12 04:14:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-workflowz7nvv/series-workflowz7nvv-convert-artifact-1864283203/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:14:18 +0000 UTC FinishedAt: 2026-08-12 04:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:14:18 +0000 UTC FinishedAt: 2026-08-12 04:16:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d5d80c54-996a-4a63-8f59-14422f3f7d8f,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-workflowz7nvv/series-workflowz7nvv-build-action-2796882946/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-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:16:41 +0000 UTC FinishedAt: 2026-08-12 04:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:16:41 +0000 UTC FinishedAt: 2026-08-12 04:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:16:41 +0000 UTC FinishedAt: 2026-08-12 04:33:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:16:41 +0000 UTC FinishedAt: 2026-08-12 04:33:43 +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:*72e9533c-ab4b-416b-bae0-63819a9ffad8,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-workflowz7nvv/series-workflowz7nvv-convert-artifact-1864283203/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": "76d7f22f-a7c1-4b09-a2a0-48c1df39e274", "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-workflowz7nvv/series-workflowz7nvv-build-action-3219005175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:16:41 +0000 UTC FinishedAt: 2026-08-12 04:33:33 +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:*72e9533c-ab4b-416b-bae0-63819a9ffad8,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-workflowz7nvv/series-workflowz7nvv-convert-artifact-1864283203/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": "76d7f22f-a7c1-4b09-a2a0-48c1df39e274", "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-workflowz7nvv/series-workflowz7nvv-build-action-3219005175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:33:43 +0000 UTC FinishedAt: 2026-08-12 04:33:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:33:43 +0000 UTC FinishedAt: 2026-08-12 04:33:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:33:43 +0000 UTC FinishedAt: 2026-08-12 04:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:33:43 +0000 UTC FinishedAt: 2026-08-12 04:35:27 +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:*76d7f22f-a7c1-4b09-a2a0-48c1df39e274,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-workflowz7nvv/series-workflowz7nvv-build-action-3219005175/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-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:35:37 +0000 UTC FinishedAt: 2026-08-12 07:38:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:35:37 +0000 UTC FinishedAt: 2026-08-12 07:38:06 +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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"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:*d5d80c54-996a-4a63-8f59-14422f3f7d8f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76d7f22f-a7c1-4b09-a2a0-48c1df39e274,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-workflowz7nvv/series-workflowz7nvv-build-action-2796882946/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-workflowz7nvv/series-workflowz7nvv-build-action-3219005175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:35:37 +0000 UTC FinishedAt: 2026-08-12 04:35:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:35:37 +0000 UTC FinishedAt: 2026-08-12 04:35:41 +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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"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-workflowz7nvv/series-workflowz7nvv-convert-artifact-619474012/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:35:37 +0000 UTC FinishedAt: 2026-08-12 04:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:35:37 +0000 UTC FinishedAt: 2026-08-12 04:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:35:37 +0000 UTC FinishedAt: 2026-08-12 04:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:35:47 +0000 UTC FinishedAt: 2026-08-12 07:38:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz7nvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"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":["tipc_named_distribute","tipc_named_node_up","tipc_nametbl_publish","tipc_nametb_insert_self_node_pub","tipc_node_set_dist_bulk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cba9ccb47e9fa4cc77692fb896cc5ab57a667882","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC"],"series_id":"0d628203-d998-453c-95d9-6ef157677e8a","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-08-12 04:35:47 +0000 UTC FinishedAt: 2026-08-12 07:37:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d5d80c54-996a-4a63-8f59-14422f3f7d8f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76d7f22f-a7c1-4b09-a2a0-48c1df39e274,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-workflowz7nvv/series-workflowz7nvv-build-action-2796882946/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-workflowz7nvv/series-workflowz7nvv-build-action-3219005175/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-workflowz7nvv/series-workflowz7nvv-convert-artifact-619474012/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,}