Name: series-workflowxpx4n Phase: Running StartedAt: 2026-07-13 09:46:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpx4n[0] Phase: Running StartedAt: 2026-07-13 09:46:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpx4n[0].run-triage Phase: Running StartedAt: 2026-07-13 09:46:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxpx4n[0].run-triage(0) Phase: Running StartedAt: 2026-07-13 09:46:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "AFS_FS", "RXGK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "AFS_FS", "RXGK" ], "series_id": "31764a90-b544-4ecc-ae74-a9ba0539b78d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rxrpc_sendmsg_cmsg", "rxrpc_do_sendmsg", "rxrpc_send_data", "rxgk_respond_to_challenge", "afs_create_server_appdata", "afs_make_call", "rxrpc_kernel_begin_call", "rxrpc_kernel_query_key", "put_user_key_payload" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnhycGNfc2VuZG1zZ19jbXNnJiMzNDssCiAgICAmIzM0O3J4cnBjX2RvX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cnhycGNfc2VuZF9kYXRhJiMzNDssCiAgICAmIzM0O3J4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UmIzM0OywKICAgICYjMzQ7YWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfbWFrZV9jYWxsJiMzNDssCiAgICAmIzM0O3J4cnBjX2tlcm5lbF9iZWdpbl9jYWxsJiMzNDssCiAgICAmIzM0O3J4cnBjX2tlcm5lbF9xdWVyeV9rZXkmIzM0OywKICAgICYjMzQ7cHV0X3VzZXJfa2V5X3BheWxvYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIGFuZCBBRlMgc3Vic3lzdGVtcyB0byBoYW5kbGUgUnhHSyBjaGFsbGVuZ2UtcmVzcG9uc2UgYW5kIGFwcGRhdGEgdmlhIGEgbmV3IGtleS1iYXNlZCBtZWNoYW5pc20gaW5zdGVhZCBvZiBvdXQtb2YtYmFuZCAoT09CKSBtZXNzYWdlcy4gSXQgcmVtb3ZlcyB0aGUgT09CIG1lc3NhZ2UgaGFuZGxpbmcgZW50aXJlbHksIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBhbmQgaW50cm9kdWNlcyBhIG5ldyBjb250cm9sIG1lc3NhZ2UgYFJYUlBDX1JFU1BPTlNFX0FQUERBVEFgIGZvciB1c2Vyc3BhY2UgdG8gcHJvdmlkZSBhcHBkYXRhIGtleXMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gY29kZSwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDk4NjU3NzAyZThkOGQ5ZTRhM2YxNTM0ZGYxZTAwYTFjNmZmNmM2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA5OjU5OjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jIGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbmluZGV4IDEwMzE2OGM3MGRkNGRmLi5mMGZlYzNhNzY1MjI4OCAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuQEAgLTYsNyAmIzQzOzYsOSBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXktdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3J5cHRvL2tyYjUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NrZXlzL3VzZXItdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2Fmc19jbS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7YWZzX2ZzLmhcJiMzNDtcbkBAIC0xOSwxOTUgJiM0MzsyMSwzOSBAQFxuICNkZWZpbmUgeGRyX2xlbl9vYmplY3QoeCkgKDQgJiM0Mzsgcm91bmRfdXAoKHgpLCBzaXplb2YoX19iZTMyKSkpXG4gXG4gI2lmZGVmIENPTkZJR19SWEdLXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcik7XG4tI2VuZGlmXG4tXG4gLypcbi0gKiBSZXNwb25kIHRvIGFuIFJ4R0sgY2hhbGxlbmdlLCBhZGRpbmcgYXBwZGF0YS5cbiYjNDM7ICogQXMgdGhlIFlGUyBSeEdLIGFwcGRhdGEgdG8gYmUgcGFzc2VkIGluIHRoZSBZRlMuRlMtc2VydmljZSBSRVNQT05TRSBwYWNrZXQsXG4mIzQzOyAqIGNyZWF0ZSBhIEdTUyB0b2tlbiB0byB1c2UgYXMgYSB0aWNrZXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlc2VydmVyLlxuICAqL1xuLXN0YXRpYyBpbnQgYWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLSNpZmRlZiBDT05GSUdfUlhHS1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTtcbi1cdHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXI7XG4tI2VuZGlmXG4tXHRzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcjtcbi1cdHVuc2lnbmVkIGxvbmcgcGVlcl9kYXRhO1xuLVx0dTE2IHNlcnZpY2VfaWQ7XG4tXHR1OCBzZWN1cml0eV9pbmRleDtcbi1cbi1cdHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZwZWVyLCBcdTAwMjZwZWVyX2RhdGEsXG4tXHRcdFx0XHQgICAgIFx1MDAyNnNlcnZpY2VfaWQsIFx1MDAyNnNlY3VyaXR5X2luZGV4KTtcbi1cbi1cdF9lbnRlcihcJiMzNDsldSwldVwmIzM0Oywgc2VydmljZV9pZCwgc2VjdXJpdHlfaW5kZXgpO1xuLVxuLVx0c3dpdGNoIChzZXJ2aWNlX2lkKSB7XG4tXHRcdC8qIFdlIGRvbiYjMzk7dCBzZW5kIENNX1NFUlZJQ0UgUlBDcywgc28gZG9uJiMzOTt0IGV4cGVjdCBhIGNoYWxsZW5nZVxuLVx0XHQgKiB0aGVyZWZyb20uXG4tXHRcdCAqL1xuLVx0Y2FzZSBGU19TRVJWSUNFOlxuLVx0Y2FzZSBWTF9TRVJWSUNFOlxuLVx0Y2FzZSBZRlNfRlNfU0VSVklDRTpcbi1cdGNhc2UgWUZTX1ZMX1NFUlZJQ0U6XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cHJfd2FybihcJiMzNDtDYW4mIzM5O3QgcmVzcG9uZCB0byB1bmtub3duIGNoYWxsZW5nZSAldToldVwmIzM0Oyxcbi1cdFx0XHRzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7XG4tXHRcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXG4tXHRcdFx0XHRcdFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcbi1cdH1cbi1cbi1cdHN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHtcbi0jaWZkZWYgQ09ORklHX1JYS0FEXG4tXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuLVx0XHRyZXR1cm4gcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4tI2VuZGlmXG4tXG4tI2lmZGVmIENPTkZJR19SWEdLXG4tXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYR0s6XG4tXHRcdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuLVxuLVx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbi1cdFx0c3dpdGNoIChzZXJ2aWNlX2lkKSB7XG4tXHRcdGNhc2UgRlNfU0VSVklDRTpcbi1cdFx0Y2FzZSBZRlNfRlNfU0VSVklDRTpcbi1cdFx0XHRzZXJ2ZXIgPSAoc3RydWN0IGFmc19zZXJ2ZXIgKilwZWVyX2RhdGE7XG4tXHRcdFx0aWYgKCFzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpIHtcbi1cdFx0XHRcdG11dGV4X2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuLVx0XHRcdFx0aWYgKCFzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXG4tXHRcdFx0XHRcdGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKGNoYWxsZW5nZSwgc2VydmVyKTtcbi1cdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZzZXJ2ZXItXHUwMDNlY21fdG9rZW5fbG9jayk7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXG4tXHRcdFx0XHRhcHBkYXRhID0gc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZhcHBkYXRhKTtcbi0jZW5kaWZcbi1cbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXG4tXHRcdFx0XHRcdFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcbi1cdH1cbi19XG4tXG4tLypcbi0gKiBQcm9jZXNzIHRoZSBPT0IgbWVzc2FnZSBxdWV1ZSwgcHJvY2Vzc2luZyBjaGFsbGVuZ2UgcGFja2V0cy5cbi0gKi9cbi12b2lkIGFmc19wcm9jZXNzX29vYl9xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IGFmc19uZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX25ldCwgcnhfb29iX3dvcmspO1xuLVx0c3RydWN0IHNrX2J1ZmYgKm9vYjtcbi1cdGVudW0gcnhycGNfb29iX3R5cGUgdHlwZTtcbi1cbi1cdHdoaWxlIChSRUFEX09OQ0UobmV0LVx1MDAzZWxpdmUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIChvb2IgPSByeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IobmV0LVx1MDAzZXNvY2tldCwgXHUwMDI2dHlwZSkpKSB7XG4tXHRcdHN3aXRjaCAodHlwZSkge1xuLVx0XHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdFx0YWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKG9vYik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKG9vYik7XG4tXHR9XG4tfVxuLVxuLSNpZmRlZiBDT05GSUdfUlhHS1xuLS8qXG4tICogQ3JlYXRlIGEgc2VjdXJpdGllcyBrZXlyaW5nIGZvciB0aGUgY2FjaGUgbWFuYWdlciBhbmQgYXR0YWNoIGEga2V5IHRvIGl0IGZvclxuLSAqIHRoZSBSeEdLIHRva2VucyB3ZSB3YW50IHRvIHVzZSB0byBzZWN1cmUgdGhlIGNhbGxiYWNrIGNvbm5lY3Rpb24gYmFjayBmcm9tXG4tICogdGhlIGZpbGVzZXJ2ZXIuXG4tICovXG4taW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldClcbi17XG4tXHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICprcmI1O1xuLVx0c3RydWN0IGtleSAqcmluZztcbi1cdGtleV9yZWZfdCBrZXk7XG4tXHRjaGFyIEswWzMyXSwgKmRlc2M7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmluZyA9IGtleXJpbmdfYWxsb2MoXCYjMzQ7a2Fmc1wmIzM0Oyxcbi1cdFx0XHQgICAgIEdMT0JBTF9ST09UX1VJRCwgR0xPQkFMX1JPT1RfR0lELCBjdXJyZW50X2NyZWQoKSxcbi1cdFx0XHQgICAgIEtFWV9QT1NfU0VBUkNIIHwgS0VZX1BPU19XUklURSB8XG4tXHRcdFx0ICAgICBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1JFQUQgfCBLRVlfVVNSX1NFQVJDSCxcbi1cdFx0XHQgICAgIEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsXG4tXHRcdFx0ICAgICBOVUxMLCBOVUxMKTtcbi1cdGlmIChJU19FUlIocmluZykpXG4tXHRcdHJldHVybiBQVFJfRVJSKHJpbmcpO1xuLVxuLVx0cmV0ID0gcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzb2NrZXQtXHUwMDNlc2ssIHJpbmcpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRyZXQgPSAtRU5PUEtHO1xuLVx0a3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShLUkI1X0VOQ1RZUEVfQUVTMTI4X0NUU19ITUFDX1NIQTFfOTYpO1xuLVx0aWYgKCFrcmI1KVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGlmIChXQVJOX09OX09OQ0Uoa3JiNS1cdTAwM2VrZXlfbGVuIFx1MDAzZSBzaXplb2YoSzApKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRyZXQgPSAtRU5PTUVNO1xuLVx0ZGVzYyA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCBcJiMzNDsldToldToldToldVwmIzM0Oyxcbi1cdFx0XHQgWUZTX0NNX1NFUlZJQ0UsIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLLCAxLCBrcmI1LVx1MDAzZWV0eXBlKTtcbi1cdGlmICghZGVzYylcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHR3YWl0X2Zvcl9yYW5kb21fYnl0ZXMoKTtcbi1cdGdldF9yYW5kb21fYnl0ZXMoSzAsIGtyYjUtXHUwMDNla2V5X2xlbik7XG4tXG4tXHRrZXkgPSBrZXlfY3JlYXRlKG1ha2Vfa2V5X3JlZihyaW5nLCB0cnVlKSxcbi1cdFx0XHQgXCYjMzQ7cnhycGNfc1wmIzM0OywgZGVzYyxcbi1cdFx0XHQgSzAsIGtyYjUtXHUwMDNla2V5X2xlbixcbi1cdFx0XHQgS0VZX1BPU19WSUVXIHwgS0VZX1BPU19SRUFEIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsXG4tXHRcdFx0IEtFWV9BTExPQ19OT1RfSU5fUVVPVEEpO1xuLVx0a2ZyZWUoZGVzYyk7XG4tXHRpZiAoSVNfRVJSKGtleSkpIHtcbi1cdFx0cmV0ID0gUFRSX0VSUihrZXkpO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdG5ldC1cdTAwM2Vmc19jbV90b2tlbl9rZXkgPSBrZXlfcmVmX3RvX3B0cihrZXkpO1xuLVx0cmV0ID0gMDtcbi1vdXQ6XG4tXHRrZXlfcHV0KHJpbmcpO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLypcbi0gKiBDcmVhdGUgYW4gWUZTIFJ4R0sgR1NTIHRva2VuIHRvIHVzZSBhcyBhIHRpY2tldCB0byB0aGUgc3BlY2lmaWVkIGZpbGVzZXJ2ZXIuXG4tICovXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcilcbiYjNDM7c3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19yeGdrX2NtX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgdTMyIGVuY3R5cGUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY29ubl9rcmI1LCAqdG9rZW5fa3JiNTtcbiBcdGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqdG9rZW5fa2V5O1xuIFx0c3RydWN0IGNyeXB0b19hZWFkICphZWFkO1xuIFx0c3RydWN0IHNjYXR0ZXJsaXN0IHNnO1xuIFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IHNlcnZlci1cdTAwM2VjZWxsLVx1MDAzZW5ldDtcbi1cdGNvbnN0IHN0cnVjdCBrZXkgKmtleSA9IG5ldC1cdTAwM2Vmc19jbV90b2tlbl9rZXk7XG4tXHRzaXplX3Qga2V5c2l6ZSwgdXVpZHNpemUsIGF1dGhzaXplLCB0b2tzaXplLCBlbmNzaXplLCBjb250c2l6ZSwgYWRhdGFzaXplLCBvZmZzZXQ7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGtleSAqY21fa2V5ID0gbmV0LVx1MDAzZWZzX2NtX3Rva2VuX2tleTtcbiYjNDM7XHRzdHJ1Y3Qga2V5ICphcHBkYXRhX2tleSA9IE5VTEw7XG4mIzQzO1x0c2l6ZV90IGtleXNpemUsIHV1aWRzaXplLCBhdXRoc2l6ZSwgdG9rc2l6ZSwgZW5jc2l6ZSwgY29udHNpemU7XG4mIzQzO1x0c2l6ZV90IGFkYXRhc2l6ZSwgb2Zmc2V0O1xuIFx0X19iZTMyIGNhcHNbMV0gPSB7XG4gXHRcdFswXSA9IGh0b25sKEFGU19DQVBfRVJST1JfVFJBTlNMQVRJT04pLFxuIFx0fTtcbiBcdF9fYmUzMiAqeGRyO1xuIFx0dm9pZCAqYXBwZGF0YSwgKkswLCAqZW5jYmFzZTtcbi1cdHUzMiBlbmN0eXBlO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICgha2V5KVxuJiM0MztcdGlmICghY21fa2V5KVxuIFx0XHRyZXR1cm4gLUVOT0tFWTtcbiBcbiBcdC8qIEFzc3VtZSB0aGF0IHRoZSBmaWxlc2VydmVyIGlzIGhhcHB5IHRvIHVzZSB0aGUgc2FtZSBlbmNvZGluZyB0eXBlIGFzXG4gXHQgKiB3ZSB3ZXJlIHRvbGQgdG8gdXNlIGJ5IHRoZSB0b2tlbiBvYnRhaW5lZCBieSB0aGUgdXNlci5cbiBcdCAqL1xuLVx0ZW5jdHlwZSA9IHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShjaGFsbGVuZ2UpO1xuLVxuIFx0Y29ubl9rcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGVuY3R5cGUpO1xuIFx0aWYgKCFjb25uX2tyYjUpXG4gXHRcdHJldHVybiAtRU5PUEtHO1xuLVx0dG9rZW5fa3JiNSA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4tXHR0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopXHUwMDI2a2V5LVx1MDAzZXBheWxvYWQuZGF0YVsyXTtcbiYjNDM7XHR0b2tlbl9rcmI1ID0gY21fa2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbiYjNDM7XHR0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopXHUwMDI2Y21fa2V5LVx1MDAzZXBheWxvYWQuZGF0YVsyXTtcbiBcbiBcdC8qIHN0cnVjdCByeGdrX2tleSB7XG4gXHQgKlx0YWZzX3VpbnQzMlx0ZW5jdHlwZTtcbkBAIC0zMjcsOSAmIzQzOzE3MywyMyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9hZWFkO1xuIFxuLVx0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5sZW4gID0gYWRhdGFzaXplO1xuLVx0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhID0gYXBwZGF0YTtcbi1cdGFwcGRhdGEgPSBOVUxMO1xuJiM0MztcdGFwcGRhdGFfa2V5ID0ga2V5X2FsbG9jKFx1MDAyNmtleV90eXBlX3VzZXIsIFwmIzM0O3J4cnBjOiBhZnMgcnhnayBhcHBkYXRhXCYjMzQ7LFxuJiM0MztcdFx0XHRcdEdMT0JBTF9ST09UX1VJRCwgR0xPQkFMX1JPT1RfR0lELCBjdXJyZW50X2NyZWQoKSxcbiYjNDM7XHRcdFx0XHRLRVlfUE9TX1ZJRVcgfCBLRVlfUE9TX1NFQVJDSCB8IEtFWV9VU1JfVklFVyxcbiYjNDM7XHRcdFx0XHRLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGFwcGRhdGFfa2V5KSkge1xuJiM0MztcdFx0cmV0ID0gUFRSX0VSUihhcHBkYXRhX2tleSk7XG4mIzQzO1x0XHRnb3RvIG91dF9hZWFkO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0ga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rKGFwcGRhdGFfa2V5LCBhcHBkYXRhLCBhZGF0YXNpemUsIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtleV9wdXQoYXBwZGF0YV9rZXkpO1xuJiM0MztcdFx0Z290byBvdXRfYWVhZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0b3JlIHRoZSBhcHBkYXRhIGJlZm9yZSB0aGUga2V5IHBvaW50ZXIgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzZXJ2ZXItXHUwMDNleWZzX3J4Z2tfYXBwZGF0YSwgYXBwZGF0YV9rZXkpO1xuIFxuIG91dF9hZWFkOlxuIFx0Y3J5cHRvX2ZyZWVfYWVhZChhZWFkKTtcbkBAIC0zMzksMyAmIzQzOzE5OSwxMTYgQEAgc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19SWEdLICovXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDcmVhdGUgdGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gZ28gaW4gYSBSRVNQT05TRSBwYWNrZXQgYSBzZXJ2ZXImIzM5O3MgQ0hBTExFTkdFXG4mIzQzOyAqIGZyb20gdGhlIHBhcmFtZXRlcnMgY29udGFpbmVkIGluIGEga2V5LiAgVGhlIGtleSBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5XG4mIzQzOyAqIGluZGV4IGFuZCBvdGhlciBhcHByb3ByaWF0ZSBwYXJhbWV0ZXJzIHN1Y2ggYXMgdGhlIGVuY29kaW5nIHR5cGUgZm9yIFJ4R0suXG4mIzQzOyAqL1xuJiM0MztpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpXG4mIzQzO3tcbiYjNDM7XHR1MzIga3JiNV9lbmN0eXBlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTggc2VjdXJpdHlfaW5kZXg7XG4mIzQzO1xuJiM0MztcdGlmICgha2V5KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoa2V5LCBcdTAwMjZzZWN1cml0eV9pbmRleCwgXHUwMDI2a3JiNV9lbmN0eXBlKTtcbiYjNDM7XG4mIzQzO1x0X2VudGVyKFwmIzM0OyV1LCV1XCYjMzQ7LCBzZWN1cml0eV9pbmRleCwga3JiNV9lbmN0eXBlKTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuJiM0MzsjaWZkZWYgQ09ORklHX1JYR0tcbiYjNDM7XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuJiM0MztcdFx0LyogUmVhZCB0aGUga2V5IHBvaW50ZXIgYmVmb3JlIHRoZSBhcHBkYXRhICovXG4mIzQzO1x0XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZzZXJ2ZXItXHUwMDNleWZzX3J4Z2tfYXBwZGF0YSkpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IDA7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZzZXJ2ZXItXHUwMDNlY21fdG9rZW5fbG9jayk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHtcbiYjNDM7I2lmZGVmIENPTkZJR19SWEdLXG4mIzQzO1x0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbiYjNDM7XHRcdC8qIFJlYWQgdGhlIGtleSBwb2ludGVyIGJlZm9yZSB0aGUgYXBwZGF0YSAqL1xuJiM0MztcdFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2c2VydmVyLVx1MDAzZXlmc19yeGdrX2FwcGRhdGEpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHJldCA9IGFmc19jcmVhdGVfeWZzX3J4Z2tfY21fYXBwZGF0YShzZXJ2ZXIsIGtyYjVfZW5jdHlwZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmXG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2VjbV90b2tlbl9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1JYR0tcbiYjNDM7LypcbiYjNDM7ICogQ3JlYXRlIGEgc2VjdXJpdGllcyBrZXlyaW5nIGZvciB0aGUgY2FjaGUgbWFuYWdlciBhbmQgYXR0YWNoIGEga2V5IHRvIGl0IGZvclxuJiM0MzsgKiB0aGUgUnhHSyB0b2tlbnMgd2Ugd2FudCB0byB1c2UgdG8gc2VjdXJlIHRoZSBjYWxsYmFjayBjb25uZWN0aW9uIGJhY2sgZnJvbVxuJiM0MzsgKiB0aGUgZmlsZXNlcnZlci5cbiYjNDM7ICovXG4mIzQzO2ludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICprcmI1O1xuJiM0MztcdHN0cnVjdCBrZXkgKnJpbmc7XG4mIzQzO1x0a2V5X3JlZl90IGtleTtcbiYjNDM7XHRjaGFyIEswWzMyXSwgKmRlc2M7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmluZyA9IGtleXJpbmdfYWxsb2MoXCYjMzQ7a2Fmc1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICBHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksXG4mIzQzO1x0XHRcdCAgICAgS0VZX1BPU19TRUFSQ0ggfCBLRVlfUE9TX1dSSVRFIHxcbiYjNDM7XHRcdFx0ICAgICBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1JFQUQgfCBLRVlfVVNSX1NFQVJDSCxcbiYjNDM7XHRcdFx0ICAgICBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLFxuJiM0MztcdFx0XHQgICAgIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmIChJU19FUlIocmluZykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihyaW5nKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzb2NrZXQtXHUwMDNlc2ssIHJpbmcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gLUVOT1BLRztcbiYjNDM7XHRrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKEtSQjVfRU5DVFlQRV9BRVMxMjhfQ1RTX0hNQUNfU0hBMV85Nik7XG4mIzQzO1x0aWYgKCFrcmI1KVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0Uoa3JiNS1cdTAwM2VrZXlfbGVuIFx1MDAzZSBzaXplb2YoSzApKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdGRlc2MgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgXCYjMzQ7JXU6JXU6JXU6JXVcJiMzNDssXG4mIzQzO1x0XHRcdCBZRlNfQ01fU0VSVklDRSwgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0ssIDEsIGtyYjUtXHUwMDNlZXR5cGUpO1xuJiM0MztcdGlmICghZGVzYylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHR3YWl0X2Zvcl9yYW5kb21fYnl0ZXMoKTtcbiYjNDM7XHRnZXRfcmFuZG9tX2J5dGVzKEswLCBrcmI1LVx1MDAzZWtleV9sZW4pO1xuJiM0MztcbiYjNDM7XHRrZXkgPSBrZXlfY3JlYXRlKG1ha2Vfa2V5X3JlZihyaW5nLCB0cnVlKSxcbiYjNDM7XHRcdFx0IFwmIzM0O3J4cnBjX3NcJiMzNDssIGRlc2MsXG4mIzQzO1x0XHRcdCBLMCwga3JiNS1cdTAwM2VrZXlfbGVuLFxuJiM0MztcdFx0XHQgS0VZX1BPU19WSUVXIHwgS0VZX1BPU19SRUFEIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsXG4mIzQzO1x0XHRcdCBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTtcbiYjNDM7XHRrZnJlZShkZXNjKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGtleSkpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoa2V5KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0LVx1MDAzZWZzX2NtX3Rva2VuX2tleSA9IGtleV9yZWZfdG9fcHRyKGtleSk7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7b3V0OlxuJiM0MztcdGtleV9wdXQocmluZyk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1JYR0sgKi9cbmRpZmYgLS1naXQgYS9mcy9hZnMvY21zZXJ2aWNlLmMgYi9mcy9hZnMvY21zZXJ2aWNlLmNcbmluZGV4IGRiMzk0ZjEwMWZjNjZhLi4zMjEyMGJjMWRjYjA5MSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Ntc2VydmljZS5jXG5AQCAtMjMsMTEgJiM0MzsyMywxMSBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2NhbGxiYWNrKHN0cnVjdCBhZnNfY2FsbCAqKTtcbiBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3Byb2JlX3V1aWQoc3RydWN0IGFmc19jYWxsICopO1xuIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfdGVsbF9tZV9hYm91dF95b3Vyc2VsZihzdHJ1Y3QgYWZzX2NhbGwgKik7XG4gc3RhdGljIHZvaWQgYWZzX2NtX2Rlc3RydWN0b3Ioc3RydWN0IGFmc19jYWxsICopO1xuLXN0YXRpYyB2b2lkIFNSWEFGU0NCX0NhbGxCYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcbi1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Jbml0Q2FsbEJhY2tTdGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG4tc3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmUoc3RydWN0IHdvcmtfc3RydWN0ICopO1xuLXN0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlVXVpZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG4tc3RhdGljIHZvaWQgU1JYQUZTQ0JfVGVsbE1lQWJvdXRZb3Vyc2VsZihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG4mIzQzO3N0YXRpYyB2b2lkIFNSWEFGU0NCX0NhbGxCYWNrKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XG4mIzQzO3N0YXRpYyB2b2lkIFNSWEFGU0NCX0luaXRDYWxsQmFja1N0YXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XG4mIzQzO3N0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XG4mIzQzO3N0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlVXVpZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpO1xuJiM0MztzdGF0aWMgdm9pZCBTUlhBRlNDQl9UZWxsTWVBYm91dFlvdXJzZWxmKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XG4gXG4gc3RhdGljIGludCBhZnNfZGVsaXZlcl95ZnNfY2JfY2FsbGJhY2soc3RydWN0IGFmc19jYWxsICopO1xuIFxuQEAgLTE2MSwxMCAmIzQzOzE2MSw4IEBAIHN0YXRpYyB2b2lkIGFmc19hYm9ydF9zZXJ2aWNlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCB1MzIgYWJvcnRfY29kZSwgaW50IGVyXG4gLypcbiAgKiBUaGUgc2VydmVyIHN1cHBsaWVkIGEgbGlzdCBvZiBjYWxsYmFja3MgdGhhdCBpdCB3YW50ZWQgdG8gYnJlYWsuXG4gICovXG4tc3RhdGljIHZvaWQgU1JYQUZTQ0JfQ2FsbEJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0MztzdGF0aWMgdm9pZCBTUlhBRlNDQl9DYWxsQmFjayhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4ge1xuLVx0c3RydWN0IGFmc19jYWxsICpjYWxsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfY2FsbCwgd29yayk7XG4tXG4gXHRfZW50ZXIoXCYjMzQ7XCYjMzQ7KTtcbiBcbiBcdC8qIFdlIG5lZWQgdG8gYnJlYWsgdGhlIGNhbGxiYWNrcyBiZWZvcmUgc2VuZGluZyB0aGUgcmVwbHkgYXMgdGhlXG5AQCAtMTgwLDcgJiM0MzsxNzgsNiBAQCBzdGF0aWMgdm9pZCBTUlhBRlNDQl9DYWxsQmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR9XG4gXG4gXHRhZnNfc2VuZF9lbXB0eV9yZXBseShjYWxsKTtcbi1cdGFmc19wdXRfY2FsbChjYWxsKTtcbiBcdF9sZWF2ZShcJiMzNDtcJiMzNDspO1xuIH1cbiBcbkBAIC0yODQsMTYgJiM0MzsyODEsMTMgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9jYWxsYmFjayhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4gLypcbiAgKiBhbGxvdyB0aGUgZmlsZXNlcnZlciB0byByZXF1ZXN0IGNhbGxiYWNrIHN0YXRlIChyZS0paW5pdGlhbGlzYXRpb25cbiAgKi9cbi1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Jbml0Q2FsbEJhY2tTdGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3N0YXRpYyB2b2lkIFNSWEFGU0NCX0luaXRDYWxsQmFja1N0YXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiB7XG4tXHRzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19jYWxsLCB3b3JrKTtcbi1cbiBcdF9lbnRlcihcJiMzNDt7JXB9XCYjMzQ7LCBjYWxsLVx1MDAzZXNlcnZlcik7XG4gXG4gXHRpZiAoY2FsbC1cdTAwM2VzZXJ2ZXIpXG4gXHRcdGFmc19pbml0X2NhbGxiYWNrX3N0YXRlKGNhbGwtXHUwMDNlc2VydmVyKTtcbiBcdGFmc19zZW5kX2VtcHR5X3JlcGx5KGNhbGwpO1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuIFx0X2xlYXZlKFwmIzM0O1wmIzM0Oyk7XG4gfVxuIFxuQEAgLTM4MCwxMyAmIzQzOzM3NCwxMCBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4gLypcbiAgKiBhbGxvdyB0aGUgZmlsZXNlcnZlciB0byBzZWUgaWYgdGhlIGNhY2hlIG1hbmFnZXIgaXMgc3RpbGwgYWxpdmVcbiAgKi9cbi1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3N0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiB7XG4tXHRzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19jYWxsLCB3b3JrKTtcbi1cbiBcdF9lbnRlcihcJiMzNDtcJiMzNDspO1xuIFx0YWZzX3NlbmRfZW1wdHlfcmVwbHkoY2FsbCk7XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4gXHRfbGVhdmUoXCYjMzQ7XCYjMzQ7KTtcbiB9XG4gXG5AQCAtNDEzLDkgJiM0Mzs0MDQsOCBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiAgKiBBbGxvdyB0aGUgZmlsZXNlcnZlciB0byBxdWlja2x5IGZpbmQgb3V0IGlmIHRoZSBjYWNoZSBtYW5hZ2VyIGhhcyBiZWVuXG4gICogcmVib290ZWQuXG4gICovXG4tc3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmVVdWlkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7c3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmVVdWlkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiB7XG4tXHRzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19jYWxsLCB3b3JrKTtcbiBcdHN0cnVjdCBhZnNfdXVpZCAqciA9IGNhbGwtXHUwMDNlcmVxdWVzdDtcbiBcbiBcdF9lbnRlcihcJiMzNDtcJiMzNDspO1xuQEAgLTQyNSw3ICYjNDM7NDE1LDYgQEAgc3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmVVdWlkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdGVsc2VcbiBcdFx0YWZzX2Fib3J0X3NlcnZpY2VfY2FsbChjYWxsLCAxLCAxLCBhZnNfYWJvcnRfcHJvYmV1dWlkX25lZ2F0aXZlKTtcbiBcbi1cdGFmc19wdXRfY2FsbChjYWxsKTtcbiBcdF9sZWF2ZShcJiMzNDtcJiMzNDspO1xuIH1cbiBcbkBAIC00ODksOSAmIzQzOzQ3OCw4IEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4gLypcbiAgKiBhbGxvdyB0aGUgZmlsZXNlcnZlciB0byBhc2sgYWJvdXQgdGhlIGNhY2hlIG1hbmFnZXImIzM5O3MgY2FwYWJpbGl0aWVzXG4gICovXG4tc3RhdGljIHZvaWQgU1JYQUZTQ0JfVGVsbE1lQWJvdXRZb3Vyc2VsZihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3N0YXRpYyB2b2lkIFNSWEFGU0NCX1RlbGxNZUFib3V0WW91cnNlbGYoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIHtcbi1cdHN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX2NhbGwsIHdvcmspO1xuIFx0aW50IGxvb3A7XG4gXG4gXHRzdHJ1Y3Qge1xuQEAgLTUyMyw3ICYjNDM7NTExLDYgQEAgc3RhdGljIHZvaWQgU1JYQUZTQ0JfVGVsbE1lQWJvdXRZb3Vyc2VsZihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRyZXBseS5jYXAuY2FwY291bnQgPSBodG9ubCgxKTtcbiBcdHJlcGx5LmNhcC5jYXBzWzBdID0gaHRvbmwoQUZTX0NBUF9FUlJPUl9UUkFOU0xBVElPTik7XG4gXHRhZnNfc2VuZF9zaW1wbGVfcmVwbHkoY2FsbCwgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuIFx0X2xlYXZlKFwmIzM0O1wmIzM0Oyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9maWxlLmMgYi9mcy9hZnMvZmlsZS5jXG5pbmRleCAwNDY3NzQyYmZlZWUzNC4uNjI1ZGM2N2Y3OWYzNjYgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZmlsZS5jXG5AQCAtMjk4LDcgJiM0MzsyOTgsNyBAQCBzdGF0aWMgdm9pZCBhZnNfcmVhZF9yZWNlaXZlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdG9wLVx1MDAzZWNhbGxfcmVzcG9uZGVkXHQ9IGNhbGwtXHUwMDNlcmVzcG9uZGVkO1xuIFx0b3AtXHUwMDNlY2FsbFx0XHQ9IE5VTEw7XG4gXHRjYWxsLVx1MDAzZW9wXHRcdD0gTlVMTDtcbi1cdGFmc19wdXRfY2FsbChjYWxsKTtcbiYjNDM7XHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3JlYWRfb3ApO1xuIFxuIFx0LyogSWYgdGhlIGNhbGwgZmFpbGVkLCB0aGVuIHdlIG5lZWQgdG8gY3JhbmsgdGhlIHNlcnZlciByb3RhdGlvblxuIFx0ICogaGFuZGxlIGFuZCB0cnkgdGhlIG5leHQuXG5AQCAtMzE2LDE1ICYjNDM7MzE2LDE3IEBAIHZvaWQgYWZzX2ZldGNoX2RhdGFfYXN5bmNfcngoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IGFmc19jYWxsICpjYWxsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfY2FsbCwgYXN5bmNfd29yayk7XG4gXG4gXHRhZnNfcmVhZF9yZWNlaXZlKGNhbGwpO1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2FsbC1cdTAwM2VzdGF0ZSA9PSBBRlNfQ0FMTF9DT01QTEVURSkge1xuJiM0MztcdFx0Y2FuY2VsX3dvcmsoXHUwMDI2Y2FsbC1cdTAwM2Vhc3luY193b3JrKTtcbiYjNDM7XHRcdGFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfcmVhZF9jb21wbGV0ZSk7XG4mIzQzO1x0fVxuIH1cbiBcbiB2b2lkIGFmc19mZXRjaF9kYXRhX2ltbWVkaWF0ZV9jYW5jZWwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIHtcbiBcdGlmIChjYWxsLVx1MDAzZWFzeW5jKSB7XG4tXHRcdGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV93YWtlKTtcbi1cdFx0aWYgKCFxdWV1ZV93b3JrKGFmc19hc3luY19jYWxscywgXHUwMDI2Y2FsbC1cdTAwM2Vhc3luY193b3JrKSlcbi1cdFx0XHRhZnNfZGVmZXJyZWRfcHV0X2NhbGwoY2FsbCk7XG4mIzQzO1x0XHRxdWV1ZV93b3JrKGFmc19hc3luY19jYWxscywgXHUwMDI2Y2FsbC1cdTAwM2Vhc3luY193b3JrKTtcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZjYWxsLVx1MDAzZWFzeW5jX3dvcmspO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9mcy9hZnMvZnNfb3BlcmF0aW9uLmMgYi9mcy9hZnMvZnNfb3BlcmF0aW9uLmNcbmluZGV4IDIwODAxYjI5NTIxZDFlLi5iODg3MDQ3Mzk4YjljYiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9mc19vcGVyYXRpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZzX29wZXJhdGlvbi5jXG5AQCAtMjk2LDcgJiM0MzsyOTYsNyBAQCB2b2lkIGFmc193YWl0X2Zvcl9vcGVyYXRpb24oc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuIFx0XHRcdG9wLVx1MDAzZWNhbGxfYWJvcnRfY29kZSA9IG9wLVx1MDAzZWNhbGwtXHUwMDNlYWJvcnRfY29kZTtcbiBcdFx0XHRvcC1cdTAwM2VjYWxsX2Vycm9yID0gb3AtXHUwMDNlY2FsbC1cdTAwM2VlcnJvcjtcbiBcdFx0XHRvcC1cdTAwM2VjYWxsX3Jlc3BvbmRlZCA9IG9wLVx1MDAzZWNhbGwtXHUwMDNlcmVzcG9uZGVkO1xuLVx0XHRcdGFmc19wdXRfY2FsbChvcC1cdTAwM2VjYWxsKTtcbiYjNDM7XHRcdFx0YWZzX3B1dF9jYWxsKG9wLVx1MDAzZWNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF93YWl0X29wKTtcbiBcdFx0fVxuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19wcm9iZS5jIGIvZnMvYWZzL2ZzX3Byb2JlLmNcbmluZGV4IGE5MWFkMTkzOGQwNzg4Li5lMjZmN2YxZTMwYTIzYSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9mc19wcm9iZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZnNfcHJvYmUuY1xuQEAgLTI0MSw5ICYjNDM7MjQxLDE0IEBAIGludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuIFx0c3RydWN0IGFmc19lbmRwb2ludF9zdGF0ZSAqZXN0YXRlLCAqb2xkO1xuIFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKm9sZF9hbGlzdCA9IE5VTEwsICphbGlzdDtcbiBcdHVuc2lnbmVkIGxvbmcgdW5wcm9iZWQ7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdF9lbnRlcihcJiMzNDslcFVcJiMzNDssIFx1MDAyNnNlcnZlci1cdTAwM2V1dWlkKTtcbiBcbiYjNDM7XHRyZXQgPSBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHNlcnZlciwga2V5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRlc3RhdGUgPSBremFsbG9jX29iaigqZXN0YXRlKTtcbiBcdGlmICghZXN0YXRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvZnNjbGllbnQuYyBiL2ZzL2Fmcy9mc2NsaWVudC5jXG5pbmRleCBhMmZmZDYwODg5Zjg5ZC4uOWFjYWQ1MDE3ZmJhYjMgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZnNjbGllbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZzY2xpZW50LmNcbkBAIC00NzcsNiAmIzQzOzQ3Nyw5IEBAIHZvaWQgYWZzX2ZzX2ZldGNoX2RhdGEoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuIFx0aWYgKCFjYWxsKVxuIFx0XHRyZXR1cm4gYWZzX29wX25vbWVtKG9wKTtcbiBcbiYjNDM7XHRpZiAob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEFGU19PUEVSQVRJT05fQVNZTkMpXG4mIzQzO1x0XHRjYWxsLVx1MDAzZWFzeW5jID0gdHJ1ZTtcbiYjNDM7XG4gXHQvKiBtYXJzaGFsbCB0aGUgcGFyYW1ldGVycyAqL1xuIFx0YnAgPSBjYWxsLVx1MDAzZXJlcXVlc3Q7XG4gXHRicFswXSA9IGh0b25sKEZTRkVUQ0hEQVRBKTtcbkBAIC0xNjU5LDcgJiM0MzsxNjYyLDcgQEAgaW50IGFmc19mc19naXZlX3VwX2FsbF9jYWxsYmFja3Moc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbiBcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4gXHRpZiAoY2FsbC1cdTAwM2VyZXNwb25kZWQpXG4gXHRcdHNldF9iaXQoQUZTX1NFUlZFUl9GTF9SRVNQT05ESU5HLCBcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MpO1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuJiM0MztcdGFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfZ2l2ZXVwY2FsbGJhY2tzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTE3NzUsNyAmIzQzOzE3NzgsNyBAQCBib29sIGFmc19mc19nZXRfY2FwYWJpbGl0aWVzKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4gXG4gXHR0cmFjZV9hZnNfbWFrZV9mc19jYWxsKGNhbGwsIE5VTEwpO1xuIFx0YWZzX21ha2VfY2FsbChjYWxsLCBHRlBfTk9GUyk7XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4mIzQzO1x0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9nZXRfY2FwYWJpbGl0aWVzKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5pbmRleCA2MDFmMDFlNWMxNWZjYy4uOTMyMjIzNGNlN2Y3NDkgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xMjksNyAmIzQzOzEyOSw3IEBAIHN0cnVjdCBhZnNfY2FsbCB7XG4gXHRjb25zdCBzdHJ1Y3QgYWZzX2NhbGxfdHlwZSAqdHlwZTtcdC8qIHR5cGUgb2YgY2FsbCAqL1xuIFx0d2FpdF9xdWV1ZV9oZWFkX3RcdHdhaXRxO1x0XHQvKiBwcm9jZXNzZXMgYXdhaXRpbmcgY29tcGxldGlvbiAqL1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRhc3luY193b3JrO1x0LyogYXN5bmMgSS9PIHByb2Nlc3NvciAqL1xuLVx0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1x0XHQvKiBhY3R1YWwgd29yayBwcm9jZXNzb3IgKi9cbiYjNDM7XHR2b2lkICgqd29yaykoc3RydWN0IGFmc19jYWxsICpjYWxsKTtcdC8qIFdvcmtlciBmdW5jdGlvbiAqL1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRmcmVlX3dvcms7XHQvKiBEZWZlcnJlZCBmcmVlIHByb2Nlc3NvciAqL1xuIFx0c3RydWN0IHJ4cnBjX2NhbGxcdCpyeGNhbGw7XHQvKiBSeFJQQyBjYWxsIGhhbmRsZSAqL1xuIFx0c3RydWN0IHJ4cnBjX3BlZXJcdCpwZWVyO1x0XHQvKiBSZW1vdGUgZW5kcG9pbnQgKi9cbkBAIC0xNjksNyAmIzQzOzE2OSw2IEBAIHN0cnVjdCBhZnNfY2FsbCB7XG4gXHR1bnNpZ25lZFx0XHRyZXBseV9tYXg7XHQvKiBtYXhpbXVtIHNpemUgb2YgcmVwbHkgKi9cbiBcdHVuc2lnbmVkXHRcdGNvdW50MjtcdFx0LyogY291bnQgdXNlZCBpbiB1bm1hcnNoYWxsaW5nICovXG4gXHR1bnNpZ25lZCBjaGFyXHRcdHVubWFyc2hhbGw7XHQvKiB1bm1hcnNoYWxsaW5nIHBoYXNlICovXG4tXHRib29sXHRcdFx0ZHJvcF9yZWY7XHQvKiBUIGlmIG5lZWQgdG8gZHJvcCByZWYgZm9yIGluY29taW5nIGNhbGwgKi9cbiBcdGJvb2xcdFx0XHRuZWVkX2F0dGVudGlvbjtcdC8qIFQgaWYgUnhSUEMgcG9rZWQgdXMgKi9cbiBcdGJvb2xcdFx0XHRhc3luYztcdFx0LyogVCBpZiBhc3luY2hyb25vdXMgKi9cbiBcdGJvb2xcdFx0XHR1cGdyYWRlO1x0LyogVCB0byByZXF1ZXN0IHNlcnZpY2UgdXBncmFkZSAqL1xuQEAgLTIwOCw3ICYjNDM7MjA3LDcgQEAgc3RydWN0IGFmc19jYWxsX3R5cGUge1xuIFx0dm9pZCAoKmFzeW5jX3J4KShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuIFx0LyogV29yayBmdW5jdGlvbiAqL1xuLVx0dm9pZCAoKndvcmspKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4mIzQzO1x0dm9pZCAoKndvcmspKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XG4gXG4gXHQvKiBDYWxsIGRvbmUgZnVuY3Rpb24gKGdldHMgY2FsbGVkIGltbWVkaWF0ZWx5IG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSkgKi9cbiBcdHZvaWQgKCpkb25lKShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpO1xuQEAgLTI4Myw3ICYjNDM7MjgyLDYgQEAgc3RydWN0IGFmc19uZXQge1xuIFx0c3RydWN0IHNvY2tldFx0XHQqc29ja2V0O1xuIFx0c3RydWN0IGFmc19jYWxsXHRcdCpzcGFyZV9pbmNvbWluZ19jYWxsO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0XHRyeF9vb2Jfd29yaztcbiBcdHN0cnVjdCBtdXRleFx0XHRzb2NrZXRfbXV0ZXg7XG4gXHRhdG9taWNfdFx0XHRucl9vdXRzdGFuZGluZ19jYWxscztcbiBcdGF0b21pY190XHRcdG5yX3N1cGVyYmxvY2tzO1xuQEAgLTU0OCw3ICYjNDM7NTQ2LDcgQEAgc3RydWN0IGFmc19zZXJ2ZXIge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRkZXN0cm95ZXI7XHQvKiBXb3JrIGl0ZW0gdG8gdHJ5IGFuZCBkZXN0cm95IGEgc2VydmVyICovXG4gXHRzdHJ1Y3QgdGltZXJfbGlzdFx0dGltZXI7XHRcdC8qIE1hbmFnZW1lbnQgdGltZXIgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRjbV90b2tlbl9sb2NrO1x0LyogTG9jayBnb3Zlcm5pbmcgY3JlYXRpb24gb2YgYXBwZGF0YSAqL1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyXHRjbV9yeGdrX2FwcGRhdGE7IC8qIEFwcGRhdGEgdG8gYmUgaW5jbHVkZWQgaW4gUkVTUE9OU0UgcGFja2V0ICovXG4mIzQzO1x0c3RydWN0IGtleVx0XHQqeWZzX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi9cbiBcdHRpbWU2NF90XHRcdHVudXNlX3RpbWU7XHQvKiBUaW1lIGF0IHdoaWNoIGxhc3QgdW51c2VkICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdGZsYWdzO1xuICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9SRVNQT05ESU5HIDBcdFx0LyogVGhlIHNlcnZlciBpcyByZXNwb25kaW5nICovXG5AQCAtMTA4OSw3ICYjNDM7MTA4Nyw3IEBAIGV4dGVybiBib29sIGFmc19jbV9pbmNvbWluZ19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqKTtcbiAvKlxuICAqIGNtX3NlY3VyaXR5LmNcbiAgKi9cbi12b2lkIGFmc19wcm9jZXNzX29vYl9xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiM0MztpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xuICNpZmRlZiBDT05GSUdfUlhHS1xuIGludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpO1xuICNlbHNlXG5AQCAtMTM4MCw4ICYjNDM7MTM3OCw3IEBAIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYWZzX2FzeW5jX2NhbGxzO1xuIGV4dGVybiBpbnQgX19uZXRfaW5pdCBhZnNfb3Blbl9zb2NrZXQoc3RydWN0IGFmc19uZXQgKik7XG4gZXh0ZXJuIHZvaWQgX19uZXRfZXhpdCBhZnNfY2xvc2Vfc29ja2V0KHN0cnVjdCBhZnNfbmV0ICopO1xuIGV4dGVybiB2b2lkIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG4tZXh0ZXJuIHZvaWQgYWZzX3B1dF9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqKTtcbi12b2lkIGFmc19kZWZlcnJlZF9wdXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpO1xuJiM0Mzt2b2lkIGFmc19wdXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2UgdHJhY2UpO1xuIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcCk7XG4gdm9pZCBhZnNfZGVsaXZlcl90b19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XG4gdm9pZCBhZnNfd2FpdF9mb3JfY2FsbF90b19jb21wbGV0ZShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpO1xuQEAgLTE0MDIsOCAmIzQzOzEzOTksNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBhZnNfY2FsbCAqYWZzX2dldF9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbiBcdF9fcmVmY291bnRfaW5jKFx1MDAyNmNhbGwtXHUwMDNlcmVmLCBcdTAwMjZyKTtcbiBcbiBcdHRyYWNlX2Fmc19jYWxsKGNhbGwtXHUwMDNlZGVidWdfaWQsIHdoeSwgciAmIzQzOyAxLFxuLVx0XHQgICAgICAgYXRvbWljX3JlYWQoXHUwMDI2Y2FsbC1cdTAwM2VuZXQtXHUwMDNlbnJfb3V0c3RhbmRpbmdfY2FsbHMpLFxuLVx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiYjNDM7XHRcdCAgICAgICBhdG9taWNfcmVhZChcdTAwMjZjYWxsLVx1MDAzZW5ldC1cdTAwM2Vucl9vdXRzdGFuZGluZ19jYWxscykpO1xuIFx0cmV0dXJuIGNhbGw7XG4gfVxuIFxuQEAgLTE0MTIsMjMgJiM0MzsxNDA4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KVxuIFx0aW50IHIgPSByZWZjb3VudF9yZWFkKFx1MDAyNmNhbGwtXHUwMDNlcmVmKTtcbiBcbiBcdHRyYWNlX2Fmc19jYWxsKGNhbGwtXHUwMDNlZGVidWdfaWQsIHdoeSwgcixcbi1cdFx0ICAgICAgIGF0b21pY19yZWFkKFx1MDAyNmNhbGwtXHUwMDNlbmV0LVx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKSxcbi1cdFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuLVx0XHRcdFx0ICAgIGdmcF90IGdmcClcbi17XG4tXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuLVxuLVx0b3AtXHUwMDNlY2FsbFx0PSBjYWxsO1xuLVx0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4tXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuLVx0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuLVx0Y2FsbC1cdTAwM2VpbnRyXHQ9ICEob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcbi1cdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4tXHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbi1cdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcbiYjNDM7XHRcdCAgICAgICBhdG9taWNfcmVhZChcdTAwMjZjYWxsLVx1MDAzZW5ldC1cdTAwM2Vucl9vdXRzdGFuZGluZ19jYWxscykpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2V4dHJhY3RfYmVnaW4oc3RydWN0IGFmc19jYWxsICpjYWxsLCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxuQEAgLTE0OTQsNyAmIzQzOzE0NzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NldF9jYWxsX2NvbXBsZXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbiBcdFx0XHRcdFx0IGludCBlcnJvciwgdTMyIHJlbW90ZV9hYm9ydClcbiB7XG4gXHRlbnVtIGFmc19jYWxsX3N0YXRlIHN0YXRlO1xuLVx0Ym9vbCBvayA9IGZhbHNlO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNhbGwtXHUwMDNlc3RhdGVfbG9jayk7XG4gXHRzdGF0ZSA9IGNhbGwtXHUwMDNlc3RhdGU7XG5AQCAtMTUwNCwxOSAmIzQzOzE0ODMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NldF9jYWxsX2NvbXBsZXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbiBcdFx0Y2FsbC1cdTAwM2VzdGF0ZSA9IEFGU19DQUxMX0NPTVBMRVRFO1xuIFx0XHR0cmFjZV9hZnNfY2FsbF9zdGF0ZShjYWxsLCBzdGF0ZSwgQUZTX0NBTExfQ09NUExFVEUsXG4gXHRcdFx0XHQgICAgIGVycm9yLCByZW1vdGVfYWJvcnQpO1xuLVx0XHRvayA9IHRydWU7XG4gXHR9XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZjYWxsLVx1MDAzZXN0YXRlX2xvY2spO1xuLVx0aWYgKG9rKSB7XG4tXHRcdHRyYWNlX2Fmc19jYWxsX2RvbmUoY2FsbCk7XG4tXG4tXHRcdC8qIEFzeW5jaHJvbm91cyBjYWxscyBoYXZlIHR3byByZWZzIHRvIHJlbGVhc2UgLSBvbmUgZnJvbSB0aGUgYWxsb2MgYW5kXG4tXHRcdCAqIG9uZSBxdWV1ZWQgd2l0aCB0aGUgd29yayBpdGVtIC0gYW5kIHdlIGNhbiYjMzk7dCBqdXN0IGRlYWxsb2NhdGUgdGhlXG4tXHRcdCAqIGNhbGwgYmVjYXVzZSB0aGUgd29yayBpdGVtIG1heSBiZSBxdWV1ZWQgYWdhaW4uXG4tXHRcdCAqL1xuLVx0XHRpZiAoY2FsbC1cdTAwM2Vkcm9wX3JlZilcbi1cdFx0XHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4tXHR9XG4gfVxuIFxuIC8qXG5AQCAtMTc2Miw2ICYjNDM7MTczMCwyMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXG4gXHRyZXR1cm4gXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbiYjNDM7XHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXHUwMDNlZXN0YXRlLVx1MDAzZWFkZHJlc3NlcztcbiYjNDM7XG4mIzQzO1x0b3AtXHUwMDNlY2FsbFx0PSBhZnNfZ2V0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfZ2V0X29wX2NhbGwpO1xuJiM0MztcdG9wLVx1MDAzZXR5cGVcdD0gY2FsbC1cdTAwM2V0eXBlO1xuJiM0MztcdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4mIzQzO1x0Y2FsbC1cdTAwM2VzZXJ2ZXJcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XG4mIzQzO1x0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuJiM0MztcdGNhbGwtXHUwMDNlaW50clx0PSAhKG9wLVx1MDAzZWZsYWdzIFx1MDAyNiBBRlNfT1BFUkFUSU9OX1VOSU5UUik7XG4mIzQzO1x0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbiYjNDM7XHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbiYjNDM7XHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XG4mIzQzO1x0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9tYWRlX2NhbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogTm90ZSB0aGF0IGEgZGVudHJ5IGdvdCBjaGFuZ2VkLiAgV2UgbmVlZCB0byBzZXQgZF9mc2RhdGEgdG8gdGhlIGRhdGEgdmVyc2lvblxuICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL21haW4uYyBiL2ZzL2Fmcy9tYWluLmNcbmluZGV4IDdhODgzYzU5OTc2ZmYyLi42MzUzZmVhYTVmYjRiNSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9tYWluLmNcbkBAIC03Myw3ICYjNDM7NzMsNiBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgYWZzX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldF9ucylcbiBcdGdlbmVyYXRlX3JhbmRvbV91dWlkKCh1bnNpZ25lZCBjaGFyICopXHUwMDI2bmV0LVx1MDAzZXV1aWQpO1xuIFxuIFx0SU5JVF9XT1JLKFx1MDAyNm5ldC1cdTAwM2VjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrLCBhZnNfY2hhcmdlX3ByZWFsbG9jYXRpb24pO1xuLVx0SU5JVF9XT1JLKFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yaywgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKTtcbiBcdG11dGV4X2luaXQoXHUwMDI2bmV0LVx1MDAzZXNvY2tldF9tdXRleCk7XG4gXG4gXHRuZXQtXHUwMDNlY2VsbHMgPSBSQl9ST09UO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9yeHJwYy5jIGIvZnMvYWZzL3J4cnBjLmNcbmluZGV4IGQ4MjkxNjY1N2EzZGRmLi40ZjZkNjk5YjVkMjI2YSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9yeHJwYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvcnhycGMuY1xuQEAgLTI1LDE0ICYjNDM7MjUsMTIgQEAgc3RhdGljIHZvaWQgYWZzX3Byb2Nlc3NfYXN5bmNfY2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG4gc3RhdGljIHZvaWQgYWZzX3J4X25ld19jYWxsKHN0cnVjdCBzb2NrICosIHN0cnVjdCByeHJwY19jYWxsICosIHVuc2lnbmVkIGxvbmcpO1xuIHN0YXRpYyB2b2lkIGFmc19yeF9kaXNjYXJkX25ld19jYWxsKHN0cnVjdCByeHJwY19jYWxsICosIHVuc2lnbmVkIGxvbmcpO1xuIHN0YXRpYyB2b2lkIGFmc19yeF9hdHRhY2goc3RydWN0IHJ4cnBjX2NhbGwgKnJ4Y2FsbCwgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQpO1xuLXN0YXRpYyB2b2lkIGFmc19yeF9ub3RpZnlfb29iKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9vYik7XG4gc3RhdGljIGludCBhZnNfZGVsaXZlcl9jbV9vcF9pZChzdHJ1Y3QgYWZzX2NhbGwgKik7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCByeHJwY19rZXJuZWxfb3BzIGFmc19yeHJwY19jYWxsYmFja19vcHMgPSB7XG4gXHQubm90aWZ5X25ld19jYWxsXHQ9IGFmc19yeF9uZXdfY2FsbCxcbiBcdC5kaXNjYXJkX25ld19jYWxsXHQ9IGFmc19yeF9kaXNjYXJkX25ld19jYWxsLFxuIFx0LnVzZXJfYXR0YWNoX2NhbGxcdD0gYWZzX3J4X2F0dGFjaCxcbi1cdC5ub3RpZnlfb29iXHRcdD0gYWZzX3J4X25vdGlmeV9vb2IsXG4gfTtcbiBcbiAvKiBhc3luY2hyb25vdXMgaW5jb21pbmcgY2FsbCBpbml0aWFsIHByb2Nlc3NpbmcgKi9cbkBAIC03NCwxMCAmIzQzOzcyLDYgQEAgaW50IGFmc19vcGVuX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvcl8yO1xuIFxuLVx0cmV0ID0gcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHNvY2tldC1cdTAwM2VzaywgdHJ1ZSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yXzI7XG4tXG4gXHRyZXQgPSBhZnNfY3JlYXRlX3Rva2VuX2tleShuZXQsIHNvY2tldCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwcl9lcnIoXCYjMzQ7Q291bGRuJiMzOTt0IGNyZWF0ZSBSeEdLIENNIGtleTogJWRcXG5cJiMzNDssIHJldCk7XG5AQCAtMTI4LDcgJiM0MzsxMjIsNiBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldClcbiBcdF9lbnRlcihcJiMzNDtcJiMzNDspO1xuIFxuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlY2hhcmdlX3ByZWFsbG9jYXRpb25fd29yayk7XG4tXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yayk7XG4gXHQvKiBGdXR1cmUgd29yayBpdGVtcyBzaG91bGQgbm93IHNlZSAtXHUwMDNlbGl2ZSBpcyBmYWxzZS4gKi9cbiBcbiBcdGtlcm5lbF9saXN0ZW4obmV0LVx1MDAzZXNvY2tldCwgMCk7XG5AQCAtMTM4LDcgJiM0MzsxMzEsNyBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldClcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bmV0LVx1MDAzZWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmspO1xuIFxuIFx0aWYgKG5ldC1cdTAwM2VzcGFyZV9pbmNvbWluZ19jYWxsKSB7XG4tXHRcdGFmc19wdXRfY2FsbChuZXQtXHUwMDNlc3BhcmVfaW5jb21pbmdfY2FsbCk7XG4mIzQzO1x0XHRhZnNfcHV0X2NhbGwobmV0LVx1MDAzZXNwYXJlX2luY29taW5nX2NhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9zcGFyZV9zdmMpO1xuIFx0XHRuZXQtXHUwMDNlc3BhcmVfaW5jb21pbmdfY2FsbCA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtMTQ5LDcgJiM0MzsxNDIsNiBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldClcbiBcbiBcdGtlcm5lbF9zb2NrX3NodXRkb3duKG5ldC1cdTAwM2Vzb2NrZXQsIFNIVVRfUkRXUik7XG4gXHRmbHVzaF93b3JrcXVldWUoYWZzX2FzeW5jX2NhbGxzKTtcbi1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrKTtcbiBcdG5ldC1cdTAwM2Vzb2NrZXQtXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcbiBcdHNvY2tfcmVsZWFzZShuZXQtXHUwMDNlc29ja2V0KTtcbiBcdGtleV9wdXQobmV0LVx1MDAzZWZzX2NtX3Rva2VuX2tleSk7XG5AQCAtMTc3LDIxICYjNDM7MTY5LDIwIEBAIHN0YXRpYyBzdHJ1Y3QgYWZzX2NhbGwgKmFmc19hbGxvY19jYWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG4gXHRjYWxsLVx1MDAzZWRlYnVnX2lkID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2cnhycGNfZGVidWdfaWQpO1xuIFx0cmVmY291bnRfc2V0KFx1MDAyNmNhbGwtXHUwMDNlcmVmLCAxKTtcbiBcdElOSVRfV09SSyhcdTAwMjZjYWxsLVx1MDAzZWFzeW5jX3dvcmssIHR5cGUtXHUwMDNlYXN5bmNfcnggPzogYWZzX3Byb2Nlc3NfYXN5bmNfY2FsbCk7XG4tXHRJTklUX1dPUksoXHUwMDI2Y2FsbC1cdTAwM2V3b3JrLCBjYWxsLVx1MDAzZXR5cGUtXHUwMDNld29yayk7XG4gXHRJTklUX1dPUksoXHUwMDI2Y2FsbC1cdTAwM2VmcmVlX3dvcmssIGFmc19kZWZlcnJlZF9mcmVlX3dvcmtlcik7XG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmNhbGwtXHUwMDNld2FpdHEpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y2FsbC1cdTAwM2VzdGF0ZV9sb2NrKTtcbiBcdGNhbGwtXHUwMDNlaXRlciA9IFx1MDAyNmNhbGwtXHUwMDNlZGVmX2l0ZXI7XG4gXG4gXHRvID0gYXRvbWljX2luY19yZXR1cm4oXHUwMDI2bmV0LVx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKTtcbi1cdHRyYWNlX2Fmc19jYWxsKGNhbGwtXHUwMDNlZGVidWdfaWQsIGFmc19jYWxsX3RyYWNlX2FsbG9jLCAxLCBvLFxuLVx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiYjNDM7XHR0cmFjZV9hZnNfY2FsbChjYWxsLVx1MDAzZWRlYnVnX2lkLCBhZnNfY2FsbF90cmFjZV9hbGxvYywgMSwgbyk7XG4gXHRyZXR1cm4gY2FsbDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYWZzX2ZyZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4ge1xuIFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IGNhbGwtXHUwMDNlbmV0O1xuJiM0MztcdHVuc2lnbmVkIGludCBkZWJ1Z19pZCA9IGNhbGwtXHUwMDNlZGVidWdfaWQ7XG4gXHRpbnQgbztcbiBcbiBcdEFTU0VSVCghd29ya19wZW5kaW5nKFx1MDAyNmNhbGwtXHUwMDNlYXN5bmNfd29yaykpO1xuQEAgLTIwOCwxMyAmIzQzOzE5OSwxMCBAQCBzdGF0aWMgdm9pZCBhZnNfZnJlZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcbiBcdGFmc191bnVzZV9zZXJ2ZXJfbm90aW1lKGNhbGwtXHUwMDNlbmV0LCBjYWxsLVx1MDAzZXNlcnZlciwgYWZzX3NlcnZlcl90cmFjZV91bnVzZV9jYWxsKTtcbiBcdGtmcmVlKGNhbGwtXHUwMDNlcmVxdWVzdCk7XG4tXG4tXHRvID0gYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKTtcbi1cdHRyYWNlX2Fmc19jYWxsKGNhbGwtXHUwMDNlZGVidWdfaWQsIGFmc19jYWxsX3RyYWNlX2ZyZWUsIDAsIG8sXG4tXHRcdCAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuIFx0a2ZyZWUoY2FsbCk7XG4gXG4gXHRvID0gYXRvbWljX2RlY19yZXR1cm4oXHUwMDI2bmV0LVx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKTtcbiYjNDM7XHR0cmFjZV9hZnNfY2FsbChkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfZnJlZSwgMCwgbyk7XG4gXHRpZiAobyA9PSAwKVxuIFx0XHR3YWtlX3VwX3ZhcihcdTAwMjZuZXQtXHUwMDNlbnJfb3V0c3RhbmRpbmdfY2FsbHMpO1xuIH1cbkBAIC0yMjIsNyAmIzQzOzIxMCw3IEBAIHN0YXRpYyB2b2lkIGFmc19mcmVlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIC8qXG4gICogRGlzcG9zZSBvZiBhIHJlZmVyZW5jZSBvbiBhIGNhbGwuXG4gICovXG4tdm9pZCBhZnNfcHV0X2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuJiM0Mzt2b2lkIGFmc19wdXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2UgdHJhY2UpXG4ge1xuIFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IGNhbGwtXHUwMDNlbmV0O1xuIFx0dW5zaWduZWQgaW50IGRlYnVnX2lkID0gY2FsbC1cdTAwM2VkZWJ1Z19pZDtcbkBAIC0yMzEsOCAmIzQzOzIxOSw3IEBAIHZvaWQgYWZzX3B1dF9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcbiBcdHplcm8gPSBfX3JlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZjYWxsLVx1MDAzZXJlZiwgXHUwMDI2cik7XG4gXHRvID0gYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKTtcbi1cdHRyYWNlX2Fmc19jYWxsKGRlYnVnX2lkLCBhZnNfY2FsbF90cmFjZV9wdXQsIHIgLSAxLCBvLFxuLVx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiYjNDM7XHR0cmFjZV9hZnNfY2FsbChkZWJ1Z19pZCwgdHJhY2UsIHIgLSAxLCBvKTtcbiBcdGlmICh6ZXJvKVxuIFx0XHRhZnNfZnJlZV9jYWxsKGNhbGwpO1xuIH1cbkBAIC0yNDQsMzcgJiM0MzsyMzEsNiBAQCBzdGF0aWMgdm9pZCBhZnNfZGVmZXJyZWRfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0YWZzX2ZyZWVfY2FsbChjYWxsKTtcbiB9XG4gXG4tLypcbi0gKiBEaXNwb3NlIG9mIGEgcmVmZXJlbmNlIG9uIGEgY2FsbCwgZGVmZXJyaW5nIHRoZSBjbGVhbnVwIHRvIGEgd29ya3F1ZXVlXG4tICogdG8gYXZvaWQgbG9jayByZWN1cnNpb24uXG4tICovXG4tdm9pZCBhZnNfZGVmZXJyZWRfcHV0X2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuLXtcbi1cdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjYWxsLVx1MDAzZW5ldDtcbi1cdHVuc2lnbmVkIGludCBkZWJ1Z19pZCA9IGNhbGwtXHUwMDNlZGVidWdfaWQ7XG4tXHRib29sIHplcm87XG4tXHRpbnQgciwgbztcbi1cbi1cdHplcm8gPSBfX3JlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZjYWxsLVx1MDAzZXJlZiwgXHUwMDI2cik7XG4tXHRvID0gYXRvbWljX3JlYWQoXHUwMDI2bmV0LVx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKTtcbi1cdHRyYWNlX2Fmc19jYWxsKGRlYnVnX2lkLCBhZnNfY2FsbF90cmFjZV9wdXQsIHIgLSAxLCBvLFxuLVx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbi1cdGlmICh6ZXJvKVxuLVx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNmNhbGwtXHUwMDNlZnJlZV93b3JrKTtcbi19XG4tXG4tLypcbi0gKiBRdWV1ZSB0aGUgY2FsbCBmb3IgYWN0dWFsIHdvcmsuXG4tICovXG4tc3RhdGljIHZvaWQgYWZzX3F1ZXVlX2NhbGxfd29yayhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4te1xuLVx0aWYgKGNhbGwtXHUwMDNldHlwZS1cdTAwM2V3b3JrKSB7XG4tXHRcdGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV93b3JrKTtcbi1cdFx0aWYgKCFxdWV1ZV93b3JrKGFmc193cSwgXHUwMDI2Y2FsbC1cdTAwM2V3b3JrKSlcbi1cdFx0XHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4tXHR9XG4tfVxuLVxuIC8qXG4gICogYWxsb2NhdGUgYSBjYWxsIHdpdGggZmxhdCByZXF1ZXN0IGFuZCByZXBseSBidWZmZXJzXG4gICovXG5AQCAtMzA4LDcgJiM0MzsyNjQsNyBAQCBzdHJ1Y3QgYWZzX2NhbGwgKmFmc19hbGxvY19mbGF0X2NhbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbiBcdHJldHVybiBjYWxsO1xuIFxuIG5vbWVtX2ZyZWU6XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4mIzQzO1x0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9vb20pO1xuIG5vbWVtX2NhbGw6XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMzQ3LDcgJiM0MzszMDMsMTAgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0c3RydWN0IHJ4cnBjX2NhbGwgKnJ4Y2FsbDtcbiBcdHN0cnVjdCBtc2doZHIgbXNnO1xuIFx0c3RydWN0IGt2ZWMgaW92WzFdO1xuJiM0MztcdHVuc2lnbmVkIGludCBkZWJ1Z19pZCA9IGNhbGwtXHUwMDNlZGVidWdfaWQ7XG4mIzQzO1x0c3RydWN0IGtleSAqYXBwX2RhdGEgPSBOVUxMO1xuIFx0c2l6ZV90IGxlbjtcbiYjNDM7XHRib29sIHdyaXRlX2l0ZXIgPSBjYWxsLVx1MDAzZXdyaXRlX2l0ZXI7XG4gXHRzNjQgdHhfdG90YWxfbGVuO1xuIFx0aW50IHJldDtcbiBcbkBAIC0zNzMsMTMgJiM0MzszMzIsMjkgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0LyogSWYgdGhlIGNhbGwgaXMgZ29pbmcgdG8gYmUgYXN5bmNocm9ub3VzLCB3ZSBuZWVkIGFuIGV4dHJhIHJlZiBmb3JcbiBcdCAqIHRoZSBjYWxsIHRvIGhvbGQgaXRzZWxmIHNvIHRoZSBjYWxsZXIgbmVlZCBub3QgaGFuZyBvbiB0byBpdHMgcmVmLlxuIFx0ICovXG4tXHRpZiAoY2FsbC1cdTAwM2Vhc3luYykge1xuLVx0XHRhZnNfZ2V0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfZ2V0KTtcbi1cdFx0Y2FsbC1cdTAwM2Vkcm9wX3JlZiA9IHRydWU7XG4mIzQzO1x0aWYgKGNhbGwtXHUwMDNlYXN5bmMpXG4mIzQzO1x0XHRhZnNfZ2V0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfZ2V0X21ha2VfYXN5bmNfY2FsbCk7XG4mIzQzO1xuJiM0MztcdGlmIChjYWxsLVx1MDAzZWtleSBcdTAwMjZcdTAwMjYgY2FsbC1cdTAwM2VzZXJ2ZXIpIHtcbiYjNDM7XHRcdHUzMiBrcmI1X2VuY3R5cGUgPSAwO1xuJiM0MztcdFx0dTggc2VjdXJpdHlfaW5kZXggPSAwO1xuJiM0MztcbiYjNDM7XHRcdHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoY2FsbC1cdTAwM2VrZXksIFx1MDAyNnNlY3VyaXR5X2luZGV4LCBcdTAwMjZrcmI1X2VuY3R5cGUpO1xuJiM0MztcdFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuJiM0MzsjaWZkZWYgQ09ORklHX1JYR0tcbiYjNDM7XHRcdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XG4mIzQzO1x0XHRcdC8qIFJlYWQgdGhlIGtleSBwb2ludGVyIGJlZm9yZSB0aGUgYXBwZGF0YSAqL1xuJiM0MztcdFx0XHRhcHBfZGF0YSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y2FsbC1cdTAwM2VzZXJ2ZXItXHUwMDNleWZzX3J4Z2tfYXBwZGF0YSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0LyogY3JlYXRlIGEgY2FsbCAqL1xuLVx0cnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXBlZXIsIGNhbGwtXHUwMDNla2V5LFxuJiM0MztcdHJ4Y2FsbCA9IHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VwZWVyLFxuJiM0MztcdFx0XHRcdFx0IGNhbGwtXHUwMDNla2V5LCBhcHBfZGF0YSxcbiBcdFx0XHRcdFx0ICh1bnNpZ25lZCBsb25nKWNhbGwsXG4gXHRcdFx0XHRcdCB0eF90b3RhbF9sZW4sXG4gXHRcdFx0XHRcdCBjYWxsLVx1MDAzZW1heF9saWZlc3BhbixcbkBAIC00MTAsNyAmIzQzOzM4NSw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgaW92LCAxLCBjYWxsLVx1MDAzZXJlcXVlc3Rfc2l6ZSk7XG4gXHRtc2cubXNnX2NvbnRyb2xcdFx0PSBOVUxMO1xuIFx0bXNnLm1zZ19jb250cm9sbGVuXHQ9IDA7XG4tXHRtc2cubXNnX2ZsYWdzXHRcdD0gTVNHX1dBSVRBTEwgfCAoY2FsbC1cdTAwM2V3cml0ZV9pdGVyID8gTVNHX01PUkUgOiAwKTtcbiYjNDM7XHRtc2cubXNnX2ZsYWdzXHRcdD0gTVNHX1dBSVRBTEwgfCAod3JpdGVfaXRlciA/IE1TR19NT1JFIDogMCk7XG4gXG4gXHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZtc2csIGNhbGwtXHUwMDNlcmVxdWVzdF9zaXplLFxuQEAgLTQxOCw3ICYjNDM7MzkzLDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbiBcbi1cdGlmIChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIpIHtcbiYjNDM7XHRpZiAod3JpdGVfaXRlcikge1xuIFx0XHRtc2cubXNnX2l0ZXIgPSAqY2FsbC1cdTAwM2V3cml0ZV9pdGVyO1xuIFx0XHRtc2cubXNnX2ZsYWdzIFx1MDAyNj0gfk1TR19NT1JFO1xuIFx0XHR0cmFjZV9hZnNfc2VuZF9kYXRhKGNhbGwsIFx1MDAyNm1zZyk7XG5AQCAtNDI3LDkgJiM0Mzs0MDIsOCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRcdFx0XHRcdCAgICAgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZyxcbiBcdFx0XHRcdFx0ICAgICBpb3ZfaXRlcl9jb3VudChcdTAwMjZtc2cubXNnX2l0ZXIpLFxuIFx0XHRcdFx0XHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xuLVx0XHQqY2FsbC1cdTAwM2V3cml0ZV9pdGVyID0gbXNnLm1zZ19pdGVyO1xuIFxuLVx0XHR0cmFjZV9hZnNfc2VudF9kYXRhKGNhbGwsIFx1MDAyNm1zZywgcmV0KTtcbiYjNDM7XHRcdHRyYWNlX2Fmc19zZW50X2RhdGEoZGVidWdfaWQsIFx1MDAyNm1zZywgcmV0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIGVycm9yX2RvX2Fib3J0O1xuIFx0fVxuQEAgLTQ0OCw3ICYjNDM7NDIyLDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0XHRcdFx0XHRSWF9VU0VSX0FCT1JULCByZXQsXG4gXHRcdFx0XHRcdGFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpO1xuIFx0aWYgKGNhbGwtXHUwMDNlYXN5bmMpIHtcbi1cdFx0YWZzX3NlZV9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2FzeW5jX2Fib3J0KTtcbiYjNDM7XHRcdGFmc19zZWVfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9zZWVfYXN5bmNfYWJvcnQpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNDY0LDcgJiM0Mzs0MzgsNyBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHR0cmFjZV9hZnNfY2FsbF9kb25lKGNhbGwpO1xuIGVycm9yX2tpbGxfY2FsbDpcbiBcdGlmIChjYWxsLVx1MDAzZWFzeW5jKVxuLVx0XHRhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfa2lsbCk7XG4mIzQzO1x0XHRhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2Vfc2VlX2FzeW5jX2tpbGwpO1xuIFx0aWYgKGNhbGwtXHUwMDNldHlwZS1cdTAwM2VpbW1lZGlhdGVfY2FuY2VsKVxuIFx0XHRjYWxsLVx1MDAzZXR5cGUtXHUwMDNlaW1tZWRpYXRlX2NhbmNlbChjYWxsKTtcbiBcbkBAIC00NzUsOCAmIzQzOzQ0OSw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdGlmIChjYWxsLVx1MDAzZXJ4Y2FsbClcbiBcdFx0cnhycGNfa2VybmVsX3NodXRkb3duX2NhbGwoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCk7XG4gXHRpZiAoY2FsbC1cdTAwM2Vhc3luYykge1xuLVx0XHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjYWxsLVx1MDAzZWFzeW5jX3dvcmspKVxuLVx0XHRcdGFmc19wdXRfY2FsbChjYWxsKTtcbiYjNDM7XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2Y2FsbC1cdTAwM2Vhc3luY193b3JrKTtcbiBcdFx0YWZzX3NldF9jYWxsX2NvbXBsZXRlKGNhbGwsIHJldCwgMCk7XG4gXHR9XG4gXG5AQCAtNTYyLDcgJiM0Mzs1MzUsOCBAQCB2b2lkIGFmc19kZWxpdmVyX3RvX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIFx0XHRzd2l0Y2ggKHJldCkge1xuIFx0XHRjYXNlIDA6XG4gXHRcdFx0Y2FsbC1cdTAwM2VyZXNwb25kZWQgPSB0cnVlO1xuLVx0XHRcdGFmc19xdWV1ZV9jYWxsX3dvcmsoY2FsbCk7XG4mIzQzO1x0XHRcdGlmIChjYWxsLVx1MDAzZXdvcmspXG4mIzQzO1x0XHRcdFx0Y2FsbC1cdTAwM2V3b3JrKGNhbGwpO1xuIFx0XHRcdGlmIChzdGF0ZSA9PSBBRlNfQ0FMTF9DTF9QUk9DX1JFUExZKSB7XG4gXHRcdFx0XHRpZiAoY2FsbC1cdTAwM2VvcClcbiBcdFx0XHRcdFx0c2V0X2JpdChBRlNfU0VSVkVSX0ZMX01BWV9IQVZFX0NCLFxuQEAgLTYxMiw2ICYjNDM7NTg2LDcgQEAgdm9pZCBhZnNfZGVsaXZlcl90b19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdH1cbiBcbiBkb25lOlxuJiM0MztcdHRyYWNlX2Fmc19jYWxsX2RvbmUoY2FsbCk7XG4gXHRpZiAoY2FsbC1cdTAwM2V0eXBlLVx1MDAzZWRvbmUpXG4gXHRcdGNhbGwtXHUwMDNldHlwZS1cdTAwM2Vkb25lKGNhbGwpO1xuIG91dDpcbkBAIC03MDAsMTkgJiM0Mzs2NzUsMTIgQEAgc3RhdGljIHZvaWQgYWZzX3dha2VfdXBfYXN5bmNfY2FsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByeHJwY19jYWxsICpyeGNhbGwsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGNhbGxfdXNlcl9JRClcbiB7XG4gXHRzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwgPSAoc3RydWN0IGFmc19jYWxsICopY2FsbF91c2VyX0lEO1xuLVx0aW50IHI7XG4gXG4gXHR0cmFjZV9hZnNfbm90aWZ5X2NhbGwocnhjYWxsLCBjYWxsKTtcbiBcdGNhbGwtXHUwMDNlbmVlZF9hdHRlbnRpb24gPSB0cnVlO1xuIFxuLVx0aWYgKF9fcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmNhbGwtXHUwMDNlcmVmLCBcdTAwMjZyKSkge1xuLVx0XHR0cmFjZV9hZnNfY2FsbChjYWxsLVx1MDAzZWRlYnVnX2lkLCBhZnNfY2FsbF90cmFjZV93YWtlLCByICYjNDM7IDEsXG4tXHRcdFx0ICAgICAgIGF0b21pY19yZWFkKFx1MDAyNmNhbGwtXHUwMDNlbmV0LVx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKSxcbi1cdFx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbi1cbi1cdFx0aWYgKCFxdWV1ZV93b3JrKGFmc19hc3luY19jYWxscywgXHUwMDI2Y2FsbC1cdTAwM2Vhc3luY193b3JrKSlcbi1cdFx0XHRhZnNfZGVmZXJyZWRfcHV0X2NhbGwoY2FsbCk7XG4tXHR9XG4mIzQzO1x0YWZzX3NlZV9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY193YWtlKTtcbiYjNDM7XHRxdWV1ZV93b3JrKGFmc19hc3luY19jYWxscywgXHUwMDI2Y2FsbC1cdTAwM2Vhc3luY193b3JrKTtcbiB9XG4gXG4gLypcbkBAIC03MjUsMTIgJiM0Mzs2OTMsMTcgQEAgc3RhdGljIHZvaWQgYWZzX3Byb2Nlc3NfYXN5bmNfY2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRfZW50ZXIoXCYjMzQ7XCYjMzQ7KTtcbiBcbiYjNDM7XHRhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2Vfc2VlX2FzeW5jX3Byb2Nlc3MpO1xuJiM0MztcbiBcdGlmIChjYWxsLVx1MDAzZXN0YXRlIFx1MDAzYyBBRlNfQ0FMTF9DT01QTEVURSBcdTAwMjZcdTAwMjYgY2FsbC1cdTAwM2VuZWVkX2F0dGVudGlvbikge1xuIFx0XHRjYWxsLVx1MDAzZW5lZWRfYXR0ZW50aW9uID0gZmFsc2U7XG4gXHRcdGFmc19kZWxpdmVyX3RvX2NhbGwoY2FsbCk7XG4gXHR9XG4gXG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4mIzQzO1x0aWYgKGNhbGwtXHUwMDNlc3RhdGUgPT0gQUZTX0NBTExfQ09NUExFVEUpIHtcbiYjNDM7XHRcdGNhbmNlbF93b3JrKFx1MDAyNmNhbGwtXHUwMDNlYXN5bmNfd29yayk7XG4mIzQzO1x0XHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X2FzeW5jX2NvbXBsZXRlKTtcbiYjNDM7XHR9XG4gXHRfbGVhdmUoXCYjMzQ7XCYjMzQ7KTtcbiB9XG4gXG5AQCAtNzU2LDcgJiM0Mzs3MjksNiBAQCB2b2lkIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdFx0aWYgKCFjYWxsKVxuIFx0XHRcdFx0YnJlYWs7XG4gXG4tXHRcdFx0Y2FsbC1cdTAwM2Vkcm9wX3JlZiA9IHRydWU7XG4gXHRcdFx0Y2FsbC1cdTAwM2Vhc3luYyA9IHRydWU7XG4gXHRcdFx0Y2FsbC1cdTAwM2VzdGF0ZSA9IEFGU19DQUxMX1NWX0FXQUlUX09QX0lEO1xuIFx0XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2Y2FsbC1cdTAwM2V3YWl0cSk7XG5AQCAtNzgzLDcgJiM0Mzs3NTUsNyBAQCBzdGF0aWMgdm9pZCBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsLFxuIFx0c3RydWN0IGFmc19jYWxsICpjYWxsID0gKHN0cnVjdCBhZnNfY2FsbCAqKXVzZXJfY2FsbF9JRDtcbiBcbiBcdGNhbGwtXHUwMDNlcnhjYWxsID0gTlVMTDtcbi1cdGFmc19wdXRfY2FsbChjYWxsKTtcbiYjNDM7XHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X2Rpc2NhcmRfcHJlYWxsb2MpO1xuIH1cbiBcbiAvKlxuQEAgLTgzMiw3ICYjNDM7ODA0LDcgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jbV9vcF9pZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4gXHRcdFx0XHRcdFx0XHQgICAgIFx1MDAyNmNhbGwtXHUwMDNlZW5jdHlwZSk7XG4gXG4gXHR0cmFjZV9hZnNfY2JfY2FsbChjYWxsKTtcbi1cdGNhbGwtXHUwMDNld29yay5mdW5jID0gY2FsbC1cdTAwM2V0eXBlLVx1MDAzZXdvcms7XG4mIzQzO1x0Y2FsbC1cdTAwM2V3b3JrID0gY2FsbC1cdTAwM2V0eXBlLVx1MDAzZXdvcms7XG4gXG4gXHQvKiBwYXNzIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgcmVtYWluZGVyIG9mIHRoaXMgbWVzc2FnZSBvZmYgdG8gdGhlXG4gXHQgKiBjYWNoZSBtYW5hZ2VyIG9wICovXG5AQCAtOTgzLDE0ICYjNDM7OTU1LDMgQEAgbm9pbmxpbmUgaW50IGFmc19wcm90b2NvbF9lcnJvcihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4gXHRcdGNhbGwtXHUwMDNldW5tYXJzaGFsbGluZ19lcnJvciA9IHRydWU7XG4gXHRyZXR1cm4gLUVCQURNU0c7XG4gfVxuLVxuLS8qXG4tICogV2FrZSB1cCBPT0Igbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuXG4tICovXG4tc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKVxuLXtcbi1cdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzay1cdTAwM2Vza191c2VyX2RhdGE7XG4tXG4tXHRpZiAoUkVBRF9PTkNFKG5ldC1cdTAwM2VsaXZlKSlcbi1cdFx0cXVldWVfd29yayhhZnNfd3EsIFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yayk7XG4tfVxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZXJ2ZXIuYyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuaW5kZXggMGZlMTYyZWEyYTM2ZGIuLjRjM2E3YmQwZjdkODY2IDEwMDY0NFxuLS0tIGEvZnMvYWZzL3NlcnZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvc2VydmVyLmNcbkBAIC0zOTgsNyAmIzQzOzM5OCw3IEBAIHN0YXRpYyB2b2lkIGFmc19zZXJ2ZXJfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxuIFx0YWZzX3B1dF9lbmRwb2ludF9zdGF0ZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlKSxcbiBcdFx0XHQgICAgICAgYWZzX2VzdGF0ZV90cmFjZV9wdXRfc2VydmVyKTtcbiBcdGFmc19wdXRfY2VsbChzZXJ2ZXItXHUwMDNlY2VsbCwgYWZzX2NlbGxfdHJhY2VfcHV0X3NlcnZlcik7XG4tXHRrZnJlZShzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpO1xuJiM0MztcdGtleV9wdXQoc2VydmVyLVx1MDAzZXlmc19yeGdrX2FwcGRhdGEpO1xuIFx0a2ZyZWUoc2VydmVyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3ZsX3Byb2JlLmMgYi9mcy9hZnMvdmxfcHJvYmUuY1xuaW5kZXggM2QyZTBjOTI1NDYwZjkuLjFkNzA4ODdjOWYzMThiIDEwMDY0NFxuLS0tIGEvZnMvYWZzL3ZsX3Byb2JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy92bF9wcm9iZS5jXG5AQCAtMTg2LDcgJiM0MzsxODYsNyBAQCBzdGF0aWMgYm9vbCBhZnNfZG9fcHJvYmVfdmxzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICAgIHNlcnZlcl9pbmRleCk7XG4gXHRcdGlmICghSVNfRVJSKGNhbGwpKSB7XG4gXHRcdFx0YWZzX3ByaW9yaXRpc2VfZXJyb3IoX2UsIGNhbGwtXHUwMDNlZXJyb3IsIGNhbGwtXHUwMDNlYWJvcnRfY29kZSk7XG4tXHRcdFx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuJiM0MztcdFx0XHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2dldF9jYXBzKTtcbiBcdFx0XHRpbl9wcm9ncmVzcyA9IHRydWU7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0YWZzX3ByaW9yaXRpc2VfZXJyb3IoX2UsIFBUUl9FUlIoY2FsbCksIDApO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy92bGNsaWVudC5jIGIvZnMvYWZzL3ZsY2xpZW50LmNcbmluZGV4IGE0MGI0MzQ2NGNmYTllLi44YTRjOGM5YTFlMzk5NiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy92bGNsaWVudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvdmxjbGllbnQuY1xuQEAgLTE1Myw3ICYjNDM7MTUzLDcgQEAgc3RydWN0IGFmc192bGRiX2VudHJ5ICphZnNfdmxfZ2V0X2VudHJ5X2J5X25hbWVfdShzdHJ1Y3QgYWZzX3ZsX2N1cnNvciAqdmMsXG4gXHR2Yy1cdTAwM2VjYWxsX2Fib3J0X2NvZGVcdD0gY2FsbC1cdTAwM2VhYm9ydF9jb2RlO1xuIFx0dmMtXHUwMDNlY2FsbF9lcnJvclx0XHQ9IGNhbGwtXHUwMDNlZXJyb3I7XG4gXHR2Yy1cdTAwM2VjYWxsX3Jlc3BvbmRlZFx0PSBjYWxsLVx1MDAzZXJlc3BvbmRlZDtcbi1cdGFmc19wdXRfY2FsbChjYWxsKTtcbiYjNDM7XHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2NhbGwpO1xuIFx0aWYgKHZjLVx1MDAzZWNhbGxfZXJyb3IpIHtcbiBcdFx0a2ZyZWUoZW50cnkpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUih2Yy1cdTAwM2VjYWxsX2Vycm9yKTtcbkBAIC0zMDMsNyAmIzQzOzMwMyw3IEBAIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfdmxfZ2V0X2FkZHJzX3Uoc3RydWN0IGFmc192bF9jdXJzb3IgKnZjLFxuIFx0dmMtXHUwMDNlY2FsbF9lcnJvclx0XHQ9IGNhbGwtXHUwMDNlZXJyb3I7XG4gXHR2Yy1cdTAwM2VjYWxsX3Jlc3BvbmRlZFx0PSBjYWxsLVx1MDAzZXJlc3BvbmRlZDtcbiBcdGFsaXN0XHRcdFx0PSBjYWxsLVx1MDAzZXJldF9hbGlzdDtcbi1cdGFmc19wdXRfY2FsbChjYWxsKTtcbiYjNDM7XHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2NhbGwpO1xuIFx0aWYgKHZjLVx1MDAzZWNhbGxfZXJyb3IpIHtcbiBcdFx0YWZzX3B1dF9hZGRybGlzdChhbGlzdCwgYWZzX2FsaXN0X3RyYWNlX3B1dF9nZXRhZGRydSk7XG4gXHRcdHJldHVybiBFUlJfUFRSKHZjLVx1MDAzZWNhbGxfZXJyb3IpO1xuQEAgLTY2Niw3ICYjNDM7NjY2LDcgQEAgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc195ZnN2bF9nZXRfZW5kcG9pbnRzKHN0cnVjdCBhZnNfdmxfY3Vyc29yICp2YyxcbiBcdHZjLVx1MDAzZWNhbGxfZXJyb3JcdFx0PSBjYWxsLVx1MDAzZWVycm9yO1xuIFx0dmMtXHUwMDNlY2FsbF9yZXNwb25kZWRcdD0gY2FsbC1cdTAwM2VyZXNwb25kZWQ7XG4gXHRhbGlzdFx0XHRcdD0gY2FsbC1cdTAwM2VyZXRfYWxpc3Q7XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4mIzQzO1x0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF92bF9jYWxsKTtcbiBcdGlmICh2Yy1cdTAwM2VjYWxsX2Vycm9yKSB7XG4gXHRcdGFmc19wdXRfYWRkcmxpc3QoYWxpc3QsIGFmc19hbGlzdF90cmFjZV9wdXRfZ2V0YWRkcnUpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUih2Yy1cdTAwM2VjYWxsX2Vycm9yKTtcbkBAIC03ODQsNyAmIzQzOzc4NCw3IEBAIGNoYXIgKmFmc195ZnN2bF9nZXRfY2VsbF9uYW1lKHN0cnVjdCBhZnNfdmxfY3Vyc29yICp2YylcbiBcdHZjLVx1MDAzZWNhbGxfZXJyb3JcdFx0PSBjYWxsLVx1MDAzZWVycm9yO1xuIFx0dmMtXHUwMDNlY2FsbF9yZXNwb25kZWRcdD0gY2FsbC1cdTAwM2VyZXNwb25kZWQ7XG4gXHRjZWxsbmFtZVx0XHQ9IGNhbGwtXHUwMDNlcmV0X3N0cjtcbi1cdGFmc19wdXRfY2FsbChjYWxsKTtcbiYjNDM7XHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2NhbGwpO1xuIFx0aWYgKHZjLVx1MDAzZWNhbGxfZXJyb3IpIHtcbiBcdFx0a2ZyZWUoY2VsbG5hbWUpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUih2Yy1cdTAwM2VjYWxsX2Vycm9yKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvdXNlci10eXBlLmggYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcbmluZGV4IDM4NmMzMTQzMjc4OTk1Li43MDAyYTk5M2E0NzIyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXG5AQCAtMjYsNiAmIzQzOzI2LDcgQEBcbiAgKi9cbiBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCB7XG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdHJjdTtcdFx0LyogUkNVIGRlc3RydWN0b3IgKi9cbiYjNDM7XHRyZWZjb3VudF90XHRyZWY7XG4gXHR1bnNpZ25lZCBzaG9ydFx0ZGF0YWxlbjtcdC8qIGxlbmd0aCBvZiB0aGlzIGRhdGEgKi9cbiBcdGNoYXJcdFx0ZGF0YVtdIF9fYWxpZ25lZChfX2FsaWdub2ZfXyh1NjQpKTsgLyogYWN0dWFsIGRhdGEgKi9cbiB9O1xuQEAgLTM3LDYgJiM0MzszOCw3IEBAIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQ7XG4gXG4gZXh0ZXJuIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuIGV4dGVybiB2b2lkIHVzZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbiYjNDM7dm9pZCBwdXRfdXNlcl9rZXlfcGF5bG9hZChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCk7XG4gZXh0ZXJuIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuIGV4dGVybiB2b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSk7XG4gZXh0ZXJuIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfcnhycGMuaCBiL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmhcbmluZGV4IDBmYjRjNDFjOWJiZjU1Li5hOWI4ZTFiYTY3ZWY4ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmhcbkBAIC01NSw2ICYjNDM7NTUsNyBAQCB2b2lkIHJ4cnBjX2tlcm5lbF9zZXRfbm90aWZpY2F0aW9ucyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcixcbiBcdFx0XHRcdFx0ICAgc3RydWN0IGtleSAqa2V5LFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGtleSAqYXBwX2RhdGEsXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lELFxuIFx0XHRcdFx0XHQgICBzNjQgdHhfdG90YWxfbGVuLFxuIFx0XHRcdFx0XHQgICB1MzIgaGFyZF90aW1lb3V0LFxuQEAgLTkxLDI0ICYjNDM7OTIsOCBAQCBib29sIHJ4cnBjX2tlcm5lbF9jaGVja19saWZlKGNvbnN0IHN0cnVjdCBzb2NrZXQgKiwgY29uc3Qgc3RydWN0IHJ4cnBjX2NhbGwgKik7XG4gXG4gaW50IHJ4cnBjX3NvY2tfc2V0X21pbl9zZWN1cml0eV9sZXZlbChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCB2YWwpO1xuIGludCByeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKHN0cnVjdCBzb2NrICosIHN0cnVjdCBrZXkgKik7XG4taW50IHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc2V0KTtcbi1cbi1lbnVtIHJ4cnBjX29vYl90eXBlIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYixcbi1cdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlcixcbi1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSk7XG4tc3RydWN0IHNrX2J1ZmYgKnJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLVx0XHRcdFx0XHQgZW51bSByeHJwY19vb2JfdHlwZSAqX3R5cGUpO1xuLXZvaWQgcnhycGNfa2VybmVsX2ZyZWVfb29iKHN0cnVjdCBza19idWZmICpvb2IpO1xuLXZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhLFxuLVx0XHRcdFx0ICB1MTYgKl9zZXJ2aWNlX2lkLCB1OCAqX3NlY3VyaXR5X2luZGV4KTtcbi1pbnQgcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwgdTMyIGFib3J0X2NvZGUsXG4tXHRcdFx0XHQgIGludCBlcnJvciwgZW51bSByeHJwY19hYm9ydF9yZWFzb24gd2h5KTtcbi1pbnQgcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpO1xuLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XG4taW50IHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSk7XG4mIzQzO3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsXG4mIzQzO1x0XHRcdCAgICB1MzIgKl9rcmI1X2VuY3R5cGUpO1xuIHU4IHJ4cnBjX2tlcm5lbF9xdWVyeV9jYWxsX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdFx0ICAgIHUxNiAqX3NlcnZpY2VfaWQsIHUzMiAqX2VuY3R5cGUpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbmluZGV4IDFiM2M0OGI1NTkxZGZkLi5hNGY1NzQxNGQ1MjdmYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuQEAgLTEyMCwxNCAmIzQzOzEyMCwyNiBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24ge1xuICAqIERlY2xhcmUgdHJhY2luZyBpbmZvcm1hdGlvbiBlbnVtcyBhbmQgdGhlaXIgc3RyaW5nIG1hcHBpbmdzIGZvciBkaXNwbGF5LlxuICAqL1xuICNkZWZpbmUgYWZzX2NhbGxfdHJhY2VzIFxcXG4tXHRFTShhZnNfY2FsbF90cmFjZV9hbGxvYyxcdFx0XCYjMzQ7QUxMT0NcJiMzNDspIFxcXG4tXHRFTShhZnNfY2FsbF90cmFjZV9hc3luY19hYm9ydCxcdFx0XCYjMzQ7QVNZQUJcJiMzNDspIFxcXG4tXHRFTShhZnNfY2FsbF90cmFjZV9hc3luY19raWxsLFx0XHRcJiMzNDtBU1lLTFwmIzM0OykgXFxcbi1cdEVNKGFmc19jYWxsX3RyYWNlX2ZyZWUsXHRcdFx0XCYjMzQ7RlJFRSBcJiMzNDspIFxcXG4tXHRFTShhZnNfY2FsbF90cmFjZV9nZXQsXHRcdFx0XCYjMzQ7R0VUICBcJiMzNDspIFxcXG4tXHRFTShhZnNfY2FsbF90cmFjZV9wdXQsXHRcdFx0XCYjMzQ7UFVUICBcJiMzNDspIFxcXG4tXHRFTShhZnNfY2FsbF90cmFjZV93YWtlLFx0XHRcdFwmIzM0O1dBS0UgXCYjMzQ7KSBcXFxuLVx0RV8oYWZzX2NhbGxfdHJhY2Vfd29yayxcdFx0XHRcJiMzNDtRVUVVRVwmIzM0OylcbiYjNDM7XHRFTShhZnNfY2FsbF90cmFjZV9hbGxvYyxcdFx0XCYjMzQ7QUxMT0MgICAgICBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX2NhbGxfdHJhY2VfZnJlZSxcdFx0XHRcJiMzNDtGUkVFICAgICAgIFwmIzM0OykgXFxcbiYjNDM7XHRFTShhZnNfY2FsbF90cmFjZV9nZXRfb3BfY2FsbCxcdFx0XCYjMzQ7R0VUIG9wICAgICBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX2NhbGxfdHJhY2VfZ2V0X21ha2VfYXN5bmNfY2FsbCxcdFwmIzM0O0dFVCBhLW1ha2UgXCYjMzQ7KSBcXFxuJiM0MztcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9hc3luY19jb21wbGV0ZSxcdFwmIzM0O1BVVCBhLWNtcGwgXCYjMzQ7KSBcXFxuJiM0MztcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9tYWRlX2NhbGwsXHRcJiMzNDtQVVQgbWFkZSAgIFwmIzM0OykgXFxcbiYjNDM7XHRFTShhZnNfY2FsbF90cmFjZV9wdXRfZGlzY2FyZF9wcmVhbGxvYyxcdFwmIzM0O1BVVCBkaXMtcHJlXCYjMzQ7KSBcXFxuJiM0MztcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9nZXRfY2FwYWJpbGl0aWVzLFx0XCYjMzQ7UFVUIGdldC1jYXBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X2dpdmV1cGNhbGxiYWNrcyxcdFwmIzM0O1BVVCBndnVwLWNiXCYjMzQ7KSBcXFxuJiM0MztcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9vb20sXHRcdFwmIzM0O1BVVCBvb20gICAgXCYjMzQ7KSBcXFxuJiM0MztcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9yZWFkX2NvbXBsZXRlLFx0XCYjMzQ7UFVUIHJkLWNwbCBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X3JlYWRfb3AsXHRcdFwmIzM0O1BVVCByZC1vcCAgXCYjMzQ7KSBcXFxuJiM0MztcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9zcGFyZV9zdmMsXHRcJiMzNDtQVVQgc3BhcmUtc1wmIzM0OykgXFxcbiYjNDM7XHRFTShhZnNfY2FsbF90cmFjZV9wdXRfdmxfY2FsbCxcdFx0XCYjMzQ7UFVUIHZsLWNhbGxcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2dldF9jYXBzLFx0XCYjMzQ7UFVUIHZsLWdjYXBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X3dhaXRfb3AsXHRcdFwmIzM0O1BVVCB3dC1vcCAgXCYjMzQ7KSBcXFxuJiM0MztcdEVNKGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY19hYm9ydCxcdFwmIzM0O1NFRSBhLWFib3J0XCYjMzQ7KSBcXFxuJiM0MztcdEVNKGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY19raWxsLFx0XCYjMzQ7U0VFIGEta2lsbCBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX2NhbGxfdHJhY2Vfc2VlX2FzeW5jX3Byb2Nlc3MsXHRcJiMzNDtTRUUgYS1wcm9jIFwmIzM0OykgXFxcbiYjNDM7XHRFXyhhZnNfY2FsbF90cmFjZV9zZWVfYXN5bmNfd2FrZSxcdFwmIzM0O1NFRSBhLXdha2UgXCYjMzQ7KVxuIFxuICNkZWZpbmUgYWZzX3NlcnZlcl90cmFjZXMgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfY2FsbGJhY2ssXHRcdFwmIzM0O0NBTExCQUNLIFwmIzM0OykgXFxcbkBAIC0xNDgsNiAmIzQzOzE2MCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VudXNlX3NsaXN0X2lzb3J0LFx0XCYjMzQ7VU5VIGlzb3J0XCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXHRcdFwmIzM0O1VQREFURSAgIFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXHRcJiMzNDtVU0UgdXVpZCBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcdFx0XCYjMzQ7VVNFIGNhbGwgXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCxcdFwmIzM0O1VTRSBjbS1jbFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLFx0XCYjMzQ7VVNFIGdjYXBzXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcdFwmIzM0O1VTRSBndnVwY1wmIzM0OykgXFxcbkBAIC02OTMsMTYgJiM0Mzs3MDYsMTUgQEAgVFJBQ0VfRVZFTlQoYWZzX2NiX2NhbGwsXG4gXG4gVFJBQ0VfRVZFTlQoYWZzX2NhbGwsXG4gXHQgICAgVFBfUFJPVE8odW5zaWduZWQgaW50IGNhbGxfZGVidWdfaWQsIGVudW0gYWZzX2NhbGxfdHJhY2Ugb3AsXG4tXHRcdCAgICAgaW50IHJlZiwgaW50IG91dHN0YW5kaW5nLCBjb25zdCB2b2lkICp3aGVyZSksXG4mIzQzO1x0XHQgICAgIGludCByZWYsIGludCBvdXRzdGFuZGluZyksXG4gXG4tXHQgICAgVFBfQVJHUyhjYWxsX2RlYnVnX2lkLCBvcCwgcmVmLCBvdXRzdGFuZGluZywgd2hlcmUpLFxuJiM0MztcdCAgICBUUF9BUkdTKGNhbGxfZGVidWdfaWQsIG9wLCByZWYsIG91dHN0YW5kaW5nKSxcbiBcbiBcdCAgICBUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHQgICAgX19maWVsZCh1bnNpZ25lZCBpbnQsXHRcdGNhbGwpXG4gXHRcdCAgICBfX2ZpZWxkKGludCxcdFx0XHRvcClcbiBcdFx0ICAgIF9fZmllbGQoaW50LFx0XHRcdHJlZilcbiBcdFx0ICAgIF9fZmllbGQoaW50LFx0XHRcdG91dHN0YW5kaW5nKVxuLVx0XHQgICAgX19maWVsZChjb25zdCB2b2lkICosXHRcdHdoZXJlKVxuIFx0XHRcdCAgICAgKSxcbiBcbiBcdCAgICBUUF9mYXN0X2Fzc2lnbihcbkBAIC03MTAsMTUgJiM0Mzs3MjIsMTMgQEAgVFJBQ0VfRVZFTlQoYWZzX2NhbGwsXG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZW9wID0gb3A7XG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZXJlZiA9IHJlZjtcbiBcdFx0ICAgIF9fZW50cnktXHUwMDNlb3V0c3RhbmRpbmcgPSBvdXRzdGFuZGluZztcbi1cdFx0ICAgIF9fZW50cnktXHUwMDNld2hlcmUgPSB3aGVyZTtcbiBcdFx0XHQgICApLFxuIFxuLVx0ICAgIFRQX3ByaW50ayhcJiMzNDtjPSUwOHggJXMgcj0lZCBvPSVkIHNwPSVwU1JcJiMzNDssXG4mIzQzO1x0ICAgIFRQX3ByaW50ayhcJiMzNDtjPSUwOHggJXMgcj0lZCBvPSVkXCYjMzQ7LFxuIFx0XHQgICAgICBfX2VudHJ5LVx1MDAzZWNhbGwsXG4gXHRcdCAgICAgIF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS1cdTAwM2VvcCwgYWZzX2NhbGxfdHJhY2VzKSxcbiBcdFx0ICAgICAgX19lbnRyeS1cdTAwM2VyZWYsXG4tXHRcdCAgICAgIF9fZW50cnktXHUwMDNlb3V0c3RhbmRpbmcsXG4tXHRcdCAgICAgIF9fZW50cnktXHUwMDNld2hlcmUpXG4mIzQzO1x0XHQgICAgICBfX2VudHJ5LVx1MDAzZW91dHN0YW5kaW5nKVxuIFx0ICAgICk7XG4gXG4gVFJBQ0VfRVZFTlQoYWZzX21ha2VfZnNfY2FsbCxcbkBAIC05MzcsOSAmIzQzOzk0Nyw5IEBAIFRSQUNFX0VWRU5UKGFmc19zZW5kX2RhdGEsXG4gXHQgICAgKTtcbiBcbiBUUkFDRV9FVkVOVChhZnNfc2VudF9kYXRhLFxuLVx0ICAgIFRQX1BST1RPKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmV0KSxcbiYjNDM7XHQgICAgVFBfUFJPVE8odW5zaWduZWQgaW50IGNhbGxfZGVidWdfaWQsIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHJldCksXG4gXG4tXHQgICAgVFBfQVJHUyhjYWxsLCBtc2csIHJldCksXG4mIzQzO1x0ICAgIFRQX0FSR1MoY2FsbF9kZWJ1Z19pZCwgbXNnLCByZXQpLFxuIFxuIFx0ICAgIFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdCAgICBfX2ZpZWxkKHVuc2lnbmVkIGludCxcdFx0Y2FsbClcbkBAIC05NDksNyAmIzQzOzk1OSw3IEBAIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsXG4gXHRcdFx0ICAgICApLFxuIFxuIFx0ICAgIFRQX2Zhc3RfYXNzaWduKFxuLVx0XHQgICAgX19lbnRyeS1cdTAwM2VjYWxsID0gY2FsbC1cdTAwM2VkZWJ1Z19pZDtcbiYjNDM7XHRcdCAgICBfX2VudHJ5LVx1MDAzZWNhbGwgPSBjYWxsX2RlYnVnX2lkO1xuIFx0XHQgICAgX19lbnRyeS1cdTAwM2VyZXQgPSByZXQ7XG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZW9mZnNldCA9IG1zZy1cdTAwM2Vtc2dfaXRlci54YXJyYXlfc3RhcnQgJiM0MzsgbXNnLVx1MDAzZW1zZ19pdGVyLmlvdl9vZmZzZXQ7XG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZWNvdW50ID0gaW92X2l0ZXJfY291bnQoXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuaW5kZXggNzA0YTEwZGU2NjcwMDQuLjQ1ZTQ1NTBhMThlZDgxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEBcbiBcdEVNKHJ4cnBjX2Vwcm90b193cm9uZ19zZWN1cml0eSxcdFx0XCYjMzQ7d3Jvbmctc2VjXCYjMzQ7KVx0XHRcXFxuIFx0RU0ocnhycGNfcmVjdm1zZ19leGNlc3NfZGF0YSxcdFx0XCYjMzQ7cmVjdm1zZy1leGNlc3NcJiMzNDspXHRcXFxuIFx0RU0ocnhycGNfcmVjdm1zZ19zaG9ydF9kYXRhLFx0XHRcJiMzNDtyZWN2bXNnLXNob3J0XCYjMzQ7KVx0XFxcbiYjNDM7XHRFTShyeHJwY19zZW5kbXNnX3R4X2Vycm9yLFx0XHRcJiMzNDt0eC1lcnJvclwmIzM0OylcdFx0XFxcbiBcdEVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFx0XHRcJiMzNDtzZW5kbXNnLWxhdGVcJiMzNDspXG4gXG4gI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFxcXG5AQCAtMjYyLDcgJiM0MzsyNjMsNiBAQFxuIFx0RU0ocnhycGNfY29ubl9mcmVlLFx0XHRcdFwmIzM0O0ZSRUUgICAgICAgIFwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2FjdGl2YXRlX2NhbGwsXHRcJiMzNDtHRVQgYWN0LWNhbGxcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9jYWxsX2lucHV0LFx0XHRcJiMzNDtHRVQgaW5wLWNhbGxcJiMzNDspIFxcXG4tXHRFTShyeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQsXHRcJiMzNDtHRVQgaW5wLWNoYWxcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9jb25uX2lucHV0LFx0XHRcJiMzNDtHRVQgaW5wLWNvbm5cJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9pZGxlLFx0XHRcdFwmIzM0O0dFVCBpZGxlICAgIFwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fZ2V0X3Bva2VfYWJvcnQsXHRcdFwmIzM0O0dFVCBway1hYm9ydFwmIzM0OykgXFxcbkBAIC0yNzQsNyAmIzQzOzI3NCw2IEBAXG4gXHRFTShyeHJwY19jb25uX25ld19zZXJ2aWNlLFx0XHRcJiMzNDtORVcgc2VydmljZSBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9jYWxsLFx0XHRcdFwmIzM0O1BVVCBjYWxsICAgIFwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2NhbGxfaW5wdXQsXHRcdFwmIzM0O1BVVCBpbnAtY2FsbFwmIzM0OykgXFxcbi1cdEVNKHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCxcdFwmIzM0O1BVVCBpbnAtY2hhbFwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2Nvbm5faW5wdXQsXHRcdFwmIzM0O1BVVCBpbnAtY29ublwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2Rpc2NhcmRfaWRsZSxcdFx0XCYjMzQ7UFVUIGRpc2MtaWRsXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY29ubl9wdXRfbG9jYWxfZGVhZCxcdFx0XCYjMzQ7UFVUIGxvYy1kZWFkXCYjMzQ7KSBcXFxuQEAgLTM0Miw2ICYjNDM7MzQxLDcgQEBcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX2Rpc3RyaWJ1dGVfZXJyb3IsXHRcJiMzNDtTRUUgZGlzdC1lcnJcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9pbnB1dCxcdFx0XCYjMzQ7U0VFIGlucHV0ICAgXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkLFx0XCYjMzQ7U0VFIG5meS1ybHNkXCYjMzQ7KSBcXFxuJiM0MztcdEVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkLFx0XCYjMzQ7U0VFIG5meS1za2lwXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZyxcdFx0XCYjMzQ7U0VFIHJlY3Ztc2cgXCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZ19yZXF1ZXVlLFx0XCYjMzQ7U0VFIHJlY3YtcnF1XCYjMzQ7KSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZ19yZXF1ZXVlX2ZpcnN0LCBcJiMzNDtTRUUgcmVjdi1ycUZcJiMzNDspIFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaFxuaW5kZXggZDk3MzVhYmQ0Yzc5MTAuLjdkNmE1MDE1MTkzMTEyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXG5AQCAtNTgsMTEgJiM0Mzs1OCw3IEBAIGVudW0gcnhycGNfY21zZ190eXBlIHtcbiBcdFJYUlBDX1RYX0xFTkdUSFx0XHQ9IDEyLFx0LyogLXMtOiBUb3RhbCBsZW5ndGggb2YgVHggZGF0YSAqL1xuIFx0UlhSUENfU0VUX0NBTExfVElNRU9VVFx0PSAxMyxcdC8qIC1zLTogU2V0IG9uZSBvciBtb3JlIGNhbGwgdGltZW91dHMgKi9cbiBcdFJYUlBDX0NIQVJHRV9BQ0NFUFRcdD0gMTQsXHQvKiBTcy06IENoYXJnZSB0aGUgYWNjZXB0IHBvb2wgd2l0aCBhIHVzZXIgY2FsbCBJRCAqL1xuLVx0UlhSUENfT09CX0lEXHRcdD0gMTUsXHQvKiAtc3I6IE9PQiBtZXNzYWdlIElEICovXG4tXHRSWFJQQ19DSEFMTEVOR0VEXHQ9IDE2LFx0LyogQy1yOiBJbmZvIG9uIGEgcmVjZWl2ZWQgQ0hBTExFTkdFICovXG4tXHRSWFJQQ19SRVNQT05EXHRcdD0gMTcsXHQvKiBDcy06IFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2UgKi9cbi1cdFJYUlBDX1JFU1BPTkRFRFx0XHQ9IDE4LFx0LyogUy1yOiBEYXRhIHJlY2VpdmVkIGluIFJFU1BPTlNFICovXG4tXHRSWFJQQ19SRVNQX1JYR0tfQVBQREFUQVx0PSAxOSxcdC8qIENzLTogUkVTUE9OU0U6IFJ4R0sgYXBwIGRhdGEgdG8gaW5jbHVkZSAqL1xuJiM0MztcdFJYUlBDX1JFU1BPTlNFX0FQUERBVEFcdD0gMjAsXHQvKiBDcy06IFVzZXIga2V5IGhvbGRpbmcgYXBwIGRhdGEgZm9yIFJFU1BPTlNFICovXG4gXHRSWFJQQ19fU1VQUE9SVEVEXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG5pbmRleCBjM2M4YzMyNDBlZjk0Ni4uYWEzYzA1OGY0MDk1NTkgMTAwNjQ0XG4tLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbkBAIC0yMDgsNiAmIzQzOzIwOCw3IEBAIGRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFx0XHRrbGVhdmUoXCYjMzQ7ID0gLUVOT01FTVwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZ1cGF5bG9hZC1cdTAwM2VyZWYsIDEpO1xuIFxuIFx0dXBheWxvYWQtXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XG4gXHRtZW1jcHkodXBheWxvYWQtXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL01ha2VmaWxlIGIvbmV0L3J4cnBjL01ha2VmaWxlXG5pbmRleCBmOTk0ZjlmMzBhMjlkNC4uZjdhNWUwYTU5MmVlMTMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9NYWtlZmlsZVxuQEAgLTI0LDcgJiM0MzsyNCw2IEBAIHJ4cnBjLXkgOj0gXFxcbiBcdGxvY2FsX29iamVjdC5vIFxcXG4gXHRtaXNjLm8gXFxcbiBcdG5ldF9ucy5vIFxcXG4tXHRvb2IubyBcXFxuIFx0b3V0cHV0Lm8gXFxcbiBcdHBlZXJfZXZlbnQubyBcXFxuIFx0cGVlcl9vYmplY3QubyBcXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hZl9yeHJwYy5jIGIvbmV0L3J4cnBjL2FmX3J4cnBjLmNcbmluZGV4IDlhYjBmMjJjODgxZWM1Li45ZDVjZTFjN2FkMGQyMiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9hZl9yeHJwYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvYWZfcnhycGMuY1xuQEAgLTMxOCw2ICYjNDM7MzE4LDcgQEAgRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcHV0X3BlZXIpO1xuICAqIEBzb2NrOiBUaGUgc29ja2V0IG9uIHdoaWNoIHRvIG1ha2UgdGhlIGNhbGxcbiAgKiBAcGVlcjogVGhlIHBlZXIgdG8gY29udGFjdFxuICAqIEBrZXk6IFRoZSBzZWN1cml0eSBjb250ZXh0IHRvIHVzZSAoZGVmYXVsdHMgdG8gc29ja2V0IHNldHRpbmcpXG4mIzQzOyAqIEBhcHBfZGF0YTogVGhlIHNlY3VyaXR5IHJlc3BvbnNlIGFwcGxpY2F0aW9uIGRhdGEgKG9yIE5VTEwpXG4gICogQHVzZXJfY2FsbF9JRDogVGhlIElEIHRvIHVzZVxuICAqIEB0eF90b3RhbF9sZW46IFRvdGFsIGxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zbWl0IGR1cmluZyB0aGUgY2FsbCAob3IgLTEpXG4gICogQGhhcmRfdGltZW91dDogVGhlIG1heGltdW0gbGlmZXNwYW4gb2YgdGhlIGNhbGwgaW4gc2VjXG5AQCAtMzQwLDYgJiM0MzszNDEsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7XG4gc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qga2V5ICprZXksXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3Qga2V5ICphcHBfZGF0YSxcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQsXG4gXHRcdFx0XHRcdCAgIHM2NCB0eF90b3RhbF9sZW4sXG4gXHRcdFx0XHRcdCAgIHUzMiBoYXJkX3RpbWVvdXQsXG5AQCAtMzY4LDYgJiM0MzszNzAsNyBAQCBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0a2V5ID0gTlVMTDsgLyogYSBuby1zZWN1cml0eSBrZXkgKi9cbiBcbiBcdG1lbXNldChcdTAwMjZwLCAwLCBzaXplb2YocCkpO1xuJiM0MztcdHAuYXBwX2RhdGFcdFx0PSBhcHBfZGF0YTtcbiBcdHAudXNlcl9jYWxsX0lEXHRcdD0gdXNlcl9jYWxsX0lEO1xuIFx0cC50eF90b3RhbF9sZW5cdFx0PSB0eF90b3RhbF9sZW47XG4gXHRwLmludGVycnVwdGliaWxpdHlcdD0gaW50ZXJydXB0aWJpbGl0eTtcbkBAIC01OTUsMTAgJiM0Mzs1OTgsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbilcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFJYUlBDX1NFUlZFUl9CT1VORDpcbiBcdGNhc2UgUlhSUENfU0VSVkVSX0xJU1RFTklORzpcbi1cdFx0aWYgKG0tXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfT09CKVxuLVx0XHRcdHJldCA9IHJ4cnBjX3NlbmRtc2dfb29iKHJ4LCBtLCBsZW4pO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTtcbiYjNDM7XHRcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XG4gXHRcdC8qIFRoZSBzb2NrZXQgaGFzIGJlZW4gdW5sb2NrZWQgKi9cbiBcdFx0Z290byBvdXQ7XG4gXHRkZWZhdWx0OlxuQEAgLTYzMyw3ICYjNDM7NjMzLDcgQEAgc3RhdGljIGludCByeHJwY19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdFx0ICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4tXHR1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbCwgdmFsO1xuJiM0MztcdHVuc2lnbmVkIGludCBtaW5fc2VjX2xldmVsO1xuIFx0dTE2IHNlcnZpY2VfdXBncmFkZVsyXTtcbiBcdGludCByZXQ7XG4gXG5AQCAtNzEwLDIzICYjNDM7NzEwLDcgQEAgc3RhdGljIGludCByeHJwY19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXG4gXHRcdGNhc2UgUlhSUENfTUFOQUdFX1JFU1BPTlNFOlxuIFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0aWYgKG9wdGxlbiAhPSBzaXplb2YodW5zaWduZWQgaW50KSlcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0cmV0ID0gLUVJU0NPTk47XG4tXHRcdFx0aWYgKHJ4LVx1MDAzZXNrLnNrX3N0YXRlICE9IFJYUlBDX1VOQk9VTkQpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdHJldCA9IGNvcHlfc2FmZV9mcm9tX3NvY2twdHIoXHUwMDI2dmFsLCBzaXplb2YodmFsKSxcbi1cdFx0XHRcdFx0XHQgICAgIG9wdHZhbCwgb3B0bGVuKTtcbi1cdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBlcnJvcjtcbi1cdFx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRcdGlmICh2YWwgXHUwMDNlIDEpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdGlmICh2YWwpXG4tXHRcdFx0XHRzZXRfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0Y2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRcdFx0Z290byBzdWNjZXNzO1xuJiM0MztcdFx0XHRnb3RvIGVycm9yO1xuIFxuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGJyZWFrO1xuQEAgLTgzNSw4ICYjNDM7ODE5LDYgQEAgc3RhdGljIGludCByeHJwY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRyeC1cdTAwM2VjYWxscyA9IFJCX1JPT1Q7XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZyeC1cdTAwM2VpbmNvbWluZ19sb2NrKTtcbi1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKTtcbi1cdHJ4LVx1MDAzZXBlbmRpbmdfb29icSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyeC1cdTAwM2Vzb2NrX2NhbGxzKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJ4LVx1MDAzZXRvX2JlX2FjY2VwdGVkKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG5AQCAtODg0LDIzICYjNDM7ODY2LDYgQEAgc3RhdGljIGludCByeHJwY19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIFB1cmdlIHRoZSBvdXQtb2YtYmFuZCBxdWV1ZS5cbi0gKi9cbi1zdGF0aWMgdm9pZCByeHJwY19wdXJnZV9vb2JfcXVldWUoc3RydWN0IHNvY2sgKnNrKVxuLXtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXG4tXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpKVxuLVx0XHRyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTtcbi1cdHdoaWxlICghUkJfRU1QVFlfUk9PVChcdTAwMjZyeC1cdTAwM2VwZW5kaW5nX29vYnEpKSB7XG4tXHRcdHNrYiA9IHJiX2VudHJ5KHJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTtcbi1cdFx0cmJfZXJhc2UoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxKTtcbi1cdFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKHNrYik7XG4tXHR9XG4tfVxuLVxuIC8qXG4gICogUnhSUEMgc29ja2V0IGRlc3RydWN0b3JcbiAgKi9cbkBAIC05MDgsNyAmIzQzOzg3Myw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3NvY2tfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0X2VudGVyKFwmIzM0OyVwXCYjMzQ7LCBzayk7XG4gXG4tXHRyeHJwY19wdXJnZV9vb2JfcXVldWUoc2spO1xuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG4gXG4gXHRXQVJOX09OKHJlZmNvdW50X3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfd21lbV9hbGxvYykpO1xuQEAgLTk2MSw3ICYjNDM7OTI1LDYgQEAgc3RhdGljIGludCByeHJwY19yZWxlYXNlX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuIFx0cnhycGNfZGlzY2FyZF9wcmVhbGxvYyhyeCk7XG4gXHRyeHJwY19yZWxlYXNlX2NhbGxzX29uX3NvY2tldChyeCk7XG4gXHRmbHVzaF93b3JrcXVldWUocnhycGNfd29ya3F1ZXVlKTtcbi1cdHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7XG4gXHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbiBcbiBcdHJ4cnBjX3VudXNlX2xvY2FsKHJ4LVx1MDAzZWxvY2FsLCByeHJwY19sb2NhbF91bnVzZV9yZWxlYXNlX3NvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbmluZGV4IGNlOTQ2YjBhMDNlMmIzLi4xYzZmNGEyNzkwMzRmMyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuQEAgLTE3MSw5ICYjNDM7MTcxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sge1xuIFx0Y29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgKmFwcF9vcHM7XHQvKiBUYWJsZSBvZiBrZXJuZWwgYXBwIG5vdGlmaWNhdGlvbiBmdW5jcyAqL1xuIFx0c3RydWN0IHJ4cnBjX2xvY2FsXHQqbG9jYWw7XHRcdC8qIGxvY2FsIGVuZHBvaW50ICovXG4gXHRzdHJ1Y3QgcnhycGNfYmFja2xvZ1x0KmJhY2tsb2c7XHQvKiBQcmVhbGxvY2F0aW9uIGZvciBzZXJ2aWNlcyAqL1xuLVx0c3RydWN0IHNrX2J1ZmZfaGVhZFx0cmVjdm1zZ19vb2JxO1x0LyogT09CIG1lc3NhZ2VzIGZvciByZWN2bXNnIHRvIHBpY2sgdXAgKi9cbi1cdHN0cnVjdCByYl9yb290XHRcdHBlbmRpbmdfb29icTtcdC8qIE9PQiBtZXNzYWdlcyBhd2FpdGluZyB1c2Vyc3BhY2UgdG8gcmVzcG9uZCB0byAqL1xuLVx0dTY0XHRcdFx0b29iX2lkX2NvdW50ZXI7XHQvKiBPT0IgbWVzc2FnZSBJRCBjb3VudGVyICovXG4gXHRzcGlubG9ja190XHRcdGluY29taW5nX2xvY2s7XHQvKiBJbmNvbWluZyBjYWxsIHZzIHNlcnZpY2Ugc2h1dGRvd24gbG9jayAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0c29ja19jYWxscztcdC8qIExpc3Qgb2YgY2FsbHMgb3duZWQgYnkgdGhpcyBzb2NrZXQgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWRcdHRvX2JlX2FjY2VwdGVkO1x0LyogY2FsbHMgYXdhaXRpbmcgYWNjZXB0YW5jZSAqL1xuQEAgLTE4NCw3ICYjNDM7MTgxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sge1xuIFx0c3RydWN0IHJiX3Jvb3RcdFx0Y2FsbHM7XHRcdC8qIFVzZXIgSUQgLVx1MDAzZSBjYWxsIG1hcHBpbmcgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZmxhZ3M7XG4gI2RlZmluZSBSWFJQQ19TT0NLX0NPTk5FQ1RFRFx0XHQwXHQvKiBjb25uZWN0X3NyeCBpcyBzZXQgKi9cbi0jZGVmaW5lIFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFXHQxXHQvKiBVc2VyIHdhbnRzIHRvIG1hbmFnZSBSRVNQT05TRSBwYWNrZXRzICovXG4gXHRyd2xvY2tfdFx0XHRjYWxsX2xvY2s7XHQvKiBsb2NrIGZvciBjYWxscyAqL1xuIFx0dTMyXHRcdFx0bWluX3NlY19sZXZlbDtcdC8qIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwgKi9cbiAjZGVmaW5lIFJYUlBDX1NFQ1VSSVRZX01BWFx0UlhSUENfU0VDVVJJVFlfRU5DUllQVFxuQEAgLTI0MSw3ICYjNDM7MjM3LDYgQEAgc3RydWN0IHJ4cnBjX3NrYl9wcml2IHtcbiBcdFx0XHR1OFx0XHRyZWFzb247XHRcdC8qIFJlYXNvbiBmb3IgYWNrICovXG4gXHRcdH0gYWNrO1xuIFx0XHRzdHJ1Y3Qge1xuLVx0XHRcdHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uO1x0LyogQ29ubmVjdGlvbiByZWZlcnJlZCB0byAqL1xuIFx0XHRcdHVuaW9uIHtcbiBcdFx0XHRcdHUzMiByeGthZF9ub25jZTtcbiBcdFx0XHR9O1xuQEAgLTMxMCwxMyAmIzQzOzMwNSw2IEBAIHN0cnVjdCByeHJwY19zZWN1cml0eSB7XG4gXHRib29sICgqdmFsaWRhdGVfY2hhbGxlbmdlKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuLVx0LyogRmlsbCBvdXQgdGhlIGNtc2cgZm9yIHJlY3Ztc2coKSB0byBwYXNzIG9uIGEgY2hhbGxlbmdlIHRvIHVzZXJzcGFjZS5cbi1cdCAqIFRoZSBzZWN1cml0eSBjbGFzcyBnZXRzIHRvIGFkZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuLVx0ICovXG4tXHRpbnQgKCpjaGFsbGVuZ2VfdG9fcmVjdm1zZykoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4tXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgbXNnaGRyICptc2cpO1xuLVxuIFx0LyogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICovXG4gXHRpbnQgKCpzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IG1zZ2hkciAqbXNnKTtcbkBAIC01MTYsNiAmIzQzOzUwNCw3IEBAIHN0cnVjdCByeHJwY19idW5kbGUge1xuIFx0c3RydWN0IHJ4cnBjX2xvY2FsXHQqbG9jYWw7XHRcdC8qIFJlcHJlc2VudGF0aW9uIG9mIGxvY2FsIGVuZHBvaW50ICovXG4gXHRzdHJ1Y3QgcnhycGNfcGVlclx0KnBlZXI7XHRcdC8qIFJlbW90ZSBlbmRwb2ludCAqL1xuIFx0c3RydWN0IGtleVx0XHQqa2V5O1x0XHQvKiBTZWN1cml0eSBkZXRhaWxzICovXG4mIzQzO1x0c3RydWN0IGtleVx0XHQqYXBwX2RhdGE7XHQvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0cHJvY19saW5rO1x0LyogTGluayBpbiBuZXQtXHUwMDNlYnVuZGxlX3Byb2NfbGlzdCAqL1xuIFx0Y29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5ICpzZWN1cml0eTtcdC8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovXG4gXHRyZWZjb3VudF90XHRcdHJlZjtcbkBAIC02NDIsNiAmIzQzOzYzMSw3IEBAIGVudW0gcnhycGNfY2FsbF9mbGFnIHtcbiBcdFJYUlBDX0NBTExfVFhfTEFTVCxcdFx0LyogTGFzdCBwYWNrZXQgaW4gVHggYnVmZmVyIChhdCByeHR4X3RvcCkgKi9cbiBcdFJYUlBDX0NBTExfVFhfQUxMX0FDS0VELFx0LyogTGFzdCBwYWNrZXQgaGFzIGJlZW4gaGFyZC1hY2tlZCAqL1xuIFx0UlhSUENfQ0FMTF9UWF9OT19NT1JFLFx0XHQvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovXG4mIzQzO1x0UlhSUENfQ0FMTF9UWF9FUlJPUixcdFx0LyogVGVybWluYWwgZXJyb3I7IGNhbGwgbmVlZHMgYWJvcnQgKi9cbiBcdFJYUlBDX0NBTExfU0VORF9QSU5HLFx0XHQvKiBBIHBpbmcgd2lsbCBuZWVkIHRvIGJlIHNlbnQgKi9cbiBcdFJYUlBDX0NBTExfUkVUUkFOU19USU1FT1VULFx0LyogUmV0cmFuc21pc3Npb24gZHVlIHRvIHRpbWVvdXQgb2NjdXJyZWQgKi9cbiBcdFJYUlBDX0NBTExfQkVHQU5fUlhfVElNRVIsXHQvKiBXZSBiZWdhbiB0aGUgZXhwZWN0X3J4X2J5IHRpbWVyICovXG5AQCAtNzE5LDYgJiM0Mzs3MDksNyBAQCBzdHJ1Y3QgcnhycGNfY2FsbCB7XG4gXHRzdHJ1Y3QgcnhycGNfc29jayBfX3JjdVx0KnNvY2tldDtcdC8qIHNvY2tldCByZXNwb25zaWJsZSAqL1xuIFx0c3RydWN0IHJ4cnBjX25ldFx0KnJ4bmV0O1x0XHQvKiBOZXR3b3JrIG5hbWVzcGFjZSB0byB3aGljaCBjYWxsIGJlbG9uZ3MgKi9cbiBcdHN0cnVjdCBrZXlcdFx0KmtleTtcdFx0LyogU2VjdXJpdHkgZGV0YWlscyAqL1xuJiM0MztcdHN0cnVjdCBrZXlcdFx0KmFwcF9kYXRhO1x0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cbiBcdGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSAqc2VjdXJpdHk7XHQvKiBhcHBsaWVkIHNlY3VyaXR5IG1vZHVsZSAqL1xuIFx0c3RydWN0IG11dGV4XHRcdHVzZXJfbXV0ZXg7XHQvKiBVc2VyIGFjY2VzcyBtdXRleCAqL1xuIFx0c3RydWN0IHNvY2thZGRyX3J4cnBjXHRkZXN0X3NyeDtcdC8qIERlc3RpbmF0aW9uIGFkZHJlc3MgKi9cbkBAIC05MTMsNiAmIzQzOzkwNCw3IEBAIGVudW0gcnhycGNfY29tbWFuZCB7XG4gfTtcbiBcbiBzdHJ1Y3QgcnhycGNfY2FsbF9wYXJhbXMge1xuJiM0MztcdHN0cnVjdCBrZXlcdFx0KmFwcF9kYXRhO1x0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cbiBcdHM2NFx0XHRcdHR4X3RvdGFsX2xlbjtcdC8qIFRvdGFsIFR4IGRhdGEgbGVuZ3RoIChpZiBzZW5kIGRhdGEpICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdHVzZXJfY2FsbF9JRDtcdC8qIFVzZXImIzM5O3MgY2FsbCBJRCAqL1xuIFx0c3RydWN0IHtcbkBAIC0xMzc1LDEzICYjNDM7MTM2Nyw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ4cnBjX25ldCAqcnhycGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHJ4cnBjX25ldF9pZCk7XG4gfVxuIFxuLS8qXG4tICogb29iLmNcbi0gKi9cbi1ib29sIHJ4cnBjX25vdGlmeV9zb2NrZXRfb29iKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpO1xuLWludCByeHJwY19zZW5kbXNnX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7XG4tXG4gLypcbiAgKiBvdXRwdXQuY1xuICAqL1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jYWxsX29iamVjdC5jIGIvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcbmluZGV4IDgxN2VkOWFjYjkxZTYxLi45ZjYxMzBkOTBjNGNhOCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9jYWxsX29iamVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xuQEAgLTIxMSw2ICYjNDM7MjExLDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19hbGxvY19jbGllbnRfY2FsbChzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRjYWxsLVx1MDAzZWludGVycnVwdGliaWxpdHlcdD0gcC1cdTAwM2VpbnRlcnJ1cHRpYmlsaXR5O1xuIFx0Y2FsbC1cdTAwM2V0eF90b3RhbF9sZW5cdD0gcC1cdTAwM2V0eF90b3RhbF9sZW47XG4gXHRjYWxsLVx1MDAzZWtleVx0XHQ9IGtleV9nZXQoY3AtXHUwMDNla2V5KTtcbiYjNDM7XHRjYWxsLVx1MDAzZWFwcF9kYXRhXHRcdD0ga2V5X2dldChwLVx1MDAzZWFwcF9kYXRhKTtcbiBcdGNhbGwtXHUwMDNlcGVlclx0XHQ9IHJ4cnBjX2dldF9wZWVyKGNwLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfZ2V0X2NhbGwpO1xuIFx0Y2FsbC1cdTAwM2Vsb2NhbFx0XHQ9IHJ4cnBjX2dldF9sb2NhbChjcC1cdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfZ2V0X2NhbGwpO1xuIFx0Y2FsbC1cdTAwM2VzZWN1cml0eV9sZXZlbFx0PSBjcC1cdTAwM2VzZWN1cml0eV9sZXZlbDtcbkBAIC02OTcsNiAmIzQzOzY5OCw3IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX2Rlc3Ryb3lfY2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRyeHJwY19wdXRfcGVlcihjYWxsLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfcHV0X2NhbGwpO1xuIFx0cnhycGNfcHV0X2xvY2FsKGNhbGwtXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX3B1dF9jYWxsKTtcbiBcdGtleV9wdXQoY2FsbC1cdTAwM2VrZXkpO1xuJiM0MztcdGtleV9wdXQoY2FsbC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRjYWxsX3JjdShcdTAwMjZjYWxsLVx1MDAzZXJjdSwgcnhycGNfcmN1X2ZyZWVfY2FsbCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jYWxsX3N0YXRlLmMgYi9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jXG5pbmRleCA2YWZiNTQzNzNlYmJmOS4uNmU0MDIzMTJlMTQ1YzAgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jXG5AQCAtNyw2ICYjNDM7Nyw2MSBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O2FyLWludGVybmFsLmhcJiMzNDtcbiBcbiYjNDM7LypcbiYjNDM7ICogUG9zdCBhIGNhbGwgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlLiAgRnVydGhlclxuJiM0MzsgKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX3J4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9SRUxFQVNFRCwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdHJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9yZWxlYXNlZCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbiYjNDM7XHRzayA9IFx1MDAyNnJ4LVx1MDAzZXNrO1xuJiM0MztcdGlmIChyeCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgXHUwMDNjIFJYUlBDX0NMT1NFKSB7XG4mIzQzO1x0XHRpZiAoY2FsbC1cdTAwM2Vub3RpZnlfcngpIHtcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrKTtcbiYjNDM7XHRcdFx0Y2FsbC1cdTAwM2Vub3RpZnlfcngoc2ssIGNhbGwsIGNhbGwtXHUwMDNldXNlcl9jYWxsX0lEKTtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuJiM0MztcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbiYjNDM7XHRcdFx0XHRyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTtcbiYjNDM7XHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcbiYjNDM7XHRcdFx0XHRfZGVidWcoXCYjMzQ7Y2FsbCAlcHNcJiMzNDssIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuJiM0MztcdFx0XHRcdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUG9zdCBhIGNhbGwgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlLiAgRnVydGhlclxuJiM0MzsgKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSkge1xuJiM0MztcdFx0cnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogVHJhbnNpdGlvbiBhIGNhbGwgdG8gdGhlIGNvbXBsZXRlIHN0YXRlLlxuICAqL1xuQEAgLTI1LDcgJiM0Mzs4MCw3IEBAIGJvb2wgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdHJ4cnBjX3NldF9jYWxsX3N0YXRlKGNhbGwsIFJYUlBDX0NBTExfQ09NUExFVEUpO1xuIFx0dHJhY2VfcnhycGNfY2FsbF9jb21wbGV0ZShjYWxsKTtcbiBcdHdha2VfdXAoXHUwMDI2Y2FsbC1cdTAwM2V3YWl0cSk7XG4tXHRyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuJiM0MztcdF9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9jbGllbnQuYyBiL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXG5pbmRleCA0ODUxOWYwZGUxODUzOS4uNWNiZmE3YjIyM2UwMTEgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9jbGllbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcbkBAIC04MSw2ICYjNDM7ODEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2J1bmRsZSAqcnhycGNfYWxsb2NfYnVuZGxlKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRidW5kbGUtXHUwMDNlbG9jYWxcdFx0PSBjYWxsLVx1MDAzZWxvY2FsO1xuIFx0XHRidW5kbGUtXHUwMDNlcGVlclx0XHQ9IHJ4cnBjX2dldF9wZWVyKGNhbGwtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9nZXRfYnVuZGxlKTtcbiBcdFx0YnVuZGxlLVx1MDAzZWtleVx0XHQ9IGtleV9nZXQoY2FsbC1cdTAwM2VrZXkpO1xuJiM0MztcdFx0YnVuZGxlLVx1MDAzZWFwcF9kYXRhXHQ9IGtleV9nZXQoY2FsbC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRcdGJ1bmRsZS1cdTAwM2VzZWN1cml0eVx0PSBjYWxsLVx1MDAzZXNlY3VyaXR5O1xuIFx0XHRidW5kbGUtXHUwMDNlZXhjbHVzaXZlXHQ9IHRlc3RfYml0KFJYUlBDX0NBTExfRVhDTFVTSVZFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKTtcbiBcdFx0YnVuZGxlLVx1MDAzZXVwZ3JhZGVcdFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX1VQR1JBREUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuQEAgLTExOCw2ICYjNDM7MTE5LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZnJlZV9idW5kbGUoc3RydWN0IHJ4cnBjX2J1bmRsZSAqYnVuZGxlKVxuIFx0d3JpdGVfdW5sb2NrKFx1MDAyNmJ1bmRsZS1cdTAwM2Vsb2NhbC1cdTAwM2VyeG5ldC1cdTAwM2Vjb25uX2xvY2spO1xuIFx0cnhycGNfcHV0X3BlZXIoYnVuZGxlLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfcHV0X2J1bmRsZSk7XG4gXHRrZXlfcHV0KGJ1bmRsZS1cdTAwM2VrZXkpO1xuJiM0MztcdGtleV9wdXQoYnVuZGxlLVx1MDAzZWFwcF9kYXRhKTtcbiBcdGtmcmVlKGJ1bmRsZSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmMgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXG5pbmRleCA2MTFjNzkwYmM2ZDBjZS4uOTE0NmI5ZDRjMmFjNTAgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9ldmVudC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXG5AQCAtMjc5LDEwICYjNDM7Mjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFxuIFx0c3dpdGNoIChzcC1cdTAwM2VoZHIudHlwZSkge1xuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0U6XG4tXHRcdHJldCA9IGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VyZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBza2IpO1xuIFxuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjb25uLVx1MDAzZXN0YXRlX2xvY2spO1xuQEAgLTQyNSw2NiAmIzQzOzQyMiw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyeHJwY19xdWV1ZV9jb25uKGNvbm4sIHJ4cnBjX2Nvbm5fcXVldWVfcnhfd29yayk7XG4gfVxuIFxuLS8qXG4tICogUG9zdCBhIENIQUxMRU5HRSBwYWNrZXQgdG8gdGhlIHNvY2tldCBvZiBvbmUgb2YgYSBjb25uZWN0aW9uJiMzOTtzIGNhbGxzIHNvIHRoYXRcbi0gKiBpdCBjYW4gZ2V0IGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2V0LCBwb3NzaWJseSBxdWVyeWluZ1xuLSAqIHVzZXJzcGFjZS5cbi0gKi9cbi1zdGF0aWMgYm9vbCByeHJwY19wb3N0X2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbi1cdHN0cnVjdCByeHJwY19jYWxsICpjYWxsID0gTlVMTDtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdGJvb2wgcmVzcG9uZCA9IGZhbHNlLCBxdWV1ZWQgPSBmYWxzZTtcbi1cbi1cdHNwLVx1MDAzZWNoYWxsLmNvbm4gPVxuLVx0XHRyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVxuLVx0aWYgKCFjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZWNoYWxsZW5nZV90b19yZWN2bXNnKSB7XG4tXHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjb25uLVx1MDAzZWNoYW5uZWxzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKGNvbm4tXHUwMDNlY2hhbm5lbHNbaV0uY2FsbCkge1xuLVx0XHRcdGNhbGwgPSBjb25uLVx1MDAzZWNoYW5uZWxzW2ldLmNhbGw7XG4tXHRcdFx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuLVx0XHRcdGlmICghcngpIHtcbi1cdFx0XHRcdGNhbGwgPSBOVUxMO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdHJlc3BvbmQgPSB0cnVlO1xuLVx0XHRcdGlmICh0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXHUwMDI2cngtXHUwMDNlZmxhZ3MpKVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0Y2FsbCA9IE5VTEw7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmICghcmVzcG9uZCkge1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi1cbi1cdGlmIChjYWxsKVxuLVx0XHRxdWV1ZWQgPSByeHJwY19ub3RpZnlfc29ja2V0X29vYihjYWxsLCBza2IpO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRpZiAoY2FsbCBcdTAwMjZcdTAwMjYgIXF1ZXVlZCkge1xuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVx0XHRzcC1cdTAwM2VjaGFsbC5jb25uID0gTlVMTDtcbi1cdFx0cmV0dXJuIGZhbHNlO1xuLVx0fVxuLVxuLVx0aWYgKCFjYWxsKVxuLVx0XHRyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7XG4tXHRyZXR1cm4gdHJ1ZTtcbi19XG4tXG4gLypcbiAgKiBJbnB1dCBhIGNvbm5lY3Rpb24tbGV2ZWwgcGFja2V0LlxuICAqL1xuQEAgLTUxMyw3ICYjNDM7NDUwLDggQEAgYm9vbCByeHJwY19pbnB1dF9jb25uX3BhY2tldChzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0fVxuIFx0XHRpZiAoIWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNldmFsaWRhdGVfY2hhbGxlbmdlKGNvbm4sIHNrYikpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHRyZXR1cm4gcnhycGNfcG9zdF9jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbiYjNDM7XHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuIFxuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcbiBcdFx0aWYgKHJ4cnBjX2lzX2Nvbm5fYWJvcnRlZChjb25uKSkge1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9rZXkuYyBiL25ldC9yeHJwYy9rZXkuY1xuaW5kZXggYTBhYTc4ZDg5Mjg5N2YuLjE2YmFiNzJlNmYwNzc3IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMva2V5LmNcbkBAIC04OTMsMyAmIzQzOzg5Myw0MCBAQCBzdGF0aWMgbG9uZyByeHJwY19yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSxcbiBcdF9sZWF2ZShcJiMzNDsgPSAlenVcJiMzNDssIHNpemUpO1xuIFx0cmV0dXJuIHNpemU7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkgLSBRdWVyeSBwYXJhbWV0ZXJzIGZyb20gYW4gcnhycGMga2V5XG4mIzQzOyAqIEBrZXk6IFRoZSBrZXkgdG8gcXVlcnlcbiYjNDM7ICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBzZWN1cml0eSBpbmRleFxuJiM0MzsgKiBAX2tyYjVfZW5jdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBrcmI1IGVuY3J5cHRpb24gdHlwZSBpZiBhcHBsaWNhYmxlXG4mIzQzOyAqXG4mIzQzOyAqIFF1ZXJ5IGFuIHJ4cnBjIGF1dGhlbnRpY2F0aW9uIGtleSwgZXh0cmFjdGluZyB0aGUgc2VjdXJpdHkgaW5kZXggZnJvbSB0aGVcbiYjNDM7ICogZmlyc3QgdG9rZW4gdGhlcmVpbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2tleShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHU4ICpfc2VjdXJpdHlfaW5kZXgsXG4mIzQzO1x0XHRcdCAgICB1MzIgKl9rcmI1X2VuY3R5cGUpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnhycGNfa2V5X3Rva2VuICp0b2tlbjtcbiYjNDM7XG4mIzQzO1x0dG9rZW4gPSBrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xuJiM0MztcdGlmICghdG9rZW4pIHtcbiYjNDM7XHRcdCpfc2VjdXJpdHlfaW5kZXggPSAwO1xuJiM0MztcdFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Kl9zZWN1cml0eV9pbmRleCA9IHRva2VuLVx1MDAzZXNlY3VyaXR5X2luZGV4O1xuJiM0MztcdHN3aXRjaCAodG9rZW4tXHUwMDNlc2VjdXJpdHlfaW5kZXgpIHtcbiYjNDM7XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuJiM0MztcdFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbiYjNDM7XHRcdCpfa3JiNV9lbmN0eXBlID0gdG9rZW4tXHUwMDNlcnhnay1cdTAwM2VlbmN0eXBlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdFdBUk5fT05fT05DRSgxKTtcbiYjNDM7XHRcdCpfa3JiNV9lbmN0eXBlID0gMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkpO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9vb2IuYyBiL25ldC9yeHJwYy9vb2IuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBjODBlZTI0ODdkMDk0MS4uMDAwMDAwMDAwMDAwMDBcbi0tLSBhL25ldC9yeHJwYy9vb2IuY1xuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsMzg3ICYjNDM7MCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbi0vKiBPdXQgb2YgYmFuZCBtZXNzYWdlIGhhbmRsaW5nIChlLmcuIGNoYWxsZW5nZS1yZXNwb25zZSlcbi0gKlxuLSAqIENvcHlyaWdodCAoQykgMjAyNSBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4tICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKVxuLSAqL1xuLVxuLSNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NuZXQvYWZfcnhycGMuaFx1MDAzZVxuLSNpbmNsdWRlIFwmIzM0O2FyLWludGVybmFsLmhcJiMzNDtcbi1cbi1lbnVtIHJ4cnBjX29vYl9jb21tYW5kIHtcbi1cdFJYUlBDX09PQl9DTURfVU5TRVQsXG4tXHRSWFJQQ19PT0JfQ01EX1JFU1BPTkQsXG4tfSBfX21vZGUoYnl0ZSk7XG4tXG4tc3RydWN0IHJ4cnBjX29vYl9wYXJhbXMge1xuLVx0dTY0XHRcdFx0b29iX2lkO1x0XHQvKiBJRCBudW1iZXIgb2YgbWVzc2FnZSBpZiByZXBseSAqL1xuLVx0czMyXHRcdFx0YWJvcnRfY29kZTtcbi1cdGVudW0gcnhycGNfb29iX2NvbW1hbmRcdGNvbW1hbmQ7XG4tXHRib29sXHRcdFx0aGF2ZV9vb2JfaWQ6MTtcbi19O1xuLVxuLS8qXG4tICogUG9zdCBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZVxuLSAqIGFzc29jaWF0ZWQgd2l0aCBhIHJlZmVyZW5jZSBjYWxsLlxuLSAqL1xuLWJvb2wgcnhycGNfbm90aWZ5X3NvY2tldF9vb2Ioc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBza19idWZmICpza2IpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xuLVx0c3RydWN0IHNvY2sgKnNrO1xuLVx0Ym9vbCBxdWV1ZWQgPSBmYWxzZTtcbi1cbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cbi1cdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbi1cdGlmIChyeCkge1xuLVx0XHRzayA9IFx1MDAyNnJ4LVx1MDAzZXNrO1xuLVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4tXG4tXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSBcdTAwM2MgUlhSUENfQ0xPU0UpIHtcbi1cdFx0XHRza2ItXHUwMDNlc2tiX21zdGFtcF9ucyA9IHJ4LVx1MDAzZW9vYl9pZF9jb3VudGVyJiM0MzsmIzQzOztcbi1cdFx0XHRyeHJwY19nZXRfc2tiKHNrYiwgcnhycGNfc2tiX2dldF9wb3N0X29vYik7XG4tXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxLCBza2IpO1xuLVx0XHRcdHF1ZXVlZCA9IHRydWU7XG4tXG4tXHRcdFx0dHJhY2VfcnhycGNfbm90aWZ5X3NvY2tldChjYWxsLVx1MDAzZWRlYnVnX2lkLCBzcC1cdTAwM2VoZHIuc2VyaWFsKTtcbi1cdFx0XHRpZiAocngtXHUwMDNlYXBwX29wcylcbi1cdFx0XHRcdHJ4LVx1MDAzZWFwcF9vcHMtXHUwMDNlbm90aWZ5X29vYihzaywgc2tiKTtcbi1cdFx0fVxuLVxuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cdFx0aWYgKHF1ZXVlZCBcdTAwMjZcdTAwMjYgIXJ4LVx1MDAzZWFwcF9vcHMgXHUwMDI2XHUwMDI2ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4tXHRcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4tXHR9XG4tXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdHJldHVybiBxdWV1ZWQ7XG4tfVxuLVxuLS8qXG4tICogTG9jYXRlIHRoZSBPT0IgbWVzc2FnZSB0byByZXNwb25kIHRvIGJ5IGl0cyBJRC5cbi0gKi9cbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnJ4cnBjX2ZpbmRfcGVuZGluZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCB1NjQgb29iX2lkKVxuLXtcbi1cdHN0cnVjdCByYl9ub2RlICpwO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cbi1cdHAgPSByeC1cdTAwM2VwZW5kaW5nX29vYnEucmJfbm9kZTtcbi1cdHdoaWxlIChwKSB7XG4tXHRcdHNrYiA9IHJiX2VudHJ5KHAsIHN0cnVjdCBza19idWZmLCByYm5vZGUpO1xuLVxuLVx0XHRpZiAob29iX2lkIFx1MDAzYyBza2ItXHUwMDNlc2tiX21zdGFtcF9ucylcbi1cdFx0XHRwID0gcC1cdTAwM2VyYl9sZWZ0O1xuLVx0XHRlbHNlIGlmIChvb2JfaWQgXHUwMDNlIHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKVxuLVx0XHRcdHAgPSBwLVx1MDAzZXJiX3JpZ2h0O1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0dXJuIHNrYjtcbi1cdH1cbi1cbi1cdHJldHVybiBOVUxMO1xuLX1cbi1cbi0vKlxuLSAqIEFkZCBhbiBPT0IgbWVzc2FnZSBpbnRvIHRoZSBwZW5kaW5nLXJlc3BvbnNlIHNldC4gIFdlIGFsd2F5cyBhc3NpZ24gdGhlIG5leHRcbi0gKiB2YWx1ZSBmcm9tIGEgNjQtYml0IGNvdW50ZXIgdG8gdGhlIG9vYl9pZCwgc28ganVzdCBhc3N1bWUgd2UmIzM5O3JlIGFsd2F5cyBnb2luZ1xuLSAqIHRvIGJlIG9uIHRoZSByaWdodC1oYW5kIGVkZ2Ugb2YgdGhlIHRyZWUgYW5kIHRoYXQgdGhlIGNvdW50ZXIgd29uJiMzOTt0IHdyYXAuXG4tICogVGhlIHRyZWUgaXMgYWxzbyBnaXZlbiBhIHJlZiB0byB0aGUgbWVzc2FnZS5cbi0gKi9cbi12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpXG4te1xuLVx0c3RydWN0IHJiX25vZGUgKipwcCA9IFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlLCAqcCA9IE5VTEw7XG4tXG4tXHR3aGlsZSAoKnBwKSB7XG4tXHRcdHAgPSAqcHA7XG4tXHRcdHBwID0gXHUwMDI2KCpwcCktXHUwMDNlcmJfcmlnaHQ7XG4tXHR9XG4tXG4tXHRyYl9saW5rX25vZGUoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgcCwgcHApO1xuLVx0cmJfaW5zZXJ0X2NvbG9yKFx1MDAyNnNrYi1cdTAwM2VyYm5vZGUsIFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSk7XG4tfVxuLVxuLS8qXG4tICogRXh0cmFjdCBjb250cm9sIG1lc3NhZ2VzIGZyb20gdGhlIHNlbmRtc2coKSBjb250cm9sIGJ1ZmZlci5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcClcbi17XG4tXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbi1cdGludCBsZW47XG4tXG4tXHRpZiAobXNnLVx1MDAzZW1zZ19jb250cm9sbGVuID09IDApXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0Zm9yX2VhY2hfY21zZ2hkcihjbXNnLCBtc2cpIHtcbi1cdFx0aWYgKCFDTVNHX09LKG1zZywgY21zZykpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRcdGxlbiA9IGNtc2ctXHUwMDNlY21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpO1xuLVx0XHRfZGVidWcoXCYjMzQ7Q01TRyAlZCwgJWQsICVkXCYjMzQ7LFxuLVx0XHQgICAgICAgY21zZy1cdTAwM2VjbXNnX2xldmVsLCBjbXNnLVx1MDAzZWNtc2dfdHlwZSwgbGVuKTtcbi1cbi1cdFx0aWYgKGNtc2ctXHUwMDNlY21zZ19sZXZlbCAhPSBTT0xfUlhSUEMpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdHN3aXRjaCAoY21zZy1cdTAwM2VjbXNnX3R5cGUpIHtcbi1cdFx0Y2FzZSBSWFJQQ19PT0JfSUQ6XG4tXHRcdFx0aWYgKGxlbiAhPSBzaXplb2YocC1cdTAwM2Vvb2JfaWQpIHx8IHAtXHUwMDNlaGF2ZV9vb2JfaWQpXG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRtZW1jcHkoXHUwMDI2cC1cdTAwM2Vvb2JfaWQsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHAtXHUwMDNlb29iX2lkKSk7XG4tXHRcdFx0cC1cdTAwM2VoYXZlX29vYl9pZCA9IHRydWU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgUlhSUENfUkVTUE9ORDpcbi1cdFx0XHRpZiAocC1cdTAwM2Vjb21tYW5kICE9IFJYUlBDX09PQl9DTURfVU5TRVQpXG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRwLVx1MDAzZWNvbW1hbmQgPSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgUlhSUENfQUJPUlQ6XG4tXHRcdFx0aWYgKGxlbiAhPSBzaXplb2YocC1cdTAwM2VhYm9ydF9jb2RlKSB8fCBwLVx1MDAzZWFib3J0X2NvZGUpXG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRtZW1jcHkoXHUwMDI2cC1cdTAwM2VhYm9ydF9jb2RlLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZihwLVx1MDAzZWFib3J0X2NvZGUpKTtcbi1cdFx0XHRpZiAocC1cdTAwM2VhYm9ydF9jb2RlID09IDApXG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBSWFJQQ19SRVNQX1JYR0tfQVBQREFUQTpcbi1cdFx0XHRpZiAocC1cdTAwM2Vjb21tYW5kICE9IFJYUlBDX09PQl9DTURfUkVTUE9ORClcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRzd2l0Y2ggKHAtXHUwMDNlY29tbWFuZCkge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ6XG4tXHRcdGlmICghcC1cdTAwM2VoYXZlX29vYl9pZClcbi1cdFx0XHRyZXR1cm4gLUVCQURTTFQ7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tLypcbi0gKiBBbGxvdyB1c2Vyc3BhY2UgdG8gcmVzcG9uZCB0byBhbiBPT0IgdXNpbmcgc2VuZG1zZygpLlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhycGNfcmVzcG9uZF90b19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuLVx0XHRcdFx0c3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgKnAsXG4tXHRcdFx0XHRzdHJ1Y3QgbXNnaGRyICptc2cpXG4te1xuLVx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cdGludCByZXQ7XG4tXG4tXHRza2IgPSByeHJwY19maW5kX3BlbmRpbmdfb29iKHJ4LCBwLVx1MDAzZW9vYl9pZCk7XG4tXHRpZiAoc2tiKVxuLVx0XHRyYl9lcmFzZShcdTAwMjZza2ItXHUwMDNlcmJub2RlLCBcdTAwMjZyeC1cdTAwM2VwZW5kaW5nX29vYnEpO1xuLVx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cdGlmICghc2tiKVxuLVx0XHRyZXR1cm4gLUVCQURTTFQ7XG4tXG4tXHRzcCA9IHJ4cnBjX3NrYihza2IpO1xuLVxuLVx0c3dpdGNoIChwLVx1MDAzZWNvbW1hbmQpIHtcbi1cdGNhc2UgUlhSUENfT09CX0NNRF9SRVNQT05EOlxuLVx0XHRyZXQgPSAtRVBST1RPO1xuLVx0XHRpZiAoc2tiLVx1MDAzZW1hcmsgIT0gUlhSUENfT09CX0NIQUxMRU5HRSlcbi1cdFx0XHRicmVhaztcbi1cdFx0Y29ubiA9IHNwLVx1MDAzZWNoYWxsLmNvbm47XG4tXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuLVx0XHRpZiAoIWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSlcbi1cdFx0XHRicmVhaztcbi1cdFx0aWYgKHAtXHUwMDNlYWJvcnRfY29kZSkge1xuLVx0XHRcdHJ4cnBjX2Fib3J0X2Nvbm4oY29ubiwgTlVMTCwgcC1cdTAwM2VhYm9ydF9jb2RlLCAtRUNPTk5BQk9SVEVELFxuLVx0XHRcdFx0XHQgcnhycGNfYWJvcnRfcmVzcG9uc2Vfc2VuZG1zZyk7XG4tXHRcdFx0cmV0ID0gMDtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyZXQgPSBjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc2tiLCBtc2cpO1xuLVx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRzd2l0Y2ggKHNrYi1cdTAwM2VtYXJrKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKHNwLVx1MDAzZWNoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVx0cnhycGNfZnJlZV9za2Ioc2tiLCByeHJwY19za2JfcHV0X29vYik7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi0vKlxuLSAqIFNlbmQgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZSBvciByZXNwb25kIHRvIGEgcmVjZWl2ZWQgb3V0LW9mLWJhbmQgbWVzc2FnZS5cbi0gKiAtIGNhbGxlciBnaXZlcyB1cyB0aGUgc29ja2V0IGxvY2tcbi0gKiAtIHRoZSBzb2NrZXQgbWF5IGJlIGVpdGhlciBhIGNsaWVudCBzb2NrZXQgb3IgYSBzZXJ2ZXIgc29ja2V0XG4tICovXG4taW50IHJ4cnBjX3NlbmRtc2dfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLXtcbi1cdHN0cnVjdCByeHJwY19vb2JfcGFyYW1zIHAgPSB7fTtcbi1cdGludCByZXQ7XG4tXG4tXHRfZW50ZXIoXCYjMzQ7XCYjMzQ7KTtcbi1cbi1cdHJldCA9IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2cobXNnLCBcdTAwMjZwKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyb3JfcmVsZWFzZV9zb2NrO1xuLVxuLVx0aWYgKHAuaGF2ZV9vb2JfaWQpXG4tXHRcdHJldHVybiByeHJwY19yZXNwb25kX3RvX29vYihyeCwgXHUwMDI2cCwgbXNnKTtcbi1cbi1cdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXG4tXHRzd2l0Y2ggKHAuY29tbWFuZCkge1xuLVx0ZGVmYXVsdDpcbi1cdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG4tXHRyZXR1cm4gcmV0O1xuLVxuLWVycm9yX3JlbGVhc2Vfc29jazpcbi1cdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfcXVlcnlfb29iIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZVxuLSAqIEBvb2I6IFRoZSBtZXNzYWdlIHRvIHF1ZXJ5XG4tICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkXG4tICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmRcbi0gKlxuLSAqIEV4dHJhY3QgdXNlZnVsIHBhcmFtZXRlcnMgZnJvbSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlLiAgVGhlIHNvdXJjZSBwZWVyXG4tICogcGFyYW1ldGVycyBhcmUgcmV0dXJuZWQgdGhyb3VnaCB0aGUgYXJndW1lbnQgbGlzdCBhbmQgdGhlIG1lc3NhZ2UgdHlwZSBpc1xuLSAqIHJldHVybmVkLlxuLSAqXG4tICogUmV0dXJuOlxuLSAqICogJVJYUlBDX09PQl9DSEFMTEVOR0UgLSBDaGFsbGVuZ2Ugd2FudGluZyBhIHJlc3BvbnNlLlxuLSAqL1xuLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTtcbi1cdGVudW0gcnhycGNfb29iX3R5cGUgdHlwZSA9IG9vYi1cdTAwM2VtYXJrO1xuLVxuLVx0c3dpdGNoICh0eXBlKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdCpfcGVlclx0XHQ9IHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcGVlcjtcbi1cdFx0Kl9wZWVyX2FwcGRhdGFcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyLVx1MDAzZWFwcF9kYXRhO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05fT05DRSgxKTtcbi1cdFx0Kl9wZWVyXHRcdD0gTlVMTDtcbi1cdFx0Kl9wZWVyX2FwcGRhdGFcdD0gMDtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRyZXR1cm4gdHlwZTtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfb29iKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IgLSBEZXF1ZXVlIGFuZCByZXR1cm4gdGhlIGZyb250IE9PQiBtZXNzYWdlXG4tICogQHNvY2s6IFRoZSBzb2NrZXQgdG8gcXVlcnlcbi0gKiBAX3R5cGU6IFdoZXJlIHRvIHJldHVybiB0aGUgbWVzc2FnZSB0eXBlXG4tICpcbi0gKiBEZXF1ZXVlIHRoZSBmcm9udCBPT0IgbWVzc2FnZSwgaWYgdGhlcmUgaXMgb25lLCBhbmQgcmV0dXJuIGl0IGFuZFxuLSAqIGl0cyB0eXBlLlxuLSAqXG4tICogUmV0dXJuOiBUaGUgc2tfYnVmZiByZXByZXNlbnRpbmcgdGhlIE9PQiBtZXNzYWdlIG9yICVOVUxMIGlmIHRoZSBxdWV1ZSB3YXNcbi0gKiBlbXB0eS5cbi0gKi9cbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tXHRcdFx0XHRcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSlcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHN0cnVjdCBza19idWZmICpvb2I7XG4tXG4tXHRvb2IgPSBza2JfZGVxdWV1ZShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0aWYgKG9vYilcbi1cdFx0Kl90eXBlID0gb29iLVx1MDAzZW1hcms7XG4tXHRyZXR1cm4gb29iO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYik7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX2ZyZWVfb29iIC0gRnJlZSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlXG4tICogQG9vYjogVGhlIE9PQiBtZXNzYWdlIHRvIGZyZWVcbi0gKlxuLSAqIEZyZWUgYW4gT09CIG1lc3NhZ2UgYWxvbmcgd2l0aCBhbnkgcmVzb3VyY2VzIGl0IGhvbGRzLlxuLSAqL1xuLXZvaWQgcnhycGNfa2VybmVsX2ZyZWVfb29iKHN0cnVjdCBza19idWZmICpvb2IpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpO1xuLVxuLVx0c3dpdGNoIChvb2ItXHUwMDNlbWFyaykge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihzcC1cdTAwM2VjaGFsbC5jb25uLCByeHJwY19jb25uX3B1dF9vb2IpO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdHJ4cnBjX2ZyZWVfc2tiKG9vYiwgcnhycGNfc2tiX3B1dF9wdXJnZV9vb2IpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9mcmVlX29vYik7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSAtIFF1ZXJ5IHRoZSBwYXJhbWV0ZXJzIG9mIGEgY2hhbGxlbmdlXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBxdWVyeVxuLSAqIEBfcGVlcjogV2hlcmUgdG8gcmV0dXJuIHRoZSBwZWVyIHJlY29yZFxuLSAqIEBfcGVlcl9hcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSBhdHRhY2hlZCB0byBhIHBlZXIgcmVjb3JkXG4tICogQF9zZXJ2aWNlX2lkOiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VydmljZSBJRFxuLSAqIEBfc2VjdXJpdHlfaW5kZXg6IFdoZXJlIHRvIHJldHVybiB0aGUgY29ubmVjdGlvbiBzZWN1cml0eSBpbmRleFxuLSAqXG4tICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGEgQ0hBTExFTkdFIG1lc3NhZ2UuXG4tICovXG4tdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXG4tXHRcdFx0XHQgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0Kl9wZWVyXHRcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyO1xuLVx0Kl9wZWVyX2FwcGRhdGFcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyLVx1MDAzZWFwcF9kYXRhO1xuLVx0Kl9zZXJ2aWNlX2lkXHQ9IHNwLVx1MDAzZWhkci5zZXJ2aWNlSWQ7XG4tXHQqX3NlY3VyaXR5X2luZGV4ID0gc3AtXHUwMDNlaGRyLnNlY3VyaXR5SW5kZXg7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UgLSBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHJlamVjdCBhIGNoYWxsZW5nZVxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gYmUgcmVqZWN0ZWRcbi0gKiBAYWJvcnRfY29kZTogVGhlIGFib3J0IGNvZGUgdG8gc3RpY2sgaW50byB0aGUgQUJPUlQgcGFja2V0XG4tICogQGVycm9yOiBMb2NhbCBlcnJvciB2YWx1ZVxuLSAqIEB3aHk6IEluZGljYXRpb24gYXMgdG8gd2h5LlxuLSAqXG4tICogQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byByZWplY3QgYSBjaGFsbGVuZ2UgYnkgYWJvcnRpbmcgdGhlIGNvbm5lY3Rpb24gaWZcbi0gKiBpdCYjMzk7cyBzdGlsbCBpbiBhbiBhYm9ydGFibGUgc3RhdGUuICBUaGUgZXJyb3IgaXMgcmV0dXJuZWQgc28gdGhpcyBmdW5jdGlvblxuLSAqIGNhbiBiZSB1c2VkIHdpdGggYSByZXR1cm4gc3RhdGVtZW50LlxuLSAqXG4tICogUmV0dXJuOiBUaGUgJWVycm9yIHBhcmFtZXRlci5cbi0gKi9cbi1pbnQgcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwgdTMyIGFib3J0X2NvZGUsXG4tXHRcdFx0XHQgIGludCBlcnJvciwgZW51bSByeHJwY19hYm9ydF9yZWFzb24gd2h5KVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cbi1cdF9lbnRlcihcJiMzNDt7JXh9LCVkLCVkLCV1XCYjMzQ7LCBzcC1cdTAwM2VoZHIuc2VyaWFsLCBhYm9ydF9jb2RlLCBlcnJvciwgd2h5KTtcbi1cbi1cdHJ4cnBjX2Fib3J0X2Nvbm4oc3AtXHUwMDNlY2hhbGwuY29ubiwgTlVMTCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7XG4tXHRyZXR1cm4gZXJyb3I7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UpO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5pbmRleCBlZmNiYTRiMmU3NGYwYy4uNWI4YzdmNTczYjdmNWEgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5AQCAtMTcsMTMgJiM0MzsxNywxMiBAQFxuICNpbmNsdWRlIFwmIzM0O2FyLWludGVybmFsLmhcJiMzNDtcbiBcbiAvKlxuLSAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXJcbi0gKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuXG4mIzQzOyAqIFJlcXVldWUgYSBjYWxsIGZvciByZWN2bXNnKCkgdG8gcGljayB1cC5cbiAgKi9cbi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4mIzQzO3N0YXRpYyB2b2lkIHJ4cnBjX3JlcXVldWVfY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbiB7XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XG4tXHRzdHJ1Y3Qgc29jayAqc2s7XG4mIzQzO1x0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4gXG4gXHRfZW50ZXIoXCYjMzQ7JWRcJiMzNDssIGNhbGwtXHUwMDNlZGVidWdfaWQpO1xuIFxuQEAgLTMyLDMxICYjNDM7MzEsMTggQEAgdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVx1MDAzZXNvY2tldCk7XG4tXHRzayA9IFx1MDAyNnJ4LVx1MDAzZXNrO1xuLVx0aWYgKHJ4IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSBcdTAwM2MgUlhSUENfQ0xPU0UpIHtcbi1cdFx0aWYgKGNhbGwtXHUwMDNlbm90aWZ5X3J4KSB7XG4tXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrKTtcbi1cdFx0XHRjYWxsLVx1MDAzZW5vdGlmeV9yeChzaywgY2FsbCwgY2FsbC1cdTAwM2V1c2VyX2NhbGxfSUQpO1xuLVx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4tXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmspKSB7XG4tXHRcdFx0XHRyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4tXHRcdFx0fVxuLVx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbiYjNDM7XHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbiYjNDM7XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaywgXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4gXG4tXHRcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcbi1cdFx0XHRcdF9kZWJ1ZyhcJiMzNDtjYWxsICVwc1wmIzM0Oywgc2stXHUwMDNlc2tfZGF0YV9yZWFkeSk7XG4tXHRcdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdFx0XHR9XG4tXHRcdH1cbiYjNDM7XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuJiM0MztcdFx0X2RlYnVnKFwmIzM0O2NhbGwgJXBzXCYjMzQ7LCBzay1cdTAwM2Vza19kYXRhX3JlYWR5KTtcbiYjNDM7XHRcdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xuIFx0fVxuIFxuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRfbGVhdmUoXCYjMzQ7XCYjMzQ7KTtcbiB9XG4gXG5AQCAtMjE1LDYxICYjNDM7MjAxLDYgQEAgc3RhdGljIGludCByeHJwY19yZWN2bXNnX3VzZXJfaWQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBcdH1cbiB9XG4gXG4tLypcbi0gKiBEZWFsIHdpdGggYSBDSEFMTEVOR0UgcGFja2V0LlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19jaGFsbGVuZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cdHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uID0gc3AtXHUwMDNlY2hhbGwuY29ubjtcbi1cbi1cdHJldHVybiBjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZWNoYWxsZW5nZV90b19yZWN2bXNnKGNvbm4sIGNoYWxsZW5nZSwgbXNnKTtcbi19XG4tXG4tLypcbi0gKiBQcm9jZXNzIE9PQiBwYWNrZXRzLiAgQ2FsbGVkIHdpdGggdGhlIHNvY2tldCBsb2NrZWQuXG4tICovXG4tc3RhdGljIGludCByeHJwY19yZWN2bXNnX29vYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVx0Ym9vbCBuZWVkX3Jlc3BvbnNlID0gZmFsc2U7XG4tXHRpbnQgcmV0O1xuLVxuLVx0c2tiID0gc2tiX3BlZWsoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKTtcbi1cdGlmICghc2tiKVxuLVx0XHRyZXR1cm4gLUVBR0FJTjtcbi1cdHJ4cnBjX3NlZV9za2Ioc2tiLCByeHJwY19za2Jfc2VlX3JlY3Ztc2cpO1xuLVxuLVx0cmV0ID0gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX09PQl9JRCwgc2l6ZW9mKHU2NCksXG4tXHRcdCAgICAgICBcdTAwMjZza2ItXHUwMDNlc2tiX21zdGFtcF9ucyk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0c3dpdGNoICgoZW51bSByeHJwY19vb2JfdHlwZSlza2ItXHUwMDNlbWFyaykge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRuZWVkX3Jlc3BvbnNlID0gdHJ1ZTtcbi1cdFx0cmV0ID0gcnhycGNfcmVjdm1zZ19jaGFsbGVuZ2Uoc29jaywgbXNnLCBza2IsIGZsYWdzKTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7cmVjdm1zZygpIGNhbiYjMzk7dCBwcm9jZXNzIHVua25vd24gT09CIHR5cGUgJXVcXG5cJiMzNDssXG4tXHRcdFx0ICBza2ItXHUwMDNlbWFyayk7XG4tXHRcdHJldCA9IC1FSU87XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKSkge1xuLVx0XHRza2JfdW5saW5rKHNrYiwgXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKTtcbi1cdFx0aWYgKG5lZWRfcmVzcG9uc2UpXG4tXHRcdFx0cnhycGNfYWRkX3BlbmRpbmdfb29iKHJ4LCBza2IpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cnhycGNfZnJlZV9za2Ioc2tiLCByeHJwY19za2JfcHV0X29vYik7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbiAvKlxuICAqIERlbGl2ZXIgbWVzc2FnZXMgdG8gYSBjYWxsLiAgVGhpcyBrZWVwcyBwcm9jZXNzaW5nIHBhY2tldHMgdW50aWwgdGhlIGJ1ZmZlclxuICAqIGlzIGZpbGxlZCBhbmQgd2UgZmluZCBlaXRoZXIgbW9yZSBEQVRBIChyZXR1cm5zIDApIG9yIHRoZSBlbmQgb2YgdGhlIERBVEFcbkBAIC0yODEsNyAmIzQzOzIxMiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdCAgICAgIHNpemVfdCBsZW4sIGludCBmbGFncywgc2l6ZV90ICpfb2Zmc2V0KVxuIHtcbiBcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3A7XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRyeHJwY19zZXFfdCBzZXEgPSAwO1xuIFx0c2l6ZV90IHJlbWFpbjtcbkBAIC0zNzYsMTMgJiM0MzszMDYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcbiBcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKSlcbiBcdFx0XHRyeHJwY19yb3RhdGVfcnhfd2luZG93KGNhbGwpO1xuLVxuLVx0XHRpZiAoIXJ4LVx1MDAzZWFwcF9vcHMgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbi1cdFx0XHR0cmFjZV9yeHJwY19yZWN2ZGF0YShjYWxsLCByeHJwY19yZWN2bXNnX29vYnEsIHNlcSxcbi1cdFx0XHRcdFx0ICAgICByeF9wa3Rfb2Zmc2V0LCByeF9wa3RfbGVuLCByZXQpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4gXHR9XG4gXG4gb3V0OlxuQEAgLTQxOSw3ICYjNDM7MzQyLDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFxuIFx0dHJhY2VfcnhycGNfcmVjdm1zZygwLCByeHJwY19yZWN2bXNnX2VudGVyLCAwKTtcbiBcbi1cdGlmIChmbGFncyBcdTAwMjYgKE1TR19PT0IgfCBNU0dfVFJVTkMpKVxuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgTVNHX1RSVU5DKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oXHUwMDI2cngtXHUwMDNlc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuQEAgLTQzMCwxNCAmIzQzOzM1MywxMiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHQvKiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgYSBjbGllbnQgc29ja2V0IGhhcyBubyBvdXRzdGFuZGluZyBjYWxscyAqL1xuIFx0aWYgKFJCX0VNUFRZX1JPT1QoXHUwMDI2cngtXHUwMDNlY2FsbHMpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSBcdTAwMjZcdTAwMjZcbiBcdCAgICByeC1cdTAwM2Vzay5za19zdGF0ZSAhPSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HKSB7XG4gXHRcdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFx0fVxuIFxuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSkpIHtcbiBcdFx0cmV0ID0gLUVXT1VMREJMT0NLO1xuIFx0XHRpZiAodGltZW8gPT0gMCkge1xuIFx0XHRcdGNhbGwgPSBOVUxMO1xuQEAgLTQ1Myw4ICYjNDM7Mzc0LDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gd2FpdF9lcnJvcjtcbiBcbi1cdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpKSB7XG4mIzQzO1x0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpKSB7XG4gXHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdFx0Z290byB3YWl0X2ludGVycnVwdGVkO1xuIFx0XHRcdHRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ193YWl0LCAwKTtcbkBAIC00NjQsMTUgJiM0MzszODQsNiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdGdvdG8gdHJ5X2FnYWluO1xuIFx0fVxuIFxuLVx0LyogRGVhbCB3aXRoIE9PQiBtZXNzYWdlcyBiZWZvcmUgd2UgY29uc2lkZXIgZ2V0dGluZyBub3JtYWwgZGF0YS4gKi9cbi1cdGlmICghc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbi1cdFx0cmV0ID0gcnhycGNfcmVjdm1zZ19vb2Ioc29jaywgbXNnLCBmbGFncyk7XG4tXHRcdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXHRcdGlmIChyZXQgPT0gLUVBR0FJTilcbi1cdFx0XHRnb3RvIHRyeV9hZ2Fpbjtcbi1cdFx0Z290byBlcnJvcl90cmFjZTtcbi1cdH1cbi1cbiBcdC8qIEZpbmQgdGhlIG5leHQgY2FsbCBhbmQgZGVxdWV1ZSBpdCBpZiB3ZSYjMzk7cmUgbm90IGp1c3QgcGVla2luZy4gIElmIHdlXG4gXHQgKiBkbyBkZXF1ZXVlIGl0LCB0aGF0IGNvbWVzIHdpdGggYSByZWYgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gcmVsZWFzZS5cbiBcdCAqIFdlIGFsc28gd2FudCB0byB3ZWVkIG91dCBjYWxscyB0aGF0IGdvdCByZXF1ZXVlZCB3aGlsc3Qgd2Ugd2VyZVxuQEAgLTQ4Myw4ICYjNDM7Mzk0LDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0Y2FsbCA9IGxpc3RfZW50cnkobCwgc3RydWN0IHJ4cnBjX2NhbGwsIHJlY3Ztc2dfbGluayk7XG4gXG4gXHRpZiAoIXJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSkpIHtcbiYjNDM7XHQgICAgc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkpIHtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluayk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuIFx0XHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuQEAgLTU2MSw3ICYjNDM7NDcxLDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkpXG4tXHRcdHJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XG4mIzQzO1x0XHRyeHJwY19yZXF1ZXVlX2NhbGwoc29jaywgY2FsbCk7XG4gXHRnb3RvIG5vdF95ZXRfY29tcGxldGU7XG4gXG4gY2FsbF9mYWlsZWQ6XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcbmluZGV4IDc3YTY3YWNlMWQyNDgxLi5iOWVmZWVjMTQ1ZGQxNyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGdrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9yeGdrLmNcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2V5LXR5cGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NrZXlzL3VzZXItdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3J4Z2tfY29tbW9uLmhcJiMzNDtcbiBcbkBAIC03MzQsMzcgJiM0Mzs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi0vKipcbi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSBwYWNrZXQgdG8gcXVlcnlcbi0gKlxuLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi5cbi0gKi9cbi11MzIgcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0cmV0dXJuIHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcnhnay5lbmN0eXBlO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XG4tXG4tLypcbi0gKiBGaWxsIG91dCB0aGUgY29udHJvbCBtZXNzYWdlIHRvIHBhc3MgdG8gdXNlcnNwYWNlIHRvIGluZm9ybSBhYm91dCB0aGVcbi0gKiBjaGFsbGVuZ2UuXG4tICovXG4tc3RhdGljIGludCByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpXG4te1xuLVx0c3RydWN0IHJ4Z2tfY2hhbGxlbmdlIGNoYWxsO1xuLVxuLVx0Y2hhbGwuYmFzZS5zZXJ2aWNlX2lkXHRcdD0gY29ubi1cdTAwM2VzZXJ2aWNlX2lkO1xuLVx0Y2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleFx0PSBjb25uLVx1MDAzZXNlY3VyaXR5X2l4O1xuLVx0Y2hhbGwuZW5jdHlwZVx0XHRcdD0gY29ubi1cdTAwM2VyeGdrLmVuY3R5cGU7XG4tXG4tXHRyZXR1cm4gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX0NIQUxMRU5HRUQsIHNpemVvZihjaGFsbCksIFx1MDAyNmNoYWxsKTtcbi19XG4tXG4gLypcbiAgKiBJbnNlcnQgdGhlIHJlcXVpc2l0ZSBhbW91bnQgb2YgWERSIHBhZGRpbmcgZm9yIHRoZSBsZW5ndGggZ2l2ZW4uXG4gICovXG5AQCAtODM3LDcgJiM0Mzs4MDcsNyBAQCBzdGF0aWMgbm9pbmxpbmUgc3NpemVfdCByeGdrX2luc2VydF9yZXNwb25zZV9oZWFkZXIoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvblxuICAqL1xuIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhLFxuJiM0MztcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlLFxuIFx0XHRcdFx0XHQgICAgc2l6ZV90IG9mZnNldClcbiB7XG5AQCAtODU5LDIwICYjNDM7ODI5LDIwIEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVQUk9UTztcbiBcbi1cdGEuYXBwZGF0YV9sZW4gPSBodG9ubChhcHBkYXRhLVx1MDAzZWxlbik7XG4mIzQzO1x0YS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtXHUwMDNlZGF0YWxlbik7XG4gXG4gXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcdTAwMjZhLCBzaXplb2YoYSkpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKGEpO1xuIFxuLVx0aWYgKGFwcGRhdGEtXHUwMDNlbGVuKSB7XG4tXHRcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtXHUwMDNlZGF0YSwgYXBwZGF0YS1cdTAwM2VsZW4pO1xuJiM0MztcdGlmIChhcHBkYXRhLVx1MDAzZWRhdGFsZW4pIHtcbiYjNDM7XHRcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtXHUwMDNlZGF0YSwgYXBwZGF0YS1cdTAwM2VkYXRhbGVuKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRvZmZzZXQgJiM0Mzs9IGFwcGRhdGEtXHUwMDNlbGVuO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBhcHBkYXRhLVx1MDAzZWRhdGFsZW47XG4gXG4tXHRcdHJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS1cdTAwM2VsZW4sIG9mZnNldCk7XG4mIzQzO1x0XHRyZXQgPSByeGdrX3BhZF9vdXQocmVzcG9uc2UsIGFwcGRhdGEtXHUwMDNlZGF0YWxlbiwgb2Zmc2V0KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHRvZmZzZXQgJiM0Mzs9IHJldDtcbkBAIC04OTAsNyAmIzQzOzg2MCw3IEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcdTAwMjZiLCBzaXplb2YoYikpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdHJldHVybiBzaXplb2YoYSkgJiM0MzsgeGRyX3JvdW5kX3VwKGFwcGRhdGEtXHUwMDNlbGVuKSAmIzQzOyBzaXplb2YoYik7XG4mIzQzO1x0cmV0dXJuIHNpemVvZihhKSAmIzQzOyB4ZHJfcm91bmRfdXAoYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSAmIzQzOyBzaXplb2YoYik7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfZW5jcnlwdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuQEAgLTkyMyw3ICYjNDM7ODkzLDcgQEAgc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gICovXG4gc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AsICpyc3A7XG4gXHRzdHJ1Y3Qgcnhna19jb250ZXh0ICpnaztcbkBAIC05MzYsNyAmIzQzOzkwNiw3IEBAIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRpZiAoSVNfRVJSKGdrKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZ2spO1xuIFxuLVx0YXV0aF9sZW4gPSAyMCAmIzQzOyAoNCAmIzQzOyBhcHBkYXRhLVx1MDAzZWxlbikgJiM0MzsgMTIgJiM0MzsgKDEgJiM0MzsgNCkgKiA0O1xuJiM0MztcdGF1dGhfbGVuID0gMjAgJiM0MzsgKDQgJiM0MzsgYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSAmIzQzOyAxMiAmIzQzOyAoMSAmIzQzOyA0KSAqIDQ7XG4gXHRhdXRoeF9sZW4gPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIoZ2stXHUwMDNla3JiNSwgS1JCNV9FTkNSWVBUX01PREUsXG4gXHRcdFx0XHRcdFx0YXV0aF9sZW4sIFx1MDAyNmF1dGhfb2Zmc2V0KTtcbiBcdGxlbiA9IHNpemVvZihzdHJ1Y3QgcnhycGNfd2lyZV9oZWFkZXIpICYjNDM7XG5AQCAtMTAxMSw2NiAmIzQzOzk4MSwzNiBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuICAqIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2UgcGFja2V0LlxuICAqL1xuIHN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbiB7XG4tXHRfZW50ZXIoXCYjMzQ7eyVkLCV4fVwmIzM0OywgY29ubi1cdTAwM2VkZWJ1Z19pZCwga2V5X3NlcmlhbChjb25uLVx1MDAzZWtleSkpO1xuJiM0MztcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIGR1bW15ID0ge30sICphcHBkYXRhID0gXHUwMDI2ZHVtbXk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0X2VudGVyKFwmIzM0O3slZCwldSwleCwleH1cJiMzNDssXG4mIzQzO1x0ICAgICAgIGNvbm4tXHUwMDNlZGVidWdfaWQsIGNvbm4tXHUwMDNlc2VydmljZV9pZCxcbiYjNDM7XHQgICAgICAga2V5X3NlcmlhbChjb25uLVx1MDAzZWtleSksIGtleV9zZXJpYWwoY29ubi1cdTAwM2VidW5kbGUtXHUwMDNlYXBwX2RhdGEpKTtcbiBcbiBcdGlmIChrZXlfdmFsaWRhdGUoY29ubi1cdTAwM2VrZXkpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FUFJPVE8sXG4gXHRcdFx0XHRcdHJ4Z2tfYWJvcnRfY2hhbGxfa2V5X2V4cGlyZWQpO1xuIFxuLVx0cmV0dXJuIHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLVx0XHRcdFx0XHRcdHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXG4te1xuLVx0c3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTtcbi1cbi1cdHJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIGNoYWxsZW5nZSwgXHUwMDI2YXBwZGF0YSk7XG4tfVxuLVxuLS8qKlxuLSAqIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cbi0gKiBAYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgUkVTUE9OU0UgYXV0aGVudGljYXRvclxuLSAqXG4tICogQWxsb3cgYSBrZXJuZWwgYXBwbGljYXRpb24gdG8gcmVzcG9uZCB0byBhIENIQUxMRU5HRSB3aXRoIGFwcGxpY2F0aW9uIGRhdGFcbi0gKiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgUnhHSyBSRVNQT05TRSBBdXRoZW50aWNhdG9yLlxuLSAqXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuLSAqL1xuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cbi1cdHJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNzcC1cdTAwM2VjaGFsbC5jb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcbi1cbi0vKlxuLSAqIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAgV2UgbmVlZCB0byBzZWUgaWZcbi0gKiB0aGVyZSYjMzk7cyBhbiBhcHBkYXRhIHRvIGZpc2ggb3V0LlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxuLXtcbi1cdHN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307XG4tXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbi1cbi1cdGZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7XG4tXHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1JYUlBDIHx8XG4tXHRcdCAgICBjbXNnLVx1MDAzZWNtc2dfdHlwZSAhPSBSWFJQQ19SRVNQX1JYR0tfQVBQREFUQSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGFwcGRhdGEuZGF0YSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0YXBwZGF0YS5kYXRhID0gQ01TR19EQVRBKGNtc2cpO1xuLVx0XHRhcHBkYXRhLmxlbiA9IGNtc2ctXHUwMDNlY21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpO1xuJiM0MztcdGlmIChjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSkge1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0YXBwZGF0YSA9IChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKVxuJiM0MztcdFx0XHR1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLVx1MDAzZWJ1bmRsZS1cdTAwM2VhcHBfZGF0YSk7XG4mIzQzO1x0XHRpZiAoYXBwZGF0YSBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZhcHBkYXRhLVx1MDAzZXJlZikpXG4mIzQzO1x0XHRcdGFwcGRhdGEgPSBOVUxMO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpZiAoIWFwcGRhdGEpXG4mIzQzO1x0XHRcdHJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVLRVlSRVZPS0VELFxuJiM0MztcdFx0XHRcdFx0XHRyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTtcbiBcdH1cbiBcbi1cdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuJiM0MztcdHJldCA9IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XG4mIzQzO1xuJiM0MztcdGlmIChhcHBkYXRhICE9IFx1MDAyNmR1bW15KVxuJiM0MztcdFx0cHV0X3VzZXJfa2V5X3BheWxvYWQoYXBwZGF0YSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLypcbkBAIC0xMzQ2LDkgJiM0MzsxMjg2LDcgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4Z2tfeWZzID0ge1xuIFx0LmZyZWVfY2FsbF9jcnlwdG9cdFx0PSByeGdrX2ZyZWVfY2FsbF9jcnlwdG8sXG4gXHQuaXNzdWVfY2hhbGxlbmdlXHRcdD0gcnhna19pc3N1ZV9jaGFsbGVuZ2UsXG4gXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXG4tXHQuY2hhbGxlbmdlX3RvX3JlY3Ztc2dcdFx0PSByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnLFxuLVx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcdD0gcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuLVx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXHRcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhLFxuJiM0MztcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVx0XHQ9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UsXG4gXHQudmVyaWZ5X3Jlc3BvbnNlXHRcdD0gcnhna192ZXJpZnlfcmVzcG9uc2UsXG4gXHQuY2xlYXJcdFx0XHRcdD0gcnhna19jbGVhcixcbiBcdC5kZWZhdWx0X2RlY29kZV90aWNrZXRcdFx0PSByeGdrX3lmc19kZWNvZGVfdGlja2V0LFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGthZC5jIGIvbmV0L3J4cnBjL3J4a2FkLmNcbmluZGV4IGNhOWYwZTgyY2I5YWM3Li5lNTViZmNhMTBlMWE5NCAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGthZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcnhrYWQuY1xuQEAgLTc0OCwzMiAmIzQzOzc0OCw2IEBAIHN0YXRpYyBpbnQgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIFJ4S0FEIGRvZXMgYXV0b21hdGljIHJlc3BvbnNlIG9ubHkgYXMgdGhlcmUmIzM5O3Mgbm90aGluZyB0byBtYW5hZ2UgdGhhdCBpc24mIzM5O3Rcbi0gKiBhbHJlYWR5IGluIHRoZSBrZXkuXG4tICovXG4tc3RhdGljIGludCByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcbi17XG4tXHRyZXR1cm4gLUVJTlZBTDtcbi19XG4tXG4tLyoqXG4tICogcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcbi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG9cbi0gKlxuLSAqIEFsbG93IGEga2VybmVsIGFwcGxpY2F0aW9uIHRvIHJlc3BvbmQgdG8gYSBDSEFMTEVOR0UuXG4tICpcbi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4tICovXG4taW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXG4tXHRyZXR1cm4gcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVx1MDAzZWNoYWxsLmNvbm4sIGNoYWxsZW5nZSk7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKTtcbi1cbiAvKiBEZWNyeXB0IGRhdGEgaW4tcGxhY2UgdXNpbmcgREVTLVBDQkMuICBAbGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LiAqL1xuIFZJU0lCTEVfSUZfS1VOSVQgdm9pZCBkZXNfcGNiY19kZWNyeXB0X2lucGxhY2UoY29uc3Qgc3RydWN0IGRlc19jdHggKmtleSxcbiBcdFx0XHRcdFx0ICAgICAgIF9fbGU2NCBpdiwgdTggKmRhdGEsIHNpemVfdCBsZW4pXG5AQCAtMTEzNCw3ICYjNDM7MTEwOCw2IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGthZCA9IHtcbiBcdC5mcmVlX2NhbGxfY3J5cHRvXHRcdD0gcnhrYWRfZnJlZV9jYWxsX2NyeXB0byxcbiBcdC5pc3N1ZV9jaGFsbGVuZ2VcdFx0PSByeGthZF9pc3N1ZV9jaGFsbGVuZ2UsXG4gXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhrYWRfdmFsaWRhdGVfY2hhbGxlbmdlLFxuLVx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcdD0gcnhrYWRfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcbiBcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVx0XHQ9IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuIFx0LnZlcmlmeV9yZXNwb25zZVx0XHQ9IHJ4a2FkX3ZlcmlmeV9yZXNwb25zZSxcbiBcdC5jbGVhclx0XHRcdFx0PSByeGthZF9jbGVhcixcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VuZG1zZy5jIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuaW5kZXggZWQyYzlhNTEwMDVhZGUuLmNkZjM1NDQwMzE3ZDZkIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3NlbmRtc2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2tleXMvdXNlci10eXBlLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2FmX3J4cnBjLmhcdTAwM2VcbkBAIC0zMjAsOCAmIzQzOzMyMSw4IEBAIHN0YXRpYyBpbnQgcnhycGNfYWxsb2NfdHhxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHQgICBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsXG4tXHRcdFx0ICAgYm9vbCAqX2Ryb3BwZWRfbG9jaylcbiYjNDM7XHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpXG4mIzQzO1x0X19yZWxlYXNlcyhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3R4YnVmICp0eGI7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbkBAIC0zMzAsMjMgJiM0MzszMzEsMzEgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0Ym9vbCBtb3JlID0gbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX01PUkU7XG4gXHRpbnQgcmV0LCBjb3BpZWQgPSAwO1xuIFxuLVx0aWYgKHRlc3RfYml0KFJYUlBDX0NBTExfVFhfTk9fTU9SRSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9OT19NT1JFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkpIHtcbiBcdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXG4gXHRcdFx0XHQgIGNhbGwtXHUwMDNlY2lkLCBjYWxsLVx1MDAzZWNhbGxfaWQsIGNhbGwtXHUwMDNlcnhfY29uc3VtZWQsXG4gXHRcdFx0XHQgIDAsIC1FUFJPVE8pO1xuLVx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHRcdHJldCA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkpIHtcbiYjNDM7XHRcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXG4mIzQzO1x0XHRcdFx0ICBjYWxsLVx1MDAzZWNpZCwgY2FsbC1cdTAwM2VjYWxsX2lkLCBjYWxsLVx1MDAzZXJ4X2NvbnN1bWVkLFxuJiM0MztcdFx0XHRcdCAgMCwgLUVJTyk7XG4mIzQzO1x0XHRyZXQgPSAtRUlPO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIFxuIFx0cmV0ID0gcnhycGNfd2FpdF90b19iZV9jb25uZWN0ZWQoY2FsbCwgXHUwMDI2dGltZW8pO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGlmIChjYWxsLVx1MDAzZWNvbm4tXHUwMDNlc3RhdGUgPT0gUlhSUENfQ09OTl9DTElFTlRfVU5TRUNVUkVEKSB7XG4gXHRcdHJldCA9IHJ4cnBjX2luaXRfY2xpZW50X2Nvbm5fc2VjdXJpdHkoY2FsbC1cdTAwM2Vjb25uKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4gXHQvKiB0aGlzIHNob3VsZCBiZSBpbiBwb2xsICovXG5AQCAtNDQwLDEyICYjNDM7NDQ5LDIxIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0LyogYWRkIHRoZSBwYWNrZXQgdG8gdGhlIHNlbmQgcXVldWUgaWYgaXQmIzM5O3Mgbm93IGZ1bGwgKi9cbiBcdFx0aWYgKCF0eGItXHUwMDNlc3BhY2UgfHxcbiBcdFx0ICAgIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCBcdTAwMjZcdTAwMjYgIW1vcmUpKSB7XG4mIzQzO1x0XHRcdC8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZFxuJiM0MztcdFx0XHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxuJiM0MztcdFx0XHQgKiBlbmNyeXB0LiAgQXNzdW1lIHRoYXQgRU5PTUVNIGlzIHJldHJ5YWJsZSwgYnV0XG4mIzQzO1x0XHRcdCAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJldCA9IGNhbGwtXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VjdXJlX3BhY2tldChjYWxsLCB0eGIpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0aWYgKHJldCA9PSAtRU5PTUVNKVxuJiM0MztcdFx0XHRcdFx0Z290byBtYXliZV9lcnJvcjtcbiYjNDM7XHRcdFx0XHRzZXRfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X3R4YjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiBcdFx0XHRpZiAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKVxuIFx0XHRcdFx0dHhiLVx1MDAzZWZsYWdzIHw9IFJYUlBDX0xBU1RfUEFDS0VUO1xuLVxuLVx0XHRcdHJldCA9IGNhbGwtXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VjdXJlX3BhY2tldChjYWxsLCB0eGIpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRyeHJwY19xdWV1ZV9wYWNrZXQocngsIGNhbGwsIHR4Yiwgbm90aWZ5X2VuZF90eCk7XG4gXHRcdFx0dHhiID0gTlVMTDtcbiBcdFx0fVxuQEAgLTQ1Myw0OCAmIzQzOzQ3MSw1OCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXG4gc3VjY2VzczpcbiBcdHJldCA9IGNvcGllZDtcbi1cdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGNhbGwtXHUwMDNlZXJyb3IgXHUwMDNjIDApXG4tXHRcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4tb3V0OlxuJiM0MztvdXRfdHhiOlxuIFx0Y2FsbC1cdTAwM2V0eF9wZW5kaW5nID0gdHhiO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFx0X2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiBcbiBjYWxsX3Rlcm1pbmF0ZWQ6XG4gXHRyeHJwY19wdXRfdHhidWYodHhiLCByeHJwY190eGJ1Zl9wdXRfc2VuZF9hYm9ydGVkKTtcbi1cdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgY2FsbC1cdTAwM2VlcnJvcik7XG4tXHRyZXR1cm4gY2FsbC1cdTAwM2VlcnJvcjtcbiYjNDM7XHRjYWxsLVx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xuJiM0MztcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4mIzQzO1x0Z290byBvdXRfdW5sb2NrO1xuIFxuIG1heWJlX2Vycm9yOlxuLVx0aWYgKGNvcGllZClcbiYjNDM7XHRpZiAoY29waWVkKSB7XG4mIzQzO1x0XHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdH1cbiBcdFx0Z290byBzdWNjZXNzO1xuLVx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGdvdG8gb3V0X3R4YjtcbiBcbiBlZmF1bHQ6XG4gXHRyZXQgPSAtRUZBVUxUO1xuLVx0Z290byBvdXQ7XG4mIzQzO1x0Z290byBvdXRfdHhiO1xuIFxuIHdhaXRfZm9yX3NwYWNlOlxuIFx0cmV0ID0gLUVBR0FJTjtcbiBcdGlmIChtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpXG4gXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4mIzQzO1x0Y2FsbC1cdTAwM2V0eF9wZW5kaW5nID0gdHhiO1xuJiM0MztcdHR4YiA9IE5VTEw7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbi1cdCpfZHJvcHBlZF9sb2NrID0gdHJ1ZTtcbiYjNDM7XG4gXHRyZXQgPSByeHJwY193YWl0X2Zvcl90eF93aW5kb3cocngsIGNhbGwsIFx1MDAyNnRpbWVvLFxuIFx0XHRcdFx0ICAgICAgIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4mIzQzO1x0XHRnb3RvIG91dF9ub2xvY2s7XG4gXHRpZiAoY2FsbC1cdTAwM2VpbnRlcnJ1cHRpYmlsaXR5ID09IFJYUlBDX0lOVEVSUlVQVElCTEUpIHtcbiBcdFx0aWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcbi1cdFx0XHRnb3RvIG1heWJlX2Vycm9yO1xuJiM0MztcdFx0XHRnb3RvIG91dF9ub2xvY2s7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdH1cbi1cdCpfZHJvcHBlZF9sb2NrID0gZmFsc2U7XG4gXHRnb3RvIHJlbG9hZDtcbiYjNDM7b3V0X25vbG9jazpcbiYjNDM7XHRfbGVhdmUoXCYjMzQ7ID0gJWQgW2ludHJdXCYjMzQ7LCByZXQpO1xuJiM0MztcdHJldHVybiBjb3BpZWQgPzogcmV0O1xuIH1cbiBcbiAvKlxuQEAgLTUwMyw2ICYjNDM7NTMxLDggQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKVxuIHtcbiBcdHN0cnVjdCBjbXNnaGRyICpjbXNnO1xuJiM0MztcdGtleV9zZXJpYWxfdCBrZXlfaWQ7XG4mIzQzO1x0a2V5X3JlZl90IGtleTtcbiBcdGJvb2wgZ290X3VzZXJfSUQgPSBmYWxzZTtcbiBcdGludCBsZW47XG4gXG5AQCAtNTg3LDYgJiM0Mzs2MTcsMjIgQEAgc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApXG4gXHRcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdFx0XHRicmVhaztcbiBcbiYjNDM7XHRcdGNhc2UgUlhSUENfUkVTUE9OU0VfQVBQREFUQTpcbiYjNDM7XHRcdFx0aWYgKGxlbiAhPSBzaXplb2Yoa2V5X3NlcmlhbF90KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0aWYgKHAtXHUwMDNlY2FsbC5hcHBfZGF0YSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0a2V5X2lkID0gKihrZXlfc2VyaWFsX3QgKilDTVNHX0RBVEEoY21zZyk7XG4mIzQzO1x0XHRcdGtleSA9IGxvb2t1cF91c2VyX2tleShrZXlfaWQsIDAsIEtFWV9ORUVEX1NFQVJDSCk7XG4mIzQzO1x0XHRcdGlmIChJU19FUlIoa2V5KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihrZXkpO1xuJiM0MztcdFx0XHRpZiAoa2V5X3JlZl90b19wdHIoa2V5KS1cdTAwM2V0eXBlID09IFx1MDAyNmtleV90eXBlX3VzZXIpIHtcbiYjNDM7XHRcdFx0XHRrZXlfcmVmX3B1dChrZXkpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHAtXHUwMDNlY2FsbC5hcHBfZGF0YSA9IGtleV9yZWZfdG9fcHRyKGtleSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTY5NSw4ICYjNDM7NzQxLDEwIEBAIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIFx0XHRcdGdvdG8gZXJyb3JfcmVsZWFzZV9zb2NrO1xuIFx0XHRjYWxsID0gcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHJ4LCBtc2csIFx1MDAyNnApO1xuIFx0XHQvKiBUaGUgc29ja2V0IGlzIG5vdyB1bmxvY2tlZC4uLiAqL1xuLVx0XHRpZiAoSVNfRVJSKGNhbGwpKVxuJiM0MztcdFx0aWYgKElTX0VSUihjYWxsKSkge1xuJiM0MztcdFx0XHRrZXlfcHV0KHAuY2FsbC5hcHBfZGF0YSk7XG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIoY2FsbCk7XG4mIzQzO1x0XHR9XG4gXHRcdC8qIC4uLiBhbmQgd2UgaGF2ZSB0aGUgY2FsbCBsb2NrLiAqL1xuIFx0XHRwLmNhbGwubnJfdGltZW91dHMgPSAwO1xuIFx0XHRyZXQgPSAwO1xuQEAgLTc2OSw4ICYjNDM7ODE3LDggQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHRcdHJldCA9IDA7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBSWFJQQ19DTURfU0VORF9EQVRBOlxuLVx0XHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMLCBcdTAwMjZkcm9wcGVkX2xvY2spO1xuLVx0XHRicmVhaztcbiYjNDM7XHRcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwpO1xuJiM0MztcdFx0Z290byBlcnJvcl9wdXQ7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRicmVhaztcbkBAIC03ODEsMTEgJiM0Mzs4MjksMTMgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIGVycm9yX3B1dDpcbiBcdHJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpO1xuJiM0MztcdGtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTtcbiBcdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gXG4gZXJyb3JfcmVsZWFzZV9zb2NrOlxuIFx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbiYjNDM7XHRrZXlfcHV0KHAuY2FsbC5hcHBfZGF0YSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC04MDgsNyAmIzQzOzg1OCw2IEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0XHQgICByeHJwY19ub3RpZnlfZW5kX3R4X3Qgbm90aWZ5X2VuZF90eClcbiB7XG4tXHRib29sIGRyb3BwZWRfbG9jayA9IGZhbHNlO1xuIFx0aW50IHJldDtcbiBcbiBcdF9lbnRlcihcJiMzNDt7JWR9LFwmIzM0OywgY2FsbC1cdTAwM2VkZWJ1Z19pZCk7XG5AQCAtODE5LDEyICYjNDM7ODY4LDEwIEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFxuIFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spLCBjYWxsLCBtc2csIGxlbixcbi1cdFx0XHQgICAgICBub3RpZnlfZW5kX3R4LCBcdTAwMjZkcm9wcGVkX2xvY2spO1xuJiM0MztcdFx0XHQgICAgICBub3RpZnlfZW5kX3R4KTtcbiBcdGlmIChyZXQgPT0gLUVTSFVURE9XTilcbiBcdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbiBcbi1cdGlmICghZHJvcHBlZF9sb2NrKVxuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmMgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXG5pbmRleCAzZWZlMTA0YjE5MzBjYi4uZmM2ZjQ3OGUxNzYyYTcgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvc2VydmVyX2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXG5AQCAtMTczLDQzICYjNDM7MTczLDMgQEAgaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qga2V5ICprZXlyaW5nKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKTtcbi1cbi0vKipcbi0gKiByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UgLSBTZXQgdGhlIG1hbmFnZS1yZXNwb25zZSBmbGFnIGZvciBhIGtlcm5lbCBzZXJ2aWNlXG4tICogQHNrOiBUaGUgc29ja2V0IHRvIHNldCB0aGUga2V5cmluZyBvblxuLSAqIEBzZXQ6IFRydWUgdG8gc2V0LCBmYWxzZSB0byBjbGVhciB0aGUgZmxhZ1xuLSAqXG4tICogU2V0IHRoZSBmbGFnIG9uIGFuIHJ4cnBjIHNvY2tldCB0byBzYXkgdGhhdCB0aGUgY2FsbGVyIHdhbnRzIHRvIG1hbmFnZSB0aGVcbi0gKiBSRVNQT05TRSBwYWNrZXQgYW5kIHRoZSB1c2VyLWRlZmluZWQgZGF0YSBpdCBtYXkgY29udGFpbi4gIFNldHRpbmcgdGhpc1xuLSAqIG1lYW5zIHRoYXQgcmVjdm1zZygpIHdpbGwgcmV0dXJuIG1lc3NhZ2VzIHdpdGggUlhSUENfQ0hBTExFTkdFRCBpbiB0aGVcbi0gKiBjb250cm9sIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYWxsZW5nZS5cbi0gKlxuLSAqIFRoZSB1c2VyIHNob3VsZCByZXNwb25kIHRvIHRoZSBjaGFsbGVuZ2UgYnkgcGFzc2luZyBSWFJQQ19SRVNQT05EIG9yXG4tICogUlhSUENfUkVTUE9ORF9BQk9SVCBjb250cm9sIG1lc3NhZ2VzIHdpdGggc2VuZG1zZygpIHRvIHRoZSBzYW1lIGNhbGwuXG4tICogU3VwcGxlbWVudGFyeSBjb250cm9sIG1lc3NhZ2VzLCBzdWNoIGFzIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBLCBtYXkgYmVcbi0gKiBpbmNsdWRlZCB0byBpbmRpY2F0ZSB0aGUgcGFydHMgdGhlIHVzZXIgd2FudHMgdG8gc3VwcGx5LlxuLSAqXG4tICogVGhlIHNlcnZlciB3aWxsIGJlIHBhc3NlZCB0aGUgcmVzcG9uc2UgZGF0YSB3aXRoIGEgUlhSUENfUkVTUE9OREVEIGNvbnRyb2xcbi0gKiBtZXNzYWdlIHdoZW4gaXQgZ2V0cyB0aGUgZmlyc3QgZGF0YSBmcm9tIGVhY2ggY2FsbC5cbi0gKlxuLSAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgaG9ub3VyZWQgYnkgc2VjdXJpdHkgY2xhc3NlcyB0aGF0IG5lZWQgYXV4aWxpYXJ5IGRhdGFcbi0gKiAoZS5nLiBSeEdLKS4gIFRob3NlIHRoYXQgZG9uJiMzOTt0IG9mZmVyIHRoZSBmYWNpbGl0eSAoZS5nLiBSeEtBRCkgcmVzcG9uZFxuLSAqIHdpdGhvdXQgY29uc3VsdGluZyB1c2Vyc3BhY2UuXG4tICpcbi0gKiBSZXR1cm46IFRoZSBwcmV2aW91cyBzZXR0aW5nLlxuLSAqL1xuLWludCByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBib29sIHNldClcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzayk7XG4tXHRpbnQgcmV0O1xuLVxuLVx0bG9ja19zb2NrKHNrKTtcbi1cdHJldCA9ICEhdGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdGlmIChzZXQpXG4tXHRcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdGVsc2Vcbi1cdFx0Y2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRyZWxlYXNlX3NvY2soc2spO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UpO1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5pbmRleCA2Zjg4YjUwN2Y5Mjc5MS4uOTBjMWJkNWQ3ZGZlY2YgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbiBcdHVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgZGF0YWxlbik7XG4gXHRpZiAoIXVwYXlsb2FkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2dXBheWxvYWQtXHUwMDNlcmVmLCAxKTtcbiBcbiBcdC8qIGF0dGFjaCB0aGUgZGF0YSAqL1xuIFx0cHJlcC1cdTAwM2VxdW90YWxlbiA9IGRhdGFsZW47XG5AQCAtODgsMTIgJiM0Mzs4OSwyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2ZyZWVfcHJlcGFyc2UpO1xuIFxuIHN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4ge1xuLVx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQ7XG4mIzQzO1x0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpO1xuIFxuLVx0cGF5bG9hZCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcbiBcdGtmcmVlX3NlbnNpdGl2ZShwYXlsb2FkKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEZyZWUgYSB1c2VyIGRlZmluZWQga2V5IHBheWxvYWQuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHBheWxvYWQgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZwYXlsb2FkLVx1MDAzZXJlZikpXG4mIzQzO1x0XHRjYWxsX3JjdShcdTAwMjZwYXlsb2FkLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwdXRfdXNlcl9rZXlfcGF5bG9hZCk7XG4mIzQzO1xuIC8qXG4gICogdXBkYXRlIGEgdXNlciBkZWZpbmVkIGtleVxuICAqIC0gdGhlIGtleSYjMzk7cyBzZW1hcGhvcmUgaXMgd3JpdGUtbG9ja2VkXG5AQCAtMTE1LDggJiM0MzsxMjYsNyBAQCBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgcHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbMF0pO1xuIFx0cHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbMF0gPSBOVUxMO1xuIFxuLVx0aWYgKHphcClcbi1cdFx0Y2FsbF9yY3UoXHUwMDI2emFwLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbiYjNDM7XHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh6YXApO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl91cGRhdGUpO1xuQEAgLTEzNCw3ICYjNDM7MTQ0LDcgQEAgdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpXG4gXG4gXHRpZiAodXBheWxvYWQpIHtcbiBcdFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgTlVMTCk7XG4tXHRcdGNhbGxfcmN1KFx1MDAyNnVwYXlsb2FkLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbiYjNDM7XHRcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcbiBcdH1cbiB9XG4gXG5AQCAtMTQ3LDkgJiM0MzsxNTcsOCBAQCB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG4ge1xuIFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbiBcbi1cdGtmcmVlX3NlbnNpdGl2ZSh1cGF5bG9hZCk7XG4mIzQzO1x0cHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpO1xuIH1cbi1cbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2Rlc3Ryb3kpO1xuIFxuIC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZfUlhSUEMmIzM0OywKICAgICYjMzQ7QUZTX0ZTJiMzNDssCiAgICAmIzM0O1JYR0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19zZW5kbXNnX2Ntc2cmIzM0OywKICAgICYjMzQ7cnhycGNfZG9fc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyeHJwY19zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7cnhna19yZXNwb25kX3RvX2NoYWxsZW5nZSYjMzQ7LAogICAgJiMzNDthZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhJiMzNDssCiAgICAmIzM0O2Fmc19tYWtlX2NhbGwmIzM0OywKICAgICYjMzQ7cnhycGNfa2VybmVsX2JlZ2luX2NhbGwmIzM0OywKICAgICYjMzQ7cnhycGNfa2VybmVsX3F1ZXJ5X2tleSYjMzQ7LAogICAgJiMzNDtwdXRfdXNlcl9rZXlfcGF5bG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUnhSUEMgYW5kIEFGUyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBSeEdLIGNoYWxsZW5nZS1yZXNwb25zZSBhbmQgYXBwZGF0YSB2aWEgYSBuZXcga2V5LWJhc2VkIG1lY2hhbmlzbSBpbnN0ZWFkIG9mIG91dC1vZi1iYW5kIChPT0IpIG1lc3NhZ2VzLiBJdCByZW1vdmVzIHRoZSBPT0IgbWVzc2FnZSBoYW5kbGluZyBlbnRpcmVseSwgY2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IGNvbnRyb2wgbWVzc2FnZSBgUlhSUENfUkVTUE9OU0VfQVBQREFUQWAgZm9yIHVzZXJzcGFjZSB0byBwcm92aWRlIGFwcGRhdGEga2V5cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBhbmQgZmlsZXN5c3RlbSBjb2RlLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ5ODY1NzcwMmU4ZDhkOWU0YTNmMTUzNGRmMWUwMGExYzZmZjZjNjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAwOTo1OTo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jIGIvZnMvYWZzL2NtX3NlY3VyaXR5LmMKaW5kZXggMTAzMTY4YzcwZGQ0ZGYuLmYwZmVjM2E3NjUyMjg4IDEwMDY0NAotLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY21fc2VjdXJpdHkuYwpAQCAtNiw3ICYjNDM7Niw5IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2V5LXR5cGUuaCZndDsKICNpbmNsdWRlICZsdDtjcnlwdG8va3JiNS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtrZXlzL3VzZXItdHlwZS5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YWZzX2NtLmgmIzM0OwogI2luY2x1ZGUgJiMzNDthZnNfZnMuaCYjMzQ7CkBAIC0xOSwxOTUgJiM0MzsyMSwzOSBAQAogI2RlZmluZSB4ZHJfbGVuX29iamVjdCh4KSAoNCAmIzQzOyByb3VuZF91cCgoeCksIHNpemVvZihfX2JlMzIpKSkKIAogI2lmZGVmIENPTkZJR19SWEdLCi1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcik7Ci0jZW5kaWYKLQogLyoKLSAqIFJlc3BvbmQgdG8gYW4gUnhHSyBjaGFsbGVuZ2UsIGFkZGluZyBhcHBkYXRhLgomIzQzOyAqIEFzIHRoZSBZRlMgUnhHSyBhcHBkYXRhIHRvIGJlIHBhc3NlZCBpbiB0aGUgWUZTLkZTLXNlcnZpY2UgUkVTUE9OU0UgcGFja2V0LAomIzQzOyAqIGNyZWF0ZSBhIEdTUyB0b2tlbiB0byB1c2UgYXMgYSB0aWNrZXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlc2VydmVyLgogICovCi1zdGF0aWMgaW50IGFmc19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKQotewotI2lmZGVmIENPTkZJR19SWEdLCi0Jc3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTsKLQlzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyOwotI2VuZGlmCi0Jc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXI7Ci0JdW5zaWduZWQgbG9uZyBwZWVyX2RhdGE7Ci0JdTE2IHNlcnZpY2VfaWQ7Ci0JdTggc2VjdXJpdHlfaW5kZXg7Ci0KLQlyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSwgJmFtcDtwZWVyLCAmYW1wO3BlZXJfZGF0YSwKLQkJCQkgICAgICZhbXA7c2VydmljZV9pZCwgJmFtcDtzZWN1cml0eV9pbmRleCk7Ci0KLQlfZW50ZXIoJiMzNDsldSwldSYjMzQ7LCBzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7Ci0KLQlzd2l0Y2ggKHNlcnZpY2VfaWQpIHsKLQkJLyogV2UgZG9uJiMzOTt0IHNlbmQgQ01fU0VSVklDRSBSUENzLCBzbyBkb24mIzM5O3QgZXhwZWN0IGEgY2hhbGxlbmdlCi0JCSAqIHRoZXJlZnJvbS4KLQkJICovCi0JY2FzZSBGU19TRVJWSUNFOgotCWNhc2UgVkxfU0VSVklDRToKLQljYXNlIFlGU19GU19TRVJWSUNFOgotCWNhc2UgWUZTX1ZMX1NFUlZJQ0U6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByX3dhcm4oJiMzNDtDYW4mIzM5O3QgcmVzcG9uZCB0byB1bmtub3duIGNoYWxsZW5nZSAldToldSYjMzQ7LAotCQkJc2VydmljZV9pZCwgc2VjdXJpdHlfaW5kZXgpOwotCQlyZXR1cm4gcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBSWF9VU0VSX0FCT1JULCAtRVBST1RPLAotCQkJCQkJICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTsKLQl9Ci0KLQlzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7Ci0jaWZkZWYgQ09ORklHX1JYS0FECi0JY2FzZSBSWFJQQ19TRUNVUklUWV9SWEtBRDoKLQkJcmV0dXJuIHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfUlhHSwotCWNhc2UgUlhSUENfU0VDVVJJVFlfUlhHSzoKLQkJcmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgJmFtcDthcHBkYXRhKTsKLQotCWNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6Ci0JCXN3aXRjaCAoc2VydmljZV9pZCkgewotCQljYXNlIEZTX1NFUlZJQ0U6Ci0JCWNhc2UgWUZTX0ZTX1NFUlZJQ0U6Ci0JCQlzZXJ2ZXIgPSAoc3RydWN0IGFmc19zZXJ2ZXIgKilwZWVyX2RhdGE7Ci0JCQlpZiAoIXNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmRhdGEpIHsKLQkJCQltdXRleF9sb2NrKCZhbXA7c2VydmVyLSZndDtjbV90b2tlbl9sb2NrKTsKLQkJCQlpZiAoIXNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmRhdGEpCi0JCQkJCWFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKGNoYWxsZW5nZSwgc2VydmVyKTsKLQkJCQltdXRleF91bmxvY2soJmFtcDtzZXJ2ZXItJmd0O2NtX3Rva2VuX2xvY2spOwotCQkJfQotCQkJaWYgKHNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmRhdGEpCi0JCQkJYXBwZGF0YSA9IHNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgJmFtcDthcHBkYXRhKTsKLSNlbmRpZgotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKGNoYWxsZW5nZSwgUlhfVVNFUl9BQk9SVCwgLUVQUk9UTywKLQkJCQkJCSAgICAgYWZzX2Fib3J0X3Vuc3VwcG9ydGVkX3NlY19jbGFzcyk7Ci0JfQotfQotCi0vKgotICogUHJvY2VzcyB0aGUgT09CIG1lc3NhZ2UgcXVldWUsIHByb2Nlc3NpbmcgY2hhbGxlbmdlIHBhY2tldHMuCi0gKi8KLXZvaWQgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfbmV0LCByeF9vb2Jfd29yayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKm9vYjsKLQllbnVtIHJ4cnBjX29vYl90eXBlIHR5cGU7Ci0KLQl3aGlsZSAoUkVBRF9PTkNFKG5ldC0mZ3Q7bGl2ZSkgJmFtcDsmYW1wOwotCSAgICAgICAob29iID0gcnhycGNfa2VybmVsX2RlcXVldWVfb29iKG5ldC0mZ3Q7c29ja2V0LCAmYW1wO3R5cGUpKSkgewotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOgotCQkJYWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKG9vYik7Ci0JCQlicmVhazsKLQkJfQotCQlyeHJwY19rZXJuZWxfZnJlZV9vb2Iob29iKTsKLQl9Ci19Ci0KLSNpZmRlZiBDT05GSUdfUlhHSwotLyoKLSAqIENyZWF0ZSBhIHNlY3VyaXRpZXMga2V5cmluZyBmb3IgdGhlIGNhY2hlIG1hbmFnZXIgYW5kIGF0dGFjaCBhIGtleSB0byBpdCBmb3IKLSAqIHRoZSBSeEdLIHRva2VucyB3ZSB3YW50IHRvIHVzZSB0byBzZWN1cmUgdGhlIGNhbGxiYWNrIGNvbm5lY3Rpb24gYmFjayBmcm9tCi0gKiB0aGUgZmlsZXNlcnZlci4KLSAqLwotaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldCkKLXsKLQljb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICprcmI1OwotCXN0cnVjdCBrZXkgKnJpbmc7Ci0Ja2V5X3JlZl90IGtleTsKLQljaGFyIEswWzMyXSwgKmRlc2M7Ci0JaW50IHJldDsKLQotCXJpbmcgPSBrZXlyaW5nX2FsbG9jKCYjMzQ7a2FmcyYjMzQ7LAotCQkJICAgICBHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksCi0JCQkgICAgIEtFWV9QT1NfU0VBUkNIIHwgS0VZX1BPU19XUklURSB8Ci0JCQkgICAgIEtFWV9VU1JfVklFVyB8IEtFWV9VU1JfUkVBRCB8IEtFWV9VU1JfU0VBUkNILAotCQkJICAgICBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLAotCQkJICAgICBOVUxMLCBOVUxMKTsKLQlpZiAoSVNfRVJSKHJpbmcpKQotCQlyZXR1cm4gUFRSX0VSUihyaW5nKTsKLQotCXJldCA9IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc29ja2V0LSZndDtzaywgcmluZyk7Ci0JaWYgKHJldCAmbHQ7IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gLUVOT1BLRzsKLQlrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKEtSQjVfRU5DVFlQRV9BRVMxMjhfQ1RTX0hNQUNfU0hBMV85Nik7Ci0JaWYgKCFrcmI1KQotCQlnb3RvIG91dDsKLQotCWlmIChXQVJOX09OX09OQ0Uoa3JiNS0mZ3Q7a2V5X2xlbiAmZ3Q7IHNpemVvZihLMCkpKQotCQlnb3RvIG91dDsKLQotCXJldCA9IC1FTk9NRU07Ci0JZGVzYyA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAmIzM0OyV1OiV1OiV1OiV1JiMzNDssCi0JCQkgWUZTX0NNX1NFUlZJQ0UsIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLLCAxLCBrcmI1LSZndDtldHlwZSk7Ci0JaWYgKCFkZXNjKQotCQlnb3RvIG91dDsKLQotCXdhaXRfZm9yX3JhbmRvbV9ieXRlcygpOwotCWdldF9yYW5kb21fYnl0ZXMoSzAsIGtyYjUtJmd0O2tleV9sZW4pOwotCi0Ja2V5ID0ga2V5X2NyZWF0ZShtYWtlX2tleV9yZWYocmluZywgdHJ1ZSksCi0JCQkgJiMzNDtyeHJwY19zJiMzNDssIGRlc2MsCi0JCQkgSzAsIGtyYjUtJmd0O2tleV9sZW4sCi0JCQkgS0VZX1BPU19WSUVXIHwgS0VZX1BPU19SRUFEIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsCi0JCQkgS0VZX0FMTE9DX05PVF9JTl9RVU9UQSk7Ci0Ja2ZyZWUoZGVzYyk7Ci0JaWYgKElTX0VSUihrZXkpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbmV0LSZndDtmc19jbV90b2tlbl9rZXkgPSBrZXlfcmVmX3RvX3B0cihrZXkpOwotCXJldCA9IDA7Ci1vdXQ6Ci0Ja2V5X3B1dChyaW5nKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogQ3JlYXRlIGFuIFlGUyBSeEdLIEdTUyB0b2tlbiB0byB1c2UgYXMgYSB0aWNrZXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlc2VydmVyLgotICovCi1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcikKJiM0MztzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX3J4Z2tfY21fYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIgZW5jdHlwZSkKIHsKIAljb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICpjb25uX2tyYjUsICp0b2tlbl9rcmI1OwogCWNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqdG9rZW5fa2V5OwogCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAJc3RydWN0IGFmc19uZXQgKm5ldCA9IHNlcnZlci0mZ3Q7Y2VsbC0mZ3Q7bmV0OwotCWNvbnN0IHN0cnVjdCBrZXkgKmtleSA9IG5ldC0mZ3Q7ZnNfY21fdG9rZW5fa2V5OwotCXNpemVfdCBrZXlzaXplLCB1dWlkc2l6ZSwgYXV0aHNpemUsIHRva3NpemUsIGVuY3NpemUsIGNvbnRzaXplLCBhZGF0YXNpemUsIG9mZnNldDsKJiM0MzsJY29uc3Qgc3RydWN0IGtleSAqY21fa2V5ID0gbmV0LSZndDtmc19jbV90b2tlbl9rZXk7CiYjNDM7CXN0cnVjdCBrZXkgKmFwcGRhdGFfa2V5ID0gTlVMTDsKJiM0MzsJc2l6ZV90IGtleXNpemUsIHV1aWRzaXplLCBhdXRoc2l6ZSwgdG9rc2l6ZSwgZW5jc2l6ZSwgY29udHNpemU7CiYjNDM7CXNpemVfdCBhZGF0YXNpemUsIG9mZnNldDsKIAlfX2JlMzIgY2Fwc1sxXSA9IHsKIAkJWzBdID0gaHRvbmwoQUZTX0NBUF9FUlJPUl9UUkFOU0xBVElPTiksCiAJfTsKIAlfX2JlMzIgKnhkcjsKIAl2b2lkICphcHBkYXRhLCAqSzAsICplbmNiYXNlOwotCXUzMiBlbmN0eXBlOwogCWludCByZXQ7CiAKLQlpZiAoIWtleSkKJiM0MzsJaWYgKCFjbV9rZXkpCiAJCXJldHVybiAtRU5PS0VZOwogCiAJLyogQXNzdW1lIHRoYXQgdGhlIGZpbGVzZXJ2ZXIgaXMgaGFwcHkgdG8gdXNlIHRoZSBzYW1lIGVuY29kaW5nIHR5cGUgYXMKIAkgKiB3ZSB3ZXJlIHRvbGQgdG8gdXNlIGJ5IHRoZSB0b2tlbiBvYnRhaW5lZCBieSB0aGUgdXNlci4KIAkgKi8KLQllbmN0eXBlID0gcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSk7Ci0KIAljb25uX2tyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7CiAJaWYgKCFjb25uX2tyYjUpCiAJCXJldHVybiAtRU5PUEtHOwotCXRva2VuX2tyYjUgPSBrZXktJmd0O3BheWxvYWQuZGF0YVswXTsKLQl0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopJmFtcDtrZXktJmd0O3BheWxvYWQuZGF0YVsyXTsKJiM0MzsJdG9rZW5fa3JiNSA9IGNtX2tleS0mZ3Q7cGF5bG9hZC5kYXRhWzBdOwomIzQzOwl0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopJmFtcDtjbV9rZXktJmd0O3BheWxvYWQuZGF0YVsyXTsKIAogCS8qIHN0cnVjdCByeGdrX2tleSB7CiAJICoJYWZzX3VpbnQzMgllbmN0eXBlOwpAQCAtMzI3LDkgJiM0MzsxNzMsMjMgQEAgc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dF9hZWFkOwogCi0Jc2VydmVyLSZndDtjbV9yeGdrX2FwcGRhdGEubGVuICA9IGFkYXRhc2l6ZTsKLQlzZXJ2ZXItJmd0O2NtX3J4Z2tfYXBwZGF0YS5kYXRhID0gYXBwZGF0YTsKLQlhcHBkYXRhID0gTlVMTDsKJiM0MzsJYXBwZGF0YV9rZXkgPSBrZXlfYWxsb2MoJmFtcDtrZXlfdHlwZV91c2VyLCAmIzM0O3J4cnBjOiBhZnMgcnhnayBhcHBkYXRhJiMzNDssCiYjNDM7CQkJCUdMT0JBTF9ST09UX1VJRCwgR0xPQkFMX1JPT1RfR0lELCBjdXJyZW50X2NyZWQoKSwKJiM0MzsJCQkJS0VZX1BPU19WSUVXIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsCiYjNDM7CQkJCUtFWV9BTExPQ19OT1RfSU5fUVVPVEEsIE5VTEwpOwomIzQzOwlpZiAoSVNfRVJSKGFwcGRhdGFfa2V5KSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihhcHBkYXRhX2tleSk7CiYjNDM7CQlnb3RvIG91dF9hZWFkOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGtleV9pbnN0YW50aWF0ZV9hbmRfbGluayhhcHBkYXRhX2tleSwgYXBwZGF0YSwgYWRhdGFzaXplLCBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApIHsKJiM0MzsJCWtleV9wdXQoYXBwZGF0YV9rZXkpOwomIzQzOwkJZ290byBvdXRfYWVhZDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdG9yZSB0aGUgYXBwZGF0YSBiZWZvcmUgdGhlIGtleSBwb2ludGVyICovCiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c2VydmVyLSZndDt5ZnNfcnhna19hcHBkYXRhLCBhcHBkYXRhX2tleSk7CiAKIG91dF9hZWFkOgogCWNyeXB0b19mcmVlX2FlYWQoYWVhZCk7CkBAIC0zMzksMyAmIzQzOzE5OSwxMTYgQEAgc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYgLyogQ09ORklHX1JYR0sgKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENyZWF0ZSB0aGUgYXBwbGljYXRpb24gZGF0YSB0byBnbyBpbiBhIFJFU1BPTlNFIHBhY2tldCBhIHNlcnZlciYjMzk7cyBDSEFMTEVOR0UKJiM0MzsgKiBmcm9tIHRoZSBwYXJhbWV0ZXJzIGNvbnRhaW5lZCBpbiBhIGtleS4gIFRoZSBrZXkgc3BlY2lmaWVzIHRoZSBzZWN1cml0eQomIzQzOyAqIGluZGV4IGFuZCBvdGhlciBhcHByb3ByaWF0ZSBwYXJhbWV0ZXJzIHN1Y2ggYXMgdGhlIGVuY29kaW5nIHR5cGUgZm9yIFJ4R0suCiYjNDM7ICovCiYjNDM7aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KQomIzQzO3sKJiM0MzsJdTMyIGtyYjVfZW5jdHlwZTsKJiM0MzsJaW50IHJldDsKJiM0MzsJdTggc2VjdXJpdHlfaW5kZXg7CiYjNDM7CiYjNDM7CWlmICgha2V5KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoa2V5LCAmYW1wO3NlY3VyaXR5X2luZGV4LCAmYW1wO2tyYjVfZW5jdHlwZSk7CiYjNDM7CiYjNDM7CV9lbnRlcigmIzM0OyV1LCV1JiMzNDssIHNlY3VyaXR5X2luZGV4LCBrcmI1X2VuY3R5cGUpOwomIzQzOwomIzQzOwlzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7CiYjNDM7I2lmZGVmIENPTkZJR19SWEdLCiYjNDM7CWNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6CiYjNDM7CQkvKiBSZWFkIHRoZSBrZXkgcG9pbnRlciBiZWZvcmUgdGhlIGFwcGRhdGEgKi8KJiM0MzsJCWlmIChzbXBfbG9hZF9hY3F1aXJlKCZhbXA7c2VydmVyLSZndDt5ZnNfcnhna19hcHBkYXRhKSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZgomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gMDsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3NlcnZlci0mZ3Q7Y21fdG9rZW5fbG9jayk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHsKJiM0MzsjaWZkZWYgQ09ORklHX1JYR0sKJiM0MzsJY2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzoKJiM0MzsJCS8qIFJlYWQgdGhlIGtleSBwb2ludGVyIGJlZm9yZSB0aGUgYXBwZGF0YSAqLwomIzQzOwkJaWYgKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtzZXJ2ZXItJmd0O3lmc19yeGdrX2FwcGRhdGEpKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJcmV0ID0gYWZzX2NyZWF0ZV95ZnNfcnhna19jbV9hcHBkYXRhKHNlcnZlciwga3JiNV9lbmN0eXBlKTsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZgomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c2VydmVyLSZndDtjbV90b2tlbl9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19SWEdLCiYjNDM7LyoKJiM0MzsgKiBDcmVhdGUgYSBzZWN1cml0aWVzIGtleXJpbmcgZm9yIHRoZSBjYWNoZSBtYW5hZ2VyIGFuZCBhdHRhY2ggYSBrZXkgdG8gaXQgZm9yCiYjNDM7ICogdGhlIFJ4R0sgdG9rZW5zIHdlIHdhbnQgdG8gdXNlIHRvIHNlY3VyZSB0aGUgY2FsbGJhY2sgY29ubmVjdGlvbiBiYWNrIGZyb20KJiM0MzsgKiB0aGUgZmlsZXNlcnZlci4KJiM0MzsgKi8KJiM0MztpbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNTsKJiM0MzsJc3RydWN0IGtleSAqcmluZzsKJiM0MzsJa2V5X3JlZl90IGtleTsKJiM0MzsJY2hhciBLMFszMl0sICpkZXNjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyaW5nID0ga2V5cmluZ19hbGxvYygmIzM0O2thZnMmIzM0OywKJiM0MzsJCQkgICAgIEdMT0JBTF9ST09UX1VJRCwgR0xPQkFMX1JPT1RfR0lELCBjdXJyZW50X2NyZWQoKSwKJiM0MzsJCQkgICAgIEtFWV9QT1NfU0VBUkNIIHwgS0VZX1BPU19XUklURSB8CiYjNDM7CQkJICAgICBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1JFQUQgfCBLRVlfVVNSX1NFQVJDSCwKJiM0MzsJCQkgICAgIEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsCiYjNDM7CQkJICAgICBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihyaW5nKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHJpbmcpOwomIzQzOwomIzQzOwlyZXQgPSByeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKHNvY2tldC0mZ3Q7c2ssIHJpbmcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSAtRU5PUEtHOwomIzQzOwlrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKEtSQjVfRU5DVFlQRV9BRVMxMjhfQ1RTX0hNQUNfU0hBMV85Nik7CiYjNDM7CWlmICgha3JiNSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKGtyYjUtJmd0O2tleV9sZW4gJmd0OyBzaXplb2YoSzApKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSAtRU5PTUVNOwomIzQzOwlkZXNjID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICYjMzQ7JXU6JXU6JXU6JXUmIzM0OywKJiM0MzsJCQkgWUZTX0NNX1NFUlZJQ0UsIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLLCAxLCBrcmI1LSZndDtldHlwZSk7CiYjNDM7CWlmICghZGVzYykKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl3YWl0X2Zvcl9yYW5kb21fYnl0ZXMoKTsKJiM0MzsJZ2V0X3JhbmRvbV9ieXRlcyhLMCwga3JiNS0mZ3Q7a2V5X2xlbik7CiYjNDM7CiYjNDM7CWtleSA9IGtleV9jcmVhdGUobWFrZV9rZXlfcmVmKHJpbmcsIHRydWUpLAomIzQzOwkJCSAmIzM0O3J4cnBjX3MmIzM0OywgZGVzYywKJiM0MzsJCQkgSzAsIGtyYjUtJmd0O2tleV9sZW4sCiYjNDM7CQkJIEtFWV9QT1NfVklFVyB8IEtFWV9QT1NfUkVBRCB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLAomIzQzOwkJCSBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTsKJiM0MzsJa2ZyZWUoZGVzYyk7CiYjNDM7CWlmIChJU19FUlIoa2V5KSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihrZXkpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0LSZndDtmc19jbV90b2tlbl9rZXkgPSBrZXlfcmVmX3RvX3B0cihrZXkpOwomIzQzOwlyZXQgPSAwOwomIzQzO291dDoKJiM0MzsJa2V5X3B1dChyaW5nKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19SWEdLICovCmRpZmYgLS1naXQgYS9mcy9hZnMvY21zZXJ2aWNlLmMgYi9mcy9hZnMvY21zZXJ2aWNlLmMKaW5kZXggZGIzOTRmMTAxZmM2NmEuLjMyMTIwYmMxZGNiMDkxIDEwMDY0NAotLS0gYS9mcy9hZnMvY21zZXJ2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Ntc2VydmljZS5jCkBAIC0yMywxMSAmIzQzOzIzLDExIEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfY2FsbGJhY2soc3RydWN0IGFmc19jYWxsICopOwogc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqKTsKIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfdGVsbF9tZV9hYm91dF95b3Vyc2VsZihzdHJ1Y3QgYWZzX2NhbGwgKik7CiBzdGF0aWMgdm9pZCBhZnNfY21fZGVzdHJ1Y3RvcihzdHJ1Y3QgYWZzX2NhbGwgKik7Ci1zdGF0aWMgdm9pZCBTUlhBRlNDQl9DYWxsQmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Ci1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Jbml0Q2FsbEJhY2tTdGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Ci1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Ci1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZVV1aWQoc3RydWN0IHdvcmtfc3RydWN0ICopOwotc3RhdGljIHZvaWQgU1JYQUZTQ0JfVGVsbE1lQWJvdXRZb3Vyc2VsZihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiYjNDM7c3RhdGljIHZvaWQgU1JYQUZTQ0JfQ2FsbEJhY2soc3RydWN0IGFmc19jYWxsICpjYWxsKTsKJiM0MztzdGF0aWMgdm9pZCBTUlhBRlNDQl9Jbml0Q2FsbEJhY2tTdGF0ZShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpOwomIzQzO3N0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7CiYjNDM7c3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmVVdWlkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7CiYjNDM7c3RhdGljIHZvaWQgU1JYQUZTQ0JfVGVsbE1lQWJvdXRZb3Vyc2VsZihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpOwogCiBzdGF0aWMgaW50IGFmc19kZWxpdmVyX3lmc19jYl9jYWxsYmFjayhzdHJ1Y3QgYWZzX2NhbGwgKik7CiAKQEAgLTE2MSwxMCAmIzQzOzE2MSw4IEBAIHN0YXRpYyB2b2lkIGFmc19hYm9ydF9zZXJ2aWNlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCB1MzIgYWJvcnRfY29kZSwgaW50IGVyCiAvKgogICogVGhlIHNlcnZlciBzdXBwbGllZCBhIGxpc3Qgb2YgY2FsbGJhY2tzIHRoYXQgaXQgd2FudGVkIHRvIGJyZWFrLgogICovCi1zdGF0aWMgdm9pZCBTUlhBRlNDQl9DYWxsQmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7c3RhdGljIHZvaWQgU1JYQUZTQ0JfQ2FsbEJhY2soc3RydWN0IGFmc19jYWxsICpjYWxsKQogewotCXN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX2NhbGwsIHdvcmspOwotCiAJX2VudGVyKCYjMzQ7JiMzNDspOwogCiAJLyogV2UgbmVlZCB0byBicmVhayB0aGUgY2FsbGJhY2tzIGJlZm9yZSBzZW5kaW5nIHRoZSByZXBseSBhcyB0aGUKQEAgLTE4MCw3ICYjNDM7MTc4LDYgQEAgc3RhdGljIHZvaWQgU1JYQUZTQ0JfQ2FsbEJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCX0KIAogCWFmc19zZW5kX2VtcHR5X3JlcGx5KGNhbGwpOwotCWFmc19wdXRfY2FsbChjYWxsKTsKIAlfbGVhdmUoJiMzNDsmIzM0Oyk7CiB9CiAKQEAgLTI4NCwxNiAmIzQzOzI4MSwxMyBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2NhbGxiYWNrKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIC8qCiAgKiBhbGxvdyB0aGUgZmlsZXNlcnZlciB0byByZXF1ZXN0IGNhbGxiYWNrIHN0YXRlIChyZS0paW5pdGlhbGlzYXRpb24KICAqLwotc3RhdGljIHZvaWQgU1JYQUZTQ0JfSW5pdENhbGxCYWNrU3RhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3N0YXRpYyB2b2lkIFNSWEFGU0NCX0luaXRDYWxsQmFja1N0YXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIHsKLQlzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19jYWxsLCB3b3JrKTsKLQogCV9lbnRlcigmIzM0O3slcH0mIzM0OywgY2FsbC0mZ3Q7c2VydmVyKTsKIAogCWlmIChjYWxsLSZndDtzZXJ2ZXIpCiAJCWFmc19pbml0X2NhbGxiYWNrX3N0YXRlKGNhbGwtJmd0O3NlcnZlcik7CiAJYWZzX3NlbmRfZW1wdHlfcmVwbHkoY2FsbCk7Ci0JYWZzX3B1dF9jYWxsKGNhbGwpOwogCV9sZWF2ZSgmIzM0OyYjMzQ7KTsKIH0KIApAQCAtMzgwLDEzICYjNDM7Mzc0LDEwIEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIC8qCiAgKiBhbGxvdyB0aGUgZmlsZXNlcnZlciB0byBzZWUgaWYgdGhlIGNhY2hlIG1hbmFnZXIgaXMgc3RpbGwgYWxpdmUKICAqLwotc3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3N0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIHsKLQlzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19jYWxsLCB3b3JrKTsKLQogCV9lbnRlcigmIzM0OyYjMzQ7KTsKIAlhZnNfc2VuZF9lbXB0eV9yZXBseShjYWxsKTsKLQlhZnNfcHV0X2NhbGwoY2FsbCk7CiAJX2xlYXZlKCYjMzQ7JiMzNDspOwogfQogCkBAIC00MTMsOSAmIzQzOzQwNCw4IEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfcHJvYmUoc3RydWN0IGFmc19jYWxsICpjYWxsKQogICogQWxsb3cgdGhlIGZpbGVzZXJ2ZXIgdG8gcXVpY2tseSBmaW5kIG91dCBpZiB0aGUgY2FjaGUgbWFuYWdlciBoYXMgYmVlbgogICogcmVib290ZWQuCiAgKi8KLXN0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlVXVpZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7c3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmVVdWlkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIHsKLQlzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19jYWxsLCB3b3JrKTsKIAlzdHJ1Y3QgYWZzX3V1aWQgKnIgPSBjYWxsLSZndDtyZXF1ZXN0OwogCiAJX2VudGVyKCYjMzQ7JiMzNDspOwpAQCAtNDI1LDcgJiM0Mzs0MTUsNiBAQCBzdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZVV1aWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCWVsc2UKIAkJYWZzX2Fib3J0X3NlcnZpY2VfY2FsbChjYWxsLCAxLCAxLCBhZnNfYWJvcnRfcHJvYmV1dWlkX25lZ2F0aXZlKTsKIAotCWFmc19wdXRfY2FsbChjYWxsKTsKIAlfbGVhdmUoJiMzNDsmIzM0Oyk7CiB9CiAKQEAgLTQ4OSw5ICYjNDM7NDc4LDggQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIC8qCiAgKiBhbGxvdyB0aGUgZmlsZXNlcnZlciB0byBhc2sgYWJvdXQgdGhlIGNhY2hlIG1hbmFnZXImIzM5O3MgY2FwYWJpbGl0aWVzCiAgKi8KLXN0YXRpYyB2b2lkIFNSWEFGU0NCX1RlbGxNZUFib3V0WW91cnNlbGYoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3N0YXRpYyB2b2lkIFNSWEFGU0NCX1RlbGxNZUFib3V0WW91cnNlbGYoc3RydWN0IGFmc19jYWxsICpjYWxsKQogewotCXN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX2NhbGwsIHdvcmspOwogCWludCBsb29wOwogCiAJc3RydWN0IHsKQEAgLTUyMyw3ICYjNDM7NTExLDYgQEAgc3RhdGljIHZvaWQgU1JYQUZTQ0JfVGVsbE1lQWJvdXRZb3Vyc2VsZihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJcmVwbHkuY2FwLmNhcGNvdW50ID0gaHRvbmwoMSk7CiAJcmVwbHkuY2FwLmNhcHNbMF0gPSBodG9ubChBRlNfQ0FQX0VSUk9SX1RSQU5TTEFUSU9OKTsKIAlhZnNfc2VuZF9zaW1wbGVfcmVwbHkoY2FsbCwgJmFtcDtyZXBseSwgc2l6ZW9mKHJlcGx5KSk7Ci0JYWZzX3B1dF9jYWxsKGNhbGwpOwogCV9sZWF2ZSgmIzM0OyYjMzQ7KTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmMKaW5kZXggMDQ2Nzc0MmJmZWVlMzQuLjYyNWRjNjdmNzlmMzY2IDEwMDY0NAotLS0gYS9mcy9hZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9maWxlLmMKQEAgLTI5OCw3ICYjNDM7Mjk4LDcgQEAgc3RhdGljIHZvaWQgYWZzX3JlYWRfcmVjZWl2ZShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpCiAJb3AtJmd0O2NhbGxfcmVzcG9uZGVkCT0gY2FsbC0mZ3Q7cmVzcG9uZGVkOwogCW9wLSZndDtjYWxsCQk9IE5VTEw7CiAJY2FsbC0mZ3Q7b3AJCT0gTlVMTDsKLQlhZnNfcHV0X2NhbGwoY2FsbCk7CiYjNDM7CWFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfcmVhZF9vcCk7CiAKIAkvKiBJZiB0aGUgY2FsbCBmYWlsZWQsIHRoZW4gd2UgbmVlZCB0byBjcmFuayB0aGUgc2VydmVyIHJvdGF0aW9uCiAJICogaGFuZGxlIGFuZCB0cnkgdGhlIG5leHQuCkBAIC0zMTYsMTUgJiM0MzszMTYsMTcgQEAgdm9pZCBhZnNfZmV0Y2hfZGF0YV9hc3luY19yeChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IGFmc19jYWxsICpjYWxsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfY2FsbCwgYXN5bmNfd29yayk7CiAKIAlhZnNfcmVhZF9yZWNlaXZlKGNhbGwpOwotCWFmc19wdXRfY2FsbChjYWxsKTsKJiM0MzsKJiM0MzsJaWYgKGNhbGwtJmd0O3N0YXRlID09IEFGU19DQUxMX0NPTVBMRVRFKSB7CiYjNDM7CQljYW5jZWxfd29yaygmYW1wO2NhbGwtJmd0O2FzeW5jX3dvcmspOwomIzQzOwkJYWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9yZWFkX2NvbXBsZXRlKTsKJiM0MzsJfQogfQogCiB2b2lkIGFmc19mZXRjaF9kYXRhX2ltbWVkaWF0ZV9jYW5jZWwoc3RydWN0IGFmc19jYWxsICpjYWxsKQogewogCWlmIChjYWxsLSZndDthc3luYykgewotCQlhZnNfZ2V0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2Vfd2FrZSk7Ci0JCWlmICghcXVldWVfd29yayhhZnNfYXN5bmNfY2FsbHMsICZhbXA7Y2FsbC0mZ3Q7YXN5bmNfd29yaykpCi0JCQlhZnNfZGVmZXJyZWRfcHV0X2NhbGwoY2FsbCk7CiYjNDM7CQlxdWV1ZV93b3JrKGFmc19hc3luY19jYWxscywgJmFtcDtjYWxsLSZndDthc3luY193b3JrKTsKIAkJZmx1c2hfd29yaygmYW1wO2NhbGwtJmd0O2FzeW5jX3dvcmspOwogCX0KIH0KZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19vcGVyYXRpb24uYyBiL2ZzL2Fmcy9mc19vcGVyYXRpb24uYwppbmRleCAyMDgwMWIyOTUyMWQxZS4uYjg4NzA0NzM5OGI5Y2IgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9mc19vcGVyYXRpb24uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZnNfb3BlcmF0aW9uLmMKQEAgLTI5Niw3ICYjNDM7Mjk2LDcgQEAgdm9pZCBhZnNfd2FpdF9mb3Jfb3BlcmF0aW9uKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCkKIAkJCW9wLSZndDtjYWxsX2Fib3J0X2NvZGUgPSBvcC0mZ3Q7Y2FsbC0mZ3Q7YWJvcnRfY29kZTsKIAkJCW9wLSZndDtjYWxsX2Vycm9yID0gb3AtJmd0O2NhbGwtJmd0O2Vycm9yOwogCQkJb3AtJmd0O2NhbGxfcmVzcG9uZGVkID0gb3AtJmd0O2NhbGwtJmd0O3Jlc3BvbmRlZDsKLQkJCWFmc19wdXRfY2FsbChvcC0mZ3Q7Y2FsbCk7CiYjNDM7CQkJYWZzX3B1dF9jYWxsKG9wLSZndDtjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfd2FpdF9vcCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19wcm9iZS5jIGIvZnMvYWZzL2ZzX3Byb2JlLmMKaW5kZXggYTkxYWQxOTM4ZDA3ODguLmUyNmY3ZjFlMzBhMjNhIDEwMDY0NAotLS0gYS9mcy9hZnMvZnNfcHJvYmUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZnNfcHJvYmUuYwpAQCAtMjQxLDkgJiM0MzsyNDEsMTQgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsCiAJc3RydWN0IGFmc19lbmRwb2ludF9zdGF0ZSAqZXN0YXRlLCAqb2xkOwogCXN0cnVjdCBhZnNfYWRkcl9saXN0ICpvbGRfYWxpc3QgPSBOVUxMLCAqYWxpc3Q7CiAJdW5zaWduZWQgbG9uZyB1bnByb2JlZDsKJiM0MzsJaW50IHJldDsKIAogCV9lbnRlcigmIzM0OyVwVSYjMzQ7LCAmYW1wO3NlcnZlci0mZ3Q7dXVpZCk7CiAKJiM0MzsJcmV0ID0gYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzZXJ2ZXIsIGtleSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAllc3RhdGUgPSBremFsbG9jX29iaigqZXN0YXRlKTsKIAlpZiAoIWVzdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9hZnMvZnNjbGllbnQuYyBiL2ZzL2Fmcy9mc2NsaWVudC5jCmluZGV4IGEyZmZkNjA4ODlmODlkLi45YWNhZDUwMTdmYmFiMyAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZzY2xpZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZzY2xpZW50LmMKQEAgLTQ3Nyw2ICYjNDM7NDc3LDkgQEAgdm9pZCBhZnNfZnNfZmV0Y2hfZGF0YShzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApCiAJaWYgKCFjYWxsKQogCQlyZXR1cm4gYWZzX29wX25vbWVtKG9wKTsKIAomIzQzOwlpZiAob3AtJmd0O2ZsYWdzICZhbXA7IEFGU19PUEVSQVRJT05fQVNZTkMpCiYjNDM7CQljYWxsLSZndDthc3luYyA9IHRydWU7CiYjNDM7CiAJLyogbWFyc2hhbGwgdGhlIHBhcmFtZXRlcnMgKi8KIAlicCA9IGNhbGwtJmd0O3JlcXVlc3Q7CiAJYnBbMF0gPSBodG9ubChGU0ZFVENIREFUQSk7CkBAIC0xNjU5LDcgJiM0MzsxNjYyLDcgQEAgaW50IGFmc19mc19naXZlX3VwX2FsbF9jYWxsYmFja3Moc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwKIAlyZXQgPSBjYWxsLSZndDtlcnJvcjsKIAlpZiAoY2FsbC0mZ3Q7cmVzcG9uZGVkKQogCQlzZXRfYml0KEFGU19TRVJWRVJfRkxfUkVTUE9ORElORywgJmFtcDtzZXJ2ZXItJmd0O2ZsYWdzKTsKLQlhZnNfcHV0X2NhbGwoY2FsbCk7CiYjNDM7CWFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfZ2l2ZXVwY2FsbGJhY2tzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNzc1LDcgJiM0MzsxNzc4LDcgQEAgYm9vbCBhZnNfZnNfZ2V0X2NhcGFiaWxpdGllcyhzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLAogCiAJdHJhY2VfYWZzX21ha2VfZnNfY2FsbChjYWxsLCBOVUxMKTsKIAlhZnNfbWFrZV9jYWxsKGNhbGwsIEdGUF9OT0ZTKTsKLQlhZnNfcHV0X2NhbGwoY2FsbCk7CiYjNDM7CWFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfZ2V0X2NhcGFiaWxpdGllcyk7CiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggNjAxZjAxZTVjMTVmY2MuLjkzMjIyMzRjZTdmNzQ5IDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMTI5LDcgJiM0MzsxMjksNyBAQCBzdHJ1Y3QgYWZzX2NhbGwgewogCWNvbnN0IHN0cnVjdCBhZnNfY2FsbF90eXBlICp0eXBlOwkvKiB0eXBlIG9mIGNhbGwgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0cTsJCS8qIHByb2Nlc3NlcyBhd2FpdGluZyBjb21wbGV0aW9uICovCiAJc3RydWN0IHdvcmtfc3RydWN0CWFzeW5jX3dvcms7CS8qIGFzeW5jIEkvTyBwcm9jZXNzb3IgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsJCS8qIGFjdHVhbCB3b3JrIHByb2Nlc3NvciAqLwomIzQzOwl2b2lkICgqd29yaykoc3RydWN0IGFmc19jYWxsICpjYWxsKTsJLyogV29ya2VyIGZ1bmN0aW9uICovCiAJc3RydWN0IHdvcmtfc3RydWN0CWZyZWVfd29yazsJLyogRGVmZXJyZWQgZnJlZSBwcm9jZXNzb3IgKi8KIAlzdHJ1Y3QgcnhycGNfY2FsbAkqcnhjYWxsOwkvKiBSeFJQQyBjYWxsIGhhbmRsZSAqLwogCXN0cnVjdCByeHJwY19wZWVyCSpwZWVyOwkJLyogUmVtb3RlIGVuZHBvaW50ICovCkBAIC0xNjksNyAmIzQzOzE2OSw2IEBAIHN0cnVjdCBhZnNfY2FsbCB7CiAJdW5zaWduZWQJCXJlcGx5X21heDsJLyogbWF4aW11bSBzaXplIG9mIHJlcGx5ICovCiAJdW5zaWduZWQJCWNvdW50MjsJCS8qIGNvdW50IHVzZWQgaW4gdW5tYXJzaGFsbGluZyAqLwogCXVuc2lnbmVkIGNoYXIJCXVubWFyc2hhbGw7CS8qIHVubWFyc2hhbGxpbmcgcGhhc2UgKi8KLQlib29sCQkJZHJvcF9yZWY7CS8qIFQgaWYgbmVlZCB0byBkcm9wIHJlZiBmb3IgaW5jb21pbmcgY2FsbCAqLwogCWJvb2wJCQluZWVkX2F0dGVudGlvbjsJLyogVCBpZiBSeFJQQyBwb2tlZCB1cyAqLwogCWJvb2wJCQlhc3luYzsJCS8qIFQgaWYgYXN5bmNocm9ub3VzICovCiAJYm9vbAkJCXVwZ3JhZGU7CS8qIFQgdG8gcmVxdWVzdCBzZXJ2aWNlIHVwZ3JhZGUgKi8KQEAgLTIwOCw3ICYjNDM7MjA3LDcgQEAgc3RydWN0IGFmc19jYWxsX3R5cGUgewogCXZvaWQgKCphc3luY19yeCkoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogCS8qIFdvcmsgZnVuY3Rpb24gKi8KLQl2b2lkICgqd29yaykoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKJiM0MzsJdm9pZCAoKndvcmspKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7CiAKIAkvKiBDYWxsIGRvbmUgZnVuY3Rpb24gKGdldHMgY2FsbGVkIGltbWVkaWF0ZWx5IG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSkgKi8KIAl2b2lkICgqZG9uZSkoc3RydWN0IGFmc19jYWxsICpjYWxsKTsKQEAgLTI4Myw3ICYjNDM7MjgyLDYgQEAgc3RydWN0IGFmc19uZXQgewogCXN0cnVjdCBzb2NrZXQJCSpzb2NrZXQ7CiAJc3RydWN0IGFmc19jYWxsCQkqc3BhcmVfaW5jb21pbmdfY2FsbDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJY2hhcmdlX3ByZWFsbG9jYXRpb25fd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcnhfb29iX3dvcms7CiAJc3RydWN0IG11dGV4CQlzb2NrZXRfbXV0ZXg7CiAJYXRvbWljX3QJCW5yX291dHN0YW5kaW5nX2NhbGxzOwogCWF0b21pY190CQlucl9zdXBlcmJsb2NrczsKQEAgLTU0OCw3ICYjNDM7NTQ2LDcgQEAgc3RydWN0IGFmc19zZXJ2ZXIgewogCXN0cnVjdCB3b3JrX3N0cnVjdAlkZXN0cm95ZXI7CS8qIFdvcmsgaXRlbSB0byB0cnkgYW5kIGRlc3Ryb3kgYSBzZXJ2ZXIgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsJCS8qIE1hbmFnZW1lbnQgdGltZXIgKi8KIAlzdHJ1Y3QgbXV0ZXgJCWNtX3Rva2VuX2xvY2s7CS8qIExvY2sgZ292ZXJuaW5nIGNyZWF0aW9uIG9mIGFwcGRhdGEgKi8KLQlzdHJ1Y3Qga3JiNV9idWZmZXIJY21fcnhna19hcHBkYXRhOyAvKiBBcHBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIFJFU1BPTlNFIHBhY2tldCAqLwomIzQzOwlzdHJ1Y3Qga2V5CQkqeWZzX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi8KIAl0aW1lNjRfdAkJdW51c2VfdGltZTsJLyogVGltZSBhdCB3aGljaCBsYXN0IHVudXNlZCAqLwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogI2RlZmluZSBBRlNfU0VSVkVSX0ZMX1JFU1BPTkRJTkcgMAkJLyogVGhlIHNlcnZlciBpcyByZXNwb25kaW5nICovCkBAIC0xMDg5LDcgJiM0MzsxMDg3LDcgQEAgZXh0ZXJuIGJvb2wgYWZzX2NtX2luY29taW5nX2NhbGwoc3RydWN0IGFmc19jYWxsICopOwogLyoKICAqIGNtX3NlY3VyaXR5LmMKICAqLwotdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKJiM0MztpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpOwogI2lmZGVmIENPTkZJR19SWEdLCiBpbnQgYWZzX2NyZWF0ZV90b2tlbl9rZXkoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29ja2V0KTsKICNlbHNlCkBAIC0xMzgwLDggJiM0MzsxMzc4LDcgQEAgZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphZnNfYXN5bmNfY2FsbHM7CiBleHRlcm4gaW50IF9fbmV0X2luaXQgYWZzX29wZW5fc29ja2V0KHN0cnVjdCBhZnNfbmV0ICopOwogZXh0ZXJuIHZvaWQgX19uZXRfZXhpdCBhZnNfY2xvc2Vfc29ja2V0KHN0cnVjdCBhZnNfbmV0ICopOwogZXh0ZXJuIHZvaWQgYWZzX2NoYXJnZV9wcmVhbGxvY2F0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKLWV4dGVybiB2b2lkIGFmc19wdXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7Ci12b2lkIGFmc19kZWZlcnJlZF9wdXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpOwomIzQzO3ZvaWQgYWZzX3B1dF9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZW51bSBhZnNfY2FsbF90cmFjZSB0cmFjZSk7CiB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApOwogdm9pZCBhZnNfZGVsaXZlcl90b19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7CiB2b2lkIGFmc193YWl0X2Zvcl9jYWxsX3RvX2NvbXBsZXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7CkBAIC0xNDAyLDggJiM0MzsxMzk5LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYWZzX2NhbGwgKmFmc19nZXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsCiAJX19yZWZjb3VudF9pbmMoJmFtcDtjYWxsLSZndDtyZWYsICZhbXA7cik7CiAKIAl0cmFjZV9hZnNfY2FsbChjYWxsLSZndDtkZWJ1Z19pZCwgd2h5LCByICYjNDM7IDEsCi0JCSAgICAgICBhdG9taWNfcmVhZCgmYW1wO2NhbGwtJmd0O25ldC0mZ3Q7bnJfb3V0c3RhbmRpbmdfY2FsbHMpLAotCQkgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKJiM0MzsJCSAgICAgICBhdG9taWNfcmVhZCgmYW1wO2NhbGwtJmd0O25ldC0mZ3Q7bnJfb3V0c3RhbmRpbmdfY2FsbHMpKTsKIAlyZXR1cm4gY2FsbDsKIH0KIApAQCAtMTQxMiwyMyAmIzQzOzE0MDgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NlZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZW51bSBhZnNfY2FsbF90cmFjZSB3aHkpCiAJaW50IHIgPSByZWZjb3VudF9yZWFkKCZhbXA7Y2FsbC0mZ3Q7cmVmKTsKIAogCXRyYWNlX2Fmc19jYWxsKGNhbGwtJmd0O2RlYnVnX2lkLCB3aHksIHIsCi0JCSAgICAgICBhdG9taWNfcmVhZCgmYW1wO2NhbGwtJmd0O25ldC0mZ3Q7bnJfb3V0c3RhbmRpbmdfY2FsbHMpLAotCQkgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsCi0JCQkJICAgIGdmcF90IGdmcCkKLXsKLQlzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC0mZ3Q7ZXN0YXRlLSZndDthZGRyZXNzZXM7Ci0KLQlvcC0mZ3Q7Y2FsbAk9IGNhbGw7Ci0Jb3AtJmd0O3R5cGUJPSBjYWxsLSZndDt0eXBlOwotCWNhbGwtJmd0O29wCT0gb3A7Ci0JY2FsbC0mZ3Q7a2V5CT0gb3AtJmd0O2tleTsKLQljYWxsLSZndDtpbnRyCT0gIShvcC0mZ3Q7ZmxhZ3MgJmFtcDsgQUZTX09QRVJBVElPTl9VTklOVFIpOwotCWNhbGwtJmd0O3BlZXIJPSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtJmd0O2FkZHJzW29wLSZndDthZGRyX2luZGV4XS5wZWVyKTsKLQljYWxsLSZndDtzZXJ2aWNlX2lkID0gb3AtJmd0O3NlcnZlci0mZ3Q7c2VydmljZV9pZDsKLQlhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7CiYjNDM7CQkgICAgICAgYXRvbWljX3JlYWQoJmFtcDtjYWxsLSZndDtuZXQtJmd0O25yX291dHN0YW5kaW5nX2NhbGxzKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZXh0cmFjdF9iZWdpbihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCkBAIC0xNDk0LDcgJiM0MzsxNDc0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZXRfY2FsbF9jb21wbGV0ZShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsCiAJCQkJCSBpbnQgZXJyb3IsIHUzMiByZW1vdGVfYWJvcnQpCiB7CiAJZW51bSBhZnNfY2FsbF9zdGF0ZSBzdGF0ZTsKLQlib29sIG9rID0gZmFsc2U7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtjYWxsLSZndDtzdGF0ZV9sb2NrKTsKIAlzdGF0ZSA9IGNhbGwtJmd0O3N0YXRlOwpAQCAtMTUwNCwxOSAmIzQzOzE0ODMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NldF9jYWxsX2NvbXBsZXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwKIAkJY2FsbC0mZ3Q7c3RhdGUgPSBBRlNfQ0FMTF9DT01QTEVURTsKIAkJdHJhY2VfYWZzX2NhbGxfc3RhdGUoY2FsbCwgc3RhdGUsIEFGU19DQUxMX0NPTVBMRVRFLAogCQkJCSAgICAgZXJyb3IsIHJlbW90ZV9hYm9ydCk7Ci0JCW9rID0gdHJ1ZTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtjYWxsLSZndDtzdGF0ZV9sb2NrKTsKLQlpZiAob2spIHsKLQkJdHJhY2VfYWZzX2NhbGxfZG9uZShjYWxsKTsKLQotCQkvKiBBc3luY2hyb25vdXMgY2FsbHMgaGF2ZSB0d28gcmVmcyB0byByZWxlYXNlIC0gb25lIGZyb20gdGhlIGFsbG9jIGFuZAotCQkgKiBvbmUgcXVldWVkIHdpdGggdGhlIHdvcmsgaXRlbSAtIGFuZCB3ZSBjYW4mIzM5O3QganVzdCBkZWFsbG9jYXRlIHRoZQotCQkgKiBjYWxsIGJlY2F1c2UgdGhlIHdvcmsgaXRlbSBtYXkgYmUgcXVldWVkIGFnYWluLgotCQkgKi8KLQkJaWYgKGNhbGwtJmd0O2Ryb3BfcmVmKQotCQkJYWZzX3B1dF9jYWxsKGNhbGwpOwotCX0KIH0KIAogLyoKQEAgLTE3NjIsNiAmIzQzOzE3MzAsMjMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKkFGU19WTk9ERV9UT19JKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKQogCXJldHVybiAmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLAomIzQzOwkJCQkgICAgZ2ZwX3QgZ2ZwKQomIzQzO3sKJiM0MzsJc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtJmd0O2VzdGF0ZS0mZ3Q7YWRkcmVzc2VzOwomIzQzOwomIzQzOwlvcC0mZ3Q7Y2FsbAk9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXRfb3BfY2FsbCk7CiYjNDM7CW9wLSZndDt0eXBlCT0gY2FsbC0mZ3Q7dHlwZTsKJiM0MzsJY2FsbC0mZ3Q7b3AJPSBvcDsKJiM0MzsJY2FsbC0mZ3Q7c2VydmVyCT0gYWZzX3VzZV9zZXJ2ZXIob3AtJmd0O3NlcnZlciwgZmFsc2UsIGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwpOwomIzQzOwljYWxsLSZndDtrZXkJPSBvcC0mZ3Q7a2V5OwomIzQzOwljYWxsLSZndDtpbnRyCT0gIShvcC0mZ3Q7ZmxhZ3MgJmFtcDsgQUZTX09QRVJBVElPTl9VTklOVFIpOwomIzQzOwljYWxsLSZndDtwZWVyCT0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LSZndDthZGRyc1tvcC0mZ3Q7YWRkcl9pbmRleF0ucGVlcik7CiYjNDM7CWNhbGwtJmd0O3NlcnZpY2VfaWQgPSBvcC0mZ3Q7c2VydmVyLSZndDtzZXJ2aWNlX2lkOwomIzQzOwlhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7CiYjNDM7CWFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfbWFkZV9jYWxsKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogTm90ZSB0aGF0IGEgZGVudHJ5IGdvdCBjaGFuZ2VkLiAgV2UgbmVlZCB0byBzZXQgZF9mc2RhdGEgdG8gdGhlIGRhdGEgdmVyc2lvbgogICogbnVtYmVyIGRlcml2ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uICBJdCBkb2VzbiYjMzk7dCBtYXR0ZXIgaWYKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9tYWluLmMgYi9mcy9hZnMvbWFpbi5jCmluZGV4IDdhODgzYzU5OTc2ZmYyLi42MzUzZmVhYTVmYjRiNSAxMDA2NDQKLS0tIGEvZnMvYWZzL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvbWFpbi5jCkBAIC03Myw3ICYjNDM7NzMsNiBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgYWZzX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldF9ucykKIAlnZW5lcmF0ZV9yYW5kb21fdXVpZCgodW5zaWduZWQgY2hhciAqKSZhbXA7bmV0LSZndDt1dWlkKTsKIAogCUlOSVRfV09SSygmYW1wO25ldC0mZ3Q7Y2hhcmdlX3ByZWFsbG9jYXRpb25fd29yaywgYWZzX2NoYXJnZV9wcmVhbGxvY2F0aW9uKTsKLQlJTklUX1dPUksoJmFtcDtuZXQtJmd0O3J4X29vYl93b3JrLCBhZnNfcHJvY2Vzc19vb2JfcXVldWUpOwogCW11dGV4X2luaXQoJmFtcDtuZXQtJmd0O3NvY2tldF9tdXRleCk7CiAKIAluZXQtJmd0O2NlbGxzID0gUkJfUk9PVDsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9yeHJwYy5jIGIvZnMvYWZzL3J4cnBjLmMKaW5kZXggZDgyOTE2NjU3YTNkZGYuLjRmNmQ2OTliNWQyMjZhIDEwMDY0NAotLS0gYS9mcy9hZnMvcnhycGMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvcnhycGMuYwpAQCAtMjUsMTQgJiM0MzsyNSwxMiBAQCBzdGF0aWMgdm9pZCBhZnNfcHJvY2Vzc19hc3luY19jYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIHN0YXRpYyB2b2lkIGFmc19yeF9uZXdfY2FsbChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIGFmc19yeF9kaXNjYXJkX25ld19jYWxsKHN0cnVjdCByeHJwY19jYWxsICosIHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIHZvaWQgYWZzX3J4X2F0dGFjaChzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsLCB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCk7Ci1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpOwogc3RhdGljIGludCBhZnNfZGVsaXZlcl9jbV9vcF9pZChzdHJ1Y3QgYWZzX2NhbGwgKik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyBhZnNfcnhycGNfY2FsbGJhY2tfb3BzID0gewogCS5ub3RpZnlfbmV3X2NhbGwJPSBhZnNfcnhfbmV3X2NhbGwsCiAJLmRpc2NhcmRfbmV3X2NhbGwJPSBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbCwKIAkudXNlcl9hdHRhY2hfY2FsbAk9IGFmc19yeF9hdHRhY2gsCi0JLm5vdGlmeV9vb2IJCT0gYWZzX3J4X25vdGlmeV9vb2IsCiB9OwogCiAvKiBhc3luY2hyb25vdXMgaW5jb21pbmcgY2FsbCBpbml0aWFsIHByb2Nlc3NpbmcgKi8KQEAgLTc0LDEwICYjNDM7NzIsNiBAQCBpbnQgYWZzX29wZW5fc29ja2V0KHN0cnVjdCBhZnNfbmV0ICpuZXQpCiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyb3JfMjsKIAotCXJldCA9IHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZShzb2NrZXQtJmd0O3NrLCB0cnVlKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlcnJvcl8yOwotCiAJcmV0ID0gYWZzX2NyZWF0ZV90b2tlbl9rZXkobmV0LCBzb2NrZXQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlwcl9lcnIoJiMzNDtDb3VsZG4mIzM5O3QgY3JlYXRlIFJ4R0sgQ00ga2V5OiAlZFxuJiMzNDssIHJldCk7CkBAIC0xMjgsNyAmIzQzOzEyMiw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KQogCV9lbnRlcigmIzM0OyYjMzQ7KTsKIAogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtuZXQtJmd0O2NoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmspOwotCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtuZXQtJmd0O3J4X29vYl93b3JrKTsKIAkvKiBGdXR1cmUgd29yayBpdGVtcyBzaG91bGQgbm93IHNlZSAtJmd0O2xpdmUgaXMgZmFsc2UuICovCiAKIAlrZXJuZWxfbGlzdGVuKG5ldC0mZ3Q7c29ja2V0LCAwKTsKQEAgLTEzOCw3ICYjNDM7MTMxLDcgQEAgdm9pZCBhZnNfY2xvc2Vfc29ja2V0KHN0cnVjdCBhZnNfbmV0ICpuZXQpCiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO25ldC0mZ3Q7Y2hhcmdlX3ByZWFsbG9jYXRpb25fd29yayk7CiAKIAlpZiAobmV0LSZndDtzcGFyZV9pbmNvbWluZ19jYWxsKSB7Ci0JCWFmc19wdXRfY2FsbChuZXQtJmd0O3NwYXJlX2luY29taW5nX2NhbGwpOwomIzQzOwkJYWZzX3B1dF9jYWxsKG5ldC0mZ3Q7c3BhcmVfaW5jb21pbmdfY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3NwYXJlX3N2Yyk7CiAJCW5ldC0mZ3Q7c3BhcmVfaW5jb21pbmdfY2FsbCA9IE5VTEw7CiAJfQogCkBAIC0xNDksNyAmIzQzOzE0Miw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KQogCiAJa2VybmVsX3NvY2tfc2h1dGRvd24obmV0LSZndDtzb2NrZXQsIFNIVVRfUkRXUik7CiAJZmx1c2hfd29ya3F1ZXVlKGFmc19hc3luY19jYWxscyk7Ci0JY2FuY2VsX3dvcmtfc3luYygmYW1wO25ldC0mZ3Q7cnhfb29iX3dvcmspOwogCW5ldC0mZ3Q7c29ja2V0LSZndDtzay0mZ3Q7c2tfdXNlcl9kYXRhID0gTlVMTDsKIAlzb2NrX3JlbGVhc2UobmV0LSZndDtzb2NrZXQpOwogCWtleV9wdXQobmV0LSZndDtmc19jbV90b2tlbl9rZXkpOwpAQCAtMTc3LDIxICYjNDM7MTY5LDIwIEBAIHN0YXRpYyBzdHJ1Y3QgYWZzX2NhbGwgKmFmc19hbGxvY19jYWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsCiAJY2FsbC0mZ3Q7ZGVidWdfaWQgPSBhdG9taWNfaW5jX3JldHVybigmYW1wO3J4cnBjX2RlYnVnX2lkKTsKIAlyZWZjb3VudF9zZXQoJmFtcDtjYWxsLSZndDtyZWYsIDEpOwogCUlOSVRfV09SSygmYW1wO2NhbGwtJmd0O2FzeW5jX3dvcmssIHR5cGUtJmd0O2FzeW5jX3J4ID86IGFmc19wcm9jZXNzX2FzeW5jX2NhbGwpOwotCUlOSVRfV09SSygmYW1wO2NhbGwtJmd0O3dvcmssIGNhbGwtJmd0O3R5cGUtJmd0O3dvcmspOwogCUlOSVRfV09SSygmYW1wO2NhbGwtJmd0O2ZyZWVfd29yaywgYWZzX2RlZmVycmVkX2ZyZWVfd29ya2VyKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7Y2FsbC0mZ3Q7d2FpdHEpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7Y2FsbC0mZ3Q7c3RhdGVfbG9jayk7CiAJY2FsbC0mZ3Q7aXRlciA9ICZhbXA7Y2FsbC0mZ3Q7ZGVmX2l0ZXI7CiAKIAlvID0gYXRvbWljX2luY19yZXR1cm4oJmFtcDtuZXQtJmd0O25yX291dHN0YW5kaW5nX2NhbGxzKTsKLQl0cmFjZV9hZnNfY2FsbChjYWxsLSZndDtkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfYWxsb2MsIDEsIG8sCi0JCSAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwomIzQzOwl0cmFjZV9hZnNfY2FsbChjYWxsLSZndDtkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfYWxsb2MsIDEsIG8pOwogCXJldHVybiBjYWxsOwogfQogCiBzdGF0aWMgdm9pZCBhZnNfZnJlZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIHsKIAlzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY2FsbC0mZ3Q7bmV0OwomIzQzOwl1bnNpZ25lZCBpbnQgZGVidWdfaWQgPSBjYWxsLSZndDtkZWJ1Z19pZDsKIAlpbnQgbzsKIAogCUFTU0VSVCghd29ya19wZW5kaW5nKCZhbXA7Y2FsbC0mZ3Q7YXN5bmNfd29yaykpOwpAQCAtMjA4LDEzICYjNDM7MTk5LDEwIEBAIHN0YXRpYyB2b2lkIGFmc19mcmVlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKQogCiAJYWZzX3VudXNlX3NlcnZlcl9ub3RpbWUoY2FsbC0mZ3Q7bmV0LCBjYWxsLSZndDtzZXJ2ZXIsIGFmc19zZXJ2ZXJfdHJhY2VfdW51c2VfY2FsbCk7CiAJa2ZyZWUoY2FsbC0mZ3Q7cmVxdWVzdCk7Ci0KLQlvID0gYXRvbWljX3JlYWQoJmFtcDtuZXQtJmd0O25yX291dHN0YW5kaW5nX2NhbGxzKTsKLQl0cmFjZV9hZnNfY2FsbChjYWxsLSZndDtkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfZnJlZSwgMCwgbywKLQkJICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJa2ZyZWUoY2FsbCk7CiAKIAlvID0gYXRvbWljX2RlY19yZXR1cm4oJmFtcDtuZXQtJmd0O25yX291dHN0YW5kaW5nX2NhbGxzKTsKJiM0MzsJdHJhY2VfYWZzX2NhbGwoZGVidWdfaWQsIGFmc19jYWxsX3RyYWNlX2ZyZWUsIDAsIG8pOwogCWlmIChvID09IDApCiAJCXdha2VfdXBfdmFyKCZhbXA7bmV0LSZndDtucl9vdXRzdGFuZGluZ19jYWxscyk7CiB9CkBAIC0yMjIsNyAmIzQzOzIxMCw3IEBAIHN0YXRpYyB2b2lkIGFmc19mcmVlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKQogLyoKICAqIERpc3Bvc2Ugb2YgYSByZWZlcmVuY2Ugb24gYSBjYWxsLgogICovCi12b2lkIGFmc19wdXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpCiYjNDM7dm9pZCBhZnNfcHV0X2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBlbnVtIGFmc19jYWxsX3RyYWNlIHRyYWNlKQogewogCXN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjYWxsLSZndDtuZXQ7CiAJdW5zaWduZWQgaW50IGRlYnVnX2lkID0gY2FsbC0mZ3Q7ZGVidWdfaWQ7CkBAIC0yMzEsOCAmIzQzOzIxOSw3IEBAIHZvaWQgYWZzX3B1dF9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIAogCXplcm8gPSBfX3JlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2NhbGwtJmd0O3JlZiwgJmFtcDtyKTsKIAlvID0gYXRvbWljX3JlYWQoJmFtcDtuZXQtJmd0O25yX291dHN0YW5kaW5nX2NhbGxzKTsKLQl0cmFjZV9hZnNfY2FsbChkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfcHV0LCByIC0gMSwgbywKLQkJICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiYjNDM7CXRyYWNlX2Fmc19jYWxsKGRlYnVnX2lkLCB0cmFjZSwgciAtIDEsIG8pOwogCWlmICh6ZXJvKQogCQlhZnNfZnJlZV9jYWxsKGNhbGwpOwogfQpAQCAtMjQ0LDM3ICYjNDM7MjMxLDYgQEAgc3RhdGljIHZvaWQgYWZzX2RlZmVycmVkX2ZyZWVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlhZnNfZnJlZV9jYWxsKGNhbGwpOwogfQogCi0vKgotICogRGlzcG9zZSBvZiBhIHJlZmVyZW5jZSBvbiBhIGNhbGwsIGRlZmVycmluZyB0aGUgY2xlYW51cCB0byBhIHdvcmtxdWV1ZQotICogdG8gYXZvaWQgbG9jayByZWN1cnNpb24uCi0gKi8KLXZvaWQgYWZzX2RlZmVycmVkX3B1dF9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKLXsKLQlzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY2FsbC0mZ3Q7bmV0OwotCXVuc2lnbmVkIGludCBkZWJ1Z19pZCA9IGNhbGwtJmd0O2RlYnVnX2lkOwotCWJvb2wgemVybzsKLQlpbnQgciwgbzsKLQotCXplcm8gPSBfX3JlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2NhbGwtJmd0O3JlZiwgJmFtcDtyKTsKLQlvID0gYXRvbWljX3JlYWQoJmFtcDtuZXQtJmd0O25yX291dHN0YW5kaW5nX2NhbGxzKTsKLQl0cmFjZV9hZnNfY2FsbChkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfcHV0LCByIC0gMSwgbywKLQkJICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JaWYgKHplcm8pCi0JCXNjaGVkdWxlX3dvcmsoJmFtcDtjYWxsLSZndDtmcmVlX3dvcmspOwotfQotCi0vKgotICogUXVldWUgdGhlIGNhbGwgZm9yIGFjdHVhbCB3b3JrLgotICovCi1zdGF0aWMgdm9pZCBhZnNfcXVldWVfY2FsbF93b3JrKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKLXsKLQlpZiAoY2FsbC0mZ3Q7dHlwZS0mZ3Q7d29yaykgewotCQlhZnNfZ2V0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2Vfd29yayk7Ci0JCWlmICghcXVldWVfd29yayhhZnNfd3EsICZhbXA7Y2FsbC0mZ3Q7d29yaykpCi0JCQlhZnNfcHV0X2NhbGwoY2FsbCk7Ci0JfQotfQotCiAvKgogICogYWxsb2NhdGUgYSBjYWxsIHdpdGggZmxhdCByZXF1ZXN0IGFuZCByZXBseSBidWZmZXJzCiAgKi8KQEAgLTMwOCw3ICYjNDM7MjY0LDcgQEAgc3RydWN0IGFmc19jYWxsICphZnNfYWxsb2NfZmxhdF9jYWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsCiAJcmV0dXJuIGNhbGw7CiAKIG5vbWVtX2ZyZWU6Ci0JYWZzX3B1dF9jYWxsKGNhbGwpOwomIzQzOwlhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X29vbSk7CiBub21lbV9jYWxsOgogCXJldHVybiBOVUxMOwogfQpAQCAtMzQ3LDcgJiM0MzszMDMsMTAgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCXN0cnVjdCByeHJwY19jYWxsICpyeGNhbGw7CiAJc3RydWN0IG1zZ2hkciBtc2c7CiAJc3RydWN0IGt2ZWMgaW92WzFdOwomIzQzOwl1bnNpZ25lZCBpbnQgZGVidWdfaWQgPSBjYWxsLSZndDtkZWJ1Z19pZDsKJiM0MzsJc3RydWN0IGtleSAqYXBwX2RhdGEgPSBOVUxMOwogCXNpemVfdCBsZW47CiYjNDM7CWJvb2wgd3JpdGVfaXRlciA9IGNhbGwtJmd0O3dyaXRlX2l0ZXI7CiAJczY0IHR4X3RvdGFsX2xlbjsKIAlpbnQgcmV0OwogCkBAIC0zNzMsMTMgJiM0MzszMzIsMjkgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCS8qIElmIHRoZSBjYWxsIGlzIGdvaW5nIHRvIGJlIGFzeW5jaHJvbm91cywgd2UgbmVlZCBhbiBleHRyYSByZWYgZm9yCiAJICogdGhlIGNhbGwgdG8gaG9sZCBpdHNlbGYgc28gdGhlIGNhbGxlciBuZWVkIG5vdCBoYW5nIG9uIHRvIGl0cyByZWYuCiAJICovCi0JaWYgKGNhbGwtJmd0O2FzeW5jKSB7Ci0JCWFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpOwotCQljYWxsLSZndDtkcm9wX3JlZiA9IHRydWU7CiYjNDM7CWlmIChjYWxsLSZndDthc3luYykKJiM0MzsJCWFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXRfbWFrZV9hc3luY19jYWxsKTsKJiM0MzsKJiM0MzsJaWYgKGNhbGwtJmd0O2tleSAmYW1wOyZhbXA7IGNhbGwtJmd0O3NlcnZlcikgewomIzQzOwkJdTMyIGtyYjVfZW5jdHlwZSA9IDA7CiYjNDM7CQl1OCBzZWN1cml0eV9pbmRleCA9IDA7CiYjNDM7CiYjNDM7CQlyeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNhbGwtJmd0O2tleSwgJmFtcDtzZWN1cml0eV9pbmRleCwgJmFtcDtrcmI1X2VuY3R5cGUpOwomIzQzOwkJc3dpdGNoIChzZWN1cml0eV9pbmRleCkgewomIzQzOyNpZmRlZiBDT05GSUdfUlhHSwomIzQzOwkJY2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzoKJiM0MzsJCQkvKiBSZWFkIHRoZSBrZXkgcG9pbnRlciBiZWZvcmUgdGhlIGFwcGRhdGEgKi8KJiM0MzsJCQlhcHBfZGF0YSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtjYWxsLSZndDtzZXJ2ZXItJmd0O3lmc19yeGdrX2FwcGRhdGEpOwomIzQzOwkJCWJyZWFrOwomIzQzOyNlbmRpZgomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAl9CiAKIAkvKiBjcmVhdGUgYSBjYWxsICovCi0JcnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3BlZXIsIGNhbGwtJmd0O2tleSwKJiM0MzsJcnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3BlZXIsCiYjNDM7CQkJCQkgY2FsbC0mZ3Q7a2V5LCBhcHBfZGF0YSwKIAkJCQkJICh1bnNpZ25lZCBsb25nKWNhbGwsCiAJCQkJCSB0eF90b3RhbF9sZW4sCiAJCQkJCSBjYWxsLSZndDttYXhfbGlmZXNwYW4sCkBAIC00MTAsNyAmIzQzOzM4NSw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcCkKIAlpb3ZfaXRlcl9rdmVjKCZhbXA7bXNnLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgaW92LCAxLCBjYWxsLSZndDtyZXF1ZXN0X3NpemUpOwogCW1zZy5tc2dfY29udHJvbAkJPSBOVUxMOwogCW1zZy5tc2dfY29udHJvbGxlbgk9IDA7Ci0JbXNnLm1zZ19mbGFncwkJPSBNU0dfV0FJVEFMTCB8IChjYWxsLSZndDt3cml0ZV9pdGVyID8gTVNHX01PUkUgOiAwKTsKJiM0MzsJbXNnLm1zZ19mbGFncwkJPSBNU0dfV0FJVEFMTCB8ICh3cml0ZV9pdGVyID8gTVNHX01PUkUgOiAwKTsKIAogCXJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsIHJ4Y2FsbCwKIAkJCQkgICAgICZhbXA7bXNnLCBjYWxsLSZndDtyZXF1ZXN0X3NpemUsCkBAIC00MTgsNyAmIzQzOzM5Myw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcCkKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBlcnJvcl9kb19hYm9ydDsKIAotCWlmIChjYWxsLSZndDt3cml0ZV9pdGVyKSB7CiYjNDM7CWlmICh3cml0ZV9pdGVyKSB7CiAJCW1zZy5tc2dfaXRlciA9ICpjYWxsLSZndDt3cml0ZV9pdGVyOwogCQltc2cubXNnX2ZsYWdzICZhbXA7PSB+TVNHX01PUkU7CiAJCXRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgJmFtcDttc2cpOwpAQCAtNDI3LDkgJiM0Mzs0MDIsOCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApCiAJCQkJCSAgICAgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywKIAkJCQkJICAgICBpb3ZfaXRlcl9jb3VudCgmYW1wO21zZy5tc2dfaXRlciksCiAJCQkJCSAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7Ci0JCSpjYWxsLSZndDt3cml0ZV9pdGVyID0gbXNnLm1zZ19pdGVyOwogCi0JCXRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgJmFtcDttc2csIHJldCk7CiYjNDM7CQl0cmFjZV9hZnNfc2VudF9kYXRhKGRlYnVnX2lkLCAmYW1wO21zZywgcmV0KTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlnb3RvIGVycm9yX2RvX2Fib3J0OwogCX0KQEAgLTQ0OCw3ICYjNDM7NDIyLDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCQkJCQlSWF9VU0VSX0FCT1JULCByZXQsCiAJCQkJCWFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpOwogCWlmIChjYWxsLSZndDthc3luYykgewotCQlhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQpOwomIzQzOwkJYWZzX3NlZV9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY19hYm9ydCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQ2NCw3ICYjNDM7NDM4LDcgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCXRyYWNlX2Fmc19jYWxsX2RvbmUoY2FsbCk7CiBlcnJvcl9raWxsX2NhbGw6CiAJaWYgKGNhbGwtJmd0O2FzeW5jKQotCQlhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfa2lsbCk7CiYjNDM7CQlhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2Vfc2VlX2FzeW5jX2tpbGwpOwogCWlmIChjYWxsLSZndDt0eXBlLSZndDtpbW1lZGlhdGVfY2FuY2VsKQogCQljYWxsLSZndDt0eXBlLSZndDtpbW1lZGlhdGVfY2FuY2VsKGNhbGwpOwogCkBAIC00NzUsOCAmIzQzOzQ0OSw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcCkKIAlpZiAoY2FsbC0mZ3Q7cnhjYWxsKQogCQlyeHJwY19rZXJuZWxfc2h1dGRvd25fY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsKTsKIAlpZiAoY2FsbC0mZ3Q7YXN5bmMpIHsKLQkJaWYgKGNhbmNlbF93b3JrX3N5bmMoJmFtcDtjYWxsLSZndDthc3luY193b3JrKSkKLQkJCWFmc19wdXRfY2FsbChjYWxsKTsKJiM0MzsJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtjYWxsLSZndDthc3luY193b3JrKTsKIAkJYWZzX3NldF9jYWxsX2NvbXBsZXRlKGNhbGwsIHJldCwgMCk7CiAJfQogCkBAIC01NjIsNyAmIzQzOzUzNSw4IEBAIHZvaWQgYWZzX2RlbGl2ZXJfdG9fY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpCiAJCXN3aXRjaCAocmV0KSB7CiAJCWNhc2UgMDoKIAkJCWNhbGwtJmd0O3Jlc3BvbmRlZCA9IHRydWU7Ci0JCQlhZnNfcXVldWVfY2FsbF93b3JrKGNhbGwpOwomIzQzOwkJCWlmIChjYWxsLSZndDt3b3JrKQomIzQzOwkJCQljYWxsLSZndDt3b3JrKGNhbGwpOwogCQkJaWYgKHN0YXRlID09IEFGU19DQUxMX0NMX1BST0NfUkVQTFkpIHsKIAkJCQlpZiAoY2FsbC0mZ3Q7b3ApCiAJCQkJCXNldF9iaXQoQUZTX1NFUlZFUl9GTF9NQVlfSEFWRV9DQiwKQEAgLTYxMiw2ICYjNDM7NTg2LDcgQEAgdm9pZCBhZnNfZGVsaXZlcl90b19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIAl9CiAKIGRvbmU6CiYjNDM7CXRyYWNlX2Fmc19jYWxsX2RvbmUoY2FsbCk7CiAJaWYgKGNhbGwtJmd0O3R5cGUtJmd0O2RvbmUpCiAJCWNhbGwtJmd0O3R5cGUtJmd0O2RvbmUoY2FsbCk7CiBvdXQ6CkBAIC03MDAsMTkgJiM0Mzs2NzUsMTIgQEAgc3RhdGljIHZvaWQgYWZzX3dha2VfdXBfYXN5bmNfY2FsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByeHJwY19jYWxsICpyeGNhbGwsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBjYWxsX3VzZXJfSUQpCiB7CiAJc3RydWN0IGFmc19jYWxsICpjYWxsID0gKHN0cnVjdCBhZnNfY2FsbCAqKWNhbGxfdXNlcl9JRDsKLQlpbnQgcjsKIAogCXRyYWNlX2Fmc19ub3RpZnlfY2FsbChyeGNhbGwsIGNhbGwpOwogCWNhbGwtJmd0O25lZWRfYXR0ZW50aW9uID0gdHJ1ZTsKIAotCWlmIChfX3JlZmNvdW50X2luY19ub3RfemVybygmYW1wO2NhbGwtJmd0O3JlZiwgJmFtcDtyKSkgewotCQl0cmFjZV9hZnNfY2FsbChjYWxsLSZndDtkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2Vfd2FrZSwgciAmIzQzOyAxLAotCQkJICAgICAgIGF0b21pY19yZWFkKCZhbXA7Y2FsbC0mZ3Q7bmV0LSZndDtucl9vdXRzdGFuZGluZ19jYWxscyksCi0JCQkgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQotCQlpZiAoIXF1ZXVlX3dvcmsoYWZzX2FzeW5jX2NhbGxzLCAmYW1wO2NhbGwtJmd0O2FzeW5jX3dvcmspKQotCQkJYWZzX2RlZmVycmVkX3B1dF9jYWxsKGNhbGwpOwotCX0KJiM0MzsJYWZzX3NlZV9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY193YWtlKTsKJiM0MzsJcXVldWVfd29yayhhZnNfYXN5bmNfY2FsbHMsICZhbXA7Y2FsbC0mZ3Q7YXN5bmNfd29yayk7CiB9CiAKIC8qCkBAIC03MjUsMTIgJiM0Mzs2OTMsMTcgQEAgc3RhdGljIHZvaWQgYWZzX3Byb2Nlc3NfYXN5bmNfY2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIAlfZW50ZXIoJiMzNDsmIzM0Oyk7CiAKJiM0MzsJYWZzX3NlZV9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY19wcm9jZXNzKTsKJiM0MzsKIAlpZiAoY2FsbC0mZ3Q7c3RhdGUgJmx0OyBBRlNfQ0FMTF9DT01QTEVURSAmYW1wOyZhbXA7IGNhbGwtJmd0O25lZWRfYXR0ZW50aW9uKSB7CiAJCWNhbGwtJmd0O25lZWRfYXR0ZW50aW9uID0gZmFsc2U7CiAJCWFmc19kZWxpdmVyX3RvX2NhbGwoY2FsbCk7CiAJfQogCi0JYWZzX3B1dF9jYWxsKGNhbGwpOwomIzQzOwlpZiAoY2FsbC0mZ3Q7c3RhdGUgPT0gQUZTX0NBTExfQ09NUExFVEUpIHsKJiM0MzsJCWNhbmNlbF93b3JrKCZhbXA7Y2FsbC0mZ3Q7YXN5bmNfd29yayk7CiYjNDM7CQlhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X2FzeW5jX2NvbXBsZXRlKTsKJiM0MzsJfQogCV9sZWF2ZSgmIzM0OyYjMzQ7KTsKIH0KIApAQCAtNzU2LDcgJiM0Mzs3MjksNiBAQCB2b2lkIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCQlpZiAoIWNhbGwpCiAJCQkJYnJlYWs7CiAKLQkJCWNhbGwtJmd0O2Ryb3BfcmVmID0gdHJ1ZTsKIAkJCWNhbGwtJmd0O2FzeW5jID0gdHJ1ZTsKIAkJCWNhbGwtJmd0O3N0YXRlID0gQUZTX0NBTExfU1ZfQVdBSVRfT1BfSUQ7CiAJCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7Y2FsbC0mZ3Q7d2FpdHEpOwpAQCAtNzgzLDcgJiM0Mzs3NTUsNyBAQCBzdGF0aWMgdm9pZCBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsLAogCXN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IChzdHJ1Y3QgYWZzX2NhbGwgKil1c2VyX2NhbGxfSUQ7CiAKIAljYWxsLSZndDtyeGNhbGwgPSBOVUxMOwotCWFmc19wdXRfY2FsbChjYWxsKTsKJiM0MzsJYWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9kaXNjYXJkX3ByZWFsbG9jKTsKIH0KIAogLyoKQEAgLTgzMiw3ICYjNDM7ODA0LDcgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jbV9vcF9pZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpCiAJCQkJCQkJICAgICAmYW1wO2NhbGwtJmd0O2VuY3R5cGUpOwogCiAJdHJhY2VfYWZzX2NiX2NhbGwoY2FsbCk7Ci0JY2FsbC0mZ3Q7d29yay5mdW5jID0gY2FsbC0mZ3Q7dHlwZS0mZ3Q7d29yazsKJiM0MzsJY2FsbC0mZ3Q7d29yayA9IGNhbGwtJmd0O3R5cGUtJmd0O3dvcms7CiAKIAkvKiBwYXNzIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgcmVtYWluZGVyIG9mIHRoaXMgbWVzc2FnZSBvZmYgdG8gdGhlCiAJICogY2FjaGUgbWFuYWdlciBvcCAqLwpAQCAtOTgzLDE0ICYjNDM7OTU1LDMgQEAgbm9pbmxpbmUgaW50IGFmc19wcm90b2NvbF9lcnJvcihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsCiAJCWNhbGwtJmd0O3VubWFyc2hhbGxpbmdfZXJyb3IgPSB0cnVlOwogCXJldHVybiAtRUJBRE1TRzsKIH0KLQotLyoKLSAqIFdha2UgdXAgT09CIG5vdGlmaWNhdGlvbiBwcm9jZXNzaW5nLgotICovCi1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpCi17Ci0Jc3RydWN0IGFmc19uZXQgKm5ldCA9IHNrLSZndDtza191c2VyX2RhdGE7Ci0KLQlpZiAoUkVBRF9PTkNFKG5ldC0mZ3Q7bGl2ZSkpCi0JCXF1ZXVlX3dvcmsoYWZzX3dxLCAmYW1wO25ldC0mZ3Q7cnhfb29iX3dvcmspOwotfQpkaWZmIC0tZ2l0IGEvZnMvYWZzL3NlcnZlci5jIGIvZnMvYWZzL3NlcnZlci5jCmluZGV4IDBmZTE2MmVhMmEzNmRiLi40YzNhN2JkMGY3ZDg2NiAxMDA2NDQKLS0tIGEvZnMvYWZzL3NlcnZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zZXJ2ZXIuYwpAQCAtMzk4LDcgJiM0MzszOTgsNyBAQCBzdGF0aWMgdm9pZCBhZnNfc2VydmVyX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKIAlhZnNfcHV0X2VuZHBvaW50X3N0YXRlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItJmd0O2VuZHBvaW50X3N0YXRlKSwKIAkJCSAgICAgICBhZnNfZXN0YXRlX3RyYWNlX3B1dF9zZXJ2ZXIpOwogCWFmc19wdXRfY2VsbChzZXJ2ZXItJmd0O2NlbGwsIGFmc19jZWxsX3RyYWNlX3B1dF9zZXJ2ZXIpOwotCWtmcmVlKHNlcnZlci0mZ3Q7Y21fcnhna19hcHBkYXRhLmRhdGEpOwomIzQzOwlrZXlfcHV0KHNlcnZlci0mZ3Q7eWZzX3J4Z2tfYXBwZGF0YSk7CiAJa2ZyZWUoc2VydmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYWZzL3ZsX3Byb2JlLmMgYi9mcy9hZnMvdmxfcHJvYmUuYwppbmRleCAzZDJlMGM5MjU0NjBmOS4uMWQ3MDg4N2M5ZjMxOGIgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy92bF9wcm9iZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy92bF9wcm9iZS5jCkBAIC0xODYsNyAmIzQzOzE4Niw3IEBAIHN0YXRpYyBib29sIGFmc19kb19wcm9iZV92bHNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LAogCQkJCQkgICAgICAgc2VydmVyX2luZGV4KTsKIAkJaWYgKCFJU19FUlIoY2FsbCkpIHsKIAkJCWFmc19wcmlvcml0aXNlX2Vycm9yKF9lLCBjYWxsLSZndDtlcnJvciwgY2FsbC0mZ3Q7YWJvcnRfY29kZSk7Ci0JCQlhZnNfcHV0X2NhbGwoY2FsbCk7CiYjNDM7CQkJYWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF92bF9nZXRfY2Fwcyk7CiAJCQlpbl9wcm9ncmVzcyA9IHRydWU7CiAJCX0gZWxzZSB7CiAJCQlhZnNfcHJpb3JpdGlzZV9lcnJvcihfZSwgUFRSX0VSUihjYWxsKSwgMCk7CmRpZmYgLS1naXQgYS9mcy9hZnMvdmxjbGllbnQuYyBiL2ZzL2Fmcy92bGNsaWVudC5jCmluZGV4IGE0MGI0MzQ2NGNmYTllLi44YTRjOGM5YTFlMzk5NiAxMDA2NDQKLS0tIGEvZnMvYWZzL3ZsY2xpZW50LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3ZsY2xpZW50LmMKQEAgLTE1Myw3ICYjNDM7MTUzLDcgQEAgc3RydWN0IGFmc192bGRiX2VudHJ5ICphZnNfdmxfZ2V0X2VudHJ5X2J5X25hbWVfdShzdHJ1Y3QgYWZzX3ZsX2N1cnNvciAqdmMsCiAJdmMtJmd0O2NhbGxfYWJvcnRfY29kZQk9IGNhbGwtJmd0O2Fib3J0X2NvZGU7CiAJdmMtJmd0O2NhbGxfZXJyb3IJCT0gY2FsbC0mZ3Q7ZXJyb3I7CiAJdmMtJmd0O2NhbGxfcmVzcG9uZGVkCT0gY2FsbC0mZ3Q7cmVzcG9uZGVkOwotCWFmc19wdXRfY2FsbChjYWxsKTsKJiM0MzsJYWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF92bF9jYWxsKTsKIAlpZiAodmMtJmd0O2NhbGxfZXJyb3IpIHsKIAkJa2ZyZWUoZW50cnkpOwogCQlyZXR1cm4gRVJSX1BUUih2Yy0mZ3Q7Y2FsbF9lcnJvcik7CkBAIC0zMDMsNyAmIzQzOzMwMyw3IEBAIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfdmxfZ2V0X2FkZHJzX3Uoc3RydWN0IGFmc192bF9jdXJzb3IgKnZjLAogCXZjLSZndDtjYWxsX2Vycm9yCQk9IGNhbGwtJmd0O2Vycm9yOwogCXZjLSZndDtjYWxsX3Jlc3BvbmRlZAk9IGNhbGwtJmd0O3Jlc3BvbmRlZDsKIAlhbGlzdAkJCT0gY2FsbC0mZ3Q7cmV0X2FsaXN0OwotCWFmc19wdXRfY2FsbChjYWxsKTsKJiM0MzsJYWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF92bF9jYWxsKTsKIAlpZiAodmMtJmd0O2NhbGxfZXJyb3IpIHsKIAkJYWZzX3B1dF9hZGRybGlzdChhbGlzdCwgYWZzX2FsaXN0X3RyYWNlX3B1dF9nZXRhZGRydSk7CiAJCXJldHVybiBFUlJfUFRSKHZjLSZndDtjYWxsX2Vycm9yKTsKQEAgLTY2Niw3ICYjNDM7NjY2LDcgQEAgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc195ZnN2bF9nZXRfZW5kcG9pbnRzKHN0cnVjdCBhZnNfdmxfY3Vyc29yICp2YywKIAl2Yy0mZ3Q7Y2FsbF9lcnJvcgkJPSBjYWxsLSZndDtlcnJvcjsKIAl2Yy0mZ3Q7Y2FsbF9yZXNwb25kZWQJPSBjYWxsLSZndDtyZXNwb25kZWQ7CiAJYWxpc3QJCQk9IGNhbGwtJmd0O3JldF9hbGlzdDsKLQlhZnNfcHV0X2NhbGwoY2FsbCk7CiYjNDM7CWFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfdmxfY2FsbCk7CiAJaWYgKHZjLSZndDtjYWxsX2Vycm9yKSB7CiAJCWFmc19wdXRfYWRkcmxpc3QoYWxpc3QsIGFmc19hbGlzdF90cmFjZV9wdXRfZ2V0YWRkcnUpOwogCQlyZXR1cm4gRVJSX1BUUih2Yy0mZ3Q7Y2FsbF9lcnJvcik7CkBAIC03ODQsNyAmIzQzOzc4NCw3IEBAIGNoYXIgKmFmc195ZnN2bF9nZXRfY2VsbF9uYW1lKHN0cnVjdCBhZnNfdmxfY3Vyc29yICp2YykKIAl2Yy0mZ3Q7Y2FsbF9lcnJvcgkJPSBjYWxsLSZndDtlcnJvcjsKIAl2Yy0mZ3Q7Y2FsbF9yZXNwb25kZWQJPSBjYWxsLSZndDtyZXNwb25kZWQ7CiAJY2VsbG5hbWUJCT0gY2FsbC0mZ3Q7cmV0X3N0cjsKLQlhZnNfcHV0X2NhbGwoY2FsbCk7CiYjNDM7CWFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfdmxfY2FsbCk7CiAJaWYgKHZjLSZndDtjYWxsX2Vycm9yKSB7CiAJCWtmcmVlKGNlbGxuYW1lKTsKIAkJcmV0dXJuIEVSUl9QVFIodmMtJmd0O2NhbGxfZXJyb3IpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oIGIvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oCmluZGV4IDM4NmMzMTQzMjc4OTk1Li43MDAyYTk5M2E0NzIyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaApAQCAtMjYsNiAmIzQzOzI2LDcgQEAKICAqLwogc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgewogCXN0cnVjdCByY3VfaGVhZAlyY3U7CQkvKiBSQ1UgZGVzdHJ1Y3RvciAqLwomIzQzOwlyZWZjb3VudF90CXJlZjsKIAl1bnNpZ25lZCBzaG9ydAlkYXRhbGVuOwkvKiBsZW5ndGggb2YgdGhpcyBkYXRhICovCiAJY2hhcgkJZGF0YVtdIF9fYWxpZ25lZChfX2FsaWdub2ZfXyh1NjQpKTsgLyogYWN0dWFsIGRhdGEgKi8KIH07CkBAIC0zNyw2ICYjNDM7MzgsNyBAQCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkOwogCiBleHRlcm4gaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7CiBleHRlcm4gdm9pZCB1c2VyX2ZyZWVfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7CiYjNDM7dm9pZCBwdXRfdXNlcl9rZXlfcGF5bG9hZChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZCk7CiBleHRlcm4gaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7CiBleHRlcm4gdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpOwogZXh0ZXJuIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oIGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaAppbmRleCAwZmI0YzQxYzliYmY1NS4uYTliOGUxYmE2N2VmOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaApAQCAtNTUsNiAmIzQzOzU1LDcgQEAgdm9pZCByeHJwY19rZXJuZWxfc2V0X25vdGlmaWNhdGlvbnMoc3RydWN0IHNvY2tldCAqc29jaywKIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJCQkgICBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlciwKIAkJCQkJICAgc3RydWN0IGtleSAqa2V5LAomIzQzOwkJCQkJICAgc3RydWN0IGtleSAqYXBwX2RhdGEsCiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lELAogCQkJCQkgICBzNjQgdHhfdG90YWxfbGVuLAogCQkJCQkgICB1MzIgaGFyZF90aW1lb3V0LApAQCAtOTEsMjQgJiM0Mzs5Miw4IEBAIGJvb2wgcnhycGNfa2VybmVsX2NoZWNrX2xpZmUoY29uc3Qgc3RydWN0IHNvY2tldCAqLCBjb25zdCBzdHJ1Y3QgcnhycGNfY2FsbCAqKTsKIAogaW50IHJ4cnBjX3NvY2tfc2V0X21pbl9zZWN1cml0eV9sZXZlbChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCB2YWwpOwogaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKiwgc3RydWN0IGtleSAqKTsKLWludCByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBib29sIHNldCk7Ci0KLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLAotCQkJCQkgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLAotCQkJCQkgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKTsKLXN0cnVjdCBza19idWZmICpyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2Ioc3RydWN0IHNvY2tldCAqc29jaywKLQkJCQkJIGVudW0gcnhycGNfb29iX3R5cGUgKl90eXBlKTsKLXZvaWQgcnhycGNfa2VybmVsX2ZyZWVfb29iKHN0cnVjdCBza19idWZmICpvb2IpOwotdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLAotCQkJCSAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSwKLQkJCQkgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpOwotaW50IHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsIHUzMiBhYm9ydF9jb2RlLAotCQkJCSAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpOwotaW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKTsKLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7Ci1pbnQgcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSk7CiYjNDM7dm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCwKJiM0MzsJCQkgICAgdTMyICpfa3JiNV9lbmN0eXBlKTsKIHU4IHJ4cnBjX2tlcm5lbF9xdWVyeV9jYWxsX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJCSAgICB1MTYgKl9zZXJ2aWNlX2lkLCB1MzIgKl9lbmN0eXBlKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaAppbmRleCAxYjNjNDhiNTU5MWRmZC4uYTRmNTc0MTRkNTI3ZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oCkBAIC0xMjAsMTQgJiM0MzsxMjAsMjYgQEAgZW51bSB5ZnNfY21fb3BlcmF0aW9uIHsKICAqIERlY2xhcmUgdHJhY2luZyBpbmZvcm1hdGlvbiBlbnVtcyBhbmQgdGhlaXIgc3RyaW5nIG1hcHBpbmdzIGZvciBkaXNwbGF5LgogICovCiAjZGVmaW5lIGFmc19jYWxsX3RyYWNlcyBcCi0JRU0oYWZzX2NhbGxfdHJhY2VfYWxsb2MsCQkmIzM0O0FMTE9DJiMzNDspIFwKLQlFTShhZnNfY2FsbF90cmFjZV9hc3luY19hYm9ydCwJCSYjMzQ7QVNZQUImIzM0OykgXAotCUVNKGFmc19jYWxsX3RyYWNlX2FzeW5jX2tpbGwsCQkmIzM0O0FTWUtMJiMzNDspIFwKLQlFTShhZnNfY2FsbF90cmFjZV9mcmVlLAkJCSYjMzQ7RlJFRSAmIzM0OykgXAotCUVNKGFmc19jYWxsX3RyYWNlX2dldCwJCQkmIzM0O0dFVCAgJiMzNDspIFwKLQlFTShhZnNfY2FsbF90cmFjZV9wdXQsCQkJJiMzNDtQVVQgICYjMzQ7KSBcCi0JRU0oYWZzX2NhbGxfdHJhY2Vfd2FrZSwJCQkmIzM0O1dBS0UgJiMzNDspIFwKLQlFXyhhZnNfY2FsbF90cmFjZV93b3JrLAkJCSYjMzQ7UVVFVUUmIzM0OykKJiM0MzsJRU0oYWZzX2NhbGxfdHJhY2VfYWxsb2MsCQkmIzM0O0FMTE9DICAgICAgJiMzNDspIFwKJiM0MzsJRU0oYWZzX2NhbGxfdHJhY2VfZnJlZSwJCQkmIzM0O0ZSRUUgICAgICAgJiMzNDspIFwKJiM0MzsJRU0oYWZzX2NhbGxfdHJhY2VfZ2V0X29wX2NhbGwsCQkmIzM0O0dFVCBvcCAgICAgJiMzNDspIFwKJiM0MzsJRU0oYWZzX2NhbGxfdHJhY2VfZ2V0X21ha2VfYXN5bmNfY2FsbCwJJiMzNDtHRVQgYS1tYWtlICYjMzQ7KSBcCiYjNDM7CUVNKGFmc19jYWxsX3RyYWNlX3B1dF9hc3luY19jb21wbGV0ZSwJJiMzNDtQVVQgYS1jbXBsICYjMzQ7KSBcCiYjNDM7CUVNKGFmc19jYWxsX3RyYWNlX3B1dF9tYWRlX2NhbGwsCSYjMzQ7UFVUIG1hZGUgICAmIzM0OykgXAomIzQzOwlFTShhZnNfY2FsbF90cmFjZV9wdXRfZGlzY2FyZF9wcmVhbGxvYywJJiMzNDtQVVQgZGlzLXByZSYjMzQ7KSBcCiYjNDM7CUVNKGFmc19jYWxsX3RyYWNlX3B1dF9nZXRfY2FwYWJpbGl0aWVzLAkmIzM0O1BVVCBnZXQtY2FwJiMzNDspIFwKJiM0MzsJRU0oYWZzX2NhbGxfdHJhY2VfcHV0X2dpdmV1cGNhbGxiYWNrcywJJiMzNDtQVVQgZ3Z1cC1jYiYjMzQ7KSBcCiYjNDM7CUVNKGFmc19jYWxsX3RyYWNlX3B1dF9vb20sCQkmIzM0O1BVVCBvb20gICAgJiMzNDspIFwKJiM0MzsJRU0oYWZzX2NhbGxfdHJhY2VfcHV0X3JlYWRfY29tcGxldGUsCSYjMzQ7UFVUIHJkLWNwbCAmIzM0OykgXAomIzQzOwlFTShhZnNfY2FsbF90cmFjZV9wdXRfcmVhZF9vcCwJCSYjMzQ7UFVUIHJkLW9wICAmIzM0OykgXAomIzQzOwlFTShhZnNfY2FsbF90cmFjZV9wdXRfc3BhcmVfc3ZjLAkmIzM0O1BVVCBzcGFyZS1zJiMzNDspIFwKJiM0MzsJRU0oYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2NhbGwsCQkmIzM0O1BVVCB2bC1jYWxsJiMzNDspIFwKJiM0MzsJRU0oYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2dldF9jYXBzLAkmIzM0O1BVVCB2bC1nY2FwJiMzNDspIFwKJiM0MzsJRU0oYWZzX2NhbGxfdHJhY2VfcHV0X3dhaXRfb3AsCQkmIzM0O1BVVCB3dC1vcCAgJiMzNDspIFwKJiM0MzsJRU0oYWZzX2NhbGxfdHJhY2Vfc2VlX2FzeW5jX2Fib3J0LAkmIzM0O1NFRSBhLWFib3J0JiMzNDspIFwKJiM0MzsJRU0oYWZzX2NhbGxfdHJhY2Vfc2VlX2FzeW5jX2tpbGwsCSYjMzQ7U0VFIGEta2lsbCAmIzM0OykgXAomIzQzOwlFTShhZnNfY2FsbF90cmFjZV9zZWVfYXN5bmNfcHJvY2VzcywJJiMzNDtTRUUgYS1wcm9jICYjMzQ7KSBcCiYjNDM7CUVfKGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY193YWtlLAkmIzM0O1NFRSBhLXdha2UgJiMzNDspCiAKICNkZWZpbmUgYWZzX3NlcnZlcl90cmFjZXMgXAogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfY2FsbGJhY2ssCQkmIzM0O0NBTExCQUNLICYjMzQ7KSBcCkBAIC0xNDgsNiAmIzQzOzE2MCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7CiAJRU0oYWZzX3NlcnZlcl90cmFjZV91bnVzZV9zbGlzdF9pc29ydCwJJiMzNDtVTlUgaXNvcnQmIzM0OykgXAogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXBkYXRlLAkJJiMzNDtVUERBVEUgICAmIzM0OykgXAogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsCSYjMzQ7VVNFIHV1aWQgJiMzNDspIFwKJiM0MzsJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCwJCSYjMzQ7VVNFIGNhbGwgJiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9jbV9jYWxsLAkmIzM0O1VTRSBjbS1jbCYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2V0X2NhcHMsCSYjMzQ7VVNFIGdjYXBzJiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9naXZlX3VwX2NiLAkmIzM0O1VTRSBndnVwYyYjMzQ7KSBcCkBAIC02OTMsMTYgJiM0Mzs3MDYsMTUgQEAgVFJBQ0VfRVZFTlQoYWZzX2NiX2NhbGwsCiAKIFRSQUNFX0VWRU5UKGFmc19jYWxsLAogCSAgICBUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY2FsbF9kZWJ1Z19pZCwgZW51bSBhZnNfY2FsbF90cmFjZSBvcCwKLQkJICAgICBpbnQgcmVmLCBpbnQgb3V0c3RhbmRpbmcsIGNvbnN0IHZvaWQgKndoZXJlKSwKJiM0MzsJCSAgICAgaW50IHJlZiwgaW50IG91dHN0YW5kaW5nKSwKIAotCSAgICBUUF9BUkdTKGNhbGxfZGVidWdfaWQsIG9wLCByZWYsIG91dHN0YW5kaW5nLCB3aGVyZSksCiYjNDM7CSAgICBUUF9BUkdTKGNhbGxfZGVidWdfaWQsIG9wLCByZWYsIG91dHN0YW5kaW5nKSwKIAogCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAogCQkgICAgX19maWVsZCh1bnNpZ25lZCBpbnQsCQljYWxsKQogCQkgICAgX19maWVsZChpbnQsCQkJb3ApCiAJCSAgICBfX2ZpZWxkKGludCwJCQlyZWYpCiAJCSAgICBfX2ZpZWxkKGludCwJCQlvdXRzdGFuZGluZykKLQkJICAgIF9fZmllbGQoY29uc3Qgdm9pZCAqLAkJd2hlcmUpCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCkBAIC03MTAsMTUgJiM0Mzs3MjIsMTMgQEAgVFJBQ0VfRVZFTlQoYWZzX2NhbGwsCiAJCSAgICBfX2VudHJ5LSZndDtvcCA9IG9wOwogCQkgICAgX19lbnRyeS0mZ3Q7cmVmID0gcmVmOwogCQkgICAgX19lbnRyeS0mZ3Q7b3V0c3RhbmRpbmcgPSBvdXRzdGFuZGluZzsKLQkJICAgIF9fZW50cnktJmd0O3doZXJlID0gd2hlcmU7CiAJCQkgICApLAogCi0JICAgIFRQX3ByaW50aygmIzM0O2M9JTA4eCAlcyByPSVkIG89JWQgc3A9JXBTUiYjMzQ7LAomIzQzOwkgICAgVFBfcHJpbnRrKCYjMzQ7Yz0lMDh4ICVzIHI9JWQgbz0lZCYjMzQ7LAogCQkgICAgICBfX2VudHJ5LSZndDtjYWxsLAogCQkgICAgICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktJmd0O29wLCBhZnNfY2FsbF90cmFjZXMpLAogCQkgICAgICBfX2VudHJ5LSZndDtyZWYsCi0JCSAgICAgIF9fZW50cnktJmd0O291dHN0YW5kaW5nLAotCQkgICAgICBfX2VudHJ5LSZndDt3aGVyZSkKJiM0MzsJCSAgICAgIF9fZW50cnktJmd0O291dHN0YW5kaW5nKQogCSAgICApOwogCiBUUkFDRV9FVkVOVChhZnNfbWFrZV9mc19jYWxsLApAQCAtOTM3LDkgJiM0Mzs5NDcsOSBAQCBUUkFDRV9FVkVOVChhZnNfc2VuZF9kYXRhLAogCSAgICApOwogCiBUUkFDRV9FVkVOVChhZnNfc2VudF9kYXRhLAotCSAgICBUUF9QUk9UTyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHJldCksCiYjNDM7CSAgICBUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY2FsbF9kZWJ1Z19pZCwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmV0KSwKIAotCSAgICBUUF9BUkdTKGNhbGwsIG1zZywgcmV0KSwKJiM0MzsJICAgIFRQX0FSR1MoY2FsbF9kZWJ1Z19pZCwgbXNnLCByZXQpLAogCiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCiAJCSAgICBfX2ZpZWxkKHVuc2lnbmVkIGludCwJCWNhbGwpCkBAIC05NDksNyAmIzQzOzk1OSw3IEBAIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCSAgICBfX2VudHJ5LSZndDtjYWxsID0gY2FsbC0mZ3Q7ZGVidWdfaWQ7CiYjNDM7CQkgICAgX19lbnRyeS0mZ3Q7Y2FsbCA9IGNhbGxfZGVidWdfaWQ7CiAJCSAgICBfX2VudHJ5LSZndDtyZXQgPSByZXQ7CiAJCSAgICBfX2VudHJ5LSZndDtvZmZzZXQgPSBtc2ctJmd0O21zZ19pdGVyLnhhcnJheV9zdGFydCAmIzQzOyBtc2ctJmd0O21zZ19pdGVyLmlvdl9vZmZzZXQ7CiAJCSAgICBfX2VudHJ5LSZndDtjb3VudCA9IGlvdl9pdGVyX2NvdW50KCZhbXA7bXNnLSZndDttc2dfaXRlcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaAppbmRleCA3MDRhMTBkZTY2NzAwNC4uNDVlNDU1MGExOGVkODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaApAQCAtMTQ4LDYgJiM0MzsxNDgsNyBAQAogCUVNKHJ4cnBjX2Vwcm90b193cm9uZ19zZWN1cml0eSwJCSYjMzQ7d3Jvbmctc2VjJiMzNDspCQlcCiAJRU0ocnhycGNfcmVjdm1zZ19leGNlc3NfZGF0YSwJCSYjMzQ7cmVjdm1zZy1leGNlc3MmIzM0OykJXAogCUVNKHJ4cnBjX3JlY3Ztc2dfc2hvcnRfZGF0YSwJCSYjMzQ7cmVjdm1zZy1zaG9ydCYjMzQ7KQlcCiYjNDM7CUVNKHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsCQkmIzM0O3R4LWVycm9yJiMzNDspCQlcCiAJRV8ocnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsCQkmIzM0O3NlbmRtc2ctbGF0ZSYjMzQ7KQogCiAjZGVmaW5lIHJ4cnBjX2NhbGxfcG9rZV90cmFjZXMgXApAQCAtMjYyLDcgJiM0MzsyNjMsNiBAQAogCUVNKHJ4cnBjX2Nvbm5fZnJlZSwJCQkmIzM0O0ZSRUUgICAgICAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9nZXRfYWN0aXZhdGVfY2FsbCwJJiMzNDtHRVQgYWN0LWNhbGwmIzM0OykgXAogCUVNKHJ4cnBjX2Nvbm5fZ2V0X2NhbGxfaW5wdXQsCQkmIzM0O0dFVCBpbnAtY2FsbCYjMzQ7KSBcCi0JRU0ocnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0LAkmIzM0O0dFVCBpbnAtY2hhbCYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9nZXRfY29ubl9pbnB1dCwJCSYjMzQ7R0VUIGlucC1jb25uJiMzNDspIFwKIAlFTShyeHJwY19jb25uX2dldF9pZGxlLAkJCSYjMzQ7R0VUIGlkbGUgICAgJiMzNDspIFwKIAlFTShyeHJwY19jb25uX2dldF9wb2tlX2Fib3J0LAkJJiMzNDtHRVQgcGstYWJvcnQmIzM0OykgXApAQCAtMjc0LDcgJiM0MzsyNzQsNiBAQAogCUVNKHJ4cnBjX2Nvbm5fbmV3X3NlcnZpY2UsCQkmIzM0O05FVyBzZXJ2aWNlICYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9wdXRfY2FsbCwJCQkmIzM0O1BVVCBjYWxsICAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY29ubl9wdXRfY2FsbF9pbnB1dCwJCSYjMzQ7UFVUIGlucC1jYWxsJiMzNDspIFwKLQlFTShyeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQsCSYjMzQ7UFVUIGlucC1jaGFsJiMzNDspIFwKIAlFTShyeHJwY19jb25uX3B1dF9jb25uX2lucHV0LAkJJiMzNDtQVVQgaW5wLWNvbm4mIzM0OykgXAogCUVNKHJ4cnBjX2Nvbm5fcHV0X2Rpc2NhcmRfaWRsZSwJCSYjMzQ7UFVUIGRpc2MtaWRsJiMzNDspIFwKIAlFTShyeHJwY19jb25uX3B1dF9sb2NhbF9kZWFkLAkJJiMzNDtQVVQgbG9jLWRlYWQmIzM0OykgXApAQCAtMzQyLDYgJiM0MzszNDEsNyBAQAogCUVNKHJ4cnBjX2NhbGxfc2VlX2Rpc3RyaWJ1dGVfZXJyb3IsCSYjMzQ7U0VFIGRpc3QtZXJyJiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9pbnB1dCwJCSYjMzQ7U0VFIGlucHV0ICAgJiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQsCSYjMzQ7U0VFIG5meS1ybHNkJiMzNDspIFwKJiM0MzsJRU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQsCSYjMzQ7U0VFIG5meS1za2lwJiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnLAkJJiMzNDtTRUUgcmVjdm1zZyAmIzM0OykgXAogCUVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2dfcmVxdWV1ZSwJJiMzNDtTRUUgcmVjdi1ycXUmIzM0OykgXAogCUVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2dfcmVxdWV1ZV9maXJzdCwgJiMzNDtTRUUgcmVjdi1ycUYmIzM0OykgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaAppbmRleCBkOTczNWFiZDRjNzkxMC4uN2Q2YTUwMTUxOTMxMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oCkBAIC01OCwxMSAmIzQzOzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUgewogCVJYUlBDX1RYX0xFTkdUSAkJPSAxMiwJLyogLXMtOiBUb3RhbCBsZW5ndGggb2YgVHggZGF0YSAqLwogCVJYUlBDX1NFVF9DQUxMX1RJTUVPVVQJPSAxMywJLyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqLwogCVJYUlBDX0NIQVJHRV9BQ0NFUFQJPSAxNCwJLyogU3MtOiBDaGFyZ2UgdGhlIGFjY2VwdCBwb29sIHdpdGggYSB1c2VyIGNhbGwgSUQgKi8KLQlSWFJQQ19PT0JfSUQJCT0gMTUsCS8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi8KLQlSWFJQQ19DSEFMTEVOR0VECT0gMTYsCS8qIEMtcjogSW5mbyBvbiBhIHJlY2VpdmVkIENIQUxMRU5HRSAqLwotCVJYUlBDX1JFU1BPTkQJCT0gMTcsCS8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqLwotCVJYUlBDX1JFU1BPTkRFRAkJPSAxOCwJLyogUy1yOiBEYXRhIHJlY2VpdmVkIGluIFJFU1BPTlNFICovCi0JUlhSUENfUkVTUF9SWEdLX0FQUERBVEEJPSAxOSwJLyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovCiYjNDM7CVJYUlBDX1JFU1BPTlNFX0FQUERBVEEJPSAyMCwJLyogQ3MtOiBVc2VyIGtleSBob2xkaW5nIGFwcCBkYXRhIGZvciBSRVNQT05TRSAqLwogCVJYUlBDX19TVVBQT1JURUQKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKaW5kZXggYzNjOGMzMjQwZWY5NDYuLmFhM2MwNThmNDA5NTU5IDEwMDY0NAotLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwpAQCAtMjA4LDYgJiM0MzsyMDgsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCkKIAkJa2xlYXZlKCYjMzQ7ID0gLUVOT01FTSYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDt1cGF5bG9hZC0mZ3Q7cmVmLCAxKTsKIAogCXVwYXlsb2FkLSZndDtkYXRhbGVuID0gcmVzdWx0X2xlbjsKIAltZW1jcHkodXBheWxvYWQtJmd0O2RhdGEsIGRhdGEsIHJlc3VsdF9sZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL01ha2VmaWxlIGIvbmV0L3J4cnBjL01ha2VmaWxlCmluZGV4IGY5OTRmOWYzMGEyOWQ0Li5mN2E1ZTBhNTkyZWUxMyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9NYWtlZmlsZQpAQCAtMjQsNyAmIzQzOzI0LDYgQEAgcnhycGMteSA6PSBcCiAJbG9jYWxfb2JqZWN0Lm8gXAogCW1pc2MubyBcCiAJbmV0X25zLm8gXAotCW9vYi5vIFwKIAlvdXRwdXQubyBcCiAJcGVlcl9ldmVudC5vIFwKIAlwZWVyX29iamVjdC5vIFwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hZl9yeHJwYy5jIGIvbmV0L3J4cnBjL2FmX3J4cnBjLmMKaW5kZXggOWFiMGYyMmM4ODFlYzUuLjlkNWNlMWM3YWQwZDIyIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYWZfcnhycGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvYWZfcnhycGMuYwpAQCAtMzE4LDYgJiM0MzszMTgsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7CiAgKiBAc29jazogVGhlIHNvY2tldCBvbiB3aGljaCB0byBtYWtlIHRoZSBjYWxsCiAgKiBAcGVlcjogVGhlIHBlZXIgdG8gY29udGFjdAogICogQGtleTogVGhlIHNlY3VyaXR5IGNvbnRleHQgdG8gdXNlIChkZWZhdWx0cyB0byBzb2NrZXQgc2V0dGluZykKJiM0MzsgKiBAYXBwX2RhdGE6IFRoZSBzZWN1cml0eSByZXNwb25zZSBhcHBsaWNhdGlvbiBkYXRhIChvciBOVUxMKQogICogQHVzZXJfY2FsbF9JRDogVGhlIElEIHRvIHVzZQogICogQHR4X3RvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNtaXQgZHVyaW5nIHRoZSBjYWxsIChvciAtMSkKICAqIEBoYXJkX3RpbWVvdXQ6IFRoZSBtYXhpbXVtIGxpZmVzcGFuIG9mIHRoZSBjYWxsIGluIHNlYwpAQCAtMzQwLDYgJiM0MzszNDEsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7CiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQkJICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsCiAJCQkJCSAgIHN0cnVjdCBrZXkgKmtleSwKJiM0MzsJCQkJCSAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCwKIAkJCQkJICAgczY0IHR4X3RvdGFsX2xlbiwKIAkJCQkJICAgdTMyIGhhcmRfdGltZW91dCwKQEAgLTM2OCw2ICYjNDM7MzcwLDcgQEAgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCWtleSA9IE5VTEw7IC8qIGEgbm8tc2VjdXJpdHkga2V5ICovCiAKIAltZW1zZXQoJmFtcDtwLCAwLCBzaXplb2YocCkpOwomIzQzOwlwLmFwcF9kYXRhCQk9IGFwcF9kYXRhOwogCXAudXNlcl9jYWxsX0lECQk9IHVzZXJfY2FsbF9JRDsKIAlwLnR4X3RvdGFsX2xlbgkJPSB0eF90b3RhbF9sZW47CiAJcC5pbnRlcnJ1cHRpYmlsaXR5CT0gaW50ZXJydXB0aWJpbGl0eTsKQEAgLTU5NSwxMCAmIzQzOzU5OCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuKQogCQlmYWxsdGhyb3VnaDsKIAljYXNlIFJYUlBDX1NFUlZFUl9CT1VORDoKIAljYXNlIFJYUlBDX1NFUlZFUl9MSVNURU5JTkc6Ci0JCWlmIChtLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX09PQikKLQkJCXJldCA9IHJ4cnBjX3NlbmRtc2dfb29iKHJ4LCBtLCBsZW4pOwotCQllbHNlCi0JCQlyZXQgPSByeHJwY19kb19zZW5kbXNnKHJ4LCBtLCBsZW4pOwomIzQzOwkJcmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTsKIAkJLyogVGhlIHNvY2tldCBoYXMgYmVlbiB1bmxvY2tlZCAqLwogCQlnb3RvIG91dDsKIAlkZWZhdWx0OgpAQCAtNjMzLDcgJiM0Mzs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCSAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stJmd0O3NrKTsKLQl1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbCwgdmFsOwomIzQzOwl1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbDsKIAl1MTYgc2VydmljZV91cGdyYWRlWzJdOwogCWludCByZXQ7CiAKQEAgLTcxMCwyMyAmIzQzOzcxMCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCiAJCWNhc2UgUlhSUENfTUFOQUdFX1JFU1BPTlNFOgogCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHVuc2lnbmVkIGludCkpCi0JCQkJZ290byBlcnJvcjsKLQkJCXJldCA9IC1FSVNDT05OOwotCQkJaWYgKHJ4LSZndDtzay5za19zdGF0ZSAhPSBSWFJQQ19VTkJPVU5EKQotCQkJCWdvdG8gZXJyb3I7Ci0JCQlyZXQgPSBjb3B5X3NhZmVfZnJvbV9zb2NrcHRyKCZhbXA7dmFsLCBzaXplb2YodmFsKSwKLQkJCQkJCSAgICAgb3B0dmFsLCBvcHRsZW4pOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycm9yOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWlmICh2YWwgJmd0OyAxKQotCQkJCWdvdG8gZXJyb3I7Ci0JCQlpZiAodmFsKQotCQkJCXNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsICZhbXA7cngtJmd0O2ZsYWdzKTsKLQkJCWVsc2UKLQkJCQljbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsICZhbXA7cngtJmd0O2ZsYWdzKTsKLQkJCWdvdG8gc3VjY2VzczsKJiM0MzsJCQlnb3RvIGVycm9yOwogCiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTgzNSw4ICYjNDM7ODE5LDYgQEAgc3RhdGljIGludCByeHJwY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsCiAJcngtJmd0O2NhbGxzID0gUkJfUk9PVDsKIAogCXNwaW5fbG9ja19pbml0KCZhbXA7cngtJmd0O2luY29taW5nX2xvY2spOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKTsKLQlyeC0mZ3Q7cGVuZGluZ19vb2JxID0gUkJfUk9PVDsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3J4LSZndDtzb2NrX2NhbGxzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3J4LSZndDt0b19iZV9hY2NlcHRlZCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKTsKQEAgLTg4NCwyMyAmIzQzOzg2Niw2IEBAIHN0YXRpYyBpbnQgcnhycGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGZsYWdzKQogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBQdXJnZSB0aGUgb3V0LW9mLWJhbmQgcXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkIHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spCi17Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc2spOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZhbXA7cngtJmd0O3JlY3Ztc2dfb29icSkpKQotCQlyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTsKLQl3aGlsZSAoIVJCX0VNUFRZX1JPT1QoJmFtcDtyeC0mZ3Q7cGVuZGluZ19vb2JxKSkgewotCQlza2IgPSByYl9lbnRyeShyeC0mZ3Q7cGVuZGluZ19vb2JxLnJiX25vZGUsIHN0cnVjdCBza19idWZmLCByYm5vZGUpOwotCQlyYl9lcmFzZSgmYW1wO3NrYi0mZ3Q7cmJub2RlLCAmYW1wO3J4LSZndDtwZW5kaW5nX29vYnEpOwotCQlyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTsKLQl9Ci19Ci0KIC8qCiAgKiBSeFJQQyBzb2NrZXQgZGVzdHJ1Y3RvcgogICovCkBAIC05MDgsNyAmIzQzOzg3Myw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3NvY2tfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc29jayAqc2spCiB7CiAJX2VudGVyKCYjMzQ7JXAmIzM0Oywgc2spOwogCi0JcnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTsKIAlyeHJwY19wdXJnZV9xdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKTsKIAogCVdBUk5fT04ocmVmY291bnRfcmVhZCgmYW1wO3NrLSZndDtza193bWVtX2FsbG9jKSk7CkBAIC05NjEsNyAmIzQzOzkyNSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaykKIAlyeHJwY19kaXNjYXJkX3ByZWFsbG9jKHJ4KTsKIAlyeHJwY19yZWxlYXNlX2NhbGxzX29uX3NvY2tldChyeCk7CiAJZmx1c2hfd29ya3F1ZXVlKHJ4cnBjX3dvcmtxdWV1ZSk7Ci0JcnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTsKIAlyeHJwY19wdXJnZV9xdWV1ZSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKTsKIAogCXJ4cnBjX3VudXNlX2xvY2FsKHJ4LSZndDtsb2NhbCwgcnhycGNfbG9jYWxfdW51c2VfcmVsZWFzZV9zb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKaW5kZXggY2U5NDZiMGEwM2UyYjMuLjFjNmY0YTI3OTAzNGYzIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaApAQCAtMTcxLDkgJiM0MzsxNzEsNiBAQCBzdHJ1Y3QgcnhycGNfc29jayB7CiAJY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgKmFwcF9vcHM7CS8qIFRhYmxlIG9mIGtlcm5lbCBhcHAgbm90aWZpY2F0aW9uIGZ1bmNzICovCiAJc3RydWN0IHJ4cnBjX2xvY2FsCSpsb2NhbDsJCS8qIGxvY2FsIGVuZHBvaW50ICovCiAJc3RydWN0IHJ4cnBjX2JhY2tsb2cJKmJhY2tsb2c7CS8qIFByZWFsbG9jYXRpb24gZm9yIHNlcnZpY2VzICovCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZAlyZWN2bXNnX29vYnE7CS8qIE9PQiBtZXNzYWdlcyBmb3IgcmVjdm1zZyB0byBwaWNrIHVwICovCi0Jc3RydWN0IHJiX3Jvb3QJCXBlbmRpbmdfb29icTsJLyogT09CIG1lc3NhZ2VzIGF3YWl0aW5nIHVzZXJzcGFjZSB0byByZXNwb25kIHRvICovCi0JdTY0CQkJb29iX2lkX2NvdW50ZXI7CS8qIE9PQiBtZXNzYWdlIElEIGNvdW50ZXIgKi8KIAlzcGlubG9ja190CQlpbmNvbWluZ19sb2NrOwkvKiBJbmNvbWluZyBjYWxsIHZzIHNlcnZpY2Ugc2h1dGRvd24gbG9jayAqLwogCXN0cnVjdCBsaXN0X2hlYWQJc29ja19jYWxsczsJLyogTGlzdCBvZiBjYWxscyBvd25lZCBieSB0aGlzIHNvY2tldCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJdG9fYmVfYWNjZXB0ZWQ7CS8qIGNhbGxzIGF3YWl0aW5nIGFjY2VwdGFuY2UgKi8KQEAgLTE4NCw3ICYjNDM7MTgxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sgewogCXN0cnVjdCByYl9yb290CQljYWxsczsJCS8qIFVzZXIgSUQgLSZndDsgY2FsbCBtYXBwaW5nICovCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAjZGVmaW5lIFJYUlBDX1NPQ0tfQ09OTkVDVEVECQkwCS8qIGNvbm5lY3Rfc3J4IGlzIHNldCAqLwotI2RlZmluZSBSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRQkxCS8qIFVzZXIgd2FudHMgdG8gbWFuYWdlIFJFU1BPTlNFIHBhY2tldHMgKi8KIAlyd2xvY2tfdAkJY2FsbF9sb2NrOwkvKiBsb2NrIGZvciBjYWxscyAqLwogCXUzMgkJCW1pbl9zZWNfbGV2ZWw7CS8qIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwgKi8KICNkZWZpbmUgUlhSUENfU0VDVVJJVFlfTUFYCVJYUlBDX1NFQ1VSSVRZX0VOQ1JZUFQKQEAgLTI0MSw3ICYjNDM7MjM3LDYgQEAgc3RydWN0IHJ4cnBjX3NrYl9wcml2IHsKIAkJCXU4CQlyZWFzb247CQkvKiBSZWFzb24gZm9yIGFjayAqLwogCQl9IGFjazsKIAkJc3RydWN0IHsKLQkJCXN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uOwkvKiBDb25uZWN0aW9uIHJlZmVycmVkIHRvICovCiAJCQl1bmlvbiB7CiAJCQkJdTMyIHJ4a2FkX25vbmNlOwogCQkJfTsKQEAgLTMxMCwxMyAmIzQzOzMwNSw2IEBAIHN0cnVjdCByeHJwY19zZWN1cml0eSB7CiAJYm9vbCAoKnZhbGlkYXRlX2NoYWxsZW5nZSkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLQkvKiBGaWxsIG91dCB0aGUgY21zZyBmb3IgcmVjdm1zZygpIHRvIHBhc3Mgb24gYSBjaGFsbGVuZ2UgdG8gdXNlcnNwYWNlLgotCSAqIFRoZSBzZWN1cml0eSBjbGFzcyBnZXRzIHRvIGFkZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgotCSAqLwotCWludCAoKmNoYWxsZW5nZV90b19yZWN2bXNnKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKLQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkgICAgc3RydWN0IG1zZ2hkciAqbXNnKTsKLQogCS8qIFBhcnNlIHNlbmRtc2coKSBjb250cm9sIG1lc3NhZ2UgYW5kIHJlc3BvbmQgdG8gY2hhbGxlbmdlLiAqLwogCWludCAoKnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCiAJCQkJCSAgICBzdHJ1Y3QgbXNnaGRyICptc2cpOwpAQCAtNTE2LDYgJiM0Mzs1MDQsNyBAQCBzdHJ1Y3QgcnhycGNfYnVuZGxlIHsKIAlzdHJ1Y3QgcnhycGNfbG9jYWwJKmxvY2FsOwkJLyogUmVwcmVzZW50YXRpb24gb2YgbG9jYWwgZW5kcG9pbnQgKi8KIAlzdHJ1Y3QgcnhycGNfcGVlcgkqcGVlcjsJCS8qIFJlbW90ZSBlbmRwb2ludCAqLwogCXN0cnVjdCBrZXkJCSprZXk7CQkvKiBTZWN1cml0eSBkZXRhaWxzICovCiYjNDM7CXN0cnVjdCBrZXkJCSphcHBfZGF0YTsJLyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXByb2NfbGluazsJLyogTGluayBpbiBuZXQtJmd0O2J1bmRsZV9wcm9jX2xpc3QgKi8KIAljb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5OwkvKiBhcHBsaWVkIHNlY3VyaXR5IG1vZHVsZSAqLwogCXJlZmNvdW50X3QJCXJlZjsKQEAgLTY0Miw2ICYjNDM7NjMxLDcgQEAgZW51bSByeHJwY19jYWxsX2ZsYWcgewogCVJYUlBDX0NBTExfVFhfTEFTVCwJCS8qIExhc3QgcGFja2V0IGluIFR4IGJ1ZmZlciAoYXQgcnh0eF90b3ApICovCiAJUlhSUENfQ0FMTF9UWF9BTExfQUNLRUQsCS8qIExhc3QgcGFja2V0IGhhcyBiZWVuIGhhcmQtYWNrZWQgKi8KIAlSWFJQQ19DQUxMX1RYX05PX01PUkUsCQkvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovCiYjNDM7CVJYUlBDX0NBTExfVFhfRVJST1IsCQkvKiBUZXJtaW5hbCBlcnJvcjsgY2FsbCBuZWVkcyBhYm9ydCAqLwogCVJYUlBDX0NBTExfU0VORF9QSU5HLAkJLyogQSBwaW5nIHdpbGwgbmVlZCB0byBiZSBzZW50ICovCiAJUlhSUENfQ0FMTF9SRVRSQU5TX1RJTUVPVVQsCS8qIFJldHJhbnNtaXNzaW9uIGR1ZSB0byB0aW1lb3V0IG9jY3VycmVkICovCiAJUlhSUENfQ0FMTF9CRUdBTl9SWF9USU1FUiwJLyogV2UgYmVnYW4gdGhlIGV4cGVjdF9yeF9ieSB0aW1lciAqLwpAQCAtNzE5LDYgJiM0Mzs3MDksNyBAQCBzdHJ1Y3QgcnhycGNfY2FsbCB7CiAJc3RydWN0IHJ4cnBjX3NvY2sgX19yY3UJKnNvY2tldDsJLyogc29ja2V0IHJlc3BvbnNpYmxlICovCiAJc3RydWN0IHJ4cnBjX25ldAkqcnhuZXQ7CQkvKiBOZXR3b3JrIG5hbWVzcGFjZSB0byB3aGljaCBjYWxsIGJlbG9uZ3MgKi8KIAlzdHJ1Y3Qga2V5CQkqa2V5OwkJLyogU2VjdXJpdHkgZGV0YWlscyAqLwomIzQzOwlzdHJ1Y3Qga2V5CQkqYXBwX2RhdGE7CS8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovCiAJY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5ICpzZWN1cml0eTsJLyogYXBwbGllZCBzZWN1cml0eSBtb2R1bGUgKi8KIAlzdHJ1Y3QgbXV0ZXgJCXVzZXJfbXV0ZXg7CS8qIFVzZXIgYWNjZXNzIG11dGV4ICovCiAJc3RydWN0IHNvY2thZGRyX3J4cnBjCWRlc3Rfc3J4OwkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzICovCkBAIC05MTMsNiAmIzQzOzkwNCw3IEBAIGVudW0gcnhycGNfY29tbWFuZCB7CiB9OwogCiBzdHJ1Y3QgcnhycGNfY2FsbF9wYXJhbXMgewomIzQzOwlzdHJ1Y3Qga2V5CQkqYXBwX2RhdGE7CS8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovCiAJczY0CQkJdHhfdG90YWxfbGVuOwkvKiBUb3RhbCBUeCBkYXRhIGxlbmd0aCAoaWYgc2VuZCBkYXRhKSAqLwogCXVuc2lnbmVkIGxvbmcJCXVzZXJfY2FsbF9JRDsJLyogVXNlciYjMzk7cyBjYWxsIElEICovCiAJc3RydWN0IHsKQEAgLTEzNzUsMTMgJiM0MzsxMzY3LDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcnhycGNfbmV0ICpyeHJwY19uZXQoc3RydWN0IG5ldCAqbmV0KQogCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHJ4cnBjX25ldF9pZCk7CiB9CiAKLS8qCi0gKiBvb2IuYwotICovCi1ib29sIHJ4cnBjX25vdGlmeV9zb2NrZXRfb29iKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pOwotCiAvKgogICogb3V0cHV0LmMKICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmMgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuYwppbmRleCA4MTdlZDlhY2I5MWU2MS4uOWY2MTMwZDkwYzRjYTggMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9jYWxsX29iamVjdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9jYWxsX29iamVjdC5jCkBAIC0yMTEsNiAmIzQzOzIxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfYWxsb2NfY2xpZW50X2NhbGwoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LAogCWNhbGwtJmd0O2ludGVycnVwdGliaWxpdHkJPSBwLSZndDtpbnRlcnJ1cHRpYmlsaXR5OwogCWNhbGwtJmd0O3R4X3RvdGFsX2xlbgk9IHAtJmd0O3R4X3RvdGFsX2xlbjsKIAljYWxsLSZndDtrZXkJCT0ga2V5X2dldChjcC0mZ3Q7a2V5KTsKJiM0MzsJY2FsbC0mZ3Q7YXBwX2RhdGEJCT0ga2V5X2dldChwLSZndDthcHBfZGF0YSk7CiAJY2FsbC0mZ3Q7cGVlcgkJPSByeHJwY19nZXRfcGVlcihjcC0mZ3Q7cGVlciwgcnhycGNfcGVlcl9nZXRfY2FsbCk7CiAJY2FsbC0mZ3Q7bG9jYWwJCT0gcnhycGNfZ2V0X2xvY2FsKGNwLSZndDtsb2NhbCwgcnhycGNfbG9jYWxfZ2V0X2NhbGwpOwogCWNhbGwtJmd0O3NlY3VyaXR5X2xldmVsCT0gY3AtJmd0O3NlY3VyaXR5X2xldmVsOwpAQCAtNjk3LDYgJiM0Mzs2OTgsNyBAQCBzdGF0aWMgdm9pZCByeHJwY19kZXN0cm95X2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXJ4cnBjX3B1dF9wZWVyKGNhbGwtJmd0O3BlZXIsIHJ4cnBjX3BlZXJfcHV0X2NhbGwpOwogCXJ4cnBjX3B1dF9sb2NhbChjYWxsLSZndDtsb2NhbCwgcnhycGNfbG9jYWxfcHV0X2NhbGwpOwogCWtleV9wdXQoY2FsbC0mZ3Q7a2V5KTsKJiM0MzsJa2V5X3B1dChjYWxsLSZndDthcHBfZGF0YSk7CiAJY2FsbF9yY3UoJmFtcDtjYWxsLSZndDtyY3UsIHJ4cnBjX3JjdV9mcmVlX2NhbGwpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jIGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYwppbmRleCA2YWZiNTQzNzNlYmJmOS4uNmU0MDIzMTJlMTQ1YzAgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9jYWxsX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYwpAQCAtNyw2ICYjNDM7Nyw2MSBAQAogCiAjaW5jbHVkZSAmIzM0O2FyLWludGVybmFsLmgmIzM0OwogCiYjNDM7LyoKJiM0MzsgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuICBGdXJ0aGVyCiYjNDM7ICogbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHJlY3Ztc2dfbGluayBvbiBhIGR1bW15IHF1ZXVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9fcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByeHJwY19zb2NrICpyeDsKJiM0MzsJc3RydWN0IHNvY2sgKnNrOwomIzQzOwomIzQzOwlpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9SRUxFQVNFRCwgJmFtcDtjYWxsLSZndDtmbGFncykpIHsKJiM0MzsJCXJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9yZWxlYXNlZCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwomIzQzOwlyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLSZndDtzb2NrZXQpOwomIzQzOwlzayA9ICZhbXA7cngtJmd0O3NrOwomIzQzOwlpZiAocnggJmFtcDsmYW1wOyBzay0mZ3Q7c2tfc3RhdGUgJmx0OyBSWFJQQ19DTE9TRSkgewomIzQzOwkJaWYgKGNhbGwtJmd0O25vdGlmeV9yeCkgewomIzQzOwkJCXNwaW5fbG9ja19pcnEoJmFtcDtjYWxsLSZndDtub3RpZnlfbG9jayk7CiYjNDM7CQkJY2FsbC0mZ3Q7bm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLSZndDt1c2VyX2NhbGxfSUQpOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3Bpbl9sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwomIzQzOwkJCWlmIChsaXN0X2VtcHR5KCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rKSkgewomIzQzOwkJCQlyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTsKJiM0MzsJCQkJbGlzdF9hZGRfdGFpbCgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaywgJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKTsKJiM0MzsJCQl9CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cngtJmd0O3JlY3Ztc2dfbG9jayk7CiYjNDM7CiYjNDM7CQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKJiM0MzsJCQkJX2RlYnVnKCYjMzQ7Y2FsbCAlcHMmIzM0Oywgc2stJmd0O3NrX2RhdGFfcmVhZHkpOwomIzQzOwkJCQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXIKJiM0MzsgKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuCiYjNDM7ICovCiYjNDM7dm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKQomIzQzO3sKJiM0MzsJaWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkpIHsKJiM0MzsJCXJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlfX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7CiYjNDM7fQomIzQzOwogLyoKICAqIFRyYW5zaXRpb24gYSBjYWxsIHRvIHRoZSBjb21wbGV0ZSBzdGF0ZS4KICAqLwpAQCAtMjUsNyAmIzQzOzgwLDcgQEAgYm9vbCByeHJwY19zZXRfY2FsbF9jb21wbGV0aW9uKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCXJ4cnBjX3NldF9jYWxsX3N0YXRlKGNhbGwsIFJYUlBDX0NBTExfQ09NUExFVEUpOwogCXRyYWNlX3J4cnBjX2NhbGxfY29tcGxldGUoY2FsbCk7CiAJd2FrZV91cCgmYW1wO2NhbGwtJmd0O3dhaXRxKTsKLQlyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpOwomIzQzOwlfX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7CiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmMKaW5kZXggNDg1MTlmMGRlMTg1MzkuLjVjYmZhN2IyMjNlMDExIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvY29ubl9jbGllbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY29ubl9jbGllbnQuYwpAQCAtODEsNiAmIzQzOzgxLDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19idW5kbGUgKnJ4cnBjX2FsbG9jX2J1bmRsZShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKIAkJYnVuZGxlLSZndDtsb2NhbAkJPSBjYWxsLSZndDtsb2NhbDsKIAkJYnVuZGxlLSZndDtwZWVyCQk9IHJ4cnBjX2dldF9wZWVyKGNhbGwtJmd0O3BlZXIsIHJ4cnBjX3BlZXJfZ2V0X2J1bmRsZSk7CiAJCWJ1bmRsZS0mZ3Q7a2V5CQk9IGtleV9nZXQoY2FsbC0mZ3Q7a2V5KTsKJiM0MzsJCWJ1bmRsZS0mZ3Q7YXBwX2RhdGEJPSBrZXlfZ2V0KGNhbGwtJmd0O2FwcF9kYXRhKTsKIAkJYnVuZGxlLSZndDtzZWN1cml0eQk9IGNhbGwtJmd0O3NlY3VyaXR5OwogCQlidW5kbGUtJmd0O2V4Y2x1c2l2ZQk9IHRlc3RfYml0KFJYUlBDX0NBTExfRVhDTFVTSVZFLCAmYW1wO2NhbGwtJmd0O2ZsYWdzKTsKIAkJYnVuZGxlLSZndDt1cGdyYWRlCQk9IHRlc3RfYml0KFJYUlBDX0NBTExfVVBHUkFERSwgJmFtcDtjYWxsLSZndDtmbGFncyk7CkBAIC0xMTgsNiAmIzQzOzExOSw3IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX2ZyZWVfYnVuZGxlKHN0cnVjdCByeHJwY19idW5kbGUgKmJ1bmRsZSkKIAl3cml0ZV91bmxvY2soJmFtcDtidW5kbGUtJmd0O2xvY2FsLSZndDtyeG5ldC0mZ3Q7Y29ubl9sb2NrKTsKIAlyeHJwY19wdXRfcGVlcihidW5kbGUtJmd0O3BlZXIsIHJ4cnBjX3BlZXJfcHV0X2J1bmRsZSk7CiAJa2V5X3B1dChidW5kbGUtJmd0O2tleSk7CiYjNDM7CWtleV9wdXQoYnVuZGxlLSZndDthcHBfZGF0YSk7CiAJa2ZyZWUoYnVuZGxlKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuYyBiL25ldC9yeHJwYy9jb25uX2V2ZW50LmMKaW5kZXggNjExYzc5MGJjNmQwY2UuLjkxNDZiOWQ0YzJhYzUwIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvY29ubl9ldmVudC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9jb25uX2V2ZW50LmMKQEAgLTI3OSwxMCAmIzQzOzI3OSw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJvY2Vzc19ldmVudChzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAogCXN3aXRjaCAoc3AtJmd0O2hkci50eXBlKSB7CiAJY2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0U6Ci0JCXJldCA9IGNvbm4tJmd0O3NlY3VyaXR5LSZndDtyZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBza2IpOwotCQlzcC0mZ3Q7Y2hhbGwuY29ubiA9IE5VTEw7Ci0JCXJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7Ci0JCXJldHVybiByZXQ7CiYjNDM7CQlyZXR1cm4gY29ubi0mZ3Q7c2VjdXJpdHktJmd0O3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIHNrYik7CiAKIAljYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX1JFU1BPTlNFOgogCQlzcGluX2xvY2tfaXJxKCZhbXA7Y29ubi0mZ3Q7c3RhdGVfbG9jayk7CkBAIC00MjUsNjYgJiM0Mzs0MjIsNiBAQCBzdGF0aWMgdm9pZCByeHJwY19wb3N0X3BhY2tldF90b19jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCXJ4cnBjX3F1ZXVlX2Nvbm4oY29ubiwgcnhycGNfY29ubl9xdWV1ZV9yeF93b3JrKTsKIH0KIAotLyoKLSAqIFBvc3QgYSBDSEFMTEVOR0UgcGFja2V0IHRvIHRoZSBzb2NrZXQgb2Ygb25lIG9mIGEgY29ubmVjdGlvbiYjMzk7cyBjYWxscyBzbyB0aGF0Ci0gKiBpdCBjYW4gZ2V0IGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2V0LCBwb3NzaWJseSBxdWVyeWluZwotICogdXNlcnNwYWNlLgotICovCi1zdGF0aWMgYm9vbCByeHJwY19wb3N0X2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKLQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7Ci0Jc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwgPSBOVUxMOwotCXN0cnVjdCByeHJwY19zb2NrICpyeDsKLQlib29sIHJlc3BvbmQgPSBmYWxzZSwgcXVldWVkID0gZmFsc2U7Ci0KLQlzcC0mZ3Q7Y2hhbGwuY29ubiA9Ci0JCXJ4cnBjX2dldF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fZ2V0X2NoYWxsZW5nZV9pbnB1dCk7Ci0KLQlpZiAoIWNvbm4tJmd0O3NlY3VyaXR5LSZndDtjaGFsbGVuZ2VfdG9fcmVjdm1zZykgewotCQlyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCWZvciAoaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShjb25uLSZndDtjaGFubmVscyk7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChjb25uLSZndDtjaGFubmVsc1tpXS5jYWxsKSB7Ci0JCQljYWxsID0gY29ubi0mZ3Q7Y2hhbm5lbHNbaV0uY2FsbDsKLQkJCXJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtJmd0O3NvY2tldCk7Ci0JCQlpZiAoIXJ4KSB7Ci0JCQkJY2FsbCA9IE5VTEw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCXJlc3BvbmQgPSB0cnVlOwotCQkJaWYgKHRlc3RfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCAmYW1wO3J4LSZndDtmbGFncykpCi0JCQkJYnJlYWs7Ci0JCQljYWxsID0gTlVMTDsKLQkJfQotCX0KLQotCWlmICghcmVzcG9uZCkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTsKLQkJc3AtJmd0O2NoYWxsLmNvbm4gPSBOVUxMOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGNhbGwpCi0JCXF1ZXVlZCA9IHJ4cnBjX25vdGlmeV9zb2NrZXRfb29iKGNhbGwsIHNrYik7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JaWYgKGNhbGwgJmFtcDsmYW1wOyAhcXVldWVkKSB7Ci0JCXJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7Ci0JCXNwLSZndDtjaGFsbC5jb25uID0gTlVMTDsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmICghY2FsbCkKLQkJcnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpOwotCXJldHVybiB0cnVlOwotfQotCiAvKgogICogSW5wdXQgYSBjb25uZWN0aW9uLWxldmVsIHBhY2tldC4KICAqLwpAQCAtNTEzLDcgJiM0Mzs0NTAsOCBAQCBib29sIHJ4cnBjX2lucHV0X2Nvbm5fcGFja2V0KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQl9CiAJCWlmICghY29ubi0mZ3Q7c2VjdXJpdHktJmd0O3ZhbGlkYXRlX2NoYWxsZW5nZShjb25uLCBza2IpKQogCQkJcmV0dXJuIGZhbHNlOwotCQlyZXR1cm4gcnhycGNfcG9zdF9jaGFsbGVuZ2UoY29ubiwgc2tiKTsKJiM0MzsJCXJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTsKJiM0MzsJCXJldHVybiB0cnVlOwogCiAJY2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRToKIAkJaWYgKHJ4cnBjX2lzX2Nvbm5fYWJvcnRlZChjb25uKSkgewpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2tleS5jIGIvbmV0L3J4cnBjL2tleS5jCmluZGV4IGEwYWE3OGQ4OTI4OTdmLi4xNmJhYjcyZTZmMDc3NyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2tleS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9rZXkuYwpAQCAtODkzLDMgJiM0Mzs4OTMsNDAgQEAgc3RhdGljIGxvbmcgcnhycGNfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksCiAJX2xlYXZlKCYjMzQ7ID0gJXp1JiMzNDssIHNpemUpOwogCXJldHVybiBzaXplOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkgLSBRdWVyeSBwYXJhbWV0ZXJzIGZyb20gYW4gcnhycGMga2V5CiYjNDM7ICogQGtleTogVGhlIGtleSB0byBxdWVyeQomIzQzOyAqIEBfc2VjdXJpdHlfaW5kZXg6IFdoZXJlIHRvIHJldHVybiB0aGUgc2VjdXJpdHkgaW5kZXgKJiM0MzsgKiBAX2tyYjVfZW5jdHlwZTogV2hlcmUgdG8gcmV0dXJuIHRoZSBrcmI1IGVuY3J5cHRpb24gdHlwZSBpZiBhcHBsaWNhYmxlCiYjNDM7ICoKJiM0MzsgKiBRdWVyeSBhbiByeHJwYyBhdXRoZW50aWNhdGlvbiBrZXksIGV4dHJhY3RpbmcgdGhlIHNlY3VyaXR5IGluZGV4IGZyb20gdGhlCiYjNDM7ICogZmlyc3QgdG9rZW4gdGhlcmVpbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCB1OCAqX3NlY3VyaXR5X2luZGV4LAomIzQzOwkJCSAgICB1MzIgKl9rcmI1X2VuY3R5cGUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnhycGNfa2V5X3Rva2VuICp0b2tlbjsKJiM0MzsKJiM0MzsJdG9rZW4gPSBrZXktJmd0O3BheWxvYWQuZGF0YVswXTsKJiM0MzsJaWYgKCF0b2tlbikgewomIzQzOwkJKl9zZWN1cml0eV9pbmRleCA9IDA7CiYjNDM7CQkqX2tyYjVfZW5jdHlwZSA9IDA7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJKl9zZWN1cml0eV9pbmRleCA9IHRva2VuLSZndDtzZWN1cml0eV9pbmRleDsKJiM0MzsJc3dpdGNoICh0b2tlbi0mZ3Q7c2VjdXJpdHlfaW5kZXgpIHsKJiM0MzsJY2FzZSBSWFJQQ19TRUNVUklUWV9SWEtBRDoKJiM0MzsJCSpfa3JiNV9lbmN0eXBlID0gMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOgomIzQzOwkJKl9rcmI1X2VuY3R5cGUgPSB0b2tlbi0mZ3Q7cnhnay0mZ3Q7ZW5jdHlwZTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJV0FSTl9PTl9PTkNFKDEpOwomIzQzOwkJKl9rcmI1X2VuY3R5cGUgPSAwOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfa2V5KTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9vb2IuYyBiL25ldC9yeHJwYy9vb2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgwZWUyNDg3ZDA5NDEuLjAwMDAwMDAwMDAwMDAwCi0tLSBhL25ldC9yeHJwYy9vb2IuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDM4NyAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKLS8qIE91dCBvZiBiYW5kIG1lc3NhZ2UgaGFuZGxpbmcgKGUuZy4gY2hhbGxlbmdlLXJlc3BvbnNlKQotICoKLSAqIENvcHlyaWdodCAoQykgMjAyNSBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAmIzM0OzogJiMzNDsgZm10Ci0KLSNpbmNsdWRlICZsdDtsaW51eC9uZXQuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9zaWduYWwuaCZndDsKLSNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwotI2luY2x1ZGUgJmx0O25ldC9hZl9yeHJwYy5oJmd0OwotI2luY2x1ZGUgJiMzNDthci1pbnRlcm5hbC5oJiMzNDsKLQotZW51bSByeHJwY19vb2JfY29tbWFuZCB7Ci0JUlhSUENfT09CX0NNRF9VTlNFVCwKLQlSWFJQQ19PT0JfQ01EX1JFU1BPTkQsCi19IF9fbW9kZShieXRlKTsKLQotc3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgewotCXU2NAkJCW9vYl9pZDsJCS8qIElEIG51bWJlciBvZiBtZXNzYWdlIGlmIHJlcGx5ICovCi0JczMyCQkJYWJvcnRfY29kZTsKLQllbnVtIHJ4cnBjX29vYl9jb21tYW5kCWNvbW1hbmQ7Ci0JYm9vbAkJCWhhdmVfb29iX2lkOjE7Ci19OwotCi0vKgotICogUG9zdCBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZQotICogYXNzb2NpYXRlZCB3aXRoIGEgcmVmZXJlbmNlIGNhbGwuCi0gKi8KLWJvb2wgcnhycGNfbm90aWZ5X3NvY2tldF9vb2Ioc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpOwotCXN0cnVjdCByeHJwY19zb2NrICpyeDsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci0JYm9vbCBxdWV1ZWQgPSBmYWxzZTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCXJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtJmd0O3NvY2tldCk7Ci0JaWYgKHJ4KSB7Ci0JCXNrID0gJmFtcDtyeC0mZ3Q7c2s7Ci0JCXNwaW5fbG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKLQotCQlpZiAoc2stJmd0O3NrX3N0YXRlICZsdDsgUlhSUENfQ0xPU0UpIHsKLQkJCXNrYi0mZ3Q7c2tiX21zdGFtcF9ucyA9IHJ4LSZndDtvb2JfaWRfY291bnRlciYjNDM7JiM0Mzs7Ci0JCQlyeHJwY19nZXRfc2tiKHNrYiwgcnhycGNfc2tiX2dldF9wb3N0X29vYik7Ci0JCQlza2JfcXVldWVfdGFpbCgmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEsIHNrYik7Ci0JCQlxdWV1ZWQgPSB0cnVlOwotCi0JCQl0cmFjZV9yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwtJmd0O2RlYnVnX2lkLCBzcC0mZ3Q7aGRyLnNlcmlhbCk7Ci0JCQlpZiAocngtJmd0O2FwcF9vcHMpCi0JCQkJcngtJmd0O2FwcF9vcHMtJmd0O25vdGlmeV9vb2Ioc2ssIHNrYik7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKLQkJaWYgKHF1ZXVlZCAmYW1wOyZhbXA7ICFyeC0mZ3Q7YXBwX29wcyAmYW1wOyZhbXA7ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpCi0JCQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHF1ZXVlZDsKLX0KLQotLyoKLSAqIExvY2F0ZSB0aGUgT09CIG1lc3NhZ2UgdG8gcmVzcG9uZCB0byBieSBpdHMgSUQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfZmluZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHU2NCBvb2JfaWQpCi17Ci0Jc3RydWN0IHJiX25vZGUgKnA7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCXAgPSByeC0mZ3Q7cGVuZGluZ19vb2JxLnJiX25vZGU7Ci0Jd2hpbGUgKHApIHsKLQkJc2tiID0gcmJfZW50cnkocCwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSk7Ci0KLQkJaWYgKG9vYl9pZCAmbHQ7IHNrYi0mZ3Q7c2tiX21zdGFtcF9ucykKLQkJCXAgPSBwLSZndDtyYl9sZWZ0OwotCQllbHNlIGlmIChvb2JfaWQgJmd0OyBza2ItJmd0O3NrYl9tc3RhbXBfbnMpCi0JCQlwID0gcC0mZ3Q7cmJfcmlnaHQ7Ci0JCWVsc2UKLQkJCXJldHVybiBza2I7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBBZGQgYW4gT09CIG1lc3NhZ2UgaW50byB0aGUgcGVuZGluZy1yZXNwb25zZSBzZXQuICBXZSBhbHdheXMgYXNzaWduIHRoZSBuZXh0Ci0gKiB2YWx1ZSBmcm9tIGEgNjQtYml0IGNvdW50ZXIgdG8gdGhlIG9vYl9pZCwgc28ganVzdCBhc3N1bWUgd2UmIzM5O3JlIGFsd2F5cyBnb2luZwotICogdG8gYmUgb24gdGhlIHJpZ2h0LWhhbmQgZWRnZSBvZiB0aGUgdHJlZSBhbmQgdGhhdCB0aGUgY291bnRlciB3b24mIzM5O3Qgd3JhcC4KLSAqIFRoZSB0cmVlIGlzIGFsc28gZ2l2ZW4gYSByZWYgdG8gdGhlIG1lc3NhZ2UuCi0gKi8KLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnBwID0gJmFtcDtyeC0mZ3Q7cGVuZGluZ19vb2JxLnJiX25vZGUsICpwID0gTlVMTDsKLQotCXdoaWxlICgqcHApIHsKLQkJcCA9ICpwcDsKLQkJcHAgPSAmYW1wOygqcHApLSZndDtyYl9yaWdodDsKLQl9Ci0KLQlyYl9saW5rX25vZGUoJmFtcDtza2ItJmd0O3Jibm9kZSwgcCwgcHApOwotCXJiX2luc2VydF9jb2xvcigmYW1wO3NrYi0mZ3Q7cmJub2RlLCAmYW1wO3J4LSZndDtwZW5kaW5nX29vYnEpOwotfQotCi0vKgotICogRXh0cmFjdCBjb250cm9sIG1lc3NhZ2VzIGZyb20gdGhlIHNlbmRtc2coKSBjb250cm9sIGJ1ZmZlci4KLSAqLwotc3RhdGljIGludCByeHJwY19zZW5kbXNnX29vYl9jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgKnApCi17Ci0Jc3RydWN0IGNtc2doZHIgKmNtc2c7Ci0JaW50IGxlbjsKLQotCWlmIChtc2ctJmd0O21zZ19jb250cm9sbGVuID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yX2VhY2hfY21zZ2hkcihjbXNnLCBtc2cpIHsKLQkJaWYgKCFDTVNHX09LKG1zZywgY21zZykpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlsZW4gPSBjbXNnLSZndDtjbXNnX2xlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcik7Ci0JCV9kZWJ1ZygmIzM0O0NNU0cgJWQsICVkLCAlZCYjMzQ7LAotCQkgICAgICAgY21zZy0mZ3Q7Y21zZ19sZXZlbCwgY21zZy0mZ3Q7Y21zZ190eXBlLCBsZW4pOwotCi0JCWlmIChjbXNnLSZndDtjbXNnX2xldmVsICE9IFNPTF9SWFJQQykKLQkJCWNvbnRpbnVlOwotCi0JCXN3aXRjaCAoY21zZy0mZ3Q7Y21zZ190eXBlKSB7Ci0JCWNhc2UgUlhSUENfT09CX0lEOgotCQkJaWYgKGxlbiAhPSBzaXplb2YocC0mZ3Q7b29iX2lkKSB8fCBwLSZndDtoYXZlX29vYl9pZCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCW1lbWNweSgmYW1wO3AtJmd0O29vYl9pZCwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YocC0mZ3Q7b29iX2lkKSk7Ci0JCQlwLSZndDtoYXZlX29vYl9pZCA9IHRydWU7Ci0JCQlicmVhazsKLQkJY2FzZSBSWFJQQ19SRVNQT05EOgotCQkJaWYgKHAtJmd0O2NvbW1hbmQgIT0gUlhSUENfT09CX0NNRF9VTlNFVCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXAtJmd0O2NvbW1hbmQgPSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ7Ci0JCQlicmVhazsKLQkJY2FzZSBSWFJQQ19BQk9SVDoKLQkJCWlmIChsZW4gIT0gc2l6ZW9mKHAtJmd0O2Fib3J0X2NvZGUpIHx8IHAtJmd0O2Fib3J0X2NvZGUpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1jcHkoJmFtcDtwLSZndDthYm9ydF9jb2RlLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZihwLSZndDthYm9ydF9jb2RlKSk7Ci0JCQlpZiAocC0mZ3Q7YWJvcnRfY29kZSA9PSAwKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlhSUENfUkVTUF9SWEdLX0FQUERBVEE6Ci0JCQlpZiAocC0mZ3Q7Y29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0Jc3dpdGNoIChwLSZndDtjb21tYW5kKSB7Ci0JY2FzZSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQ6Ci0JCWlmICghcC0mZ3Q7aGF2ZV9vb2JfaWQpCi0JCQlyZXR1cm4gLUVCQURTTFQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogQWxsb3cgdXNlcnNwYWNlIHRvIHJlc3BvbmQgdG8gYW4gT09CIHVzaW5nIHNlbmRtc2coKS4KLSAqLwotc3RhdGljIGludCByeHJwY19yZXNwb25kX3RvX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsCi0JCQkJc3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgKnAsCi0JCQkJc3RydWN0IG1zZ2hkciAqbXNnKQotewotCXN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uOwotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3A7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgcmV0OwotCi0Jc2tiID0gcnhycGNfZmluZF9wZW5kaW5nX29vYihyeCwgcC0mZ3Q7b29iX2lkKTsKLQlpZiAoc2tiKQotCQlyYl9lcmFzZSgmYW1wO3NrYi0mZ3Q7cmJub2RlLCAmYW1wO3J4LSZndDtwZW5kaW5nX29vYnEpOwotCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRUJBRFNMVDsKLQotCXNwID0gcnhycGNfc2tiKHNrYik7Ci0KLQlzd2l0Y2ggKHAtJmd0O2NvbW1hbmQpIHsKLQljYXNlIFJYUlBDX09PQl9DTURfUkVTUE9ORDoKLQkJcmV0ID0gLUVQUk9UTzsKLQkJaWYgKHNrYi0mZ3Q7bWFyayAhPSBSWFJQQ19PT0JfQ0hBTExFTkdFKQotCQkJYnJlYWs7Ci0JCWNvbm4gPSBzcC0mZ3Q7Y2hhbGwuY29ubjsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWlmICghY29ubi0mZ3Q7c2VjdXJpdHktJmd0O3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpCi0JCQlicmVhazsKLQkJaWYgKHAtJmd0O2Fib3J0X2NvZGUpIHsKLQkJCXJ4cnBjX2Fib3J0X2Nvbm4oY29ubiwgTlVMTCwgcC0mZ3Q7YWJvcnRfY29kZSwgLUVDT05OQUJPUlRFRCwKLQkJCQkJIHJ4cnBjX2Fib3J0X3Jlc3BvbnNlX3NlbmRtc2cpOwotCQkJcmV0ID0gMDsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IGNvbm4tJmd0O3NlY3VyaXR5LSZndDtzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHNrYiwgbXNnKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKHNrYi0mZ3Q7bWFyaykgewotCWNhc2UgUlhSUENfT09CX0NIQUxMRU5HRToKLQkJcnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtJmd0O2NoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7Ci0JCWJyZWFrOwotCX0KLQlyeHJwY19mcmVlX3NrYihza2IsIHJ4cnBjX3NrYl9wdXRfb29iKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogU2VuZCBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlIG9yIHJlc3BvbmQgdG8gYSByZWNlaXZlZCBvdXQtb2YtYmFuZCBtZXNzYWdlLgotICogLSBjYWxsZXIgZ2l2ZXMgdXMgdGhlIHNvY2tldCBsb2NrCi0gKiAtIHRoZSBzb2NrZXQgbWF5IGJlIGVpdGhlciBhIGNsaWVudCBzb2NrZXQgb3IgYSBzZXJ2ZXIgc29ja2V0Ci0gKi8KLWludCByeHJwY19zZW5kbXNnX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyBwID0ge307Ci0JaW50IHJldDsKLQotCV9lbnRlcigmIzM0OyYjMzQ7KTsKLQotCXJldCA9IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2cobXNnLCAmYW1wO3ApOwotCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIGVycm9yX3JlbGVhc2Vfc29jazsKLQotCWlmIChwLmhhdmVfb29iX2lkKQotCQlyZXR1cm4gcnhycGNfcmVzcG9uZF90b19vb2IocngsICZhbXA7cCwgbXNnKTsKLQotCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7Ci0KLQlzd2l0Y2ggKHAuY29tbWFuZCkgewotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7Ci0JcmV0dXJuIHJldDsKLQotZXJyb3JfcmVsZWFzZV9zb2NrOgotCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiByeHJwY19rZXJuZWxfcXVlcnlfb29iIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZQotICogQG9vYjogVGhlIG1lc3NhZ2UgdG8gcXVlcnkKLSAqIEBfcGVlcjogV2hlcmUgdG8gcmV0dXJuIHRoZSBwZWVyIHJlY29yZAotICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmQKLSAqCi0gKiBFeHRyYWN0IHVzZWZ1bCBwYXJhbWV0ZXJzIGZyb20gYW4gb3V0LW9mLWJhbmQgbWVzc2FnZS4gIFRoZSBzb3VyY2UgcGVlcgotICogcGFyYW1ldGVycyBhcmUgcmV0dXJuZWQgdGhyb3VnaCB0aGUgYXJndW1lbnQgbGlzdCBhbmQgdGhlIG1lc3NhZ2UgdHlwZSBpcwotICogcmV0dXJuZWQuCi0gKgotICogUmV0dXJuOgotICogKiAlUlhSUENfT09CX0NIQUxMRU5HRSAtIENoYWxsZW5nZSB3YW50aW5nIGEgcmVzcG9uc2UuCi0gKi8KLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLAotCQkJCQkgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLAotCQkJCQkgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTsKLQllbnVtIHJ4cnBjX29vYl90eXBlIHR5cGUgPSBvb2ItJmd0O21hcms7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6Ci0JCSpfcGVlcgkJPSBzcC0mZ3Q7Y2hhbGwuY29ubi0mZ3Q7cGVlcjsKLQkJKl9wZWVyX2FwcGRhdGEJPSBzcC0mZ3Q7Y2hhbGwuY29ubi0mZ3Q7cGVlci0mZ3Q7YXBwX2RhdGE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT05fT05DRSgxKTsKLQkJKl9wZWVyCQk9IE5VTEw7Ci0JCSpfcGVlcl9hcHBkYXRhCT0gMDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHR5cGU7Ci19Ci1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2IpOwotCi0vKioKLSAqIHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYiAtIERlcXVldWUgYW5kIHJldHVybiB0aGUgZnJvbnQgT09CIG1lc3NhZ2UKLSAqIEBzb2NrOiBUaGUgc29ja2V0IHRvIHF1ZXJ5Ci0gKiBAX3R5cGU6IFdoZXJlIHRvIHJldHVybiB0aGUgbWVzc2FnZSB0eXBlCi0gKgotICogRGVxdWV1ZSB0aGUgZnJvbnQgT09CIG1lc3NhZ2UsIGlmIHRoZXJlIGlzIG9uZSwgYW5kIHJldHVybiBpdCBhbmQKLSAqIGl0cyB0eXBlLgotICoKLSAqIFJldHVybjogVGhlIHNrX2J1ZmYgcmVwcmVzZW50aW5nIHRoZSBPT0IgbWVzc2FnZSBvciAlTlVMTCBpZiB0aGUgcXVldWUgd2FzCi0gKiBlbXB0eS4KLSAqLwotc3RydWN0IHNrX2J1ZmYgKnJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQkJCQkgZW51bSByeHJwY19vb2JfdHlwZSAqX3R5cGUpCi17Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay0mZ3Q7c2spOwotCXN0cnVjdCBza19idWZmICpvb2I7Ci0KLQlvb2IgPSBza2JfZGVxdWV1ZSgmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpOwotCWlmIChvb2IpCi0JCSpfdHlwZSA9IG9vYi0mZ3Q7bWFyazsKLQlyZXR1cm4gb29iOwotfQotRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IpOwotCi0vKioKLSAqIHJ4cnBjX2tlcm5lbF9mcmVlX29vYiAtIEZyZWUgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZQotICogQG9vYjogVGhlIE9PQiBtZXNzYWdlIHRvIGZyZWUKLSAqCi0gKiBGcmVlIGFuIE9PQiBtZXNzYWdlIGFsb25nIHdpdGggYW55IHJlc291cmNlcyBpdCBob2xkcy4KLSAqLwotdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYikKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKG9vYik7Ci0KLQlzd2l0Y2ggKG9vYi0mZ3Q7bWFyaykgewotCWNhc2UgUlhSUENfT09CX0NIQUxMRU5HRToKLQkJcnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtJmd0O2NoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7Ci0JCWJyZWFrOwotCX0KLQotCXJ4cnBjX2ZyZWVfc2tiKG9vYiwgcnhycGNfc2tiX3B1dF9wdXJnZV9vb2IpOwotfQotRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfZnJlZV9vb2IpOwotCi0vKioKLSAqIHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSB0aGUgcGFyYW1ldGVycyBvZiBhIGNoYWxsZW5nZQotICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBxdWVyeQotICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkCi0gKiBAX3BlZXJfYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgYXR0YWNoZWQgdG8gYSBwZWVyIHJlY29yZAotICogQF9zZXJ2aWNlX2lkOiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VydmljZSBJRAotICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBjb25uZWN0aW9uIHNlY3VyaXR5IGluZGV4Ci0gKgotICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGEgQ0hBTExFTkdFIG1lc3NhZ2UuCi0gKi8KLXZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAotCQkJCSAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlciwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsCi0JCQkJICB1MTYgKl9zZXJ2aWNlX2lkLCB1OCAqX3NlY3VyaXR5X2luZGV4KQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTsKLQotCSpfcGVlcgkJPSBzcC0mZ3Q7Y2hhbGwuY29ubi0mZ3Q7cGVlcjsKLQkqX3BlZXJfYXBwZGF0YQk9IHNwLSZndDtjaGFsbC5jb25uLSZndDtwZWVyLSZndDthcHBfZGF0YTsKLQkqX3NlcnZpY2VfaWQJPSBzcC0mZ3Q7aGRyLnNlcnZpY2VJZDsKLQkqX3NlY3VyaXR5X2luZGV4ID0gc3AtJmd0O2hkci5zZWN1cml0eUluZGV4OwotfQotRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKTsKLQotLyoqCi0gKiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZSAtIEFsbG93IGEga2VybmVsIHNlcnZpY2UgdG8gcmVqZWN0IGEgY2hhbGxlbmdlCi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIGJlIHJlamVjdGVkCi0gKiBAYWJvcnRfY29kZTogVGhlIGFib3J0IGNvZGUgdG8gc3RpY2sgaW50byB0aGUgQUJPUlQgcGFja2V0Ci0gKiBAZXJyb3I6IExvY2FsIGVycm9yIHZhbHVlCi0gKiBAd2h5OiBJbmRpY2F0aW9uIGFzIHRvIHdoeS4KLSAqCi0gKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHJlamVjdCBhIGNoYWxsZW5nZSBieSBhYm9ydGluZyB0aGUgY29ubmVjdGlvbiBpZgotICogaXQmIzM5O3Mgc3RpbGwgaW4gYW4gYWJvcnRhYmxlIHN0YXRlLiAgVGhlIGVycm9yIGlzIHJldHVybmVkIHNvIHRoaXMgZnVuY3Rpb24KLSAqIGNhbiBiZSB1c2VkIHdpdGggYSByZXR1cm4gc3RhdGVtZW50LgotICoKLSAqIFJldHVybjogVGhlICVlcnJvciBwYXJhbWV0ZXIuCi0gKi8KLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSwKLQkJCQkgIGludCBlcnJvciwgZW51bSByeHJwY19hYm9ydF9yZWFzb24gd2h5KQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTsKLQotCV9lbnRlcigmIzM0O3sleH0sJWQsJWQsJXUmIzM0Oywgc3AtJmd0O2hkci5zZXJpYWwsIGFib3J0X2NvZGUsIGVycm9yLCB3aHkpOwotCi0JcnhycGNfYWJvcnRfY29ubihzcC0mZ3Q7Y2hhbGwuY29ubiwgTlVMTCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7Ci0JcmV0dXJuIGVycm9yOwotfQotRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZSk7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcmVjdm1zZy5jIGIvbmV0L3J4cnBjL3JlY3Ztc2cuYwppbmRleCBlZmNiYTRiMmU3NGYwYy4uNWI4YzdmNTczYjdmNWEgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9yZWN2bXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3JlY3Ztc2cuYwpAQCAtMTcsMTMgJiM0MzsxNywxMiBAQAogI2luY2x1ZGUgJiMzNDthci1pbnRlcm5hbC5oJiMzNDsKIAogLyoKLSAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXIKLSAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS4KJiM0MzsgKiBSZXF1ZXVlIGEgY2FsbCBmb3IgcmVjdm1zZygpIHRvIHBpY2sgdXAuCiAgKi8KLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKJiM0MztzdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiB7Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4OwotCXN0cnVjdCBzb2NrICpzazsKJiM0MzsJc3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay0mZ3Q7c2spOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3J4LSZndDtzazsKIAogCV9lbnRlcigmIzM0OyVkJiMzNDssIGNhbGwtJmd0O2RlYnVnX2lkKTsKIApAQCAtMzIsMzEgJiM0MzszMSwxOCBAQCB2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiAJCXJldHVybjsKIAl9CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLSZndDtzb2NrZXQpOwotCXNrID0gJmFtcDtyeC0mZ3Q7c2s7Ci0JaWYgKHJ4ICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICZsdDsgUlhSUENfQ0xPU0UpIHsKLQkJaWYgKGNhbGwtJmd0O25vdGlmeV9yeCkgewotCQkJc3Bpbl9sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKLQkJCWNhbGwtJmd0O25vdGlmeV9yeChzaywgY2FsbCwgY2FsbC0mZ3Q7dXNlcl9jYWxsX0lEKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fbG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKLQkJCWlmIChsaXN0X2VtcHR5KCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rKSkgewotCQkJCXJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpOwotCQkJCWxpc3RfYWRkX3RhaWwoJmFtcDtjYWxsLSZndDtyZWN2bXNnX2xpbmssICZhbXA7cngtJmd0O3JlY3Ztc2dfcSk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaykpIHsKJiM0MzsJCXJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaywgJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKIAotCQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKLQkJCQlfZGVidWcoJiMzNDtjYWxsICVwcyYjMzQ7LCBzay0mZ3Q7c2tfZGF0YV9yZWFkeSk7Ci0JCQkJc2stJmd0O3NrX2RhdGFfcmVhZHkoc2spOwotCQkJfQotCQl9CiYjNDM7CWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7CiYjNDM7CQlfZGVidWcoJiMzNDtjYWxsICVwcyYjMzQ7LCBzay0mZ3Q7c2tfZGF0YV9yZWFkeSk7CiYjNDM7CQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiAJfQogCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJX2xlYXZlKCYjMzQ7JiMzNDspOwogfQogCkBAIC0yMTUsNjEgJiM0MzsyMDEsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfdXNlcl9pZChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IG1zZ2hkciAqbXNnLAogCX0KIH0KIAotLyoKLSAqIERlYWwgd2l0aCBhIENIQUxMRU5HRSBwYWNrZXQuCi0gKi8KLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19jaGFsbGVuZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAotCQkJCSAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsIHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7Ci0Jc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4gPSBzcC0mZ3Q7Y2hhbGwuY29ubjsKLQotCXJldHVybiBjb25uLSZndDtzZWN1cml0eS0mZ3Q7Y2hhbGxlbmdlX3RvX3JlY3Ztc2coY29ubiwgY2hhbGxlbmdlLCBtc2cpOwotfQotCi0vKgotICogUHJvY2VzcyBPT0IgcGFja2V0cy4gIENhbGxlZCB3aXRoIHRoZSBzb2NrZXQgbG9ja2VkLgotICovCi1zdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKLQkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKQotewotCXN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stJmd0O3NrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWJvb2wgbmVlZF9yZXNwb25zZSA9IGZhbHNlOwotCWludCByZXQ7Ci0KLQlza2IgPSBza2JfcGVlaygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVBR0FJTjsKLQlyeHJwY19zZWVfc2tiKHNrYiwgcnhycGNfc2tiX3NlZV9yZWN2bXNnKTsKLQotCXJldCA9IHB1dF9jbXNnKG1zZywgU09MX1JYUlBDLCBSWFJQQ19PT0JfSUQsIHNpemVvZih1NjQpLAotCQkgICAgICAgJmFtcDtza2ItJmd0O3NrYl9tc3RhbXBfbnMpOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc3dpdGNoICgoZW51bSByeHJwY19vb2JfdHlwZSlza2ItJmd0O21hcmspIHsKLQljYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6Ci0JCW5lZWRfcmVzcG9uc2UgPSB0cnVlOwotCQlyZXQgPSByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzb2NrLCBtc2csIHNrYiwgZmxhZ3MpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OQ0UoMSwgJiMzNDtyZWN2bXNnKCkgY2FuJiMzOTt0IHByb2Nlc3MgdW5rbm93biBPT0IgdHlwZSAldVxuJiMzNDssCi0JCQkgIHNrYi0mZ3Q7bWFyayk7Ci0JCXJldCA9IC1FSU87Ci0JCWJyZWFrOwotCX0KLQotCWlmICghKGZsYWdzICZhbXA7IE1TR19QRUVLKSkgewotCQlza2JfdW5saW5rKHNrYiwgJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKTsKLQkJaWYgKG5lZWRfcmVzcG9uc2UpCi0JCQlyeHJwY19hZGRfcGVuZGluZ19vb2IocngsIHNrYik7Ci0JCWVsc2UKLQkJCXJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogRGVsaXZlciBtZXNzYWdlcyB0byBhIGNhbGwuICBUaGlzIGtlZXBzIHByb2Nlc3NpbmcgcGFja2V0cyB1bnRpbCB0aGUgYnVmZmVyCiAgKiBpcyBmaWxsZWQgYW5kIHdlIGZpbmQgZWl0aGVyIG1vcmUgREFUQSAocmV0dXJucyAwKSBvciB0aGUgZW5kIG9mIHRoZSBEQVRBCkBAIC0yODEsNyAmIzQzOzIxMiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzLCBzaXplX3QgKl9vZmZzZXQpCiB7CiAJc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDsKLQlzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLSZndDtzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlyeHJwY19zZXFfdCBzZXEgPSAwOwogCXNpemVfdCByZW1haW47CkBAIC0zNzYsMTMgJiM0MzszMDYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKIAogCQlpZiAoIShmbGFncyAmYW1wOyBNU0dfUEVFSykpCiAJCQlyeHJwY19yb3RhdGVfcnhfd2luZG93KGNhbGwpOwotCi0JCWlmICghcngtJmd0O2FwcF9vcHMgJmFtcDsmYW1wOwotCQkgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSB7Ci0JCQl0cmFjZV9yeHJwY19yZWN2ZGF0YShjYWxsLCByeHJwY19yZWN2bXNnX29vYnEsIHNlcSwKLQkJCQkJICAgICByeF9wa3Rfb2Zmc2V0LCByeF9wa3RfbGVuLCByZXQpOwotCQkJYnJlYWs7Ci0JCX0KIAl9CiAKIG91dDoKQEAgLTQxOSw3ICYjNDM7MzQyLDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCiAJdHJhY2VfcnhycGNfcmVjdm1zZygwLCByeHJwY19yZWN2bXNnX2VudGVyLCAwKTsKIAotCWlmIChmbGFncyAmYW1wOyAoTVNHX09PQiB8IE1TR19UUlVOQykpCiYjNDM7CWlmIChmbGFncyAmYW1wOyBNU0dfVFJVTkMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXRpbWVvID0gc29ja19yY3Z0aW1lbygmYW1wO3J4LSZndDtzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKQEAgLTQzMCwxNCAmIzQzOzM1MywxMiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJLyogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIGEgY2xpZW50IHNvY2tldCBoYXMgbm8gb3V0c3RhbmRpbmcgY2FsbHMgKi8KIAlpZiAoUkJfRU1QVFlfUk9PVCgmYW1wO3J4LSZndDtjYWxscykgJmFtcDsmYW1wOwogCSAgICBsaXN0X2VtcHR5KCZhbXA7cngtJmd0O3JlY3Ztc2dfcSkgJmFtcDsmYW1wOwotCSAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKSAmYW1wOyZhbXA7CiAJICAgIHJ4LSZndDtzay5za19zdGF0ZSAhPSBSWFJQQ19TRVJWRVJfTElTVEVOSU5HKSB7CiAJCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCWlmIChsaXN0X2VtcHR5KCZhbXA7cngtJmd0O3JlY3Ztc2dfcSkgJmFtcDsmYW1wOwotCSAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKSkgewomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO3J4LSZndDtyZWN2bXNnX3EpKSB7CiAJCXJldCA9IC1FV09VTERCTE9DSzsKIAkJaWYgKHRpbWVvID09IDApIHsKIAkJCWNhbGwgPSBOVUxMOwpAQCAtNDUzLDggJiM0MzszNzQsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCWlmIChyZXQpCiAJCQlnb3RvIHdhaXRfZXJyb3I7CiAKLQkJaWYgKGxpc3RfZW1wdHkoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKSAmYW1wOyZhbXA7Ci0JCSAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19vb2JxKSkgewomIzQzOwkJaWYgKGxpc3RfZW1wdHkoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKSkgewogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJCWdvdG8gd2FpdF9pbnRlcnJ1cHRlZDsKIAkJCXRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ193YWl0LCAwKTsKQEAgLTQ2NCwxNSAmIzQzOzM4NCw2IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJZ290byB0cnlfYWdhaW47CiAJfQogCi0JLyogRGVhbCB3aXRoIE9PQiBtZXNzYWdlcyBiZWZvcmUgd2UgY29uc2lkZXIgZ2V0dGluZyBub3JtYWwgZGF0YS4gKi8KLQlpZiAoIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSB7Ci0JCXJldCA9IHJ4cnBjX3JlY3Ztc2dfb29iKHNvY2ssIG1zZywgZmxhZ3MpOwotCQlyZWxlYXNlX3NvY2soJmFtcDtyeC0mZ3Q7c2spOwotCQlpZiAocmV0ID09IC1FQUdBSU4pCi0JCQlnb3RvIHRyeV9hZ2FpbjsKLQkJZ290byBlcnJvcl90cmFjZTsKLQl9Ci0KIAkvKiBGaW5kIHRoZSBuZXh0IGNhbGwgYW5kIGRlcXVldWUgaXQgaWYgd2UmIzM5O3JlIG5vdCBqdXN0IHBlZWtpbmcuICBJZiB3ZQogCSAqIGRvIGRlcXVldWUgaXQsIHRoYXQgY29tZXMgd2l0aCBhIHJlZiB0aGF0IHdlIHdpbGwgbmVlZCB0byByZWxlYXNlLgogCSAqIFdlIGFsc28gd2FudCB0byB3ZWVkIG91dCBjYWxscyB0aGF0IGdvdCByZXF1ZXVlZCB3aGlsc3Qgd2Ugd2VyZQpAQCAtNDgzLDggJiM0MzszOTQsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJY2FsbCA9IGxpc3RfZW50cnkobCwgc3RydWN0IHJ4cnBjX2NhbGwsIHJlY3Ztc2dfbGluayk7CiAKIAlpZiAoIXJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgJmFtcDsmYW1wOwotCSAgICBza2JfcXVldWVfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX3F1ZXVlKSAmYW1wOyZhbXA7Ci0JICAgIHNrYl9xdWV1ZV9lbXB0eSgmYW1wO3J4LSZndDtyZWN2bXNnX29vYnEpKSB7CiYjNDM7CSAgICBza2JfcXVldWVfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX3F1ZXVlKSkgewogCQlsaXN0X2RlbF9pbml0KCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cngtJmd0O3JlY3Ztc2dfbG9jayk7CiAJCXJlbGVhc2Vfc29jaygmYW1wO3J4LSZndDtzayk7CkBAIC01NjEsNyAmIzQzOzQ3MSw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAogCWlmICghKGZsYWdzICZhbXA7IE1TR19QRUVLKSAmYW1wOyZhbXA7CiAJICAgICFza2JfcXVldWVfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX3F1ZXVlKSkKLQkJcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKJiM0MzsJCXJ4cnBjX3JlcXVldWVfY2FsbChzb2NrLCBjYWxsKTsKIAlnb3RvIG5vdF95ZXRfY29tcGxldGU7CiAKIGNhbGxfZmFpbGVkOgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmMKaW5kZXggNzdhNjdhY2UxZDI0ODEuLmI5ZWZlZWMxNDVkZDE3IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvcnhnay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9yeGdrLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tleS10eXBlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2tleXMvdXNlci10eXBlLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2FyLWludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtyeGdrX2NvbW1vbi5oJiMzNDsKIApAQCAtNzM0LDM3ICYjNDM7NzM1LDYgQEAgc3RhdGljIGJvb2wgcnhna192YWxpZGF0ZV9jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qKgotICogcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlIC0gUXVlcnkgUnhHSy1zcGVjaWZpYyBjaGFsbGVuZ2UgcGFyYW1ldGVycwotICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSBwYWNrZXQgdG8gcXVlcnkKLSAqCi0gKiBSZXR1cm46IFRoZSBLZXJiZXJvcyA1IGVuY29kaW5nIHR5cGUgZm9yIHRoZSBjaGFsbGVuZ2VkIGNvbm5lY3Rpb24uCi0gKi8KLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSkKLXsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7Ci0KLQlyZXR1cm4gc3AtJmd0O2NoYWxsLmNvbm4tJmd0O3J4Z2suZW5jdHlwZTsKLX0KLUVYUE9SVF9TWU1CT0wocnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKTsKLQotLyoKLSAqIEZpbGwgb3V0IHRoZSBjb250cm9sIG1lc3NhZ2UgdG8gcGFzcyB0byB1c2Vyc3BhY2UgdG8gaW5mb3JtIGFib3V0IHRoZQotICogY2hhbGxlbmdlLgotICovCi1zdGF0aWMgaW50IHJ4Z2tfY2hhbGxlbmdlX3RvX3JlY3Ztc2coc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCi0JCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAotCQkJCSAgICAgc3RydWN0IG1zZ2hkciAqbXNnKQotewotCXN0cnVjdCByeGdrX2NoYWxsZW5nZSBjaGFsbDsKLQotCWNoYWxsLmJhc2Uuc2VydmljZV9pZAkJPSBjb25uLSZndDtzZXJ2aWNlX2lkOwotCWNoYWxsLmJhc2Uuc2VjdXJpdHlfaW5kZXgJPSBjb25uLSZndDtzZWN1cml0eV9peDsKLQljaGFsbC5lbmN0eXBlCQkJPSBjb25uLSZndDtyeGdrLmVuY3R5cGU7Ci0KLQlyZXR1cm4gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX0NIQUxMRU5HRUQsIHNpemVvZihjaGFsbCksICZhbXA7Y2hhbGwpOwotfQotCiAvKgogICogSW5zZXJ0IHRoZSByZXF1aXNpdGUgYW1vdW50IG9mIFhEUiBwYWRkaW5nIGZvciB0aGUgbGVuZ3RoIGdpdmVuLgogICovCkBAIC04MzcsNyAmIzQzOzgwNyw3IEBAIHN0YXRpYyBub2lubGluZSBzc2l6ZV90IHJ4Z2tfaW5zZXJ0X3Jlc3BvbnNlX2hlYWRlcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29uCiAgKi8KIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLAotCQkJCQkgICAgY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhLAomIzQzOwkJCQkJICAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhLAogCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlLAogCQkJCQkgICAgc2l6ZV90IG9mZnNldCkKIHsKQEAgLTg1OSwyMCAmIzQzOzgyOSwyMCBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gLUVQUk9UTzsKIAotCWEuYXBwZGF0YV9sZW4gPSBodG9ubChhcHBkYXRhLSZndDtsZW4pOwomIzQzOwlhLmFwcGRhdGFfbGVuID0gaHRvbmwoYXBwZGF0YS0mZ3Q7ZGF0YWxlbik7CiAKIAlyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCAmYW1wO2EsIHNpemVvZihhKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAJb2Zmc2V0ICYjNDM7PSBzaXplb2YoYSk7CiAKLQlpZiAoYXBwZGF0YS0mZ3Q7bGVuKSB7Ci0JCXJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtJmd0O2RhdGEsIGFwcGRhdGEtJmd0O2xlbik7CiYjNDM7CWlmIChhcHBkYXRhLSZndDtkYXRhbGVuKSB7CiYjNDM7CQlyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLSZndDtkYXRhLCBhcHBkYXRhLSZndDtkYXRhbGVuKTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlyZXR1cm4gcmV0OwotCQlvZmZzZXQgJiM0Mzs9IGFwcGRhdGEtJmd0O2xlbjsKJiM0MzsJCW9mZnNldCAmIzQzOz0gYXBwZGF0YS0mZ3Q7ZGF0YWxlbjsKIAotCQlyZXQgPSByeGdrX3BhZF9vdXQocmVzcG9uc2UsIGFwcGRhdGEtJmd0O2xlbiwgb2Zmc2V0KTsKJiM0MzsJCXJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS0mZ3Q7ZGF0YWxlbiwgb2Zmc2V0KTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlyZXR1cm4gcmV0OwogCQlvZmZzZXQgJiM0Mzs9IHJldDsKQEAgLTg5MCw3ICYjNDM7ODYwLDcgQEAgc3RhdGljIHNzaXplX3Qgcnhna19jb25zdHJ1Y3RfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAlyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCAmYW1wO2IsIHNpemVvZihiKSk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7Ci0JcmV0dXJuIHNpemVvZihhKSAmIzQzOyB4ZHJfcm91bmRfdXAoYXBwZGF0YS0mZ3Q7bGVuKSAmIzQzOyBzaXplb2YoYik7CiYjNDM7CXJldHVybiBzaXplb2YoYSkgJiM0MzsgeGRyX3JvdW5kX3VwKGFwcGRhdGEtJmd0O2RhdGFsZW4pICYjNDM7IHNpemVvZihiKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCkBAIC05MjMsNyAmIzQzOzg5Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfZW5jcnlwdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogICovCiBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCQkJCSAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKQomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqYXBwZGF0YSkKIHsKIAlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCwgKnJzcDsKIAlzdHJ1Y3Qgcnhna19jb250ZXh0ICpnazsKQEAgLTkzNiw3ICYjNDM7OTA2LDcgQEAgc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAlpZiAoSVNfRVJSKGdrKSkKIAkJcmV0dXJuIFBUUl9FUlIoZ2spOwogCi0JYXV0aF9sZW4gPSAyMCAmIzQzOyAoNCAmIzQzOyBhcHBkYXRhLSZndDtsZW4pICYjNDM7IDEyICYjNDM7ICgxICYjNDM7IDQpICogNDsKJiM0MzsJYXV0aF9sZW4gPSAyMCAmIzQzOyAoNCAmIzQzOyBhcHBkYXRhLSZndDtkYXRhbGVuKSAmIzQzOyAxMiAmIzQzOyAoMSAmIzQzOyA0KSAqIDQ7CiAJYXV0aHhfbGVuID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKGdrLSZndDtrcmI1LCBLUkI1X0VOQ1JZUFRfTU9ERSwKIAkJCQkJCWF1dGhfbGVuLCAmYW1wO2F1dGhfb2Zmc2V0KTsKIAlsZW4gPSBzaXplb2Yoc3RydWN0IHJ4cnBjX3dpcmVfaGVhZGVyKSAmIzQzOwpAQCAtMTAxMSw2NiAmIzQzOzk4MSwzNiBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogICogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSBwYWNrZXQuCiAgKi8KIHN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKLQkJCQkgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpCiYjNDM7CQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSkKIHsKLQlfZW50ZXIoJiMzNDt7JWQsJXh9JiMzNDssIGNvbm4tJmd0O2RlYnVnX2lkLCBrZXlfc2VyaWFsKGNvbm4tJmd0O2tleSkpOwomIzQzOwlzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCBkdW1teSA9IHt9LCAqYXBwZGF0YSA9ICZhbXA7ZHVtbXk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CV9lbnRlcigmIzM0O3slZCwldSwleCwleH0mIzM0OywKJiM0MzsJICAgICAgIGNvbm4tJmd0O2RlYnVnX2lkLCBjb25uLSZndDtzZXJ2aWNlX2lkLAomIzQzOwkgICAgICAga2V5X3NlcmlhbChjb25uLSZndDtrZXkpLCBrZXlfc2VyaWFsKGNvbm4tJmd0O2J1bmRsZS0mZ3Q7YXBwX2RhdGEpKTsKIAogCWlmIChrZXlfdmFsaWRhdGUoY29ubi0mZ3Q7a2V5KSAmbHQ7IDApCiAJCXJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVQUk9UTywKIAkJCQkJcnhna19hYm9ydF9jaGFsbF9rZXlfZXhwaXJlZCk7CiAKLQlyZXR1cm4gcnhna19jb25zdHJ1Y3RfcmVzcG9uc2UoY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTsKLX0KLQotc3RhdGljIGludCByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlX25vX2FwcGRhdGEoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sCi0JCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKQotewotCXN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307Ci0KLQlyZXR1cm4gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBjaGFsbGVuZ2UsICZhbXA7YXBwZGF0YSk7Ci19Ci0KLS8qKgotICogcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UgLSBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHdpdGggYXBwZGF0YQotICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byByZXNwb25kIHRvCi0gKiBAYXBwZGF0YTogVGhlIGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgUkVTUE9OU0UgYXV0aGVudGljYXRvcgotICoKLSAqIEFsbG93IGEga2VybmVsIGFwcGxpY2F0aW9uIHRvIHJlc3BvbmQgdG8gYSBDSEFMTEVOR0Ugd2l0aCBhcHBsaWNhdGlvbiBkYXRhCi0gKiB0byBiZSBpbmNsdWRlZCBpbiB0aGUgUnhHSyBSRVNQT05TRSBBdXRoZW50aWNhdG9yLgotICoKLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KLSAqLwotaW50IHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCi0JCQkJICAgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpCi17Ci0Jc3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTsKLQotCXJldHVybiByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNzcC0mZ3Q7Y2hhbGwuY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTsKLX0KLUVYUE9SVF9TWU1CT0wocnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpOwotCi0vKgotICogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICBXZSBuZWVkIHRvIHNlZSBpZgotICogdGhlcmUmIzM5O3MgYW4gYXBwZGF0YSB0byBmaXNoIG91dC4KLSAqLwotc3RhdGljIGludCByeGdrX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkJICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpCi17Ci0Jc3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTsKLQlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKLQotCWZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7Ci0JCWlmIChjbXNnLSZndDtjbXNnX2xldmVsICE9IFNPTF9SWFJQQyB8fAotCQkgICAgY21zZy0mZ3Q7Y21zZ190eXBlICE9IFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBKQotCQkJY29udGludWU7Ci0JCWlmIChhcHBkYXRhLmRhdGEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYXBwZGF0YS5kYXRhID0gQ01TR19EQVRBKGNtc2cpOwotCQlhcHBkYXRhLmxlbiA9IGNtc2ctJmd0O2Ntc2dfbGVuIC0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKTsKJiM0MzsJaWYgKGNvbm4tJmd0O2J1bmRsZS0mZ3Q7YXBwX2RhdGEpIHsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWFwcGRhdGEgPSAoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKikKJiM0MzsJCQl1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLSZndDtidW5kbGUtJmd0O2FwcF9kYXRhKTsKJiM0MzsJCWlmIChhcHBkYXRhICZhbXA7JmFtcDsgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2FwcGRhdGEtJmd0O3JlZikpCiYjNDM7CQkJYXBwZGF0YSA9IE5VTEw7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWlmICghYXBwZGF0YSkKJiM0MzsJCQlyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FS0VZUkVWT0tFRCwKJiM0MzsJCQkJCQlyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTsKIAl9CiAKLQlyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCAmYW1wO2FwcGRhdGEpOwomIzQzOwlyZXQgPSByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShjb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpOwomIzQzOwomIzQzOwlpZiAoYXBwZGF0YSAhPSAmYW1wO2R1bW15KQomIzQzOwkJcHV0X3VzZXJfa2V5X3BheWxvYWQoYXBwZGF0YSk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xMzQ2LDkgJiM0MzsxMjg2LDcgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4Z2tfeWZzID0gewogCS5mcmVlX2NhbGxfY3J5cHRvCQk9IHJ4Z2tfZnJlZV9jYWxsX2NyeXB0bywKIAkuaXNzdWVfY2hhbGxlbmdlCQk9IHJ4Z2tfaXNzdWVfY2hhbGxlbmdlLAogCS52YWxpZGF0ZV9jaGFsbGVuZ2UJCT0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsCi0JLmNoYWxsZW5nZV90b19yZWN2bXNnCQk9IHJ4Z2tfY2hhbGxlbmdlX3RvX3JlY3Ztc2csCi0JLnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UJPSByeGdrX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UsCi0JLnJlc3BvbmRfdG9fY2hhbGxlbmdlCQk9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Vfbm9fYXBwZGF0YSwKJiM0MzsJLnJlc3BvbmRfdG9fY2hhbGxlbmdlCQk9IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UsCiAJLnZlcmlmeV9yZXNwb25zZQkJPSByeGdrX3ZlcmlmeV9yZXNwb25zZSwKIAkuY2xlYXIJCQkJPSByeGdrX2NsZWFyLAogCS5kZWZhdWx0X2RlY29kZV90aWNrZXQJCT0gcnhna195ZnNfZGVjb2RlX3RpY2tldCwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGthZC5jIGIvbmV0L3J4cnBjL3J4a2FkLmMKaW5kZXggY2E5ZjBlODJjYjlhYzcuLmU1NWJmY2ExMGUxYTk0IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvcnhrYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcnhrYWQuYwpAQCAtNzQ4LDMyICYjNDM7NzQ4LDYgQEAgc3RhdGljIGludCByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogUnhLQUQgZG9lcyBhdXRvbWF0aWMgcmVzcG9uc2Ugb25seSBhcyB0aGVyZSYjMzk7cyBub3RoaW5nIHRvIG1hbmFnZSB0aGF0IGlzbiYjMzk7dAotICogYWxyZWFkeSBpbiB0aGUga2V5LgotICovCi1zdGF0aWMgaW50IHJ4a2FkX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwKLQkJCQkJICAgICAgc3RydWN0IG1zZ2hkciAqbXNnKQotewotCXJldHVybiAtRUlOVkFMOwotfQotCi0vKioKLSAqIHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSAtIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2Ugd2l0aCBhcHBkYXRhCi0gKiBAY2hhbGxlbmdlOiBUaGUgY2hhbGxlbmdlIHRvIHJlc3BvbmQgdG8KLSAqCi0gKiBBbGxvdyBhIGtlcm5lbCBhcHBsaWNhdGlvbiB0byByZXNwb25kIHRvIGEgQ0hBTExFTkdFLgotICoKLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KLSAqLwotaW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKQotewotCXN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7Ci0KLQlyZXR1cm4gcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLSZndDtjaGFsbC5jb25uLCBjaGFsbGVuZ2UpOwotfQotRVhQT1JUX1NZTUJPTChyeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpOwotCiAvKiBEZWNyeXB0IGRhdGEgaW4tcGxhY2UgdXNpbmcgREVTLVBDQkMuICBAbGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LiAqLwogVklTSUJMRV9JRl9LVU5JVCB2b2lkIGRlc19wY2JjX2RlY3J5cHRfaW5wbGFjZShjb25zdCBzdHJ1Y3QgZGVzX2N0eCAqa2V5LAogCQkJCQkgICAgICAgX19sZTY0IGl2LCB1OCAqZGF0YSwgc2l6ZV90IGxlbikKQEAgLTExMzQsNyAmIzQzOzExMDgsNiBAQCBjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgcnhrYWQgPSB7CiAJLmZyZWVfY2FsbF9jcnlwdG8JCT0gcnhrYWRfZnJlZV9jYWxsX2NyeXB0bywKIAkuaXNzdWVfY2hhbGxlbmdlCQk9IHJ4a2FkX2lzc3VlX2NoYWxsZW5nZSwKIAkudmFsaWRhdGVfY2hhbGxlbmdlCQk9IHJ4a2FkX3ZhbGlkYXRlX2NoYWxsZW5nZSwKLQkuc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZQk9IHJ4a2FkX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UsCiAJLnJlc3BvbmRfdG9fY2hhbGxlbmdlCQk9IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLAogCS52ZXJpZnlfcmVzcG9uc2UJCT0gcnhrYWRfdmVyaWZ5X3Jlc3BvbnNlLAogCS5jbGVhcgkJCQk9IHJ4a2FkX2NsZWFyLApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3NlbmRtc2cuYyBiL25ldC9yeHJwYy9zZW5kbXNnLmMKaW5kZXggZWQyYzlhNTEwMDVhZGUuLmNkZjM1NDQwMzE3ZDZkIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvc2VuZG1zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9zZW5kbXNnLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2tleXMvdXNlci10eXBlLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9hZl9yeHJwYy5oJmd0OwpAQCAtMzIwLDggJiM0MzszMjEsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX2FsbG9jX3R4cXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAkJCSAgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAotCQkJICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsCi0JCQkgICBib29sICpfZHJvcHBlZF9sb2NrKQomIzQzOwkJCSAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KQomIzQzOwlfX3JlbGVhc2VzKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCkKIHsKIAlzdHJ1Y3QgcnhycGNfdHhidWYgKnR4YjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3J4LSZndDtzazsKQEAgLTMzMCwyMyAmIzQzOzMzMSwzMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJYm9vbCBtb3JlID0gbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX01PUkU7CiAJaW50IHJldCwgY29waWVkID0gMDsKIAotCWlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CWlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSkgewogCQl0cmFjZV9yeHJwY19hYm9ydChjYWxsLSZndDtkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsCiAJCQkJICBjYWxsLSZndDtjaWQsIGNhbGwtJmd0O2NhbGxfaWQsIGNhbGwtJmd0O3J4X2NvbnN1bWVkLAogCQkJCSAgMCwgLUVQUk9UTyk7Ci0JCXJldHVybiAtRVBST1RPOwomIzQzOwkJcmV0ID0gLUVQUk9UTzsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwlpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgJmFtcDtjYWxsLSZndDtmbGFncykpKSB7CiYjNDM7CQl0cmFjZV9yeHJwY19hYm9ydChjYWxsLSZndDtkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvciwKJiM0MzsJCQkJICBjYWxsLSZndDtjaWQsIGNhbGwtJmd0O2NhbGxfaWQsIGNhbGwtJmd0O3J4X2NvbnN1bWVkLAomIzQzOwkJCQkgIDAsIC1FSU8pOwomIzQzOwkJcmV0ID0gLUVJTzsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAl0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy0mZ3Q7bXNnX2ZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiAKIAlyZXQgPSByeHJwY193YWl0X3RvX2JlX2Nvbm5lY3RlZChjYWxsLCAmYW1wO3RpbWVvKTsKIAlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmIChjYWxsLSZndDtjb25uLSZndDtzdGF0ZSA9PSBSWFJQQ19DT05OX0NMSUVOVF9VTlNFQ1VSRUQpIHsKIAkJcmV0ID0gcnhycGNfaW5pdF9jbGllbnRfY29ubl9zZWN1cml0eShjYWxsLSZndDtjb25uKTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAkvKiB0aGlzIHNob3VsZCBiZSBpbiBwb2xsICovCkBAIC00NDAsMTIgJiM0Mzs0NDksMjEgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LAogCQkvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCYjMzk7cyBub3cgZnVsbCAqLwogCQlpZiAoIXR4Yi0mZ3Q7c3BhY2UgfHwKIAkJICAgIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCAmYW1wOyZhbXA7ICFtb3JlKSkgewomIzQzOwkJCS8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZAomIzQzOwkJCSAqIGhhdmUgY29ycnVwdGVkIHRoZSB0eGJ1ZiBjb250ZW50IHdpdGggYSBwYXJ0aWFsCiYjNDM7CQkJICogZW5jcnlwdC4gIEFzc3VtZSB0aGF0IEVOT01FTSBpcyByZXRyeWFibGUsIGJ1dAomIzQzOwkJCSAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyZXQgPSBjYWxsLSZndDtzZWN1cml0eS0mZ3Q7c2VjdXJlX3BhY2tldChjYWxsLCB0eGIpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJCWlmIChyZXQgPT0gLUVOT01FTSkKJiM0MzsJCQkJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CQkJCXNldF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgJmFtcDtjYWxsLSZndDtmbGFncyk7CiYjNDM7CQkJCWdvdG8gb3V0X3R4YjsKJiM0MzsJCQl9CiYjNDM7CiAJCQlpZiAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgJmFtcDsmYW1wOyAhbW9yZSkKIAkJCQl0eGItJmd0O2ZsYWdzIHw9IFJYUlBDX0xBU1RfUEFDS0VUOwotCi0JCQlyZXQgPSBjYWxsLSZndDtzZWN1cml0eS0mZ3Q7c2VjdXJlX3BhY2tldChjYWxsLCB0eGIpOwotCQkJaWYgKHJldCAmbHQ7IDApCi0JCQkJZ290byBvdXQ7CiAJCQlyeHJwY19xdWV1ZV9wYWNrZXQocngsIGNhbGwsIHR4Yiwgbm90aWZ5X2VuZF90eCk7CiAJCQl0eGIgPSBOVUxMOwogCQl9CkBAIC00NTMsNDggJiM0Mzs0NzEsNTggQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LAogCiBzdWNjZXNzOgogCXJldCA9IGNvcGllZDsKLQlpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSAmYW1wOyZhbXA7Ci0JICAgIGNhbGwtJmd0O2Vycm9yICZsdDsgMCkKLQkJcmV0ID0gY2FsbC0mZ3Q7ZXJyb3I7Ci1vdXQ6CiYjNDM7b3V0X3R4YjoKIAljYWxsLSZndDt0eF9wZW5kaW5nID0gdHhiOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7CiAJcmV0dXJuIHJldDsKIAogY2FsbF90ZXJtaW5hdGVkOgogCXJ4cnBjX3B1dF90eGJ1Zih0eGIsIHJ4cnBjX3R4YnVmX3B1dF9zZW5kX2Fib3J0ZWQpOwotCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIGNhbGwtJmd0O2Vycm9yKTsKLQlyZXR1cm4gY2FsbC0mZ3Q7ZXJyb3I7CiYjNDM7CWNhbGwtJmd0O3R4X3BlbmRpbmcgPSBOVUxMOwomIzQzOwlyZXQgPSBjYWxsLSZndDtlcnJvcjsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwogCiBtYXliZV9lcnJvcjoKLQlpZiAoY29waWVkKQomIzQzOwlpZiAoY29waWVkKSB7CiYjNDM7CQlpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY2FsbC0mZ3Q7ZXJyb3IgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gY2FsbC0mZ3Q7ZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfdW5sb2NrOwomIzQzOwkJfQogCQlnb3RvIHN1Y2Nlc3M7Ci0JZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZ290byBvdXRfdHhiOwogCiBlZmF1bHQ6CiAJcmV0ID0gLUVGQVVMVDsKLQlnb3RvIG91dDsKJiM0MzsJZ290byBvdXRfdHhiOwogCiB3YWl0X2Zvcl9zcGFjZToKIAlyZXQgPSAtRUFHQUlOOwogCWlmIChtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpCiAJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CWNhbGwtJmd0O3R4X3BlbmRpbmcgPSB0eGI7CiYjNDM7CXR4YiA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7Ci0JKl9kcm9wcGVkX2xvY2sgPSB0cnVlOwomIzQzOwogCXJldCA9IHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvdyhyeCwgY2FsbCwgJmFtcDt0aW1lbywKIAkJCQkgICAgICAgbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX1dBSVRBTEwpOwogCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIG1heWJlX2Vycm9yOwomIzQzOwkJZ290byBvdXRfbm9sb2NrOwogCWlmIChjYWxsLSZndDtpbnRlcnJ1cHRpYmlsaXR5ID09IFJYUlBDX0lOVEVSUlVQVElCTEUpIHsKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpICZsdDsgMCkgewogCQkJcmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTsKLQkJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfbm9sb2NrOwogCQl9CiAJfSBlbHNlIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogCX0KLQkqX2Ryb3BwZWRfbG9jayA9IGZhbHNlOwogCWdvdG8gcmVsb2FkOwomIzQzO291dF9ub2xvY2s6CiYjNDM7CV9sZWF2ZSgmIzM0OyA9ICVkIFtpbnRyXSYjMzQ7LCByZXQpOwomIzQzOwlyZXR1cm4gY29waWVkID86IHJldDsKIH0KIAogLyoKQEAgLTUwMyw2ICYjNDM7NTMxLDggQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LAogc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApCiB7CiAJc3RydWN0IGNtc2doZHIgKmNtc2c7CiYjNDM7CWtleV9zZXJpYWxfdCBrZXlfaWQ7CiYjNDM7CWtleV9yZWZfdCBrZXk7CiAJYm9vbCBnb3RfdXNlcl9JRCA9IGZhbHNlOwogCWludCBsZW47CiAKQEAgLTU4Nyw2ICYjNDM7NjE3LDIyIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKQogCQkJCXJldHVybiAtRVJBTkdFOwogCQkJYnJlYWs7CiAKJiM0MzsJCWNhc2UgUlhSUENfUkVTUE9OU0VfQVBQREFUQToKJiM0MzsJCQlpZiAobGVuICE9IHNpemVvZihrZXlfc2VyaWFsX3QpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQlpZiAocC0mZ3Q7Y2FsbC5hcHBfZGF0YSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJa2V5X2lkID0gKihrZXlfc2VyaWFsX3QgKilDTVNHX0RBVEEoY21zZyk7CiYjNDM7CQkJa2V5ID0gbG9va3VwX3VzZXJfa2V5KGtleV9pZCwgMCwgS0VZX05FRURfU0VBUkNIKTsKJiM0MzsJCQlpZiAoSVNfRVJSKGtleSkpCiYjNDM7CQkJCXJldHVybiBQVFJfRVJSKGtleSk7CiYjNDM7CQkJaWYgKGtleV9yZWZfdG9fcHRyKGtleSktJmd0O3R5cGUgPT0gJmFtcDtrZXlfdHlwZV91c2VyKSB7CiYjNDM7CQkJCWtleV9yZWZfcHV0KGtleSk7CiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCX0KJiM0MzsJCQlwLSZndDtjYWxsLmFwcF9kYXRhID0ga2V5X3JlZl90b19wdHIoa2V5KTsKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC02OTUsOCAmIzQzOzc0MSwxMCBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIAkJCWdvdG8gZXJyb3JfcmVsZWFzZV9zb2NrOwogCQljYWxsID0gcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHJ4LCBtc2csICZhbXA7cCk7CiAJCS8qIFRoZSBzb2NrZXQgaXMgbm93IHVubG9ja2VkLi4uICovCi0JCWlmIChJU19FUlIoY2FsbCkpCiYjNDM7CQlpZiAoSVNfRVJSKGNhbGwpKSB7CiYjNDM7CQkJa2V5X3B1dChwLmNhbGwuYXBwX2RhdGEpOwogCQkJcmV0dXJuIFBUUl9FUlIoY2FsbCk7CiYjNDM7CQl9CiAJCS8qIC4uLiBhbmQgd2UgaGF2ZSB0aGUgY2FsbCBsb2NrLiAqLwogCQlwLmNhbGwubnJfdGltZW91dHMgPSAwOwogCQlyZXQgPSAwOwpAQCAtNzY5LDggJiM0Mzs4MTcsOCBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIAkJcmV0ID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBSWFJQQ19DTURfU0VORF9EQVRBOgotCQlyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMLCAmYW1wO2Ryb3BwZWRfbG9jayk7Ci0JCWJyZWFrOwomIzQzOwkJcmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCk7CiYjNDM7CQlnb3RvIGVycm9yX3B1dDsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKQEAgLTc4MSwxMSAmIzQzOzgyOSwxMyBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiBlcnJvcl9wdXQ6CiAJcnhycGNfcHV0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9wdXRfc2VuZG1zZyk7CiYjNDM7CWtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTsKIAlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCByZXQpOwogCXJldHVybiByZXQ7CiAKIGVycm9yX3JlbGVhc2Vfc29jazoKIAlyZWxlYXNlX3NvY2soJmFtcDtyeC0mZ3Q7c2spOwomIzQzOwlrZXlfcHV0KHAuY2FsbC5hcHBfZGF0YSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODA4LDcgJiM0Mzs4NTgsNiBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKIAkJCSAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAkJCSAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KQogewotCWJvb2wgZHJvcHBlZF9sb2NrID0gZmFsc2U7CiAJaW50IHJldDsKIAogCV9lbnRlcigmIzM0O3slZH0sJiMzNDssIGNhbGwtJmd0O2RlYnVnX2lkKTsKQEAgLTgxOSwxMiAmIzQzOzg2OCwxMCBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwKIAltdXRleF9sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiAKIAlyZXQgPSByeHJwY19zZW5kX2RhdGEocnhycGNfc2soc29jay0mZ3Q7c2spLCBjYWxsLCBtc2csIGxlbiwKLQkJCSAgICAgIG5vdGlmeV9lbmRfdHgsICZhbXA7ZHJvcHBlZF9sb2NrKTsKJiM0MzsJCQkgICAgICBub3RpZnlfZW5kX3R4KTsKIAlpZiAocmV0ID09IC1FU0hVVERPV04pCiAJCXJldCA9IGNhbGwtJmd0O2Vycm9yOwogCi0JaWYgKCFkcm9wcGVkX2xvY2spCi0JCW11dGV4X3VubG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmMgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jCmluZGV4IDNlZmUxMDRiMTkzMGNiLi5mYzZmNDc4ZTE3NjJhNyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3NlcnZlcl9rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jCkBAIC0xNzMsNDMgJiM0MzsxNzMsMyBAQCBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBrZXkgKmtleXJpbmcpCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wocnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyk7Ci0KLS8qKgotICogcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlIC0gU2V0IHRoZSBtYW5hZ2UtcmVzcG9uc2UgZmxhZyBmb3IgYSBrZXJuZWwgc2VydmljZQotICogQHNrOiBUaGUgc29ja2V0IHRvIHNldCB0aGUga2V5cmluZyBvbgotICogQHNldDogVHJ1ZSB0byBzZXQsIGZhbHNlIHRvIGNsZWFyIHRoZSBmbGFnCi0gKgotICogU2V0IHRoZSBmbGFnIG9uIGFuIHJ4cnBjIHNvY2tldCB0byBzYXkgdGhhdCB0aGUgY2FsbGVyIHdhbnRzIHRvIG1hbmFnZSB0aGUKLSAqIFJFU1BPTlNFIHBhY2tldCBhbmQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGl0IG1heSBjb250YWluLiAgU2V0dGluZyB0aGlzCi0gKiBtZWFucyB0aGF0IHJlY3Ztc2coKSB3aWxsIHJldHVybiBtZXNzYWdlcyB3aXRoIFJYUlBDX0NIQUxMRU5HRUQgaW4gdGhlCi0gKiBjb250cm9sIG1lc3NhZ2UgYnVmZmVyIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYWxsZW5nZS4KLSAqCi0gKiBUaGUgdXNlciBzaG91bGQgcmVzcG9uZCB0byB0aGUgY2hhbGxlbmdlIGJ5IHBhc3NpbmcgUlhSUENfUkVTUE9ORCBvcgotICogUlhSUENfUkVTUE9ORF9BQk9SVCBjb250cm9sIG1lc3NhZ2VzIHdpdGggc2VuZG1zZygpIHRvIHRoZSBzYW1lIGNhbGwuCi0gKiBTdXBwbGVtZW50YXJ5IGNvbnRyb2wgbWVzc2FnZXMsIHN1Y2ggYXMgUlhSUENfUkVTUF9SWEdLX0FQUERBVEEsIG1heSBiZQotICogaW5jbHVkZWQgdG8gaW5kaWNhdGUgdGhlIHBhcnRzIHRoZSB1c2VyIHdhbnRzIHRvIHN1cHBseS4KLSAqCi0gKiBUaGUgc2VydmVyIHdpbGwgYmUgcGFzc2VkIHRoZSByZXNwb25zZSBkYXRhIHdpdGggYSBSWFJQQ19SRVNQT05ERUQgY29udHJvbAotICogbWVzc2FnZSB3aGVuIGl0IGdldHMgdGhlIGZpcnN0IGRhdGEgZnJvbSBlYWNoIGNhbGwuCi0gKgotICogTm90ZSB0aGF0IHRoaXMgaXMgb25seSBob25vdXJlZCBieSBzZWN1cml0eSBjbGFzc2VzIHRoYXQgbmVlZCBhdXhpbGlhcnkgZGF0YQotICogKGUuZy4gUnhHSykuICBUaG9zZSB0aGF0IGRvbiYjMzk7dCBvZmZlciB0aGUgZmFjaWxpdHkgKGUuZy4gUnhLQUQpIHJlc3BvbmQKLSAqIHdpdGhvdXQgY29uc3VsdGluZyB1c2Vyc3BhY2UuCi0gKgotICogUmV0dXJuOiBUaGUgcHJldmlvdXMgc2V0dGluZy4KLSAqLwotaW50IHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc2V0KQotewotCXN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTsKLQlpbnQgcmV0OwotCi0JbG9ja19zb2NrKHNrKTsKLQlyZXQgPSAhIXRlc3RfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCAmYW1wO3J4LSZndDtmbGFncyk7Ci0JaWYgKHNldCkKLQkJc2V0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgJmFtcDtyeC0mZ3Q7ZmxhZ3MpOwotCWVsc2UKLQkJY2xlYXJfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCAmYW1wO3J4LSZndDtmbGFncyk7Ci0JcmVsZWFzZV9zb2NrKHNrKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChyeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2UpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMKaW5kZXggNmY4OGI1MDdmOTI3OTEuLjkwYzFiZDVkN2RmZWNmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApCiAJdXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCBkYXRhbGVuKTsKIAlpZiAoIXVwYXlsb2FkKQogCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7dXBheWxvYWQtJmd0O3JlZiwgMSk7CiAKIAkvKiBhdHRhY2ggdGhlIGRhdGEgKi8KIAlwcmVwLSZndDtxdW90YWxlbiA9IGRhdGFsZW47CkBAIC04OCwxMiAmIzQzOzg5LDIyIEBAIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfZnJlZV9wcmVwYXJzZSk7CiAKIHN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7Ci0Jc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQ7CiYjNDM7CXN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkID0KJiM0MzsJCWNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTsKIAotCXBheWxvYWQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7CiAJa2ZyZWVfc2Vuc2l0aXZlKHBheWxvYWQpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBGcmVlIGEgdXNlciBkZWZpbmVkIGtleSBwYXlsb2FkLgomIzQzOyAqLwomIzQzO3ZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpCiYjNDM7ewomIzQzOwlpZiAocGF5bG9hZCAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3BheWxvYWQtJmd0O3JlZikpCiYjNDM7CQljYWxsX3JjdSgmYW1wO3BheWxvYWQtJmd0O3JjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocHV0X3VzZXJfa2V5X3BheWxvYWQpOwomIzQzOwogLyoKICAqIHVwZGF0ZSBhIHVzZXIgZGVmaW5lZCBrZXkKICAqIC0gdGhlIGtleSYjMzk7cyBzZW1hcGhvcmUgaXMgd3JpdGUtbG9ja2VkCkBAIC0xMTUsOCAmIzQzOzEyNiw3IEBAIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApCiAJcmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgcHJlcC0mZ3Q7cGF5bG9hZC5kYXRhWzBdKTsKIAlwcmVwLSZndDtwYXlsb2FkLmRhdGFbMF0gPSBOVUxMOwogCi0JaWYgKHphcCkKLQkJY2FsbF9yY3UoJmFtcDt6YXAtJmd0O3JjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTsKJiM0MzsJcHV0X3VzZXJfa2V5X3BheWxvYWQoemFwKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNlcl91cGRhdGUpOwpAQCAtMTM0LDcgJiM0MzsxNDQsNyBAQCB2b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSkKIAogCWlmICh1cGF5bG9hZCkgewogCQlyY3VfYXNzaWduX2tleXBvaW50ZXIoa2V5LCBOVUxMKTsKLQkJY2FsbF9yY3UoJmFtcDt1cGF5bG9hZC0mZ3Q7cmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpOwomIzQzOwkJcHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpOwogCX0KIH0KIApAQCAtMTQ3LDkgJiM0MzsxNTcsOCBAQCB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpCiB7CiAJc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LSZndDtwYXlsb2FkLmRhdGFbMF07CiAKLQlrZnJlZV9zZW5zaXRpdmUodXBheWxvYWQpOwomIzQzOwlwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfZGVzdHJveSk7CiAKIC8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjY0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUnhHSy9BRlMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0JiMzOTtzIHRvdWNoaW5nIGJvdGggYGZzL2Fmcy9gIGFuZCBgbmV0L3J4cnBjL2AuIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYXJvdW5kIFJ4R0sgKFJ4UlBDIEdTU0FQSSBLZXJiZXJvcykgYW5kIGhvdyBBRlMgaGFuZGxlcyB0aGVzZSBjaGFsbGVuZ2UtcmVzcG9uc2UgaW50ZXJhY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGBhcHBfZGF0YWAuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXkmIzM5O3ZlIHJpcHBlZCBvdXQgdGhlIG9sZCBgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlYCBhbmQgdGhlIG91dC1vZi1iYW5kIChPT0IpIG1lc3NhZ2UgaGFuZGxpbmcgZm9yIHRoZXNlIGNoYWxsZW5nZXMsIGFuZCBpbnN0ZWFkLCBhcmUgbm93IHVzaW5nIGBhcHBfZGF0YWAgYXMgYSBrZXkgd2hlbiBraWNraW5nIG9mZiBhIGNhbGwgd2l0aCBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLgoKTXkgbmV4dCB0aG91Z2h0IGlzIHRvIHJlYWxseSBkaWcgaW50byB3aGF0JiMzOTtzIGJlaW5nIG1vZGlmaWVkIGluIGBmcy9hZnMvYCBhbmQgYG5ldC9yeHJwYy9gLiBJJiMzOTttIHNlZWluZyB0aGF0IGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCBpcyBub3cgcmVzcG9uc2libGUgZm9yIGNyYWZ0aW5nIGEga2V5IHRoYXQgaW5jbHVkZXMgdGhpcyBgYXBwZGF0YWAsIHdoaWNoIHRoZW4gZ2V0cyBzdG9yZWQgaW4gYHNlcnZlci0mZ3Q7eWZzX3J4Z2tfYXBwZGF0YWAuIFRoaXMga2V5IGlzIHRoZW4gcGFzc2VkIHRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIFRoaXMgaXMgdGhlIGRpcmVjdCByZXBsYWNlbWVudCBvZiB0aGUgcHJldmlvdXMgT09CIGNoYWxsZW5nZSBoYW5kbGluZyBpbiBBRlMuCgpTbywgZnJvbSBhIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eSBwZXJzcGVjdGl2ZSwgdGhpcyBzZWVtcyBwcmV0dHkgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIG1vZGlmeWluZyBjb3JlIGNvbXBvbmVudHMgb2YgUnhSUEMsIHRoZSBuZXR3b3JrIHByb3RvY29sLCBhbmQgQUZTLCB0aGUgZmlsZXN5c3RlbSwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuIEkmIzM5O20gbm90aW5nIHRoYXQgYG9vYi5jYCBoYXMgYmVlbiByZW1vdmVkIGZyb20gYG5ldC9yeHJwYy9gLCBhbmQgdGhlIGJlaGF2aW9yIG9mIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAgaGFzIGJlZW4gYWx0ZXJlZC4KCk5vdywgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gQmFzZWQgb24gdGhlIGNoYW5nZXMsIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byBjb25jZW50cmF0ZSBvbiB0aGVzZSBmdW5jdGlvbnMgaW4gYG5ldC9yeHJwYy9gOiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBgcnhycGNfc2VuZF9kYXRhYCwgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfcmVjdm1zZ2AsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCwgYW5kIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YC4gSW4gYGZzL2Fmcy9gLCBJIHdpbGwgYmUgcmV2aWV3aW5nIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCwgYGFmc19jcmVhdGVfeWZzX3J4Z2tfY21fYXBwZGF0YWAsIGBhZnNfbWFrZV9jYWxsYCwgYW5kIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAuCgpGaW5hbGx5LCBpdCYjMzk7cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcgdGhhdCBgQ09ORklHX1JYR0tgIGlzIGluZGVlZCBhIHByZXJlcXVpc2l0ZSBoZXJlLiBUaGUgY29kZSBpbmNsdWRlcyBgI2lmZGVmIENPTkZJR19SWEdLYCBpbiBgZnMvYWZzL2NtX3NlY3VyaXR5LmNgIGFuZCBgZnMvYWZzL2ludGVybmFsLmhgIGFuZCBhbHNvIGBuZXQvcnhycGMvcnhnay5jYCBpcyBpbnZvbHZlZCwgc28geWVzLCB0aGlzIGlzIGNsZWFybHkgY29uZGl0aW9uYWwgb24gdGhhdCBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBnbyBhbmQgY2hlY2sgS2NvbmZpZyBhcyB3ZWxsLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJYR0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL0tjb25maWc9NTg9Y29uZmlnIFJYS0FEXG4tLVxubmV0L3J4cnBjL0tjb25maWctNjUtXG5uZXQvcnhycGMvS2NvbmZpZzo2Njpjb25maWcgUlhHS1xubmV0L3J4cnBjL0tjb25maWctNjctXHRib29sIFwmIzM0O1J4UlBDIEdTU0FQSSBzZWN1cml0eVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODU4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYENPTkZJR19SWEdLYCBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpSaWdodCwgc28gYENPTkZJR19SWEdLYC4uLiB0aGF0JiMzOTtzIGEga2VybmVsIGNvbmZpZyBvcHRpb24sIG9idmlvdXNseS4gSGFuZyBvbiBhIHNlY29uZCwgd2FzbiYjMzk7dCB0aGF0IHN1cHBvc2VkIHRvIGJlIHVwc3RyZWFtZWQgYWxyZWFkeT8gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLiBPa2F5LCBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHBsYWNlLCB0aGUgYG5ldC9yeHJwYy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBzcG90IGZvciBpdCwgZ2l2ZW4gdGhlIG5hbWUuIExldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJYR0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcnhycGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvS2NvbmZpZz01OD1jb25maWcgUlhLQURcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy02NS1cbm5ldC9yeHJwYy9LY29uZmlnOjY2OmNvbmZpZyBSWEdLXG5uZXQvcnhycGMvS2NvbmZpZy02Ny1cdGJvb2wgXCYjMzQ7UnhSUEMgR1NTQVBJIHNlY3VyaXR5XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQxMzQKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqUXVpY2sgU2NhbjogQUZTIENvbnNpZGVyYXRpb25zKioKClJpZ2h0LCBJIHNlZSBpdC4gVGhlIHByZXNlbmNlIG9mIGBDT05GSUdfQUZTX0ZTYCBhbmQgYENPTkZJR19BRl9SWFJQQ2AgZGVmaW5pdGVseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEFGUyBzdXBwb3J0IGhlcmUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCYjMzk7cyBkaXZlIGRlZXBlci4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAuIFRoYXQgZnVuY3Rpb24gd2lsbCBsaWtlbHkgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc2VydmVyLXNpZGUgYXBwbGljYXRpb24gZGF0YSBpcyBtYW5hZ2VkLiBJdCBwcm9iYWJseSBkZXRhaWxzIGhvdyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgd2hlbiBzZXR0aW5nIHVwIGFuIEFGUyBzZXJ2ZXIgaW5zdGFuY2UuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBpbmZsdWVuY2UgdGhhdCBwcm9jZXNzLCBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9jbV9zZWN1cml0eS5jPTI4PXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfcnhna19jbV9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHUzMiBlbmN0eXBlKVxuLS1cbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTIwNy0gKi9cbmZzL2Fmcy9jbV9zZWN1cml0eS5jOjIwODppbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0yMDkte1xuLS1cbmZzL2Fmcy9mc19wcm9iZS5jPTIzOD1pbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbi0tXG5mcy9hZnMvZnNfcHJvYmUuYy0yNDctXG5mcy9hZnMvZnNfcHJvYmUuYzoyNDg6XHRyZXQgPSBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHNlcnZlciwga2V5KTtcbmZzL2Fmcy9mc19wcm9iZS5jLTI0OS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTA4NT1leHRlcm4gYm9vbCBhZnNfY21faW5jb21pbmdfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XG4tLVxuZnMvYWZzL2ludGVybmFsLmgtMTA4OS0gKi9cbmZzL2Fmcy9pbnRlcm5hbC5oOjEwOTA6aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwOTEtI2lmZGVmIENPTkZJR19SWEdLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3MjEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSB0aGluZy4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIGZsb3csIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLCBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucyB3ZSBjYW4gZXhwbG9yZSBpbiB0aGlzIGFyZWEuIE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBvciBtYXliZSBldmVuIHRoZSBoYXJkd2FyZSwgYmVnaW5zLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgaXQmIzM5O3MgZG9pbmcgaW4gZGV0YWlsLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHJlYWRpbmcgdGhlIGNvZGU7IGl0JiMzOTtzIGFib3V0IGNvbm5lY3RpbmcgaXQgdG8gbXkgZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoZSBSWFJQQyBwcm90b2NvbCwgdGhlIGtlcm5lbCYjMzk7cyBhcmNoaXRlY3R1cmUsIGFuZCBhbGwgdGhlIHJlbGV2YW50IGhhcmR3YXJlIGFuZCBob3cgaXQgZml0cy4gSSBuZWVkIHRvIGZvcm0gYSBtZW50YWwgbW9kZWwgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J4cnBjX2tlcm5lbF9iZWdpbl9jYWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3Q9Nzk1PVRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czpcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LTc5OS1cdHN0cnVjdCByeHJwY19jYWxsICpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3Q6ODAwOlx0cnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QtODAxLVx0XHRcdFx0c3RydWN0IHNvY2thZGRyX3J4cnBjICpzcngsXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC05ODktICAgICBUaGlzIGlzIHVzZWQgdG8gYWNjZXB0IGFuIGluY29taW5nIGNhbGwgYW5kIHRvIGFzc2lnbiBpdCBhIGNhbGwgSUQuICBUaGlzXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0Ojk5MDogICAgIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoKSBhbmQgY2FsbHMgYWNjZXB0ZWQgbXVzdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC05OTEtICAgICBiZSBlbmRlZCBpbiB0aGUgc2FtZSB3YXkuXG4tLVxuZnMvYWZzL3J4cnBjLmM9MzAxPXZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbi0tXG5mcy9hZnMvcnhycGMuYy0zNTUtXHQvKiBjcmVhdGUgYSBjYWxsICovXG5mcy9hZnMvcnhycGMuYzozNTY6XHRyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcGVlcixcbmZzL2Fmcy9yeHJwYy5jLTM1Ny1cdFx0XHRcdFx0IGNhbGwtXHUwMDNla2V5LCBhcHBfZGF0YSxcbi0tXG5pbmNsdWRlL25ldC9hZl9yeHJwYy5oPTUzPXZvaWQgcnhycGNfa2VybmVsX3NldF9ub3RpZmljYXRpb25zKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5pbmNsdWRlL25ldC9hZl9yeHJwYy5oLTU0LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCByeHJwY19rZXJuZWxfb3BzICphcHBfb3BzKTtcbmluY2x1ZGUvbmV0L2FmX3J4cnBjLmg6NTU6c3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5pbmNsdWRlL25ldC9hZl9yeHJwYy5oLTU2LVx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcixcbi0tXG5uZXQvcnhycGMvYWZfcnhycGMuYz0zMTQ9RVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcHV0X3BlZXIpO1xuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTMxNi0vKipcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjMxNzogKiByeHJwY19rZXJuZWxfYmVnaW5fY2FsbCAtIEFsbG93IGEga2VybmVsIHNlcnZpY2UgdG8gYmVnaW4gYSBjYWxsXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zMTgtICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdG8gbWFrZSB0aGUgY2FsbFxuLS1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTM0MC0gKi9cbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjM0MTpzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTM0Mi1cdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4tLVxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMzk3LX1cbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjM5ODpFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKTtcbm5ldC9yeHJwYy9hZl9yeHJwYy5jLTM5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2NzcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBSWFJQQyBQYXRjaCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBzb21lIGNvcmUgZnVuY3Rpb25zIGluIHRoZSBSWFJQQyBrZXJuZWwgbW9kdWxlLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIHNpZ25hdHVyZSBjaGFuZ2UgZm9yIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuICBBZGRpbmcgYHN0cnVjdCBrZXkgKmFwcF9kYXRhYCB0aGVyZSBpcyBzaWduaWZpY2FudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoYXQgd2FzIGRlZW1lZCBuZWNlc3NhcnkuIEl04oCZcyBsaWtlbHkgcmVsYXRlZCB0byBzZWN1cml0eSBjb250ZXh0IG9yIGFwcGxpY2F0aW9uLXNwZWNpZmljIGRhdGEgYXNzb2NpYXRpb24uIFRoaXMgd2lsbCBhZmZlY3QgaG93IGNhbGxzIGFyZSBpbml0aWF0ZWQuIEl0IGFsc28gbWVhbnMgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBldmVyeSBpbnN0YW5jZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBgYXBwX2RhdGFgIGlzIGNvcnJlY3RseSBwcm92aWRlZCBvciBoYW5kbGVkLgoKTmV4dCwgaXQgbWVudGlvbnMgY2hhbmdlcyB0byBgcnhycGNfc2VuZF9kYXRhYCBhbmQgYHJ4cnBjX2RvX3NlbmRtc2dgLiBOb3csIGByeHJwY19zZW5kX2RhdGFgIGRlYWxzIHdpdGggYWN0dWFsbHkgdHJhbnNtaXR0aW5nIHRoZSBkYXRhLCBhbmQgYHJ4cnBjX2RvX3NlbmRtc2dgIGlzIGxpa2VseSBoYW5kbGluZyB0aGUgc29ja2V0IG9wZXJhdGlvbnMsIHJpZ2h0PyBBbnkgYWx0ZXJhdGlvbiB0byB0aGVzZSBmdW5jdGlvbnMgd2FycmFudHMgc2NydXRpbnkgYmVjYXVzZSB0aGV5JiMzOTtyZSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LiBJIHNob3VsZCByZWFsbHkgY2hlY2sgaG93IHRoZXNlIGludGVyYWN0IHdpdGggdGhlIGFkZGVkIGBhcHBfZGF0YWAuCgpTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIGhvdyB0aGlzIGFmZmVjdHMgdGhlIGRhdGEgdHJhbnNtaXNzaW9uIGZsb3cuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGBhcHBfZGF0YWAgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlIG9yIHVzZWQgdG8gZmlsdGVyIG9yIGNvbmZpZ3VyZSB0aGUgdHJhbnNtaXNzaW9uIHBhcmFtZXRlcnMuCgpPa2F5LCBsZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGByeHJwY19zZW5kX2RhdGFgIGluIGBuZXQvcnhycGMvc2VuZG1zZy5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gVW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyB0aGVyZSB3aWxsIGlsbHVtaW5hdGUgdGhlIGNvcmUgaW1wYWN0IG9mIHRoaXMgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBmdW5jdGlvbiBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyeHJwY19zZW5kX2RhdGEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaD0xODY5PVRSQUNFX0VWRU5UKHJ4cnBjX3JldHJhbnNtaXQsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oLTE4NzAtXHQgICAgVFBfUFJPVE8oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oOjE4NzE6XHRcdCAgICAgc3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgKnJlcSxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmgtMTg3Mi1cdFx0ICAgICBzdHJ1Y3QgcnhycGNfdHhidWYgKnR4YiksXG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9OTY2PXN0cnVjdCByeHJwY190eHF1ZXVlIHtcbi0tXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC05OTAtICovXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDo5OTE6c3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEge1xubmV0L3J4cnBjL2FyLWludGVybmFsLmgtOTkyLVx0a3RpbWVfdFx0XHRcdG5vdztcdFx0LyogQ3VycmVudCB0aW1lICovXG4tLVxubmV0L3J4cnBjL2FyLWludGVybmFsLmg9MTM3Nz1pbnQgcnhycGNfc2VuZF9hYm9ydF9wYWNrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKik7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaDoxMzc4OnZvaWQgcnhycGNfc2VuZF9kYXRhX3BhY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgKnJlcSk7XG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xMzc5LXZvaWQgcnhycGNfc2VuZF9jb25uX2Fib3J0KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uKTtcbi0tXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jPTYwPXN0YXRpYyBib29sIHJ4cnBjX3JldHJhbnNtaXRfZGF0YShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM6NjE6XHRcdFx0XHQgIHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxICpyZXEpXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTYyLXtcbi0tXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTcyLVx0dHhiLVx1MDAzZWZsYWdzIHw9IFJYUlBDX1RYQlVGX1JFU0VOVDtcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM6NzM6XHRyeHJwY19zZW5kX2RhdGFfcGFja2V0KGNhbGwsIHJlcSk7XG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTc0LVx0cnhycGNfaW5jX3N0YXQoY2FsbC1cdTAwM2VyeG5ldCwgc3RhdF90eF9kYXRhX3JldHJhbnMpO1xuLS1cbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM9ODY9c3RhdGljIHZvaWQgcnhycGNfcmVzZW5kKHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy04Ny17XG5uZXQvcnhycGMvY2FsbF9ldmVudC5jOjg4Olx0c3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgcmVxID0ge1xubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy04OS1cdFx0Lm5vd1x0PSBrdGltZV9nZXRfcmVhbCgpLFxuLS1cbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM9MTMxPXZvaWQgcnhycGNfcmVzZW5kX3RscChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtMTMyLXtcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM6MTMzOlx0c3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgcmVxID0ge1xubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy0xMzQtXHRcdC5ub3dcdFx0PSBrdGltZV9nZXRfcmVhbCgpLFxuLS1cbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM9MTk0PXN0YXRpYyB2b2lkIHJ4cnBjX3RyYW5zbWl0X2ZyZXNoX2RhdGEoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHVuc2lnbmVkIGludCBsaW1pdCxcbi0tXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTIwNS1cdHdoaWxlIChzcGFjZSBcdTAwM2UgMCkge1xubmV0L3J4cnBjL2NhbGxfZXZlbnQuYzoyMDY6XHRcdHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxIHJlcSA9IHtcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtMjA3LVx0XHRcdC5ub3dcdD0ga3RpbWVfZ2V0X3JlYWwoKSxcbi0tXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTI1Ni1cdFx0c3BhY2UgLT0gcmVxLm47XG5uZXQvcnhycGMvY2FsbF9ldmVudC5jOjI1NzpcdFx0cnhycGNfc2VuZF9kYXRhX3BhY2tldChjYWxsLCBcdTAwMjZyZXEpO1xubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy0yNTgtXHR9XG4tLVxubmV0L3J4cnBjL291dHB1dC5jPTQyNj1zdGF0aWMgc2l6ZV90IHJ4cnBjX3ByZXBhcmVfZGF0YV9zdWJwYWNrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG5uZXQvcnhycGMvb3V0cHV0LmM6NDI3Olx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxLFxubmV0L3J4cnBjL291dHB1dC5jLTQyOC1cdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3R4YnVmICp0eGIsXG4tLVxubmV0L3J4cnBjL291dHB1dC5jPTUyMD1zdGF0aWMgdW5zaWduZWQgaW50IHJ4cnBjX3ByZXBhcmVfdHhxdWV1ZShzdHJ1Y3QgcnhycGNfdHhxdWV1ZSAqdHEsXG5uZXQvcnhycGMvb3V0cHV0LmM6NTIxOlx0XHRcdFx0XHQgIHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxICpyZXEpXG5uZXQvcnhycGMvb3V0cHV0LmMtNTIyLXtcbi0tXG5uZXQvcnhycGMvb3V0cHV0LmM9NTM1PXN0YXRpYyBzaXplX3QgcnhycGNfcHJlcGFyZV9kYXRhX3BhY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbm5ldC9yeHJwYy9vdXRwdXQuYzo1MzY6XHRcdFx0XHRcdHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxICpyZXEsXG5uZXQvcnhycGMvb3V0cHV0LmMtNTM3LVx0XHRcdFx0XHRzdHJ1Y3QgcnhycGNfd2lyZV9oZWFkZXIgKndoZHIpXG4tLVxubmV0L3J4cnBjL291dHB1dC5jLTYzOC0gKi9cbm5ldC9yeHJwYy9vdXRwdXQuYzo2Mzk6dm9pZCByeHJwY19zZW5kX2RhdGFfcGFja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxKVxubmV0L3J4cnBjL291dHB1dC5jLTY0MC17XG4tLVxubmV0L3J4cnBjL3NlbmRtc2cuYz0yMzA9c3RhdGljIHZvaWQgcnhycGNfbm90aWZ5X2VuZF90eChzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuLS1cbm5ldC9yeHJwYy9zZW5kbXNnLmMtMjM4LSAqIFF1ZXVlIGEgREFUQSBwYWNrZXQgZm9yIHRyYW5zbWlzc2lvbiwgc2V0IHRoZSByZXNlbmQgdGltZW91dCBhbmQgc2VuZFxubmV0L3J4cnBjL3NlbmRtc2cuYzoyMzk6ICogdGhlIHBhY2tldCBpbW1lZGlhdGVseS4gIFJldHVybnMgdGhlIGVycm9yIGZyb20gcnhycGNfc2VuZF9kYXRhX3BhY2tldCgpXG5uZXQvcnhycGMvc2VuZG1zZy5jLTI0MC0gKiBpbiBjYXNlIHRoZSBjYWxsZXIgd2FudHMgdG8gZG8gc29tZXRoaW5nIHdpdGggaXQuXG4tLVxubmV0L3J4cnBjL3NlbmRtc2cuYz0yODI9c3RhdGljIGludCByeHJwY19hbGxvY190eHF1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4tLVxubmV0L3J4cnBjL3NlbmRtc2cuYy0zMjAtICovXG5uZXQvcnhycGMvc2VuZG1zZy5jOjMyMTpzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG5uZXQvcnhycGMvc2VuZG1zZy5jLTMyMi1cdFx0XHQgICBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jPTcwNj1pbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jLTgxOS1cdGNhc2UgUlhSUENfQ01EX1NFTkRfREFUQTpcbm5ldC9yeHJwYy9zZW5kbXNnLmM6ODIwOlx0XHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMKTtcbm5ldC9yeHJwYy9zZW5kbXNnLmMtODIxLVx0XHRnb3RvIGVycm9yX3B1dDtcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jPTg1Nz1pbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jLTg2OS1cbm5ldC9yeHJwYy9zZW5kbXNnLmM6ODcwOlx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spLCBjYWxsLCBtc2csIGxlbixcbm5ldC9yeHJwYy9zZW5kbXNnLmMtODcxLVx0XHRcdCAgICAgIG5vdGlmeV9lbmRfdHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzg3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJ4UlBDIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgUnhSUEMgaGFuZGxlcyBjcnlwdG8gZXJyb3JzIGFuZCBhcHBkYXRhLiBGaXJzdCwgaXQgbG9va3MgbGlrZSBgcnhycGNfc2VuZF9kYXRhYCBpcyBiZWluZyBtb2RpZmllZCB0byBoYW5kbGUgYW5kIHJldHVybiBjcnlwdG8gZXJyb3JzLCBhbmQgdGhlIGBkcm9wcGVkX2xvY2tgIHBhcmFtZXRlciBpcyBiZWluZyByZW1vdmVkLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIG1vcmUgaW50ZXJlc3Rpbmcgc3R1ZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIGlzIGRvaW5nLiBBaCwgaXQgY3JlYXRlcyBhIGBrZXlfdHlwZV91c2VyYCBrZXkgY29udGFpbmluZyB0aGUgYXBwZGF0YSwgYW5kIHN0b3JlcyBpdCBpbiBgc2VydmVyLSZndDt5ZnNfcnhna19hcHBkYXRhYC4gVGhlbiwgd2hlbiBgYWZzX21ha2VfY2FsbGAgaXMgaW52b2tlZCwgaXQgcGFzc2VzIHRoaXMga2V5IHRvIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgc2hpZnQgaW4gaG93IEFGUyBhbmQgUnhSUEMgaW50ZXJhY3QgcmVnYXJkaW5nIFJ4R0sgYXBwZGF0YS4KCklzIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5IHJlYWNoYWJsZT8gWWVzLCBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIGNhbGxzIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCwgYW5kIGBhZnNfbWFrZV9jYWxsYCBnZXRzIGNhbGxlZCBmb3IgYWxsIEFGUyBjYWxscy4gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCBpcyB0aGUga2VybmVsIGVudHJ5IHBvaW50IGZvciBSeFJQQyBjYWxscywgYW5kIGByeHJwY19kb19zZW5kbXNnYCBhbmQgYHJ4cnBjX3NlbmRtc2dgIGFyZSB0aGUgdXNlci1zcGFjZSBlbnRyeSBwb2ludHMuIEdvb2QuCgpIb2xkIG9uLCB0aGUgcGF0Y2ggYWxzbyByZW1vdmVzIGBvb2IuY2AgZnJvbSBgbmV0L3J4cnBjL2AuIFRoaXMgaXMgYSBiaWcgb25lLiBJdCBtZWFucyB0aGUgT3V0LW9mLUJhbmQgKE9PQikgbWVjaGFuaXNtIGlzIGNvbXBsZXRlbHkgZ29uZS4gVGhhdCBpbXBsaWVzIHRoYXQgdXNlci1zcGFjZSBub3cgaGFzIHRvIHVzZSBgUlhSUENfUkVTUE9OU0VfQVBQREFUQWAgY29udHJvbCBtZXNzYWdlIGluIGBzZW5kbXNnYCB0byBwYXNzIHRoZSBhcHBkYXRhIGtleSBpbnN0ZWFkIG9mIHJlc3BvbmRpbmcgdG8gT09CIGNoYWxsZW5nZXMuCgpMZXQgbWUgdmVyaWZ5IGhvdyBgcnhycGNfc2VuZG1zZ19jbXNnYCBoYW5kbGVzIHRoaXMsIGNoZWNraW5nIGBuZXQvcnhycGMvc2VuZG1zZy5jYC4gT2theSwgaGVyZSYjMzk7cyB0aGUgcmVsZXZhbnQgc2VjdGlvbjoKCmBgYGMKCQljYXNlIFJYUlBDX1JFU1BPTlNFX0FQUERBVEE6CgkJCWlmIChsZW4gIT0gc2l6ZW9mKGtleV9zZXJpYWxfdCkpCgkJCQlyZXR1cm4gLUVJTlZBTDsKCQkJaWYgKHAtJmd0O2NhbGwuYXBwX2RhdGEpCgkJCQlyZXR1cm4gLUVJTlZBTDsKCQkJa2V5X2lkID0gKihrZXlfc2VyaWFsX3QgKilDTVNHX0RBVEEoY21zZyk7CgkJCWtleSA9IGxvb2t1cF91c2VyX2tleShrZXlfaWQsIDAsIEtFWV9ORUVEX1NFQVJDSCk7CgkJCWlmIChJU19FUlIoa2V5KSkKCQkJCXJldHVybiBQVFJfRVJSKGtleSk7CgkJCWlmIChrZXlfcmVmX3RvX3B0cihrZXkpLSZndDt0eXBlID09ICZhbXA7a2V5X3R5cGVfdXNlcikgewoJCQkJa2V5X3JlZl9wdXQoa2V5KTsKCQkJCXJldHVybiAtRUlOVkFMOwoJCQl9CgkJCXAtJmd0O2NhbGwuYXBwX2RhdGEgPSBrZXlfcmVmX3RvX3B0cihrZXkpOwoJCQlicmVhazsKYGBgCgpXYWl0IGEgc2Vjb25kLi4uIEl0IGNoZWNrcyBgaWYgKGtleV9yZWZfdG9fcHRyKGtleSktJmd0O3R5cGUgPT0gJmFtcDtrZXlfdHlwZV91c2VyKWAgYW5kIHJldHVybnMgYC1FSU5WQUxgIGlmIGl0IElTIGBrZXlfdHlwZV91c2VyYD8gVGhhdCYjMzk7cyB0aGUgKnVzZXIqIGtleSB0eXBlISAgSXQgbWVhbnMgdGhlIGNvZGUgaXMgKnJlamVjdGluZyogYSB1c2VyIGtleS4gVGhhdCBkb2VzbiYjMzk7dCBtYWtlIHNlbnNlISAgTGV0IG1lIGdvIGJhY2sgYW5kIHJlLXJlYWQgdGhhdCBwYXRjaCBjYXJlZnVsbHkuLi4gc29tZXRoaW5nIGlzbiYjMzk7dCByaWdodCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZXlfdHlwZV91c2VyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL3NlbmRtc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvc2VuZG1zZy5jPTUzMT1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcbi0tXG5uZXQvcnhycGMvc2VuZG1zZy5jLTYyOC1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGtleSk7XG5uZXQvcnhycGMvc2VuZG1zZy5jOjYyOTpcdFx0XHRpZiAoa2V5X3JlZl90b19wdHIoa2V5KS1cdTAwM2V0eXBlID09IFx1MDAyNmtleV90eXBlX3VzZXIpIHtcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNjMwLVx0XHRcdFx0a2V5X3JlZl9wdXQoa2V5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzMzUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXkgVHlwZSBMb2dpYyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBMZXQgbWUgd3JhcCBteSBoZWFkIGFyb3VuZCB0aGlzLiBUaGUgY29kZSYjMzk7cyBjaGVja2luZyBgaWYgKGtleV9yZWZfdG9fcHRyKGtleSktJmd0O3R5cGUgPT0gJmFtcDtrZXlfdHlwZV91c2VyKWAuLi4gYnV0IHdoYXQmIzM5O3MgdGhlIGltcGxpY2F0aW9uIGlmIGl0JiMzOTtzICphY3R1YWxseSogYSBga2V5X3R5cGVfdXNlcmA/IEl0IHJldHVybnMgYC1FSU5WQUxgPyBUaGF0IHNlZW1zLi4uIGNvdW50ZXJpbnR1aXRpdmUuCgpOb3csIGxldCYjMzk7cyBiYWNrIHVwLiBJIHNlZSB0aGF0IGBrZXlfdHlwZV91c2VyYCAqaXMqIGluZGVlZCB0aGUgdHlwZSBvZiBrZXkgQUZTIGNyZWF0ZXMsIHNwZWNpZmljYWxseSwgaW4gYGFmc19jcmVhdGVfeWZzX3J4Z2tfY21fYXBwZGF0YWAgaXQgY2FsbHMgYGtleV9hbGxvY2AgYW5kIGFzc2lnbnMgdGhlIHR5cGUgdG8gYCZhbXA7a2V5X3R5cGVfdXNlcmAuIFNvIEFGUyAqZG9lcyogY3JlYXRlIHRoZXNlIGBrZXlfdHlwZV91c2VyYCBrZXlzLgoKQnV0IHRoZW4gaW4gYHJ4cnBjX3NlbmRtc2dfY21zZ2AsIGl0IGhhcyB0aGF0ICpzYW1lKiBjaGVjaywgYGlmIChrZXlfcmVmX3RvX3B0cihrZXkpLSZndDt0eXBlID09ICZhbXA7a2V5X3R5cGVfdXNlcilgLCBhbmQgKnN0aWxsKiByZXR1cm5zIGAtRUlOVkFMYCBpZiB0aGUga2V5ICppcyogYSBga2V5X3R5cGVfdXNlcmAuIFRoaXMgZG9lc24mIzM5O3QgbWFrZSBzZW5zZS4gSXNuJiMzOTt0IHRoYXQgdGhlIHdob2xlIHBvaW50IG9mIHVzaW5nIGEgYGtleV90eXBlX3VzZXJgIGhlcmU/CgpXYWl0LCBtYXliZSBJJiMzOTttIG1pc3JlYWRpbmcgdGhlIGxvZ2ljLiBQZXJoYXBzIEkgbmVlZCB0byBjb25zaWRlciBgIT0gJmFtcDtrZXlfdHlwZV91c2VyYC4gSXMgdGhlIGludGVudGlvbiB0byAqcmVqZWN0KiBga2V5X3R5cGVfdXNlcmAga2V5cz8gSSBuZWVkIHRvIHJldmlldyB0aGlzIHBhdGNoIG1vcmUgY2FyZWZ1bGx5IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGJlaGF2aW9yIGhlcmUuIEkmIzM5O2xsIHJlLXJlYWQgaXQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2V5X3R5cGVfdXNlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9zZW5kbXNnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL3NlbmRtc2cuYz01MzE9c3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApXG4tLVxubmV0L3J4cnBjL3NlbmRtc2cuYy02MjgtXHRcdFx0XHRyZXR1cm4gUFRSX0VSUihrZXkpO1xubmV0L3J4cnBjL3NlbmRtc2cuYzo2Mjk6XHRcdFx0aWYgKGtleV9yZWZfdG9fcHRyKGtleSktXHUwMDNldHlwZSA9PSBcdTAwMjZrZXlfdHlwZV91c2VyKSB7XG5uZXQvcnhycGMvc2VuZG1zZy5jLTYzMC1cdFx0XHRcdGtleV9yZWZfcHV0KGtleSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMTQ1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUlhSUEMgUmVzcG9uc2UgQXBwbGljYXRpb24gRGF0YSBIYW5kbGluZyoqCgpPa2F5LCBsZXQgbWUgY2FyZWZ1bGx5IHJldmlldyB0aGVzZSBsaW5lcyBmcm9tIHRoZSBwYXRjaCBkaWZmLiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhlIGhhbmRsaW5nIG9mIGBSWFJQQ19SRVNQT05TRV9BUFBEQVRBYCBzcGVjaWZpY2FsbHkuIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2hlY2tzIGZvciB0aGUgbGVuZ3RoLCBhbmQgdGhlbiB2ZXJpZmllcyB0aGF0IHRoZXJlJiMzOTtzIG5vIGV4aXN0aW5nIGFwcGxpY2F0aW9uIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYWxsLiBUaGVuLCBpdCBhdHRlbXB0cyB0byBsb29rIHVwIGEga2V5IGJhc2VkIG9uIHRoZSBga2V5X2lkYCBleHRyYWN0ZWQgZnJvbSB0aGUgY29udHJvbCBtZXNzYWdlLiBJdCYjMzk7cyB1c2luZyBgbG9va3VwX3VzZXJfa2V5YCB3aXRoIGBLRVlfTkVFRF9TRUFSQ0hgLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHRoZSB1c2VyIGNvbnRleHQuIEhtbSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBoYW5kbGluZyBlcnJvcnMgZnJvbSBgbG9va3VwX3VzZXJfa2V5YCBjb3JyZWN0bHksIHdoaWNoIGlzIGdvb2QuCgpCdXQsIGhhbmcgb24gYSBzZWNvbmQuIFRoaXMgbGluZSBpcyB0aHJvd2luZyBhIGZsYWc6IGBpZiAoa2V5X3JlZl90b19wdHIoa2V5KS0mZ3Q7dHlwZSA9PSAmYW1wO2tleV90eXBlX3VzZXIpYC4gSXQgYXBwZWFycyB0aGUgY29kZSBpcyByZWplY3RpbmcgYGtleV90eXBlX3VzZXJgPyBUaGF0IGRvZXNuJiMzOTt0IHNlZW0gcmlnaHQgYXQgZmlyc3QgZ2xhbmNlLiBJdCBzaG91bGQgYWxsb3cgdGhlbS4gVW5sZXNzLi4uIHVubGVzcyBpdCBzaG91bGQgYmUgYCE9YCBpbnN0ZWFkIG9mIGA9PWAuIFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBidWcuCgpMZXQgbWUganVzdCB2ZXJpZnkgdGhpcy4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvcnhycGMvc2VuZG1zZy5jYCBmaWxlIHRvIGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlaGF2ZS4gSSBuZWVkIHRvIHNlZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBncmVhdGVyIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3Igb3RoZXIgdXNlcyBvZiB0aGF0IGtleSBhbmQgdGhpcyBleGFjdCBjYWxsLiBBbHJpZ2h0LCBsZXQmIzM5O3MgZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3J4cnBjL3NlbmRtc2cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjIwOlx0XHRcdGNhc2UgUlhSUENfUkVTUE9OU0VfQVBQREFUQTpcbiA2MjE6XHRcdFx0XHRpZiAobGVuICE9IHNpemVvZihrZXlfc2VyaWFsX3QpKVxuIDYyMjpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjIzOlx0XHRcdFx0aWYgKHAtXHUwMDNlY2FsbC5hcHBfZGF0YSlcbiA2MjQ6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDYyNTpcdFx0XHRcdGtleV9pZCA9ICooa2V5X3NlcmlhbF90ICopQ01TR19EQVRBKGNtc2cpO1xuIDYyNjpcdFx0XHRcdGtleSA9IGxvb2t1cF91c2VyX2tleShrZXlfaWQsIDAsIEtFWV9ORUVEX1NFQVJDSCk7XG4gNjI3Olx0XHRcdFx0aWYgKElTX0VSUihrZXkpKVxuIDYyODpcdFx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcbiA2Mjk6XHRcdFx0XHRpZiAoa2V5X3JlZl90b19wdHIoa2V5KS1cdTAwM2V0eXBlID09IFx1MDAyNmtleV90eXBlX3VzZXIpIHtcbiA2MzA6XHRcdFx0XHRcdGtleV9yZWZfcHV0KGtleSk7XG4gNjMxOlx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2MzI6XHRcdFx0XHR9XG4gNjMzOlx0XHRcdFx0cC1cdTAwM2VjYWxsLmFwcF9kYXRhID0ga2V5X3JlZl90b19wdHIoa2V5KTtcbiA2MzQ6XHRcdFx0XHRicmVhaztcbiA2MzU6XHRcbiA2MzY6XHRcdFx0ZGVmYXVsdDpcbiA2Mzc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2Mzg6XHRcdFx0fVxuIDYzOTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTExMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFJ4UlBDIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBzcGlkZXIgc2Vuc2VzIGFyZSB0aW5nbGluZy4gSXQmIzM5O3MgZ290IGA9PSAmYW1wO2tleV90eXBlX3VzZXJgLCB3aGljaCwgZnJhbmtseSwgc2NyZWFtcyBidWchIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCBzaG91bGQgYmUgYSBgIT0gJmFtcDtrZXlfdHlwZV91c2VyYCBpbiB0aGlzIGNvbnRleHQuIEhvd2V2ZXIsIGV2ZW4gaWYgdGhhdCYjMzk7cyBhIG1pc3Rha2UsIHRoZSBjb2RlICp3b3JrcyogYW5kIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBgc2VuZG1zZ2Agb24gYW4gQUZfUlhSUEMgc29ja2V0LiBUaGF0IG1lYW5zIHRoaXMgaXMgYWJzb2x1dGVseSBmdXp6YWJsZS4gV2UgbmVlZCB0byBnZXQgc29tZSBmdXp6IHRlc3RzIHJ1bm5pbmcgb24gdGhpcyBBU0FQLgoKQWxyaWdodCwgdGltZSB0byBpZGVudGlmeSB0aGUga2V5IGFyZWFzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGVzZSBzeW1ib2xzIHNwZWNpZmljYWxseTogYHJ4cnBjX3NlbmRtc2dfY21zZ2AsIGByeHJwY19kb19zZW5kbXNnYCwgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAsIGFuZCBgcnhycGNfc2VuZF9kYXRhYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgd2UgbmVlZCB0byBmb2N1cyBvbiB0byBzdGFydCB3aXRoLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIExldCBtZSBzZWUuLi4geWVzLCBmb3IgdGhlIFJ4R0sgc3BlY2lmaWMgc2VjdGlvbnMsIHdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX1JYR0tgIGVuYWJsZWQuIFdlIGFsc28gbmVlZCBgQ09ORklHX0FGX1JYUlBDYCBhbmQgYENPTkZJR19BRlNfRlNgLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBhcmUgYWxsIHRoZSByZWxldmFudCBjb25maWdzIHRvIHZlcmlmeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJYR0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcnhycGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMvS2NvbmZpZz01OD1jb25maWcgUlhLQURcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy02NS1cbm5ldC9yeHJwYy9LY29uZmlnOjY2OmNvbmZpZyBSWEdLXG5uZXQvcnhycGMvS2NvbmZpZy02Ny1cdGJvb2wgXCYjMzQ7UnhSUEMgR1NTQVBJIHNlY3VyaXR5XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzI1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgSW5zcGVjdGlvbjogQUZTKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQUZTIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGhlYWRpbmcgZGlyZWN0bHkgdG8gYGZzL2Fmcy9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBBbmRyZXcgRmlsZSBTeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBpbnZvbHZlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBBRlMgc3Vic3lzdGVtJiMzOTtzIGN1cnJlbnQgc3RhdGUgd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBicm9hZGVyIGZpbGVzeXN0ZW0gb3B0aW9ucy4gSSBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG51YW5jZXMgdG8ga2VlcCBhbiBleWUgb3V0IGZvci4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvYWZzL0tjb25maWc6Mjpjb25maWcgQUZTX0ZTXG5mcy9hZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbi0tXG5mcy9hZnMvS2NvbmZpZz0xNz1jb25maWcgQUZTX0RFQlVHXG4tLVxuZnMvYWZzL0tjb25maWctMjYtXG5mcy9hZnMvS2NvbmZpZzoyNzpjb25maWcgQUZTX0ZTQ0FDSEVcbmZzL2Fmcy9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMDU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUnhSUEMgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIFJ4UlBDLCBhbmQgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQuIFRoZSBgbmV0L3J4cnBjL0tjb25maWdgIGZpbGUgaXMgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0LCBhcyBpdCBzaG91bGQgaG9sZCB0aGUgY29yZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBSeFJQQyBzdWJzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gcGFyc2UgaXRzIGNvbnRlbnRzIGNhcmVmdWxseS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IGZlYXR1cmVzIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBnb3Zlcm4gaG93IFJ4UlBDIGlzIGJ1aWx0IGFuZCB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGl0IHJlbGllcyB1cG9uLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFGX1JYUlBDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3J4cnBjL0tjb25maWctNS1cbm5ldC9yeHJwYy9LY29uZmlnOjY6Y29uZmlnIEFGX1JYUlBDXG5uZXQvcnhycGMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UnhSUEMgc2Vzc2lvbiBzb2NrZXRzXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWc9MjU9aWYgQUZfUlhSUENcbm5ldC9yeHJwYy9LY29uZmlnLTI2LVxubmV0L3J4cnBjL0tjb25maWc6Mjc6Y29uZmlnIEFGX1JYUlBDX0lQVjZcbm5ldC9yeHJwYy9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWctMzMtXG5uZXQvcnhycGMvS2NvbmZpZzozNDpjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1Ncbm5ldC9yeHJwYy9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtJbmplY3QgcGFja2V0IGxvc3MgaW50byBSeFJQQyBwYWNrZXQgc3RyZWFtXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWctMzktXG5uZXQvcnhycGMvS2NvbmZpZzo0MDpjb25maWcgQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXG5uZXQvcnhycGMvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7SW5qZWN0IGRlbGF5IGludG8gcGFja2V0IHJlY2VwdGlvblwmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTQ5LVxubmV0L3J4cnBjL0tjb25maWc6NTA6Y29uZmlnIEFGX1JYUlBDX0RFQlVHXG5uZXQvcnhycGMvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7UnhSUEMgZHluYW1pYyBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZz04OT1jb25maWcgUlhQRVJGXG4tLVxubmV0L3J4cnBjL0tjb25maWctOTUtXG5uZXQvcnhycGMvS2NvbmZpZzo5Njpjb25maWcgQUZfUlhSUENfS1VOSVRfVEVTVFxubmV0L3J4cnBjL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtSeFJQQyBjcnlwdG8gS1VuaXQgdGVzdFwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNjUyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkNvbmZpZ3VyYXRpb24gRXNzZW50aWFscyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZS4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgQUZfUlhSUENgLCBgQUZTX0ZTYCwgYW5kIGBSWEdLYCBhcmUgdGhlIG1haW4gZHJpdmVycy4gSG9sZCBvbiwgd2FzbiYjMzk7dCBgUlhHS2AgYSBib29sZWFuPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQuIEJlZm9yZSBJIGdvIHRvbyBkZWVwLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgd2hhdCYjMzk7cyBpbiBgS0VZU2AgYW5kIGBLRVlTX1VTRVJgLiBUaGF0JiMzOTtsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBldmFsdWF0ZSB0aGVzZSBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtFWVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9rZXlzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkva2V5cy9LY29uZmlnLTUtXG5zZWN1cml0eS9rZXlzL0tjb25maWc6NjptZW51Y29uZmlnIEtFWVNcbnNlY3VyaXR5L2tleXMvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtFbmFibGUgYWNjZXNzIGtleSByZXRlbnRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2tleXMvS2NvbmZpZz0yND1pZiBLRVlTXG5zZWN1cml0eS9rZXlzL0tjb25maWctMjUtXG5zZWN1cml0eS9rZXlzL0tjb25maWc6MjY6Y29uZmlnIEtFWVNfUkVRVUVTVF9DQUNIRVxuc2VjdXJpdHkva2V5cy9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGVtcG9yYXJ5IGNhY2hpbmcgb2YgdGhlIGxhc3QgcmVxdWVzdF9rZXkoKSByZXN1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI5NjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IEEgUXVpY2sgRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggc29tZSBrZXktcmVsYXRlZCBjaGFuZ2VzIHdpdGhpbiB0aGUgUlhSUEMgc3Vic3lzdGVtLiBGaXJzdCBvZmYsIEkmIzM5O20gZ29pbmcgdG8gYXNzdW1lIGBLRVlTYCBpcyBhbHJlYWR5IGVuYWJsZWQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZSB0byB2ZXJpZnksIHNvIGxldCYjMzk7cyBsaXN0IGl0IG91dCBqdXN0IGluIGNhc2UuIEFuZCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYENPTkZJR19LRVlTYCBhbmQgYENPTkZJR19BRl9SWFJQQ2AgYXMgd2VsbCwganVzdCB0byBiZSB0aG9yb3VnaC4KCkZyb20gdGhlIGZpbGUgY2hhbmdlcywgaXQgbG9va3MgbGlrZSBgb29iLmNgIGhhcyBiZWVuIHJlbW92ZWQsIGFuZCBzZXZlcmFsIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyB0b3VjaGVkOiBgcnhycGNfc2VuZG1zZ19jbXNnYCwgYHJ4cnBjX3NlbmRfZGF0YWAsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCwgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBhbmQgYGFmc19tYWtlX2NhbGxgLiBPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRob3NlLgoKSSYjMzk7bGwgbWFrZSBhIG1lbnRhbCBub3RlIG9mIGFsbCB0aGUgc3ltYm9scyBiZWluZyBmb2N1c2VkIG9uLiBMZXQgbWUgbGlzdCBvdXQgdGhlc2Ugc3ltYm9scyBhZ2FpbjoKYHJ4cnBjX3NlbmRtc2dfY21zZ2AsIGByeHJwY19kb19zZW5kbXNnYCwgYHJ4cnBjX3NlbmRfZGF0YWAsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCwgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBgYWZzX21ha2VfY2FsbGAsIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIGByeHJwY19rZXJuZWxfcXVlcnlfa2V5YCwgYW5kIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAuCgpIb2xkIG9uLi4uIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgaW4gYG5ldC9yeHJwYy9yeGdrLmNgLCBpbnRlcmVzdGluZy4gVGhpcyBpcyBsaWtlbHkgdGhlIGNydWNpYWwgcG9pbnQuIEdpdmVuIGl0cyBuYW1lLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gdXNlciBrZXkgaGFuZGxpbmcuIFRoaXMgd2FycmFudHMgYSBtb3JlIGRldGFpbGVkIGxvb2suIFNvLCBsZXQgbWUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHB1dF91c2VyX2tleV9wYXlsb2FkYCBhbmQgaXRzIHVzYWdlIGluIGBzZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jYC4gSXQgd2lsbCByZXZlYWwgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBnb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHV0X3VzZXJfa2V5X3BheWxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9OTA9c3RhdGljIHZvaWQgdXNlcl9mcmVlX3BheWxvYWRfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwMC0gKi9cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTAxOnZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwMi17XG4tLVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMDUtfVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxMDY6RVhQT1JUX1NZTUJPTF9HUEwocHV0X3VzZXJfa2V5X3BheWxvYWQpO1xuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMDctXG4tLVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYz0xMTI9aW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEyOC1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTI5Olx0cHV0X3VzZXJfa2V5X3BheWxvYWQoemFwKTtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTMwLVx0cmV0dXJuIHJldDtcbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTEzOD12b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSlcbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0Ni1cdFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgTlVMTCk7XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjE0NzpcdFx0cHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpO1xuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xNDgtXHR9XG4tLVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYz0xNTY9dm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KVxuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTU5LVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxNjA6XHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE2MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTEwCgkJCQkJCQlvdXRwdXQ6IDI1MAoJCQkJCQkJdGhvdWdodHM6IDM0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYHB1dF91c2VyX2tleV9wYXlsb2FkYCwgd2hpY2ggaW1tZWRpYXRlbHkgc2NyZWFtcyAmIzM0O2Z1enogbWUhJiMzNDsgVGhhdCYjMzk7cyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGdldCB0aGlzIGludG8gbXkgZnV6emluZyB0YXJnZXRzIEFTQVAuCgpMZXQmIzM5O3MgcXVpY2tseSByZWNhcCB0aGUgY29uZmlncyBhY3RpdmUgaGVyZTogYEFGX1JYUlBDYCwgYEFGU19GU2AsIGFuZCBgUlhHS2AuIFRoZXNlIGFyZSBpbXBvcnRhbnQgY29udGV4dC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uOiBgcnhycGNfc2VuZG1zZ19jbXNnYCwgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfc2VuZF9kYXRhYCwgYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgLCBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGBhZnNfbWFrZV9jYWxsYCwgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXlgLCBhbmQgdGhhdCBicmFuZCBuZXcgYHB1dF91c2VyX2tleV9wYXlsb2FkYC4KCkxldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgYHJ4cnBjX3NlbmRfZGF0YWAuIFJpZ2h0LCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcnhycGNfZG9fc2VuZG1zZ2AgYW5kIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCBhbmQgc2VlbXMgY2VudHJhbCB0byBkYXRhIHRyYW5zbWlzc2lvbiwgZXNwZWNpYWxseSBub3cgdGhhdCBpdCBoYW5kbGVzIGNyeXB0byBlcnJvcnMsIG1ha2luZyBpdCBhIGhpZ2gtdmFsdWUgdGFyZ2V0LgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYC4gQWgsIGNhbGxlZCBmcm9tIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAsIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgYXBwZGF0YSBrZXkuCgpBbmQgYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgLCBpdCYjMzk7cyBjYWxsZWQgdmlhIHRoZSBgcnhna195ZnNgIHNlY3VyaXR5IG9wcyBhbmQgY29uc3RydWN0cyBjaGFsbGVuZ2UgcmVzcG9uc2VzLgoKRmluYWxseSwgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgY2FsbGVkIGZyb20gYGFmc19tYWtlX2NhbGxgLgoKT3ZlcmFsbCwgdGhpcyBwYXRjaCBzZWVtcyBmdW5jdGlvbmFsIGFuZCBJIGNhbiBzZWUgY2xlYXIgcGF0aHMgdG8gdGhlIGNvZGUgSSB3aWxsIHRlc3QuIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIHRvIG1vdmUgb24gYW5kIGxldCYjMzk7cyBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZfUlhSUEMmIzM0OywKICAgICYjMzQ7QUZTX0ZTJiMzNDssCiAgICAmIzM0O1JYR0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19zZW5kbXNnX2Ntc2cmIzM0OywKICAgICYjMzQ7cnhycGNfZG9fc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyeHJwY19zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7cnhna19yZXNwb25kX3RvX2NoYWxsZW5nZSYjMzQ7LAogICAgJiMzNDthZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhJiMzNDssCiAgICAmIzM0O2Fmc19tYWtlX2NhbGwmIzM0OywKICAgICYjMzQ7cnhycGNfa2VybmVsX2JlZ2luX2NhbGwmIzM0OywKICAgICYjMzQ7cnhycGNfa2VybmVsX3F1ZXJ5X2tleSYjMzQ7LAogICAgJiMzNDtwdXRfdXNlcl9rZXlfcGF5bG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUnhSUEMgYW5kIEFGUyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBSeEdLIGNoYWxsZW5nZS1yZXNwb25zZSBhbmQgYXBwZGF0YSB2aWEgYSBuZXcga2V5LWJhc2VkIG1lY2hhbmlzbSBpbnN0ZWFkIG9mIG91dC1vZi1iYW5kIChPT0IpIG1lc3NhZ2VzLiBJdCByZW1vdmVzIHRoZSBPT0IgbWVzc2FnZSBoYW5kbGluZyBlbnRpcmVseSwgY2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IGNvbnRyb2wgbWVzc2FnZSBgUlhSUENfUkVTUE9OU0VfQVBQREFUQWAgZm9yIHVzZXJzcGFjZSB0byBwcm92aWRlIGFwcGRhdGEga2V5cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBhbmQgZmlsZXN5c3RlbSBjb2RlLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnhycGNfc2VuZG1zZ19jbXNnJiMzNDssCiAgICAmIzM0O3J4cnBjX2RvX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cnhycGNfc2VuZF9kYXRhJiMzNDssCiAgICAmIzM0O3J4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UmIzM0OywKICAgICYjMzQ7YWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YSYjMzQ7LAogICAgJiMzNDthZnNfbWFrZV9jYWxsJiMzNDssCiAgICAmIzM0O3J4cnBjX2tlcm5lbF9iZWdpbl9jYWxsJiMzNDssCiAgICAmIzM0O3J4cnBjX2tlcm5lbF9xdWVyeV9rZXkmIzM0OywKICAgICYjMzQ7cHV0X3VzZXJfa2V5X3BheWxvYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIGFuZCBBRlMgc3Vic3lzdGVtcyB0byBoYW5kbGUgUnhHSyBjaGFsbGVuZ2UtcmVzcG9uc2UgYW5kIGFwcGRhdGEgdmlhIGEgbmV3IGtleS1iYXNlZCBtZWNoYW5pc20gaW5zdGVhZCBvZiBvdXQtb2YtYmFuZCAoT09CKSBtZXNzYWdlcy4gSXQgcmVtb3ZlcyB0aGUgT09CIG1lc3NhZ2UgaGFuZGxpbmcgZW50aXJlbHksIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBhbmQgaW50cm9kdWNlcyBhIG5ldyBjb250cm9sIG1lc3NhZ2UgYFJYUlBDX1JFU1BPTlNFX0FQUERBVEFgIGZvciB1c2Vyc3BhY2UgdG8gcHJvdmlkZSBhcHBkYXRhIGtleXMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gY29kZSwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTk6NTkuMDk1MTc4Nzg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDI0NTY2Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGX1JYUlBDXCIsXG4gICAgXCJBRlNfRlNcIixcbiAgICBcIlJYR0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyeHJwY19zZW5kbXNnX2Ntc2dcIixcbiAgICBcInJ4cnBjX2RvX3NlbmRtc2dcIixcbiAgICBcInJ4cnBjX3NlbmRfZGF0YVwiLFxuICAgIFwicnhna19yZXNwb25kX3RvX2NoYWxsZW5nZVwiLFxuICAgIFwiYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YVwiLFxuICAgIFwiYWZzX21ha2VfY2FsbFwiLFxuICAgIFwicnhycGNfa2VybmVsX2JlZ2luX2NhbGxcIixcbiAgICBcInJ4cnBjX2tlcm5lbF9xdWVyeV9rZXlcIixcbiAgICBcInB1dF91c2VyX2tleV9wYXlsb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIGFuZCBBRlMgc3Vic3lzdGVtcyB0byBoYW5kbGUgUnhHSyBjaGFsbGVuZ2UtcmVzcG9uc2UgYW5kIGFwcGRhdGEgdmlhIGEgbmV3IGtleS1iYXNlZCBtZWNoYW5pc20gaW5zdGVhZCBvZiBvdXQtb2YtYmFuZCAoT09CKSBtZXNzYWdlcy4gSXQgcmVtb3ZlcyB0aGUgT09CIG1lc3NhZ2UgaGFuZGxpbmcgZW50aXJlbHksIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBhbmQgaW50cm9kdWNlcyBhIG5ldyBjb250cm9sIG1lc3NhZ2UgYFJYUlBDX1JFU1BPTlNFX0FQUERBVEFgIGZvciB1c2Vyc3BhY2UgdG8gcHJvdmlkZSBhcHBkYXRhIGtleXMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gY29kZSwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1OTo1OS4wOTUxOTUzNzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjkzMzE0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkOTg2NTc3MDJlOGQ4ZDllNGEzZjE1MzRkZjFlMDBhMWM2ZmY2YzY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDEzIDA5OjU5OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jIGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcXG5pbmRleCAxMDMxNjhjNzBkZDRkZi4uZjBmZWMzYTc2NTIyODggMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2NtX3NlY3VyaXR5LmNcXG4rKysgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xcbkBAIC02LDcgKzYsOSBAQFxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXktdHlwZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjY3J5cHRvL2tyYjUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2tleXMvdXNlci10eXBlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYWZzX2NtLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJhZnNfZnMuaFxcXCJcXG5AQCAtMTksMTk1ICsyMSwzOSBAQFxcbiAjZGVmaW5lIHhkcl9sZW5fb2JqZWN0KHgpICg0ICsgcm91bmRfdXAoKHgpLCBzaXplb2YoX19iZTMyKSkpXFxuIFxcbiAjaWZkZWYgQ09ORklHX1JYR0tcXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKTtcXG4tI2VuZGlmXFxuLVxcbiAvKlxcbi0gKiBSZXNwb25kIHRvIGFuIFJ4R0sgY2hhbGxlbmdlLCBhZGRpbmcgYXBwZGF0YS5cXG4rICogQXMgdGhlIFlGUyBSeEdLIGFwcGRhdGEgdG8gYmUgcGFzc2VkIGluIHRoZSBZRlMuRlMtc2VydmljZSBSRVNQT05TRSBwYWNrZXQsXFxuKyAqIGNyZWF0ZSBhIEdTUyB0b2tlbiB0byB1c2UgYXMgYSB0aWNrZXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlc2VydmVyLlxcbiAgKi9cXG4tc3RhdGljIGludCBhZnNfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4te1xcbi0jaWZkZWYgQ09ORklHX1JYR0tcXG4tXFx0c3RydWN0IGtyYjVfYnVmZmVyIGFwcGRhdGEgPSB7fTtcXG4tXFx0c3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcjtcXG4tI2VuZGlmXFxuLVxcdHN0cnVjdCByeHJwY19wZWVyICpwZWVyO1xcbi1cXHR1bnNpZ25lZCBsb25nIHBlZXJfZGF0YTtcXG4tXFx0dTE2IHNlcnZpY2VfaWQ7XFxuLVxcdHU4IHNlY3VyaXR5X2luZGV4O1xcbi1cXG4tXFx0cnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFxcdTAwMjZwZWVyLCBcXHUwMDI2cGVlcl9kYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZzZXJ2aWNlX2lkLCBcXHUwMDI2c2VjdXJpdHlfaW5kZXgpO1xcbi1cXG4tXFx0X2VudGVyKFxcXCIldSwldVxcXCIsIHNlcnZpY2VfaWQsIHNlY3VyaXR5X2luZGV4KTtcXG4tXFxuLVxcdHN3aXRjaCAoc2VydmljZV9pZCkge1xcbi1cXHRcXHQvKiBXZSBkb24ndCBzZW5kIENNX1NFUlZJQ0UgUlBDcywgc28gZG9uJ3QgZXhwZWN0IGEgY2hhbGxlbmdlXFxuLVxcdFxcdCAqIHRoZXJlZnJvbS5cXG4tXFx0XFx0ICovXFxuLVxcdGNhc2UgRlNfU0VSVklDRTpcXG4tXFx0Y2FzZSBWTF9TRVJWSUNFOlxcbi1cXHRjYXNlIFlGU19GU19TRVJWSUNFOlxcbi1cXHRjYXNlIFlGU19WTF9TRVJWSUNFOlxcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cHJfd2FybihcXFwiQ2FuJ3QgcmVzcG9uZCB0byB1bmtub3duIGNoYWxsZW5nZSAldToldVxcXCIsXFxuLVxcdFxcdFxcdHNlcnZpY2VfaWQsIHNlY3VyaXR5X2luZGV4KTtcXG4tXFx0XFx0cmV0dXJuIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKGNoYWxsZW5nZSwgUlhfVVNFUl9BQk9SVCwgLUVQUk9UTyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcXG4tXFx0fVxcbi1cXG4tXFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xcbi0jaWZkZWYgQ09ORklHX1JYS0FEXFxuLVxcdGNhc2UgUlhSUENfU0VDVVJJVFlfUlhLQUQ6XFxuLVxcdFxcdHJldHVybiByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlKTtcXG4tI2VuZGlmXFxuLVxcbi0jaWZkZWYgQ09ORklHX1JYR0tcXG4tXFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9SWEdLOlxcbi1cXHRcXHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcXHUwMDI2YXBwZGF0YSk7XFxuLVxcbi1cXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbi1cXHRcXHRzd2l0Y2ggKHNlcnZpY2VfaWQpIHtcXG4tXFx0XFx0Y2FzZSBGU19TRVJWSUNFOlxcbi1cXHRcXHRjYXNlIFlGU19GU19TRVJWSUNFOlxcbi1cXHRcXHRcXHRzZXJ2ZXIgPSAoc3RydWN0IGFmc19zZXJ2ZXIgKilwZWVyX2RhdGE7XFxuLVxcdFxcdFxcdGlmICghc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSkge1xcbi1cXHRcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWNtX3Rva2VuX2xvY2spO1xcbi1cXHRcXHRcXHRcXHRpZiAoIXNlcnZlci1cXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXFxuLVxcdFxcdFxcdFxcdFxcdGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKGNoYWxsZW5nZSwgc2VydmVyKTtcXG4tXFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWNtX3Rva2VuX2xvY2spO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKVxcbi1cXHRcXHRcXHRcXHRhcHBkYXRhID0gc2VydmVyLVxcdTAwM2VjbV9yeGdrX2FwcGRhdGE7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFxcdTAwMjZhcHBkYXRhKTtcXG4tI2VuZGlmXFxuLVxcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UoY2hhbGxlbmdlLCBSWF9VU0VSX0FCT1JULCAtRVBST1RPLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MpO1xcbi1cXHR9XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFByb2Nlc3MgdGhlIE9PQiBtZXNzYWdlIHF1ZXVlLCBwcm9jZXNzaW5nIGNoYWxsZW5nZSBwYWNrZXRzLlxcbi0gKi9cXG4tdm9pZCBhZnNfcHJvY2Vzc19vb2JfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi17XFxuLVxcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19uZXQsIHJ4X29vYl93b3JrKTtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKm9vYjtcXG4tXFx0ZW51bSByeHJwY19vb2JfdHlwZSB0eXBlO1xcbi1cXG4tXFx0d2hpbGUgKFJFQURfT05DRShuZXQtXFx1MDAzZWxpdmUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICAob29iID0gcnhycGNfa2VybmVsX2RlcXVldWVfb29iKG5ldC1cXHUwMDNlc29ja2V0LCBcXHUwMDI2dHlwZSkpKSB7XFxuLVxcdFxcdHN3aXRjaCAodHlwZSkge1xcbi1cXHRcXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XFxuLVxcdFxcdFxcdGFmc19yZXNwb25kX3RvX2NoYWxsZW5nZShvb2IpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRyeHJwY19rZXJuZWxfZnJlZV9vb2Iob29iKTtcXG4tXFx0fVxcbi19XFxuLVxcbi0jaWZkZWYgQ09ORklHX1JYR0tcXG4tLypcXG4tICogQ3JlYXRlIGEgc2VjdXJpdGllcyBrZXlyaW5nIGZvciB0aGUgY2FjaGUgbWFuYWdlciBhbmQgYXR0YWNoIGEga2V5IHRvIGl0IGZvclxcbi0gKiB0aGUgUnhHSyB0b2tlbnMgd2Ugd2FudCB0byB1c2UgdG8gc2VjdXJlIHRoZSBjYWxsYmFjayBjb25uZWN0aW9uIGJhY2sgZnJvbVxcbi0gKiB0aGUgZmlsZXNlcnZlci5cXG4tICovXFxuLWludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpXFxuLXtcXG4tXFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNTtcXG4tXFx0c3RydWN0IGtleSAqcmluZztcXG4tXFx0a2V5X3JlZl90IGtleTtcXG4tXFx0Y2hhciBLMFszMl0sICpkZXNjO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0cmluZyA9IGtleXJpbmdfYWxsb2MoXFxcImthZnNcXFwiLFxcbi1cXHRcXHRcXHQgICAgIEdMT0JBTF9ST09UX1VJRCwgR0xPQkFMX1JPT1RfR0lELCBjdXJyZW50X2NyZWQoKSxcXG4tXFx0XFx0XFx0ICAgICBLRVlfUE9TX1NFQVJDSCB8IEtFWV9QT1NfV1JJVEUgfFxcbi1cXHRcXHRcXHQgICAgIEtFWV9VU1JfVklFVyB8IEtFWV9VU1JfUkVBRCB8IEtFWV9VU1JfU0VBUkNILFxcbi1cXHRcXHRcXHQgICAgIEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsXFxuLVxcdFxcdFxcdCAgICAgTlVMTCwgTlVMTCk7XFxuLVxcdGlmIChJU19FUlIocmluZykpXFxuLVxcdFxcdHJldHVybiBQVFJfRVJSKHJpbmcpO1xcbi1cXG4tXFx0cmV0ID0gcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzb2NrZXQtXFx1MDAzZXNrLCByaW5nKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0cmV0ID0gLUVOT1BLRztcXG4tXFx0a3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShLUkI1X0VOQ1RZUEVfQUVTMTI4X0NUU19ITUFDX1NIQTFfOTYpO1xcbi1cXHRpZiAoIWtyYjUpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0aWYgKFdBUk5fT05fT05DRShrcmI1LVxcdTAwM2VrZXlfbGVuIFxcdTAwM2Ugc2l6ZW9mKEswKSkpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0cmV0ID0gLUVOT01FTTtcXG4tXFx0ZGVzYyA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCBcXFwiJXU6JXU6JXU6JXVcXFwiLFxcbi1cXHRcXHRcXHQgWUZTX0NNX1NFUlZJQ0UsIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLLCAxLCBrcmI1LVxcdTAwM2VldHlwZSk7XFxuLVxcdGlmICghZGVzYylcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHR3YWl0X2Zvcl9yYW5kb21fYnl0ZXMoKTtcXG4tXFx0Z2V0X3JhbmRvbV9ieXRlcyhLMCwga3JiNS1cXHUwMDNla2V5X2xlbik7XFxuLVxcbi1cXHRrZXkgPSBrZXlfY3JlYXRlKG1ha2Vfa2V5X3JlZihyaW5nLCB0cnVlKSxcXG4tXFx0XFx0XFx0IFxcXCJyeHJwY19zXFxcIiwgZGVzYyxcXG4tXFx0XFx0XFx0IEswLCBrcmI1LVxcdTAwM2VrZXlfbGVuLFxcbi1cXHRcXHRcXHQgS0VZX1BPU19WSUVXIHwgS0VZX1BPU19SRUFEIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsXFxuLVxcdFxcdFxcdCBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTtcXG4tXFx0a2ZyZWUoZGVzYyk7XFxuLVxcdGlmIChJU19FUlIoa2V5KSkge1xcbi1cXHRcXHRyZXQgPSBQVFJfRVJSKGtleSk7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbi1cXHRuZXQtXFx1MDAzZWZzX2NtX3Rva2VuX2tleSA9IGtleV9yZWZfdG9fcHRyKGtleSk7XFxuLVxcdHJldCA9IDA7XFxuLW91dDpcXG4tXFx0a2V5X3B1dChyaW5nKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4tfVxcbi1cXG4tLypcXG4tICogQ3JlYXRlIGFuIFlGUyBSeEdLIEdTUyB0b2tlbiB0byB1c2UgYXMgYSB0aWNrZXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlc2VydmVyLlxcbi0gKi9cXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKVxcbitzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX3J4Z2tfY21fYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIgZW5jdHlwZSlcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICpjb25uX2tyYjUsICp0b2tlbl9rcmI1O1xcbiBcXHRjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKnRva2VuX2tleTtcXG4gXFx0c3RydWN0IGNyeXB0b19hZWFkICphZWFkO1xcbiBcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7XFxuIFxcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzZXJ2ZXItXFx1MDAzZWNlbGwtXFx1MDAzZW5ldDtcXG4tXFx0Y29uc3Qgc3RydWN0IGtleSAqa2V5ID0gbmV0LVxcdTAwM2Vmc19jbV90b2tlbl9rZXk7XFxuLVxcdHNpemVfdCBrZXlzaXplLCB1dWlkc2l6ZSwgYXV0aHNpemUsIHRva3NpemUsIGVuY3NpemUsIGNvbnRzaXplLCBhZGF0YXNpemUsIG9mZnNldDtcXG4rXFx0Y29uc3Qgc3RydWN0IGtleSAqY21fa2V5ID0gbmV0LVxcdTAwM2Vmc19jbV90b2tlbl9rZXk7XFxuK1xcdHN0cnVjdCBrZXkgKmFwcGRhdGFfa2V5ID0gTlVMTDtcXG4rXFx0c2l6ZV90IGtleXNpemUsIHV1aWRzaXplLCBhdXRoc2l6ZSwgdG9rc2l6ZSwgZW5jc2l6ZSwgY29udHNpemU7XFxuK1xcdHNpemVfdCBhZGF0YXNpemUsIG9mZnNldDtcXG4gXFx0X19iZTMyIGNhcHNbMV0gPSB7XFxuIFxcdFxcdFswXSA9IGh0b25sKEFGU19DQVBfRVJST1JfVFJBTlNMQVRJT04pLFxcbiBcXHR9O1xcbiBcXHRfX2JlMzIgKnhkcjtcXG4gXFx0dm9pZCAqYXBwZGF0YSwgKkswLCAqZW5jYmFzZTtcXG4tXFx0dTMyIGVuY3R5cGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoIWtleSlcXG4rXFx0aWYgKCFjbV9rZXkpXFxuIFxcdFxcdHJldHVybiAtRU5PS0VZO1xcbiBcXG4gXFx0LyogQXNzdW1lIHRoYXQgdGhlIGZpbGVzZXJ2ZXIgaXMgaGFwcHkgdG8gdXNlIHRoZSBzYW1lIGVuY29kaW5nIHR5cGUgYXNcXG4gXFx0ICogd2Ugd2VyZSB0b2xkIHRvIHVzZSBieSB0aGUgdG9rZW4gb2J0YWluZWQgYnkgdGhlIHVzZXIuXFxuIFxcdCAqL1xcbi1cXHRlbmN0eXBlID0gcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSk7XFxuLVxcbiBcXHRjb25uX2tyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XFxuIFxcdGlmICghY29ubl9rcmI1KVxcbiBcXHRcXHRyZXR1cm4gLUVOT1BLRztcXG4tXFx0dG9rZW5fa3JiNSA9IGtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xcbi1cXHR0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopXFx1MDAyNmtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzJdO1xcbitcXHR0b2tlbl9rcmI1ID0gY21fa2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMF07XFxuK1xcdHRva2VuX2tleSA9IChjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKilcXHUwMDI2Y21fa2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMl07XFxuIFxcbiBcXHQvKiBzdHJ1Y3Qgcnhna19rZXkge1xcbiBcXHQgKlxcdGFmc191aW50MzJcXHRlbmN0eXBlO1xcbkBAIC0zMjcsOSArMTczLDIzIEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0X2FlYWQ7XFxuIFxcbi1cXHRzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5sZW4gID0gYWRhdGFzaXplO1xcbi1cXHRzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhID0gYXBwZGF0YTtcXG4tXFx0YXBwZGF0YSA9IE5VTEw7XFxuK1xcdGFwcGRhdGFfa2V5ID0ga2V5X2FsbG9jKFxcdTAwMjZrZXlfdHlwZV91c2VyLCBcXFwicnhycGM6IGFmcyByeGdrIGFwcGRhdGFcXFwiLFxcbitcXHRcXHRcXHRcXHRHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksXFxuK1xcdFxcdFxcdFxcdEtFWV9QT1NfVklFVyB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLFxcbitcXHRcXHRcXHRcXHRLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihhcHBkYXRhX2tleSkpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihhcHBkYXRhX2tleSk7XFxuK1xcdFxcdGdvdG8gb3V0X2FlYWQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGtleV9pbnN0YW50aWF0ZV9hbmRfbGluayhhcHBkYXRhX2tleSwgYXBwZGF0YSwgYWRhdGFzaXplLCBOVUxMLCBOVUxMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0a2V5X3B1dChhcHBkYXRhX2tleSk7XFxuK1xcdFxcdGdvdG8gb3V0X2FlYWQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0b3JlIHRoZSBhcHBkYXRhIGJlZm9yZSB0aGUga2V5IHBvaW50ZXIgKi9cXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnNlcnZlci1cXHUwMDNleWZzX3J4Z2tfYXBwZGF0YSwgYXBwZGF0YV9rZXkpO1xcbiBcXG4gb3V0X2FlYWQ6XFxuIFxcdGNyeXB0b19mcmVlX2FlYWQoYWVhZCk7XFxuQEAgLTMzOSwzICsxOTksMTE2IEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiAjZW5kaWYgLyogQ09ORklHX1JYR0sgKi9cXG4rXFxuKy8qXFxuKyAqIENyZWF0ZSB0aGUgYXBwbGljYXRpb24gZGF0YSB0byBnbyBpbiBhIFJFU1BPTlNFIHBhY2tldCBhIHNlcnZlcidzIENIQUxMRU5HRVxcbisgKiBmcm9tIHRoZSBwYXJhbWV0ZXJzIGNvbnRhaW5lZCBpbiBhIGtleS4gIFRoZSBrZXkgc3BlY2lmaWVzIHRoZSBzZWN1cml0eVxcbisgKiBpbmRleCBhbmQgb3RoZXIgYXBwcm9wcmlhdGUgcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBlbmNvZGluZyB0eXBlIGZvciBSeEdLLlxcbisgKi9cXG4raW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KVxcbit7XFxuK1xcdHUzMiBrcmI1X2VuY3R5cGU7XFxuK1xcdGludCByZXQ7XFxuK1xcdHU4IHNlY3VyaXR5X2luZGV4O1xcbitcXG4rXFx0aWYgKCFrZXkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cnhycGNfa2VybmVsX3F1ZXJ5X2tleShrZXksIFxcdTAwMjZzZWN1cml0eV9pbmRleCwgXFx1MDAyNmtyYjVfZW5jdHlwZSk7XFxuK1xcbitcXHRfZW50ZXIoXFxcIiV1LCV1XFxcIiwgc2VjdXJpdHlfaW5kZXgsIGtyYjVfZW5jdHlwZSk7XFxuK1xcbitcXHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XFxuKyNpZmRlZiBDT05GSUdfUlhHS1xcbitcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbitcXHRcXHQvKiBSZWFkIHRoZSBrZXkgcG9pbnRlciBiZWZvcmUgdGhlIGFwcGRhdGEgKi9cXG4rXFx0XFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnNlcnZlci1cXHUwMDNleWZzX3J4Z2tfYXBwZGF0YSkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSAwO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWNtX3Rva2VuX2xvY2spO1xcbitcXG4rXFx0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xcbisjaWZkZWYgQ09ORklHX1JYR0tcXG4rXFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcXG4rXFx0XFx0LyogUmVhZCB0aGUga2V5IHBvaW50ZXIgYmVmb3JlIHRoZSBhcHBkYXRhICovXFxuK1xcdFxcdGlmIChzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZXlmc19yeGdrX2FwcGRhdGEpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0cmV0ID0gYWZzX2NyZWF0ZV95ZnNfcnhna19jbV9hcHBkYXRhKHNlcnZlciwga3JiNV9lbmN0eXBlKTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWNtX3Rva2VuX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisjaWZkZWYgQ09ORklHX1JYR0tcXG4rLypcXG4rICogQ3JlYXRlIGEgc2VjdXJpdGllcyBrZXlyaW5nIGZvciB0aGUgY2FjaGUgbWFuYWdlciBhbmQgYXR0YWNoIGEga2V5IHRvIGl0IGZvclxcbisgKiB0aGUgUnhHSyB0b2tlbnMgd2Ugd2FudCB0byB1c2UgdG8gc2VjdXJlIHRoZSBjYWxsYmFjayBjb25uZWN0aW9uIGJhY2sgZnJvbVxcbisgKiB0aGUgZmlsZXNlcnZlci5cXG4rICovXFxuK2ludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNTtcXG4rXFx0c3RydWN0IGtleSAqcmluZztcXG4rXFx0a2V5X3JlZl90IGtleTtcXG4rXFx0Y2hhciBLMFszMl0sICpkZXNjO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmluZyA9IGtleXJpbmdfYWxsb2MoXFxcImthZnNcXFwiLFxcbitcXHRcXHRcXHQgICAgIEdMT0JBTF9ST09UX1VJRCwgR0xPQkFMX1JPT1RfR0lELCBjdXJyZW50X2NyZWQoKSxcXG4rXFx0XFx0XFx0ICAgICBLRVlfUE9TX1NFQVJDSCB8IEtFWV9QT1NfV1JJVEUgfFxcbitcXHRcXHRcXHQgICAgIEtFWV9VU1JfVklFVyB8IEtFWV9VU1JfUkVBRCB8IEtFWV9VU1JfU0VBUkNILFxcbitcXHRcXHRcXHQgICAgIEtFWV9BTExPQ19OT1RfSU5fUVVPVEEsXFxuK1xcdFxcdFxcdCAgICAgTlVMTCwgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIocmluZykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHJpbmcpO1xcbitcXG4rXFx0cmV0ID0gcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzb2NrZXQtXFx1MDAzZXNrLCByaW5nKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gLUVOT1BLRztcXG4rXFx0a3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShLUkI1X0VOQ1RZUEVfQUVTMTI4X0NUU19ITUFDX1NIQTFfOTYpO1xcbitcXHRpZiAoIWtyYjUpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRShrcmI1LVxcdTAwM2VrZXlfbGVuIFxcdTAwM2Ugc2l6ZW9mKEswKSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0ZGVzYyA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCBcXFwiJXU6JXU6JXU6JXVcXFwiLFxcbitcXHRcXHRcXHQgWUZTX0NNX1NFUlZJQ0UsIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLLCAxLCBrcmI1LVxcdTAwM2VldHlwZSk7XFxuK1xcdGlmICghZGVzYylcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHR3YWl0X2Zvcl9yYW5kb21fYnl0ZXMoKTtcXG4rXFx0Z2V0X3JhbmRvbV9ieXRlcyhLMCwga3JiNS1cXHUwMDNla2V5X2xlbik7XFxuK1xcbitcXHRrZXkgPSBrZXlfY3JlYXRlKG1ha2Vfa2V5X3JlZihyaW5nLCB0cnVlKSxcXG4rXFx0XFx0XFx0IFxcXCJyeHJwY19zXFxcIiwgZGVzYyxcXG4rXFx0XFx0XFx0IEswLCBrcmI1LVxcdTAwM2VrZXlfbGVuLFxcbitcXHRcXHRcXHQgS0VZX1BPU19WSUVXIHwgS0VZX1BPU19SRUFEIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsXFxuK1xcdFxcdFxcdCBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTtcXG4rXFx0a2ZyZWUoZGVzYyk7XFxuK1xcdGlmIChJU19FUlIoa2V5KSkge1xcbitcXHRcXHRyZXQgPSBQVFJfRVJSKGtleSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRuZXQtXFx1MDAzZWZzX2NtX3Rva2VuX2tleSA9IGtleV9yZWZfdG9fcHRyKGtleSk7XFxuK1xcdHJldCA9IDA7XFxuK291dDpcXG4rXFx0a2V5X3B1dChyaW5nKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbisjZW5kaWYgLyogQ09ORklHX1JYR0sgKi9cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Ntc2VydmljZS5jIGIvZnMvYWZzL2Ntc2VydmljZS5jXFxuaW5kZXggZGIzOTRmMTAxZmM2NmEuLjMyMTIwYmMxZGNiMDkxIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9jbXNlcnZpY2UuY1xcbisrKyBiL2ZzL2Fmcy9jbXNlcnZpY2UuY1xcbkBAIC0yMywxMSArMjMsMTEgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9jYWxsYmFjayhzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfcHJvYmVfdXVpZChzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfdGVsbF9tZV9hYm91dF95b3Vyc2VsZihzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuIHN0YXRpYyB2b2lkIGFmc19jbV9kZXN0cnVjdG9yKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG4tc3RhdGljIHZvaWQgU1JYQUZTQ0JfQ2FsbEJhY2soc3RydWN0IHdvcmtfc3RydWN0ICopO1xcbi1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Jbml0Q2FsbEJhY2tTdGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XFxuLXN0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG4tc3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmVVdWlkKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG4tc3RhdGljIHZvaWQgU1JYQUZTQ0JfVGVsbE1lQWJvdXRZb3Vyc2VsZihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XFxuK3N0YXRpYyB2b2lkIFNSWEFGU0NCX0NhbGxCYWNrKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XFxuK3N0YXRpYyB2b2lkIFNSWEFGU0NCX0luaXRDYWxsQmFja1N0YXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XFxuK3N0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XFxuK3N0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlVXVpZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpO1xcbitzdGF0aWMgdm9pZCBTUlhBRlNDQl9UZWxsTWVBYm91dFlvdXJzZWxmKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XFxuIFxcbiBzdGF0aWMgaW50IGFmc19kZWxpdmVyX3lmc19jYl9jYWxsYmFjayhzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuIFxcbkBAIC0xNjEsMTAgKzE2MSw4IEBAIHN0YXRpYyB2b2lkIGFmc19hYm9ydF9zZXJ2aWNlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCB1MzIgYWJvcnRfY29kZSwgaW50IGVyXFxuIC8qXFxuICAqIFRoZSBzZXJ2ZXIgc3VwcGxpZWQgYSBsaXN0IG9mIGNhbGxiYWNrcyB0aGF0IGl0IHdhbnRlZCB0byBicmVhay5cXG4gICovXFxuLXN0YXRpYyB2b2lkIFNSWEFGU0NCX0NhbGxCYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4rc3RhdGljIHZvaWQgU1JYQUZTQ0JfQ2FsbEJhY2soc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbiB7XFxuLVxcdHN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX2NhbGwsIHdvcmspO1xcbi1cXG4gXFx0X2VudGVyKFxcXCJcXFwiKTtcXG4gXFxuIFxcdC8qIFdlIG5lZWQgdG8gYnJlYWsgdGhlIGNhbGxiYWNrcyBiZWZvcmUgc2VuZGluZyB0aGUgcmVwbHkgYXMgdGhlXFxuQEAgLTE4MCw3ICsxNzgsNiBAQCBzdGF0aWMgdm9pZCBTUlhBRlNDQl9DYWxsQmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdH1cXG4gXFxuIFxcdGFmc19zZW5kX2VtcHR5X3JlcGx5KGNhbGwpO1xcbi1cXHRhZnNfcHV0X2NhbGwoY2FsbCk7XFxuIFxcdF9sZWF2ZShcXFwiXFxcIik7XFxuIH1cXG4gXFxuQEAgLTI4NCwxNiArMjgxLDEzIEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfY2FsbGJhY2soc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbiAvKlxcbiAgKiBhbGxvdyB0aGUgZmlsZXNlcnZlciB0byByZXF1ZXN0IGNhbGxiYWNrIHN0YXRlIChyZS0paW5pdGlhbGlzYXRpb25cXG4gICovXFxuLXN0YXRpYyB2b2lkIFNSWEFGU0NCX0luaXRDYWxsQmFja1N0YXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4rc3RhdGljIHZvaWQgU1JYQUZTQ0JfSW5pdENhbGxCYWNrU3RhdGUoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbiB7XFxuLVxcdHN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX2NhbGwsIHdvcmspO1xcbi1cXG4gXFx0X2VudGVyKFxcXCJ7JXB9XFxcIiwgY2FsbC1cXHUwMDNlc2VydmVyKTtcXG4gXFxuIFxcdGlmIChjYWxsLVxcdTAwM2VzZXJ2ZXIpXFxuIFxcdFxcdGFmc19pbml0X2NhbGxiYWNrX3N0YXRlKGNhbGwtXFx1MDAzZXNlcnZlcik7XFxuIFxcdGFmc19zZW5kX2VtcHR5X3JlcGx5KGNhbGwpO1xcbi1cXHRhZnNfcHV0X2NhbGwoY2FsbCk7XFxuIFxcdF9sZWF2ZShcXFwiXFxcIik7XFxuIH1cXG4gXFxuQEAgLTM4MCwxMyArMzc0LDEwIEBAIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY2JfaW5pdF9jYWxsX2JhY2tfc3RhdGUzKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4gLypcXG4gICogYWxsb3cgdGhlIGZpbGVzZXJ2ZXIgdG8gc2VlIGlmIHRoZSBjYWNoZSBtYW5hZ2VyIGlzIHN0aWxsIGFsaXZlXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3N0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4ge1xcbi1cXHRzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFmc19jYWxsLCB3b3JrKTtcXG4tXFxuIFxcdF9lbnRlcihcXFwiXFxcIik7XFxuIFxcdGFmc19zZW5kX2VtcHR5X3JlcGx5KGNhbGwpO1xcbi1cXHRhZnNfcHV0X2NhbGwoY2FsbCk7XFxuIFxcdF9sZWF2ZShcXFwiXFxcIik7XFxuIH1cXG4gXFxuQEAgLTQxMyw5ICs0MDQsOCBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4gICogQWxsb3cgdGhlIGZpbGVzZXJ2ZXIgdG8gcXVpY2tseSBmaW5kIG91dCBpZiB0aGUgY2FjaGUgbWFuYWdlciBoYXMgYmVlblxcbiAgKiByZWJvb3RlZC5cXG4gICovXFxuLXN0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlVXVpZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3N0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlVXVpZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuIHtcXG4tXFx0c3RydWN0IGFmc19jYWxsICpjYWxsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfY2FsbCwgd29yayk7XFxuIFxcdHN0cnVjdCBhZnNfdXVpZCAqciA9IGNhbGwtXFx1MDAzZXJlcXVlc3Q7XFxuIFxcbiBcXHRfZW50ZXIoXFxcIlxcXCIpO1xcbkBAIC00MjUsNyArNDE1LDYgQEAgc3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmVVdWlkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0ZWxzZVxcbiBcXHRcXHRhZnNfYWJvcnRfc2VydmljZV9jYWxsKGNhbGwsIDEsIDEsIGFmc19hYm9ydF9wcm9iZXV1aWRfbmVnYXRpdmUpO1xcbiBcXG4tXFx0YWZzX3B1dF9jYWxsKGNhbGwpO1xcbiBcXHRfbGVhdmUoXFxcIlxcXCIpO1xcbiB9XFxuIFxcbkBAIC00ODksOSArNDc4LDggQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4gLypcXG4gICogYWxsb3cgdGhlIGZpbGVzZXJ2ZXIgdG8gYXNrIGFib3V0IHRoZSBjYWNoZSBtYW5hZ2VyJ3MgY2FwYWJpbGl0aWVzXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBTUlhBRlNDQl9UZWxsTWVBYm91dFlvdXJzZWxmKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4rc3RhdGljIHZvaWQgU1JYQUZTQ0JfVGVsbE1lQWJvdXRZb3Vyc2VsZihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuIHtcXG4tXFx0c3RydWN0IGFmc19jYWxsICpjYWxsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfY2FsbCwgd29yayk7XFxuIFxcdGludCBsb29wO1xcbiBcXG4gXFx0c3RydWN0IHtcXG5AQCAtNTIzLDcgKzUxMSw2IEBAIHN0YXRpYyB2b2lkIFNSWEFGU0NCX1RlbGxNZUFib3V0WW91cnNlbGYoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRyZXBseS5jYXAuY2FwY291bnQgPSBodG9ubCgxKTtcXG4gXFx0cmVwbHkuY2FwLmNhcHNbMF0gPSBodG9ubChBRlNfQ0FQX0VSUk9SX1RSQU5TTEFUSU9OKTtcXG4gXFx0YWZzX3NlbmRfc2ltcGxlX3JlcGx5KGNhbGwsIFxcdTAwMjZyZXBseSwgc2l6ZW9mKHJlcGx5KSk7XFxuLVxcdGFmc19wdXRfY2FsbChjYWxsKTtcXG4gXFx0X2xlYXZlKFxcXCJcXFwiKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmNcXG5pbmRleCAwNDY3NzQyYmZlZWUzNC4uNjI1ZGM2N2Y3OWYzNjYgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ZpbGUuY1xcbisrKyBiL2ZzL2Fmcy9maWxlLmNcXG5AQCAtMjk4LDcgKzI5OCw3IEBAIHN0YXRpYyB2b2lkIGFmc19yZWFkX3JlY2VpdmUoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbiBcXHRvcC1cXHUwMDNlY2FsbF9yZXNwb25kZWRcXHQ9IGNhbGwtXFx1MDAzZXJlc3BvbmRlZDtcXG4gXFx0b3AtXFx1MDAzZWNhbGxcXHRcXHQ9IE5VTEw7XFxuIFxcdGNhbGwtXFx1MDAzZW9wXFx0XFx0PSBOVUxMO1xcbi1cXHRhZnNfcHV0X2NhbGwoY2FsbCk7XFxuK1xcdGFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfcmVhZF9vcCk7XFxuIFxcbiBcXHQvKiBJZiB0aGUgY2FsbCBmYWlsZWQsIHRoZW4gd2UgbmVlZCB0byBjcmFuayB0aGUgc2VydmVyIHJvdGF0aW9uXFxuIFxcdCAqIGhhbmRsZSBhbmQgdHJ5IHRoZSBuZXh0LlxcbkBAIC0zMTYsMTUgKzMxNiwxNyBAQCB2b2lkIGFmc19mZXRjaF9kYXRhX2FzeW5jX3J4KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3RydWN0IGFmc19jYWxsICpjYWxsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfY2FsbCwgYXN5bmNfd29yayk7XFxuIFxcbiBcXHRhZnNfcmVhZF9yZWNlaXZlKGNhbGwpO1xcbi1cXHRhZnNfcHV0X2NhbGwoY2FsbCk7XFxuK1xcbitcXHRpZiAoY2FsbC1cXHUwMDNlc3RhdGUgPT0gQUZTX0NBTExfQ09NUExFVEUpIHtcXG4rXFx0XFx0Y2FuY2VsX3dvcmsoXFx1MDAyNmNhbGwtXFx1MDAzZWFzeW5jX3dvcmspO1xcbitcXHRcXHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3JlYWRfY29tcGxldGUpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHZvaWQgYWZzX2ZldGNoX2RhdGFfaW1tZWRpYXRlX2NhbmNlbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuIHtcXG4gXFx0aWYgKGNhbGwtXFx1MDAzZWFzeW5jKSB7XFxuLVxcdFxcdGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV93YWtlKTtcXG4tXFx0XFx0aWYgKCFxdWV1ZV93b3JrKGFmc19hc3luY19jYWxscywgXFx1MDAyNmNhbGwtXFx1MDAzZWFzeW5jX3dvcmspKVxcbi1cXHRcXHRcXHRhZnNfZGVmZXJyZWRfcHV0X2NhbGwoY2FsbCk7XFxuK1xcdFxcdHF1ZXVlX3dvcmsoYWZzX2FzeW5jX2NhbGxzLCBcXHUwMDI2Y2FsbC1cXHUwMDNlYXN5bmNfd29yayk7XFxuIFxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNmNhbGwtXFx1MDAzZWFzeW5jX3dvcmspO1xcbiBcXHR9XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzX29wZXJhdGlvbi5jIGIvZnMvYWZzL2ZzX29wZXJhdGlvbi5jXFxuaW5kZXggMjA4MDFiMjk1MjFkMWUuLmI4ODcwNDczOThiOWNiIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9mc19vcGVyYXRpb24uY1xcbisrKyBiL2ZzL2Fmcy9mc19vcGVyYXRpb24uY1xcbkBAIC0yOTYsNyArMjk2LDcgQEAgdm9pZCBhZnNfd2FpdF9mb3Jfb3BlcmF0aW9uKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4gXFx0XFx0XFx0b3AtXFx1MDAzZWNhbGxfYWJvcnRfY29kZSA9IG9wLVxcdTAwM2VjYWxsLVxcdTAwM2VhYm9ydF9jb2RlO1xcbiBcXHRcXHRcXHRvcC1cXHUwMDNlY2FsbF9lcnJvciA9IG9wLVxcdTAwM2VjYWxsLVxcdTAwM2VlcnJvcjtcXG4gXFx0XFx0XFx0b3AtXFx1MDAzZWNhbGxfcmVzcG9uZGVkID0gb3AtXFx1MDAzZWNhbGwtXFx1MDAzZXJlc3BvbmRlZDtcXG4tXFx0XFx0XFx0YWZzX3B1dF9jYWxsKG9wLVxcdTAwM2VjYWxsKTtcXG4rXFx0XFx0XFx0YWZzX3B1dF9jYWxsKG9wLVxcdTAwM2VjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfd2FpdF9vcCk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzX3Byb2JlLmMgYi9mcy9hZnMvZnNfcHJvYmUuY1xcbmluZGV4IGE5MWFkMTkzOGQwNzg4Li5lMjZmN2YxZTMwYTIzYSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZnNfcHJvYmUuY1xcbisrKyBiL2ZzL2Fmcy9mc19wcm9iZS5jXFxuQEAgLTI0MSw5ICsyNDEsMTQgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuIFxcdHN0cnVjdCBhZnNfZW5kcG9pbnRfc3RhdGUgKmVzdGF0ZSwgKm9sZDtcXG4gXFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKm9sZF9hbGlzdCA9IE5VTEwsICphbGlzdDtcXG4gXFx0dW5zaWduZWQgbG9uZyB1bnByb2JlZDtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdF9lbnRlcihcXFwiJXBVXFxcIiwgXFx1MDAyNnNlcnZlci1cXHUwMDNldXVpZCk7XFxuIFxcbitcXHRyZXQgPSBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHNlcnZlciwga2V5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbiBcXHRlc3RhdGUgPSBremFsbG9jX29iaigqZXN0YXRlKTtcXG4gXFx0aWYgKCFlc3RhdGUpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZnNjbGllbnQuYyBiL2ZzL2Fmcy9mc2NsaWVudC5jXFxuaW5kZXggYTJmZmQ2MDg4OWY4OWQuLjlhY2FkNTAxN2ZiYWIzIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9mc2NsaWVudC5jXFxuKysrIGIvZnMvYWZzL2ZzY2xpZW50LmNcXG5AQCAtNDc3LDYgKzQ3Nyw5IEBAIHZvaWQgYWZzX2ZzX2ZldGNoX2RhdGEoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbiBcXHRpZiAoIWNhbGwpXFxuIFxcdFxcdHJldHVybiBhZnNfb3Bfbm9tZW0ob3ApO1xcbiBcXG4rXFx0aWYgKG9wLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFGU19PUEVSQVRJT05fQVNZTkMpXFxuK1xcdFxcdGNhbGwtXFx1MDAzZWFzeW5jID0gdHJ1ZTtcXG4rXFxuIFxcdC8qIG1hcnNoYWxsIHRoZSBwYXJhbWV0ZXJzICovXFxuIFxcdGJwID0gY2FsbC1cXHUwMDNlcmVxdWVzdDtcXG4gXFx0YnBbMF0gPSBodG9ubChGU0ZFVENIREFUQSk7XFxuQEAgLTE2NTksNyArMTY2Miw3IEBAIGludCBhZnNfZnNfZ2l2ZV91cF9hbGxfY2FsbGJhY2tzKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuIFxcdHJldCA9IGNhbGwtXFx1MDAzZWVycm9yO1xcbiBcXHRpZiAoY2FsbC1cXHUwMDNlcmVzcG9uZGVkKVxcbiBcXHRcXHRzZXRfYml0KEFGU19TRVJWRVJfRkxfUkVTUE9ORElORywgXFx1MDAyNnNlcnZlci1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRhZnNfcHV0X2NhbGwoY2FsbCk7XFxuK1xcdGFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfZ2l2ZXVwY2FsbGJhY2tzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTc3NSw3ICsxNzc4LDcgQEAgYm9vbCBhZnNfZnNfZ2V0X2NhcGFiaWxpdGllcyhzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbiBcXG4gXFx0dHJhY2VfYWZzX21ha2VfZnNfY2FsbChjYWxsLCBOVUxMKTtcXG4gXFx0YWZzX21ha2VfY2FsbChjYWxsLCBHRlBfTk9GUyk7XFxuLVxcdGFmc19wdXRfY2FsbChjYWxsKTtcXG4rXFx0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9nZXRfY2FwYWJpbGl0aWVzKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcXG5pbmRleCA2MDFmMDFlNWMxNWZjYy4uOTMyMjIzNGNlN2Y3NDkgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9hZnMvaW50ZXJuYWwuaFxcbkBAIC0xMjksNyArMTI5LDcgQEAgc3RydWN0IGFmc19jYWxsIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGFmc19jYWxsX3R5cGUgKnR5cGU7XFx0LyogdHlwZSBvZiBjYWxsICovXFxuIFxcdHdhaXRfcXVldWVfaGVhZF90XFx0d2FpdHE7XFx0XFx0LyogcHJvY2Vzc2VzIGF3YWl0aW5nIGNvbXBsZXRpb24gKi9cXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0XFx0YXN5bmNfd29yaztcXHQvKiBhc3luYyBJL08gcHJvY2Vzc29yICovXFxuLVxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHdvcms7XFx0XFx0LyogYWN0dWFsIHdvcmsgcHJvY2Vzc29yICovXFxuK1xcdHZvaWQgKCp3b3JrKShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpO1xcdC8qIFdvcmtlciBmdW5jdGlvbiAqL1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRmcmVlX3dvcms7XFx0LyogRGVmZXJyZWQgZnJlZSBwcm9jZXNzb3IgKi9cXG4gXFx0c3RydWN0IHJ4cnBjX2NhbGxcXHQqcnhjYWxsO1xcdC8qIFJ4UlBDIGNhbGwgaGFuZGxlICovXFxuIFxcdHN0cnVjdCByeHJwY19wZWVyXFx0KnBlZXI7XFx0XFx0LyogUmVtb3RlIGVuZHBvaW50ICovXFxuQEAgLTE2OSw3ICsxNjksNiBAQCBzdHJ1Y3QgYWZzX2NhbGwge1xcbiBcXHR1bnNpZ25lZFxcdFxcdHJlcGx5X21heDtcXHQvKiBtYXhpbXVtIHNpemUgb2YgcmVwbHkgKi9cXG4gXFx0dW5zaWduZWRcXHRcXHRjb3VudDI7XFx0XFx0LyogY291bnQgdXNlZCBpbiB1bm1hcnNoYWxsaW5nICovXFxuIFxcdHVuc2lnbmVkIGNoYXJcXHRcXHR1bm1hcnNoYWxsO1xcdC8qIHVubWFyc2hhbGxpbmcgcGhhc2UgKi9cXG4tXFx0Ym9vbFxcdFxcdFxcdGRyb3BfcmVmO1xcdC8qIFQgaWYgbmVlZCB0byBkcm9wIHJlZiBmb3IgaW5jb21pbmcgY2FsbCAqL1xcbiBcXHRib29sXFx0XFx0XFx0bmVlZF9hdHRlbnRpb247XFx0LyogVCBpZiBSeFJQQyBwb2tlZCB1cyAqL1xcbiBcXHRib29sXFx0XFx0XFx0YXN5bmM7XFx0XFx0LyogVCBpZiBhc3luY2hyb25vdXMgKi9cXG4gXFx0Ym9vbFxcdFxcdFxcdHVwZ3JhZGU7XFx0LyogVCB0byByZXF1ZXN0IHNlcnZpY2UgdXBncmFkZSAqL1xcbkBAIC0yMDgsNyArMjA3LDcgQEAgc3RydWN0IGFmc19jYWxsX3R5cGUge1xcbiBcXHR2b2lkICgqYXN5bmNfcngpKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuIFxcbiBcXHQvKiBXb3JrIGZ1bmN0aW9uICovXFxuLVxcdHZvaWQgKCp3b3JrKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbitcXHR2b2lkICgqd29yaykoc3RydWN0IGFmc19jYWxsICpjYWxsKTtcXG4gXFxuIFxcdC8qIENhbGwgZG9uZSBmdW5jdGlvbiAoZ2V0cyBjYWxsZWQgaW1tZWRpYXRlbHkgb24gc3VjY2VzcyBvciBmYWlsdXJlKSAqL1xcbiBcXHR2b2lkICgqZG9uZSkoc3RydWN0IGFmc19jYWxsICpjYWxsKTtcXG5AQCAtMjgzLDcgKzI4Miw2IEBAIHN0cnVjdCBhZnNfbmV0IHtcXG4gXFx0c3RydWN0IHNvY2tldFxcdFxcdCpzb2NrZXQ7XFxuIFxcdHN0cnVjdCBhZnNfY2FsbFxcdFxcdCpzcGFyZV9pbmNvbWluZ19jYWxsO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrO1xcbi1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRyeF9vb2Jfd29yaztcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0c29ja2V0X211dGV4O1xcbiBcXHRhdG9taWNfdFxcdFxcdG5yX291dHN0YW5kaW5nX2NhbGxzO1xcbiBcXHRhdG9taWNfdFxcdFxcdG5yX3N1cGVyYmxvY2tzO1xcbkBAIC01NDgsNyArNTQ2LDcgQEAgc3RydWN0IGFmc19zZXJ2ZXIge1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRkZXN0cm95ZXI7XFx0LyogV29yayBpdGVtIHRvIHRyeSBhbmQgZGVzdHJveSBhIHNlcnZlciAqL1xcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdFxcdHRpbWVyO1xcdFxcdC8qIE1hbmFnZW1lbnQgdGltZXIgKi9cXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0Y21fdG9rZW5fbG9jaztcXHQvKiBMb2NrIGdvdmVybmluZyBjcmVhdGlvbiBvZiBhcHBkYXRhICovXFxuLVxcdHN0cnVjdCBrcmI1X2J1ZmZlclxcdGNtX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi9cXG4rXFx0c3RydWN0IGtleVxcdFxcdCp5ZnNfcnhna19hcHBkYXRhOyAvKiBBcHBkYXRhIHRvIGJlIGluY2x1ZGVkIGluIFJFU1BPTlNFIHBhY2tldCAqL1xcbiBcXHR0aW1lNjRfdFxcdFxcdHVudXNlX3RpbWU7XFx0LyogVGltZSBhdCB3aGljaCBsYXN0IHVudXNlZCAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZmxhZ3M7XFxuICNkZWZpbmUgQUZTX1NFUlZFUl9GTF9SRVNQT05ESU5HIDBcXHRcXHQvKiBUaGUgc2VydmVyIGlzIHJlc3BvbmRpbmcgKi9cXG5AQCAtMTA4OSw3ICsxMDg3LDcgQEAgZXh0ZXJuIGJvb2wgYWZzX2NtX2luY29taW5nX2NhbGwoc3RydWN0IGFmc19jYWxsICopO1xcbiAvKlxcbiAgKiBjbV9zZWN1cml0eS5jXFxuICAqL1xcbi12b2lkIGFmc19wcm9jZXNzX29vYl9xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbitpbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpO1xcbiAjaWZkZWYgQ09ORklHX1JYR0tcXG4gaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldCk7XFxuICNlbHNlXFxuQEAgLTEzODAsOCArMTM3OCw3IEBAIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYWZzX2FzeW5jX2NhbGxzO1xcbiBleHRlcm4gaW50IF9fbmV0X2luaXQgYWZzX29wZW5fc29ja2V0KHN0cnVjdCBhZnNfbmV0ICopO1xcbiBleHRlcm4gdm9pZCBfX25ldF9leGl0IGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKik7XFxuIGV4dGVybiB2b2lkIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XFxuLWV4dGVybiB2b2lkIGFmc19wdXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuLXZvaWQgYWZzX2RlZmVycmVkX3B1dF9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XFxuK3ZvaWQgYWZzX3B1dF9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZW51bSBhZnNfY2FsbF90cmFjZSB0cmFjZSk7XFxuIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcCk7XFxuIHZvaWQgYWZzX2RlbGl2ZXJfdG9fY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpO1xcbiB2b2lkIGFmc193YWl0X2Zvcl9jYWxsX3RvX2NvbXBsZXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XFxuQEAgLTE0MDIsOCArMTM5OSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFmc19jYWxsICphZnNfZ2V0X2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLFxcbiBcXHRfX3JlZmNvdW50X2luYyhcXHUwMDI2Y2FsbC1cXHUwMDNlcmVmLCBcXHUwMDI2cik7XFxuIFxcbiBcXHR0cmFjZV9hZnNfY2FsbChjYWxsLVxcdTAwM2VkZWJ1Z19pZCwgd2h5LCByICsgMSxcXG4tXFx0XFx0ICAgICAgIGF0b21pY19yZWFkKFxcdTAwMjZjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKSxcXG4tXFx0XFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuK1xcdFxcdCAgICAgICBhdG9taWNfcmVhZChcXHUwMDI2Y2FsbC1cXHUwMDNlbmV0LVxcdTAwM2Vucl9vdXRzdGFuZGluZ19jYWxscykpO1xcbiBcXHRyZXR1cm4gY2FsbDtcXG4gfVxcbiBcXG5AQCAtMTQxMiwyMyArMTQwOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfc2VlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBlbnVtIGFmc19jYWxsX3RyYWNlIHdoeSlcXG4gXFx0aW50IHIgPSByZWZjb3VudF9yZWFkKFxcdTAwMjZjYWxsLVxcdTAwM2VyZWYpO1xcbiBcXG4gXFx0dHJhY2VfYWZzX2NhbGwoY2FsbC1cXHUwMDNlZGVidWdfaWQsIHdoeSwgcixcXG4tXFx0XFx0ICAgICAgIGF0b21pY19yZWFkKFxcdTAwMjZjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKSxcXG4tXFx0XFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxcbi1cXHRcXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbi17XFxuLVxcdHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLVxcdTAwM2Vlc3RhdGUtXFx1MDAzZWFkZHJlc3NlcztcXG4tXFxuLVxcdG9wLVxcdTAwM2VjYWxsXFx0PSBjYWxsO1xcbi1cXHRvcC1cXHUwMDNldHlwZVxcdD0gY2FsbC1cXHUwMDNldHlwZTtcXG4tXFx0Y2FsbC1cXHUwMDNlb3BcXHQ9IG9wO1xcbi1cXHRjYWxsLVxcdTAwM2VrZXlcXHQ9IG9wLVxcdTAwM2VrZXk7XFxuLVxcdGNhbGwtXFx1MDAzZWludHJcXHQ9ICEob3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xcbi1cXHRjYWxsLVxcdTAwM2VwZWVyXFx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXFx1MDAzZWFkZHJzW29wLVxcdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcXG4tXFx0Y2FsbC1cXHUwMDNlc2VydmljZV9pZCA9IG9wLVxcdTAwM2VzZXJ2ZXItXFx1MDAzZXNlcnZpY2VfaWQ7XFxuLVxcdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcXG4rXFx0XFx0ICAgICAgIGF0b21pY19yZWFkKFxcdTAwMjZjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZXh0cmFjdF9iZWdpbihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxuQEAgLTE0OTQsNyArMTQ3NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfc2V0X2NhbGxfY29tcGxldGUoc3RydWN0IGFmc19jYWxsICpjYWxsLFxcbiBcXHRcXHRcXHRcXHRcXHQgaW50IGVycm9yLCB1MzIgcmVtb3RlX2Fib3J0KVxcbiB7XFxuIFxcdGVudW0gYWZzX2NhbGxfc3RhdGUgc3RhdGU7XFxuLVxcdGJvb2wgb2sgPSBmYWxzZTtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Y2FsbC1cXHUwMDNlc3RhdGVfbG9jayk7XFxuIFxcdHN0YXRlID0gY2FsbC1cXHUwMDNlc3RhdGU7XFxuQEAgLTE1MDQsMTkgKzE0ODMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NldF9jYWxsX2NvbXBsZXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcXG4gXFx0XFx0Y2FsbC1cXHUwMDNlc3RhdGUgPSBBRlNfQ0FMTF9DT01QTEVURTtcXG4gXFx0XFx0dHJhY2VfYWZzX2NhbGxfc3RhdGUoY2FsbCwgc3RhdGUsIEFGU19DQUxMX0NPTVBMRVRFLFxcbiBcXHRcXHRcXHRcXHQgICAgIGVycm9yLCByZW1vdGVfYWJvcnQpO1xcbi1cXHRcXHRvayA9IHRydWU7XFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNhbGwtXFx1MDAzZXN0YXRlX2xvY2spO1xcbi1cXHRpZiAob2spIHtcXG4tXFx0XFx0dHJhY2VfYWZzX2NhbGxfZG9uZShjYWxsKTtcXG4tXFxuLVxcdFxcdC8qIEFzeW5jaHJvbm91cyBjYWxscyBoYXZlIHR3byByZWZzIHRvIHJlbGVhc2UgLSBvbmUgZnJvbSB0aGUgYWxsb2MgYW5kXFxuLVxcdFxcdCAqIG9uZSBxdWV1ZWQgd2l0aCB0aGUgd29yayBpdGVtIC0gYW5kIHdlIGNhbid0IGp1c3QgZGVhbGxvY2F0ZSB0aGVcXG4tXFx0XFx0ICogY2FsbCBiZWNhdXNlIHRoZSB3b3JrIGl0ZW0gbWF5IGJlIHF1ZXVlZCBhZ2Fpbi5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChjYWxsLVxcdTAwM2Vkcm9wX3JlZilcXG4tXFx0XFx0XFx0YWZzX3B1dF9jYWxsKGNhbGwpO1xcbi1cXHR9XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTE3NjIsNiArMTczMCwyMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXFxuIFxcdHJldHVybiBcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcXG4rXFx0XFx0XFx0XFx0ICAgIGdmcF90IGdmcClcXG4re1xcbitcXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cXHUwMDNlZXN0YXRlLVxcdTAwM2VhZGRyZXNzZXM7XFxuK1xcbitcXHRvcC1cXHUwMDNlY2FsbFxcdD0gYWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2dldF9vcF9jYWxsKTtcXG4rXFx0b3AtXFx1MDAzZXR5cGVcXHQ9IGNhbGwtXFx1MDAzZXR5cGU7XFxuK1xcdGNhbGwtXFx1MDAzZW9wXFx0PSBvcDtcXG4rXFx0Y2FsbC1cXHUwMDNlc2VydmVyXFx0PSBhZnNfdXNlX3NlcnZlcihvcC1cXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XFxuK1xcdGNhbGwtXFx1MDAzZWtleVxcdD0gb3AtXFx1MDAzZWtleTtcXG4rXFx0Y2FsbC1cXHUwMDNlaW50clxcdD0gIShvcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBRlNfT1BFUkFUSU9OX1VOSU5UUik7XFxuK1xcdGNhbGwtXFx1MDAzZXBlZXJcXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cXHUwMDNlYWRkcnNbb3AtXFx1MDAzZWFkZHJfaW5kZXhdLnBlZXIpO1xcbitcXHRjYWxsLVxcdTAwM2VzZXJ2aWNlX2lkID0gb3AtXFx1MDAzZXNlcnZlci1cXHUwMDNlc2VydmljZV9pZDtcXG4rXFx0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xcbitcXHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X21hZGVfY2FsbCk7XFxuK31cXG4rXFxuIC8qXFxuICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb25cXG4gICogbnVtYmVyIGRlcml2ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uICBJdCBkb2Vzbid0IG1hdHRlciBpZlxcbmRpZmYgLS1naXQgYS9mcy9hZnMvbWFpbi5jIGIvZnMvYWZzL21haW4uY1xcbmluZGV4IDdhODgzYzU5OTc2ZmYyLi42MzUzZmVhYTVmYjRiNSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvbWFpbi5jXFxuKysrIGIvZnMvYWZzL21haW4uY1xcbkBAIC03Myw3ICs3Myw2IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBhZnNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0X25zKVxcbiBcXHRnZW5lcmF0ZV9yYW5kb21fdXVpZCgodW5zaWduZWQgY2hhciAqKVxcdTAwMjZuZXQtXFx1MDAzZXV1aWQpO1xcbiBcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZuZXQtXFx1MDAzZWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmssIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbik7XFxuLVxcdElOSVRfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2VyeF9vb2Jfd29yaywgYWZzX3Byb2Nlc3Nfb29iX3F1ZXVlKTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2Vzb2NrZXRfbXV0ZXgpO1xcbiBcXG4gXFx0bmV0LVxcdTAwM2VjZWxscyA9IFJCX1JPT1Q7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9yeHJwYy5jIGIvZnMvYWZzL3J4cnBjLmNcXG5pbmRleCBkODI5MTY2NTdhM2RkZi4uNGY2ZDY5OWI1ZDIyNmEgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3J4cnBjLmNcXG4rKysgYi9mcy9hZnMvcnhycGMuY1xcbkBAIC0yNSwxNCArMjUsMTIgQEAgc3RhdGljIHZvaWQgYWZzX3Byb2Nlc3NfYXN5bmNfY2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XFxuIHN0YXRpYyB2b2lkIGFmc19yeF9uZXdfY2FsbChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTtcXG4gc3RhdGljIHZvaWQgYWZzX3J4X2Rpc2NhcmRfbmV3X2NhbGwoc3RydWN0IHJ4cnBjX2NhbGwgKiwgdW5zaWduZWQgbG9uZyk7XFxuIHN0YXRpYyB2b2lkIGFmc19yeF9hdHRhY2goc3RydWN0IHJ4cnBjX2NhbGwgKnJ4Y2FsbCwgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQpO1xcbi1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpO1xcbiBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NtX29wX2lkKHN0cnVjdCBhZnNfY2FsbCAqKTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyBhZnNfcnhycGNfY2FsbGJhY2tfb3BzID0ge1xcbiBcXHQubm90aWZ5X25ld19jYWxsXFx0PSBhZnNfcnhfbmV3X2NhbGwsXFxuIFxcdC5kaXNjYXJkX25ld19jYWxsXFx0PSBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbCxcXG4gXFx0LnVzZXJfYXR0YWNoX2NhbGxcXHQ9IGFmc19yeF9hdHRhY2gsXFxuLVxcdC5ub3RpZnlfb29iXFx0XFx0PSBhZnNfcnhfbm90aWZ5X29vYixcXG4gfTtcXG4gXFxuIC8qIGFzeW5jaHJvbm91cyBpbmNvbWluZyBjYWxsIGluaXRpYWwgcHJvY2Vzc2luZyAqL1xcbkBAIC03NCwxMCArNzIsNiBAQCBpbnQgYWZzX29wZW5fc29ja2V0KHN0cnVjdCBhZnNfbmV0ICpuZXQpXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycm9yXzI7XFxuIFxcbi1cXHRyZXQgPSByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc29ja2V0LVxcdTAwM2VzaywgdHJ1ZSk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVycm9yXzI7XFxuLVxcbiBcXHRyZXQgPSBhZnNfY3JlYXRlX3Rva2VuX2tleShuZXQsIHNvY2tldCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRwcl9lcnIoXFxcIkNvdWxkbid0IGNyZWF0ZSBSeEdLIENNIGtleTogJWRcXFxcblxcXCIsIHJldCk7XFxuQEAgLTEyOCw3ICsxMjIsNiBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldClcXG4gXFx0X2VudGVyKFxcXCJcXFwiKTtcXG4gXFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNm5ldC1cXHUwMDNlY2hhcmdlX3ByZWFsbG9jYXRpb25fd29yayk7XFxuLVxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNm5ldC1cXHUwMDNlcnhfb29iX3dvcmspO1xcbiBcXHQvKiBGdXR1cmUgd29yayBpdGVtcyBzaG91bGQgbm93IHNlZSAtXFx1MDAzZWxpdmUgaXMgZmFsc2UuICovXFxuIFxcbiBcXHRrZXJuZWxfbGlzdGVuKG5ldC1cXHUwMDNlc29ja2V0LCAwKTtcXG5AQCAtMTM4LDcgKzEzMSw3IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZuZXQtXFx1MDAzZWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmspO1xcbiBcXG4gXFx0aWYgKG5ldC1cXHUwMDNlc3BhcmVfaW5jb21pbmdfY2FsbCkge1xcbi1cXHRcXHRhZnNfcHV0X2NhbGwobmV0LVxcdTAwM2VzcGFyZV9pbmNvbWluZ19jYWxsKTtcXG4rXFx0XFx0YWZzX3B1dF9jYWxsKG5ldC1cXHUwMDNlc3BhcmVfaW5jb21pbmdfY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3NwYXJlX3N2Yyk7XFxuIFxcdFxcdG5ldC1cXHUwMDNlc3BhcmVfaW5jb21pbmdfY2FsbCA9IE5VTEw7XFxuIFxcdH1cXG4gXFxuQEAgLTE0OSw3ICsxNDIsNiBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldClcXG4gXFxuIFxcdGtlcm5lbF9zb2NrX3NodXRkb3duKG5ldC1cXHUwMDNlc29ja2V0LCBTSFVUX1JEV1IpO1xcbiBcXHRmbHVzaF93b3JrcXVldWUoYWZzX2FzeW5jX2NhbGxzKTtcXG4tXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2VyeF9vb2Jfd29yayk7XFxuIFxcdG5ldC1cXHUwMDNlc29ja2V0LVxcdTAwM2Vzay1cXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcXG4gXFx0c29ja19yZWxlYXNlKG5ldC1cXHUwMDNlc29ja2V0KTtcXG4gXFx0a2V5X3B1dChuZXQtXFx1MDAzZWZzX2NtX3Rva2VuX2tleSk7XFxuQEAgLTE3NywyMSArMTY5LDIwIEBAIHN0YXRpYyBzdHJ1Y3QgYWZzX2NhbGwgKmFmc19hbGxvY19jYWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXFxuIFxcdGNhbGwtXFx1MDAzZWRlYnVnX2lkID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNnJ4cnBjX2RlYnVnX2lkKTtcXG4gXFx0cmVmY291bnRfc2V0KFxcdTAwMjZjYWxsLVxcdTAwM2VyZWYsIDEpO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNmNhbGwtXFx1MDAzZWFzeW5jX3dvcmssIHR5cGUtXFx1MDAzZWFzeW5jX3J4ID86IGFmc19wcm9jZXNzX2FzeW5jX2NhbGwpO1xcbi1cXHRJTklUX1dPUksoXFx1MDAyNmNhbGwtXFx1MDAzZXdvcmssIGNhbGwtXFx1MDAzZXR5cGUtXFx1MDAzZXdvcmspO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNmNhbGwtXFx1MDAzZWZyZWVfd29yaywgYWZzX2RlZmVycmVkX2ZyZWVfd29ya2VyKTtcXG4gXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2Y2FsbC1cXHUwMDNld2FpdHEpO1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y2FsbC1cXHUwMDNlc3RhdGVfbG9jayk7XFxuIFxcdGNhbGwtXFx1MDAzZWl0ZXIgPSBcXHUwMDI2Y2FsbC1cXHUwMDNlZGVmX2l0ZXI7XFxuIFxcbiBcXHRvID0gYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNm5ldC1cXHUwMDNlbnJfb3V0c3RhbmRpbmdfY2FsbHMpO1xcbi1cXHR0cmFjZV9hZnNfY2FsbChjYWxsLVxcdTAwM2VkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfYWxsb2MsIDEsIG8sXFxuLVxcdFxcdCAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbitcXHR0cmFjZV9hZnNfY2FsbChjYWxsLVxcdTAwM2VkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfYWxsb2MsIDEsIG8pO1xcbiBcXHRyZXR1cm4gY2FsbDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYWZzX2ZyZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuIHtcXG4gXFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IGNhbGwtXFx1MDAzZW5ldDtcXG4rXFx0dW5zaWduZWQgaW50IGRlYnVnX2lkID0gY2FsbC1cXHUwMDNlZGVidWdfaWQ7XFxuIFxcdGludCBvO1xcbiBcXG4gXFx0QVNTRVJUKCF3b3JrX3BlbmRpbmcoXFx1MDAyNmNhbGwtXFx1MDAzZWFzeW5jX3dvcmspKTtcXG5AQCAtMjA4LDEzICsxOTksMTAgQEAgc3RhdGljIHZvaWQgYWZzX2ZyZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuIFxcbiBcXHRhZnNfdW51c2Vfc2VydmVyX25vdGltZShjYWxsLVxcdTAwM2VuZXQsIGNhbGwtXFx1MDAzZXNlcnZlciwgYWZzX3NlcnZlcl90cmFjZV91bnVzZV9jYWxsKTtcXG4gXFx0a2ZyZWUoY2FsbC1cXHUwMDNlcmVxdWVzdCk7XFxuLVxcbi1cXHRvID0gYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlbnJfb3V0c3RhbmRpbmdfY2FsbHMpO1xcbi1cXHR0cmFjZV9hZnNfY2FsbChjYWxsLVxcdTAwM2VkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfZnJlZSwgMCwgbyxcXG4tXFx0XFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XFxuIFxcdGtmcmVlKGNhbGwpO1xcbiBcXG4gXFx0byA9IGF0b21pY19kZWNfcmV0dXJuKFxcdTAwMjZuZXQtXFx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKTtcXG4rXFx0dHJhY2VfYWZzX2NhbGwoZGVidWdfaWQsIGFmc19jYWxsX3RyYWNlX2ZyZWUsIDAsIG8pO1xcbiBcXHRpZiAobyA9PSAwKVxcbiBcXHRcXHR3YWtlX3VwX3ZhcihcXHUwMDI2bmV0LVxcdTAwM2Vucl9vdXRzdGFuZGluZ19jYWxscyk7XFxuIH1cXG5AQCAtMjIyLDcgKzIxMCw3IEBAIHN0YXRpYyB2b2lkIGFmc19mcmVlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbiAvKlxcbiAgKiBEaXNwb3NlIG9mIGEgcmVmZXJlbmNlIG9uIGEgY2FsbC5cXG4gICovXFxuLXZvaWQgYWZzX3B1dF9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4rdm9pZCBhZnNfcHV0X2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBlbnVtIGFmc19jYWxsX3RyYWNlIHRyYWNlKVxcbiB7XFxuIFxcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjYWxsLVxcdTAwM2VuZXQ7XFxuIFxcdHVuc2lnbmVkIGludCBkZWJ1Z19pZCA9IGNhbGwtXFx1MDAzZWRlYnVnX2lkO1xcbkBAIC0yMzEsOCArMjE5LDcgQEAgdm9pZCBhZnNfcHV0X2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbiBcXG4gXFx0emVybyA9IF9fcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZjYWxsLVxcdTAwM2VyZWYsIFxcdTAwMjZyKTtcXG4gXFx0byA9IGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKTtcXG4tXFx0dHJhY2VfYWZzX2NhbGwoZGVidWdfaWQsIGFmc19jYWxsX3RyYWNlX3B1dCwgciAtIDEsIG8sXFxuLVxcdFxcdCAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbitcXHR0cmFjZV9hZnNfY2FsbChkZWJ1Z19pZCwgdHJhY2UsIHIgLSAxLCBvKTtcXG4gXFx0aWYgKHplcm8pXFxuIFxcdFxcdGFmc19mcmVlX2NhbGwoY2FsbCk7XFxuIH1cXG5AQCAtMjQ0LDM3ICsyMzEsNiBAQCBzdGF0aWMgdm9pZCBhZnNfZGVmZXJyZWRfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRhZnNfZnJlZV9jYWxsKGNhbGwpO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBEaXNwb3NlIG9mIGEgcmVmZXJlbmNlIG9uIGEgY2FsbCwgZGVmZXJyaW5nIHRoZSBjbGVhbnVwIHRvIGEgd29ya3F1ZXVlXFxuLSAqIHRvIGF2b2lkIGxvY2sgcmVjdXJzaW9uLlxcbi0gKi9cXG4tdm9pZCBhZnNfZGVmZXJyZWRfcHV0X2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbi17XFxuLVxcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjYWxsLVxcdTAwM2VuZXQ7XFxuLVxcdHVuc2lnbmVkIGludCBkZWJ1Z19pZCA9IGNhbGwtXFx1MDAzZWRlYnVnX2lkO1xcbi1cXHRib29sIHplcm87XFxuLVxcdGludCByLCBvO1xcbi1cXG4tXFx0emVybyA9IF9fcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZjYWxsLVxcdTAwM2VyZWYsIFxcdTAwMjZyKTtcXG4tXFx0byA9IGF0b21pY19yZWFkKFxcdTAwMjZuZXQtXFx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKTtcXG4tXFx0dHJhY2VfYWZzX2NhbGwoZGVidWdfaWQsIGFmc19jYWxsX3RyYWNlX3B1dCwgciAtIDEsIG8sXFxuLVxcdFxcdCAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbi1cXHRpZiAoemVybylcXG4tXFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2Y2FsbC1cXHUwMDNlZnJlZV93b3JrKTtcXG4tfVxcbi1cXG4tLypcXG4tICogUXVldWUgdGhlIGNhbGwgZm9yIGFjdHVhbCB3b3JrLlxcbi0gKi9cXG4tc3RhdGljIHZvaWQgYWZzX3F1ZXVlX2NhbGxfd29yayhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuLXtcXG4tXFx0aWYgKGNhbGwtXFx1MDAzZXR5cGUtXFx1MDAzZXdvcmspIHtcXG4tXFx0XFx0YWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3dvcmspO1xcbi1cXHRcXHRpZiAoIXF1ZXVlX3dvcmsoYWZzX3dxLCBcXHUwMDI2Y2FsbC1cXHUwMDNld29yaykpXFxuLVxcdFxcdFxcdGFmc19wdXRfY2FsbChjYWxsKTtcXG4tXFx0fVxcbi19XFxuLVxcbiAvKlxcbiAgKiBhbGxvY2F0ZSBhIGNhbGwgd2l0aCBmbGF0IHJlcXVlc3QgYW5kIHJlcGx5IGJ1ZmZlcnNcXG4gICovXFxuQEAgLTMwOCw3ICsyNjQsNyBAQCBzdHJ1Y3QgYWZzX2NhbGwgKmFmc19hbGxvY19mbGF0X2NhbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcXG4gXFx0cmV0dXJuIGNhbGw7XFxuIFxcbiBub21lbV9mcmVlOlxcbi1cXHRhZnNfcHV0X2NhbGwoY2FsbCk7XFxuK1xcdGFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfb29tKTtcXG4gbm9tZW1fY2FsbDpcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtMzQ3LDcgKzMwMywxMCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuIFxcdHN0cnVjdCByeHJwY19jYWxsICpyeGNhbGw7XFxuIFxcdHN0cnVjdCBtc2doZHIgbXNnO1xcbiBcXHRzdHJ1Y3Qga3ZlYyBpb3ZbMV07XFxuK1xcdHVuc2lnbmVkIGludCBkZWJ1Z19pZCA9IGNhbGwtXFx1MDAzZWRlYnVnX2lkO1xcbitcXHRzdHJ1Y3Qga2V5ICphcHBfZGF0YSA9IE5VTEw7XFxuIFxcdHNpemVfdCBsZW47XFxuK1xcdGJvb2wgd3JpdGVfaXRlciA9IGNhbGwtXFx1MDAzZXdyaXRlX2l0ZXI7XFxuIFxcdHM2NCB0eF90b3RhbF9sZW47XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC0zNzMsMTMgKzMzMiwyOSBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuIFxcdC8qIElmIHRoZSBjYWxsIGlzIGdvaW5nIHRvIGJlIGFzeW5jaHJvbm91cywgd2UgbmVlZCBhbiBleHRyYSByZWYgZm9yXFxuIFxcdCAqIHRoZSBjYWxsIHRvIGhvbGQgaXRzZWxmIHNvIHRoZSBjYWxsZXIgbmVlZCBub3QgaGFuZyBvbiB0byBpdHMgcmVmLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGNhbGwtXFx1MDAzZWFzeW5jKSB7XFxuLVxcdFxcdGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpO1xcbi1cXHRcXHRjYWxsLVxcdTAwM2Vkcm9wX3JlZiA9IHRydWU7XFxuK1xcdGlmIChjYWxsLVxcdTAwM2Vhc3luYylcXG4rXFx0XFx0YWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2dldF9tYWtlX2FzeW5jX2NhbGwpO1xcbitcXG4rXFx0aWYgKGNhbGwtXFx1MDAzZWtleSBcXHUwMDI2XFx1MDAyNiBjYWxsLVxcdTAwM2VzZXJ2ZXIpIHtcXG4rXFx0XFx0dTMyIGtyYjVfZW5jdHlwZSA9IDA7XFxuK1xcdFxcdHU4IHNlY3VyaXR5X2luZGV4ID0gMDtcXG4rXFxuK1xcdFxcdHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoY2FsbC1cXHUwMDNla2V5LCBcXHUwMDI2c2VjdXJpdHlfaW5kZXgsIFxcdTAwMjZrcmI1X2VuY3R5cGUpO1xcbitcXHRcXHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XFxuKyNpZmRlZiBDT05GSUdfUlhHS1xcbitcXHRcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbitcXHRcXHRcXHQvKiBSZWFkIHRoZSBrZXkgcG9pbnRlciBiZWZvcmUgdGhlIGFwcGRhdGEgKi9cXG4rXFx0XFx0XFx0YXBwX2RhdGEgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZjYWxsLVxcdTAwM2VzZXJ2ZXItXFx1MDAzZXlmc19yeGdrX2FwcGRhdGEpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGNyZWF0ZSBhIGNhbGwgKi9cXG4tXFx0cnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC1cXHUwMDNlbmV0LVxcdTAwM2Vzb2NrZXQsIGNhbGwtXFx1MDAzZXBlZXIsIGNhbGwtXFx1MDAzZWtleSxcXG4rXFx0cnhjYWxsID0gcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoY2FsbC1cXHUwMDNlbmV0LVxcdTAwM2Vzb2NrZXQsIGNhbGwtXFx1MDAzZXBlZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCBjYWxsLVxcdTAwM2VrZXksIGFwcF9kYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgKHVuc2lnbmVkIGxvbmcpY2FsbCxcXG4gXFx0XFx0XFx0XFx0XFx0IHR4X3RvdGFsX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0IGNhbGwtXFx1MDAzZW1heF9saWZlc3BhbixcXG5AQCAtNDEwLDcgKzM4NSw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcXG4gXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgaW92LCAxLCBjYWxsLVxcdTAwM2VyZXF1ZXN0X3NpemUpO1xcbiBcXHRtc2cubXNnX2NvbnRyb2xcXHRcXHQ9IE5VTEw7XFxuIFxcdG1zZy5tc2dfY29udHJvbGxlblxcdD0gMDtcXG4tXFx0bXNnLm1zZ19mbGFnc1xcdFxcdD0gTVNHX1dBSVRBTEwgfCAoY2FsbC1cXHUwMDNld3JpdGVfaXRlciA/IE1TR19NT1JFIDogMCk7XFxuK1xcdG1zZy5tc2dfZmxhZ3NcXHRcXHQ9IE1TR19XQUlUQUxMIHwgKHdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xcbiBcXG4gXFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZXNvY2tldCwgcnhjYWxsLFxcbiBcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZtc2csIGNhbGwtXFx1MDAzZXJlcXVlc3Rfc2l6ZSxcXG5AQCAtNDE4LDcgKzM5Myw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XFxuIFxcbi1cXHRpZiAoY2FsbC1cXHUwMDNld3JpdGVfaXRlcikge1xcbitcXHRpZiAod3JpdGVfaXRlcikge1xcbiBcXHRcXHRtc2cubXNnX2l0ZXIgPSAqY2FsbC1cXHUwMDNld3JpdGVfaXRlcjtcXG4gXFx0XFx0bXNnLm1zZ19mbGFncyBcXHUwMDI2PSB+TVNHX01PUkU7XFxuIFxcdFxcdHRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgXFx1MDAyNm1zZyk7XFxuQEAgLTQyNyw5ICs0MDIsOCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgY2FsbC1cXHUwMDNlcnhjYWxsLCBcXHUwMDI2bXNnLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGlvdl9pdGVyX2NvdW50KFxcdTAwMjZtc2cubXNnX2l0ZXIpLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xcbi1cXHRcXHQqY2FsbC1cXHUwMDNld3JpdGVfaXRlciA9IG1zZy5tc2dfaXRlcjtcXG4gXFxuLVxcdFxcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXFx1MDAyNm1zZywgcmV0KTtcXG4rXFx0XFx0dHJhY2VfYWZzX3NlbnRfZGF0YShkZWJ1Z19pZCwgXFx1MDAyNm1zZywgcmV0KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XFxuIFxcdH1cXG5AQCAtNDQ4LDcgKzQyMiw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcXG4gXFx0XFx0XFx0XFx0XFx0UlhfVVNFUl9BQk9SVCwgcmV0LFxcbiBcXHRcXHRcXHRcXHRcXHRhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yKTtcXG4gXFx0aWYgKGNhbGwtXFx1MDAzZWFzeW5jKSB7XFxuLVxcdFxcdGFmc19zZWVfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9hc3luY19hYm9ydCk7XFxuK1xcdFxcdGFmc19zZWVfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9zZWVfYXN5bmNfYWJvcnQpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuQEAgLTQ2NCw3ICs0MzgsNyBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuIFxcdHRyYWNlX2Fmc19jYWxsX2RvbmUoY2FsbCk7XFxuIGVycm9yX2tpbGxfY2FsbDpcXG4gXFx0aWYgKGNhbGwtXFx1MDAzZWFzeW5jKVxcbi1cXHRcXHRhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfa2lsbCk7XFxuK1xcdFxcdGFmc19zZWVfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9zZWVfYXN5bmNfa2lsbCk7XFxuIFxcdGlmIChjYWxsLVxcdTAwM2V0eXBlLVxcdTAwM2VpbW1lZGlhdGVfY2FuY2VsKVxcbiBcXHRcXHRjYWxsLVxcdTAwM2V0eXBlLVxcdTAwM2VpbW1lZGlhdGVfY2FuY2VsKGNhbGwpO1xcbiBcXG5AQCAtNDc1LDggKzQ0OSw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcXG4gXFx0aWYgKGNhbGwtXFx1MDAzZXJ4Y2FsbClcXG4gXFx0XFx0cnhycGNfa2VybmVsX3NodXRkb3duX2NhbGwoY2FsbC1cXHUwMDNlbmV0LVxcdTAwM2Vzb2NrZXQsIGNhbGwtXFx1MDAzZXJ4Y2FsbCk7XFxuIFxcdGlmIChjYWxsLVxcdTAwM2Vhc3luYykge1xcbi1cXHRcXHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2Y2FsbC1cXHUwMDNlYXN5bmNfd29yaykpXFxuLVxcdFxcdFxcdGFmc19wdXRfY2FsbChjYWxsKTtcXG4rXFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2Y2FsbC1cXHUwMDNlYXN5bmNfd29yayk7XFxuIFxcdFxcdGFmc19zZXRfY2FsbF9jb21wbGV0ZShjYWxsLCByZXQsIDApO1xcbiBcXHR9XFxuIFxcbkBAIC01NjIsNyArNTM1LDggQEAgdm9pZCBhZnNfZGVsaXZlcl90b19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4gXFx0XFx0c3dpdGNoIChyZXQpIHtcXG4gXFx0XFx0Y2FzZSAwOlxcbiBcXHRcXHRcXHRjYWxsLVxcdTAwM2VyZXNwb25kZWQgPSB0cnVlO1xcbi1cXHRcXHRcXHRhZnNfcXVldWVfY2FsbF93b3JrKGNhbGwpO1xcbitcXHRcXHRcXHRpZiAoY2FsbC1cXHUwMDNld29yaylcXG4rXFx0XFx0XFx0XFx0Y2FsbC1cXHUwMDNld29yayhjYWxsKTtcXG4gXFx0XFx0XFx0aWYgKHN0YXRlID09IEFGU19DQUxMX0NMX1BST0NfUkVQTFkpIHtcXG4gXFx0XFx0XFx0XFx0aWYgKGNhbGwtXFx1MDAzZW9wKVxcbiBcXHRcXHRcXHRcXHRcXHRzZXRfYml0KEFGU19TRVJWRVJfRkxfTUFZX0hBVkVfQ0IsXFxuQEAgLTYxMiw2ICs1ODYsNyBAQCB2b2lkIGFmc19kZWxpdmVyX3RvX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxcbiBcXHR9XFxuIFxcbiBkb25lOlxcbitcXHR0cmFjZV9hZnNfY2FsbF9kb25lKGNhbGwpO1xcbiBcXHRpZiAoY2FsbC1cXHUwMDNldHlwZS1cXHUwMDNlZG9uZSlcXG4gXFx0XFx0Y2FsbC1cXHUwMDNldHlwZS1cXHUwMDNlZG9uZShjYWxsKTtcXG4gb3V0OlxcbkBAIC03MDAsMTkgKzY3NSwxMiBAQCBzdGF0aWMgdm9pZCBhZnNfd2FrZV91cF9hc3luY19jYWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4Y2FsbCxcXG4gXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBjYWxsX3VzZXJfSUQpXFxuIHtcXG4gXFx0c3RydWN0IGFmc19jYWxsICpjYWxsID0gKHN0cnVjdCBhZnNfY2FsbCAqKWNhbGxfdXNlcl9JRDtcXG4tXFx0aW50IHI7XFxuIFxcbiBcXHR0cmFjZV9hZnNfbm90aWZ5X2NhbGwocnhjYWxsLCBjYWxsKTtcXG4gXFx0Y2FsbC1cXHUwMDNlbmVlZF9hdHRlbnRpb24gPSB0cnVlO1xcbiBcXG4tXFx0aWYgKF9fcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZjYWxsLVxcdTAwM2VyZWYsIFxcdTAwMjZyKSkge1xcbi1cXHRcXHR0cmFjZV9hZnNfY2FsbChjYWxsLVxcdTAwM2VkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2Vfd2FrZSwgciArIDEsXFxuLVxcdFxcdFxcdCAgICAgICBhdG9taWNfcmVhZChcXHUwMDI2Y2FsbC1cXHUwMDNlbmV0LVxcdTAwM2Vucl9vdXRzdGFuZGluZ19jYWxscyksXFxuLVxcdFxcdFxcdCAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xcbi1cXG4tXFx0XFx0aWYgKCFxdWV1ZV93b3JrKGFmc19hc3luY19jYWxscywgXFx1MDAyNmNhbGwtXFx1MDAzZWFzeW5jX3dvcmspKVxcbi1cXHRcXHRcXHRhZnNfZGVmZXJyZWRfcHV0X2NhbGwoY2FsbCk7XFxuLVxcdH1cXG4rXFx0YWZzX3NlZV9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY193YWtlKTtcXG4rXFx0cXVldWVfd29yayhhZnNfYXN5bmNfY2FsbHMsIFxcdTAwMjZjYWxsLVxcdTAwM2Vhc3luY193b3JrKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNzI1LDEyICs2OTMsMTcgQEAgc3RhdGljIHZvaWQgYWZzX3Byb2Nlc3NfYXN5bmNfY2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcbiBcXHRfZW50ZXIoXFxcIlxcXCIpO1xcbiBcXG4rXFx0YWZzX3NlZV9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY19wcm9jZXNzKTtcXG4rXFxuIFxcdGlmIChjYWxsLVxcdTAwM2VzdGF0ZSBcXHUwMDNjIEFGU19DQUxMX0NPTVBMRVRFIFxcdTAwMjZcXHUwMDI2IGNhbGwtXFx1MDAzZW5lZWRfYXR0ZW50aW9uKSB7XFxuIFxcdFxcdGNhbGwtXFx1MDAzZW5lZWRfYXR0ZW50aW9uID0gZmFsc2U7XFxuIFxcdFxcdGFmc19kZWxpdmVyX3RvX2NhbGwoY2FsbCk7XFxuIFxcdH1cXG4gXFxuLVxcdGFmc19wdXRfY2FsbChjYWxsKTtcXG4rXFx0aWYgKGNhbGwtXFx1MDAzZXN0YXRlID09IEFGU19DQUxMX0NPTVBMRVRFKSB7XFxuK1xcdFxcdGNhbmNlbF93b3JrKFxcdTAwMjZjYWxsLVxcdTAwM2Vhc3luY193b3JrKTtcXG4rXFx0XFx0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9hc3luY19jb21wbGV0ZSk7XFxuK1xcdH1cXG4gXFx0X2xlYXZlKFxcXCJcXFwiKTtcXG4gfVxcbiBcXG5AQCAtNzU2LDcgKzcyOSw2IEBAIHZvaWQgYWZzX2NoYXJnZV9wcmVhbGxvY2F0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0XFx0aWYgKCFjYWxsKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdFxcdGNhbGwtXFx1MDAzZWRyb3BfcmVmID0gdHJ1ZTtcXG4gXFx0XFx0XFx0Y2FsbC1cXHUwMDNlYXN5bmMgPSB0cnVlO1xcbiBcXHRcXHRcXHRjYWxsLVxcdTAwM2VzdGF0ZSA9IEFGU19DQUxMX1NWX0FXQUlUX09QX0lEO1xcbiBcXHRcXHRcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZjYWxsLVxcdTAwM2V3YWl0cSk7XFxuQEAgLTc4Myw3ICs3NTUsNyBAQCBzdGF0aWMgdm9pZCBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsLFxcbiBcXHRzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwgPSAoc3RydWN0IGFmc19jYWxsICopdXNlcl9jYWxsX0lEO1xcbiBcXG4gXFx0Y2FsbC1cXHUwMDNlcnhjYWxsID0gTlVMTDtcXG4tXFx0YWZzX3B1dF9jYWxsKGNhbGwpO1xcbitcXHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X2Rpc2NhcmRfcHJlYWxsb2MpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC04MzIsNyArODA0LDcgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jbV9vcF9pZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmNhbGwtXFx1MDAzZWVuY3R5cGUpO1xcbiBcXG4gXFx0dHJhY2VfYWZzX2NiX2NhbGwoY2FsbCk7XFxuLVxcdGNhbGwtXFx1MDAzZXdvcmsuZnVuYyA9IGNhbGwtXFx1MDAzZXR5cGUtXFx1MDAzZXdvcms7XFxuK1xcdGNhbGwtXFx1MDAzZXdvcmsgPSBjYWxsLVxcdTAwM2V0eXBlLVxcdTAwM2V3b3JrO1xcbiBcXG4gXFx0LyogcGFzcyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGlzIG1lc3NhZ2Ugb2ZmIHRvIHRoZVxcbiBcXHQgKiBjYWNoZSBtYW5hZ2VyIG9wICovXFxuQEAgLTk4MywxNCArOTU1LDMgQEAgbm9pbmxpbmUgaW50IGFmc19wcm90b2NvbF9lcnJvcihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXFxuIFxcdFxcdGNhbGwtXFx1MDAzZXVubWFyc2hhbGxpbmdfZXJyb3IgPSB0cnVlO1xcbiBcXHRyZXR1cm4gLUVCQURNU0c7XFxuIH1cXG4tXFxuLS8qXFxuLSAqIFdha2UgdXAgT09CIG5vdGlmaWNhdGlvbiBwcm9jZXNzaW5nLlxcbi0gKi9cXG4tc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKVxcbi17XFxuLVxcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzay1cXHUwMDNlc2tfdXNlcl9kYXRhO1xcbi1cXG4tXFx0aWYgKFJFQURfT05DRShuZXQtXFx1MDAzZWxpdmUpKVxcbi1cXHRcXHRxdWV1ZV93b3JrKGFmc193cSwgXFx1MDAyNm5ldC1cXHUwMDNlcnhfb29iX3dvcmspO1xcbi19XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZXJ2ZXIuYyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xcbmluZGV4IDBmZTE2MmVhMmEzNmRiLi40YzNhN2JkMGY3ZDg2NiAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvc2VydmVyLmNcXG4rKysgYi9mcy9hZnMvc2VydmVyLmNcXG5AQCAtMzk4LDcgKzM5OCw3IEBAIHN0YXRpYyB2b2lkIGFmc19zZXJ2ZXJfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KVxcbiBcXHRhZnNfcHV0X2VuZHBvaW50X3N0YXRlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlKSxcXG4gXFx0XFx0XFx0ICAgICAgIGFmc19lc3RhdGVfdHJhY2VfcHV0X3NlcnZlcik7XFxuIFxcdGFmc19wdXRfY2VsbChzZXJ2ZXItXFx1MDAzZWNlbGwsIGFmc19jZWxsX3RyYWNlX3B1dF9zZXJ2ZXIpO1xcbi1cXHRrZnJlZShzZXJ2ZXItXFx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhKTtcXG4rXFx0a2V5X3B1dChzZXJ2ZXItXFx1MDAzZXlmc19yeGdrX2FwcGRhdGEpO1xcbiBcXHRrZnJlZShzZXJ2ZXIpO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9hZnMvdmxfcHJvYmUuYyBiL2ZzL2Fmcy92bF9wcm9iZS5jXFxuaW5kZXggM2QyZTBjOTI1NDYwZjkuLjFkNzA4ODdjOWYzMThiIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy92bF9wcm9iZS5jXFxuKysrIGIvZnMvYWZzL3ZsX3Byb2JlLmNcXG5AQCAtMTg2LDcgKzE4Niw3IEBAIHN0YXRpYyBib29sIGFmc19kb19wcm9iZV92bHNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgc2VydmVyX2luZGV4KTtcXG4gXFx0XFx0aWYgKCFJU19FUlIoY2FsbCkpIHtcXG4gXFx0XFx0XFx0YWZzX3ByaW9yaXRpc2VfZXJyb3IoX2UsIGNhbGwtXFx1MDAzZWVycm9yLCBjYWxsLVxcdTAwM2VhYm9ydF9jb2RlKTtcXG4tXFx0XFx0XFx0YWZzX3B1dF9jYWxsKGNhbGwpO1xcbitcXHRcXHRcXHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2dldF9jYXBzKTtcXG4gXFx0XFx0XFx0aW5fcHJvZ3Jlc3MgPSB0cnVlO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRhZnNfcHJpb3JpdGlzZV9lcnJvcihfZSwgUFRSX0VSUihjYWxsKSwgMCk7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy92bGNsaWVudC5jIGIvZnMvYWZzL3ZsY2xpZW50LmNcXG5pbmRleCBhNDBiNDM0NjRjZmE5ZS4uOGE0YzhjOWExZTM5OTYgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL3ZsY2xpZW50LmNcXG4rKysgYi9mcy9hZnMvdmxjbGllbnQuY1xcbkBAIC0xNTMsNyArMTUzLDcgQEAgc3RydWN0IGFmc192bGRiX2VudHJ5ICphZnNfdmxfZ2V0X2VudHJ5X2J5X25hbWVfdShzdHJ1Y3QgYWZzX3ZsX2N1cnNvciAqdmMsXFxuIFxcdHZjLVxcdTAwM2VjYWxsX2Fib3J0X2NvZGVcXHQ9IGNhbGwtXFx1MDAzZWFib3J0X2NvZGU7XFxuIFxcdHZjLVxcdTAwM2VjYWxsX2Vycm9yXFx0XFx0PSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4gXFx0dmMtXFx1MDAzZWNhbGxfcmVzcG9uZGVkXFx0PSBjYWxsLVxcdTAwM2VyZXNwb25kZWQ7XFxuLVxcdGFmc19wdXRfY2FsbChjYWxsKTtcXG4rXFx0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF92bF9jYWxsKTtcXG4gXFx0aWYgKHZjLVxcdTAwM2VjYWxsX2Vycm9yKSB7XFxuIFxcdFxcdGtmcmVlKGVudHJ5KTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIodmMtXFx1MDAzZWNhbGxfZXJyb3IpO1xcbkBAIC0zMDMsNyArMzAzLDcgQEAgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc192bF9nZXRfYWRkcnNfdShzdHJ1Y3QgYWZzX3ZsX2N1cnNvciAqdmMsXFxuIFxcdHZjLVxcdTAwM2VjYWxsX2Vycm9yXFx0XFx0PSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4gXFx0dmMtXFx1MDAzZWNhbGxfcmVzcG9uZGVkXFx0PSBjYWxsLVxcdTAwM2VyZXNwb25kZWQ7XFxuIFxcdGFsaXN0XFx0XFx0XFx0PSBjYWxsLVxcdTAwM2VyZXRfYWxpc3Q7XFxuLVxcdGFmc19wdXRfY2FsbChjYWxsKTtcXG4rXFx0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF92bF9jYWxsKTtcXG4gXFx0aWYgKHZjLVxcdTAwM2VjYWxsX2Vycm9yKSB7XFxuIFxcdFxcdGFmc19wdXRfYWRkcmxpc3QoYWxpc3QsIGFmc19hbGlzdF90cmFjZV9wdXRfZ2V0YWRkcnUpO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUih2Yy1cXHUwMDNlY2FsbF9lcnJvcik7XFxuQEAgLTY2Niw3ICs2NjYsNyBAQCBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWZzX3lmc3ZsX2dldF9lbmRwb2ludHMoc3RydWN0IGFmc192bF9jdXJzb3IgKnZjLFxcbiBcXHR2Yy1cXHUwMDNlY2FsbF9lcnJvclxcdFxcdD0gY2FsbC1cXHUwMDNlZXJyb3I7XFxuIFxcdHZjLVxcdTAwM2VjYWxsX3Jlc3BvbmRlZFxcdD0gY2FsbC1cXHUwMDNlcmVzcG9uZGVkO1xcbiBcXHRhbGlzdFxcdFxcdFxcdD0gY2FsbC1cXHUwMDNlcmV0X2FsaXN0O1xcbi1cXHRhZnNfcHV0X2NhbGwoY2FsbCk7XFxuK1xcdGFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfdmxfY2FsbCk7XFxuIFxcdGlmICh2Yy1cXHUwMDNlY2FsbF9lcnJvcikge1xcbiBcXHRcXHRhZnNfcHV0X2FkZHJsaXN0KGFsaXN0LCBhZnNfYWxpc3RfdHJhY2VfcHV0X2dldGFkZHJ1KTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIodmMtXFx1MDAzZWNhbGxfZXJyb3IpO1xcbkBAIC03ODQsNyArNzg0LDcgQEAgY2hhciAqYWZzX3lmc3ZsX2dldF9jZWxsX25hbWUoc3RydWN0IGFmc192bF9jdXJzb3IgKnZjKVxcbiBcXHR2Yy1cXHUwMDNlY2FsbF9lcnJvclxcdFxcdD0gY2FsbC1cXHUwMDNlZXJyb3I7XFxuIFxcdHZjLVxcdTAwM2VjYWxsX3Jlc3BvbmRlZFxcdD0gY2FsbC1cXHUwMDNlcmVzcG9uZGVkO1xcbiBcXHRjZWxsbmFtZVxcdFxcdD0gY2FsbC1cXHUwMDNlcmV0X3N0cjtcXG4tXFx0YWZzX3B1dF9jYWxsKGNhbGwpO1xcbitcXHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2NhbGwpO1xcbiBcXHRpZiAodmMtXFx1MDAzZWNhbGxfZXJyb3IpIHtcXG4gXFx0XFx0a2ZyZWUoY2VsbG5hbWUpO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUih2Yy1cXHUwMDNlY2FsbF9lcnJvcik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaCBiL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaFxcbmluZGV4IDM4NmMzMTQzMjc4OTk1Li43MDAyYTk5M2E0NzIyOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcXG4rKysgYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcXG5AQCAtMjYsNiArMjYsNyBAQFxcbiAgKi9cXG4gc3RydWN0IHVzZXJfa2V5X3BheWxvYWQge1xcbiBcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRyY3U7XFx0XFx0LyogUkNVIGRlc3RydWN0b3IgKi9cXG4rXFx0cmVmY291bnRfdFxcdHJlZjtcXG4gXFx0dW5zaWduZWQgc2hvcnRcXHRkYXRhbGVuO1xcdC8qIGxlbmd0aCBvZiB0aGlzIGRhdGEgKi9cXG4gXFx0Y2hhclxcdFxcdGRhdGFbXSBfX2FsaWduZWQoX19hbGlnbm9mX18odTY0KSk7IC8qIGFjdHVhbCBkYXRhICovXFxuIH07XFxuQEAgLTM3LDYgKzM4LDcgQEAgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZDtcXG4gXFxuIGV4dGVybiBpbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcXG4gZXh0ZXJuIHZvaWQgdXNlcl9mcmVlX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xcbit2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKTtcXG4gZXh0ZXJuIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xcbiBleHRlcm4gdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpO1xcbiBleHRlcm4gdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfcnhycGMuaCBiL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmhcXG5pbmRleCAwZmI0YzQxYzliYmY1NS4uYTliOGUxYmE2N2VmOGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmhcXG5AQCAtNTUsNiArNTUsNyBAQCB2b2lkIHJ4cnBjX2tlcm5lbF9zZXRfbm90aWZpY2F0aW9ucyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrZXkgKmtleSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGtleSAqYXBwX2RhdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lELFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzNjQgdHhfdG90YWxfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1MzIgaGFyZF90aW1lb3V0LFxcbkBAIC05MSwyNCArOTIsOCBAQCBib29sIHJ4cnBjX2tlcm5lbF9jaGVja19saWZlKGNvbnN0IHN0cnVjdCBzb2NrZXQgKiwgY29uc3Qgc3RydWN0IHJ4cnBjX2NhbGwgKik7XFxuIFxcbiBpbnQgcnhycGNfc29ja19zZXRfbWluX3NlY3VyaXR5X2xldmVsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IHZhbCk7XFxuIGludCByeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKHN0cnVjdCBzb2NrICosIHN0cnVjdCBrZXkgKik7XFxuLWludCByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBib29sIHNldCk7XFxuLVxcbi1lbnVtIHJ4cnBjX29vYl90eXBlIHJ4cnBjX2tlcm5lbF9xdWVyeV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSk7XFxuLXN0cnVjdCBza19idWZmICpyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2Ioc3RydWN0IHNvY2tldCAqc29jayxcXG4tXFx0XFx0XFx0XFx0XFx0IGVudW0gcnhycGNfb29iX3R5cGUgKl90eXBlKTtcXG4tdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYik7XFxuLXZvaWQgcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXFxuLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyAqX3BlZXJfYXBwZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICB1MTYgKl9zZXJ2aWNlX2lkLCB1OCAqX3NlY3VyaXR5X2luZGV4KTtcXG4taW50IHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsIHUzMiBhYm9ydF9jb2RlLFxcbi1cXHRcXHRcXHRcXHQgIGludCBlcnJvciwgZW51bSByeHJwY19hYm9ydF9yZWFzb24gd2h5KTtcXG4taW50IHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKTtcXG4tdTMyIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKTtcXG4taW50IHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKTtcXG4rdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCxcXG4rXFx0XFx0XFx0ICAgIHUzMiAqX2tyYjVfZW5jdHlwZSk7XFxuIHU4IHJ4cnBjX2tlcm5lbF9xdWVyeV9jYWxsX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRcXHRcXHRcXHQgICAgdTE2ICpfc2VydmljZV9pZCwgdTMyICpfZW5jdHlwZSk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXFxuaW5kZXggMWIzYzQ4YjU1OTFkZmQuLmE0ZjU3NDE0ZDUyN2ZiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcXG5AQCAtMTIwLDE0ICsxMjAsMjYgQEAgZW51bSB5ZnNfY21fb3BlcmF0aW9uIHtcXG4gICogRGVjbGFyZSB0cmFjaW5nIGluZm9ybWF0aW9uIGVudW1zIGFuZCB0aGVpciBzdHJpbmcgbWFwcGluZ3MgZm9yIGRpc3BsYXkuXFxuICAqL1xcbiAjZGVmaW5lIGFmc19jYWxsX3RyYWNlcyBcXFxcXFxuLVxcdEVNKGFmc19jYWxsX3RyYWNlX2FsbG9jLFxcdFxcdFxcXCJBTExPQ1xcXCIpIFxcXFxcXG4tXFx0RU0oYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQsXFx0XFx0XFxcIkFTWUFCXFxcIikgXFxcXFxcbi1cXHRFTShhZnNfY2FsbF90cmFjZV9hc3luY19raWxsLFxcdFxcdFxcXCJBU1lLTFxcXCIpIFxcXFxcXG4tXFx0RU0oYWZzX2NhbGxfdHJhY2VfZnJlZSxcXHRcXHRcXHRcXFwiRlJFRSBcXFwiKSBcXFxcXFxuLVxcdEVNKGFmc19jYWxsX3RyYWNlX2dldCxcXHRcXHRcXHRcXFwiR0VUICBcXFwiKSBcXFxcXFxuLVxcdEVNKGFmc19jYWxsX3RyYWNlX3B1dCxcXHRcXHRcXHRcXFwiUFVUICBcXFwiKSBcXFxcXFxuLVxcdEVNKGFmc19jYWxsX3RyYWNlX3dha2UsXFx0XFx0XFx0XFxcIldBS0UgXFxcIikgXFxcXFxcbi1cXHRFXyhhZnNfY2FsbF90cmFjZV93b3JrLFxcdFxcdFxcdFxcXCJRVUVVRVxcXCIpXFxuK1xcdEVNKGFmc19jYWxsX3RyYWNlX2FsbG9jLFxcdFxcdFxcXCJBTExPQyAgICAgIFxcXCIpIFxcXFxcXG4rXFx0RU0oYWZzX2NhbGxfdHJhY2VfZnJlZSxcXHRcXHRcXHRcXFwiRlJFRSAgICAgICBcXFwiKSBcXFxcXFxuK1xcdEVNKGFmc19jYWxsX3RyYWNlX2dldF9vcF9jYWxsLFxcdFxcdFxcXCJHRVQgb3AgICAgIFxcXCIpIFxcXFxcXG4rXFx0RU0oYWZzX2NhbGxfdHJhY2VfZ2V0X21ha2VfYXN5bmNfY2FsbCxcXHRcXFwiR0VUIGEtbWFrZSBcXFwiKSBcXFxcXFxuK1xcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9hc3luY19jb21wbGV0ZSxcXHRcXFwiUFVUIGEtY21wbCBcXFwiKSBcXFxcXFxuK1xcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9tYWRlX2NhbGwsXFx0XFxcIlBVVCBtYWRlICAgXFxcIikgXFxcXFxcbitcXHRFTShhZnNfY2FsbF90cmFjZV9wdXRfZGlzY2FyZF9wcmVhbGxvYyxcXHRcXFwiUFVUIGRpcy1wcmVcXFwiKSBcXFxcXFxuK1xcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9nZXRfY2FwYWJpbGl0aWVzLFxcdFxcXCJQVVQgZ2V0LWNhcFxcXCIpIFxcXFxcXG4rXFx0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X2dpdmV1cGNhbGxiYWNrcyxcXHRcXFwiUFVUIGd2dXAtY2JcXFwiKSBcXFxcXFxuK1xcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9vb20sXFx0XFx0XFxcIlBVVCBvb20gICAgXFxcIikgXFxcXFxcbitcXHRFTShhZnNfY2FsbF90cmFjZV9wdXRfcmVhZF9jb21wbGV0ZSxcXHRcXFwiUFVUIHJkLWNwbCBcXFwiKSBcXFxcXFxuK1xcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9yZWFkX29wLFxcdFxcdFxcXCJQVVQgcmQtb3AgIFxcXCIpIFxcXFxcXG4rXFx0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X3NwYXJlX3N2YyxcXHRcXFwiUFVUIHNwYXJlLXNcXFwiKSBcXFxcXFxuK1xcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF92bF9jYWxsLFxcdFxcdFxcXCJQVVQgdmwtY2FsbFxcXCIpIFxcXFxcXG4rXFx0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2dldF9jYXBzLFxcdFxcXCJQVVQgdmwtZ2NhcFxcXCIpIFxcXFxcXG4rXFx0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X3dhaXRfb3AsXFx0XFx0XFxcIlBVVCB3dC1vcCAgXFxcIikgXFxcXFxcbitcXHRFTShhZnNfY2FsbF90cmFjZV9zZWVfYXN5bmNfYWJvcnQsXFx0XFxcIlNFRSBhLWFib3J0XFxcIikgXFxcXFxcbitcXHRFTShhZnNfY2FsbF90cmFjZV9zZWVfYXN5bmNfa2lsbCxcXHRcXFwiU0VFIGEta2lsbCBcXFwiKSBcXFxcXFxuK1xcdEVNKGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY19wcm9jZXNzLFxcdFxcXCJTRUUgYS1wcm9jIFxcXCIpIFxcXFxcXG4rXFx0RV8oYWZzX2NhbGxfdHJhY2Vfc2VlX2FzeW5jX3dha2UsXFx0XFxcIlNFRSBhLXdha2UgXFxcIilcXG4gXFxuICNkZWZpbmUgYWZzX3NlcnZlcl90cmFjZXMgXFxcXFxcbiBcXHRFTShhZnNfc2VydmVyX3RyYWNlX2NhbGxiYWNrLFxcdFxcdFxcXCJDQUxMQkFDSyBcXFwiKSBcXFxcXFxuQEAgLTE0OCw2ICsxNjAsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24ge1xcbiBcXHRFTShhZnNfc2VydmVyX3RyYWNlX3VudXNlX3NsaXN0X2lzb3J0LFxcdFxcXCJVTlUgaXNvcnRcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXBkYXRlLFxcdFxcdFxcXCJVUERBVEUgICBcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXFx0XFxcIlVTRSB1dWlkIFxcXCIpIFxcXFxcXG4rXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcXHRcXHRcXFwiVVNFIGNhbGwgXFxcIikgXFxcXFxcbiBcXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9jbV9jYWxsLFxcdFxcXCJVU0UgY20tY2xcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLFxcdFxcXCJVU0UgZ2NhcHNcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dpdmVfdXBfY2IsXFx0XFxcIlVTRSBndnVwY1xcXCIpIFxcXFxcXG5AQCAtNjkzLDE2ICs3MDYsMTUgQEAgVFJBQ0VfRVZFTlQoYWZzX2NiX2NhbGwsXFxuIFxcbiBUUkFDRV9FVkVOVChhZnNfY2FsbCxcXG4gXFx0ICAgIFRQX1BST1RPKHVuc2lnbmVkIGludCBjYWxsX2RlYnVnX2lkLCBlbnVtIGFmc19jYWxsX3RyYWNlIG9wLFxcbi1cXHRcXHQgICAgIGludCByZWYsIGludCBvdXRzdGFuZGluZywgY29uc3Qgdm9pZCAqd2hlcmUpLFxcbitcXHRcXHQgICAgIGludCByZWYsIGludCBvdXRzdGFuZGluZyksXFxuIFxcbi1cXHQgICAgVFBfQVJHUyhjYWxsX2RlYnVnX2lkLCBvcCwgcmVmLCBvdXRzdGFuZGluZywgd2hlcmUpLFxcbitcXHQgICAgVFBfQVJHUyhjYWxsX2RlYnVnX2lkLCBvcCwgcmVmLCBvdXRzdGFuZGluZyksXFxuIFxcbiBcXHQgICAgVFBfU1RSVUNUX19lbnRyeShcXG4gXFx0XFx0ICAgIF9fZmllbGQodW5zaWduZWQgaW50LFxcdFxcdGNhbGwpXFxuIFxcdFxcdCAgICBfX2ZpZWxkKGludCxcXHRcXHRcXHRvcClcXG4gXFx0XFx0ICAgIF9fZmllbGQoaW50LFxcdFxcdFxcdHJlZilcXG4gXFx0XFx0ICAgIF9fZmllbGQoaW50LFxcdFxcdFxcdG91dHN0YW5kaW5nKVxcbi1cXHRcXHQgICAgX19maWVsZChjb25zdCB2b2lkICosXFx0XFx0d2hlcmUpXFxuIFxcdFxcdFxcdCAgICAgKSxcXG4gXFxuIFxcdCAgICBUUF9mYXN0X2Fzc2lnbihcXG5AQCAtNzEwLDE1ICs3MjIsMTMgQEAgVFJBQ0VfRVZFTlQoYWZzX2NhbGwsXFxuIFxcdFxcdCAgICBfX2VudHJ5LVxcdTAwM2VvcCA9IG9wO1xcbiBcXHRcXHQgICAgX19lbnRyeS1cXHUwMDNlcmVmID0gcmVmO1xcbiBcXHRcXHQgICAgX19lbnRyeS1cXHUwMDNlb3V0c3RhbmRpbmcgPSBvdXRzdGFuZGluZztcXG4tXFx0XFx0ICAgIF9fZW50cnktXFx1MDAzZXdoZXJlID0gd2hlcmU7XFxuIFxcdFxcdFxcdCAgICksXFxuIFxcbi1cXHQgICAgVFBfcHJpbnRrKFxcXCJjPSUwOHggJXMgcj0lZCBvPSVkIHNwPSVwU1JcXFwiLFxcbitcXHQgICAgVFBfcHJpbnRrKFxcXCJjPSUwOHggJXMgcj0lZCBvPSVkXFxcIixcXG4gXFx0XFx0ICAgICAgX19lbnRyeS1cXHUwMDNlY2FsbCxcXG4gXFx0XFx0ICAgICAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LVxcdTAwM2VvcCwgYWZzX2NhbGxfdHJhY2VzKSxcXG4gXFx0XFx0ICAgICAgX19lbnRyeS1cXHUwMDNlcmVmLFxcbi1cXHRcXHQgICAgICBfX2VudHJ5LVxcdTAwM2VvdXRzdGFuZGluZyxcXG4tXFx0XFx0ICAgICAgX19lbnRyeS1cXHUwMDNld2hlcmUpXFxuK1xcdFxcdCAgICAgIF9fZW50cnktXFx1MDAzZW91dHN0YW5kaW5nKVxcbiBcXHQgICAgKTtcXG4gXFxuIFRSQUNFX0VWRU5UKGFmc19tYWtlX2ZzX2NhbGwsXFxuQEAgLTkzNyw5ICs5NDcsOSBAQCBUUkFDRV9FVkVOVChhZnNfc2VuZF9kYXRhLFxcbiBcXHQgICAgKTtcXG4gXFxuIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsXFxuLVxcdCAgICBUUF9QUk9UTyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHJldCksXFxuK1xcdCAgICBUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY2FsbF9kZWJ1Z19pZCwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgcmV0KSxcXG4gXFxuLVxcdCAgICBUUF9BUkdTKGNhbGwsIG1zZywgcmV0KSxcXG4rXFx0ICAgIFRQX0FSR1MoY2FsbF9kZWJ1Z19pZCwgbXNnLCByZXQpLFxcbiBcXG4gXFx0ICAgIFRQX1NUUlVDVF9fZW50cnkoXFxuIFxcdFxcdCAgICBfX2ZpZWxkKHVuc2lnbmVkIGludCxcXHRcXHRjYWxsKVxcbkBAIC05NDksNyArOTU5LDcgQEAgVFJBQ0VfRVZFTlQoYWZzX3NlbnRfZGF0YSxcXG4gXFx0XFx0XFx0ICAgICApLFxcbiBcXG4gXFx0ICAgIFRQX2Zhc3RfYXNzaWduKFxcbi1cXHRcXHQgICAgX19lbnRyeS1cXHUwMDNlY2FsbCA9IGNhbGwtXFx1MDAzZWRlYnVnX2lkO1xcbitcXHRcXHQgICAgX19lbnRyeS1cXHUwMDNlY2FsbCA9IGNhbGxfZGVidWdfaWQ7XFxuIFxcdFxcdCAgICBfX2VudHJ5LVxcdTAwM2VyZXQgPSByZXQ7XFxuIFxcdFxcdCAgICBfX2VudHJ5LVxcdTAwM2VvZmZzZXQgPSBtc2ctXFx1MDAzZW1zZ19pdGVyLnhhcnJheV9zdGFydCArIG1zZy1cXHUwMDNlbXNnX2l0ZXIuaW92X29mZnNldDtcXG4gXFx0XFx0ICAgIF9fZW50cnktXFx1MDAzZWNvdW50ID0gaW92X2l0ZXJfY291bnQoXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxcbmluZGV4IDcwNGExMGRlNjY3MDA0Li40NWU0NTUwYTE4ZWQ4MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxcbkBAIC0xNDgsNiArMTQ4LDcgQEBcXG4gXFx0RU0ocnhycGNfZXByb3RvX3dyb25nX3NlY3VyaXR5LFxcdFxcdFxcXCJ3cm9uZy1zZWNcXFwiKVxcdFxcdFxcXFxcXG4gXFx0RU0ocnhycGNfcmVjdm1zZ19leGNlc3NfZGF0YSxcXHRcXHRcXFwicmVjdm1zZy1leGNlc3NcXFwiKVxcdFxcXFxcXG4gXFx0RU0ocnhycGNfcmVjdm1zZ19zaG9ydF9kYXRhLFxcdFxcdFxcXCJyZWN2bXNnLXNob3J0XFxcIilcXHRcXFxcXFxuK1xcdEVNKHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXFx0XFx0XFxcInR4LWVycm9yXFxcIilcXHRcXHRcXFxcXFxuIFxcdEVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFxcdFxcdFxcXCJzZW5kbXNnLWxhdGVcXFwiKVxcbiBcXG4gI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFxcXFxcXG5AQCAtMjYyLDcgKzI2Myw2IEBAXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fZnJlZSxcXHRcXHRcXHRcXFwiRlJFRSAgICAgICAgXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX2dldF9hY3RpdmF0ZV9jYWxsLFxcdFxcXCJHRVQgYWN0LWNhbGxcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2NhbGxfaW5wdXQsXFx0XFx0XFxcIkdFVCBpbnAtY2FsbFxcXCIpIFxcXFxcXG4tXFx0RU0ocnhycGNfY29ubl9nZXRfY2hhbGxlbmdlX2lucHV0LFxcdFxcXCJHRVQgaW5wLWNoYWxcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2Nvbm5faW5wdXQsXFx0XFx0XFxcIkdFVCBpbnAtY29ublxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9nZXRfaWRsZSxcXHRcXHRcXHRcXFwiR0VUIGlkbGUgICAgXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX2dldF9wb2tlX2Fib3J0LFxcdFxcdFxcXCJHRVQgcGstYWJvcnRcXFwiKSBcXFxcXFxuQEAgLTI3NCw3ICsyNzQsNiBAQFxcbiBcXHRFTShyeHJwY19jb25uX25ld19zZXJ2aWNlLFxcdFxcdFxcXCJORVcgc2VydmljZSBcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2Nvbm5fcHV0X2NhbGwsXFx0XFx0XFx0XFxcIlBVVCBjYWxsICAgIFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9wdXRfY2FsbF9pbnB1dCxcXHRcXHRcXFwiUFVUIGlucC1jYWxsXFxcIikgXFxcXFxcbi1cXHRFTShyeHJwY19jb25uX3B1dF9jaGFsbGVuZ2VfaW5wdXQsXFx0XFxcIlBVVCBpbnAtY2hhbFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9wdXRfY29ubl9pbnB1dCxcXHRcXHRcXFwiUFVUIGlucC1jb25uXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jb25uX3B1dF9kaXNjYXJkX2lkbGUsXFx0XFx0XFxcIlBVVCBkaXNjLWlkbFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY29ubl9wdXRfbG9jYWxfZGVhZCxcXHRcXHRcXFwiUFVUIGxvYy1kZWFkXFxcIikgXFxcXFxcbkBAIC0zNDIsNiArMzQxLDcgQEBcXG4gXFx0RU0ocnhycGNfY2FsbF9zZWVfZGlzdHJpYnV0ZV9lcnJvcixcXHRcXFwiU0VFIGRpc3QtZXJyXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jYWxsX3NlZV9pbnB1dCxcXHRcXHRcXFwiU0VFIGlucHV0ICAgXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQsXFx0XFxcIlNFRSBuZnktcmxzZFxcXCIpIFxcXFxcXG4rXFx0RU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQsXFx0XFxcIlNFRSBuZnktc2tpcFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZyxcXHRcXHRcXFwiU0VFIHJlY3Ztc2cgXFxcIikgXFxcXFxcbiBcXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWUsXFx0XFxcIlNFRSByZWN2LXJxdVxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZ19yZXF1ZXVlX2ZpcnN0LCBcXFwiU0VFIHJlY3YtcnFGXFxcIikgXFxcXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXFxuaW5kZXggZDk3MzVhYmQ0Yzc5MTAuLjdkNmE1MDE1MTkzMTEyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcXG5AQCAtNTgsMTEgKzU4LDcgQEAgZW51bSByeHJwY19jbXNnX3R5cGUge1xcbiBcXHRSWFJQQ19UWF9MRU5HVEhcXHRcXHQ9IDEyLFxcdC8qIC1zLTogVG90YWwgbGVuZ3RoIG9mIFR4IGRhdGEgKi9cXG4gXFx0UlhSUENfU0VUX0NBTExfVElNRU9VVFxcdD0gMTMsXFx0LyogLXMtOiBTZXQgb25lIG9yIG1vcmUgY2FsbCB0aW1lb3V0cyAqL1xcbiBcXHRSWFJQQ19DSEFSR0VfQUNDRVBUXFx0PSAxNCxcXHQvKiBTcy06IENoYXJnZSB0aGUgYWNjZXB0IHBvb2wgd2l0aCBhIHVzZXIgY2FsbCBJRCAqL1xcbi1cXHRSWFJQQ19PT0JfSURcXHRcXHQ9IDE1LFxcdC8qIC1zcjogT09CIG1lc3NhZ2UgSUQgKi9cXG4tXFx0UlhSUENfQ0hBTExFTkdFRFxcdD0gMTYsXFx0LyogQy1yOiBJbmZvIG9uIGEgcmVjZWl2ZWQgQ0hBTExFTkdFICovXFxuLVxcdFJYUlBDX1JFU1BPTkRcXHRcXHQ9IDE3LFxcdC8qIENzLTogUmVzcG9uZCB0byBhIGNoYWxsZW5nZSAqL1xcbi1cXHRSWFJQQ19SRVNQT05ERURcXHRcXHQ9IDE4LFxcdC8qIFMtcjogRGF0YSByZWNlaXZlZCBpbiBSRVNQT05TRSAqL1xcbi1cXHRSWFJQQ19SRVNQX1JYR0tfQVBQREFUQVxcdD0gMTksXFx0LyogQ3MtOiBSRVNQT05TRTogUnhHSyBhcHAgZGF0YSB0byBpbmNsdWRlICovXFxuK1xcdFJYUlBDX1JFU1BPTlNFX0FQUERBVEFcXHQ9IDIwLFxcdC8qIENzLTogVXNlciBrZXkgaG9sZGluZyBhcHAgZGF0YSBmb3IgUkVTUE9OU0UgKi9cXG4gXFx0UlhSUENfX1NVUFBPUlRFRFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xcbmluZGV4IGMzYzhjMzI0MGVmOTQ2Li5hYTNjMDU4ZjQwOTU1OSAxMDA2NDRcXG4tLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xcbisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXFxuQEAgLTIwOCw2ICsyMDgsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcXG4gXFx0XFx0a2xlYXZlKFxcXCIgPSAtRU5PTUVNXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHR9XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2dXBheWxvYWQtXFx1MDAzZXJlZiwgMSk7XFxuIFxcbiBcXHR1cGF5bG9hZC1cXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XFxuIFxcdG1lbWNweSh1cGF5bG9hZC1cXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9NYWtlZmlsZSBiL25ldC9yeHJwYy9NYWtlZmlsZVxcbmluZGV4IGY5OTRmOWYzMGEyOWQ0Li5mN2E1ZTBhNTkyZWUxMyAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvTWFrZWZpbGVcXG4rKysgYi9uZXQvcnhycGMvTWFrZWZpbGVcXG5AQCAtMjQsNyArMjQsNiBAQCByeHJwYy15IDo9IFxcXFxcXG4gXFx0bG9jYWxfb2JqZWN0Lm8gXFxcXFxcbiBcXHRtaXNjLm8gXFxcXFxcbiBcXHRuZXRfbnMubyBcXFxcXFxuLVxcdG9vYi5vIFxcXFxcXG4gXFx0b3V0cHV0Lm8gXFxcXFxcbiBcXHRwZWVyX2V2ZW50Lm8gXFxcXFxcbiBcXHRwZWVyX29iamVjdC5vIFxcXFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FmX3J4cnBjLmMgYi9uZXQvcnhycGMvYWZfcnhycGMuY1xcbmluZGV4IDlhYjBmMjJjODgxZWM1Li45ZDVjZTFjN2FkMGQyMiAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvYWZfcnhycGMuY1xcbisrKyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jXFxuQEAgLTMxOCw2ICszMTgsNyBAQCBFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7XFxuICAqIEBzb2NrOiBUaGUgc29ja2V0IG9uIHdoaWNoIHRvIG1ha2UgdGhlIGNhbGxcXG4gICogQHBlZXI6IFRoZSBwZWVyIHRvIGNvbnRhY3RcXG4gICogQGtleTogVGhlIHNlY3VyaXR5IGNvbnRleHQgdG8gdXNlIChkZWZhdWx0cyB0byBzb2NrZXQgc2V0dGluZylcXG4rICogQGFwcF9kYXRhOiBUaGUgc2VjdXJpdHkgcmVzcG9uc2UgYXBwbGljYXRpb24gZGF0YSAob3IgTlVMTClcXG4gICogQHVzZXJfY2FsbF9JRDogVGhlIElEIHRvIHVzZVxcbiAgKiBAdHhfdG90YWxfbGVuOiBUb3RhbCBsZW5ndGggb2YgZGF0YSB0byB0cmFuc21pdCBkdXJpbmcgdGhlIGNhbGwgKG9yIC0xKVxcbiAgKiBAaGFyZF90aW1lb3V0OiBUaGUgbWF4aW11bSBsaWZlc3BhbiBvZiB0aGUgY2FsbCBpbiBzZWNcXG5AQCAtMzQwLDYgKzM0MSw3IEBAIEVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3B1dF9wZWVyKTtcXG4gc3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19wZWVyICpwZWVyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga2V5ICprZXksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrZXkgKmFwcF9kYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHVzZXJfY2FsbF9JRCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgczY0IHR4X3RvdGFsX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgdTMyIGhhcmRfdGltZW91dCxcXG5AQCAtMzY4LDYgKzM3MCw3IEBAIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbiBcXHRcXHRrZXkgPSBOVUxMOyAvKiBhIG5vLXNlY3VyaXR5IGtleSAqL1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZwLCAwLCBzaXplb2YocCkpO1xcbitcXHRwLmFwcF9kYXRhXFx0XFx0PSBhcHBfZGF0YTtcXG4gXFx0cC51c2VyX2NhbGxfSURcXHRcXHQ9IHVzZXJfY2FsbF9JRDtcXG4gXFx0cC50eF90b3RhbF9sZW5cXHRcXHQ9IHR4X3RvdGFsX2xlbjtcXG4gXFx0cC5pbnRlcnJ1cHRpYmlsaXR5XFx0PSBpbnRlcnJ1cHRpYmlsaXR5O1xcbkBAIC01OTUsMTAgKzU5OCw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuKVxcbiBcXHRcXHRmYWxsdGhyb3VnaDtcXG4gXFx0Y2FzZSBSWFJQQ19TRVJWRVJfQk9VTkQ6XFxuIFxcdGNhc2UgUlhSUENfU0VSVkVSX0xJU1RFTklORzpcXG4tXFx0XFx0aWYgKG0tXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19PT0IpXFxuLVxcdFxcdFxcdHJldCA9IHJ4cnBjX3NlbmRtc2dfb29iKHJ4LCBtLCBsZW4pO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XFxuK1xcdFxcdHJldCA9IHJ4cnBjX2RvX3NlbmRtc2cocngsIG0sIGxlbik7XFxuIFxcdFxcdC8qIFRoZSBzb2NrZXQgaGFzIGJlZW4gdW5sb2NrZWQgKi9cXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdGRlZmF1bHQ6XFxuQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gXFx0XFx0XFx0ICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuIHtcXG4gXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cXHUwMDNlc2spO1xcbi1cXHR1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbCwgdmFsO1xcbitcXHR1bnNpZ25lZCBpbnQgbWluX3NlY19sZXZlbDtcXG4gXFx0dTE2IHNlcnZpY2VfdXBncmFkZVsyXTtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTcxMCwyMyArNzEwLDcgQEAgc3RhdGljIGludCByeHJwY19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcbiBcXHRcXHRjYXNlIFJYUlBDX01BTkFHRV9SRVNQT05TRTpcXG4gXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0aWYgKG9wdGxlbiAhPSBzaXplb2YodW5zaWduZWQgaW50KSlcXG4tXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4tXFx0XFx0XFx0cmV0ID0gLUVJU0NPTk47XFxuLVxcdFxcdFxcdGlmIChyeC1cXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfVU5CT1VORClcXG4tXFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4tXFx0XFx0XFx0cmV0ID0gY29weV9zYWZlX2Zyb21fc29ja3B0cihcXHUwMDI2dmFsLCBzaXplb2YodmFsKSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcHR2YWwsIG9wdGxlbik7XFxuLVxcdFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLVxcdFxcdFxcdGlmICh2YWwgXFx1MDAzZSAxKVxcbi1cXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbi1cXHRcXHRcXHRpZiAodmFsKVxcbi1cXHRcXHRcXHRcXHRzZXRfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcXHUwMDI2cngtXFx1MDAzZWZsYWdzKTtcXG4tXFx0XFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRcXHRjbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFxcdTAwMjZyeC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRcXHRnb3RvIHN1Y2Nlc3M7XFxuK1xcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtODM1LDggKzgxOSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbiBcXHRyeC1cXHUwMDNlY2FsbHMgPSBSQl9ST09UO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnJ4LVxcdTAwM2VpbmNvbWluZ19sb2NrKTtcXG4tXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSk7XFxuLVxcdHJ4LVxcdTAwM2VwZW5kaW5nX29vYnEgPSBSQl9ST09UO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cngtXFx1MDAzZXNvY2tfY2FsbHMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cngtXFx1MDAzZXRvX2JlX2FjY2VwdGVkKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpO1xcbkBAIC04ODQsMjMgKzg2Niw2IEBAIHN0YXRpYyBpbnQgcnhycGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGZsYWdzKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBQdXJnZSB0aGUgb3V0LW9mLWJhbmQgcXVldWUuXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCByeHJwY19wdXJnZV9vb2JfcXVldWUoc3RydWN0IHNvY2sgKnNrKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tXFxuLVxcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpKSlcXG4tXFx0XFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKHNrYik7XFxuLVxcdHdoaWxlICghUkJfRU1QVFlfUk9PVChcXHUwMDI2cngtXFx1MDAzZXBlbmRpbmdfb29icSkpIHtcXG4tXFx0XFx0c2tiID0gcmJfZW50cnkocngtXFx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiwgcmJub2RlKTtcXG4tXFx0XFx0cmJfZXJhc2UoXFx1MDAyNnNrYi1cXHUwMDNlcmJub2RlLCBcXHUwMDI2cngtXFx1MDAzZXBlbmRpbmdfb29icSk7XFxuLVxcdFxcdHJ4cnBjX2tlcm5lbF9mcmVlX29vYihza2IpO1xcbi1cXHR9XFxuLX1cXG4tXFxuIC8qXFxuICAqIFJ4UlBDIHNvY2tldCBkZXN0cnVjdG9yXFxuICAqL1xcbkBAIC05MDgsNyArODczLDYgQEAgc3RhdGljIHZvaWQgcnhycGNfc29ja19kZXN0cnVjdG9yKHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRfZW50ZXIoXFxcIiVwXFxcIiwgc2spO1xcbiBcXG4tXFx0cnhycGNfcHVyZ2Vfb29iX3F1ZXVlKHNrKTtcXG4gXFx0cnhycGNfcHVyZ2VfcXVldWUoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG4gXFxuIFxcdFdBUk5fT04ocmVmY291bnRfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX3dtZW1fYWxsb2MpKTtcXG5AQCAtOTYxLDcgKzkyNSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4gXFx0cnhycGNfZGlzY2FyZF9wcmVhbGxvYyhyeCk7XFxuIFxcdHJ4cnBjX3JlbGVhc2VfY2FsbHNfb25fc29ja2V0KHJ4KTtcXG4gXFx0Zmx1c2hfd29ya3F1ZXVlKHJ4cnBjX3dvcmtxdWV1ZSk7XFxuLVxcdHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7XFxuIFxcdHJ4cnBjX3B1cmdlX3F1ZXVlKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XFxuIFxcbiBcXHRyeHJwY191bnVzZV9sb2NhbChyeC1cXHUwMDNlbG9jYWwsIHJ4cnBjX2xvY2FsX3VudXNlX3JlbGVhc2Vfc29jayk7XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcXG5pbmRleCBjZTk0NmIwYTAzZTJiMy4uMWM2ZjRhMjc5MDM0ZjMgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcXG4rKysgYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxcbkBAIC0xNzEsOSArMTcxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sge1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyAqYXBwX29wcztcXHQvKiBUYWJsZSBvZiBrZXJuZWwgYXBwIG5vdGlmaWNhdGlvbiBmdW5jcyAqL1xcbiBcXHRzdHJ1Y3QgcnhycGNfbG9jYWxcXHQqbG9jYWw7XFx0XFx0LyogbG9jYWwgZW5kcG9pbnQgKi9cXG4gXFx0c3RydWN0IHJ4cnBjX2JhY2tsb2dcXHQqYmFja2xvZztcXHQvKiBQcmVhbGxvY2F0aW9uIGZvciBzZXJ2aWNlcyAqL1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXFx0cmVjdm1zZ19vb2JxO1xcdC8qIE9PQiBtZXNzYWdlcyBmb3IgcmVjdm1zZyB0byBwaWNrIHVwICovXFxuLVxcdHN0cnVjdCByYl9yb290XFx0XFx0cGVuZGluZ19vb2JxO1xcdC8qIE9PQiBtZXNzYWdlcyBhd2FpdGluZyB1c2Vyc3BhY2UgdG8gcmVzcG9uZCB0byAqL1xcbi1cXHR1NjRcXHRcXHRcXHRvb2JfaWRfY291bnRlcjtcXHQvKiBPT0IgbWVzc2FnZSBJRCBjb3VudGVyICovXFxuIFxcdHNwaW5sb2NrX3RcXHRcXHRpbmNvbWluZ19sb2NrO1xcdC8qIEluY29taW5nIGNhbGwgdnMgc2VydmljZSBzaHV0ZG93biBsb2NrICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRzb2NrX2NhbGxzO1xcdC8qIExpc3Qgb2YgY2FsbHMgb3duZWQgYnkgdGhpcyBzb2NrZXQgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHRvX2JlX2FjY2VwdGVkO1xcdC8qIGNhbGxzIGF3YWl0aW5nIGFjY2VwdGFuY2UgKi9cXG5AQCAtMTg0LDcgKzE4MSw2IEBAIHN0cnVjdCByeHJwY19zb2NrIHtcXG4gXFx0c3RydWN0IHJiX3Jvb3RcXHRcXHRjYWxscztcXHRcXHQvKiBVc2VyIElEIC1cXHUwMDNlIGNhbGwgbWFwcGluZyAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZmxhZ3M7XFxuICNkZWZpbmUgUlhSUENfU09DS19DT05ORUNURURcXHRcXHQwXFx0LyogY29ubmVjdF9zcnggaXMgc2V0ICovXFxuLSNkZWZpbmUgUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0VcXHQxXFx0LyogVXNlciB3YW50cyB0byBtYW5hZ2UgUkVTUE9OU0UgcGFja2V0cyAqL1xcbiBcXHRyd2xvY2tfdFxcdFxcdGNhbGxfbG9jaztcXHQvKiBsb2NrIGZvciBjYWxscyAqL1xcbiBcXHR1MzJcXHRcXHRcXHRtaW5fc2VjX2xldmVsO1xcdC8qIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwgKi9cXG4gI2RlZmluZSBSWFJQQ19TRUNVUklUWV9NQVhcXHRSWFJQQ19TRUNVUklUWV9FTkNSWVBUXFxuQEAgLTI0MSw3ICsyMzcsNiBAQCBzdHJ1Y3QgcnhycGNfc2tiX3ByaXYge1xcbiBcXHRcXHRcXHR1OFxcdFxcdHJlYXNvbjtcXHRcXHQvKiBSZWFzb24gZm9yIGFjayAqL1xcbiBcXHRcXHR9IGFjaztcXG4gXFx0XFx0c3RydWN0IHtcXG4tXFx0XFx0XFx0c3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm47XFx0LyogQ29ubmVjdGlvbiByZWZlcnJlZCB0byAqL1xcbiBcXHRcXHRcXHR1bmlvbiB7XFxuIFxcdFxcdFxcdFxcdHUzMiByeGthZF9ub25jZTtcXG4gXFx0XFx0XFx0fTtcXG5AQCAtMzEwLDEzICszMDUsNiBAQCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkge1xcbiBcXHRib29sICgqdmFsaWRhdGVfY2hhbGxlbmdlKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbi1cXHQvKiBGaWxsIG91dCB0aGUgY21zZyBmb3IgcmVjdm1zZygpIHRvIHBhc3Mgb24gYSBjaGFsbGVuZ2UgdG8gdXNlcnNwYWNlLlxcbi1cXHQgKiBUaGUgc2VjdXJpdHkgY2xhc3MgZ2V0cyB0byBhZGQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cXG4tXFx0ICovXFxuLVxcdGludCAoKmNoYWxsZW5nZV90b19yZWN2bXNnKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXNnaGRyICptc2cpO1xcbi1cXG4gXFx0LyogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICovXFxuIFxcdGludCAoKnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXNnaGRyICptc2cpO1xcbkBAIC01MTYsNiArNTA0LDcgQEAgc3RydWN0IHJ4cnBjX2J1bmRsZSB7XFxuIFxcdHN0cnVjdCByeHJwY19sb2NhbFxcdCpsb2NhbDtcXHRcXHQvKiBSZXByZXNlbnRhdGlvbiBvZiBsb2NhbCBlbmRwb2ludCAqL1xcbiBcXHRzdHJ1Y3QgcnhycGNfcGVlclxcdCpwZWVyO1xcdFxcdC8qIFJlbW90ZSBlbmRwb2ludCAqL1xcbiBcXHRzdHJ1Y3Qga2V5XFx0XFx0KmtleTtcXHRcXHQvKiBTZWN1cml0eSBkZXRhaWxzICovXFxuK1xcdHN0cnVjdCBrZXlcXHRcXHQqYXBwX2RhdGE7XFx0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdHByb2NfbGluaztcXHQvKiBMaW5rIGluIG5ldC1cXHUwMDNlYnVuZGxlX3Byb2NfbGlzdCAqL1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1xcdC8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovXFxuIFxcdHJlZmNvdW50X3RcXHRcXHRyZWY7XFxuQEAgLTY0Miw2ICs2MzEsNyBAQCBlbnVtIHJ4cnBjX2NhbGxfZmxhZyB7XFxuIFxcdFJYUlBDX0NBTExfVFhfTEFTVCxcXHRcXHQvKiBMYXN0IHBhY2tldCBpbiBUeCBidWZmZXIgKGF0IHJ4dHhfdG9wKSAqL1xcbiBcXHRSWFJQQ19DQUxMX1RYX0FMTF9BQ0tFRCxcXHQvKiBMYXN0IHBhY2tldCBoYXMgYmVlbiBoYXJkLWFja2VkICovXFxuIFxcdFJYUlBDX0NBTExfVFhfTk9fTU9SRSxcXHRcXHQvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovXFxuK1xcdFJYUlBDX0NBTExfVFhfRVJST1IsXFx0XFx0LyogVGVybWluYWwgZXJyb3I7IGNhbGwgbmVlZHMgYWJvcnQgKi9cXG4gXFx0UlhSUENfQ0FMTF9TRU5EX1BJTkcsXFx0XFx0LyogQSBwaW5nIHdpbGwgbmVlZCB0byBiZSBzZW50ICovXFxuIFxcdFJYUlBDX0NBTExfUkVUUkFOU19USU1FT1VULFxcdC8qIFJldHJhbnNtaXNzaW9uIGR1ZSB0byB0aW1lb3V0IG9jY3VycmVkICovXFxuIFxcdFJYUlBDX0NBTExfQkVHQU5fUlhfVElNRVIsXFx0LyogV2UgYmVnYW4gdGhlIGV4cGVjdF9yeF9ieSB0aW1lciAqL1xcbkBAIC03MTksNiArNzA5LDcgQEAgc3RydWN0IHJ4cnBjX2NhbGwge1xcbiBcXHRzdHJ1Y3QgcnhycGNfc29jayBfX3JjdVxcdCpzb2NrZXQ7XFx0Lyogc29ja2V0IHJlc3BvbnNpYmxlICovXFxuIFxcdHN0cnVjdCByeHJwY19uZXRcXHQqcnhuZXQ7XFx0XFx0LyogTmV0d29yayBuYW1lc3BhY2UgdG8gd2hpY2ggY2FsbCBiZWxvbmdzICovXFxuIFxcdHN0cnVjdCBrZXlcXHRcXHQqa2V5O1xcdFxcdC8qIFNlY3VyaXR5IGRldGFpbHMgKi9cXG4rXFx0c3RydWN0IGtleVxcdFxcdCphcHBfZGF0YTtcXHQvKiBTZWN1cml0eSByZXNwb25zZSBhcHAgZGF0YSAqL1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgKnNlY3VyaXR5O1xcdC8qIGFwcGxpZWQgc2VjdXJpdHkgbW9kdWxlICovXFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdHVzZXJfbXV0ZXg7XFx0LyogVXNlciBhY2Nlc3MgbXV0ZXggKi9cXG4gXFx0c3RydWN0IHNvY2thZGRyX3J4cnBjXFx0ZGVzdF9zcng7XFx0LyogRGVzdGluYXRpb24gYWRkcmVzcyAqL1xcbkBAIC05MTMsNiArOTA0LDcgQEAgZW51bSByeHJwY19jb21tYW5kIHtcXG4gfTtcXG4gXFxuIHN0cnVjdCByeHJwY19jYWxsX3BhcmFtcyB7XFxuK1xcdHN0cnVjdCBrZXlcXHRcXHQqYXBwX2RhdGE7XFx0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cXG4gXFx0czY0XFx0XFx0XFx0dHhfdG90YWxfbGVuO1xcdC8qIFRvdGFsIFR4IGRhdGEgbGVuZ3RoIChpZiBzZW5kIGRhdGEpICovXFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHR1c2VyX2NhbGxfSUQ7XFx0LyogVXNlcidzIGNhbGwgSUQgKi9cXG4gXFx0c3RydWN0IHtcXG5AQCAtMTM3NSwxMyArMTM2Nyw2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJ4cnBjX25ldCAqcnhycGNfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0cmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgcnhycGNfbmV0X2lkKTtcXG4gfVxcbiBcXG4tLypcXG4tICogb29iLmNcXG4tICovXFxuLWJvb2wgcnhycGNfbm90aWZ5X3NvY2tldF9vb2Ioc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xcbi1cXG4gLypcXG4gICogb3V0cHV0LmNcXG4gICovXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jYWxsX29iamVjdC5jIGIvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcXG5pbmRleCA4MTdlZDlhY2I5MWU2MS4uOWY2MTMwZDkwYzRjYTggMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcXG4rKysgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xcbkBAIC0yMTEsNiArMjExLDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19hbGxvY19jbGllbnRfY2FsbChzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdGNhbGwtXFx1MDAzZWludGVycnVwdGliaWxpdHlcXHQ9IHAtXFx1MDAzZWludGVycnVwdGliaWxpdHk7XFxuIFxcdGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlblxcdD0gcC1cXHUwMDNldHhfdG90YWxfbGVuO1xcbiBcXHRjYWxsLVxcdTAwM2VrZXlcXHRcXHQ9IGtleV9nZXQoY3AtXFx1MDAzZWtleSk7XFxuK1xcdGNhbGwtXFx1MDAzZWFwcF9kYXRhXFx0XFx0PSBrZXlfZ2V0KHAtXFx1MDAzZWFwcF9kYXRhKTtcXG4gXFx0Y2FsbC1cXHUwMDNlcGVlclxcdFxcdD0gcnhycGNfZ2V0X3BlZXIoY3AtXFx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfZ2V0X2NhbGwpO1xcbiBcXHRjYWxsLVxcdTAwM2Vsb2NhbFxcdFxcdD0gcnhycGNfZ2V0X2xvY2FsKGNwLVxcdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfZ2V0X2NhbGwpO1xcbiBcXHRjYWxsLVxcdTAwM2VzZWN1cml0eV9sZXZlbFxcdD0gY3AtXFx1MDAzZXNlY3VyaXR5X2xldmVsO1xcbkBAIC02OTcsNiArNjk4LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZGVzdHJveV9jYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0cnhycGNfcHV0X3BlZXIoY2FsbC1cXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfY2FsbCk7XFxuIFxcdHJ4cnBjX3B1dF9sb2NhbChjYWxsLVxcdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfcHV0X2NhbGwpO1xcbiBcXHRrZXlfcHV0KGNhbGwtXFx1MDAzZWtleSk7XFxuK1xcdGtleV9wdXQoY2FsbC1cXHUwMDNlYXBwX2RhdGEpO1xcbiBcXHRjYWxsX3JjdShcXHUwMDI2Y2FsbC1cXHUwMDNlcmN1LCByeHJwY19yY3VfZnJlZV9jYWxsKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcXG5pbmRleCA2YWZiNTQzNzNlYmJmOS4uNmU0MDIzMTJlMTQ1YzAgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xcbisrKyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcXG5AQCAtNyw2ICs3LDYxIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiYXItaW50ZXJuYWwuaFxcXCJcXG4gXFxuKy8qXFxuKyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXJcXG4rICogbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHJlY3Ztc2dfbGluayBvbiBhIGR1bW15IHF1ZXVlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgX19yeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbit7XFxuK1xcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcXG4rXFx0c3RydWN0IHNvY2sgKnNrO1xcbitcXG4rXFx0aWYgKHRlc3RfYml0KFJYUlBDX0NBTExfUkVMRUFTRUQsIFxcdTAwMjZjYWxsLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0cnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcbitcXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVxcdTAwM2Vzb2NrZXQpO1xcbitcXHRzayA9IFxcdTAwMjZyeC1cXHUwMDNlc2s7XFxuK1xcdGlmIChyeCBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgXFx1MDAzYyBSWFJQQ19DTE9TRSkge1xcbitcXHRcXHRpZiAoY2FsbC1cXHUwMDNlbm90aWZ5X3J4KSB7XFxuK1xcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNhbGwtXFx1MDAzZW5vdGlmeV9sb2NrKTtcXG4rXFx0XFx0XFx0Y2FsbC1cXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVxcdTAwM2V1c2VyX2NhbGxfSUQpO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNhbGwtXFx1MDAzZW5vdGlmeV9sb2NrKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuK1xcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX2xpbmspKSB7XFxuK1xcdFxcdFxcdFxcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xcbitcXHRcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX2xpbmssIFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19xKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX2xvY2spO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcXG4rXFx0XFx0XFx0XFx0X2RlYnVnKFxcXCJjYWxsICVwc1xcXCIsIHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KTtcXG4rXFx0XFx0XFx0XFx0c2stXFx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXJcXG4rICogbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHJlY3Ztc2dfbGluayBvbiBhIGR1bW15IHF1ZXVlLlxcbisgKi9cXG4rdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbit7XFxuK1xcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpKSB7XFxuK1xcdFxcdHJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRfX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XFxuK31cXG4rXFxuIC8qXFxuICAqIFRyYW5zaXRpb24gYSBjYWxsIHRvIHRoZSBjb21wbGV0ZSBzdGF0ZS5cXG4gICovXFxuQEAgLTI1LDcgKzgwLDcgQEAgYm9vbCByeHJwY19zZXRfY2FsbF9jb21wbGV0aW9uKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRyeHJwY19zZXRfY2FsbF9zdGF0ZShjYWxsLCBSWFJQQ19DQUxMX0NPTVBMRVRFKTtcXG4gXFx0dHJhY2VfcnhycGNfY2FsbF9jb21wbGV0ZShjYWxsKTtcXG4gXFx0d2FrZV91cChcXHUwMDI2Y2FsbC1cXHUwMDNld2FpdHEpO1xcbi1cXHRyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xcbitcXHRfX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9jbGllbnQuYyBiL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXFxuaW5kZXggNDg1MTlmMGRlMTg1MzkuLjVjYmZhN2IyMjNlMDExIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXFxuKysrIGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcXG5AQCAtODEsNiArODEsNyBAQCBzdGF0aWMgc3RydWN0IHJ4cnBjX2J1bmRsZSAqcnhycGNfYWxsb2NfYnVuZGxlKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRcXHRidW5kbGUtXFx1MDAzZWxvY2FsXFx0XFx0PSBjYWxsLVxcdTAwM2Vsb2NhbDtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2VwZWVyXFx0XFx0PSByeHJwY19nZXRfcGVlcihjYWxsLVxcdTAwM2VwZWVyLCByeHJwY19wZWVyX2dldF9idW5kbGUpO1xcbiBcXHRcXHRidW5kbGUtXFx1MDAzZWtleVxcdFxcdD0ga2V5X2dldChjYWxsLVxcdTAwM2VrZXkpO1xcbitcXHRcXHRidW5kbGUtXFx1MDAzZWFwcF9kYXRhXFx0PSBrZXlfZ2V0KGNhbGwtXFx1MDAzZWFwcF9kYXRhKTtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2VzZWN1cml0eVxcdD0gY2FsbC1cXHUwMDNlc2VjdXJpdHk7XFxuIFxcdFxcdGJ1bmRsZS1cXHUwMDNlZXhjbHVzaXZlXFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX0VYQ0xVU0lWRSwgXFx1MDAyNmNhbGwtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0YnVuZGxlLVxcdTAwM2V1cGdyYWRlXFx0XFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX1VQR1JBREUsIFxcdTAwMjZjYWxsLVxcdTAwM2VmbGFncyk7XFxuQEAgLTExOCw2ICsxMTksNyBAQCBzdGF0aWMgdm9pZCByeHJwY19mcmVlX2J1bmRsZShzdHJ1Y3QgcnhycGNfYnVuZGxlICpidW5kbGUpXFxuIFxcdHdyaXRlX3VubG9jayhcXHUwMDI2YnVuZGxlLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhuZXQtXFx1MDAzZWNvbm5fbG9jayk7XFxuIFxcdHJ4cnBjX3B1dF9wZWVyKGJ1bmRsZS1cXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfYnVuZGxlKTtcXG4gXFx0a2V5X3B1dChidW5kbGUtXFx1MDAzZWtleSk7XFxuK1xcdGtleV9wdXQoYnVuZGxlLVxcdTAwM2VhcHBfZGF0YSk7XFxuIFxcdGtmcmVlKGJ1bmRsZSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmMgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXFxuaW5kZXggNjExYzc5MGJjNmQwY2UuLjkxNDZiOWQ0YzJhYzUwIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9jb25uX2V2ZW50LmNcXG4rKysgYi9uZXQvcnhycGMvY29ubl9ldmVudC5jXFxuQEAgLTI3OSwxMCArMjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXG4gXFx0c3dpdGNoIChzcC1cXHUwMDNlaGRyLnR5cGUpIHtcXG4gXFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0U6XFxuLVxcdFxcdHJldCA9IGNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VyZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBza2IpO1xcbi1cXHRcXHRzcC1cXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XFxuLVxcdFxcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldHVybiBjb25uLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNlcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTtcXG4gXFxuIFxcdGNhc2UgUlhSUENfUEFDS0VUX1RZUEVfUkVTUE9OU0U6XFxuIFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNvbm4tXFx1MDAzZXN0YXRlX2xvY2spO1xcbkBAIC00MjUsNjYgKzQyMiw2IEBAIHN0YXRpYyB2b2lkIHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcdHJ4cnBjX3F1ZXVlX2Nvbm4oY29ubiwgcnhycGNfY29ubl9xdWV1ZV9yeF93b3JrKTtcXG4gfVxcbiBcXG4tLypcXG4tICogUG9zdCBhIENIQUxMRU5HRSBwYWNrZXQgdG8gdGhlIHNvY2tldCBvZiBvbmUgb2YgYSBjb25uZWN0aW9uJ3MgY2FsbHMgc28gdGhhdFxcbi0gKiBpdCBjYW4gZ2V0IGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2V0LCBwb3NzaWJseSBxdWVyeWluZ1xcbi0gKiB1c2Vyc3BhY2UuXFxuLSAqL1xcbi1zdGF0aWMgYm9vbCByeHJwY19wb3N0X2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihza2IpO1xcbi1cXHRzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCA9IE5VTEw7XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcXG4tXFx0Ym9vbCByZXNwb25kID0gZmFsc2UsIHF1ZXVlZCA9IGZhbHNlO1xcbi1cXG4tXFx0c3AtXFx1MDAzZWNoYWxsLmNvbm4gPVxcbi1cXHRcXHRyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQpO1xcbi1cXG4tXFx0aWYgKCFjb25uLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNlY2hhbGxlbmdlX3RvX3JlY3Ztc2cpIHtcXG4tXFx0XFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xcbi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0fVxcbi1cXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXG4tXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNvbm4tXFx1MDAzZWNoYW5uZWxzKTsgaSsrKSB7XFxuLVxcdFxcdGlmIChjb25uLVxcdTAwM2VjaGFubmVsc1tpXS5jYWxsKSB7XFxuLVxcdFxcdFxcdGNhbGwgPSBjb25uLVxcdTAwM2VjaGFubmVsc1tpXS5jYWxsO1xcbi1cXHRcXHRcXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVxcdTAwM2Vzb2NrZXQpO1xcbi1cXHRcXHRcXHRpZiAoIXJ4KSB7XFxuLVxcdFxcdFxcdFxcdGNhbGwgPSBOVUxMO1xcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0cmVzcG9uZCA9IHRydWU7XFxuLVxcdFxcdFxcdGlmICh0ZXN0X2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXFx1MDAyNnJ4LVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRjYWxsID0gTlVMTDtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIXJlc3BvbmQpIHtcXG4tXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdFxcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XFxuLVxcdFxcdHNwLVxcdTAwM2VjaGFsbC5jb25uID0gTlVMTDtcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoY2FsbClcXG4tXFx0XFx0cXVldWVkID0gcnhycGNfbm90aWZ5X3NvY2tldF9vb2IoY2FsbCwgc2tiKTtcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdGlmIChjYWxsIFxcdTAwMjZcXHUwMDI2ICFxdWV1ZWQpIHtcXG4tXFx0XFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcXG4tXFx0XFx0c3AtXFx1MDAzZWNoYWxsLmNvbm4gPSBOVUxMO1xcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghY2FsbClcXG4tXFx0XFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xcbi1cXHRyZXR1cm4gdHJ1ZTtcXG4tfVxcbi1cXG4gLypcXG4gICogSW5wdXQgYSBjb25uZWN0aW9uLWxldmVsIHBhY2tldC5cXG4gICovXFxuQEAgLTUxMyw3ICs0NTAsOCBAQCBib29sIHJ4cnBjX2lucHV0X2Nvbm5fcGFja2V0KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHR9XFxuIFxcdFxcdGlmICghY29ubi1cXHUwMDNlc2VjdXJpdHktXFx1MDAzZXZhbGlkYXRlX2NoYWxsZW5nZShjb25uLCBza2IpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdFxcdHJldHVybiByeHJwY19wb3N0X2NoYWxsZW5nZShjb25uLCBza2IpO1xcbitcXHRcXHRyeHJwY19wb3N0X3BhY2tldF90b19jb25uKGNvbm4sIHNrYik7XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4gXFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9SRVNQT05TRTpcXG4gXFx0XFx0aWYgKHJ4cnBjX2lzX2Nvbm5fYWJvcnRlZChjb25uKSkge1xcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmNcXG5pbmRleCBhMGFhNzhkODkyODk3Zi4uMTZiYWI3MmU2ZjA3NzcgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2tleS5jXFxuKysrIGIvbmV0L3J4cnBjL2tleS5jXFxuQEAgLTg5MywzICs4OTMsNDAgQEAgc3RhdGljIGxvbmcgcnhycGNfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksXFxuIFxcdF9sZWF2ZShcXFwiID0gJXp1XFxcIiwgc2l6ZSk7XFxuIFxcdHJldHVybiBzaXplO1xcbiB9XFxuK1xcbisvKipcXG4rICogcnhycGNfa2VybmVsX3F1ZXJ5X2tleSAtIFF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSBhbiByeHJwYyBrZXlcXG4rICogQGtleTogVGhlIGtleSB0byBxdWVyeVxcbisgKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIHNlY3VyaXR5IGluZGV4XFxuKyAqIEBfa3JiNV9lbmN0eXBlOiBXaGVyZSB0byByZXR1cm4gdGhlIGtyYjUgZW5jcnlwdGlvbiB0eXBlIGlmIGFwcGxpY2FibGVcXG4rICpcXG4rICogUXVlcnkgYW4gcnhycGMgYXV0aGVudGljYXRpb24ga2V5LCBleHRyYWN0aW5nIHRoZSBzZWN1cml0eSBpbmRleCBmcm9tIHRoZVxcbisgKiBmaXJzdCB0b2tlbiB0aGVyZWluLlxcbisgKi9cXG4rdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCxcXG4rXFx0XFx0XFx0ICAgIHUzMiAqX2tyYjVfZW5jdHlwZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnhycGNfa2V5X3Rva2VuICp0b2tlbjtcXG4rXFxuK1xcdHRva2VuID0ga2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMF07XFxuK1xcdGlmICghdG9rZW4pIHtcXG4rXFx0XFx0Kl9zZWN1cml0eV9pbmRleCA9IDA7XFxuK1xcdFxcdCpfa3JiNV9lbmN0eXBlID0gMDtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQqX3NlY3VyaXR5X2luZGV4ID0gdG9rZW4tXFx1MDAzZXNlY3VyaXR5X2luZGV4O1xcbitcXHRzd2l0Y2ggKHRva2VuLVxcdTAwM2VzZWN1cml0eV9pbmRleCkge1xcbitcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxcbitcXHRcXHQqX2tyYjVfZW5jdHlwZSA9IDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxcbitcXHRcXHQqX2tyYjVfZW5jdHlwZSA9IHRva2VuLVxcdTAwM2VyeGdrLVxcdTAwM2VlbmN0eXBlO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbitcXHRcXHQqX2tyYjVfZW5jdHlwZSA9IDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfa2V5KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL29vYi5jIGIvbmV0L3J4cnBjL29vYi5jXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggYzgwZWUyNDg3ZDA5NDEuLjAwMDAwMDAwMDAwMDAwXFxuLS0tIGEvbmV0L3J4cnBjL29vYi5jXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDM4NyArMCwwIEBAXFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuLS8qIE91dCBvZiBiYW5kIG1lc3NhZ2UgaGFuZGxpbmcgKGUuZy4gY2hhbGxlbmdlLXJlc3BvbnNlKVxcbi0gKlxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjUgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxcbi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXFxuLSAqL1xcbi1cXG4tI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbi1cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbmV0L2FmX3J4cnBjLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcXCJhci1pbnRlcm5hbC5oXFxcIlxcbi1cXG4tZW51bSByeHJwY19vb2JfY29tbWFuZCB7XFxuLVxcdFJYUlBDX09PQl9DTURfVU5TRVQsXFxuLVxcdFJYUlBDX09PQl9DTURfUkVTUE9ORCxcXG4tfSBfX21vZGUoYnl0ZSk7XFxuLVxcbi1zdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyB7XFxuLVxcdHU2NFxcdFxcdFxcdG9vYl9pZDtcXHRcXHQvKiBJRCBudW1iZXIgb2YgbWVzc2FnZSBpZiByZXBseSAqL1xcbi1cXHRzMzJcXHRcXHRcXHRhYm9ydF9jb2RlO1xcbi1cXHRlbnVtIHJ4cnBjX29vYl9jb21tYW5kXFx0Y29tbWFuZDtcXG4tXFx0Ym9vbFxcdFxcdFxcdGhhdmVfb29iX2lkOjE7XFxuLX07XFxuLVxcbi0vKlxcbi0gKiBQb3N0IGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlXFxuLSAqIGFzc29jaWF0ZWQgd2l0aCBhIHJlZmVyZW5jZSBjYWxsLlxcbi0gKi9cXG4tYm9vbCByeHJwY19ub3RpZnlfc29ja2V0X29vYihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKHNrYik7XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcXG4tXFx0c3RydWN0IHNvY2sgKnNrO1xcbi1cXHRib29sIHF1ZXVlZCA9IGZhbHNlO1xcbi1cXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXG4tXFx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cXHUwMDNlc29ja2V0KTtcXG4tXFx0aWYgKHJ4KSB7XFxuLVxcdFxcdHNrID0gXFx1MDAyNnJ4LVxcdTAwM2VzaztcXG4tXFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuLVxcbi1cXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlIFxcdTAwM2MgUlhSUENfQ0xPU0UpIHtcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2Vza2JfbXN0YW1wX25zID0gcngtXFx1MDAzZW9vYl9pZF9jb3VudGVyKys7XFxuLVxcdFxcdFxcdHJ4cnBjX2dldF9za2Ioc2tiLCByeHJwY19za2JfZ2V0X3Bvc3Rfb29iKTtcXG4tXFx0XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEsIHNrYik7XFxuLVxcdFxcdFxcdHF1ZXVlZCA9IHRydWU7XFxuLVxcbi1cXHRcXHRcXHR0cmFjZV9yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwtXFx1MDAzZWRlYnVnX2lkLCBzcC1cXHUwMDNlaGRyLnNlcmlhbCk7XFxuLVxcdFxcdFxcdGlmIChyeC1cXHUwMDNlYXBwX29wcylcXG4tXFx0XFx0XFx0XFx0cngtXFx1MDAzZWFwcF9vcHMtXFx1MDAzZW5vdGlmeV9vb2Ioc2ssIHNrYik7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuLVxcdFxcdGlmIChxdWV1ZWQgXFx1MDAyNlxcdTAwMjYgIXJ4LVxcdTAwM2VhcHBfb3BzIFxcdTAwMjZcXHUwMDI2ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXFxuLVxcdFxcdFxcdHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdHJldHVybiBxdWV1ZWQ7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIExvY2F0ZSB0aGUgT09CIG1lc3NhZ2UgdG8gcmVzcG9uZCB0byBieSBpdHMgSUQuXFxuLSAqL1xcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnJ4cnBjX2ZpbmRfcGVuZGluZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCB1NjQgb29iX2lkKVxcbi17XFxuLVxcdHN0cnVjdCByYl9ub2RlICpwO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi1cXG4tXFx0cCA9IHJ4LVxcdTAwM2VwZW5kaW5nX29vYnEucmJfbm9kZTtcXG4tXFx0d2hpbGUgKHApIHtcXG4tXFx0XFx0c2tiID0gcmJfZW50cnkocCwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSk7XFxuLVxcbi1cXHRcXHRpZiAob29iX2lkIFxcdTAwM2Mgc2tiLVxcdTAwM2Vza2JfbXN0YW1wX25zKVxcbi1cXHRcXHRcXHRwID0gcC1cXHUwMDNlcmJfbGVmdDtcXG4tXFx0XFx0ZWxzZSBpZiAob29iX2lkIFxcdTAwM2Ugc2tiLVxcdTAwM2Vza2JfbXN0YW1wX25zKVxcbi1cXHRcXHRcXHRwID0gcC1cXHUwMDNlcmJfcmlnaHQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0cmV0dXJuIHNrYjtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIE5VTEw7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIEFkZCBhbiBPT0IgbWVzc2FnZSBpbnRvIHRoZSBwZW5kaW5nLXJlc3BvbnNlIHNldC4gIFdlIGFsd2F5cyBhc3NpZ24gdGhlIG5leHRcXG4tICogdmFsdWUgZnJvbSBhIDY0LWJpdCBjb3VudGVyIHRvIHRoZSBvb2JfaWQsIHNvIGp1c3QgYXNzdW1lIHdlJ3JlIGFsd2F5cyBnb2luZ1xcbi0gKiB0byBiZSBvbiB0aGUgcmlnaHQtaGFuZCBlZGdlIG9mIHRoZSB0cmVlIGFuZCB0aGF0IHRoZSBjb3VudGVyIHdvbid0IHdyYXAuXFxuLSAqIFRoZSB0cmVlIGlzIGFsc28gZ2l2ZW4gYSByZWYgdG8gdGhlIG1lc3NhZ2UuXFxuLSAqL1xcbi12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLXtcXG4tXFx0c3RydWN0IHJiX25vZGUgKipwcCA9IFxcdTAwMjZyeC1cXHUwMDNlcGVuZGluZ19vb2JxLnJiX25vZGUsICpwID0gTlVMTDtcXG4tXFxuLVxcdHdoaWxlICgqcHApIHtcXG4tXFx0XFx0cCA9ICpwcDtcXG4tXFx0XFx0cHAgPSBcXHUwMDI2KCpwcCktXFx1MDAzZXJiX3JpZ2h0O1xcbi1cXHR9XFxuLVxcbi1cXHRyYl9saW5rX25vZGUoXFx1MDAyNnNrYi1cXHUwMDNlcmJub2RlLCBwLCBwcCk7XFxuLVxcdHJiX2luc2VydF9jb2xvcihcXHUwMDI2c2tiLVxcdTAwM2VyYm5vZGUsIFxcdTAwMjZyeC1cXHUwMDNlcGVuZGluZ19vb2JxKTtcXG4tfVxcbi1cXG4tLypcXG4tICogRXh0cmFjdCBjb250cm9sIG1lc3NhZ2VzIGZyb20gdGhlIHNlbmRtc2coKSBjb250cm9sIGJ1ZmZlci5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19vb2JfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19vb2JfcGFyYW1zICpwKVxcbi17XFxuLVxcdHN0cnVjdCBjbXNnaGRyICpjbXNnO1xcbi1cXHRpbnQgbGVuO1xcbi1cXG4tXFx0aWYgKG1zZy1cXHUwMDNlbXNnX2NvbnRyb2xsZW4gPT0gMClcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRmb3JfZWFjaF9jbXNnaGRyKGNtc2csIG1zZykge1xcbi1cXHRcXHRpZiAoIUNNU0dfT0sobXNnLCBjbXNnKSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRcXHRsZW4gPSBjbXNnLVxcdTAwM2VjbXNnX2xlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcik7XFxuLVxcdFxcdF9kZWJ1ZyhcXFwiQ01TRyAlZCwgJWQsICVkXFxcIixcXG4tXFx0XFx0ICAgICAgIGNtc2ctXFx1MDAzZWNtc2dfbGV2ZWwsIGNtc2ctXFx1MDAzZWNtc2dfdHlwZSwgbGVuKTtcXG4tXFxuLVxcdFxcdGlmIChjbXNnLVxcdTAwM2VjbXNnX2xldmVsICE9IFNPTF9SWFJQQylcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRzd2l0Y2ggKGNtc2ctXFx1MDAzZWNtc2dfdHlwZSkge1xcbi1cXHRcXHRjYXNlIFJYUlBDX09PQl9JRDpcXG4tXFx0XFx0XFx0aWYgKGxlbiAhPSBzaXplb2YocC1cXHUwMDNlb29iX2lkKSB8fCBwLVxcdTAwM2VoYXZlX29vYl9pZClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdG1lbWNweShcXHUwMDI2cC1cXHUwMDNlb29iX2lkLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZihwLVxcdTAwM2Vvb2JfaWQpKTtcXG4tXFx0XFx0XFx0cC1cXHUwMDNlaGF2ZV9vb2JfaWQgPSB0cnVlO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBSWFJQQ19SRVNQT05EOlxcbi1cXHRcXHRcXHRpZiAocC1cXHUwMDNlY29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1VOU0VUKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0XFx0cC1cXHUwMDNlY29tbWFuZCA9IFJYUlBDX09PQl9DTURfUkVTUE9ORDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgUlhSUENfQUJPUlQ6XFxuLVxcdFxcdFxcdGlmIChsZW4gIT0gc2l6ZW9mKHAtXFx1MDAzZWFib3J0X2NvZGUpIHx8IHAtXFx1MDAzZWFib3J0X2NvZGUpXFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnAtXFx1MDAzZWFib3J0X2NvZGUsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHAtXFx1MDAzZWFib3J0X2NvZGUpKTtcXG4tXFx0XFx0XFx0aWYgKHAtXFx1MDAzZWFib3J0X2NvZGUgPT0gMClcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBOlxcbi1cXHRcXHRcXHRpZiAocC1cXHUwMDNlY29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQpXFxuLVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4tXFx0c3dpdGNoIChwLVxcdTAwM2Vjb21tYW5kKSB7XFxuLVxcdGNhc2UgUlhSUENfT09CX0NNRF9SRVNQT05EOlxcbi1cXHRcXHRpZiAoIXAtXFx1MDAzZWhhdmVfb29iX2lkKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVCQURTTFQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIEFsbG93IHVzZXJzcGFjZSB0byByZXNwb25kIHRvIGFuIE9PQiB1c2luZyBzZW5kbXNnKCkuXFxuLSAqL1xcbi1zdGF0aWMgaW50IHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgKnAsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBtc2doZHIgKm1zZylcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubjtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHNrYiA9IHJ4cnBjX2ZpbmRfcGVuZGluZ19vb2IocngsIHAtXFx1MDAzZW9vYl9pZCk7XFxuLVxcdGlmIChza2IpXFxuLVxcdFxcdHJiX2VyYXNlKFxcdTAwMjZza2ItXFx1MDAzZXJibm9kZSwgXFx1MDAyNnJ4LVxcdTAwM2VwZW5kaW5nX29vYnEpO1xcbi1cXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuLVxcdGlmICghc2tiKVxcbi1cXHRcXHRyZXR1cm4gLUVCQURTTFQ7XFxuLVxcbi1cXHRzcCA9IHJ4cnBjX3NrYihza2IpO1xcbi1cXG4tXFx0c3dpdGNoIChwLVxcdTAwM2Vjb21tYW5kKSB7XFxuLVxcdGNhc2UgUlhSUENfT09CX0NNRF9SRVNQT05EOlxcbi1cXHRcXHRyZXQgPSAtRVBST1RPO1xcbi1cXHRcXHRpZiAoc2tiLVxcdTAwM2VtYXJrICE9IFJYUlBDX09PQl9DSEFMTEVOR0UpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjb25uID0gc3AtXFx1MDAzZWNoYWxsLmNvbm47XFxuLVxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbi1cXHRcXHRpZiAoIWNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0aWYgKHAtXFx1MDAzZWFib3J0X2NvZGUpIHtcXG4tXFx0XFx0XFx0cnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBwLVxcdTAwM2VhYm9ydF9jb2RlLCAtRUNPTk5BQk9SVEVELFxcbi1cXHRcXHRcXHRcXHRcXHQgcnhycGNfYWJvcnRfcmVzcG9uc2Vfc2VuZG1zZyk7XFxuLVxcdFxcdFxcdHJldCA9IDA7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHJldCA9IGNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHNrYiwgbXNnKTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFxuLVxcdHN3aXRjaCAoc2tiLVxcdTAwM2VtYXJrKSB7XFxuLVxcdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcXG4tXFx0XFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXFx1MDAzZWNoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLVxcbi0vKlxcbi0gKiBTZW5kIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2Ugb3IgcmVzcG9uZCB0byBhIHJlY2VpdmVkIG91dC1vZi1iYW5kIG1lc3NhZ2UuXFxuLSAqIC0gY2FsbGVyIGdpdmVzIHVzIHRoZSBzb2NrZXQgbG9ja1xcbi0gKiAtIHRoZSBzb2NrZXQgbWF5IGJlIGVpdGhlciBhIGNsaWVudCBzb2NrZXQgb3IgYSBzZXJ2ZXIgc29ja2V0XFxuLSAqL1xcbi1pbnQgcnhycGNfc2VuZG1zZ19vb2Ioc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX29vYl9wYXJhbXMgcCA9IHt9O1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0X2VudGVyKFxcXCJcXFwiKTtcXG4tXFxuLVxcdHJldCA9IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2cobXNnLCBcXHUwMDI2cCk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVycm9yX3JlbGVhc2Vfc29jaztcXG4tXFxuLVxcdGlmIChwLmhhdmVfb29iX2lkKVxcbi1cXHRcXHRyZXR1cm4gcnhycGNfcmVzcG9uZF90b19vb2IocngsIFxcdTAwMjZwLCBtc2cpO1xcbi1cXG4tXFx0cmVsZWFzZV9zb2NrKFxcdTAwMjZyeC1cXHUwMDNlc2spO1xcbi1cXG4tXFx0c3dpdGNoIChwLmNvbW1hbmQpIHtcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFxuLVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi1cXG4tZXJyb3JfcmVsZWFzZV9zb2NrOlxcbi1cXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLS8qKlxcbi0gKiByeHJwY19rZXJuZWxfcXVlcnlfb29iIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZVxcbi0gKiBAb29iOiBUaGUgbWVzc2FnZSB0byBxdWVyeVxcbi0gKiBAX3BlZXI6IFdoZXJlIHRvIHJldHVybiB0aGUgcGVlciByZWNvcmRcXG4tICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmRcXG4tICpcXG4tICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2UuICBUaGUgc291cmNlIHBlZXJcXG4tICogcGFyYW1ldGVycyBhcmUgcmV0dXJuZWQgdGhyb3VnaCB0aGUgYXJndW1lbnQgbGlzdCBhbmQgdGhlIG1lc3NhZ2UgdHlwZSBpc1xcbi0gKiByZXR1cm5lZC5cXG4tICpcXG4tICogUmV0dXJuOlxcbi0gKiAqICVSWFJQQ19PT0JfQ0hBTExFTkdFIC0gQ2hhbGxlbmdlIHdhbnRpbmcgYSByZXNwb25zZS5cXG4tICovXFxuLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTtcXG4tXFx0ZW51bSByeHJwY19vb2JfdHlwZSB0eXBlID0gb29iLVxcdTAwM2VtYXJrO1xcbi1cXG4tXFx0c3dpdGNoICh0eXBlKSB7XFxuLVxcdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcXG4tXFx0XFx0Kl9wZWVyXFx0XFx0PSBzcC1cXHUwMDNlY2hhbGwuY29ubi1cXHUwMDNlcGVlcjtcXG4tXFx0XFx0Kl9wZWVyX2FwcGRhdGFcXHQ9IHNwLVxcdTAwM2VjaGFsbC5jb25uLVxcdTAwM2VwZWVyLVxcdTAwM2VhcHBfZGF0YTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4tXFx0XFx0Kl9wZWVyXFx0XFx0PSBOVUxMO1xcbi1cXHRcXHQqX3BlZXJfYXBwZGF0YVxcdD0gMDtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiB0eXBlO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X29vYik7XFxuLVxcbi0vKipcXG4tICogcnhycGNfa2VybmVsX2RlcXVldWVfb29iIC0gRGVxdWV1ZSBhbmQgcmV0dXJuIHRoZSBmcm9udCBPT0IgbWVzc2FnZVxcbi0gKiBAc29jazogVGhlIHNvY2tldCB0byBxdWVyeVxcbi0gKiBAX3R5cGU6IFdoZXJlIHRvIHJldHVybiB0aGUgbWVzc2FnZSB0eXBlXFxuLSAqXFxuLSAqIERlcXVldWUgdGhlIGZyb250IE9PQiBtZXNzYWdlLCBpZiB0aGVyZSBpcyBvbmUsIGFuZCByZXR1cm4gaXQgYW5kXFxuLSAqIGl0cyB0eXBlLlxcbi0gKlxcbi0gKiBSZXR1cm46IFRoZSBza19idWZmIHJlcHJlc2VudGluZyB0aGUgT09CIG1lc3NhZ2Ugb3IgJU5VTEwgaWYgdGhlIHF1ZXVlIHdhc1xcbi0gKiBlbXB0eS5cXG4tICovXFxuLXN0cnVjdCBza19idWZmICpyeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2Ioc3RydWN0IHNvY2tldCAqc29jayxcXG4tXFx0XFx0XFx0XFx0XFx0IGVudW0gcnhycGNfb29iX3R5cGUgKl90eXBlKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXFx1MDAzZXNrKTtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKm9vYjtcXG4tXFxuLVxcdG9vYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19vb2JxKTtcXG4tXFx0aWYgKG9vYilcXG4tXFx0XFx0Kl90eXBlID0gb29iLVxcdTAwM2VtYXJrO1xcbi1cXHRyZXR1cm4gb29iO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX2RlcXVldWVfb29iKTtcXG4tXFxuLS8qKlxcbi0gKiByeHJwY19rZXJuZWxfZnJlZV9vb2IgLSBGcmVlIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2VcXG4tICogQG9vYjogVGhlIE9PQiBtZXNzYWdlIHRvIGZyZWVcXG4tICpcXG4tICogRnJlZSBhbiBPT0IgbWVzc2FnZSBhbG9uZyB3aXRoIGFueSByZXNvdXJjZXMgaXQgaG9sZHMuXFxuLSAqL1xcbi12b2lkIHJ4cnBjX2tlcm5lbF9mcmVlX29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iKVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTtcXG4tXFxuLVxcdHN3aXRjaCAob29iLVxcdTAwM2VtYXJrKSB7XFxuLVxcdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcXG4tXFx0XFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oc3AtXFx1MDAzZWNoYWxsLmNvbm4sIHJ4cnBjX2Nvbm5fcHV0X29vYik7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHRyeHJwY19mcmVlX3NrYihvb2IsIHJ4cnBjX3NrYl9wdXRfcHVyZ2Vfb29iKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9mcmVlX29vYik7XFxuLVxcbi0vKipcXG4tICogcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSAtIFF1ZXJ5IHRoZSBwYXJhbWV0ZXJzIG9mIGEgY2hhbGxlbmdlXFxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gcXVlcnlcXG4tICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkXFxuLSAqIEBfcGVlcl9hcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSBhdHRhY2hlZCB0byBhIHBlZXIgcmVjb3JkXFxuLSAqIEBfc2VydmljZV9pZDogV2hlcmUgdG8gcmV0dXJuIHRoZSBjb25uZWN0aW9uIHNlcnZpY2UgSURcXG4tICogQF9zZWN1cml0eV9pbmRleDogV2hlcmUgdG8gcmV0dXJuIHRoZSBjb25uZWN0aW9uIHNlY3VyaXR5IGluZGV4XFxuLSAqXFxuLSAqIEV4dHJhY3QgdXNlZnVsIHBhcmFtZXRlcnMgZnJvbSBhIENIQUxMRU5HRSBtZXNzYWdlLlxcbi0gKi9cXG4tdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IHJ4cnBjX3BlZXIgKipfcGVlcixcXG4tXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhLFxcbi1cXHRcXHRcXHRcXHQgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xcbi1cXG4tXFx0Kl9wZWVyXFx0XFx0PSBzcC1cXHUwMDNlY2hhbGwuY29ubi1cXHUwMDNlcGVlcjtcXG4tXFx0Kl9wZWVyX2FwcGRhdGFcXHQ9IHNwLVxcdTAwM2VjaGFsbC5jb25uLVxcdTAwM2VwZWVyLVxcdTAwM2VhcHBfZGF0YTtcXG4tXFx0Kl9zZXJ2aWNlX2lkXFx0PSBzcC1cXHUwMDNlaGRyLnNlcnZpY2VJZDtcXG4tXFx0Kl9zZWN1cml0eV9pbmRleCA9IHNwLVxcdTAwM2VoZHIuc2VjdXJpdHlJbmRleDtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UpO1xcbi1cXG4tLyoqXFxuLSAqIHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlIC0gQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byByZWplY3QgYSBjaGFsbGVuZ2VcXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBiZSByZWplY3RlZFxcbi0gKiBAYWJvcnRfY29kZTogVGhlIGFib3J0IGNvZGUgdG8gc3RpY2sgaW50byB0aGUgQUJPUlQgcGFja2V0XFxuLSAqIEBlcnJvcjogTG9jYWwgZXJyb3IgdmFsdWVcXG4tICogQHdoeTogSW5kaWNhdGlvbiBhcyB0byB3aHkuXFxuLSAqXFxuLSAqIEFsbG93IGEga2VybmVsIHNlcnZpY2UgdG8gcmVqZWN0IGEgY2hhbGxlbmdlIGJ5IGFib3J0aW5nIHRoZSBjb25uZWN0aW9uIGlmXFxuLSAqIGl0J3Mgc3RpbGwgaW4gYW4gYWJvcnRhYmxlIHN0YXRlLiAgVGhlIGVycm9yIGlzIHJldHVybmVkIHNvIHRoaXMgZnVuY3Rpb25cXG4tICogY2FuIGJlIHVzZWQgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQuXFxuLSAqXFxuLSAqIFJldHVybjogVGhlICVlcnJvciBwYXJhbWV0ZXIuXFxuLSAqL1xcbi1pbnQgcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSwgdTMyIGFib3J0X2NvZGUsXFxuLVxcdFxcdFxcdFxcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xcbi1cXG4tXFx0X2VudGVyKFxcXCJ7JXh9LCVkLCVkLCV1XFxcIiwgc3AtXFx1MDAzZWhkci5zZXJpYWwsIGFib3J0X2NvZGUsIGVycm9yLCB3aHkpO1xcbi1cXG4tXFx0cnhycGNfYWJvcnRfY29ubihzcC1cXHUwMDNlY2hhbGwuY29ubiwgTlVMTCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7XFxuLVxcdHJldHVybiBlcnJvcjtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9yZWplY3RfY2hhbGxlbmdlKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3JlY3Ztc2cuYyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcXG5pbmRleCBlZmNiYTRiMmU3NGYwYy4uNWI4YzdmNTczYjdmNWEgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL3JlY3Ztc2cuY1xcbisrKyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcXG5AQCAtMTcsMTMgKzE3LDEyIEBAXFxuICNpbmNsdWRlIFxcXCJhci1pbnRlcm5hbC5oXFxcIlxcbiBcXG4gLypcXG4tICogUG9zdCBhIGNhbGwgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlLiAgRnVydGhlclxcbi0gKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuXFxuKyAqIFJlcXVldWUgYSBjYWxsIGZvciByZWN2bXNnKCkgdG8gcGljayB1cC5cXG4gICovXFxuLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4rc3RhdGljIHZvaWQgcnhycGNfcmVxdWV1ZV9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbiB7XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcXG4tXFx0c3RydWN0IHNvY2sgKnNrO1xcbitcXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVxcdTAwM2Vzayk7XFxuK1xcdHN0cnVjdCBzb2NrICpzayA9IFxcdTAwMjZyeC1cXHUwMDNlc2s7XFxuIFxcbiBcXHRfZW50ZXIoXFxcIiVkXFxcIiwgY2FsbC1cXHUwMDNlZGVidWdfaWQpO1xcbiBcXG5AQCAtMzIsMzEgKzMxLDE4IEBAIHZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcbi1cXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVxcdTAwM2Vzb2NrZXQpO1xcbi1cXHRzayA9IFxcdTAwMjZyeC1cXHUwMDNlc2s7XFxuLVxcdGlmIChyeCBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgXFx1MDAzYyBSWFJQQ19DTE9TRSkge1xcbi1cXHRcXHRpZiAoY2FsbC1cXHUwMDNlbm90aWZ5X3J4KSB7XFxuLVxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmNhbGwtXFx1MDAzZW5vdGlmeV9sb2NrKTtcXG4tXFx0XFx0XFx0Y2FsbC1cXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVxcdTAwM2V1c2VyX2NhbGxfSUQpO1xcbi1cXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmNhbGwtXFx1MDAzZW5vdGlmeV9sb2NrKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuLVxcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX2xpbmspKSB7XFxuLVxcdFxcdFxcdFxcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xcbi1cXHRcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX2xpbmssIFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19xKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX2xvY2spO1xcbitcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19sb2NrKTtcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluaykpIHtcXG4rXFx0XFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluaywgXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xcbi1cXHRcXHRcXHRcXHRfZGVidWcoXFxcImNhbGwgJXBzXFxcIiwgc2stXFx1MDAzZXNrX2RhdGFfcmVhZHkpO1xcbi1cXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbitcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xcbitcXHRcXHRfZGVidWcoXFxcImNhbGwgJXBzXFxcIiwgc2stXFx1MDAzZXNrX2RhdGFfcmVhZHkpO1xcbitcXHRcXHRzay1cXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XFxuIFxcdH1cXG4gXFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRfbGVhdmUoXFxcIlxcXCIpO1xcbiB9XFxuIFxcbkBAIC0yMTUsNjEgKzIwMSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ191c2VyX2lkKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuIFxcdH1cXG4gfVxcbiBcXG4tLypcXG4tICogRGVhbCB3aXRoIGEgQ0hBTExFTkdFIHBhY2tldC5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19jaGFsbGVuZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xcbi1cXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiA9IHNwLVxcdTAwM2VjaGFsbC5jb25uO1xcbi1cXG4tXFx0cmV0dXJuIGNvbm4tXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VjaGFsbGVuZ2VfdG9fcmVjdm1zZyhjb25uLCBjaGFsbGVuZ2UsIG1zZyk7XFxuLX1cXG4tXFxuLS8qXFxuLSAqIFByb2Nlc3MgT09CIHBhY2tldHMuICBDYWxsZWQgd2l0aCB0aGUgc29ja2V0IGxvY2tlZC5cXG4tICovXFxuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19vb2Ioc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncylcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVxcdTAwM2Vzayk7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLVxcdGJvb2wgbmVlZF9yZXNwb25zZSA9IGZhbHNlO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0c2tiID0gc2tiX3BlZWsoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpO1xcbi1cXHRpZiAoIXNrYilcXG4tXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuLVxcdHJ4cnBjX3NlZV9za2Ioc2tiLCByeHJwY19za2Jfc2VlX3JlY3Ztc2cpO1xcbi1cXG4tXFx0cmV0ID0gcHV0X2Ntc2cobXNnLCBTT0xfUlhSUEMsIFJYUlBDX09PQl9JRCwgc2l6ZW9mKHU2NCksXFxuLVxcdFxcdCAgICAgICBcXHUwMDI2c2tiLVxcdTAwM2Vza2JfbXN0YW1wX25zKTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcbi1cXHRzd2l0Y2ggKChlbnVtIHJ4cnBjX29vYl90eXBlKXNrYi1cXHUwMDNlbWFyaykge1xcbi1cXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XFxuLVxcdFxcdG5lZWRfcmVzcG9uc2UgPSB0cnVlO1xcbi1cXHRcXHRyZXQgPSByeHJwY19yZWN2bXNnX2NoYWxsZW5nZShzb2NrLCBtc2csIHNrYiwgZmxhZ3MpO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJyZWN2bXNnKCkgY2FuJ3QgcHJvY2VzcyB1bmtub3duIE9PQiB0eXBlICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIHNrYi1cXHUwMDNlbWFyayk7XFxuLVxcdFxcdHJldCA9IC1FSU87XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIShmbGFncyBcXHUwMDI2IE1TR19QRUVLKSkge1xcbi1cXHRcXHRza2JfdW5saW5rKHNrYiwgXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpO1xcbi1cXHRcXHRpZiAobmVlZF9yZXNwb25zZSlcXG4tXFx0XFx0XFx0cnhycGNfYWRkX3BlbmRpbmdfb29iKHJ4LCBza2IpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIC8qXFxuICAqIERlbGl2ZXIgbWVzc2FnZXMgdG8gYSBjYWxsLiAgVGhpcyBrZWVwcyBwcm9jZXNzaW5nIHBhY2tldHMgdW50aWwgdGhlIGJ1ZmZlclxcbiAgKiBpcyBmaWxsZWQgYW5kIHdlIGZpbmQgZWl0aGVyIG1vcmUgREFUQSAocmV0dXJucyAwKSBvciB0aGUgZW5kIG9mIHRoZSBEQVRBXFxuQEAgLTI4MSw3ICsyMTIsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4gXFx0XFx0XFx0ICAgICAgc2l6ZV90IGxlbiwgaW50IGZsYWdzLCBzaXplX3QgKl9vZmZzZXQpXFxuIHtcXG4gXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXHRyeHJwY19zZXFfdCBzZXEgPSAwO1xcbiBcXHRzaXplX3QgcmVtYWluO1xcbkBAIC0zNzYsMTMgKzMwNiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXG4gXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBNU0dfUEVFSykpXFxuIFxcdFxcdFxcdHJ4cnBjX3JvdGF0ZV9yeF93aW5kb3coY2FsbCk7XFxuLVxcbi1cXHRcXHRpZiAoIXJ4LVxcdTAwM2VhcHBfb3BzIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xcbi1cXHRcXHRcXHR0cmFjZV9yeHJwY19yZWN2ZGF0YShjYWxsLCByeHJwY19yZWN2bXNnX29vYnEsIHNlcSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICByeF9wa3Rfb2Zmc2V0LCByeF9wa3RfbGVuLCByZXQpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBvdXQ6XFxuQEAgLTQxOSw3ICszNDIsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcbiBcXHR0cmFjZV9yeHJwY19yZWN2bXNnKDAsIHJ4cnBjX3JlY3Ztc2dfZW50ZXIsIDApO1xcbiBcXG4tXFx0aWYgKGZsYWdzIFxcdTAwMjYgKE1TR19PT0IgfCBNU0dfVFJVTkMpKVxcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNU0dfVFJVTkMpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhcXHUwMDI2cngtXFx1MDAzZXNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuQEAgLTQzMCwxNCArMzUzLDEyIEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0LyogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIGEgY2xpZW50IHNvY2tldCBoYXMgbm8gb3V0c3RhbmRpbmcgY2FsbHMgKi9cXG4gXFx0aWYgKFJCX0VNUFRZX1JPT1QoXFx1MDAyNnJ4LVxcdTAwM2VjYWxscykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGxpc3RfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICByeC1cXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfU0VSVkVSX0xJU1RFTklORykge1xcbiBcXHRcXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuIFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSkpIHtcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpKSB7XFxuIFxcdFxcdHJldCA9IC1FV09VTERCTE9DSztcXG4gXFx0XFx0aWYgKHRpbWVvID09IDApIHtcXG4gXFx0XFx0XFx0Y2FsbCA9IE5VTEw7XFxuQEAgLTQ1Myw4ICszNzQsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gd2FpdF9lcnJvcjtcXG4gXFxuLVxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19xKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xcbitcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSkpIHtcXG4gXFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIHdhaXRfaW50ZXJydXB0ZWQ7XFxuIFxcdFxcdFxcdHRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ193YWl0LCAwKTtcXG5AQCAtNDY0LDE1ICszODQsNiBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBEZWFsIHdpdGggT09CIG1lc3NhZ2VzIGJlZm9yZSB3ZSBjb25zaWRlciBnZXR0aW5nIG5vcm1hbCBkYXRhLiAqL1xcbi1cXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfb29icSkpIHtcXG4tXFx0XFx0cmV0ID0gcnhycGNfcmVjdm1zZ19vb2Ioc29jaywgbXNnLCBmbGFncyk7XFxuLVxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG4tXFx0XFx0aWYgKHJldCA9PSAtRUFHQUlOKVxcbi1cXHRcXHRcXHRnb3RvIHRyeV9hZ2FpbjtcXG4tXFx0XFx0Z290byBlcnJvcl90cmFjZTtcXG4tXFx0fVxcbi1cXG4gXFx0LyogRmluZCB0aGUgbmV4dCBjYWxsIGFuZCBkZXF1ZXVlIGl0IGlmIHdlJ3JlIG5vdCBqdXN0IHBlZWtpbmcuICBJZiB3ZVxcbiBcXHQgKiBkbyBkZXF1ZXVlIGl0LCB0aGF0IGNvbWVzIHdpdGggYSByZWYgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gcmVsZWFzZS5cXG4gXFx0ICogV2UgYWxzbyB3YW50IHRvIHdlZWQgb3V0IGNhbGxzIHRoYXQgZ290IHJlcXVldWVkIHdoaWxzdCB3ZSB3ZXJlXFxuQEAgLTQ4Myw4ICszOTQsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdGNhbGwgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCByeHJwY19jYWxsLCByZWN2bXNnX2xpbmspO1xcbiBcXG4gXFx0aWYgKCFyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfcXVldWUpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX29vYnEpKSB7XFxuK1xcdCAgICBza2JfcXVldWVfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfcXVldWUpKSB7XFxuIFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluayk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuIFxcdFxcdHJlbGVhc2Vfc29jayhcXHUwMDI2cngtXFx1MDAzZXNrKTtcXG5AQCAtNTYxLDcgKzQ3MSw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFxuIFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTVNHX1BFRUspIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZjYWxsLVxcdTAwM2VyZWN2bXNnX3F1ZXVlKSlcXG4tXFx0XFx0cnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcXG4rXFx0XFx0cnhycGNfcmVxdWV1ZV9jYWxsKHNvY2ssIGNhbGwpO1xcbiBcXHRnb3RvIG5vdF95ZXRfY29tcGxldGU7XFxuIFxcbiBjYWxsX2ZhaWxlZDpcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcXG5pbmRleCA3N2E2N2FjZTFkMjQ4MS4uYjllZmVlYzE0NWRkMTcgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL3J4Z2suY1xcbisrKyBiL25ldC9yeHJwYy9yeGdrLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXktdHlwZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNja2V5cy91c2VyLXR5cGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImFyLWludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJyeGdrX2NvbW1vbi5oXFxcIlxcbiBcXG5AQCAtNzM0LDM3ICs3MzUsNiBAQCBzdGF0aWMgYm9vbCByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UgLSBRdWVyeSBSeEdLLXNwZWNpZmljIGNoYWxsZW5nZSBwYXJhbWV0ZXJzXFxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgcGFja2V0IHRvIHF1ZXJ5XFxuLSAqXFxuLSAqIFJldHVybjogVGhlIEtlcmJlcm9zIDUgZW5jb2RpbmcgdHlwZSBmb3IgdGhlIGNoYWxsZW5nZWQgY29ubmVjdGlvbi5cXG4tICovXFxuLXUzMiByeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XFxuLVxcbi1cXHRyZXR1cm4gc3AtXFx1MDAzZWNoYWxsLmNvbm4tXFx1MDAzZXJ4Z2suZW5jdHlwZTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XFxuLVxcbi0vKlxcbi0gKiBGaWxsIG91dCB0aGUgY29udHJvbCBtZXNzYWdlIHRvIHBhc3MgdG8gdXNlcnNwYWNlIHRvIGluZm9ybSBhYm91dCB0aGVcXG4tICogY2hhbGxlbmdlLlxcbi0gKi9cXG4tc3RhdGljIGludCByeGdrX2NoYWxsZW5nZV90b19yZWN2bXNnKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxcbi17XFxuLVxcdHN0cnVjdCByeGdrX2NoYWxsZW5nZSBjaGFsbDtcXG4tXFxuLVxcdGNoYWxsLmJhc2Uuc2VydmljZV9pZFxcdFxcdD0gY29ubi1cXHUwMDNlc2VydmljZV9pZDtcXG4tXFx0Y2hhbGwuYmFzZS5zZWN1cml0eV9pbmRleFxcdD0gY29ubi1cXHUwMDNlc2VjdXJpdHlfaXg7XFxuLVxcdGNoYWxsLmVuY3R5cGVcXHRcXHRcXHQ9IGNvbm4tXFx1MDAzZXJ4Z2suZW5jdHlwZTtcXG4tXFxuLVxcdHJldHVybiBwdXRfY21zZyhtc2csIFNPTF9SWFJQQywgUlhSUENfQ0hBTExFTkdFRCwgc2l6ZW9mKGNoYWxsKSwgXFx1MDAyNmNoYWxsKTtcXG4tfVxcbi1cXG4gLypcXG4gICogSW5zZXJ0IHRoZSByZXF1aXNpdGUgYW1vdW50IG9mIFhEUiBwYWRkaW5nIGZvciB0aGUgbGVuZ3RoIGdpdmVuLlxcbiAgKi9cXG5AQCAtODM3LDcgKzgwNyw3IEBAIHN0YXRpYyBub2lubGluZSBzc2l6ZV90IHJ4Z2tfaW5zZXJ0X3Jlc3BvbnNlX2hlYWRlcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29uXFxuICAqL1xcbiBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICphcHBkYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZV90IG9mZnNldClcXG4ge1xcbkBAIC04NTksMjAgKzgyOSwyMCBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuIFxcbi1cXHRhLmFwcGRhdGFfbGVuID0gaHRvbmwoYXBwZGF0YS1cXHUwMDNlbGVuKTtcXG4rXFx0YS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtXFx1MDAzZWRhdGFsZW4pO1xcbiBcXG4gXFx0cmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgXFx1MDAyNmEsIHNpemVvZihhKSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRvZmZzZXQgKz0gc2l6ZW9mKGEpO1xcbiBcXG4tXFx0aWYgKGFwcGRhdGEtXFx1MDAzZWxlbikge1xcbi1cXHRcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLVxcdTAwM2VkYXRhLCBhcHBkYXRhLVxcdTAwM2VsZW4pO1xcbitcXHRpZiAoYXBwZGF0YS1cXHUwMDNlZGF0YWxlbikge1xcbitcXHRcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBhcHBkYXRhLVxcdTAwM2VkYXRhLCBhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdG9mZnNldCArPSBhcHBkYXRhLVxcdTAwM2VsZW47XFxuK1xcdFxcdG9mZnNldCArPSBhcHBkYXRhLVxcdTAwM2VkYXRhbGVuO1xcbiBcXG4tXFx0XFx0cmV0ID0gcnhna19wYWRfb3V0KHJlc3BvbnNlLCBhcHBkYXRhLVxcdTAwM2VsZW4sIG9mZnNldCk7XFxuK1xcdFxcdHJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS1cXHUwMDNlZGF0YWxlbiwgb2Zmc2V0KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdG9mZnNldCArPSByZXQ7XFxuQEAgLTg5MCw3ICs4NjAsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiBcXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcXHUwMDI2Yiwgc2l6ZW9mKGIpKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdHJldHVybiBzaXplb2YoYSkgKyB4ZHJfcm91bmRfdXAoYXBwZGF0YS1cXHUwMDNlbGVuKSArIHNpemVvZihiKTtcXG4rXFx0cmV0dXJuIHNpemVvZihhKSArIHhkcl9yb3VuZF91cChhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKSArIHNpemVvZihiKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuQEAgLTkyMyw3ICs4OTMsNyBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2VuY3J5cHRfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gICovXFxuIHN0YXRpYyBpbnQgcnhna19jb25zdHJ1Y3RfcmVzcG9uc2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AsICpyc3A7XFxuIFxcdHN0cnVjdCByeGdrX2NvbnRleHQgKmdrO1xcbkBAIC05MzYsNyArOTA2LDcgQEAgc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0aWYgKElTX0VSUihnaykpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGdrKTtcXG4gXFxuLVxcdGF1dGhfbGVuID0gMjAgKyAoNCArIGFwcGRhdGEtXFx1MDAzZWxlbikgKyAxMiArICgxICsgNCkgKiA0O1xcbitcXHRhdXRoX2xlbiA9IDIwICsgKDQgKyBhcHBkYXRhLVxcdTAwM2VkYXRhbGVuKSArIDEyICsgKDEgKyA0KSAqIDQ7XFxuIFxcdGF1dGh4X2xlbiA9IGNyeXB0b19rcmI1X2hvd19tdWNoX2J1ZmZlcihnay1cXHUwMDNla3JiNSwgS1JCNV9FTkNSWVBUX01PREUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGF1dGhfbGVuLCBcXHUwMDI2YXV0aF9vZmZzZXQpO1xcbiBcXHRsZW4gPSBzaXplb2Yoc3RydWN0IHJ4cnBjX3dpcmVfaGVhZGVyKSArXFxuQEAgLTEwMTEsNjYgKzk4MSwzNiBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbiAgKiBSZXNwb25kIHRvIGEgY2hhbGxlbmdlIHBhY2tldC5cXG4gICovXFxuIHN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxcbiB7XFxuLVxcdF9lbnRlcihcXFwieyVkLCV4fVxcXCIsIGNvbm4tXFx1MDAzZWRlYnVnX2lkLCBrZXlfc2VyaWFsKGNvbm4tXFx1MDAzZWtleSkpO1xcbitcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCBkdW1teSA9IHt9LCAqYXBwZGF0YSA9IFxcdTAwMjZkdW1teTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdF9lbnRlcihcXFwieyVkLCV1LCV4LCV4fVxcXCIsXFxuK1xcdCAgICAgICBjb25uLVxcdTAwM2VkZWJ1Z19pZCwgY29ubi1cXHUwMDNlc2VydmljZV9pZCxcXG4rXFx0ICAgICAgIGtleV9zZXJpYWwoY29ubi1cXHUwMDNla2V5KSwga2V5X3NlcmlhbChjb25uLVxcdTAwM2VidW5kbGUtXFx1MDAzZWFwcF9kYXRhKSk7XFxuIFxcbiBcXHRpZiAoa2V5X3ZhbGlkYXRlKGNvbm4tXFx1MDAzZWtleSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcnhycGNfYWJvcnRfY29ubihjb25uLCBOVUxMLCBSWEdLX0VYUElSRUQsIC1FUFJPVE8sXFxuIFxcdFxcdFxcdFxcdFxcdHJ4Z2tfYWJvcnRfY2hhbGxfa2V5X2V4cGlyZWQpO1xcbiBcXG4tXFx0cmV0dXJuIHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKGNvbm4sIGNoYWxsZW5nZSwgYXBwZGF0YSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZV9ub19hcHBkYXRhKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxcbi17XFxuLVxcdHN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307XFxuLVxcbi1cXHRyZXR1cm4gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBjaGFsbGVuZ2UsIFxcdTAwMjZhcHBkYXRhKTtcXG4tfVxcbi1cXG4tLyoqXFxuLSAqIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlIC0gUmVzcG9uZCB0byBhIGNoYWxsZW5nZSB3aXRoIGFwcGRhdGFcXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byByZXNwb25kIHRvXFxuLSAqIEBhcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSB0byBpbmNsdWRlIGluIHRoZSBSRVNQT05TRSBhdXRoZW50aWNhdG9yXFxuLSAqXFxuLSAqIEFsbG93IGEga2VybmVsIGFwcGxpY2F0aW9uIHRvIHJlc3BvbmQgdG8gYSBDSEFMTEVOR0Ugd2l0aCBhcHBsaWNhdGlvbiBkYXRhXFxuLSAqIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBSeEdLIFJFU1BPTlNFIEF1dGhlbnRpY2F0b3IuXFxuLSAqXFxuLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4tICovXFxuLWludCByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrcmI1X2J1ZmZlciAqYXBwZGF0YSlcXG4te1xcbi1cXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xcbi1cXG4tXFx0cmV0dXJuIHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2UoY3NwLVxcdTAwM2VjaGFsbC5jb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpO1xcbi1cXG4tLypcXG4tICogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICBXZSBuZWVkIHRvIHNlZSBpZlxcbi0gKiB0aGVyZSdzIGFuIGFwcGRhdGEgdG8gZmlzaCBvdXQuXFxuLSAqL1xcbi1zdGF0aWMgaW50IHJ4Z2tfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcXG4te1xcbi1cXHRzdHJ1Y3Qga3JiNV9idWZmZXIgYXBwZGF0YSA9IHt9O1xcbi1cXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcXG4tXFxuLVxcdGZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7XFxuLVxcdFxcdGlmIChjbXNnLVxcdTAwM2VjbXNnX2xldmVsICE9IFNPTF9SWFJQQyB8fFxcbi1cXHRcXHQgICAgY21zZy1cXHUwMDNlY21zZ190eXBlICE9IFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0aWYgKGFwcGRhdGEuZGF0YSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdGFwcGRhdGEuZGF0YSA9IENNU0dfREFUQShjbXNnKTtcXG4tXFx0XFx0YXBwZGF0YS5sZW4gPSBjbXNnLVxcdTAwM2VjbXNnX2xlbiAtIHNpemVvZihzdHJ1Y3QgY21zZ2hkcik7XFxuK1xcdGlmIChjb25uLVxcdTAwM2VidW5kbGUtXFx1MDAzZWFwcF9kYXRhKSB7XFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0YXBwZGF0YSA9IChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKVxcbitcXHRcXHRcXHR1c2VyX2tleV9wYXlsb2FkX3JjdShjb25uLVxcdTAwM2VidW5kbGUtXFx1MDAzZWFwcF9kYXRhKTtcXG4rXFx0XFx0aWYgKGFwcGRhdGEgXFx1MDAyNlxcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2YXBwZGF0YS1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0XFx0YXBwZGF0YSA9IE5VTEw7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRpZiAoIWFwcGRhdGEpXFxuK1xcdFxcdFxcdHJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVLRVlSRVZPS0VELFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgXFx1MDAyNmFwcGRhdGEpO1xcbitcXHRyZXQgPSByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShjb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xcbitcXG4rXFx0aWYgKGFwcGRhdGEgIT0gXFx1MDAyNmR1bW15KVxcbitcXHRcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZChhcHBkYXRhKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTM0Niw5ICsxMjg2LDcgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4Z2tfeWZzID0ge1xcbiBcXHQuZnJlZV9jYWxsX2NyeXB0b1xcdFxcdD0gcnhna19mcmVlX2NhbGxfY3J5cHRvLFxcbiBcXHQuaXNzdWVfY2hhbGxlbmdlXFx0XFx0PSByeGdrX2lzc3VlX2NoYWxsZW5nZSxcXG4gXFx0LnZhbGlkYXRlX2NoYWxsZW5nZVxcdFxcdD0gcnhna192YWxpZGF0ZV9jaGFsbGVuZ2UsXFxuLVxcdC5jaGFsbGVuZ2VfdG9fcmVjdm1zZ1xcdFxcdD0gcnhna19jaGFsbGVuZ2VfdG9fcmVjdm1zZyxcXG4tXFx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcXHQ9IHJ4Z2tfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG4tXFx0LnJlc3BvbmRfdG9fY2hhbGxlbmdlXFx0XFx0PSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlX25vX2FwcGRhdGEsXFxuK1xcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVxcdFxcdD0gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZSxcXG4gXFx0LnZlcmlmeV9yZXNwb25zZVxcdFxcdD0gcnhna192ZXJpZnlfcmVzcG9uc2UsXFxuIFxcdC5jbGVhclxcdFxcdFxcdFxcdD0gcnhna19jbGVhcixcXG4gXFx0LmRlZmF1bHRfZGVjb2RlX3RpY2tldFxcdFxcdD0gcnhna195ZnNfZGVjb2RlX3RpY2tldCxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4a2FkLmMgYi9uZXQvcnhycGMvcnhrYWQuY1xcbmluZGV4IGNhOWYwZTgyY2I5YWM3Li5lNTViZmNhMTBlMWE5NCAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvcnhrYWQuY1xcbisrKyBiL25ldC9yeHJwYy9yeGthZC5jXFxuQEAgLTc0OCwzMiArNzQ4LDYgQEAgc3RhdGljIGludCByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tLypcXG4tICogUnhLQUQgZG9lcyBhdXRvbWF0aWMgcmVzcG9uc2Ugb25seSBhcyB0aGVyZSdzIG5vdGhpbmcgdG8gbWFuYWdlIHRoYXQgaXNuJ3RcXG4tICogYWxyZWFkeSBpbiB0aGUga2V5Llxcbi0gKi9cXG4tc3RhdGljIGludCByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtc2doZHIgKm1zZylcXG4te1xcbi1cXHRyZXR1cm4gLUVJTlZBTDtcXG4tfVxcbi1cXG4tLyoqXFxuLSAqIHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSAtIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2Ugd2l0aCBhcHBkYXRhXFxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gcmVzcG9uZCB0b1xcbi0gKlxcbi0gKiBBbGxvdyBhIGtlcm5lbCBhcHBsaWNhdGlvbiB0byByZXNwb25kIHRvIGEgQ0hBTExFTkdFLlxcbi0gKlxcbi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuLSAqL1xcbi1pbnQgcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UpXFxuLXtcXG4tXFx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpjc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcXG4tXFxuLVxcdHJldHVybiByeGthZF9yZXNwb25kX3RvX2NoYWxsZW5nZShjc3AtXFx1MDAzZWNoYWxsLmNvbm4sIGNoYWxsZW5nZSk7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTChyeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UpO1xcbi1cXG4gLyogRGVjcnlwdCBkYXRhIGluLXBsYWNlIHVzaW5nIERFUy1QQ0JDLiAgQGxlbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOC4gKi9cXG4gVklTSUJMRV9JRl9LVU5JVCB2b2lkIGRlc19wY2JjX2RlY3J5cHRfaW5wbGFjZShjb25zdCBzdHJ1Y3QgZGVzX2N0eCAqa2V5LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgX19sZTY0IGl2LCB1OCAqZGF0YSwgc2l6ZV90IGxlbilcXG5AQCAtMTEzNCw3ICsxMTA4LDYgQEAgY29uc3Qgc3RydWN0IHJ4cnBjX3NlY3VyaXR5IHJ4a2FkID0ge1xcbiBcXHQuZnJlZV9jYWxsX2NyeXB0b1xcdFxcdD0gcnhrYWRfZnJlZV9jYWxsX2NyeXB0byxcXG4gXFx0Lmlzc3VlX2NoYWxsZW5nZVxcdFxcdD0gcnhrYWRfaXNzdWVfY2hhbGxlbmdlLFxcbiBcXHQudmFsaWRhdGVfY2hhbGxlbmdlXFx0XFx0PSByeGthZF92YWxpZGF0ZV9jaGFsbGVuZ2UsXFxuLVxcdC5zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXFx0PSByeGthZF9zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxcbiBcXHQucmVzcG9uZF90b19jaGFsbGVuZ2VcXHRcXHQ9IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxcbiBcXHQudmVyaWZ5X3Jlc3BvbnNlXFx0XFx0PSByeGthZF92ZXJpZnlfcmVzcG9uc2UsXFxuIFxcdC5jbGVhclxcdFxcdFxcdFxcdD0gcnhrYWRfY2xlYXIsXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZW5kbXNnLmMgYi9uZXQvcnhycGMvc2VuZG1zZy5jXFxuaW5kZXggZWQyYzlhNTEwMDVhZGUuLmNkZjM1NDQwMzE3ZDZkIDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmNcXG4rKysgYi9uZXQvcnhycGMvc2VuZG1zZy5jXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2tleXMvdXNlci10eXBlLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9hZl9yeHJwYy5oXFx1MDAzZVxcbkBAIC0zMjAsOCArMzIxLDggQEAgc3RhdGljIGludCByeHJwY19hbGxvY190eHF1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXFxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tXFx0XFx0XFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsXFxuLVxcdFxcdFxcdCAgIGJvb2wgKl9kcm9wcGVkX2xvY2spXFxuK1xcdFxcdFxcdCAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KVxcbitcXHRfX3JlbGVhc2VzKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KVxcbiB7XFxuIFxcdHN0cnVjdCByeHJwY190eGJ1ZiAqdHhiO1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2cngtXFx1MDAzZXNrO1xcbkBAIC0zMzAsMjMgKzMzMSwzMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdGJvb2wgbW9yZSA9IG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX01PUkU7XFxuIFxcdGludCByZXQsIGNvcGllZCA9IDA7XFxuIFxcbi1cXHRpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9OT19NT1JFLCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsIFxcdTAwMjZjYWxsLVxcdTAwM2VmbGFncykpKSB7XFxuIFxcdFxcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXFx1MDAzZWRlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcXG4gXFx0XFx0XFx0XFx0ICBjYWxsLVxcdTAwM2VjaWQsIGNhbGwtXFx1MDAzZWNhbGxfaWQsIGNhbGwtXFx1MDAzZXJ4X2NvbnN1bWVkLFxcbiBcXHRcXHRcXHRcXHQgIDAsIC1FUFJPVE8pO1xcbi1cXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4rXFx0XFx0cmV0ID0gLUVQUk9UTztcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpKSkge1xcbitcXHRcXHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVxcdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvcixcXG4rXFx0XFx0XFx0XFx0ICBjYWxsLVxcdTAwM2VjaWQsIGNhbGwtXFx1MDAzZWNhbGxfaWQsIGNhbGwtXFx1MDAzZXJ4X2NvbnN1bWVkLFxcbitcXHRcXHRcXHRcXHQgIDAsIC1FSU8pO1xcbitcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuIFxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbiBcXG4gXFx0cmV0ID0gcnhycGNfd2FpdF90b19iZV9jb25uZWN0ZWQoY2FsbCwgXFx1MDAyNnRpbWVvKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuIFxcdGlmIChjYWxsLVxcdTAwM2Vjb25uLVxcdTAwM2VzdGF0ZSA9PSBSWFJQQ19DT05OX0NMSUVOVF9VTlNFQ1VSRUQpIHtcXG4gXFx0XFx0cmV0ID0gcnhycGNfaW5pdF9jbGllbnRfY29ubl9zZWN1cml0eShjYWxsLVxcdTAwM2Vjb25uKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4gXFx0LyogdGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqL1xcbkBAIC00NDAsMTIgKzQ0OSwyMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdFxcdC8qIGFkZCB0aGUgcGFja2V0IHRvIHRoZSBzZW5kIHF1ZXVlIGlmIGl0J3Mgbm93IGZ1bGwgKi9cXG4gXFx0XFx0aWYgKCF0eGItXFx1MDAzZXNwYWNlIHx8XFxuIFxcdFxcdCAgICAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXFx1MDAyNlxcdTAwMjYgIW1vcmUpKSB7XFxuK1xcdFxcdFxcdC8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZFxcbitcXHRcXHRcXHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxcbitcXHRcXHRcXHQgKiBlbmNyeXB0LiAgQXNzdW1lIHRoYXQgRU5PTUVNIGlzIHJldHJ5YWJsZSwgYnV0XFxuK1xcdFxcdFxcdCAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHJldCA9IGNhbGwtXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQgPT0gLUVOT01FTSlcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4rXFx0XFx0XFx0XFx0c2V0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF90eGI7XFxuK1xcdFxcdFxcdH1cXG4rXFxuIFxcdFxcdFxcdGlmIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCBcXHUwMDI2XFx1MDAyNiAhbW9yZSlcXG4gXFx0XFx0XFx0XFx0dHhiLVxcdTAwM2VmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDtcXG4tXFxuLVxcdFxcdFxcdHJldCA9IGNhbGwtXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0XFx0cnhycGNfcXVldWVfcGFja2V0KHJ4LCBjYWxsLCB0eGIsIG5vdGlmeV9lbmRfdHgpO1xcbiBcXHRcXHRcXHR0eGIgPSBOVUxMO1xcbiBcXHRcXHR9XFxuQEAgLTQ1Myw0OCArNDcxLDU4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gXFxuIHN1Y2Nlc3M6XFxuIFxcdHJldCA9IGNvcGllZDtcXG4tXFx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGNhbGwtXFx1MDAzZWVycm9yIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0ID0gY2FsbC1cXHUwMDNlZXJyb3I7XFxuLW91dDpcXG4rb3V0X3R4YjpcXG4gXFx0Y2FsbC1cXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcXG4rb3V0X3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KTtcXG4gXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIFxcbiBjYWxsX3Rlcm1pbmF0ZWQ6XFxuIFxcdHJ4cnBjX3B1dF90eGJ1Zih0eGIsIHJ4cnBjX3R4YnVmX3B1dF9zZW5kX2Fib3J0ZWQpO1xcbi1cXHRfbGVhdmUoXFxcIiA9ICVkXFxcIiwgY2FsbC1cXHUwMDNlZXJyb3IpO1xcbi1cXHRyZXR1cm4gY2FsbC1cXHUwMDNlZXJyb3I7XFxuK1xcdGNhbGwtXFx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xcbitcXHRyZXQgPSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4rXFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gbWF5YmVfZXJyb3I6XFxuLVxcdGlmIChjb3BpZWQpXFxuK1xcdGlmIChjb3BpZWQpIHtcXG4rXFx0XFx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGNhbGwtXFx1MDAzZWVycm9yIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRyZXQgPSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHR9XFxuIFxcdFxcdGdvdG8gc3VjY2VzcztcXG4tXFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0Z290byBvdXRfdHhiO1xcbiBcXG4gZWZhdWx0OlxcbiBcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRnb3RvIG91dDtcXG4rXFx0Z290byBvdXRfdHhiO1xcbiBcXG4gd2FpdF9mb3Jfc3BhY2U6XFxuIFxcdHJldCA9IC1FQUdBSU47XFxuIFxcdGlmIChtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVClcXG4gXFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4rXFx0Y2FsbC1cXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcXG4rXFx0dHhiID0gTlVMTDtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KTtcXG4tXFx0Kl9kcm9wcGVkX2xvY2sgPSB0cnVlO1xcbitcXG4gXFx0cmV0ID0gcnhycGNfd2FpdF9mb3JfdHhfd2luZG93KHJ4LCBjYWxsLCBcXHUwMDI2dGltZW8sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19XQUlUQUxMKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gbWF5YmVfZXJyb3I7XFxuK1xcdFxcdGdvdG8gb3V0X25vbG9jaztcXG4gXFx0aWYgKGNhbGwtXFx1MDAzZWludGVycnVwdGliaWxpdHkgPT0gUlhSUENfSU5URVJSVVBUSUJMRSkge1xcbiBcXHRcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcXG4tXFx0XFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4rXFx0XFx0XFx0Z290byBvdXRfbm9sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNhbGwtXFx1MDAzZXVzZXJfbXV0ZXgpO1xcbiBcXHR9XFxuLVxcdCpfZHJvcHBlZF9sb2NrID0gZmFsc2U7XFxuIFxcdGdvdG8gcmVsb2FkO1xcbitvdXRfbm9sb2NrOlxcbitcXHRfbGVhdmUoXFxcIiA9ICVkIFtpbnRyXVxcXCIsIHJldCk7XFxuK1xcdHJldHVybiBjb3BpZWQgPzogcmV0O1xcbiB9XFxuIFxcbiAvKlxcbkBAIC01MDMsNiArNTMxLDggQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxcbiBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcXG4ge1xcbiBcXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcXG4rXFx0a2V5X3NlcmlhbF90IGtleV9pZDtcXG4rXFx0a2V5X3JlZl90IGtleTtcXG4gXFx0Ym9vbCBnb3RfdXNlcl9JRCA9IGZhbHNlO1xcbiBcXHRpbnQgbGVuO1xcbiBcXG5AQCAtNTg3LDYgKzYxNywyMiBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0Y2FzZSBSWFJQQ19SRVNQT05TRV9BUFBEQVRBOlxcbitcXHRcXHRcXHRpZiAobGVuICE9IHNpemVvZihrZXlfc2VyaWFsX3QpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0aWYgKHAtXFx1MDAzZWNhbGwuYXBwX2RhdGEpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRrZXlfaWQgPSAqKGtleV9zZXJpYWxfdCAqKUNNU0dfREFUQShjbXNnKTtcXG4rXFx0XFx0XFx0a2V5ID0gbG9va3VwX3VzZXJfa2V5KGtleV9pZCwgMCwgS0VZX05FRURfU0VBUkNIKTtcXG4rXFx0XFx0XFx0aWYgKElTX0VSUihrZXkpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihrZXkpO1xcbitcXHRcXHRcXHRpZiAoa2V5X3JlZl90b19wdHIoa2V5KS1cXHUwMDNldHlwZSA9PSBcXHUwMDI2a2V5X3R5cGVfdXNlcikge1xcbitcXHRcXHRcXHRcXHRrZXlfcmVmX3B1dChrZXkpO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRwLVxcdTAwM2VjYWxsLmFwcF9kYXRhID0ga2V5X3JlZl90b19wdHIoa2V5KTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbkBAIC02OTUsOCArNzQxLDEwIEBAIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiBcXHRcXHRcXHRnb3RvIGVycm9yX3JlbGVhc2Vfc29jaztcXG4gXFx0XFx0Y2FsbCA9IHJ4cnBjX25ld19jbGllbnRfY2FsbF9mb3Jfc2VuZG1zZyhyeCwgbXNnLCBcXHUwMDI2cCk7XFxuIFxcdFxcdC8qIFRoZSBzb2NrZXQgaXMgbm93IHVubG9ja2VkLi4uICovXFxuLVxcdFxcdGlmIChJU19FUlIoY2FsbCkpXFxuK1xcdFxcdGlmIChJU19FUlIoY2FsbCkpIHtcXG4rXFx0XFx0XFx0a2V5X3B1dChwLmNhbGwuYXBwX2RhdGEpO1xcbiBcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihjYWxsKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHQvKiAuLi4gYW5kIHdlIGhhdmUgdGhlIGNhbGwgbG9jay4gKi9cXG4gXFx0XFx0cC5jYWxsLm5yX3RpbWVvdXRzID0gMDtcXG4gXFx0XFx0cmV0ID0gMDtcXG5AQCAtNzY5LDggKzgxNyw4IEBAIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiBcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBSWFJQQ19DTURfU0VORF9EQVRBOlxcbi1cXHRcXHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMLCBcXHUwMDI2ZHJvcHBlZF9sb2NrKTtcXG4tXFx0XFx0YnJlYWs7XFxuK1xcdFxcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwpO1xcbitcXHRcXHRnb3RvIGVycm9yX3B1dDtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTc4MSwxMSArODI5LDEzIEBAIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNhbGwtXFx1MDAzZXVzZXJfbXV0ZXgpO1xcbiBlcnJvcl9wdXQ6XFxuIFxcdHJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpO1xcbitcXHRrZXlfcHV0KHAuY2FsbC5hcHBfZGF0YSk7XFxuIFxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiBcXG4gZXJyb3JfcmVsZWFzZV9zb2NrOlxcbiBcXHRyZWxlYXNlX3NvY2soXFx1MDAyNnJ4LVxcdTAwM2Vzayk7XFxuK1xcdGtleV9wdXQocC5jYWxsLmFwcF9kYXRhKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtODA4LDcgKzg1OCw2IEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdFxcdCAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KVxcbiB7XFxuLVxcdGJvb2wgZHJvcHBlZF9sb2NrID0gZmFsc2U7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRfZW50ZXIoXFxcInslZH0sXFxcIiwgY2FsbC1cXHUwMDNlZGVidWdfaWQpO1xcbkBAIC04MTksMTIgKzg2OCwxMCBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2Y2FsbC1cXHUwMDNldXNlcl9tdXRleCk7XFxuIFxcbiBcXHRyZXQgPSByeHJwY19zZW5kX2RhdGEocnhycGNfc2soc29jay1cXHUwMDNlc2spLCBjYWxsLCBtc2csIGxlbixcXG4tXFx0XFx0XFx0ICAgICAgbm90aWZ5X2VuZF90eCwgXFx1MDAyNmRyb3BwZWRfbG9jayk7XFxuK1xcdFxcdFxcdCAgICAgIG5vdGlmeV9lbmRfdHgpO1xcbiBcXHRpZiAocmV0ID09IC1FU0hVVERPV04pXFxuIFxcdFxcdHJldCA9IGNhbGwtXFx1MDAzZWVycm9yO1xcbiBcXG4tXFx0aWYgKCFkcm9wcGVkX2xvY2spXFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y2FsbC1cXHUwMDNldXNlcl9tdXRleCk7XFxuIFxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmMgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXFxuaW5kZXggM2VmZTEwNGIxOTMwY2IuLmZjNmY0NzhlMTc2MmE3IDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmNcXG4rKysgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXFxuQEAgLTE3Myw0MyArMTczLDMgQEAgaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qga2V5ICprZXlyaW5nKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyk7XFxuLVxcbi0vKipcXG4tICogcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlIC0gU2V0IHRoZSBtYW5hZ2UtcmVzcG9uc2UgZmxhZyBmb3IgYSBrZXJuZWwgc2VydmljZVxcbi0gKiBAc2s6IFRoZSBzb2NrZXQgdG8gc2V0IHRoZSBrZXlyaW5nIG9uXFxuLSAqIEBzZXQ6IFRydWUgdG8gc2V0LCBmYWxzZSB0byBjbGVhciB0aGUgZmxhZ1xcbi0gKlxcbi0gKiBTZXQgdGhlIGZsYWcgb24gYW4gcnhycGMgc29ja2V0IHRvIHNheSB0aGF0IHRoZSBjYWxsZXIgd2FudHMgdG8gbWFuYWdlIHRoZVxcbi0gKiBSRVNQT05TRSBwYWNrZXQgYW5kIHRoZSB1c2VyLWRlZmluZWQgZGF0YSBpdCBtYXkgY29udGFpbi4gIFNldHRpbmcgdGhpc1xcbi0gKiBtZWFucyB0aGF0IHJlY3Ztc2coKSB3aWxsIHJldHVybiBtZXNzYWdlcyB3aXRoIFJYUlBDX0NIQUxMRU5HRUQgaW4gdGhlXFxuLSAqIGNvbnRyb2wgbWVzc2FnZSBidWZmZXIgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbGxlbmdlLlxcbi0gKlxcbi0gKiBUaGUgdXNlciBzaG91bGQgcmVzcG9uZCB0byB0aGUgY2hhbGxlbmdlIGJ5IHBhc3NpbmcgUlhSUENfUkVTUE9ORCBvclxcbi0gKiBSWFJQQ19SRVNQT05EX0FCT1JUIGNvbnRyb2wgbWVzc2FnZXMgd2l0aCBzZW5kbXNnKCkgdG8gdGhlIHNhbWUgY2FsbC5cXG4tICogU3VwcGxlbWVudGFyeSBjb250cm9sIG1lc3NhZ2VzLCBzdWNoIGFzIFJYUlBDX1JFU1BfUlhHS19BUFBEQVRBLCBtYXkgYmVcXG4tICogaW5jbHVkZWQgdG8gaW5kaWNhdGUgdGhlIHBhcnRzIHRoZSB1c2VyIHdhbnRzIHRvIHN1cHBseS5cXG4tICpcXG4tICogVGhlIHNlcnZlciB3aWxsIGJlIHBhc3NlZCB0aGUgcmVzcG9uc2UgZGF0YSB3aXRoIGEgUlhSUENfUkVTUE9OREVEIGNvbnRyb2xcXG4tICogbWVzc2FnZSB3aGVuIGl0IGdldHMgdGhlIGZpcnN0IGRhdGEgZnJvbSBlYWNoIGNhbGwuXFxuLSAqXFxuLSAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgaG9ub3VyZWQgYnkgc2VjdXJpdHkgY2xhc3NlcyB0aGF0IG5lZWQgYXV4aWxpYXJ5IGRhdGFcXG4tICogKGUuZy4gUnhHSykuICBUaG9zZSB0aGF0IGRvbid0IG9mZmVyIHRoZSBmYWNpbGl0eSAoZS5nLiBSeEtBRCkgcmVzcG9uZFxcbi0gKiB3aXRob3V0IGNvbnN1bHRpbmcgdXNlcnNwYWNlLlxcbi0gKlxcbi0gKiBSZXR1cm46IFRoZSBwcmV2aW91cyBzZXR0aW5nLlxcbi0gKi9cXG4taW50IHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgc2V0KVxcbi17XFxuLVxcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNrKTtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdGxvY2tfc29jayhzayk7XFxuLVxcdHJldCA9ICEhdGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFxcdTAwMjZyeC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRpZiAoc2V0KVxcbi1cXHRcXHRzZXRfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcXHUwMDI2cngtXFx1MDAzZWZsYWdzKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRjbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFxcdTAwMjZyeC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRyZWxlYXNlX3NvY2soc2spO1xcbi1cXHRyZXR1cm4gcmV0O1xcbi19XFxuLUVYUE9SVF9TWU1CT0wocnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKTtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcXG5pbmRleCA2Zjg4YjUwN2Y5Mjc5MS4uOTBjMWJkNWQ3ZGZlY2YgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xcbisrKyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcXG5AQCAtNjcsNiArNjcsNyBAQCBpbnQgdXNlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxcbiBcXHR1cGF5bG9hZCA9IGttYWxsb2NfZmxleCgqdXBheWxvYWQsIGRhdGEsIGRhdGFsZW4pO1xcbiBcXHRpZiAoIXVwYXlsb2FkKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZ1cGF5bG9hZC1cXHUwMDNlcmVmLCAxKTtcXG4gXFxuIFxcdC8qIGF0dGFjaCB0aGUgZGF0YSAqL1xcbiBcXHRwcmVwLVxcdTAwM2VxdW90YWxlbiA9IGRhdGFsZW47XFxuQEAgLTg4LDEyICs4OSwyMiBAQCBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2ZyZWVfcHJlcGFyc2UpO1xcbiBcXG4gc3RhdGljIHZvaWQgdXNlcl9mcmVlX3BheWxvYWRfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4ge1xcbi1cXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZDtcXG4rXFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQgPVxcbitcXHRcXHRjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7XFxuIFxcbi1cXHRwYXlsb2FkID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpO1xcbiBcXHRrZnJlZV9zZW5zaXRpdmUocGF5bG9hZCk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIEZyZWUgYSB1c2VyIGRlZmluZWQga2V5IHBheWxvYWQuXFxuKyAqL1xcbit2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKVxcbit7XFxuK1xcdGlmIChwYXlsb2FkIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2cGF5bG9hZC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNnBheWxvYWQtXFx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwdXRfdXNlcl9rZXlfcGF5bG9hZCk7XFxuK1xcbiAvKlxcbiAgKiB1cGRhdGUgYSB1c2VyIGRlZmluZWQga2V5XFxuICAqIC0gdGhlIGtleSdzIHNlbWFwaG9yZSBpcyB3cml0ZS1sb2NrZWRcXG5AQCAtMTE1LDggKzEyNiw3IEBAIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuIFxcdHJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIHByZXAtXFx1MDAzZXBheWxvYWQuZGF0YVswXSk7XFxuIFxcdHByZXAtXFx1MDAzZXBheWxvYWQuZGF0YVswXSA9IE5VTEw7XFxuIFxcbi1cXHRpZiAoemFwKVxcbi1cXHRcXHRjYWxsX3JjdShcXHUwMDI2emFwLVxcdTAwM2VyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7XFxuK1xcdHB1dF91c2VyX2tleV9wYXlsb2FkKHphcCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl91cGRhdGUpO1xcbkBAIC0xMzQsNyArMTQ0LDcgQEAgdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpXFxuIFxcbiBcXHRpZiAodXBheWxvYWQpIHtcXG4gXFx0XFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgTlVMTCk7XFxuLVxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ1cGF5bG9hZC1cXHUwMDNlcmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpO1xcbitcXHRcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMTQ3LDkgKzE1Nyw4IEBAIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQgPSBrZXktXFx1MDAzZXBheWxvYWQuZGF0YVswXTtcXG4gXFxuLVxcdGtmcmVlX3NlbnNpdGl2ZSh1cGF5bG9hZCk7XFxuK1xcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcXG4gfVxcbi1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl9kZXN0cm95KTtcXG4gXFxuIC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEwOjAwOjAwLjM2ODQxNjI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDUxNTEzMTY2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZfUlhSUENcIixcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiUlhHS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ4cnBjX3NlbmRtc2dfY21zZ1wiLFxuICAgIFwicnhycGNfZG9fc2VuZG1zZ1wiLFxuICAgIFwicnhycGNfc2VuZF9kYXRhXCIsXG4gICAgXCJyeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlXCIsXG4gICAgXCJhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhXCIsXG4gICAgXCJhZnNfbWFrZV9jYWxsXCIsXG4gICAgXCJyeHJwY19rZXJuZWxfYmVnaW5fY2FsbFwiLFxuICAgIFwicnhycGNfa2VybmVsX3F1ZXJ5X2tleVwiLFxuICAgIFwicHV0X3VzZXJfa2V5X3BheWxvYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgUnhSUEMgYW5kIEFGUyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBSeEdLIGNoYWxsZW5nZS1yZXNwb25zZSBhbmQgYXBwZGF0YSB2aWEgYSBuZXcga2V5LWJhc2VkIG1lY2hhbmlzbSBpbnN0ZWFkIG9mIG91dC1vZi1iYW5kIChPT0IpIG1lc3NhZ2VzLiBJdCByZW1vdmVzIHRoZSBPT0IgbWVzc2FnZSBoYW5kbGluZyBlbnRpcmVseSwgY2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAsIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IGNvbnRyb2wgbWVzc2FnZSBgUlhSUENfUkVTUE9OU0VfQVBQREFUQWAgZm9yIHVzZXJzcGFjZSB0byBwcm92aWRlIGFwcGRhdGEga2V5cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBhbmQgZmlsZXN5c3RlbSBjb2RlLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDk4NjU3NzAyZThkOGQ5ZTRhM2YxNTM0ZGYxZTAwYTFjNmZmNmM2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA5OjU5OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuaW5kZXggMTAzMTY4YzcwZGQ0ZGYuLmYwZmVjM2E3NjUyMjg4IDEwMDY0NFxuLS0tIGEvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbisrKyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG5AQCAtNiw3ICs2LDkgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXktdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjY3J5cHRvL2tyYjUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2tleXMvdXNlci10eXBlLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuICNpbmNsdWRlIFwiYWZzX2NtLmhcIlxuICNpbmNsdWRlIFwiYWZzX2ZzLmhcIlxuQEAgLTE5LDE5NSArMjEsMzkgQEBcbiAjZGVmaW5lIHhkcl9sZW5fb2JqZWN0KHgpICg0ICsgcm91bmRfdXAoKHgpLCBzaXplb2YoX19iZTMyKSkpXG4gXG4gI2lmZGVmIENPTkZJR19SWEdLXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcik7XG4tI2VuZGlmXG4tXG4gLypcbi0gKiBSZXNwb25kIHRvIGFuIFJ4R0sgY2hhbGxlbmdlLCBhZGRpbmcgYXBwZGF0YS5cbisgKiBBcyB0aGUgWUZTIFJ4R0sgYXBwZGF0YSB0byBiZSBwYXNzZWQgaW4gdGhlIFlGUy5GUy1zZXJ2aWNlIFJFU1BPTlNFIHBhY2tldCxcbisgKiBjcmVhdGUgYSBHU1MgdG9rZW4gdG8gdXNlIGFzIGEgdGlja2V0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZXNlcnZlci5cbiAgKi9cbi1zdGF0aWMgaW50IGFmc19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuLXtcbi0jaWZkZWYgQ09ORklHX1JYR0tcbi1cdHN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307XG4tXHRzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyO1xuLSNlbmRpZlxuLVx0c3RydWN0IHJ4cnBjX3BlZXIgKnBlZXI7XG4tXHR1bnNpZ25lZCBsb25nIHBlZXJfZGF0YTtcbi1cdHUxNiBzZXJ2aWNlX2lkO1xuLVx0dTggc2VjdXJpdHlfaW5kZXg7XG4tXG4tXHRyeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKGNoYWxsZW5nZSwgXHUwMDI2cGVlciwgXHUwMDI2cGVlcl9kYXRhLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZzZXJ2aWNlX2lkLCBcdTAwMjZzZWN1cml0eV9pbmRleCk7XG4tXG4tXHRfZW50ZXIoXCIldSwldVwiLCBzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7XG4tXG4tXHRzd2l0Y2ggKHNlcnZpY2VfaWQpIHtcbi1cdFx0LyogV2UgZG9uJ3Qgc2VuZCBDTV9TRVJWSUNFIFJQQ3MsIHNvIGRvbid0IGV4cGVjdCBhIGNoYWxsZW5nZVxuLVx0XHQgKiB0aGVyZWZyb20uXG4tXHRcdCAqL1xuLVx0Y2FzZSBGU19TRVJWSUNFOlxuLVx0Y2FzZSBWTF9TRVJWSUNFOlxuLVx0Y2FzZSBZRlNfRlNfU0VSVklDRTpcbi1cdGNhc2UgWUZTX1ZMX1NFUlZJQ0U6XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0cHJfd2FybihcIkNhbid0IHJlc3BvbmQgdG8gdW5rbm93biBjaGFsbGVuZ2UgJXU6JXVcIixcbi1cdFx0XHRzZXJ2aWNlX2lkLCBzZWN1cml0eV9pbmRleCk7XG4tXHRcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXG4tXHRcdFx0XHRcdFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcbi1cdH1cbi1cbi1cdHN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHtcbi0jaWZkZWYgQ09ORklHX1JYS0FEXG4tXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuLVx0XHRyZXR1cm4gcnhrYWRfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSk7XG4tI2VuZGlmXG4tXG4tI2lmZGVmIENPTkZJR19SWEdLXG4tXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYR0s6XG4tXHRcdHJldHVybiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZShjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuLVxuLVx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbi1cdFx0c3dpdGNoIChzZXJ2aWNlX2lkKSB7XG4tXHRcdGNhc2UgRlNfU0VSVklDRTpcbi1cdFx0Y2FzZSBZRlNfRlNfU0VSVklDRTpcbi1cdFx0XHRzZXJ2ZXIgPSAoc3RydWN0IGFmc19zZXJ2ZXIgKilwZWVyX2RhdGE7XG4tXHRcdFx0aWYgKCFzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpIHtcbi1cdFx0XHRcdG11dGV4X2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuLVx0XHRcdFx0aWYgKCFzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXG4tXHRcdFx0XHRcdGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKGNoYWxsZW5nZSwgc2VydmVyKTtcbi1cdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZzZXJ2ZXItXHUwMDNlY21fdG9rZW5fbG9jayk7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChzZXJ2ZXItXHUwMDNlY21fcnhna19hcHBkYXRhLmRhdGEpXG4tXHRcdFx0XHRhcHBkYXRhID0gc2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRyZXR1cm4gcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2UoY2hhbGxlbmdlLCBcdTAwMjZhcHBkYXRhKTtcbi0jZW5kaWZcbi1cbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShjaGFsbGVuZ2UsIFJYX1VTRVJfQUJPUlQsIC1FUFJPVE8sXG4tXHRcdFx0XHRcdFx0ICAgICBhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzKTtcbi1cdH1cbi19XG4tXG4tLypcbi0gKiBQcm9jZXNzIHRoZSBPT0IgbWVzc2FnZSBxdWV1ZSwgcHJvY2Vzc2luZyBjaGFsbGVuZ2UgcGFja2V0cy5cbi0gKi9cbi12b2lkIGFmc19wcm9jZXNzX29vYl9xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IGFmc19uZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX25ldCwgcnhfb29iX3dvcmspO1xuLVx0c3RydWN0IHNrX2J1ZmYgKm9vYjtcbi1cdGVudW0gcnhycGNfb29iX3R5cGUgdHlwZTtcbi1cbi1cdHdoaWxlIChSRUFEX09OQ0UobmV0LVx1MDAzZWxpdmUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIChvb2IgPSByeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IobmV0LVx1MDAzZXNvY2tldCwgXHUwMDI2dHlwZSkpKSB7XG4tXHRcdHN3aXRjaCAodHlwZSkge1xuLVx0XHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdFx0YWZzX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKG9vYik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0cnhycGNfa2VybmVsX2ZyZWVfb29iKG9vYik7XG4tXHR9XG4tfVxuLVxuLSNpZmRlZiBDT05GSUdfUlhHS1xuLS8qXG4tICogQ3JlYXRlIGEgc2VjdXJpdGllcyBrZXlyaW5nIGZvciB0aGUgY2FjaGUgbWFuYWdlciBhbmQgYXR0YWNoIGEga2V5IHRvIGl0IGZvclxuLSAqIHRoZSBSeEdLIHRva2VucyB3ZSB3YW50IHRvIHVzZSB0byBzZWN1cmUgdGhlIGNhbGxiYWNrIGNvbm5lY3Rpb24gYmFjayBmcm9tXG4tICogdGhlIGZpbGVzZXJ2ZXIuXG4tICovXG4taW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldClcbi17XG4tXHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICprcmI1O1xuLVx0c3RydWN0IGtleSAqcmluZztcbi1cdGtleV9yZWZfdCBrZXk7XG4tXHRjaGFyIEswWzMyXSwgKmRlc2M7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmluZyA9IGtleXJpbmdfYWxsb2MoXCJrYWZzXCIsXG4tXHRcdFx0ICAgICBHTE9CQUxfUk9PVF9VSUQsIEdMT0JBTF9ST09UX0dJRCwgY3VycmVudF9jcmVkKCksXG4tXHRcdFx0ICAgICBLRVlfUE9TX1NFQVJDSCB8IEtFWV9QT1NfV1JJVEUgfFxuLVx0XHRcdCAgICAgS0VZX1VTUl9WSUVXIHwgS0VZX1VTUl9SRUFEIHwgS0VZX1VTUl9TRUFSQ0gsXG4tXHRcdFx0ICAgICBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLFxuLVx0XHRcdCAgICAgTlVMTCwgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKHJpbmcpKVxuLVx0XHRyZXR1cm4gUFRSX0VSUihyaW5nKTtcbi1cbi1cdHJldCA9IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc29ja2V0LVx1MDAzZXNrLCByaW5nKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0cmV0ID0gLUVOT1BLRztcbi1cdGtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoS1JCNV9FTkNUWVBFX0FFUzEyOF9DVFNfSE1BQ19TSEExXzk2KTtcbi1cdGlmICgha3JiNSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRpZiAoV0FSTl9PTl9PTkNFKGtyYjUtXHUwMDNla2V5X2xlbiBcdTAwM2Ugc2l6ZW9mKEswKSkpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0cmV0ID0gLUVOT01FTTtcbi1cdGRlc2MgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgXCIldToldToldToldVwiLFxuLVx0XHRcdCBZRlNfQ01fU0VSVklDRSwgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0ssIDEsIGtyYjUtXHUwMDNlZXR5cGUpO1xuLVx0aWYgKCFkZXNjKVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdHdhaXRfZm9yX3JhbmRvbV9ieXRlcygpO1xuLVx0Z2V0X3JhbmRvbV9ieXRlcyhLMCwga3JiNS1cdTAwM2VrZXlfbGVuKTtcbi1cbi1cdGtleSA9IGtleV9jcmVhdGUobWFrZV9rZXlfcmVmKHJpbmcsIHRydWUpLFxuLVx0XHRcdCBcInJ4cnBjX3NcIiwgZGVzYyxcbi1cdFx0XHQgSzAsIGtyYjUtXHUwMDNla2V5X2xlbixcbi1cdFx0XHQgS0VZX1BPU19WSUVXIHwgS0VZX1BPU19SRUFEIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsXG4tXHRcdFx0IEtFWV9BTExPQ19OT1RfSU5fUVVPVEEpO1xuLVx0a2ZyZWUoZGVzYyk7XG4tXHRpZiAoSVNfRVJSKGtleSkpIHtcbi1cdFx0cmV0ID0gUFRSX0VSUihrZXkpO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdG5ldC1cdTAwM2Vmc19jbV90b2tlbl9rZXkgPSBrZXlfcmVmX3RvX3B0cihrZXkpO1xuLVx0cmV0ID0gMDtcbi1vdXQ6XG4tXHRrZXlfcHV0KHJpbmcpO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLypcbi0gKiBDcmVhdGUgYW4gWUZTIFJ4R0sgR1NTIHRva2VuIHRvIHVzZSBhcyBhIHRpY2tldCB0byB0aGUgc3BlY2lmaWVkIGZpbGVzZXJ2ZXIuXG4tICovXG4tc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcilcbitzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX3J4Z2tfY21fYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCB1MzIgZW5jdHlwZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICpjb25uX2tyYjUsICp0b2tlbl9rcmI1O1xuIFx0Y29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICp0b2tlbl9rZXk7XG4gXHRzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQ7XG4gXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7XG4gXHRzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gc2VydmVyLVx1MDAzZWNlbGwtXHUwMDNlbmV0O1xuLVx0Y29uc3Qgc3RydWN0IGtleSAqa2V5ID0gbmV0LVx1MDAzZWZzX2NtX3Rva2VuX2tleTtcbi1cdHNpemVfdCBrZXlzaXplLCB1dWlkc2l6ZSwgYXV0aHNpemUsIHRva3NpemUsIGVuY3NpemUsIGNvbnRzaXplLCBhZGF0YXNpemUsIG9mZnNldDtcbitcdGNvbnN0IHN0cnVjdCBrZXkgKmNtX2tleSA9IG5ldC1cdTAwM2Vmc19jbV90b2tlbl9rZXk7XG4rXHRzdHJ1Y3Qga2V5ICphcHBkYXRhX2tleSA9IE5VTEw7XG4rXHRzaXplX3Qga2V5c2l6ZSwgdXVpZHNpemUsIGF1dGhzaXplLCB0b2tzaXplLCBlbmNzaXplLCBjb250c2l6ZTtcbitcdHNpemVfdCBhZGF0YXNpemUsIG9mZnNldDtcbiBcdF9fYmUzMiBjYXBzWzFdID0ge1xuIFx0XHRbMF0gPSBodG9ubChBRlNfQ0FQX0VSUk9SX1RSQU5TTEFUSU9OKSxcbiBcdH07XG4gXHRfX2JlMzIgKnhkcjtcbiBcdHZvaWQgKmFwcGRhdGEsICpLMCwgKmVuY2Jhc2U7XG4tXHR1MzIgZW5jdHlwZTtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoIWtleSlcbitcdGlmICghY21fa2V5KVxuIFx0XHRyZXR1cm4gLUVOT0tFWTtcbiBcbiBcdC8qIEFzc3VtZSB0aGF0IHRoZSBmaWxlc2VydmVyIGlzIGhhcHB5IHRvIHVzZSB0aGUgc2FtZSBlbmNvZGluZyB0eXBlIGFzXG4gXHQgKiB3ZSB3ZXJlIHRvbGQgdG8gdXNlIGJ5IHRoZSB0b2tlbiBvYnRhaW5lZCBieSB0aGUgdXNlci5cbiBcdCAqL1xuLVx0ZW5jdHlwZSA9IHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShjaGFsbGVuZ2UpO1xuLVxuIFx0Y29ubl9rcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGVuY3R5cGUpO1xuIFx0aWYgKCFjb25uX2tyYjUpXG4gXHRcdHJldHVybiAtRU5PUEtHO1xuLVx0dG9rZW5fa3JiNSA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4tXHR0b2tlbl9rZXkgPSAoY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICopXHUwMDI2a2V5LVx1MDAzZXBheWxvYWQuZGF0YVsyXTtcbitcdHRva2VuX2tyYjUgPSBjbV9rZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xuK1x0dG9rZW5fa2V5ID0gKGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqKVx1MDAyNmNtX2tleS1cdTAwM2VwYXlsb2FkLmRhdGFbMl07XG4gXG4gXHQvKiBzdHJ1Y3Qgcnhna19rZXkge1xuIFx0ICpcdGFmc191aW50MzJcdGVuY3R5cGU7XG5AQCAtMzI3LDkgKzE3MywyMyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9hZWFkO1xuIFxuLVx0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5sZW4gID0gYWRhdGFzaXplO1xuLVx0c2VydmVyLVx1MDAzZWNtX3J4Z2tfYXBwZGF0YS5kYXRhID0gYXBwZGF0YTtcbi1cdGFwcGRhdGEgPSBOVUxMO1xuK1x0YXBwZGF0YV9rZXkgPSBrZXlfYWxsb2MoXHUwMDI2a2V5X3R5cGVfdXNlciwgXCJyeHJwYzogYWZzIHJ4Z2sgYXBwZGF0YVwiLFxuK1x0XHRcdFx0R0xPQkFMX1JPT1RfVUlELCBHTE9CQUxfUk9PVF9HSUQsIGN1cnJlbnRfY3JlZCgpLFxuK1x0XHRcdFx0S0VZX1BPU19WSUVXIHwgS0VZX1BPU19TRUFSQ0ggfCBLRVlfVVNSX1ZJRVcsXG4rXHRcdFx0XHRLRVlfQUxMT0NfTk9UX0lOX1FVT1RBLCBOVUxMKTtcbitcdGlmIChJU19FUlIoYXBwZGF0YV9rZXkpKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIoYXBwZGF0YV9rZXkpO1xuK1x0XHRnb3RvIG91dF9hZWFkO1xuK1x0fVxuK1xuK1x0cmV0ID0ga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rKGFwcGRhdGFfa2V5LCBhcHBkYXRhLCBhZGF0YXNpemUsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRrZXlfcHV0KGFwcGRhdGFfa2V5KTtcbitcdFx0Z290byBvdXRfYWVhZDtcbitcdH1cbitcbitcdC8qIFN0b3JlIHRoZSBhcHBkYXRhIGJlZm9yZSB0aGUga2V5IHBvaW50ZXIgKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNlcnZlci1cdTAwM2V5ZnNfcnhna19hcHBkYXRhLCBhcHBkYXRhX2tleSk7XG4gXG4gb3V0X2FlYWQ6XG4gXHRjcnlwdG9fZnJlZV9hZWFkKGFlYWQpO1xuQEAgLTMzOSwzICsxOTksMTE2IEBAIHN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4oc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbiBcdHJldHVybiByZXQ7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfUlhHSyAqL1xuK1xuKy8qXG4rICogQ3JlYXRlIHRoZSBhcHBsaWNhdGlvbiBkYXRhIHRvIGdvIGluIGEgUkVTUE9OU0UgcGFja2V0IGEgc2VydmVyJ3MgQ0hBTExFTkdFXG4rICogZnJvbSB0aGUgcGFyYW1ldGVycyBjb250YWluZWQgaW4gYSBrZXkuICBUaGUga2V5IHNwZWNpZmllcyB0aGUgc2VjdXJpdHlcbisgKiBpbmRleCBhbmQgb3RoZXIgYXBwcm9wcmlhdGUgcGFyYW1ldGVycyBzdWNoIGFzIHRoZSBlbmNvZGluZyB0eXBlIGZvciBSeEdLLlxuKyAqL1xuK2ludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSlcbit7XG4rXHR1MzIga3JiNV9lbmN0eXBlO1xuK1x0aW50IHJldDtcbitcdHU4IHNlY3VyaXR5X2luZGV4O1xuK1xuK1x0aWYgKCFrZXkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cnhycGNfa2VybmVsX3F1ZXJ5X2tleShrZXksIFx1MDAyNnNlY3VyaXR5X2luZGV4LCBcdTAwMjZrcmI1X2VuY3R5cGUpO1xuK1xuK1x0X2VudGVyKFwiJXUsJXVcIiwgc2VjdXJpdHlfaW5kZXgsIGtyYjVfZW5jdHlwZSk7XG4rXG4rXHRzd2l0Y2ggKHNlY3VyaXR5X2luZGV4KSB7XG4rI2lmZGVmIENPTkZJR19SWEdLXG4rXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxuK1x0XHQvKiBSZWFkIHRoZSBrZXkgcG9pbnRlciBiZWZvcmUgdGhlIGFwcGRhdGEgKi9cbitcdFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2c2VydmVyLVx1MDAzZXlmc19yeGdrX2FwcGRhdGEpKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cmV0ID0gMDtcbitcdG11dGV4X2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZWNtX3Rva2VuX2xvY2spO1xuK1xuK1x0c3dpdGNoIChzZWN1cml0eV9pbmRleCkge1xuKyNpZmRlZiBDT05GSUdfUlhHS1xuK1x0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbitcdFx0LyogUmVhZCB0aGUga2V5IHBvaW50ZXIgYmVmb3JlIHRoZSBhcHBkYXRhICovXG4rXHRcdGlmIChzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNlcnZlci1cdTAwM2V5ZnNfcnhna19hcHBkYXRhKSlcbitcdFx0XHRicmVhaztcbitcdFx0cmV0ID0gYWZzX2NyZWF0ZV95ZnNfcnhna19jbV9hcHBkYXRhKHNlcnZlciwga3JiNV9lbmN0eXBlKTtcbitcdFx0YnJlYWs7XG4rI2VuZGlmXG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZzZXJ2ZXItXHUwMDNlY21fdG9rZW5fbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisjaWZkZWYgQ09ORklHX1JYR0tcbisvKlxuKyAqIENyZWF0ZSBhIHNlY3VyaXRpZXMga2V5cmluZyBmb3IgdGhlIGNhY2hlIG1hbmFnZXIgYW5kIGF0dGFjaCBhIGtleSB0byBpdCBmb3JcbisgKiB0aGUgUnhHSyB0b2tlbnMgd2Ugd2FudCB0byB1c2UgdG8gc2VjdXJlIHRoZSBjYWxsYmFjayBjb25uZWN0aW9uIGJhY2sgZnJvbVxuKyAqIHRoZSBmaWxlc2VydmVyLlxuKyAqL1xuK2ludCBhZnNfY3JlYXRlX3Rva2VuX2tleShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNTtcbitcdHN0cnVjdCBrZXkgKnJpbmc7XG4rXHRrZXlfcmVmX3Qga2V5O1xuK1x0Y2hhciBLMFszMl0sICpkZXNjO1xuK1x0aW50IHJldDtcbitcbitcdHJpbmcgPSBrZXlyaW5nX2FsbG9jKFwia2Fmc1wiLFxuK1x0XHRcdCAgICAgR0xPQkFMX1JPT1RfVUlELCBHTE9CQUxfUk9PVF9HSUQsIGN1cnJlbnRfY3JlZCgpLFxuK1x0XHRcdCAgICAgS0VZX1BPU19TRUFSQ0ggfCBLRVlfUE9TX1dSSVRFIHxcbitcdFx0XHQgICAgIEtFWV9VU1JfVklFVyB8IEtFWV9VU1JfUkVBRCB8IEtFWV9VU1JfU0VBUkNILFxuK1x0XHRcdCAgICAgS0VZX0FMTE9DX05PVF9JTl9RVU9UQSxcbitcdFx0XHQgICAgIE5VTEwsIE5VTEwpO1xuK1x0aWYgKElTX0VSUihyaW5nKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocmluZyk7XG4rXG4rXHRyZXQgPSByeHJwY19zb2NrX3NldF9zZWN1cml0eV9rZXlyaW5nKHNvY2tldC1cdTAwM2VzaywgcmluZyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IC1FTk9QS0c7XG4rXHRrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKEtSQjVfRU5DVFlQRV9BRVMxMjhfQ1RTX0hNQUNfU0hBMV85Nik7XG4rXHRpZiAoIWtyYjUpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShrcmI1LVx1MDAzZWtleV9sZW4gXHUwMDNlIHNpemVvZihLMCkpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IC1FTk9NRU07XG4rXHRkZXNjID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsIFwiJXU6JXU6JXU6JXVcIixcbitcdFx0XHQgWUZTX0NNX1NFUlZJQ0UsIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLLCAxLCBrcmI1LVx1MDAzZWV0eXBlKTtcbitcdGlmICghZGVzYylcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR3YWl0X2Zvcl9yYW5kb21fYnl0ZXMoKTtcbitcdGdldF9yYW5kb21fYnl0ZXMoSzAsIGtyYjUtXHUwMDNla2V5X2xlbik7XG4rXG4rXHRrZXkgPSBrZXlfY3JlYXRlKG1ha2Vfa2V5X3JlZihyaW5nLCB0cnVlKSxcbitcdFx0XHQgXCJyeHJwY19zXCIsIGRlc2MsXG4rXHRcdFx0IEswLCBrcmI1LVx1MDAzZWtleV9sZW4sXG4rXHRcdFx0IEtFWV9QT1NfVklFVyB8IEtFWV9QT1NfUkVBRCB8IEtFWV9QT1NfU0VBUkNIIHwgS0VZX1VTUl9WSUVXLFxuK1x0XHRcdCBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTtcbitcdGtmcmVlKGRlc2MpO1xuK1x0aWYgKElTX0VSUihrZXkpKSB7XG4rXHRcdHJldCA9IFBUUl9FUlIoa2V5KTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRuZXQtXHUwMDNlZnNfY21fdG9rZW5fa2V5ID0ga2V5X3JlZl90b19wdHIoa2V5KTtcbitcdHJldCA9IDA7XG4rb3V0OlxuK1x0a2V5X3B1dChyaW5nKTtcbitcdHJldHVybiByZXQ7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfUlhHSyAqL1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbXNlcnZpY2UuYyBiL2ZzL2Fmcy9jbXNlcnZpY2UuY1xuaW5kZXggZGIzOTRmMTAxZmM2NmEuLjMyMTIwYmMxZGNiMDkxIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Ntc2VydmljZS5jXG4rKysgYi9mcy9hZnMvY21zZXJ2aWNlLmNcbkBAIC0yMywxMSArMjMsMTEgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9jYWxsYmFjayhzdHJ1Y3QgYWZzX2NhbGwgKik7XG4gc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqKTtcbiBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3RlbGxfbWVfYWJvdXRfeW91cnNlbGYoc3RydWN0IGFmc19jYWxsICopO1xuIHN0YXRpYyB2b2lkIGFmc19jbV9kZXN0cnVjdG9yKHN0cnVjdCBhZnNfY2FsbCAqKTtcbi1zdGF0aWMgdm9pZCBTUlhBRlNDQl9DYWxsQmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG4tc3RhdGljIHZvaWQgU1JYQUZTQ0JfSW5pdENhbGxCYWNrU3RhdGUoc3RydWN0IHdvcmtfc3RydWN0ICopO1xuLXN0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcbi1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZVV1aWQoc3RydWN0IHdvcmtfc3RydWN0ICopO1xuLXN0YXRpYyB2b2lkIFNSWEFGU0NCX1RlbGxNZUFib3V0WW91cnNlbGYoc3RydWN0IHdvcmtfc3RydWN0ICopO1xuK3N0YXRpYyB2b2lkIFNSWEFGU0NCX0NhbGxCYWNrKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XG4rc3RhdGljIHZvaWQgU1JYQUZTQ0JfSW5pdENhbGxCYWNrU3RhdGUoc3RydWN0IGFmc19jYWxsICpjYWxsKTtcbitzdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpO1xuK3N0YXRpYyB2b2lkIFNSWEFGU0NCX1Byb2JlVXVpZChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpO1xuK3N0YXRpYyB2b2lkIFNSWEFGU0NCX1RlbGxNZUFib3V0WW91cnNlbGYoc3RydWN0IGFmc19jYWxsICpjYWxsKTtcbiBcbiBzdGF0aWMgaW50IGFmc19kZWxpdmVyX3lmc19jYl9jYWxsYmFjayhzdHJ1Y3QgYWZzX2NhbGwgKik7XG4gXG5AQCAtMTYxLDEwICsxNjEsOCBAQCBzdGF0aWMgdm9pZCBhZnNfYWJvcnRfc2VydmljZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdTMyIGFib3J0X2NvZGUsIGludCBlclxuIC8qXG4gICogVGhlIHNlcnZlciBzdXBwbGllZCBhIGxpc3Qgb2YgY2FsbGJhY2tzIHRoYXQgaXQgd2FudGVkIHRvIGJyZWFrLlxuICAqL1xuLXN0YXRpYyB2b2lkIFNSWEFGU0NCX0NhbGxCYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbitzdGF0aWMgdm9pZCBTUlhBRlNDQl9DYWxsQmFjayhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4ge1xuLVx0c3RydWN0IGFmc19jYWxsICpjYWxsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfY2FsbCwgd29yayk7XG4tXG4gXHRfZW50ZXIoXCJcIik7XG4gXG4gXHQvKiBXZSBuZWVkIHRvIGJyZWFrIHRoZSBjYWxsYmFja3MgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcGx5IGFzIHRoZVxuQEAgLTE4MCw3ICsxNzgsNiBAQCBzdGF0aWMgdm9pZCBTUlhBRlNDQl9DYWxsQmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR9XG4gXG4gXHRhZnNfc2VuZF9lbXB0eV9yZXBseShjYWxsKTtcbi1cdGFmc19wdXRfY2FsbChjYWxsKTtcbiBcdF9sZWF2ZShcIlwiKTtcbiB9XG4gXG5AQCAtMjg0LDE2ICsyODEsMTMgQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9jYWxsYmFjayhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4gLypcbiAgKiBhbGxvdyB0aGUgZmlsZXNlcnZlciB0byByZXF1ZXN0IGNhbGxiYWNrIHN0YXRlIChyZS0paW5pdGlhbGlzYXRpb25cbiAgKi9cbi1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Jbml0Q2FsbEJhY2tTdGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4rc3RhdGljIHZvaWQgU1JYQUZTQ0JfSW5pdENhbGxCYWNrU3RhdGUoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIHtcbi1cdHN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX2NhbGwsIHdvcmspO1xuLVxuIFx0X2VudGVyKFwieyVwfVwiLCBjYWxsLVx1MDAzZXNlcnZlcik7XG4gXG4gXHRpZiAoY2FsbC1cdTAwM2VzZXJ2ZXIpXG4gXHRcdGFmc19pbml0X2NhbGxiYWNrX3N0YXRlKGNhbGwtXHUwMDNlc2VydmVyKTtcbiBcdGFmc19zZW5kX2VtcHR5X3JlcGx5KGNhbGwpO1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuIFx0X2xlYXZlKFwiXCIpO1xuIH1cbiBcbkBAIC0zODAsMTMgKzM3NCwxMCBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX2luaXRfY2FsbF9iYWNrX3N0YXRlMyhzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4gLypcbiAgKiBhbGxvdyB0aGUgZmlsZXNlcnZlciB0byBzZWUgaWYgdGhlIGNhY2hlIG1hbmFnZXIgaXMgc3RpbGwgYWxpdmVcbiAgKi9cbi1zdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4rc3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmUoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIHtcbi1cdHN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX2NhbGwsIHdvcmspO1xuLVxuIFx0X2VudGVyKFwiXCIpO1xuIFx0YWZzX3NlbmRfZW1wdHlfcmVwbHkoY2FsbCk7XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4gXHRfbGVhdmUoXCJcIik7XG4gfVxuIFxuQEAgLTQxMyw5ICs0MDQsOCBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NiX3Byb2JlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiAgKiBBbGxvdyB0aGUgZmlsZXNlcnZlciB0byBxdWlja2x5IGZpbmQgb3V0IGlmIHRoZSBjYWNoZSBtYW5hZ2VyIGhhcyBiZWVuXG4gICogcmVib290ZWQuXG4gICovXG4tc3RhdGljIHZvaWQgU1JYQUZTQ0JfUHJvYmVVdWlkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbitzdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZVV1aWQoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIHtcbi1cdHN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX2NhbGwsIHdvcmspO1xuIFx0c3RydWN0IGFmc191dWlkICpyID0gY2FsbC1cdTAwM2VyZXF1ZXN0O1xuIFxuIFx0X2VudGVyKFwiXCIpO1xuQEAgLTQyNSw3ICs0MTUsNiBAQCBzdGF0aWMgdm9pZCBTUlhBRlNDQl9Qcm9iZVV1aWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0ZWxzZVxuIFx0XHRhZnNfYWJvcnRfc2VydmljZV9jYWxsKGNhbGwsIDEsIDEsIGFmc19hYm9ydF9wcm9iZXV1aWRfbmVnYXRpdmUpO1xuIFxuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuIFx0X2xlYXZlKFwiXCIpO1xuIH1cbiBcbkBAIC00ODksOSArNDc4LDggQEAgc3RhdGljIGludCBhZnNfZGVsaXZlcl9jYl9wcm9iZV91dWlkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiAvKlxuICAqIGFsbG93IHRoZSBmaWxlc2VydmVyIHRvIGFzayBhYm91dCB0aGUgY2FjaGUgbWFuYWdlcidzIGNhcGFiaWxpdGllc1xuICAqL1xuLXN0YXRpYyB2b2lkIFNSWEFGU0NCX1RlbGxNZUFib3V0WW91cnNlbGYoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3N0YXRpYyB2b2lkIFNSWEFGU0NCX1RlbGxNZUFib3V0WW91cnNlbGYoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIHtcbi1cdHN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWZzX2NhbGwsIHdvcmspO1xuIFx0aW50IGxvb3A7XG4gXG4gXHRzdHJ1Y3Qge1xuQEAgLTUyMyw3ICs1MTEsNiBAQCBzdGF0aWMgdm9pZCBTUlhBRlNDQl9UZWxsTWVBYm91dFlvdXJzZWxmKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJlcGx5LmNhcC5jYXBjb3VudCA9IGh0b25sKDEpO1xuIFx0cmVwbHkuY2FwLmNhcHNbMF0gPSBodG9ubChBRlNfQ0FQX0VSUk9SX1RSQU5TTEFUSU9OKTtcbiBcdGFmc19zZW5kX3NpbXBsZV9yZXBseShjYWxsLCBcdTAwMjZyZXBseSwgc2l6ZW9mKHJlcGx5KSk7XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4gXHRfbGVhdmUoXCJcIik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9maWxlLmMgYi9mcy9hZnMvZmlsZS5jXG5pbmRleCAwNDY3NzQyYmZlZWUzNC4uNjI1ZGM2N2Y3OWYzNjYgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZmlsZS5jXG4rKysgYi9mcy9hZnMvZmlsZS5jXG5AQCAtMjk4LDcgKzI5OCw3IEBAIHN0YXRpYyB2b2lkIGFmc19yZWFkX3JlY2VpdmUoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIFx0b3AtXHUwMDNlY2FsbF9yZXNwb25kZWRcdD0gY2FsbC1cdTAwM2VyZXNwb25kZWQ7XG4gXHRvcC1cdTAwM2VjYWxsXHRcdD0gTlVMTDtcbiBcdGNhbGwtXHUwMDNlb3BcdFx0PSBOVUxMO1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuK1x0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9yZWFkX29wKTtcbiBcbiBcdC8qIElmIHRoZSBjYWxsIGZhaWxlZCwgdGhlbiB3ZSBuZWVkIHRvIGNyYW5rIHRoZSBzZXJ2ZXIgcm90YXRpb25cbiBcdCAqIGhhbmRsZSBhbmQgdHJ5IHRoZSBuZXh0LlxuQEAgLTMxNiwxNSArMzE2LDE3IEBAIHZvaWQgYWZzX2ZldGNoX2RhdGFfYXN5bmNfcngoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IGFmc19jYWxsICpjYWxsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZnNfY2FsbCwgYXN5bmNfd29yayk7XG4gXG4gXHRhZnNfcmVhZF9yZWNlaXZlKGNhbGwpO1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuK1xuK1x0aWYgKGNhbGwtXHUwMDNlc3RhdGUgPT0gQUZTX0NBTExfQ09NUExFVEUpIHtcbitcdFx0Y2FuY2VsX3dvcmsoXHUwMDI2Y2FsbC1cdTAwM2Vhc3luY193b3JrKTtcbitcdFx0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9yZWFkX2NvbXBsZXRlKTtcbitcdH1cbiB9XG4gXG4gdm9pZCBhZnNfZmV0Y2hfZGF0YV9pbW1lZGlhdGVfY2FuY2VsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiB7XG4gXHRpZiAoY2FsbC1cdTAwM2Vhc3luYykge1xuLVx0XHRhZnNfZ2V0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2Vfd2FrZSk7XG4tXHRcdGlmICghcXVldWVfd29yayhhZnNfYXN5bmNfY2FsbHMsIFx1MDAyNmNhbGwtXHUwMDNlYXN5bmNfd29yaykpXG4tXHRcdFx0YWZzX2RlZmVycmVkX3B1dF9jYWxsKGNhbGwpO1xuK1x0XHRxdWV1ZV93b3JrKGFmc19hc3luY19jYWxscywgXHUwMDI2Y2FsbC1cdTAwM2Vhc3luY193b3JrKTtcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZjYWxsLVx1MDAzZWFzeW5jX3dvcmspO1xuIFx0fVxuIH1cbmRpZmYgLS1naXQgYS9mcy9hZnMvZnNfb3BlcmF0aW9uLmMgYi9mcy9hZnMvZnNfb3BlcmF0aW9uLmNcbmluZGV4IDIwODAxYjI5NTIxZDFlLi5iODg3MDQ3Mzk4YjljYiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9mc19vcGVyYXRpb24uY1xuKysrIGIvZnMvYWZzL2ZzX29wZXJhdGlvbi5jXG5AQCAtMjk2LDcgKzI5Niw3IEBAIHZvaWQgYWZzX3dhaXRfZm9yX29wZXJhdGlvbihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4gXHRcdFx0b3AtXHUwMDNlY2FsbF9hYm9ydF9jb2RlID0gb3AtXHUwMDNlY2FsbC1cdTAwM2VhYm9ydF9jb2RlO1xuIFx0XHRcdG9wLVx1MDAzZWNhbGxfZXJyb3IgPSBvcC1cdTAwM2VjYWxsLVx1MDAzZWVycm9yO1xuIFx0XHRcdG9wLVx1MDAzZWNhbGxfcmVzcG9uZGVkID0gb3AtXHUwMDNlY2FsbC1cdTAwM2VyZXNwb25kZWQ7XG4tXHRcdFx0YWZzX3B1dF9jYWxsKG9wLVx1MDAzZWNhbGwpO1xuK1x0XHRcdGFmc19wdXRfY2FsbChvcC1cdTAwM2VjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfd2FpdF9vcCk7XG4gXHRcdH1cbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9hZnMvZnNfcHJvYmUuYyBiL2ZzL2Fmcy9mc19wcm9iZS5jXG5pbmRleCBhOTFhZDE5MzhkMDc4OC4uZTI2ZjdmMWUzMGEyM2EgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZnNfcHJvYmUuY1xuKysrIGIvZnMvYWZzL2ZzX3Byb2JlLmNcbkBAIC0yNDEsOSArMjQxLDE0IEBAIGludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuIFx0c3RydWN0IGFmc19lbmRwb2ludF9zdGF0ZSAqZXN0YXRlLCAqb2xkO1xuIFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKm9sZF9hbGlzdCA9IE5VTEwsICphbGlzdDtcbiBcdHVuc2lnbmVkIGxvbmcgdW5wcm9iZWQ7XG4rXHRpbnQgcmV0O1xuIFxuIFx0X2VudGVyKFwiJXBVXCIsIFx1MDAyNnNlcnZlci1cdTAwM2V1dWlkKTtcbiBcbitcdHJldCA9IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc2VydmVyLCBrZXkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdGVzdGF0ZSA9IGt6YWxsb2Nfb2JqKCplc3RhdGUpO1xuIFx0aWYgKCFlc3RhdGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc2NsaWVudC5jIGIvZnMvYWZzL2ZzY2xpZW50LmNcbmluZGV4IGEyZmZkNjA4ODlmODlkLi45YWNhZDUwMTdmYmFiMyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9mc2NsaWVudC5jXG4rKysgYi9mcy9hZnMvZnNjbGllbnQuY1xuQEAgLTQ3Nyw2ICs0NzcsOSBAQCB2b2lkIGFmc19mc19mZXRjaF9kYXRhKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbiBcdGlmICghY2FsbClcbiBcdFx0cmV0dXJuIGFmc19vcF9ub21lbShvcCk7XG4gXG4rXHRpZiAob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEFGU19PUEVSQVRJT05fQVNZTkMpXG4rXHRcdGNhbGwtXHUwMDNlYXN5bmMgPSB0cnVlO1xuK1xuIFx0LyogbWFyc2hhbGwgdGhlIHBhcmFtZXRlcnMgKi9cbiBcdGJwID0gY2FsbC1cdTAwM2VyZXF1ZXN0O1xuIFx0YnBbMF0gPSBodG9ubChGU0ZFVENIREFUQSk7XG5AQCAtMTY1OSw3ICsxNjYyLDcgQEAgaW50IGFmc19mc19naXZlX3VwX2FsbF9jYWxsYmFja3Moc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbiBcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4gXHRpZiAoY2FsbC1cdTAwM2VyZXNwb25kZWQpXG4gXHRcdHNldF9iaXQoQUZTX1NFUlZFUl9GTF9SRVNQT05ESU5HLCBcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MpO1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuK1x0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9naXZldXBjYWxsYmFja3MpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTc3NSw3ICsxNzc4LDcgQEAgYm9vbCBhZnNfZnNfZ2V0X2NhcGFiaWxpdGllcyhzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuIFxuIFx0dHJhY2VfYWZzX21ha2VfZnNfY2FsbChjYWxsLCBOVUxMKTtcbiBcdGFmc19tYWtlX2NhbGwoY2FsbCwgR0ZQX05PRlMpO1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuK1x0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9nZXRfY2FwYWJpbGl0aWVzKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5pbmRleCA2MDFmMDFlNWMxNWZjYy4uOTMyMjIzNGNlN2Y3NDkgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xMjksNyArMTI5LDcgQEAgc3RydWN0IGFmc19jYWxsIHtcbiBcdGNvbnN0IHN0cnVjdCBhZnNfY2FsbF90eXBlICp0eXBlO1x0LyogdHlwZSBvZiBjYWxsICovXG4gXHR3YWl0X3F1ZXVlX2hlYWRfdFx0d2FpdHE7XHRcdC8qIHByb2Nlc3NlcyBhd2FpdGluZyBjb21wbGV0aW9uICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGFzeW5jX3dvcms7XHQvKiBhc3luYyBJL08gcHJvY2Vzc29yICovXG4tXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XHRcdC8qIGFjdHVhbCB3b3JrIHByb2Nlc3NvciAqL1xuK1x0dm9pZCAoKndvcmspKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XHQvKiBXb3JrZXIgZnVuY3Rpb24gKi9cbiBcdHN0cnVjdCB3b3JrX3N0cnVjdFx0ZnJlZV93b3JrO1x0LyogRGVmZXJyZWQgZnJlZSBwcm9jZXNzb3IgKi9cbiBcdHN0cnVjdCByeHJwY19jYWxsXHQqcnhjYWxsO1x0LyogUnhSUEMgY2FsbCBoYW5kbGUgKi9cbiBcdHN0cnVjdCByeHJwY19wZWVyXHQqcGVlcjtcdFx0LyogUmVtb3RlIGVuZHBvaW50ICovXG5AQCAtMTY5LDcgKzE2OSw2IEBAIHN0cnVjdCBhZnNfY2FsbCB7XG4gXHR1bnNpZ25lZFx0XHRyZXBseV9tYXg7XHQvKiBtYXhpbXVtIHNpemUgb2YgcmVwbHkgKi9cbiBcdHVuc2lnbmVkXHRcdGNvdW50MjtcdFx0LyogY291bnQgdXNlZCBpbiB1bm1hcnNoYWxsaW5nICovXG4gXHR1bnNpZ25lZCBjaGFyXHRcdHVubWFyc2hhbGw7XHQvKiB1bm1hcnNoYWxsaW5nIHBoYXNlICovXG4tXHRib29sXHRcdFx0ZHJvcF9yZWY7XHQvKiBUIGlmIG5lZWQgdG8gZHJvcCByZWYgZm9yIGluY29taW5nIGNhbGwgKi9cbiBcdGJvb2xcdFx0XHRuZWVkX2F0dGVudGlvbjtcdC8qIFQgaWYgUnhSUEMgcG9rZWQgdXMgKi9cbiBcdGJvb2xcdFx0XHRhc3luYztcdFx0LyogVCBpZiBhc3luY2hyb25vdXMgKi9cbiBcdGJvb2xcdFx0XHR1cGdyYWRlO1x0LyogVCB0byByZXF1ZXN0IHNlcnZpY2UgdXBncmFkZSAqL1xuQEAgLTIwOCw3ICsyMDcsNyBAQCBzdHJ1Y3QgYWZzX2NhbGxfdHlwZSB7XG4gXHR2b2lkICgqYXN5bmNfcngpKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gXG4gXHQvKiBXb3JrIGZ1bmN0aW9uICovXG4tXHR2b2lkICgqd29yaykoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbitcdHZvaWQgKCp3b3JrKShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpO1xuIFxuIFx0LyogQ2FsbCBkb25lIGZ1bmN0aW9uIChnZXRzIGNhbGxlZCBpbW1lZGlhdGVseSBvbiBzdWNjZXNzIG9yIGZhaWx1cmUpICovXG4gXHR2b2lkICgqZG9uZSkoc3RydWN0IGFmc19jYWxsICpjYWxsKTtcbkBAIC0yODMsNyArMjgyLDYgQEAgc3RydWN0IGFmc19uZXQge1xuIFx0c3RydWN0IHNvY2tldFx0XHQqc29ja2V0O1xuIFx0c3RydWN0IGFmc19jYWxsXHRcdCpzcGFyZV9pbmNvbWluZ19jYWxsO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0XHRjaGFyZ2VfcHJlYWxsb2NhdGlvbl93b3JrO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0XHRyeF9vb2Jfd29yaztcbiBcdHN0cnVjdCBtdXRleFx0XHRzb2NrZXRfbXV0ZXg7XG4gXHRhdG9taWNfdFx0XHRucl9vdXRzdGFuZGluZ19jYWxscztcbiBcdGF0b21pY190XHRcdG5yX3N1cGVyYmxvY2tzO1xuQEAgLTU0OCw3ICs1NDYsNyBAQCBzdHJ1Y3QgYWZzX3NlcnZlciB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdGRlc3Ryb3llcjtcdC8qIFdvcmsgaXRlbSB0byB0cnkgYW5kIGRlc3Ryb3kgYSBzZXJ2ZXIgKi9cbiBcdHN0cnVjdCB0aW1lcl9saXN0XHR0aW1lcjtcdFx0LyogTWFuYWdlbWVudCB0aW1lciAqL1xuIFx0c3RydWN0IG11dGV4XHRcdGNtX3Rva2VuX2xvY2s7XHQvKiBMb2NrIGdvdmVybmluZyBjcmVhdGlvbiBvZiBhcHBkYXRhICovXG4tXHRzdHJ1Y3Qga3JiNV9idWZmZXJcdGNtX3J4Z2tfYXBwZGF0YTsgLyogQXBwZGF0YSB0byBiZSBpbmNsdWRlZCBpbiBSRVNQT05TRSBwYWNrZXQgKi9cbitcdHN0cnVjdCBrZXlcdFx0Knlmc19yeGdrX2FwcGRhdGE7IC8qIEFwcGRhdGEgdG8gYmUgaW5jbHVkZWQgaW4gUkVTUE9OU0UgcGFja2V0ICovXG4gXHR0aW1lNjRfdFx0XHR1bnVzZV90aW1lO1x0LyogVGltZSBhdCB3aGljaCBsYXN0IHVudXNlZCAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcbiAjZGVmaW5lIEFGU19TRVJWRVJfRkxfUkVTUE9ORElORyAwXHRcdC8qIFRoZSBzZXJ2ZXIgaXMgcmVzcG9uZGluZyAqL1xuQEAgLTEwODksNyArMTA4Nyw3IEBAIGV4dGVybiBib29sIGFmc19jbV9pbmNvbWluZ19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqKTtcbiAvKlxuICAqIGNtX3NlY3VyaXR5LmNcbiAgKi9cbi12b2lkIGFmc19wcm9jZXNzX29vYl9xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuK2ludCBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBrZXkgKmtleSk7XG4gI2lmZGVmIENPTkZJR19SWEdLXG4gaW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldCk7XG4gI2Vsc2VcbkBAIC0xMzgwLDggKzEzNzgsNyBAQCBleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmFmc19hc3luY19jYWxscztcbiBleHRlcm4gaW50IF9fbmV0X2luaXQgYWZzX29wZW5fc29ja2V0KHN0cnVjdCBhZnNfbmV0ICopO1xuIGV4dGVybiB2b2lkIF9fbmV0X2V4aXQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqKTtcbiBleHRlcm4gdm9pZCBhZnNfY2hhcmdlX3ByZWFsbG9jYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICopO1xuLWV4dGVybiB2b2lkIGFmc19wdXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XG4tdm9pZCBhZnNfZGVmZXJyZWRfcHV0X2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKTtcbit2b2lkIGFmc19wdXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2UgdHJhY2UpO1xuIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcCk7XG4gdm9pZCBhZnNfZGVsaXZlcl90b19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCk7XG4gdm9pZCBhZnNfd2FpdF9mb3JfY2FsbF90b19jb21wbGV0ZShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpO1xuQEAgLTE0MDIsOCArMTM5OSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFmc19jYWxsICphZnNfZ2V0X2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLFxuIFx0X19yZWZjb3VudF9pbmMoXHUwMDI2Y2FsbC1cdTAwM2VyZWYsIFx1MDAyNnIpO1xuIFxuIFx0dHJhY2VfYWZzX2NhbGwoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgd2h5LCByICsgMSxcbi1cdFx0ICAgICAgIGF0b21pY19yZWFkKFx1MDAyNmNhbGwtXHUwMDNlbmV0LVx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKSxcbi1cdFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4rXHRcdCAgICAgICBhdG9taWNfcmVhZChcdTAwMjZjYWxsLVx1MDAzZW5ldC1cdTAwM2Vucl9vdXRzdGFuZGluZ19jYWxscykpO1xuIFx0cmV0dXJuIGNhbGw7XG4gfVxuIFxuQEAgLTE0MTIsMjMgKzE0MDgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NlZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZW51bSBhZnNfY2FsbF90cmFjZSB3aHkpXG4gXHRpbnQgciA9IHJlZmNvdW50X3JlYWQoXHUwMDI2Y2FsbC1cdTAwM2VyZWYpO1xuIFxuIFx0dHJhY2VfYWZzX2NhbGwoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgd2h5LCByLFxuLVx0XHQgICAgICAgYXRvbWljX3JlYWQoXHUwMDI2Y2FsbC1cdTAwM2VuZXQtXHUwMDNlbnJfb3V0c3RhbmRpbmdfY2FsbHMpLFxuLVx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4tXHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuLXtcbi1cdHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLVx1MDAzZWVzdGF0ZS1cdTAwM2VhZGRyZXNzZXM7XG4tXG4tXHRvcC1cdTAwM2VjYWxsXHQ9IGNhbGw7XG4tXHRvcC1cdTAwM2V0eXBlXHQ9IGNhbGwtXHUwMDNldHlwZTtcbi1cdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4tXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG4tXHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuLVx0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbi1cdGNhbGwtXHUwMDNlc2VydmljZV9pZCA9IG9wLVx1MDAzZXNlcnZlci1cdTAwM2VzZXJ2aWNlX2lkO1xuLVx0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuK1x0XHQgICAgICAgYXRvbWljX3JlYWQoXHUwMDI2Y2FsbC1cdTAwM2VuZXQtXHUwMDNlbnJfb3V0c3RhbmRpbmdfY2FsbHMpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbkBAIC0xNDk0LDcgKzE0NzQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NldF9jYWxsX2NvbXBsZXRlKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbiBcdFx0XHRcdFx0IGludCBlcnJvciwgdTMyIHJlbW90ZV9hYm9ydClcbiB7XG4gXHRlbnVtIGFmc19jYWxsX3N0YXRlIHN0YXRlO1xuLVx0Ym9vbCBvayA9IGZhbHNlO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNhbGwtXHUwMDNlc3RhdGVfbG9jayk7XG4gXHRzdGF0ZSA9IGNhbGwtXHUwMDNlc3RhdGU7XG5AQCAtMTUwNCwxOSArMTQ4Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfc2V0X2NhbGxfY29tcGxldGUoc3RydWN0IGFmc19jYWxsICpjYWxsLFxuIFx0XHRjYWxsLVx1MDAzZXN0YXRlID0gQUZTX0NBTExfQ09NUExFVEU7XG4gXHRcdHRyYWNlX2Fmc19jYWxsX3N0YXRlKGNhbGwsIHN0YXRlLCBBRlNfQ0FMTF9DT01QTEVURSxcbiBcdFx0XHRcdCAgICAgZXJyb3IsIHJlbW90ZV9hYm9ydCk7XG4tXHRcdG9rID0gdHJ1ZTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNhbGwtXHUwMDNlc3RhdGVfbG9jayk7XG4tXHRpZiAob2spIHtcbi1cdFx0dHJhY2VfYWZzX2NhbGxfZG9uZShjYWxsKTtcbi1cbi1cdFx0LyogQXN5bmNocm9ub3VzIGNhbGxzIGhhdmUgdHdvIHJlZnMgdG8gcmVsZWFzZSAtIG9uZSBmcm9tIHRoZSBhbGxvYyBhbmRcbi1cdFx0ICogb25lIHF1ZXVlZCB3aXRoIHRoZSB3b3JrIGl0ZW0gLSBhbmQgd2UgY2FuJ3QganVzdCBkZWFsbG9jYXRlIHRoZVxuLVx0XHQgKiBjYWxsIGJlY2F1c2UgdGhlIHdvcmsgaXRlbSBtYXkgYmUgcXVldWVkIGFnYWluLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGNhbGwtXHUwMDNlZHJvcF9yZWYpXG4tXHRcdFx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuLVx0fVxuIH1cbiBcbiAvKlxuQEAgLTE3NjIsNiArMTczMCwyMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXG4gXHRyZXR1cm4gXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuK1x0XHRcdFx0ICAgIGdmcF90IGdmcClcbit7XG4rXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuK1xuK1x0b3AtXHUwMDNlY2FsbFx0PSBhZnNfZ2V0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfZ2V0X29wX2NhbGwpO1xuK1x0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4rXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuK1x0Y2FsbC1cdTAwM2VzZXJ2ZXJcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XG4rXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG4rXHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuK1x0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbitcdGNhbGwtXHUwMDNlc2VydmljZV9pZCA9IG9wLVx1MDAzZXNlcnZlci1cdTAwM2VzZXJ2aWNlX2lkO1xuK1x0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuK1x0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9tYWRlX2NhbGwpO1xuK31cbitcbiAvKlxuICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb25cbiAgKiBudW1iZXIgZGVyaXZlZCBmcm9tIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL21haW4uYyBiL2ZzL2Fmcy9tYWluLmNcbmluZGV4IDdhODgzYzU5OTc2ZmYyLi42MzUzZmVhYTVmYjRiNSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9tYWluLmNcbisrKyBiL2ZzL2Fmcy9tYWluLmNcbkBAIC03Myw3ICs3Myw2IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBhZnNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0X25zKVxuIFx0Z2VuZXJhdGVfcmFuZG9tX3V1aWQoKHVuc2lnbmVkIGNoYXIgKilcdTAwMjZuZXQtXHUwMDNldXVpZCk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZWNoYXJnZV9wcmVhbGxvY2F0aW9uX3dvcmssIGFmc19jaGFyZ2VfcHJlYWxsb2NhdGlvbik7XG4tXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrLCBhZnNfcHJvY2Vzc19vb2JfcXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZuZXQtXHUwMDNlc29ja2V0X211dGV4KTtcbiBcbiBcdG5ldC1cdTAwM2VjZWxscyA9IFJCX1JPT1Q7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuY1xuaW5kZXggZDgyOTE2NjU3YTNkZGYuLjRmNmQ2OTliNWQyMjZhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL3J4cnBjLmNcbisrKyBiL2ZzL2Fmcy9yeHJwYy5jXG5AQCAtMjUsMTQgKzI1LDEyIEBAIHN0YXRpYyB2b2lkIGFmc19wcm9jZXNzX2FzeW5jX2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICopO1xuIHN0YXRpYyB2b2lkIGFmc19yeF9uZXdfY2FsbChzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTtcbiBzdGF0aWMgdm9pZCBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbChzdHJ1Y3QgcnhycGNfY2FsbCAqLCB1bnNpZ25lZCBsb25nKTtcbiBzdGF0aWMgdm9pZCBhZnNfcnhfYXR0YWNoKHN0cnVjdCByeHJwY19jYWxsICpyeGNhbGwsIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lEKTtcbi1zdGF0aWMgdm9pZCBhZnNfcnhfbm90aWZ5X29vYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvb2IpO1xuIHN0YXRpYyBpbnQgYWZzX2RlbGl2ZXJfY21fb3BfaWQoc3RydWN0IGFmc19jYWxsICopO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnhycGNfa2VybmVsX29wcyBhZnNfcnhycGNfY2FsbGJhY2tfb3BzID0ge1xuIFx0Lm5vdGlmeV9uZXdfY2FsbFx0PSBhZnNfcnhfbmV3X2NhbGwsXG4gXHQuZGlzY2FyZF9uZXdfY2FsbFx0PSBhZnNfcnhfZGlzY2FyZF9uZXdfY2FsbCxcbiBcdC51c2VyX2F0dGFjaF9jYWxsXHQ9IGFmc19yeF9hdHRhY2gsXG4tXHQubm90aWZ5X29vYlx0XHQ9IGFmc19yeF9ub3RpZnlfb29iLFxuIH07XG4gXG4gLyogYXN5bmNocm9ub3VzIGluY29taW5nIGNhbGwgaW5pdGlhbCBwcm9jZXNzaW5nICovXG5AQCAtNzQsMTAgKzcyLDYgQEAgaW50IGFmc19vcGVuX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJvcl8yO1xuIFxuLVx0cmV0ID0gcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHNvY2tldC1cdTAwM2VzaywgdHJ1ZSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yXzI7XG4tXG4gXHRyZXQgPSBhZnNfY3JlYXRlX3Rva2VuX2tleShuZXQsIHNvY2tldCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRwcl9lcnIoXCJDb3VsZG4ndCBjcmVhdGUgUnhHSyBDTSBrZXk6ICVkXFxuXCIsIHJldCk7XG5AQCAtMTI4LDcgKzEyMiw2IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0X2VudGVyKFwiXCIpO1xuIFxuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlY2hhcmdlX3ByZWFsbG9jYXRpb25fd29yayk7XG4tXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yayk7XG4gXHQvKiBGdXR1cmUgd29yayBpdGVtcyBzaG91bGQgbm93IHNlZSAtXHUwMDNlbGl2ZSBpcyBmYWxzZS4gKi9cbiBcbiBcdGtlcm5lbF9saXN0ZW4obmV0LVx1MDAzZXNvY2tldCwgMCk7XG5AQCAtMTM4LDcgKzEzMSw3IEBAIHZvaWQgYWZzX2Nsb3NlX3NvY2tldChzdHJ1Y3QgYWZzX25ldCAqbmV0KVxuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZuZXQtXHUwMDNlY2hhcmdlX3ByZWFsbG9jYXRpb25fd29yayk7XG4gXG4gXHRpZiAobmV0LVx1MDAzZXNwYXJlX2luY29taW5nX2NhbGwpIHtcbi1cdFx0YWZzX3B1dF9jYWxsKG5ldC1cdTAwM2VzcGFyZV9pbmNvbWluZ19jYWxsKTtcbitcdFx0YWZzX3B1dF9jYWxsKG5ldC1cdTAwM2VzcGFyZV9pbmNvbWluZ19jYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfc3BhcmVfc3ZjKTtcbiBcdFx0bmV0LVx1MDAzZXNwYXJlX2luY29taW5nX2NhbGwgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTE0OSw3ICsxNDIsNiBAQCB2b2lkIGFmc19jbG9zZV9zb2NrZXQoc3RydWN0IGFmc19uZXQgKm5ldClcbiBcbiBcdGtlcm5lbF9zb2NrX3NodXRkb3duKG5ldC1cdTAwM2Vzb2NrZXQsIFNIVVRfUkRXUik7XG4gXHRmbHVzaF93b3JrcXVldWUoYWZzX2FzeW5jX2NhbGxzKTtcbi1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bmV0LVx1MDAzZXJ4X29vYl93b3JrKTtcbiBcdG5ldC1cdTAwM2Vzb2NrZXQtXHUwMDNlc2stXHUwMDNlc2tfdXNlcl9kYXRhID0gTlVMTDtcbiBcdHNvY2tfcmVsZWFzZShuZXQtXHUwMDNlc29ja2V0KTtcbiBcdGtleV9wdXQobmV0LVx1MDAzZWZzX2NtX3Rva2VuX2tleSk7XG5AQCAtMTc3LDIxICsxNjksMjAgQEAgc3RhdGljIHN0cnVjdCBhZnNfY2FsbCAqYWZzX2FsbG9jX2NhbGwoc3RydWN0IGFmc19uZXQgKm5ldCxcbiBcdGNhbGwtXHUwMDNlZGVidWdfaWQgPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZyeHJwY19kZWJ1Z19pZCk7XG4gXHRyZWZjb3VudF9zZXQoXHUwMDI2Y2FsbC1cdTAwM2VyZWYsIDEpO1xuIFx0SU5JVF9XT1JLKFx1MDAyNmNhbGwtXHUwMDNlYXN5bmNfd29yaywgdHlwZS1cdTAwM2Vhc3luY19yeCA/OiBhZnNfcHJvY2Vzc19hc3luY19jYWxsKTtcbi1cdElOSVRfV09SSyhcdTAwMjZjYWxsLVx1MDAzZXdvcmssIGNhbGwtXHUwMDNldHlwZS1cdTAwM2V3b3JrKTtcbiBcdElOSVRfV09SSyhcdTAwMjZjYWxsLVx1MDAzZWZyZWVfd29yaywgYWZzX2RlZmVycmVkX2ZyZWVfd29ya2VyKTtcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2Y2FsbC1cdTAwM2V3YWl0cSk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZjYWxsLVx1MDAzZXN0YXRlX2xvY2spO1xuIFx0Y2FsbC1cdTAwM2VpdGVyID0gXHUwMDI2Y2FsbC1cdTAwM2VkZWZfaXRlcjtcbiBcbiBcdG8gPSBhdG9taWNfaW5jX3JldHVybihcdTAwMjZuZXQtXHUwMDNlbnJfb3V0c3RhbmRpbmdfY2FsbHMpO1xuLVx0dHJhY2VfYWZzX2NhbGwoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfYWxsb2MsIDEsIG8sXG4tXHRcdCAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuK1x0dHJhY2VfYWZzX2NhbGwoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfYWxsb2MsIDEsIG8pO1xuIFx0cmV0dXJuIGNhbGw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGFmc19mcmVlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIHtcbiBcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjYWxsLVx1MDAzZW5ldDtcbitcdHVuc2lnbmVkIGludCBkZWJ1Z19pZCA9IGNhbGwtXHUwMDNlZGVidWdfaWQ7XG4gXHRpbnQgbztcbiBcbiBcdEFTU0VSVCghd29ya19wZW5kaW5nKFx1MDAyNmNhbGwtXHUwMDNlYXN5bmNfd29yaykpO1xuQEAgLTIwOCwxMyArMTk5LDEwIEBAIHN0YXRpYyB2b2lkIGFmc19mcmVlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIFxuIFx0YWZzX3VudXNlX3NlcnZlcl9ub3RpbWUoY2FsbC1cdTAwM2VuZXQsIGNhbGwtXHUwMDNlc2VydmVyLCBhZnNfc2VydmVyX3RyYWNlX3VudXNlX2NhbGwpO1xuIFx0a2ZyZWUoY2FsbC1cdTAwM2VyZXF1ZXN0KTtcbi1cbi1cdG8gPSBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlbnJfb3V0c3RhbmRpbmdfY2FsbHMpO1xuLVx0dHJhY2VfYWZzX2NhbGwoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfZnJlZSwgMCwgbyxcbi1cdFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4gXHRrZnJlZShjYWxsKTtcbiBcbiBcdG8gPSBhdG9taWNfZGVjX3JldHVybihcdTAwMjZuZXQtXHUwMDNlbnJfb3V0c3RhbmRpbmdfY2FsbHMpO1xuK1x0dHJhY2VfYWZzX2NhbGwoZGVidWdfaWQsIGFmc19jYWxsX3RyYWNlX2ZyZWUsIDAsIG8pO1xuIFx0aWYgKG8gPT0gMClcbiBcdFx0d2FrZV91cF92YXIoXHUwMDI2bmV0LVx1MDAzZW5yX291dHN0YW5kaW5nX2NhbGxzKTtcbiB9XG5AQCAtMjIyLDcgKzIxMCw3IEBAIHN0YXRpYyB2b2lkIGFmc19mcmVlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIC8qXG4gICogRGlzcG9zZSBvZiBhIHJlZmVyZW5jZSBvbiBhIGNhbGwuXG4gICovXG4tdm9pZCBhZnNfcHV0X2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuK3ZvaWQgYWZzX3B1dF9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZW51bSBhZnNfY2FsbF90cmFjZSB0cmFjZSlcbiB7XG4gXHRzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY2FsbC1cdTAwM2VuZXQ7XG4gXHR1bnNpZ25lZCBpbnQgZGVidWdfaWQgPSBjYWxsLVx1MDAzZWRlYnVnX2lkO1xuQEAgLTIzMSw4ICsyMTksNyBAQCB2b2lkIGFmc19wdXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4gXG4gXHR6ZXJvID0gX19yZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Y2FsbC1cdTAwM2VyZWYsIFx1MDAyNnIpO1xuIFx0byA9IGF0b21pY19yZWFkKFx1MDAyNm5ldC1cdTAwM2Vucl9vdXRzdGFuZGluZ19jYWxscyk7XG4tXHR0cmFjZV9hZnNfY2FsbChkZWJ1Z19pZCwgYWZzX2NhbGxfdHJhY2VfcHV0LCByIC0gMSwgbyxcbi1cdFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4rXHR0cmFjZV9hZnNfY2FsbChkZWJ1Z19pZCwgdHJhY2UsIHIgLSAxLCBvKTtcbiBcdGlmICh6ZXJvKVxuIFx0XHRhZnNfZnJlZV9jYWxsKGNhbGwpO1xuIH1cbkBAIC0yNDQsMzcgKzIzMSw2IEBAIHN0YXRpYyB2b2lkIGFmc19kZWZlcnJlZF9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRhZnNfZnJlZV9jYWxsKGNhbGwpO1xuIH1cbiBcbi0vKlxuLSAqIERpc3Bvc2Ugb2YgYSByZWZlcmVuY2Ugb24gYSBjYWxsLCBkZWZlcnJpbmcgdGhlIGNsZWFudXAgdG8gYSB3b3JrcXVldWVcbi0gKiB0byBhdm9pZCBsb2NrIHJlY3Vyc2lvbi5cbi0gKi9cbi12b2lkIGFmc19kZWZlcnJlZF9wdXRfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4te1xuLVx0c3RydWN0IGFmc19uZXQgKm5ldCA9IGNhbGwtXHUwMDNlbmV0O1xuLVx0dW5zaWduZWQgaW50IGRlYnVnX2lkID0gY2FsbC1cdTAwM2VkZWJ1Z19pZDtcbi1cdGJvb2wgemVybztcbi1cdGludCByLCBvO1xuLVxuLVx0emVybyA9IF9fcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmNhbGwtXHUwMDNlcmVmLCBcdTAwMjZyKTtcbi1cdG8gPSBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlbnJfb3V0c3RhbmRpbmdfY2FsbHMpO1xuLVx0dHJhY2VfYWZzX2NhbGwoZGVidWdfaWQsIGFmc19jYWxsX3RyYWNlX3B1dCwgciAtIDEsIG8sXG4tXHRcdCAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuLVx0aWYgKHplcm8pXG4tXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2Y2FsbC1cdTAwM2VmcmVlX3dvcmspO1xuLX1cbi1cbi0vKlxuLSAqIFF1ZXVlIHRoZSBjYWxsIGZvciBhY3R1YWwgd29yay5cbi0gKi9cbi1zdGF0aWMgdm9pZCBhZnNfcXVldWVfY2FsbF93b3JrKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbi17XG4tXHRpZiAoY2FsbC1cdTAwM2V0eXBlLVx1MDAzZXdvcmspIHtcbi1cdFx0YWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3dvcmspO1xuLVx0XHRpZiAoIXF1ZXVlX3dvcmsoYWZzX3dxLCBcdTAwMjZjYWxsLVx1MDAzZXdvcmspKVxuLVx0XHRcdGFmc19wdXRfY2FsbChjYWxsKTtcbi1cdH1cbi19XG4tXG4gLypcbiAgKiBhbGxvY2F0ZSBhIGNhbGwgd2l0aCBmbGF0IHJlcXVlc3QgYW5kIHJlcGx5IGJ1ZmZlcnNcbiAgKi9cbkBAIC0zMDgsNyArMjY0LDcgQEAgc3RydWN0IGFmc19jYWxsICphZnNfYWxsb2NfZmxhdF9jYWxsKHN0cnVjdCBhZnNfbmV0ICpuZXQsXG4gXHRyZXR1cm4gY2FsbDtcbiBcbiBub21lbV9mcmVlOlxuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuK1x0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF9vb20pO1xuIG5vbWVtX2NhbGw6XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMzQ3LDcgKzMwMywxMCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRzdHJ1Y3QgcnhycGNfY2FsbCAqcnhjYWxsO1xuIFx0c3RydWN0IG1zZ2hkciBtc2c7XG4gXHRzdHJ1Y3Qga3ZlYyBpb3ZbMV07XG4rXHR1bnNpZ25lZCBpbnQgZGVidWdfaWQgPSBjYWxsLVx1MDAzZWRlYnVnX2lkO1xuK1x0c3RydWN0IGtleSAqYXBwX2RhdGEgPSBOVUxMO1xuIFx0c2l6ZV90IGxlbjtcbitcdGJvb2wgd3JpdGVfaXRlciA9IGNhbGwtXHUwMDNld3JpdGVfaXRlcjtcbiBcdHM2NCB0eF90b3RhbF9sZW47XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTM3MywxMyArMzMyLDI5IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdC8qIElmIHRoZSBjYWxsIGlzIGdvaW5nIHRvIGJlIGFzeW5jaHJvbm91cywgd2UgbmVlZCBhbiBleHRyYSByZWYgZm9yXG4gXHQgKiB0aGUgY2FsbCB0byBob2xkIGl0c2VsZiBzbyB0aGUgY2FsbGVyIG5lZWQgbm90IGhhbmcgb24gdG8gaXRzIHJlZi5cbiBcdCAqL1xuLVx0aWYgKGNhbGwtXHUwMDNlYXN5bmMpIHtcbi1cdFx0YWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2dldCk7XG4tXHRcdGNhbGwtXHUwMDNlZHJvcF9yZWYgPSB0cnVlO1xuK1x0aWYgKGNhbGwtXHUwMDNlYXN5bmMpXG4rXHRcdGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXRfbWFrZV9hc3luY19jYWxsKTtcbitcbitcdGlmIChjYWxsLVx1MDAzZWtleSBcdTAwMjZcdTAwMjYgY2FsbC1cdTAwM2VzZXJ2ZXIpIHtcbitcdFx0dTMyIGtyYjVfZW5jdHlwZSA9IDA7XG4rXHRcdHU4IHNlY3VyaXR5X2luZGV4ID0gMDtcbitcbitcdFx0cnhycGNfa2VybmVsX3F1ZXJ5X2tleShjYWxsLVx1MDAzZWtleSwgXHUwMDI2c2VjdXJpdHlfaW5kZXgsIFx1MDAyNmtyYjVfZW5jdHlwZSk7XG4rXHRcdHN3aXRjaCAoc2VjdXJpdHlfaW5kZXgpIHtcbisjaWZkZWYgQ09ORklHX1JYR0tcbitcdFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbitcdFx0XHQvKiBSZWFkIHRoZSBrZXkgcG9pbnRlciBiZWZvcmUgdGhlIGFwcGRhdGEgKi9cbitcdFx0XHRhcHBfZGF0YSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y2FsbC1cdTAwM2VzZXJ2ZXItXHUwMDNleWZzX3J4Z2tfYXBwZGF0YSk7XG4rXHRcdFx0YnJlYWs7XG4rI2VuZGlmXG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdC8qIGNyZWF0ZSBhIGNhbGwgKi9cbi1cdHJ4Y2FsbCA9IHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VwZWVyLCBjYWxsLVx1MDAzZWtleSxcbitcdHJ4Y2FsbCA9IHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VwZWVyLFxuK1x0XHRcdFx0XHQgY2FsbC1cdTAwM2VrZXksIGFwcF9kYXRhLFxuIFx0XHRcdFx0XHQgKHVuc2lnbmVkIGxvbmcpY2FsbCxcbiBcdFx0XHRcdFx0IHR4X3RvdGFsX2xlbixcbiBcdFx0XHRcdFx0IGNhbGwtXHUwMDNlbWF4X2xpZmVzcGFuLFxuQEAgLTQxMCw3ICszODUsNyBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRpb3ZfaXRlcl9rdmVjKFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIGlvdiwgMSwgY2FsbC1cdTAwM2VyZXF1ZXN0X3NpemUpO1xuIFx0bXNnLm1zZ19jb250cm9sXHRcdD0gTlVMTDtcbiBcdG1zZy5tc2dfY29udHJvbGxlblx0PSAwO1xuLVx0bXNnLm1zZ19mbGFnc1x0XHQ9IE1TR19XQUlUQUxMIHwgKGNhbGwtXHUwMDNld3JpdGVfaXRlciA/IE1TR19NT1JFIDogMCk7XG4rXHRtc2cubXNnX2ZsYWdzXHRcdD0gTVNHX1dBSVRBTEwgfCAod3JpdGVfaXRlciA/IE1TR19NT1JFIDogMCk7XG4gXG4gXHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZtc2csIGNhbGwtXHUwMDNlcmVxdWVzdF9zaXplLFxuQEAgLTQxOCw3ICszOTMsNyBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycm9yX2RvX2Fib3J0O1xuIFxuLVx0aWYgKGNhbGwtXHUwMDNld3JpdGVfaXRlcikge1xuK1x0aWYgKHdyaXRlX2l0ZXIpIHtcbiBcdFx0bXNnLm1zZ19pdGVyID0gKmNhbGwtXHUwMDNld3JpdGVfaXRlcjtcbiBcdFx0bXNnLm1zZ19mbGFncyBcdTAwMjY9IH5NU0dfTU9SRTtcbiBcdFx0dHJhY2VfYWZzX3NlbmRfZGF0YShjYWxsLCBcdTAwMjZtc2cpO1xuQEAgLTQyNyw5ICs0MDIsOCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRcdFx0XHRcdCAgICAgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZyxcbiBcdFx0XHRcdFx0ICAgICBpb3ZfaXRlcl9jb3VudChcdTAwMjZtc2cubXNnX2l0ZXIpLFxuIFx0XHRcdFx0XHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xuLVx0XHQqY2FsbC1cdTAwM2V3cml0ZV9pdGVyID0gbXNnLm1zZ19pdGVyO1xuIFxuLVx0XHR0cmFjZV9hZnNfc2VudF9kYXRhKGNhbGwsIFx1MDAyNm1zZywgcmV0KTtcbitcdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShkZWJ1Z19pZCwgXHUwMDI2bXNnLCByZXQpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XG4gXHR9XG5AQCAtNDQ4LDcgKzQyMiw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdFx0XHRcdFx0UlhfVVNFUl9BQk9SVCwgcmV0LFxuIFx0XHRcdFx0XHRhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yKTtcbiBcdGlmIChjYWxsLVx1MDAzZWFzeW5jKSB7XG4tXHRcdGFmc19zZWVfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9hc3luY19hYm9ydCk7XG4rXHRcdGFmc19zZWVfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9zZWVfYXN5bmNfYWJvcnQpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNDY0LDcgKzQzOCw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdHRyYWNlX2Fmc19jYWxsX2RvbmUoY2FsbCk7XG4gZXJyb3Jfa2lsbF9jYWxsOlxuIFx0aWYgKGNhbGwtXHUwMDNlYXN5bmMpXG4tXHRcdGFmc19zZWVfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9hc3luY19raWxsKTtcbitcdFx0YWZzX3NlZV9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY19raWxsKTtcbiBcdGlmIChjYWxsLVx1MDAzZXR5cGUtXHUwMDNlaW1tZWRpYXRlX2NhbmNlbClcbiBcdFx0Y2FsbC1cdTAwM2V0eXBlLVx1MDAzZWltbWVkaWF0ZV9jYW5jZWwoY2FsbCk7XG4gXG5AQCAtNDc1LDggKzQ0OSw3IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdGlmIChjYWxsLVx1MDAzZXJ4Y2FsbClcbiBcdFx0cnhycGNfa2VybmVsX3NodXRkb3duX2NhbGwoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCk7XG4gXHRpZiAoY2FsbC1cdTAwM2Vhc3luYykge1xuLVx0XHRpZiAoY2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjYWxsLVx1MDAzZWFzeW5jX3dvcmspKVxuLVx0XHRcdGFmc19wdXRfY2FsbChjYWxsKTtcbitcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZjYWxsLVx1MDAzZWFzeW5jX3dvcmspO1xuIFx0XHRhZnNfc2V0X2NhbGxfY29tcGxldGUoY2FsbCwgcmV0LCAwKTtcbiBcdH1cbiBcbkBAIC01NjIsNyArNTM1LDggQEAgdm9pZCBhZnNfZGVsaXZlcl90b19jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdFx0c3dpdGNoIChyZXQpIHtcbiBcdFx0Y2FzZSAwOlxuIFx0XHRcdGNhbGwtXHUwMDNlcmVzcG9uZGVkID0gdHJ1ZTtcbi1cdFx0XHRhZnNfcXVldWVfY2FsbF93b3JrKGNhbGwpO1xuK1x0XHRcdGlmIChjYWxsLVx1MDAzZXdvcmspXG4rXHRcdFx0XHRjYWxsLVx1MDAzZXdvcmsoY2FsbCk7XG4gXHRcdFx0aWYgKHN0YXRlID09IEFGU19DQUxMX0NMX1BST0NfUkVQTFkpIHtcbiBcdFx0XHRcdGlmIChjYWxsLVx1MDAzZW9wKVxuIFx0XHRcdFx0XHRzZXRfYml0KEFGU19TRVJWRVJfRkxfTUFZX0hBVkVfQ0IsXG5AQCAtNjEyLDYgKzU4Niw3IEBAIHZvaWQgYWZzX2RlbGl2ZXJfdG9fY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4gXHR9XG4gXG4gZG9uZTpcbitcdHRyYWNlX2Fmc19jYWxsX2RvbmUoY2FsbCk7XG4gXHRpZiAoY2FsbC1cdTAwM2V0eXBlLVx1MDAzZWRvbmUpXG4gXHRcdGNhbGwtXHUwMDNldHlwZS1cdTAwM2Vkb25lKGNhbGwpO1xuIG91dDpcbkBAIC03MDAsMTkgKzY3NSwxMiBAQCBzdGF0aWMgdm9pZCBhZnNfd2FrZV91cF9hc3luY19jYWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJ4cnBjX2NhbGwgKnJ4Y2FsbCxcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgY2FsbF91c2VyX0lEKVxuIHtcbiBcdHN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IChzdHJ1Y3QgYWZzX2NhbGwgKiljYWxsX3VzZXJfSUQ7XG4tXHRpbnQgcjtcbiBcbiBcdHRyYWNlX2Fmc19ub3RpZnlfY2FsbChyeGNhbGwsIGNhbGwpO1xuIFx0Y2FsbC1cdTAwM2VuZWVkX2F0dGVudGlvbiA9IHRydWU7XG4gXG4tXHRpZiAoX19yZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2Y2FsbC1cdTAwM2VyZWYsIFx1MDAyNnIpKSB7XG4tXHRcdHRyYWNlX2Fmc19jYWxsKGNhbGwtXHUwMDNlZGVidWdfaWQsIGFmc19jYWxsX3RyYWNlX3dha2UsIHIgKyAxLFxuLVx0XHRcdCAgICAgICBhdG9taWNfcmVhZChcdTAwMjZjYWxsLVx1MDAzZW5ldC1cdTAwM2Vucl9vdXRzdGFuZGluZ19jYWxscyksXG4tXHRcdFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4tXG4tXHRcdGlmICghcXVldWVfd29yayhhZnNfYXN5bmNfY2FsbHMsIFx1MDAyNmNhbGwtXHUwMDNlYXN5bmNfd29yaykpXG4tXHRcdFx0YWZzX2RlZmVycmVkX3B1dF9jYWxsKGNhbGwpO1xuLVx0fVxuK1x0YWZzX3NlZV9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY193YWtlKTtcbitcdHF1ZXVlX3dvcmsoYWZzX2FzeW5jX2NhbGxzLCBcdTAwMjZjYWxsLVx1MDAzZWFzeW5jX3dvcmspO1xuIH1cbiBcbiAvKlxuQEAgLTcyNSwxMiArNjkzLDE3IEBAIHN0YXRpYyB2b2lkIGFmc19wcm9jZXNzX2FzeW5jX2NhbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0X2VudGVyKFwiXCIpO1xuIFxuK1x0YWZzX3NlZV9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY19wcm9jZXNzKTtcbitcbiBcdGlmIChjYWxsLVx1MDAzZXN0YXRlIFx1MDAzYyBBRlNfQ0FMTF9DT01QTEVURSBcdTAwMjZcdTAwMjYgY2FsbC1cdTAwM2VuZWVkX2F0dGVudGlvbikge1xuIFx0XHRjYWxsLVx1MDAzZW5lZWRfYXR0ZW50aW9uID0gZmFsc2U7XG4gXHRcdGFmc19kZWxpdmVyX3RvX2NhbGwoY2FsbCk7XG4gXHR9XG4gXG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4rXHRpZiAoY2FsbC1cdTAwM2VzdGF0ZSA9PSBBRlNfQ0FMTF9DT01QTEVURSkge1xuK1x0XHRjYW5jZWxfd29yayhcdTAwMjZjYWxsLVx1MDAzZWFzeW5jX3dvcmspO1xuK1x0XHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X2FzeW5jX2NvbXBsZXRlKTtcbitcdH1cbiBcdF9sZWF2ZShcIlwiKTtcbiB9XG4gXG5AQCAtNzU2LDcgKzcyOSw2IEBAIHZvaWQgYWZzX2NoYXJnZV9wcmVhbGxvY2F0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0XHRpZiAoIWNhbGwpXG4gXHRcdFx0XHRicmVhaztcbiBcbi1cdFx0XHRjYWxsLVx1MDAzZWRyb3BfcmVmID0gdHJ1ZTtcbiBcdFx0XHRjYWxsLVx1MDAzZWFzeW5jID0gdHJ1ZTtcbiBcdFx0XHRjYWxsLVx1MDAzZXN0YXRlID0gQUZTX0NBTExfU1ZfQVdBSVRfT1BfSUQ7XG4gXHRcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZjYWxsLVx1MDAzZXdhaXRxKTtcbkBAIC03ODMsNyArNzU1LDcgQEAgc3RhdGljIHZvaWQgYWZzX3J4X2Rpc2NhcmRfbmV3X2NhbGwoc3RydWN0IHJ4cnBjX2NhbGwgKnJ4Y2FsbCxcbiBcdHN0cnVjdCBhZnNfY2FsbCAqY2FsbCA9IChzdHJ1Y3QgYWZzX2NhbGwgKil1c2VyX2NhbGxfSUQ7XG4gXG4gXHRjYWxsLVx1MDAzZXJ4Y2FsbCA9IE5VTEw7XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4rXHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X2Rpc2NhcmRfcHJlYWxsb2MpO1xuIH1cbiBcbiAvKlxuQEAgLTgzMiw3ICs4MDQsNyBAQCBzdGF0aWMgaW50IGFmc19kZWxpdmVyX2NtX29wX2lkKHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2Y2FsbC1cdTAwM2VlbmN0eXBlKTtcbiBcbiBcdHRyYWNlX2Fmc19jYl9jYWxsKGNhbGwpO1xuLVx0Y2FsbC1cdTAwM2V3b3JrLmZ1bmMgPSBjYWxsLVx1MDAzZXR5cGUtXHUwMDNld29yaztcbitcdGNhbGwtXHUwMDNld29yayA9IGNhbGwtXHUwMDNldHlwZS1cdTAwM2V3b3JrO1xuIFxuIFx0LyogcGFzcyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGlzIG1lc3NhZ2Ugb2ZmIHRvIHRoZVxuIFx0ICogY2FjaGUgbWFuYWdlciBvcCAqL1xuQEAgLTk4MywxNCArOTU1LDMgQEAgbm9pbmxpbmUgaW50IGFmc19wcm90b2NvbF9lcnJvcihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4gXHRcdGNhbGwtXHUwMDNldW5tYXJzaGFsbGluZ19lcnJvciA9IHRydWU7XG4gXHRyZXR1cm4gLUVCQURNU0c7XG4gfVxuLVxuLS8qXG4tICogV2FrZSB1cCBPT0Igbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuXG4tICovXG4tc3RhdGljIHZvaWQgYWZzX3J4X25vdGlmeV9vb2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb29iKVxuLXtcbi1cdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBzay1cdTAwM2Vza191c2VyX2RhdGE7XG4tXG4tXHRpZiAoUkVBRF9PTkNFKG5ldC1cdTAwM2VsaXZlKSlcbi1cdFx0cXVldWVfd29yayhhZnNfd3EsIFx1MDAyNm5ldC1cdTAwM2VyeF9vb2Jfd29yayk7XG4tfVxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZXJ2ZXIuYyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuaW5kZXggMGZlMTYyZWEyYTM2ZGIuLjRjM2E3YmQwZjdkODY2IDEwMDY0NFxuLS0tIGEvZnMvYWZzL3NlcnZlci5jXG4rKysgYi9mcy9hZnMvc2VydmVyLmNcbkBAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgYWZzX3NlcnZlcl9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gXHRhZnNfcHV0X2VuZHBvaW50X3N0YXRlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXHUwMDNlZW5kcG9pbnRfc3RhdGUpLFxuIFx0XHRcdCAgICAgICBhZnNfZXN0YXRlX3RyYWNlX3B1dF9zZXJ2ZXIpO1xuIFx0YWZzX3B1dF9jZWxsKHNlcnZlci1cdTAwM2VjZWxsLCBhZnNfY2VsbF90cmFjZV9wdXRfc2VydmVyKTtcbi1cdGtmcmVlKHNlcnZlci1cdTAwM2VjbV9yeGdrX2FwcGRhdGEuZGF0YSk7XG4rXHRrZXlfcHV0KHNlcnZlci1cdTAwM2V5ZnNfcnhna19hcHBkYXRhKTtcbiBcdGtmcmVlKHNlcnZlcik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy92bF9wcm9iZS5jIGIvZnMvYWZzL3ZsX3Byb2JlLmNcbmluZGV4IDNkMmUwYzkyNTQ2MGY5Li4xZDcwODg3YzlmMzE4YiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy92bF9wcm9iZS5jXG4rKysgYi9mcy9hZnMvdmxfcHJvYmUuY1xuQEAgLTE4Niw3ICsxODYsNyBAQCBzdGF0aWMgYm9vbCBhZnNfZG9fcHJvYmVfdmxzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICAgICAgIHNlcnZlcl9pbmRleCk7XG4gXHRcdGlmICghSVNfRVJSKGNhbGwpKSB7XG4gXHRcdFx0YWZzX3ByaW9yaXRpc2VfZXJyb3IoX2UsIGNhbGwtXHUwMDNlZXJyb3IsIGNhbGwtXHUwMDNlYWJvcnRfY29kZSk7XG4tXHRcdFx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuK1x0XHRcdGFmc19wdXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9wdXRfdmxfZ2V0X2NhcHMpO1xuIFx0XHRcdGluX3Byb2dyZXNzID0gdHJ1ZTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRhZnNfcHJpb3JpdGlzZV9lcnJvcihfZSwgUFRSX0VSUihjYWxsKSwgMCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3ZsY2xpZW50LmMgYi9mcy9hZnMvdmxjbGllbnQuY1xuaW5kZXggYTQwYjQzNDY0Y2ZhOWUuLjhhNGM4YzlhMWUzOTk2IDEwMDY0NFxuLS0tIGEvZnMvYWZzL3ZsY2xpZW50LmNcbisrKyBiL2ZzL2Fmcy92bGNsaWVudC5jXG5AQCAtMTUzLDcgKzE1Myw3IEBAIHN0cnVjdCBhZnNfdmxkYl9lbnRyeSAqYWZzX3ZsX2dldF9lbnRyeV9ieV9uYW1lX3Uoc3RydWN0IGFmc192bF9jdXJzb3IgKnZjLFxuIFx0dmMtXHUwMDNlY2FsbF9hYm9ydF9jb2RlXHQ9IGNhbGwtXHUwMDNlYWJvcnRfY29kZTtcbiBcdHZjLVx1MDAzZWNhbGxfZXJyb3JcdFx0PSBjYWxsLVx1MDAzZWVycm9yO1xuIFx0dmMtXHUwMDNlY2FsbF9yZXNwb25kZWRcdD0gY2FsbC1cdTAwM2VyZXNwb25kZWQ7XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4rXHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2NhbGwpO1xuIFx0aWYgKHZjLVx1MDAzZWNhbGxfZXJyb3IpIHtcbiBcdFx0a2ZyZWUoZW50cnkpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUih2Yy1cdTAwM2VjYWxsX2Vycm9yKTtcbkBAIC0zMDMsNyArMzAzLDcgQEAgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc192bF9nZXRfYWRkcnNfdShzdHJ1Y3QgYWZzX3ZsX2N1cnNvciAqdmMsXG4gXHR2Yy1cdTAwM2VjYWxsX2Vycm9yXHRcdD0gY2FsbC1cdTAwM2VlcnJvcjtcbiBcdHZjLVx1MDAzZWNhbGxfcmVzcG9uZGVkXHQ9IGNhbGwtXHUwMDNlcmVzcG9uZGVkO1xuIFx0YWxpc3RcdFx0XHQ9IGNhbGwtXHUwMDNlcmV0X2FsaXN0O1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuK1x0YWZzX3B1dF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX3B1dF92bF9jYWxsKTtcbiBcdGlmICh2Yy1cdTAwM2VjYWxsX2Vycm9yKSB7XG4gXHRcdGFmc19wdXRfYWRkcmxpc3QoYWxpc3QsIGFmc19hbGlzdF90cmFjZV9wdXRfZ2V0YWRkcnUpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUih2Yy1cdTAwM2VjYWxsX2Vycm9yKTtcbkBAIC02NjYsNyArNjY2LDcgQEAgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFmc195ZnN2bF9nZXRfZW5kcG9pbnRzKHN0cnVjdCBhZnNfdmxfY3Vyc29yICp2YyxcbiBcdHZjLVx1MDAzZWNhbGxfZXJyb3JcdFx0PSBjYWxsLVx1MDAzZWVycm9yO1xuIFx0dmMtXHUwMDNlY2FsbF9yZXNwb25kZWRcdD0gY2FsbC1cdTAwM2VyZXNwb25kZWQ7XG4gXHRhbGlzdFx0XHRcdD0gY2FsbC1cdTAwM2VyZXRfYWxpc3Q7XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4rXHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2NhbGwpO1xuIFx0aWYgKHZjLVx1MDAzZWNhbGxfZXJyb3IpIHtcbiBcdFx0YWZzX3B1dF9hZGRybGlzdChhbGlzdCwgYWZzX2FsaXN0X3RyYWNlX3B1dF9nZXRhZGRydSk7XG4gXHRcdHJldHVybiBFUlJfUFRSKHZjLVx1MDAzZWNhbGxfZXJyb3IpO1xuQEAgLTc4NCw3ICs3ODQsNyBAQCBjaGFyICphZnNfeWZzdmxfZ2V0X2NlbGxfbmFtZShzdHJ1Y3QgYWZzX3ZsX2N1cnNvciAqdmMpXG4gXHR2Yy1cdTAwM2VjYWxsX2Vycm9yXHRcdD0gY2FsbC1cdTAwM2VlcnJvcjtcbiBcdHZjLVx1MDAzZWNhbGxfcmVzcG9uZGVkXHQ9IGNhbGwtXHUwMDNlcmVzcG9uZGVkO1xuIFx0Y2VsbG5hbWVcdFx0PSBjYWxsLVx1MDAzZXJldF9zdHI7XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4rXHRhZnNfcHV0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2NhbGwpO1xuIFx0aWYgKHZjLVx1MDAzZWNhbGxfZXJyb3IpIHtcbiBcdFx0a2ZyZWUoY2VsbG5hbWUpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUih2Yy1cdTAwM2VjYWxsX2Vycm9yKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvdXNlci10eXBlLmggYi9pbmNsdWRlL2tleXMvdXNlci10eXBlLmhcbmluZGV4IDM4NmMzMTQzMjc4OTk1Li43MDAyYTk5M2E0NzIyOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUva2V5cy91c2VyLXR5cGUuaFxuKysrIGIvaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXG5AQCAtMjYsNiArMjYsNyBAQFxuICAqL1xuIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcbiBcdHN0cnVjdCByY3VfaGVhZFx0cmN1O1x0XHQvKiBSQ1UgZGVzdHJ1Y3RvciAqL1xuK1x0cmVmY291bnRfdFx0cmVmO1xuIFx0dW5zaWduZWQgc2hvcnRcdGRhdGFsZW47XHQvKiBsZW5ndGggb2YgdGhpcyBkYXRhICovXG4gXHRjaGFyXHRcdGRhdGFbXSBfX2FsaWduZWQoX19hbGlnbm9mX18odTY0KSk7IC8qIGFjdHVhbCBkYXRhICovXG4gfTtcbkBAIC0zNyw2ICszOCw3IEBAIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQ7XG4gXG4gZXh0ZXJuIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuIGV4dGVybiB2b2lkIHVzZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbit2b2lkIHB1dF91c2VyX2tleV9wYXlsb2FkKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkKTtcbiBleHRlcm4gaW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4gZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTtcbiBleHRlcm4gdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oIGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuaW5kZXggMGZiNGM0MWM5YmJmNTUuLmE5YjhlMWJhNjdlZjhkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuKysrIGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaFxuQEAgLTU1LDYgKzU1LDcgQEAgdm9pZCByeHJwY19rZXJuZWxfc2V0X25vdGlmaWNhdGlvbnMoc3RydWN0IHNvY2tldCAqc29jayxcbiBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBrZXkgKmtleSxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGtleSAqYXBwX2RhdGEsXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgdXNlcl9jYWxsX0lELFxuIFx0XHRcdFx0XHQgICBzNjQgdHhfdG90YWxfbGVuLFxuIFx0XHRcdFx0XHQgICB1MzIgaGFyZF90aW1lb3V0LFxuQEAgLTkxLDI0ICs5Miw4IEBAIGJvb2wgcnhycGNfa2VybmVsX2NoZWNrX2xpZmUoY29uc3Qgc3RydWN0IHNvY2tldCAqLCBjb25zdCBzdHJ1Y3QgcnhycGNfY2FsbCAqKTtcbiBcbiBpbnQgcnhycGNfc29ja19zZXRfbWluX3NlY3VyaXR5X2xldmVsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IHZhbCk7XG4gaW50IHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcoc3RydWN0IHNvY2sgKiwgc3RydWN0IGtleSAqKTtcbi1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpO1xuLVxuLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKTtcbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tXHRcdFx0XHRcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSk7XG4tdm9pZCByeHJwY19rZXJuZWxfZnJlZV9vb2Ioc3RydWN0IHNrX2J1ZmYgKm9vYik7XG4tdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXG4tXHRcdFx0XHQgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpO1xuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcbi1cdFx0XHRcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpO1xuLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSk7XG4tdTMyIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKTtcbi1pbnQgcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKTtcbit2b2lkIHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCB1OCAqX3NlY3VyaXR5X2luZGV4LFxuK1x0XHRcdCAgICB1MzIgKl9rcmI1X2VuY3R5cGUpO1xuIHU4IHJ4cnBjX2tlcm5lbF9xdWVyeV9jYWxsX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdFx0ICAgIHUxNiAqX3NlcnZpY2VfaWQsIHUzMiAqX2VuY3R5cGUpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbmluZGV4IDFiM2M0OGI1NTkxZGZkLi5hNGY1NzQxNGQ1MjdmYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuQEAgLTEyMCwxNCArMTIwLDI2IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XG4gICogRGVjbGFyZSB0cmFjaW5nIGluZm9ybWF0aW9uIGVudW1zIGFuZCB0aGVpciBzdHJpbmcgbWFwcGluZ3MgZm9yIGRpc3BsYXkuXG4gICovXG4gI2RlZmluZSBhZnNfY2FsbF90cmFjZXMgXFxcbi1cdEVNKGFmc19jYWxsX3RyYWNlX2FsbG9jLFx0XHRcIkFMTE9DXCIpIFxcXG4tXHRFTShhZnNfY2FsbF90cmFjZV9hc3luY19hYm9ydCxcdFx0XCJBU1lBQlwiKSBcXFxuLVx0RU0oYWZzX2NhbGxfdHJhY2VfYXN5bmNfa2lsbCxcdFx0XCJBU1lLTFwiKSBcXFxuLVx0RU0oYWZzX2NhbGxfdHJhY2VfZnJlZSxcdFx0XHRcIkZSRUUgXCIpIFxcXG4tXHRFTShhZnNfY2FsbF90cmFjZV9nZXQsXHRcdFx0XCJHRVQgIFwiKSBcXFxuLVx0RU0oYWZzX2NhbGxfdHJhY2VfcHV0LFx0XHRcdFwiUFVUICBcIikgXFxcbi1cdEVNKGFmc19jYWxsX3RyYWNlX3dha2UsXHRcdFx0XCJXQUtFIFwiKSBcXFxuLVx0RV8oYWZzX2NhbGxfdHJhY2Vfd29yayxcdFx0XHRcIlFVRVVFXCIpXG4rXHRFTShhZnNfY2FsbF90cmFjZV9hbGxvYyxcdFx0XCJBTExPQyAgICAgIFwiKSBcXFxuK1x0RU0oYWZzX2NhbGxfdHJhY2VfZnJlZSxcdFx0XHRcIkZSRUUgICAgICAgXCIpIFxcXG4rXHRFTShhZnNfY2FsbF90cmFjZV9nZXRfb3BfY2FsbCxcdFx0XCJHRVQgb3AgICAgIFwiKSBcXFxuK1x0RU0oYWZzX2NhbGxfdHJhY2VfZ2V0X21ha2VfYXN5bmNfY2FsbCxcdFwiR0VUIGEtbWFrZSBcIikgXFxcbitcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9hc3luY19jb21wbGV0ZSxcdFwiUFVUIGEtY21wbCBcIikgXFxcbitcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9tYWRlX2NhbGwsXHRcIlBVVCBtYWRlICAgXCIpIFxcXG4rXHRFTShhZnNfY2FsbF90cmFjZV9wdXRfZGlzY2FyZF9wcmVhbGxvYyxcdFwiUFVUIGRpcy1wcmVcIikgXFxcbitcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9nZXRfY2FwYWJpbGl0aWVzLFx0XCJQVVQgZ2V0LWNhcFwiKSBcXFxuK1x0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X2dpdmV1cGNhbGxiYWNrcyxcdFwiUFVUIGd2dXAtY2JcIikgXFxcbitcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9vb20sXHRcdFwiUFVUIG9vbSAgICBcIikgXFxcbitcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9yZWFkX2NvbXBsZXRlLFx0XCJQVVQgcmQtY3BsIFwiKSBcXFxuK1x0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X3JlYWRfb3AsXHRcdFwiUFVUIHJkLW9wICBcIikgXFxcbitcdEVNKGFmc19jYWxsX3RyYWNlX3B1dF9zcGFyZV9zdmMsXHRcIlBVVCBzcGFyZS1zXCIpIFxcXG4rXHRFTShhZnNfY2FsbF90cmFjZV9wdXRfdmxfY2FsbCxcdFx0XCJQVVQgdmwtY2FsbFwiKSBcXFxuK1x0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X3ZsX2dldF9jYXBzLFx0XCJQVVQgdmwtZ2NhcFwiKSBcXFxuK1x0RU0oYWZzX2NhbGxfdHJhY2VfcHV0X3dhaXRfb3AsXHRcdFwiUFVUIHd0LW9wICBcIikgXFxcbitcdEVNKGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY19hYm9ydCxcdFwiU0VFIGEtYWJvcnRcIikgXFxcbitcdEVNKGFmc19jYWxsX3RyYWNlX3NlZV9hc3luY19raWxsLFx0XCJTRUUgYS1raWxsIFwiKSBcXFxuK1x0RU0oYWZzX2NhbGxfdHJhY2Vfc2VlX2FzeW5jX3Byb2Nlc3MsXHRcIlNFRSBhLXByb2MgXCIpIFxcXG4rXHRFXyhhZnNfY2FsbF90cmFjZV9zZWVfYXN5bmNfd2FrZSxcdFwiU0VFIGEtd2FrZSBcIilcbiBcbiAjZGVmaW5lIGFmc19zZXJ2ZXJfdHJhY2VzIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX2NhbGxiYWNrLFx0XHRcIkNBTExCQUNLIFwiKSBcXFxuQEAgLTE0OCw2ICsxNjAsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24ge1xuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91bnVzZV9zbGlzdF9pc29ydCxcdFwiVU5VIGlzb3J0XCIpIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VwZGF0ZSxcdFx0XCJVUERBVEUgICBcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXHRcIlVTRSB1dWlkIFwiKSBcXFxuK1x0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcdFx0XCJVU0UgY2FsbCBcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NtX2NhbGwsXHRcIlVTRSBjbS1jbFwiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2V0X2NhcHMsXHRcIlVTRSBnY2Fwc1wiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcdFwiVVNFIGd2dXBjXCIpIFxcXG5AQCAtNjkzLDE2ICs3MDYsMTUgQEAgVFJBQ0VfRVZFTlQoYWZzX2NiX2NhbGwsXG4gXG4gVFJBQ0VfRVZFTlQoYWZzX2NhbGwsXG4gXHQgICAgVFBfUFJPVE8odW5zaWduZWQgaW50IGNhbGxfZGVidWdfaWQsIGVudW0gYWZzX2NhbGxfdHJhY2Ugb3AsXG4tXHRcdCAgICAgaW50IHJlZiwgaW50IG91dHN0YW5kaW5nLCBjb25zdCB2b2lkICp3aGVyZSksXG4rXHRcdCAgICAgaW50IHJlZiwgaW50IG91dHN0YW5kaW5nKSxcbiBcbi1cdCAgICBUUF9BUkdTKGNhbGxfZGVidWdfaWQsIG9wLCByZWYsIG91dHN0YW5kaW5nLCB3aGVyZSksXG4rXHQgICAgVFBfQVJHUyhjYWxsX2RlYnVnX2lkLCBvcCwgcmVmLCBvdXRzdGFuZGluZyksXG4gXG4gXHQgICAgVFBfU1RSVUNUX19lbnRyeShcbiBcdFx0ICAgIF9fZmllbGQodW5zaWduZWQgaW50LFx0XHRjYWxsKVxuIFx0XHQgICAgX19maWVsZChpbnQsXHRcdFx0b3ApXG4gXHRcdCAgICBfX2ZpZWxkKGludCxcdFx0XHRyZWYpXG4gXHRcdCAgICBfX2ZpZWxkKGludCxcdFx0XHRvdXRzdGFuZGluZylcbi1cdFx0ICAgIF9fZmllbGQoY29uc3Qgdm9pZCAqLFx0XHR3aGVyZSlcbiBcdFx0XHQgICAgICksXG4gXG4gXHQgICAgVFBfZmFzdF9hc3NpZ24oXG5AQCAtNzEwLDE1ICs3MjIsMTMgQEAgVFJBQ0VfRVZFTlQoYWZzX2NhbGwsXG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZW9wID0gb3A7XG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZXJlZiA9IHJlZjtcbiBcdFx0ICAgIF9fZW50cnktXHUwMDNlb3V0c3RhbmRpbmcgPSBvdXRzdGFuZGluZztcbi1cdFx0ICAgIF9fZW50cnktXHUwMDNld2hlcmUgPSB3aGVyZTtcbiBcdFx0XHQgICApLFxuIFxuLVx0ICAgIFRQX3ByaW50ayhcImM9JTA4eCAlcyByPSVkIG89JWQgc3A9JXBTUlwiLFxuK1x0ICAgIFRQX3ByaW50ayhcImM9JTA4eCAlcyByPSVkIG89JWRcIixcbiBcdFx0ICAgICAgX19lbnRyeS1cdTAwM2VjYWxsLFxuIFx0XHQgICAgICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktXHUwMDNlb3AsIGFmc19jYWxsX3RyYWNlcyksXG4gXHRcdCAgICAgIF9fZW50cnktXHUwMDNlcmVmLFxuLVx0XHQgICAgICBfX2VudHJ5LVx1MDAzZW91dHN0YW5kaW5nLFxuLVx0XHQgICAgICBfX2VudHJ5LVx1MDAzZXdoZXJlKVxuK1x0XHQgICAgICBfX2VudHJ5LVx1MDAzZW91dHN0YW5kaW5nKVxuIFx0ICAgICk7XG4gXG4gVFJBQ0VfRVZFTlQoYWZzX21ha2VfZnNfY2FsbCxcbkBAIC05MzcsOSArOTQ3LDkgQEAgVFJBQ0VfRVZFTlQoYWZzX3NlbmRfZGF0YSxcbiBcdCAgICApO1xuIFxuIFRSQUNFX0VWRU5UKGFmc19zZW50X2RhdGEsXG4tXHQgICAgVFBfUFJPVE8oc3RydWN0IGFmc19jYWxsICpjYWxsLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCByZXQpLFxuK1x0ICAgIFRQX1BST1RPKHVuc2lnbmVkIGludCBjYWxsX2RlYnVnX2lkLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCByZXQpLFxuIFxuLVx0ICAgIFRQX0FSR1MoY2FsbCwgbXNnLCByZXQpLFxuK1x0ICAgIFRQX0FSR1MoY2FsbF9kZWJ1Z19pZCwgbXNnLCByZXQpLFxuIFxuIFx0ICAgIFRQX1NUUlVDVF9fZW50cnkoXG4gXHRcdCAgICBfX2ZpZWxkKHVuc2lnbmVkIGludCxcdFx0Y2FsbClcbkBAIC05NDksNyArOTU5LDcgQEAgVFJBQ0VfRVZFTlQoYWZzX3NlbnRfZGF0YSxcbiBcdFx0XHQgICAgICksXG4gXG4gXHQgICAgVFBfZmFzdF9hc3NpZ24oXG4tXHRcdCAgICBfX2VudHJ5LVx1MDAzZWNhbGwgPSBjYWxsLVx1MDAzZWRlYnVnX2lkO1xuK1x0XHQgICAgX19lbnRyeS1cdTAwM2VjYWxsID0gY2FsbF9kZWJ1Z19pZDtcbiBcdFx0ICAgIF9fZW50cnktXHUwMDNlcmV0ID0gcmV0O1xuIFx0XHQgICAgX19lbnRyeS1cdTAwM2VvZmZzZXQgPSBtc2ctXHUwMDNlbXNnX2l0ZXIueGFycmF5X3N0YXJ0ICsgbXNnLVx1MDAzZW1zZ19pdGVyLmlvdl9vZmZzZXQ7XG4gXHRcdCAgICBfX2VudHJ5LVx1MDAzZWNvdW50ID0gaW92X2l0ZXJfY291bnQoXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuaW5kZXggNzA0YTEwZGU2NjcwMDQuLjQ1ZTQ1NTBhMThlZDgxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuQEAgLTE0OCw2ICsxNDgsNyBAQFxuIFx0RU0ocnhycGNfZXByb3RvX3dyb25nX3NlY3VyaXR5LFx0XHRcIndyb25nLXNlY1wiKVx0XHRcXFxuIFx0RU0ocnhycGNfcmVjdm1zZ19leGNlc3NfZGF0YSxcdFx0XCJyZWN2bXNnLWV4Y2Vzc1wiKVx0XFxcbiBcdEVNKHJ4cnBjX3JlY3Ztc2dfc2hvcnRfZGF0YSxcdFx0XCJyZWN2bXNnLXNob3J0XCIpXHRcXFxuK1x0RU0ocnhycGNfc2VuZG1zZ190eF9lcnJvcixcdFx0XCJ0eC1lcnJvclwiKVx0XHRcXFxuIFx0RV8ocnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXHRcdFwic2VuZG1zZy1sYXRlXCIpXG4gXG4gI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFxcXG5AQCAtMjYyLDcgKzI2Myw2IEBAXG4gXHRFTShyeHJwY19jb25uX2ZyZWUsXHRcdFx0XCJGUkVFICAgICAgICBcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fZ2V0X2FjdGl2YXRlX2NhbGwsXHRcIkdFVCBhY3QtY2FsbFwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfY2FsbF9pbnB1dCxcdFx0XCJHRVQgaW5wLWNhbGxcIikgXFxcbi1cdEVNKHJ4cnBjX2Nvbm5fZ2V0X2NoYWxsZW5nZV9pbnB1dCxcdFwiR0VUIGlucC1jaGFsXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX2dldF9jb25uX2lucHV0LFx0XHRcIkdFVCBpbnAtY29ublwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfaWRsZSxcdFx0XHRcIkdFVCBpZGxlICAgIFwiKSBcXFxuIFx0RU0ocnhycGNfY29ubl9nZXRfcG9rZV9hYm9ydCxcdFx0XCJHRVQgcGstYWJvcnRcIikgXFxcbkBAIC0yNzQsNyArMjc0LDYgQEBcbiBcdEVNKHJ4cnBjX2Nvbm5fbmV3X3NlcnZpY2UsXHRcdFwiTkVXIHNlcnZpY2UgXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9jYWxsLFx0XHRcdFwiUFVUIGNhbGwgICAgXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9jYWxsX2lucHV0LFx0XHRcIlBVVCBpbnAtY2FsbFwiKSBcXFxuLVx0RU0ocnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0LFx0XCJQVVQgaW5wLWNoYWxcIikgXFxcbiBcdEVNKHJ4cnBjX2Nvbm5fcHV0X2Nvbm5faW5wdXQsXHRcdFwiUFVUIGlucC1jb25uXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9kaXNjYXJkX2lkbGUsXHRcdFwiUFVUIGRpc2MtaWRsXCIpIFxcXG4gXHRFTShyeHJwY19jb25uX3B1dF9sb2NhbF9kZWFkLFx0XHRcIlBVVCBsb2MtZGVhZFwiKSBcXFxuQEAgLTM0Miw2ICszNDEsNyBAQFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfZGlzdHJpYnV0ZV9lcnJvcixcdFwiU0VFIGRpc3QtZXJyXCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9pbnB1dCxcdFx0XCJTRUUgaW5wdXQgICBcIikgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9yZWxlYXNlZCxcdFwiU0VFIG5meS1ybHNkXCIpIFxcXG4rXHRFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCxcdFwiU0VFIG5meS1za2lwXCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnLFx0XHRcIlNFRSByZWN2bXNnIFwiKSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZ19yZXF1ZXVlLFx0XCJTRUUgcmVjdi1ycXVcIikgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2dfcmVxdWV1ZV9maXJzdCwgXCJTRUUgcmVjdi1ycUZcIikgXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9yeHJwYy5oXG5pbmRleCBkOTczNWFiZDRjNzkxMC4uN2Q2YTUwMTUxOTMxMTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnhycGMuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J4cnBjLmhcbkBAIC01OCwxMSArNTgsNyBAQCBlbnVtIHJ4cnBjX2Ntc2dfdHlwZSB7XG4gXHRSWFJQQ19UWF9MRU5HVEhcdFx0PSAxMixcdC8qIC1zLTogVG90YWwgbGVuZ3RoIG9mIFR4IGRhdGEgKi9cbiBcdFJYUlBDX1NFVF9DQUxMX1RJTUVPVVRcdD0gMTMsXHQvKiAtcy06IFNldCBvbmUgb3IgbW9yZSBjYWxsIHRpbWVvdXRzICovXG4gXHRSWFJQQ19DSEFSR0VfQUNDRVBUXHQ9IDE0LFx0LyogU3MtOiBDaGFyZ2UgdGhlIGFjY2VwdCBwb29sIHdpdGggYSB1c2VyIGNhbGwgSUQgKi9cbi1cdFJYUlBDX09PQl9JRFx0XHQ9IDE1LFx0LyogLXNyOiBPT0IgbWVzc2FnZSBJRCAqL1xuLVx0UlhSUENfQ0hBTExFTkdFRFx0PSAxNixcdC8qIEMtcjogSW5mbyBvbiBhIHJlY2VpdmVkIENIQUxMRU5HRSAqL1xuLVx0UlhSUENfUkVTUE9ORFx0XHQ9IDE3LFx0LyogQ3MtOiBSZXNwb25kIHRvIGEgY2hhbGxlbmdlICovXG4tXHRSWFJQQ19SRVNQT05ERURcdFx0PSAxOCxcdC8qIFMtcjogRGF0YSByZWNlaXZlZCBpbiBSRVNQT05TRSAqL1xuLVx0UlhSUENfUkVTUF9SWEdLX0FQUERBVEFcdD0gMTksXHQvKiBDcy06IFJFU1BPTlNFOiBSeEdLIGFwcCBkYXRhIHRvIGluY2x1ZGUgKi9cbitcdFJYUlBDX1JFU1BPTlNFX0FQUERBVEFcdD0gMjAsXHQvKiBDcy06IFVzZXIga2V5IGhvbGRpbmcgYXBwIGRhdGEgZm9yIFJFU1BPTlNFICovXG4gXHRSWFJQQ19fU1VQUE9SVEVEXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG5pbmRleCBjM2M4YzMyNDBlZjk0Ni4uYWEzYzA1OGY0MDk1NTkgMTAwNjQ0XG4tLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xuKysrIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbkBAIC0yMDgsNiArMjA4LDcgQEAgZG5zX3Jlc29sdmVyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXG4gXHRcdGtsZWF2ZShcIiA9IC1FTk9NRU1cIik7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuK1x0cmVmY291bnRfc2V0KFx1MDAyNnVwYXlsb2FkLVx1MDAzZXJlZiwgMSk7XG4gXG4gXHR1cGF5bG9hZC1cdTAwM2VkYXRhbGVuID0gcmVzdWx0X2xlbjtcbiBcdG1lbWNweSh1cGF5bG9hZC1cdTAwM2VkYXRhLCBkYXRhLCByZXN1bHRfbGVuKTtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvTWFrZWZpbGUgYi9uZXQvcnhycGMvTWFrZWZpbGVcbmluZGV4IGY5OTRmOWYzMGEyOWQ0Li5mN2E1ZTBhNTkyZWUxMyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9NYWtlZmlsZVxuKysrIGIvbmV0L3J4cnBjL01ha2VmaWxlXG5AQCAtMjQsNyArMjQsNiBAQCByeHJwYy15IDo9IFxcXG4gXHRsb2NhbF9vYmplY3QubyBcXFxuIFx0bWlzYy5vIFxcXG4gXHRuZXRfbnMubyBcXFxuLVx0b29iLm8gXFxcbiBcdG91dHB1dC5vIFxcXG4gXHRwZWVyX2V2ZW50Lm8gXFxcbiBcdHBlZXJfb2JqZWN0Lm8gXFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYWZfcnhycGMuYyBiL25ldC9yeHJwYy9hZl9yeHJwYy5jXG5pbmRleCA5YWIwZjIyYzg4MWVjNS4uOWQ1Y2UxYzdhZDBkMjIgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvYWZfcnhycGMuY1xuKysrIGIvbmV0L3J4cnBjL2FmX3J4cnBjLmNcbkBAIC0zMTgsNiArMzE4LDcgQEAgRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcHV0X3BlZXIpO1xuICAqIEBzb2NrOiBUaGUgc29ja2V0IG9uIHdoaWNoIHRvIG1ha2UgdGhlIGNhbGxcbiAgKiBAcGVlcjogVGhlIHBlZXIgdG8gY29udGFjdFxuICAqIEBrZXk6IFRoZSBzZWN1cml0eSBjb250ZXh0IHRvIHVzZSAoZGVmYXVsdHMgdG8gc29ja2V0IHNldHRpbmcpXG4rICogQGFwcF9kYXRhOiBUaGUgc2VjdXJpdHkgcmVzcG9uc2UgYXBwbGljYXRpb24gZGF0YSAob3IgTlVMTClcbiAgKiBAdXNlcl9jYWxsX0lEOiBUaGUgSUQgdG8gdXNlXG4gICogQHR4X3RvdGFsX2xlbjogVG90YWwgbGVuZ3RoIG9mIGRhdGEgdG8gdHJhbnNtaXQgZHVyaW5nIHRoZSBjYWxsIChvciAtMSlcbiAgKiBAaGFyZF90aW1lb3V0OiBUaGUgbWF4aW11bSBsaWZlc3BhbiBvZiB0aGUgY2FsbCBpbiBzZWNcbkBAIC0zNDAsNiArMzQxLDcgQEAgRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcHV0X3BlZXIpO1xuIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcixcbiBcdFx0XHRcdFx0ICAgc3RydWN0IGtleSAqa2V5LFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3Qga2V5ICphcHBfZGF0YSxcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyB1c2VyX2NhbGxfSUQsXG4gXHRcdFx0XHRcdCAgIHM2NCB0eF90b3RhbF9sZW4sXG4gXHRcdFx0XHRcdCAgIHUzMiBoYXJkX3RpbWVvdXQsXG5AQCAtMzY4LDYgKzM3MCw3IEBAIHN0cnVjdCByeHJwY19jYWxsICpyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0XHRrZXkgPSBOVUxMOyAvKiBhIG5vLXNlY3VyaXR5IGtleSAqL1xuIFxuIFx0bWVtc2V0KFx1MDAyNnAsIDAsIHNpemVvZihwKSk7XG4rXHRwLmFwcF9kYXRhXHRcdD0gYXBwX2RhdGE7XG4gXHRwLnVzZXJfY2FsbF9JRFx0XHQ9IHVzZXJfY2FsbF9JRDtcbiBcdHAudHhfdG90YWxfbGVuXHRcdD0gdHhfdG90YWxfbGVuO1xuIFx0cC5pbnRlcnJ1cHRpYmlsaXR5XHQ9IGludGVycnVwdGliaWxpdHk7XG5AQCAtNTk1LDEwICs1OTgsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbilcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFJYUlBDX1NFUlZFUl9CT1VORDpcbiBcdGNhc2UgUlhSUENfU0VSVkVSX0xJU1RFTklORzpcbi1cdFx0aWYgKG0tXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfT09CKVxuLVx0XHRcdHJldCA9IHJ4cnBjX3NlbmRtc2dfb29iKHJ4LCBtLCBsZW4pO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTtcbitcdFx0cmV0ID0gcnhycGNfZG9fc2VuZG1zZyhyeCwgbSwgbGVuKTtcbiBcdFx0LyogVGhlIHNvY2tldCBoYXMgYmVlbiB1bmxvY2tlZCAqL1xuIFx0XHRnb3RvIG91dDtcbiBcdGRlZmF1bHQ6XG5AQCAtNjMzLDcgKzYzMyw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRcdCAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIHtcbiBcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spO1xuLVx0dW5zaWduZWQgaW50IG1pbl9zZWNfbGV2ZWwsIHZhbDtcbitcdHVuc2lnbmVkIGludCBtaW5fc2VjX2xldmVsO1xuIFx0dTE2IHNlcnZpY2VfdXBncmFkZVsyXTtcbiBcdGludCByZXQ7XG4gXG5AQCAtNzEwLDIzICs3MTAsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcbiBcdFx0Y2FzZSBSWFJQQ19NQU5BR0VfUkVTUE9OU0U6XG4gXHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRpZiAob3B0bGVuICE9IHNpemVvZih1bnNpZ25lZCBpbnQpKVxuLVx0XHRcdFx0Z290byBlcnJvcjtcbi1cdFx0XHRyZXQgPSAtRUlTQ09OTjtcbi1cdFx0XHRpZiAocngtXHUwMDNlc2suc2tfc3RhdGUgIT0gUlhSUENfVU5CT1VORClcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0cmV0ID0gY29weV9zYWZlX2Zyb21fc29ja3B0cihcdTAwMjZ2YWwsIHNpemVvZih2YWwpLFxuLVx0XHRcdFx0XHRcdCAgICAgb3B0dmFsLCBvcHRsZW4pO1xuLVx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIGVycm9yO1xuLVx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0aWYgKHZhbCBcdTAwM2UgMSlcbi1cdFx0XHRcdGdvdG8gZXJyb3I7XG4tXHRcdFx0aWYgKHZhbClcbi1cdFx0XHRcdHNldF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRjbGVhcl9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRnb3RvIHN1Y2Nlc3M7XG4rXHRcdFx0Z290byBlcnJvcjtcbiBcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRicmVhaztcbkBAIC04MzUsOCArODE5LDYgQEAgc3RhdGljIGludCByeHJwY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4gXHRyeC1cdTAwM2VjYWxscyA9IFJCX1JPT1Q7XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZyeC1cdTAwM2VpbmNvbWluZ19sb2NrKTtcbi1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKTtcbi1cdHJ4LVx1MDAzZXBlbmRpbmdfb29icSA9IFJCX1JPT1Q7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyeC1cdTAwM2Vzb2NrX2NhbGxzKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJ4LVx1MDAzZXRvX2JlX2FjY2VwdGVkKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG5AQCAtODg0LDIzICs4NjYsNiBAQCBzdGF0aWMgaW50IHJ4cnBjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncylcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogUHVyZ2UgdGhlIG91dC1vZi1iYW5kIHF1ZXVlLlxuLSAqL1xuLXN0YXRpYyB2b2lkIHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzdHJ1Y3Qgc29jayAqc2spXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc2spO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cbi1cdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkpXG4tXHRcdHJ4cnBjX2tlcm5lbF9mcmVlX29vYihza2IpO1xuLVx0d2hpbGUgKCFSQl9FTVBUWV9ST09UKFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSkpIHtcbi1cdFx0c2tiID0gcmJfZW50cnkocngtXHUwMDNlcGVuZGluZ19vb2JxLnJiX25vZGUsIHN0cnVjdCBza19idWZmLCByYm5vZGUpO1xuLVx0XHRyYl9lcmFzZShcdTAwMjZza2ItXHUwMDNlcmJub2RlLCBcdTAwMjZyeC1cdTAwM2VwZW5kaW5nX29vYnEpO1xuLVx0XHRyeHJwY19rZXJuZWxfZnJlZV9vb2Ioc2tiKTtcbi1cdH1cbi19XG4tXG4gLypcbiAgKiBSeFJQQyBzb2NrZXQgZGVzdHJ1Y3RvclxuICAqL1xuQEAgLTkwOCw3ICs4NzMsNiBAQCBzdGF0aWMgdm9pZCByeHJwY19zb2NrX2Rlc3RydWN0b3Ioc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdF9lbnRlcihcIiVwXCIsIHNrKTtcbiBcbi1cdHJ4cnBjX3B1cmdlX29vYl9xdWV1ZShzayk7XG4gXHRyeHJwY19wdXJnZV9xdWV1ZShcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcbiBcbiBcdFdBUk5fT04ocmVmY291bnRfcmVhZChcdTAwMjZzay1cdTAwM2Vza193bWVtX2FsbG9jKSk7XG5AQCAtOTYxLDcgKzkyNSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiBcdHJ4cnBjX2Rpc2NhcmRfcHJlYWxsb2MocngpO1xuIFx0cnhycGNfcmVsZWFzZV9jYWxsc19vbl9zb2NrZXQocngpO1xuIFx0Zmx1c2hfd29ya3F1ZXVlKHJ4cnBjX3dvcmtxdWV1ZSk7XG4tXHRyeHJwY19wdXJnZV9vb2JfcXVldWUoc2spO1xuIFx0cnhycGNfcHVyZ2VfcXVldWUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG4gXG4gXHRyeHJwY191bnVzZV9sb2NhbChyeC1cdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfdW51c2VfcmVsZWFzZV9zb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaCBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5pbmRleCBjZTk0NmIwYTAzZTJiMy4uMWM2ZjRhMjc5MDM0ZjMgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuKysrIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbkBAIC0xNzEsOSArMTcxLDYgQEAgc3RydWN0IHJ4cnBjX3NvY2sge1xuIFx0Y29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgKmFwcF9vcHM7XHQvKiBUYWJsZSBvZiBrZXJuZWwgYXBwIG5vdGlmaWNhdGlvbiBmdW5jcyAqL1xuIFx0c3RydWN0IHJ4cnBjX2xvY2FsXHQqbG9jYWw7XHRcdC8qIGxvY2FsIGVuZHBvaW50ICovXG4gXHRzdHJ1Y3QgcnhycGNfYmFja2xvZ1x0KmJhY2tsb2c7XHQvKiBQcmVhbGxvY2F0aW9uIGZvciBzZXJ2aWNlcyAqL1xuLVx0c3RydWN0IHNrX2J1ZmZfaGVhZFx0cmVjdm1zZ19vb2JxO1x0LyogT09CIG1lc3NhZ2VzIGZvciByZWN2bXNnIHRvIHBpY2sgdXAgKi9cbi1cdHN0cnVjdCByYl9yb290XHRcdHBlbmRpbmdfb29icTtcdC8qIE9PQiBtZXNzYWdlcyBhd2FpdGluZyB1c2Vyc3BhY2UgdG8gcmVzcG9uZCB0byAqL1xuLVx0dTY0XHRcdFx0b29iX2lkX2NvdW50ZXI7XHQvKiBPT0IgbWVzc2FnZSBJRCBjb3VudGVyICovXG4gXHRzcGlubG9ja190XHRcdGluY29taW5nX2xvY2s7XHQvKiBJbmNvbWluZyBjYWxsIHZzIHNlcnZpY2Ugc2h1dGRvd24gbG9jayAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0c29ja19jYWxscztcdC8qIExpc3Qgb2YgY2FsbHMgb3duZWQgYnkgdGhpcyBzb2NrZXQgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWRcdHRvX2JlX2FjY2VwdGVkO1x0LyogY2FsbHMgYXdhaXRpbmcgYWNjZXB0YW5jZSAqL1xuQEAgLTE4NCw3ICsxODEsNiBAQCBzdHJ1Y3QgcnhycGNfc29jayB7XG4gXHRzdHJ1Y3QgcmJfcm9vdFx0XHRjYWxscztcdFx0LyogVXNlciBJRCAtXHUwMDNlIGNhbGwgbWFwcGluZyAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRmbGFncztcbiAjZGVmaW5lIFJYUlBDX1NPQ0tfQ09OTkVDVEVEXHRcdDBcdC8qIGNvbm5lY3Rfc3J4IGlzIHNldCAqL1xuLSNkZWZpbmUgUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0VcdDFcdC8qIFVzZXIgd2FudHMgdG8gbWFuYWdlIFJFU1BPTlNFIHBhY2tldHMgKi9cbiBcdHJ3bG9ja190XHRcdGNhbGxfbG9jaztcdC8qIGxvY2sgZm9yIGNhbGxzICovXG4gXHR1MzJcdFx0XHRtaW5fc2VjX2xldmVsO1x0LyogbWluaW11bSBzZWN1cml0eSBsZXZlbCAqL1xuICNkZWZpbmUgUlhSUENfU0VDVVJJVFlfTUFYXHRSWFJQQ19TRUNVUklUWV9FTkNSWVBUXG5AQCAtMjQxLDcgKzIzNyw2IEBAIHN0cnVjdCByeHJwY19za2JfcHJpdiB7XG4gXHRcdFx0dThcdFx0cmVhc29uO1x0XHQvKiBSZWFzb24gZm9yIGFjayAqL1xuIFx0XHR9IGFjaztcbiBcdFx0c3RydWN0IHtcbi1cdFx0XHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubjtcdC8qIENvbm5lY3Rpb24gcmVmZXJyZWQgdG8gKi9cbiBcdFx0XHR1bmlvbiB7XG4gXHRcdFx0XHR1MzIgcnhrYWRfbm9uY2U7XG4gXHRcdFx0fTtcbkBAIC0zMTAsMTMgKzMwNSw2IEBAIHN0cnVjdCByeHJwY19zZWN1cml0eSB7XG4gXHRib29sICgqdmFsaWRhdGVfY2hhbGxlbmdlKShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuLVx0LyogRmlsbCBvdXQgdGhlIGNtc2cgZm9yIHJlY3Ztc2coKSB0byBwYXNzIG9uIGEgY2hhbGxlbmdlIHRvIHVzZXJzcGFjZS5cbi1cdCAqIFRoZSBzZWN1cml0eSBjbGFzcyBnZXRzIHRvIGFkZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuLVx0ICovXG4tXHRpbnQgKCpjaGFsbGVuZ2VfdG9fcmVjdm1zZykoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4tXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgbXNnaGRyICptc2cpO1xuLVxuIFx0LyogUGFyc2Ugc2VuZG1zZygpIGNvbnRyb2wgbWVzc2FnZSBhbmQgcmVzcG9uZCB0byBjaGFsbGVuZ2UuICovXG4gXHRpbnQgKCpzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuIFx0XHRcdFx0XHQgICAgc3RydWN0IG1zZ2hkciAqbXNnKTtcbkBAIC01MTYsNiArNTA0LDcgQEAgc3RydWN0IHJ4cnBjX2J1bmRsZSB7XG4gXHRzdHJ1Y3QgcnhycGNfbG9jYWxcdCpsb2NhbDtcdFx0LyogUmVwcmVzZW50YXRpb24gb2YgbG9jYWwgZW5kcG9pbnQgKi9cbiBcdHN0cnVjdCByeHJwY19wZWVyXHQqcGVlcjtcdFx0LyogUmVtb3RlIGVuZHBvaW50ICovXG4gXHRzdHJ1Y3Qga2V5XHRcdCprZXk7XHRcdC8qIFNlY3VyaXR5IGRldGFpbHMgKi9cbitcdHN0cnVjdCBrZXlcdFx0KmFwcF9kYXRhO1x0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWRcdHByb2NfbGluaztcdC8qIExpbmsgaW4gbmV0LVx1MDAzZWJ1bmRsZV9wcm9jX2xpc3QgKi9cbiBcdGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSAqc2VjdXJpdHk7XHQvKiBhcHBsaWVkIHNlY3VyaXR5IG1vZHVsZSAqL1xuIFx0cmVmY291bnRfdFx0XHRyZWY7XG5AQCAtNjQyLDYgKzYzMSw3IEBAIGVudW0gcnhycGNfY2FsbF9mbGFnIHtcbiBcdFJYUlBDX0NBTExfVFhfTEFTVCxcdFx0LyogTGFzdCBwYWNrZXQgaW4gVHggYnVmZmVyIChhdCByeHR4X3RvcCkgKi9cbiBcdFJYUlBDX0NBTExfVFhfQUxMX0FDS0VELFx0LyogTGFzdCBwYWNrZXQgaGFzIGJlZW4gaGFyZC1hY2tlZCAqL1xuIFx0UlhSUENfQ0FMTF9UWF9OT19NT1JFLFx0XHQvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovXG4rXHRSWFJQQ19DQUxMX1RYX0VSUk9SLFx0XHQvKiBUZXJtaW5hbCBlcnJvcjsgY2FsbCBuZWVkcyBhYm9ydCAqL1xuIFx0UlhSUENfQ0FMTF9TRU5EX1BJTkcsXHRcdC8qIEEgcGluZyB3aWxsIG5lZWQgdG8gYmUgc2VudCAqL1xuIFx0UlhSUENfQ0FMTF9SRVRSQU5TX1RJTUVPVVQsXHQvKiBSZXRyYW5zbWlzc2lvbiBkdWUgdG8gdGltZW91dCBvY2N1cnJlZCAqL1xuIFx0UlhSUENfQ0FMTF9CRUdBTl9SWF9USU1FUixcdC8qIFdlIGJlZ2FuIHRoZSBleHBlY3RfcnhfYnkgdGltZXIgKi9cbkBAIC03MTksNiArNzA5LDcgQEAgc3RydWN0IHJ4cnBjX2NhbGwge1xuIFx0c3RydWN0IHJ4cnBjX3NvY2sgX19yY3VcdCpzb2NrZXQ7XHQvKiBzb2NrZXQgcmVzcG9uc2libGUgKi9cbiBcdHN0cnVjdCByeHJwY19uZXRcdCpyeG5ldDtcdFx0LyogTmV0d29yayBuYW1lc3BhY2UgdG8gd2hpY2ggY2FsbCBiZWxvbmdzICovXG4gXHRzdHJ1Y3Qga2V5XHRcdCprZXk7XHRcdC8qIFNlY3VyaXR5IGRldGFpbHMgKi9cbitcdHN0cnVjdCBrZXlcdFx0KmFwcF9kYXRhO1x0LyogU2VjdXJpdHkgcmVzcG9uc2UgYXBwIGRhdGEgKi9cbiBcdGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSAqc2VjdXJpdHk7XHQvKiBhcHBsaWVkIHNlY3VyaXR5IG1vZHVsZSAqL1xuIFx0c3RydWN0IG11dGV4XHRcdHVzZXJfbXV0ZXg7XHQvKiBVc2VyIGFjY2VzcyBtdXRleCAqL1xuIFx0c3RydWN0IHNvY2thZGRyX3J4cnBjXHRkZXN0X3NyeDtcdC8qIERlc3RpbmF0aW9uIGFkZHJlc3MgKi9cbkBAIC05MTMsNiArOTA0LDcgQEAgZW51bSByeHJwY19jb21tYW5kIHtcbiB9O1xuIFxuIHN0cnVjdCByeHJwY19jYWxsX3BhcmFtcyB7XG4rXHRzdHJ1Y3Qga2V5XHRcdCphcHBfZGF0YTtcdC8qIFNlY3VyaXR5IHJlc3BvbnNlIGFwcCBkYXRhICovXG4gXHRzNjRcdFx0XHR0eF90b3RhbF9sZW47XHQvKiBUb3RhbCBUeCBkYXRhIGxlbmd0aCAoaWYgc2VuZCBkYXRhKSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHR1c2VyX2NhbGxfSUQ7XHQvKiBVc2VyJ3MgY2FsbCBJRCAqL1xuIFx0c3RydWN0IHtcbkBAIC0xMzc1LDEzICsxMzY3LDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcnhycGNfbmV0ICpyeHJwY19uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0cmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgcnhycGNfbmV0X2lkKTtcbiB9XG4gXG4tLypcbi0gKiBvb2IuY1xuLSAqL1xuLWJvb2wgcnhycGNfbm90aWZ5X3NvY2tldF9vb2Ioc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsIHN0cnVjdCBza19idWZmICpza2IpO1xuLXZvaWQgcnhycGNfYWRkX3BlbmRpbmdfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4taW50IHJ4cnBjX3NlbmRtc2dfb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTtcbi1cbiAvKlxuICAqIG91dHB1dC5jXG4gICovXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmMgYi9uZXQvcnhycGMvY2FsbF9vYmplY3QuY1xuaW5kZXggODE3ZWQ5YWNiOTFlNjEuLjlmNjEzMGQ5MGM0Y2E4IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2NhbGxfb2JqZWN0LmNcbisrKyBiL25ldC9yeHJwYy9jYWxsX29iamVjdC5jXG5AQCAtMjExLDYgKzIxMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfYWxsb2NfY2xpZW50X2NhbGwoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0Y2FsbC1cdTAwM2VpbnRlcnJ1cHRpYmlsaXR5XHQ9IHAtXHUwMDNlaW50ZXJydXB0aWJpbGl0eTtcbiBcdGNhbGwtXHUwMDNldHhfdG90YWxfbGVuXHQ9IHAtXHUwMDNldHhfdG90YWxfbGVuO1xuIFx0Y2FsbC1cdTAwM2VrZXlcdFx0PSBrZXlfZ2V0KGNwLVx1MDAzZWtleSk7XG4rXHRjYWxsLVx1MDAzZWFwcF9kYXRhXHRcdD0ga2V5X2dldChwLVx1MDAzZWFwcF9kYXRhKTtcbiBcdGNhbGwtXHUwMDNlcGVlclx0XHQ9IHJ4cnBjX2dldF9wZWVyKGNwLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfZ2V0X2NhbGwpO1xuIFx0Y2FsbC1cdTAwM2Vsb2NhbFx0XHQ9IHJ4cnBjX2dldF9sb2NhbChjcC1cdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfZ2V0X2NhbGwpO1xuIFx0Y2FsbC1cdTAwM2VzZWN1cml0eV9sZXZlbFx0PSBjcC1cdTAwM2VzZWN1cml0eV9sZXZlbDtcbkBAIC02OTcsNiArNjk4LDcgQEAgc3RhdGljIHZvaWQgcnhycGNfZGVzdHJveV9jYWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJ4cnBjX3B1dF9wZWVyKGNhbGwtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfY2FsbCk7XG4gXHRyeHJwY19wdXRfbG9jYWwoY2FsbC1cdTAwM2Vsb2NhbCwgcnhycGNfbG9jYWxfcHV0X2NhbGwpO1xuIFx0a2V5X3B1dChjYWxsLVx1MDAzZWtleSk7XG4rXHRrZXlfcHV0KGNhbGwtXHUwMDNlYXBwX2RhdGEpO1xuIFx0Y2FsbF9yY3UoXHUwMDI2Y2FsbC1cdTAwM2VyY3UsIHJ4cnBjX3JjdV9mcmVlX2NhbGwpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jIGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xuaW5kZXggNmFmYjU0MzczZWJiZjkuLjZlNDAyMzEyZTE0NWMwIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xuKysrIGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xuQEAgLTcsNiArNyw2MSBAQFxuIFxuICNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4gXG4rLypcbisgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuICBGdXJ0aGVyXG4rICogbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHJlY3Ztc2dfbGluayBvbiBhIGR1bW15IHF1ZXVlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9fcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbit7XG4rXHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XG4rXHRzdHJ1Y3Qgc29jayAqc2s7XG4rXG4rXHRpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9SRUxFQVNFRCwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpIHtcbitcdFx0cnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1xuK1x0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuK1x0c2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbitcdGlmIChyeCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgXHUwMDNjIFJYUlBDX0NMT1NFKSB7XG4rXHRcdGlmIChjYWxsLVx1MDAzZW5vdGlmeV9yeCkge1xuK1x0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2Y2FsbC1cdTAwM2Vub3RpZnlfbG9jayk7XG4rXHRcdFx0Y2FsbC1cdTAwM2Vub3RpZnlfcngoc2ssIGNhbGwsIGNhbGwtXHUwMDNldXNlcl9jYWxsX0lEKTtcbitcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Y2FsbC1cdTAwM2Vub3RpZnlfbG9jayk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuK1x0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKSkge1xuK1x0XHRcdFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XG4rXHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpO1xuK1x0XHRcdH1cbitcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbitcbitcdFx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuK1x0XHRcdFx0X2RlYnVnKFwiY2FsbCAlcHNcIiwgc2stXHUwMDNlc2tfZGF0YV9yZWFkeSk7XG4rXHRcdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK31cbitcbisvKlxuKyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXJcbisgKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuXG4rICovXG4rdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuK3tcbitcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpKSB7XG4rXHRcdHJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuK31cbitcbiAvKlxuICAqIFRyYW5zaXRpb24gYSBjYWxsIHRvIHRoZSBjb21wbGV0ZSBzdGF0ZS5cbiAgKi9cbkBAIC0yNSw3ICs4MCw3IEBAIGJvb2wgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdHJ4cnBjX3NldF9jYWxsX3N0YXRlKGNhbGwsIFJYUlBDX0NBTExfQ09NUExFVEUpO1xuIFx0dHJhY2VfcnhycGNfY2FsbF9jb21wbGV0ZShjYWxsKTtcbiBcdHdha2VfdXAoXHUwMDI2Y2FsbC1cdTAwM2V3YWl0cSk7XG4tXHRyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuK1x0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fY2xpZW50LmNcbmluZGV4IDQ4NTE5ZjBkZTE4NTM5Li41Y2JmYTdiMjIzZTAxMSAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9jb25uX2NsaWVudC5jXG4rKysgYi9uZXQvcnhycGMvY29ubl9jbGllbnQuY1xuQEAgLTgxLDYgKzgxLDcgQEAgc3RhdGljIHN0cnVjdCByeHJwY19idW5kbGUgKnJ4cnBjX2FsbG9jX2J1bmRsZShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0YnVuZGxlLVx1MDAzZWxvY2FsXHRcdD0gY2FsbC1cdTAwM2Vsb2NhbDtcbiBcdFx0YnVuZGxlLVx1MDAzZXBlZXJcdFx0PSByeHJwY19nZXRfcGVlcihjYWxsLVx1MDAzZXBlZXIsIHJ4cnBjX3BlZXJfZ2V0X2J1bmRsZSk7XG4gXHRcdGJ1bmRsZS1cdTAwM2VrZXlcdFx0PSBrZXlfZ2V0KGNhbGwtXHUwMDNla2V5KTtcbitcdFx0YnVuZGxlLVx1MDAzZWFwcF9kYXRhXHQ9IGtleV9nZXQoY2FsbC1cdTAwM2VhcHBfZGF0YSk7XG4gXHRcdGJ1bmRsZS1cdTAwM2VzZWN1cml0eVx0PSBjYWxsLVx1MDAzZXNlY3VyaXR5O1xuIFx0XHRidW5kbGUtXHUwMDNlZXhjbHVzaXZlXHQ9IHRlc3RfYml0KFJYUlBDX0NBTExfRVhDTFVTSVZFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKTtcbiBcdFx0YnVuZGxlLVx1MDAzZXVwZ3JhZGVcdFx0PSB0ZXN0X2JpdChSWFJQQ19DQUxMX1VQR1JBREUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuQEAgLTExOCw2ICsxMTksNyBAQCBzdGF0aWMgdm9pZCByeHJwY19mcmVlX2J1bmRsZShzdHJ1Y3QgcnhycGNfYnVuZGxlICpidW5kbGUpXG4gXHR3cml0ZV91bmxvY2soXHUwMDI2YnVuZGxlLVx1MDAzZWxvY2FsLVx1MDAzZXJ4bmV0LVx1MDAzZWNvbm5fbG9jayk7XG4gXHRyeHJwY19wdXRfcGVlcihidW5kbGUtXHUwMDNlcGVlciwgcnhycGNfcGVlcl9wdXRfYnVuZGxlKTtcbiBcdGtleV9wdXQoYnVuZGxlLVx1MDAzZWtleSk7XG4rXHRrZXlfcHV0KGJ1bmRsZS1cdTAwM2VhcHBfZGF0YSk7XG4gXHRrZnJlZShidW5kbGUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9ldmVudC5jIGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuY1xuaW5kZXggNjExYzc5MGJjNmQwY2UuLjkxNDZiOWQ0YzJhYzUwIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuY1xuKysrIGIvbmV0L3J4cnBjL2Nvbm5fZXZlbnQuY1xuQEAgLTI3OSwxMCArMjc5LDcgQEAgc3RhdGljIGludCByeHJwY19wcm9jZXNzX2V2ZW50KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFxuIFx0c3dpdGNoIChzcC1cdTAwM2VoZHIudHlwZSkge1xuIFx0Y2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9DSEFMTEVOR0U6XG4tXHRcdHJldCA9IGNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlcmVzcG9uZF90b19jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdHJldHVybiBjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXJlc3BvbmRfdG9fY2hhbGxlbmdlKGNvbm4sIHNrYik7XG4gXG4gXHRjYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX1JFU1BPTlNFOlxuIFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNvbm4tXHUwMDNlc3RhdGVfbG9jayk7XG5AQCAtNDI1LDY2ICs0MjIsNiBAQCBzdGF0aWMgdm9pZCByeHJwY19wb3N0X3BhY2tldF90b19jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0cnhycGNfcXVldWVfY29ubihjb25uLCByeHJwY19jb25uX3F1ZXVlX3J4X3dvcmspO1xuIH1cbiBcbi0vKlxuLSAqIFBvc3QgYSBDSEFMTEVOR0UgcGFja2V0IHRvIHRoZSBzb2NrZXQgb2Ygb25lIG9mIGEgY29ubmVjdGlvbidzIGNhbGxzIHNvIHRoYXRcbi0gKiBpdCBjYW4gZ2V0IGFwcGxpY2F0aW9uIGRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgcGFja2V0LCBwb3NzaWJseSBxdWVyeWluZ1xuLSAqIHVzZXJzcGFjZS5cbi0gKi9cbi1zdGF0aWMgYm9vbCByeHJwY19wb3N0X2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbi1cdHN0cnVjdCByeHJwY19jYWxsICpjYWxsID0gTlVMTDtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdGJvb2wgcmVzcG9uZCA9IGZhbHNlLCBxdWV1ZWQgPSBmYWxzZTtcbi1cbi1cdHNwLVx1MDAzZWNoYWxsLmNvbm4gPVxuLVx0XHRyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCByeHJwY19jb25uX2dldF9jaGFsbGVuZ2VfaW5wdXQpO1xuLVxuLVx0aWYgKCFjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZWNoYWxsZW5nZV90b19yZWN2bXNnKSB7XG4tXHRcdHJ4cnBjX3Bvc3RfcGFja2V0X3RvX2Nvbm4oY29ubiwgc2tiKTtcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjb25uLVx1MDAzZWNoYW5uZWxzKTsgaSsrKSB7XG4tXHRcdGlmIChjb25uLVx1MDAzZWNoYW5uZWxzW2ldLmNhbGwpIHtcbi1cdFx0XHRjYWxsID0gY29ubi1cdTAwM2VjaGFubmVsc1tpXS5jYWxsO1xuLVx0XHRcdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbi1cdFx0XHRpZiAoIXJ4KSB7XG4tXHRcdFx0XHRjYWxsID0gTlVMTDtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRyZXNwb25kID0gdHJ1ZTtcbi1cdFx0XHRpZiAodGVzdF9iaXQoUlhSUENfU09DS19NQU5BR0VfUkVTUE9OU0UsIFx1MDAyNnJ4LVx1MDAzZWZsYWdzKSlcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdGNhbGwgPSBOVUxMO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHRpZiAoIXJlc3BvbmQpIHtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdHJ4cnBjX3B1dF9jb25uZWN0aW9uKGNvbm4sIHJ4cnBjX2Nvbm5fcHV0X2NoYWxsZW5nZV9pbnB1dCk7XG4tXHRcdHNwLVx1MDAzZWNoYWxsLmNvbm4gPSBOVUxMO1xuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4tXG4tXHRpZiAoY2FsbClcbi1cdFx0cXVldWVkID0gcnhycGNfbm90aWZ5X3NvY2tldF9vb2IoY2FsbCwgc2tiKTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0aWYgKGNhbGwgXHUwMDI2XHUwMDI2ICFxdWV1ZWQpIHtcbi1cdFx0cnhycGNfcHV0X2Nvbm5lY3Rpb24oY29ubiwgcnhycGNfY29ubl9wdXRfY2hhbGxlbmdlX2lucHV0KTtcbi1cdFx0c3AtXHUwMDNlY2hhbGwuY29ubiA9IE5VTEw7XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi1cbi1cdGlmICghY2FsbClcbi1cdFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuIC8qXG4gICogSW5wdXQgYSBjb25uZWN0aW9uLWxldmVsIHBhY2tldC5cbiAgKi9cbkBAIC01MTMsNyArNDUwLDggQEAgYm9vbCByeHJwY19pbnB1dF9jb25uX3BhY2tldChzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0fVxuIFx0XHRpZiAoIWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNldmFsaWRhdGVfY2hhbGxlbmdlKGNvbm4sIHNrYikpXG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHRyZXR1cm4gcnhycGNfcG9zdF9jaGFsbGVuZ2UoY29ubiwgc2tiKTtcbitcdFx0cnhycGNfcG9zdF9wYWNrZXRfdG9fY29ubihjb25uLCBza2IpO1xuK1x0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdGNhc2UgUlhSUENfUEFDS0VUX1RZUEVfUkVTUE9OU0U6XG4gXHRcdGlmIChyeHJwY19pc19jb25uX2Fib3J0ZWQoY29ubikpIHtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmNcbmluZGV4IGEwYWE3OGQ4OTI4OTdmLi4xNmJhYjcyZTZmMDc3NyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9rZXkuY1xuKysrIGIvbmV0L3J4cnBjL2tleS5jXG5AQCAtODkzLDMgKzg5Myw0MCBAQCBzdGF0aWMgbG9uZyByeHJwY19yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSxcbiBcdF9sZWF2ZShcIiA9ICV6dVwiLCBzaXplKTtcbiBcdHJldHVybiBzaXplO1xuIH1cbitcbisvKipcbisgKiByeHJwY19rZXJuZWxfcXVlcnlfa2V5IC0gUXVlcnkgcGFyYW1ldGVycyBmcm9tIGFuIHJ4cnBjIGtleVxuKyAqIEBrZXk6IFRoZSBrZXkgdG8gcXVlcnlcbisgKiBAX3NlY3VyaXR5X2luZGV4OiBXaGVyZSB0byByZXR1cm4gdGhlIHNlY3VyaXR5IGluZGV4XG4rICogQF9rcmI1X2VuY3R5cGU6IFdoZXJlIHRvIHJldHVybiB0aGUga3JiNSBlbmNyeXB0aW9uIHR5cGUgaWYgYXBwbGljYWJsZVxuKyAqXG4rICogUXVlcnkgYW4gcnhycGMgYXV0aGVudGljYXRpb24ga2V5LCBleHRyYWN0aW5nIHRoZSBzZWN1cml0eSBpbmRleCBmcm9tIHRoZVxuKyAqIGZpcnN0IHRva2VuIHRoZXJlaW4uXG4rICovXG4rdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfa2V5KGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgdTggKl9zZWN1cml0eV9pbmRleCxcbitcdFx0XHQgICAgdTMyICpfa3JiNV9lbmN0eXBlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCByeHJwY19rZXlfdG9rZW4gKnRva2VuO1xuK1xuK1x0dG9rZW4gPSBrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xuK1x0aWYgKCF0b2tlbikge1xuK1x0XHQqX3NlY3VyaXR5X2luZGV4ID0gMDtcbitcdFx0Kl9rcmI1X2VuY3R5cGUgPSAwO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQqX3NlY3VyaXR5X2luZGV4ID0gdG9rZW4tXHUwMDNlc2VjdXJpdHlfaW5kZXg7XG4rXHRzd2l0Y2ggKHRva2VuLVx1MDAzZXNlY3VyaXR5X2luZGV4KSB7XG4rXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1JYS0FEOlxuK1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSWFJQQ19TRUNVUklUWV9ZRlNfUlhHSzpcbitcdFx0Kl9rcmI1X2VuY3R5cGUgPSB0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWVuY3R5cGU7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0V0FSTl9PTl9PTkNFKDEpO1xuK1x0XHQqX2tyYjVfZW5jdHlwZSA9IDA7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXkpO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9vb2IuYyBiL25ldC9yeHJwYy9vb2IuY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBjODBlZTI0ODdkMDk0MS4uMDAwMDAwMDAwMDAwMDBcbi0tLSBhL25ldC9yeHJwYy9vb2IuY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMzg3ICswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuLS8qIE91dCBvZiBiYW5kIG1lc3NhZ2UgaGFuZGxpbmcgKGUuZy4gY2hhbGxlbmdlLXJlc3BvbnNlKVxuLSAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXG4tICovXG4tXG4tI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcIjogXCIgZm10XG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NuZXQvYWZfcnhycGMuaFx1MDAzZVxuLSNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4tXG4tZW51bSByeHJwY19vb2JfY29tbWFuZCB7XG4tXHRSWFJQQ19PT0JfQ01EX1VOU0VULFxuLVx0UlhSUENfT09CX0NNRF9SRVNQT05ELFxuLX0gX19tb2RlKGJ5dGUpO1xuLVxuLXN0cnVjdCByeHJwY19vb2JfcGFyYW1zIHtcbi1cdHU2NFx0XHRcdG9vYl9pZDtcdFx0LyogSUQgbnVtYmVyIG9mIG1lc3NhZ2UgaWYgcmVwbHkgKi9cbi1cdHMzMlx0XHRcdGFib3J0X2NvZGU7XG4tXHRlbnVtIHJ4cnBjX29vYl9jb21tYW5kXHRjb21tYW5kO1xuLVx0Ym9vbFx0XHRcdGhhdmVfb29iX2lkOjE7XG4tfTtcbi1cbi0vKlxuLSAqIFBvc3QgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZSBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2Vcbi0gKiBhc3NvY2lhdGVkIHdpdGggYSByZWZlcmVuY2UgY2FsbC5cbi0gKi9cbi1ib29sIHJ4cnBjX25vdGlmeV9zb2NrZXRfb29iKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Ioc2tiKTtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdHN0cnVjdCBzb2NrICpzaztcbi1cdGJvb2wgcXVldWVkID0gZmFsc2U7XG4tXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVx1MDAzZXNvY2tldCk7XG4tXHRpZiAocngpIHtcbi1cdFx0c2sgPSBcdTAwMjZyeC1cdTAwM2Vzaztcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuLVxuLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgXHUwMDNjIFJYUlBDX0NMT1NFKSB7XG4tXHRcdFx0c2tiLVx1MDAzZXNrYl9tc3RhbXBfbnMgPSByeC1cdTAwM2Vvb2JfaWRfY291bnRlcisrO1xuLVx0XHRcdHJ4cnBjX2dldF9za2Ioc2tiLCByeHJwY19za2JfZ2V0X3Bvc3Rfb29iKTtcbi1cdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEsIHNrYik7XG4tXHRcdFx0cXVldWVkID0gdHJ1ZTtcbi1cbi1cdFx0XHR0cmFjZV9yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHNwLVx1MDAzZWhkci5zZXJpYWwpO1xuLVx0XHRcdGlmIChyeC1cdTAwM2VhcHBfb3BzKVxuLVx0XHRcdFx0cngtXHUwMDNlYXBwX29wcy1cdTAwM2Vub3RpZnlfb29iKHNrLCBza2IpO1xuLVx0XHR9XG4tXG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuLVx0XHRpZiAocXVldWVkIFx1MDAyNlx1MDAyNiAhcngtXHUwMDNlYXBwX29wcyBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbi1cdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdH1cbi1cbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0cmV0dXJuIHF1ZXVlZDtcbi19XG4tXG4tLypcbi0gKiBMb2NhdGUgdGhlIE9PQiBtZXNzYWdlIHRvIHJlc3BvbmQgdG8gYnkgaXRzIElELlxuLSAqL1xuLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfZmluZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHU2NCBvb2JfaWQpXG4te1xuLVx0c3RydWN0IHJiX25vZGUgKnA7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLVxuLVx0cCA9IHJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlO1xuLVx0d2hpbGUgKHApIHtcbi1cdFx0c2tiID0gcmJfZW50cnkocCwgc3RydWN0IHNrX2J1ZmYsIHJibm9kZSk7XG4tXG4tXHRcdGlmIChvb2JfaWQgXHUwMDNjIHNrYi1cdTAwM2Vza2JfbXN0YW1wX25zKVxuLVx0XHRcdHAgPSBwLVx1MDAzZXJiX2xlZnQ7XG4tXHRcdGVsc2UgaWYgKG9vYl9pZCBcdTAwM2Ugc2tiLVx1MDAzZXNrYl9tc3RhbXBfbnMpXG4tXHRcdFx0cCA9IHAtXHUwMDNlcmJfcmlnaHQ7XG4tXHRcdGVsc2Vcbi1cdFx0XHRyZXR1cm4gc2tiO1xuLVx0fVxuLVxuLVx0cmV0dXJuIE5VTEw7XG4tfVxuLVxuLS8qXG4tICogQWRkIGFuIE9PQiBtZXNzYWdlIGludG8gdGhlIHBlbmRpbmctcmVzcG9uc2Ugc2V0LiAgV2UgYWx3YXlzIGFzc2lnbiB0aGUgbmV4dFxuLSAqIHZhbHVlIGZyb20gYSA2NC1iaXQgY291bnRlciB0byB0aGUgb29iX2lkLCBzbyBqdXN0IGFzc3VtZSB3ZSdyZSBhbHdheXMgZ29pbmdcbi0gKiB0byBiZSBvbiB0aGUgcmlnaHQtaGFuZCBlZGdlIG9mIHRoZSB0cmVlIGFuZCB0aGF0IHRoZSBjb3VudGVyIHdvbid0IHdyYXAuXG4tICogVGhlIHRyZWUgaXMgYWxzbyBnaXZlbiBhIHJlZiB0byB0aGUgbWVzc2FnZS5cbi0gKi9cbi12b2lkIHJ4cnBjX2FkZF9wZW5kaW5nX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBza19idWZmICpza2IpXG4te1xuLVx0c3RydWN0IHJiX25vZGUgKipwcCA9IFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icS5yYl9ub2RlLCAqcCA9IE5VTEw7XG4tXG4tXHR3aGlsZSAoKnBwKSB7XG4tXHRcdHAgPSAqcHA7XG4tXHRcdHBwID0gXHUwMDI2KCpwcCktXHUwMDNlcmJfcmlnaHQ7XG4tXHR9XG4tXG4tXHRyYl9saW5rX25vZGUoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgcCwgcHApO1xuLVx0cmJfaW5zZXJ0X2NvbG9yKFx1MDAyNnNrYi1cdTAwM2VyYm5vZGUsIFx1MDAyNnJ4LVx1MDAzZXBlbmRpbmdfb29icSk7XG4tfVxuLVxuLS8qXG4tICogRXh0cmFjdCBjb250cm9sIG1lc3NhZ2VzIGZyb20gdGhlIHNlbmRtc2coKSBjb250cm9sIGJ1ZmZlci5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfb29iX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyAqcClcbi17XG4tXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbi1cdGludCBsZW47XG4tXG4tXHRpZiAobXNnLVx1MDAzZW1zZ19jb250cm9sbGVuID09IDApXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0Zm9yX2VhY2hfY21zZ2hkcihjbXNnLCBtc2cpIHtcbi1cdFx0aWYgKCFDTVNHX09LKG1zZywgY21zZykpXG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRcdGxlbiA9IGNtc2ctXHUwMDNlY21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpO1xuLVx0XHRfZGVidWcoXCJDTVNHICVkLCAlZCwgJWRcIixcbi1cdFx0ICAgICAgIGNtc2ctXHUwMDNlY21zZ19sZXZlbCwgY21zZy1cdTAwM2VjbXNnX3R5cGUsIGxlbik7XG4tXG4tXHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1JYUlBDKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRzd2l0Y2ggKGNtc2ctXHUwMDNlY21zZ190eXBlKSB7XG4tXHRcdGNhc2UgUlhSUENfT09CX0lEOlxuLVx0XHRcdGlmIChsZW4gIT0gc2l6ZW9mKHAtXHUwMDNlb29iX2lkKSB8fCBwLVx1MDAzZWhhdmVfb29iX2lkKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0bWVtY3B5KFx1MDAyNnAtXHUwMDNlb29iX2lkLCBDTVNHX0RBVEEoY21zZyksIHNpemVvZihwLVx1MDAzZW9vYl9pZCkpO1xuLVx0XHRcdHAtXHUwMDNlaGF2ZV9vb2JfaWQgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJYUlBDX1JFU1BPTkQ6XG4tXHRcdFx0aWYgKHAtXHUwMDNlY29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1VOU0VUKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0cC1cdTAwM2Vjb21tYW5kID0gUlhSUENfT09CX0NNRF9SRVNQT05EO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFJYUlBDX0FCT1JUOlxuLVx0XHRcdGlmIChsZW4gIT0gc2l6ZW9mKHAtXHUwMDNlYWJvcnRfY29kZSkgfHwgcC1cdTAwM2VhYm9ydF9jb2RlKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0bWVtY3B5KFx1MDAyNnAtXHUwMDNlYWJvcnRfY29kZSwgQ01TR19EQVRBKGNtc2cpLCBzaXplb2YocC1cdTAwM2VhYm9ydF9jb2RlKSk7XG4tXHRcdFx0aWYgKHAtXHUwMDNlYWJvcnRfY29kZSA9PSAwKVxuLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgUlhSUENfUkVTUF9SWEdLX0FQUERBVEE6XG4tXHRcdFx0aWYgKHAtXHUwMDNlY29tbWFuZCAhPSBSWFJQQ19PT0JfQ01EX1JFU1BPTkQpXG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0c3dpdGNoIChwLVx1MDAzZWNvbW1hbmQpIHtcbi1cdGNhc2UgUlhSUENfT09CX0NNRF9SRVNQT05EOlxuLVx0XHRpZiAoIXAtXHUwMDNlaGF2ZV9vb2JfaWQpXG4tXHRcdFx0cmV0dXJuIC1FQkFEU0xUO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLS8qXG4tICogQWxsb3cgdXNlcnNwYWNlIHRvIHJlc3BvbmQgdG8gYW4gT09CIHVzaW5nIHNlbmRtc2coKS5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbi1cdFx0XHRcdHN0cnVjdCByeHJwY19vb2JfcGFyYW1zICpwLFxuLVx0XHRcdFx0c3RydWN0IG1zZ2hkciAqbXNnKVxuLXtcbi1cdHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uO1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcDtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXHRpbnQgcmV0O1xuLVxuLVx0c2tiID0gcnhycGNfZmluZF9wZW5kaW5nX29vYihyeCwgcC1cdTAwM2Vvb2JfaWQpO1xuLVx0aWYgKHNrYilcbi1cdFx0cmJfZXJhc2UoXHUwMDI2c2tiLVx1MDAzZXJibm9kZSwgXHUwMDI2cngtXHUwMDNlcGVuZGluZ19vb2JxKTtcbi1cdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuIC1FQkFEU0xUO1xuLVxuLVx0c3AgPSByeHJwY19za2Ioc2tiKTtcbi1cbi1cdHN3aXRjaCAocC1cdTAwM2Vjb21tYW5kKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DTURfUkVTUE9ORDpcbi1cdFx0cmV0ID0gLUVQUk9UTztcbi1cdFx0aWYgKHNrYi1cdTAwM2VtYXJrICE9IFJYUlBDX09PQl9DSEFMTEVOR0UpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNvbm4gPSBzcC1cdTAwM2VjaGFsbC5jb25uO1xuLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbi1cdFx0aWYgKCFjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdGlmIChwLVx1MDAzZWFib3J0X2NvZGUpIHtcbi1cdFx0XHRyeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIHAtXHUwMDNlYWJvcnRfY29kZSwgLUVDT05OQUJPUlRFRCxcbi1cdFx0XHRcdFx0IHJ4cnBjX2Fib3J0X3Jlc3BvbnNlX3NlbmRtc2cpO1xuLVx0XHRcdHJldCA9IDA7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cmV0ID0gY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VzZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHNrYiwgbXNnKTtcbi1cdFx0fVxuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0c3dpdGNoIChza2ItXHUwMDNlbWFyaykge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihzcC1cdTAwM2VjaGFsbC5jb25uLCByeHJwY19jb25uX3B1dF9vb2IpO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tLypcbi0gKiBTZW5kIGFuIG91dC1vZi1iYW5kIG1lc3NhZ2Ugb3IgcmVzcG9uZCB0byBhIHJlY2VpdmVkIG91dC1vZi1iYW5kIG1lc3NhZ2UuXG4tICogLSBjYWxsZXIgZ2l2ZXMgdXMgdGhlIHNvY2tldCBsb2NrXG4tICogLSB0aGUgc29ja2V0IG1heSBiZSBlaXRoZXIgYSBjbGllbnQgc29ja2V0IG9yIGEgc2VydmVyIHNvY2tldFxuLSAqL1xuLWludCByeHJwY19zZW5kbXNnX29vYihzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi17XG4tXHRzdHJ1Y3QgcnhycGNfb29iX3BhcmFtcyBwID0ge307XG4tXHRpbnQgcmV0O1xuLVxuLVx0X2VudGVyKFwiXCIpO1xuLVxuLVx0cmV0ID0gcnhycGNfc2VuZG1zZ19vb2JfY21zZyhtc2csIFx1MDAyNnApO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJvcl9yZWxlYXNlX3NvY2s7XG4tXG4tXHRpZiAocC5oYXZlX29vYl9pZClcbi1cdFx0cmV0dXJuIHJ4cnBjX3Jlc3BvbmRfdG9fb29iKHJ4LCBcdTAwMjZwLCBtc2cpO1xuLVxuLVx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbi1cbi1cdHN3aXRjaCAocC5jb21tYW5kKSB7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXQgPSAtRUlOVkFMO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG4tXHRyZXR1cm4gcmV0O1xuLVxuLWVycm9yX3JlbGVhc2Vfc29jazpcbi1cdHJlbGVhc2Vfc29jayhcdTAwMjZyeC1cdTAwM2Vzayk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfcXVlcnlfb29iIC0gUXVlcnkgdGhlIHBhcmFtZXRlcnMgb2YgYW4gb3V0LW9mLWJhbmQgbWVzc2FnZVxuLSAqIEBvb2I6IFRoZSBtZXNzYWdlIHRvIHF1ZXJ5XG4tICogQF9wZWVyOiBXaGVyZSB0byByZXR1cm4gdGhlIHBlZXIgcmVjb3JkXG4tICogQF9wZWVyX2FwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIGF0dGFjaGVkIHRvIGEgcGVlciByZWNvcmRcbi0gKlxuLSAqIEV4dHJhY3QgdXNlZnVsIHBhcmFtZXRlcnMgZnJvbSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlLiAgVGhlIHNvdXJjZSBwZWVyXG4tICogcGFyYW1ldGVycyBhcmUgcmV0dXJuZWQgdGhyb3VnaCB0aGUgYXJndW1lbnQgbGlzdCBhbmQgdGhlIG1lc3NhZ2UgdHlwZSBpc1xuLSAqIHJldHVybmVkLlxuLSAqXG4tICogUmV0dXJuOlxuLSAqICogJVJYUlBDX09PQl9DSEFMTEVOR0UgLSBDaGFsbGVuZ2Ugd2FudGluZyBhIHJlc3BvbnNlLlxuLSAqL1xuLWVudW0gcnhycGNfb29iX3R5cGUgcnhycGNfa2VybmVsX3F1ZXJ5X29vYihzdHJ1Y3Qgc2tfYnVmZiAqb29iLFxuLVx0XHRcdFx0XHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqKl9wZWVyLFxuLVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpfcGVlcl9hcHBkYXRhKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2Iob29iKTtcbi1cdGVudW0gcnhycGNfb29iX3R5cGUgdHlwZSA9IG9vYi1cdTAwM2VtYXJrO1xuLVxuLVx0c3dpdGNoICh0eXBlKSB7XG4tXHRjYXNlIFJYUlBDX09PQl9DSEFMTEVOR0U6XG4tXHRcdCpfcGVlclx0XHQ9IHNwLVx1MDAzZWNoYWxsLmNvbm4tXHUwMDNlcGVlcjtcbi1cdFx0Kl9wZWVyX2FwcGRhdGFcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyLVx1MDAzZWFwcF9kYXRhO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05fT05DRSgxKTtcbi1cdFx0Kl9wZWVyXHRcdD0gTlVMTDtcbi1cdFx0Kl9wZWVyX2FwcGRhdGFcdD0gMDtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHRyZXR1cm4gdHlwZTtcbi19XG4tRVhQT1JUX1NZTUJPTChyeHJwY19rZXJuZWxfcXVlcnlfb29iKTtcbi1cbi0vKipcbi0gKiByeHJwY19rZXJuZWxfZGVxdWV1ZV9vb2IgLSBEZXF1ZXVlIGFuZCByZXR1cm4gdGhlIGZyb250IE9PQiBtZXNzYWdlXG4tICogQHNvY2s6IFRoZSBzb2NrZXQgdG8gcXVlcnlcbi0gKiBAX3R5cGU6IFdoZXJlIHRvIHJldHVybiB0aGUgbWVzc2FnZSB0eXBlXG4tICpcbi0gKiBEZXF1ZXVlIHRoZSBmcm9udCBPT0IgbWVzc2FnZSwgaWYgdGhlcmUgaXMgb25lLCBhbmQgcmV0dXJuIGl0IGFuZFxuLSAqIGl0cyB0eXBlLlxuLSAqXG4tICogUmV0dXJuOiBUaGUgc2tfYnVmZiByZXByZXNlbnRpbmcgdGhlIE9PQiBtZXNzYWdlIG9yICVOVUxMIGlmIHRoZSBxdWV1ZSB3YXNcbi0gKiBlbXB0eS5cbi0gKi9cbi1zdHJ1Y3Qgc2tfYnVmZiAqcnhycGNfa2VybmVsX2RlcXVldWVfb29iKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tXHRcdFx0XHRcdCBlbnVtIHJ4cnBjX29vYl90eXBlICpfdHlwZSlcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbi1cdHN0cnVjdCBza19idWZmICpvb2I7XG4tXG4tXHRvb2IgPSBza2JfZGVxdWV1ZShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpO1xuLVx0aWYgKG9vYilcbi1cdFx0Kl90eXBlID0gb29iLVx1MDAzZW1hcms7XG4tXHRyZXR1cm4gb29iO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9kZXF1ZXVlX29vYik7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX2ZyZWVfb29iIC0gRnJlZSBhbiBvdXQtb2YtYmFuZCBtZXNzYWdlXG4tICogQG9vYjogVGhlIE9PQiBtZXNzYWdlIHRvIGZyZWVcbi0gKlxuLSAqIEZyZWUgYW4gT09CIG1lc3NhZ2UgYWxvbmcgd2l0aCBhbnkgcmVzb3VyY2VzIGl0IGhvbGRzLlxuLSAqL1xuLXZvaWQgcnhycGNfa2VybmVsX2ZyZWVfb29iKHN0cnVjdCBza19idWZmICpvb2IpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihvb2IpO1xuLVxuLVx0c3dpdGNoIChvb2ItXHUwMDNlbWFyaykge1xuLVx0Y2FzZSBSWFJQQ19PT0JfQ0hBTExFTkdFOlxuLVx0XHRyeHJwY19wdXRfY29ubmVjdGlvbihzcC1cdTAwM2VjaGFsbC5jb25uLCByeHJwY19jb25uX3B1dF9vb2IpO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdHJ4cnBjX2ZyZWVfc2tiKG9vYiwgcnhycGNfc2tiX3B1dF9wdXJnZV9vb2IpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9mcmVlX29vYik7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSAtIFF1ZXJ5IHRoZSBwYXJhbWV0ZXJzIG9mIGEgY2hhbGxlbmdlXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byBxdWVyeVxuLSAqIEBfcGVlcjogV2hlcmUgdG8gcmV0dXJuIHRoZSBwZWVyIHJlY29yZFxuLSAqIEBfcGVlcl9hcHBkYXRhOiBUaGUgYXBwbGljYXRpb24gZGF0YSBhdHRhY2hlZCB0byBhIHBlZXIgcmVjb3JkXG4tICogQF9zZXJ2aWNlX2lkOiBXaGVyZSB0byByZXR1cm4gdGhlIGNvbm5lY3Rpb24gc2VydmljZSBJRFxuLSAqIEBfc2VjdXJpdHlfaW5kZXg6IFdoZXJlIHRvIHJldHVybiB0aGUgY29ubmVjdGlvbiBzZWN1cml0eSBpbmRleFxuLSAqXG4tICogRXh0cmFjdCB1c2VmdWwgcGFyYW1ldGVycyBmcm9tIGEgQ0hBTExFTkdFIG1lc3NhZ2UuXG4tICovXG4tdm9pZCByeHJwY19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgIHN0cnVjdCByeHJwY19wZWVyICoqX3BlZXIsXG4tXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgKl9wZWVyX2FwcGRhdGEsXG4tXHRcdFx0XHQgIHUxNiAqX3NlcnZpY2VfaWQsIHU4ICpfc2VjdXJpdHlfaW5kZXgpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0Kl9wZWVyXHRcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyO1xuLVx0Kl9wZWVyX2FwcGRhdGFcdD0gc3AtXHUwMDNlY2hhbGwuY29ubi1cdTAwM2VwZWVyLVx1MDAzZWFwcF9kYXRhO1xuLVx0Kl9zZXJ2aWNlX2lkXHQ9IHNwLVx1MDAzZWhkci5zZXJ2aWNlSWQ7XG4tXHQqX3NlY3VyaXR5X2luZGV4ID0gc3AtXHUwMDNlaGRyLnNlY3VyaXR5SW5kZXg7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZSk7XG4tXG4tLyoqXG4tICogcnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UgLSBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHJlamVjdCBhIGNoYWxsZW5nZVxuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgdG8gYmUgcmVqZWN0ZWRcbi0gKiBAYWJvcnRfY29kZTogVGhlIGFib3J0IGNvZGUgdG8gc3RpY2sgaW50byB0aGUgQUJPUlQgcGFja2V0XG4tICogQGVycm9yOiBMb2NhbCBlcnJvciB2YWx1ZVxuLSAqIEB3aHk6IEluZGljYXRpb24gYXMgdG8gd2h5LlxuLSAqXG4tICogQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byByZWplY3QgYSBjaGFsbGVuZ2UgYnkgYWJvcnRpbmcgdGhlIGNvbm5lY3Rpb24gaWZcbi0gKiBpdCdzIHN0aWxsIGluIGFuIGFib3J0YWJsZSBzdGF0ZS4gIFRoZSBlcnJvciBpcyByZXR1cm5lZCBzbyB0aGlzIGZ1bmN0aW9uXG4tICogY2FuIGJlIHVzZWQgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQuXG4tICpcbi0gKiBSZXR1cm46IFRoZSAlZXJyb3IgcGFyYW1ldGVyLlxuLSAqL1xuLWludCByeHJwY19rZXJuZWxfcmVqZWN0X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLCB1MzIgYWJvcnRfY29kZSxcbi1cdFx0XHRcdCAgaW50IGVycm9yLCBlbnVtIHJ4cnBjX2Fib3J0X3JlYXNvbiB3aHkpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NrYl9wcml2ICpzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0X2VudGVyKFwieyV4fSwlZCwlZCwldVwiLCBzcC1cdTAwM2VoZHIuc2VyaWFsLCBhYm9ydF9jb2RlLCBlcnJvciwgd2h5KTtcbi1cbi1cdHJ4cnBjX2Fib3J0X2Nvbm4oc3AtXHUwMDNlY2hhbGwuY29ubiwgTlVMTCwgYWJvcnRfY29kZSwgZXJyb3IsIHdoeSk7XG4tXHRyZXR1cm4gZXJyb3I7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfa2VybmVsX3JlamVjdF9jaGFsbGVuZ2UpO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5pbmRleCBlZmNiYTRiMmU3NGYwYy4uNWI4YzdmNTczYjdmNWEgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXG4rKysgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5AQCAtMTcsMTMgKzE3LDEyIEBAXG4gI2luY2x1ZGUgXCJhci1pbnRlcm5hbC5oXCJcbiBcbiAvKlxuLSAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXJcbi0gKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuXG4rICogUmVxdWV1ZSBhIGNhbGwgZm9yIHJlY3Ztc2coKSB0byBwaWNrIHVwLlxuICAqL1xuLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbitzdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4ge1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xuLVx0c3RydWN0IHNvY2sgKnNrO1xuK1x0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbiBcbiBcdF9lbnRlcihcIiVkXCIsIGNhbGwtXHUwMDNlZGVidWdfaWQpO1xuIFxuQEAgLTMyLDMxICszMSwxOCBAQCB2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cbi1cdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbi1cdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4tXHRpZiAocnggXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAzYyBSWFJQQ19DTE9TRSkge1xuLVx0XHRpZiAoY2FsbC1cdTAwM2Vub3RpZnlfcngpIHtcbi1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHRcdGNhbGwtXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVx1MDAzZXVzZXJfY2FsbF9JRCk7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbi1cdFx0XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuLVx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaywgXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbi1cdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbitcdFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbiBcbi1cdFx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuLVx0XHRcdFx0X2RlYnVnKFwiY2FsbCAlcHNcIiwgc2stXHUwMDNlc2tfZGF0YV9yZWFkeSk7XG4tXHRcdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdFx0XHR9XG4tXHRcdH1cbitcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4rXHRcdF9kZWJ1ZyhcImNhbGwgJXBzXCIsIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuK1x0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0X2xlYXZlKFwiXCIpO1xuIH1cbiBcbkBAIC0yMTUsNjEgKzIwMSw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ191c2VyX2lkKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHR9XG4gfVxuIFxuLS8qXG4tICogRGVhbCB3aXRoIGEgQ0hBTExFTkdFIHBhY2tldC5cbi0gKi9cbi1zdGF0aWMgaW50IHJ4cnBjX3JlY3Ztc2dfY2hhbGxlbmdlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbi1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsIHVuc2lnbmVkIGludCBmbGFncylcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXHRzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiA9IHNwLVx1MDAzZWNoYWxsLmNvbm47XG4tXG4tXHRyZXR1cm4gY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VjaGFsbGVuZ2VfdG9fcmVjdm1zZyhjb25uLCBjaGFsbGVuZ2UsIG1zZyk7XG4tfVxuLVxuLS8qXG4tICogUHJvY2VzcyBPT0IgcGFja2V0cy4gIENhbGxlZCB3aXRoIHRoZSBzb2NrZXQgbG9ja2VkLlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19vb2Ioc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLVx0XHRcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKVxuLXtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi1cdGJvb2wgbmVlZF9yZXNwb25zZSA9IGZhbHNlO1xuLVx0aW50IHJldDtcbi1cbi1cdHNrYiA9IHNrYl9wZWVrKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSk7XG4tXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuIC1FQUdBSU47XG4tXHRyeHJwY19zZWVfc2tiKHNrYiwgcnhycGNfc2tiX3NlZV9yZWN2bXNnKTtcbi1cbi1cdHJldCA9IHB1dF9jbXNnKG1zZywgU09MX1JYUlBDLCBSWFJQQ19PT0JfSUQsIHNpemVvZih1NjQpLFxuLVx0XHQgICAgICAgXHUwMDI2c2tiLVx1MDAzZXNrYl9tc3RhbXBfbnMpO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdHN3aXRjaCAoKGVudW0gcnhycGNfb29iX3R5cGUpc2tiLVx1MDAzZW1hcmspIHtcbi1cdGNhc2UgUlhSUENfT09CX0NIQUxMRU5HRTpcbi1cdFx0bmVlZF9yZXNwb25zZSA9IHRydWU7XG4tXHRcdHJldCA9IHJ4cnBjX3JlY3Ztc2dfY2hhbGxlbmdlKHNvY2ssIG1zZywgc2tiLCBmbGFncyk7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0V0FSTl9PTkNFKDEsIFwicmVjdm1zZygpIGNhbid0IHByb2Nlc3MgdW5rbm93biBPT0IgdHlwZSAldVxcblwiLFxuLVx0XHRcdCAgc2tiLVx1MDAzZW1hcmspO1xuLVx0XHRyZXQgPSAtRUlPO1xuLVx0XHRicmVhaztcbi1cdH1cbi1cbi1cdGlmICghKGZsYWdzIFx1MDAyNiBNU0dfUEVFSykpIHtcbi1cdFx0c2tiX3VubGluayhza2IsIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfb29icSk7XG4tXHRcdGlmIChuZWVkX3Jlc3BvbnNlKVxuLVx0XHRcdHJ4cnBjX2FkZF9wZW5kaW5nX29vYihyeCwgc2tiKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdHJ4cnBjX2ZyZWVfc2tiKHNrYiwgcnhycGNfc2tiX3B1dF9vb2IpO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gLypcbiAgKiBEZWxpdmVyIG1lc3NhZ2VzIHRvIGEgY2FsbC4gIFRoaXMga2VlcHMgcHJvY2Vzc2luZyBwYWNrZXRzIHVudGlsIHRoZSBidWZmZXJcbiAgKiBpcyBmaWxsZWQgYW5kIHdlIGZpbmQgZWl0aGVyIG1vcmUgREFUQSAocmV0dXJucyAwKSBvciB0aGUgZW5kIG9mIHRoZSBEQVRBXG5AQCAtMjgxLDcgKzIxMiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdCAgICAgIHNpemVfdCBsZW4sIGludCBmbGFncywgc2l6ZV90ICpfb2Zmc2V0KVxuIHtcbiBcdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3A7XG4tXHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRyeHJwY19zZXFfdCBzZXEgPSAwO1xuIFx0c2l6ZV90IHJlbWFpbjtcbkBAIC0zNzYsMTMgKzMwNiw2IEBAIHN0YXRpYyBpbnQgcnhycGNfcmVjdm1zZ19kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFxuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTVNHX1BFRUspKVxuIFx0XHRcdHJ4cnBjX3JvdGF0ZV9yeF93aW5kb3coY2FsbCk7XG4tXG4tXHRcdGlmICghcngtXHUwMDNlYXBwX29wcyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuLVx0XHRcdHRyYWNlX3J4cnBjX3JlY3ZkYXRhKGNhbGwsIHJ4cnBjX3JlY3Ztc2dfb29icSwgc2VxLFxuLVx0XHRcdFx0XHQgICAgIHJ4X3BrdF9vZmZzZXQsIHJ4X3BrdF9sZW4sIHJldCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiBcdH1cbiBcbiBvdXQ6XG5AQCAtNDE5LDcgKzM0Miw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcbiBcdHRyYWNlX3J4cnBjX3JlY3Ztc2coMCwgcnhycGNfcmVjdm1zZ19lbnRlciwgMCk7XG4gXG4tXHRpZiAoZmxhZ3MgXHUwMDI2IChNU0dfT09CIHwgTVNHX1RSVU5DKSlcbitcdGlmIChmbGFncyBcdTAwMjYgTVNHX1RSVU5DKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oXHUwMDI2cngtXHUwMDNlc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuQEAgLTQzMCwxNCArMzUzLDEyIEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdC8qIFJldHVybiBpbW1lZGlhdGVseSBpZiBhIGNsaWVudCBzb2NrZXQgaGFzIG5vIG91dHN0YW5kaW5nIGNhbGxzICovXG4gXHRpZiAoUkJfRU1QVFlfUk9PVChcdTAwMjZyeC1cdTAwM2VjYWxscykgXHUwMDI2XHUwMDI2XG4gXHQgICAgbGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHJ4LVx1MDAzZXNrLnNrX3N0YXRlICE9IFJYUlBDX1NFUlZFUl9MSVNURU5JTkcpIHtcbiBcdFx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4gXHR9XG4gXG4tXHRpZiAobGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpKSB7XG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpKSB7XG4gXHRcdHJldCA9IC1FV09VTERCTE9DSztcbiBcdFx0aWYgKHRpbWVvID09IDApIHtcbiBcdFx0XHRjYWxsID0gTlVMTDtcbkBAIC00NTMsOCArMzc0LDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gd2FpdF9lcnJvcjtcbiBcbi1cdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpKSB7XG4rXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSkpIHtcbiBcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0XHRnb3RvIHdhaXRfaW50ZXJydXB0ZWQ7XG4gXHRcdFx0dHJhY2VfcnhycGNfcmVjdm1zZygwLCByeHJwY19yZWN2bXNnX3dhaXQsIDApO1xuQEAgLTQ2NCwxNSArMzg0LDYgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFx0XHRnb3RvIHRyeV9hZ2FpbjtcbiBcdH1cbiBcbi1cdC8qIERlYWwgd2l0aCBPT0IgbWVzc2FnZXMgYmVmb3JlIHdlIGNvbnNpZGVyIGdldHRpbmcgbm9ybWFsIGRhdGEuICovXG4tXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX29vYnEpKSB7XG4tXHRcdHJldCA9IHJ4cnBjX3JlY3Ztc2dfb29iKHNvY2ssIG1zZywgZmxhZ3MpO1xuLVx0XHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuLVx0XHRpZiAocmV0ID09IC1FQUdBSU4pXG4tXHRcdFx0Z290byB0cnlfYWdhaW47XG4tXHRcdGdvdG8gZXJyb3JfdHJhY2U7XG4tXHR9XG4tXG4gXHQvKiBGaW5kIHRoZSBuZXh0IGNhbGwgYW5kIGRlcXVldWUgaXQgaWYgd2UncmUgbm90IGp1c3QgcGVla2luZy4gIElmIHdlXG4gXHQgKiBkbyBkZXF1ZXVlIGl0LCB0aGF0IGNvbWVzIHdpdGggYSByZWYgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gcmVsZWFzZS5cbiBcdCAqIFdlIGFsc28gd2FudCB0byB3ZWVkIG91dCBjYWxscyB0aGF0IGdvdCByZXF1ZXVlZCB3aGlsc3Qgd2Ugd2VyZVxuQEAgLTQ4Myw4ICszOTQsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRjYWxsID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgcnhycGNfY2FsbCwgcmVjdm1zZ19saW5rKTtcbiBcbiBcdGlmICghcnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX3F1ZXVlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBza2JfcXVldWVfZW1wdHkoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19vb2JxKSkge1xuK1x0ICAgIHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfcXVldWUpKSB7XG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmspO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbiBcdFx0cmVsZWFzZV9zb2NrKFx1MDAyNnJ4LVx1MDAzZXNrKTtcbkBAIC01NjEsNyArNDcxLDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkpXG4tXHRcdHJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XG4rXHRcdHJ4cnBjX3JlcXVldWVfY2FsbChzb2NrLCBjYWxsKTtcbiBcdGdvdG8gbm90X3lldF9jb21wbGV0ZTtcbiBcbiBjYWxsX2ZhaWxlZDpcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcnhnay5jIGIvbmV0L3J4cnBjL3J4Z2suY1xuaW5kZXggNzdhNjdhY2UxZDI0ODEuLmI5ZWZlZWMxNDVkZDE3IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3J4Z2suY1xuKysrIGIvbmV0L3J4cnBjL3J4Z2suY1xuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tleS10eXBlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NrZXlzL3VzZXItdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJhci1pbnRlcm5hbC5oXCJcbiAjaW5jbHVkZSBcInJ4Z2tfY29tbW9uLmhcIlxuIFxuQEAgLTczNCwzNyArNzM1LDYgQEAgc3RhdGljIGJvb2wgcnhna192YWxpZGF0ZV9jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tLyoqXG4tICogcnhna19rZXJuZWxfcXVlcnlfY2hhbGxlbmdlIC0gUXVlcnkgUnhHSy1zcGVjaWZpYyBjaGFsbGVuZ2UgcGFyYW1ldGVyc1xuLSAqIEBjaGFsbGVuZ2U6IFRoZSBjaGFsbGVuZ2UgcGFja2V0IHRvIHF1ZXJ5XG4tICpcbi0gKiBSZXR1cm46IFRoZSBLZXJiZXJvcyA1IGVuY29kaW5nIHR5cGUgZm9yIHRoZSBjaGFsbGVuZ2VkIGNvbm5lY3Rpb24uXG4tICovXG4tdTMyIHJ4Z2tfa2VybmVsX3F1ZXJ5X2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqc3AgPSByeHJwY19za2IoY2hhbGxlbmdlKTtcbi1cbi1cdHJldHVybiBzcC1cdTAwM2VjaGFsbC5jb25uLVx1MDAzZXJ4Z2suZW5jdHlwZTtcbi19XG4tRVhQT1JUX1NZTUJPTChyeGdrX2tlcm5lbF9xdWVyeV9jaGFsbGVuZ2UpO1xuLVxuLS8qXG4tICogRmlsbCBvdXQgdGhlIGNvbnRyb2wgbWVzc2FnZSB0byBwYXNzIHRvIHVzZXJzcGFjZSB0byBpbmZvcm0gYWJvdXQgdGhlXG4tICogY2hhbGxlbmdlLlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhna19jaGFsbGVuZ2VfdG9fcmVjdm1zZyhzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxuLXtcbi1cdHN0cnVjdCByeGdrX2NoYWxsZW5nZSBjaGFsbDtcbi1cbi1cdGNoYWxsLmJhc2Uuc2VydmljZV9pZFx0XHQ9IGNvbm4tXHUwMDNlc2VydmljZV9pZDtcbi1cdGNoYWxsLmJhc2Uuc2VjdXJpdHlfaW5kZXhcdD0gY29ubi1cdTAwM2VzZWN1cml0eV9peDtcbi1cdGNoYWxsLmVuY3R5cGVcdFx0XHQ9IGNvbm4tXHUwMDNlcnhnay5lbmN0eXBlO1xuLVxuLVx0cmV0dXJuIHB1dF9jbXNnKG1zZywgU09MX1JYUlBDLCBSWFJQQ19DSEFMTEVOR0VELCBzaXplb2YoY2hhbGwpLCBcdTAwMjZjaGFsbCk7XG4tfVxuLVxuIC8qXG4gICogSW5zZXJ0IHRoZSByZXF1aXNpdGUgYW1vdW50IG9mIFhEUiBwYWRkaW5nIGZvciB0aGUgbGVuZ3RoIGdpdmVuLlxuICAqL1xuQEAgLTgzNyw3ICs4MDcsNyBAQCBzdGF0aWMgbm9pbmxpbmUgc3NpemVfdCByeGdrX2luc2VydF9yZXNwb25zZV9oZWFkZXIoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvblxuICAqL1xuIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhLFxuK1x0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKmFwcGRhdGEsXG4gXHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzcG9uc2UsXG4gXHRcdFx0XHRcdCAgICBzaXplX3Qgb2Zmc2V0KVxuIHtcbkBAIC04NTksMjAgKzgyOSwyMCBAQCBzdGF0aWMgc3NpemVfdCByeGdrX2NvbnN0cnVjdF9hdXRoZW50aWNhdG9yKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4gXG4tXHRhLmFwcGRhdGFfbGVuID0gaHRvbmwoYXBwZGF0YS1cdTAwM2VsZW4pO1xuK1x0YS5hcHBkYXRhX2xlbiA9IGh0b25sKGFwcGRhdGEtXHUwMDNlZGF0YWxlbik7XG4gXG4gXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcdTAwMjZhLCBzaXplb2YoYSkpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcdG9mZnNldCArPSBzaXplb2YoYSk7XG4gXG4tXHRpZiAoYXBwZGF0YS1cdTAwM2VsZW4pIHtcbi1cdFx0cmV0ID0gc2tiX3N0b3JlX2JpdHMocmVzcG9uc2UsIG9mZnNldCwgYXBwZGF0YS1cdTAwM2VkYXRhLCBhcHBkYXRhLVx1MDAzZWxlbik7XG4rXHRpZiAoYXBwZGF0YS1cdTAwM2VkYXRhbGVuKSB7XG4rXHRcdHJldCA9IHNrYl9zdG9yZV9iaXRzKHJlc3BvbnNlLCBvZmZzZXQsIGFwcGRhdGEtXHUwMDNlZGF0YSwgYXBwZGF0YS1cdTAwM2VkYXRhbGVuKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRvZmZzZXQgKz0gYXBwZGF0YS1cdTAwM2VsZW47XG4rXHRcdG9mZnNldCArPSBhcHBkYXRhLVx1MDAzZWRhdGFsZW47XG4gXG4tXHRcdHJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS1cdTAwM2VsZW4sIG9mZnNldCk7XG4rXHRcdHJldCA9IHJ4Z2tfcGFkX291dChyZXNwb25zZSwgYXBwZGF0YS1cdTAwM2VkYXRhbGVuLCBvZmZzZXQpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdG9mZnNldCArPSByZXQ7XG5AQCAtODkwLDcgKzg2MCw3IEBAIHN0YXRpYyBzc2l6ZV90IHJ4Z2tfY29uc3RydWN0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXQgPSBza2Jfc3RvcmVfYml0cyhyZXNwb25zZSwgb2Zmc2V0LCBcdTAwMjZiLCBzaXplb2YoYikpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdHJldHVybiBzaXplb2YoYSkgKyB4ZHJfcm91bmRfdXAoYXBwZGF0YS1cdTAwM2VsZW4pICsgc2l6ZW9mKGIpO1xuK1x0cmV0dXJuIHNpemVvZihhKSArIHhkcl9yb3VuZF91cChhcHBkYXRhLVx1MDAzZWRhdGFsZW4pICsgc2l6ZW9mKGIpO1xuIH1cbiBcbiBzdGF0aWMgc3NpemVfdCByeGdrX2VuY3J5cHRfYXV0aGVudGljYXRvcihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbkBAIC05MjMsNyArODkzLDcgQEAgc3RhdGljIHNzaXplX3Qgcnhna19lbmNyeXB0X2F1dGhlbnRpY2F0b3Ioc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gICovXG4gc3RhdGljIGludCByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbiBcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHQgICBzdHJ1Y3Qga3JiNV9idWZmZXIgKmFwcGRhdGEpXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqYXBwZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCwgKnJzcDtcbiBcdHN0cnVjdCByeGdrX2NvbnRleHQgKmdrO1xuQEAgLTkzNiw3ICs5MDYsNyBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0aWYgKElTX0VSUihnaykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGdrKTtcbiBcbi1cdGF1dGhfbGVuID0gMjAgKyAoNCArIGFwcGRhdGEtXHUwMDNlbGVuKSArIDEyICsgKDEgKyA0KSAqIDQ7XG4rXHRhdXRoX2xlbiA9IDIwICsgKDQgKyBhcHBkYXRhLVx1MDAzZWRhdGFsZW4pICsgMTIgKyAoMSArIDQpICogNDtcbiBcdGF1dGh4X2xlbiA9IGNyeXB0b19rcmI1X2hvd19tdWNoX2J1ZmZlcihnay1cdTAwM2VrcmI1LCBLUkI1X0VOQ1JZUFRfTU9ERSxcbiBcdFx0XHRcdFx0XHRhdXRoX2xlbiwgXHUwMDI2YXV0aF9vZmZzZXQpO1xuIFx0bGVuID0gc2l6ZW9mKHN0cnVjdCByeHJwY193aXJlX2hlYWRlcikgK1xuQEAgLTEwMTEsNjYgKzk4MSwzNiBAQCBzdGF0aWMgaW50IHJ4Z2tfY29uc3RydWN0X3Jlc3BvbnNlKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuICAqIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2UgcGFja2V0LlxuICAqL1xuIHN0YXRpYyBpbnQgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKVxuK1x0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuIHtcbi1cdF9lbnRlcihcInslZCwleH1cIiwgY29ubi1cdTAwM2VkZWJ1Z19pZCwga2V5X3NlcmlhbChjb25uLVx1MDAzZWtleSkpO1xuK1x0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgZHVtbXkgPSB7fSwgKmFwcGRhdGEgPSBcdTAwMjZkdW1teTtcbitcdGludCByZXQ7XG4rXG4rXHRfZW50ZXIoXCJ7JWQsJXUsJXgsJXh9XCIsXG4rXHQgICAgICAgY29ubi1cdTAwM2VkZWJ1Z19pZCwgY29ubi1cdTAwM2VzZXJ2aWNlX2lkLFxuK1x0ICAgICAgIGtleV9zZXJpYWwoY29ubi1cdTAwM2VrZXkpLCBrZXlfc2VyaWFsKGNvbm4tXHUwMDNlYnVuZGxlLVx1MDAzZWFwcF9kYXRhKSk7XG4gXG4gXHRpZiAoa2V5X3ZhbGlkYXRlKGNvbm4tXHUwMDNla2V5KSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJ4cnBjX2Fib3J0X2Nvbm4oY29ubiwgTlVMTCwgUlhHS19FWFBJUkVELCAtRVBST1RPLFxuIFx0XHRcdFx0XHRyeGdrX2Fib3J0X2NoYWxsX2tleV9leHBpcmVkKTtcbiBcbi1cdHJldHVybiByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShjb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2Vfbm9fYXBwZGF0YShzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubixcbi1cdFx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlKVxuLXtcbi1cdHN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307XG4tXG4tXHRyZXR1cm4gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShjb25uLCBjaGFsbGVuZ2UsIFx1MDAyNmFwcGRhdGEpO1xuLX1cbi1cbi0vKipcbi0gKiByeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSAtIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2Ugd2l0aCBhcHBkYXRhXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byByZXNwb25kIHRvXG4tICogQGFwcGRhdGE6IFRoZSBhcHBsaWNhdGlvbiBkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIFJFU1BPTlNFIGF1dGhlbnRpY2F0b3Jcbi0gKlxuLSAqIEFsbG93IGEga2VybmVsIGFwcGxpY2F0aW9uIHRvIHJlc3BvbmQgdG8gYSBDSEFMTEVOR0Ugd2l0aCBhcHBsaWNhdGlvbiBkYXRhXG4tICogdG8gYmUgaW5jbHVkZWQgaW4gdGhlIFJ4R0sgUkVTUE9OU0UgQXV0aGVudGljYXRvci5cbi0gKlxuLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbi0gKi9cbi1pbnQgcnhna19rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGtyYjVfYnVmZmVyICphcHBkYXRhKVxuLXtcbi1cdHN0cnVjdCByeHJwY19za2JfcHJpdiAqY3NwID0gcnhycGNfc2tiKGNoYWxsZW5nZSk7XG4tXG4tXHRyZXR1cm4gcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZShjc3AtXHUwMDNlY2hhbGwuY29ubiwgY2hhbGxlbmdlLCBhcHBkYXRhKTtcbi19XG4tRVhQT1JUX1NZTUJPTChyeGdrX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSk7XG4tXG4tLypcbi0gKiBQYXJzZSBzZW5kbXNnKCkgY29udHJvbCBtZXNzYWdlIGFuZCByZXNwb25kIHRvIGNoYWxsZW5nZS4gIFdlIG5lZWQgdG8gc2VlIGlmXG4tICogdGhlcmUncyBhbiBhcHBkYXRhIHRvIGZpc2ggb3V0LlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhna19zZW5kbXNnX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tXHRcdFx0XHRcdCAgICAgc3RydWN0IG1zZ2hkciAqbXNnKVxuLXtcbi1cdHN0cnVjdCBrcmI1X2J1ZmZlciBhcHBkYXRhID0ge307XG4tXHRzdHJ1Y3QgY21zZ2hkciAqY21zZztcbi1cbi1cdGZvcl9lYWNoX2Ntc2doZHIoY21zZywgbXNnKSB7XG4tXHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGV2ZWwgIT0gU09MX1JYUlBDIHx8XG4tXHRcdCAgICBjbXNnLVx1MDAzZWNtc2dfdHlwZSAhPSBSWFJQQ19SRVNQX1JYR0tfQVBQREFUQSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0aWYgKGFwcGRhdGEuZGF0YSlcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0YXBwZGF0YS5kYXRhID0gQ01TR19EQVRBKGNtc2cpO1xuLVx0XHRhcHBkYXRhLmxlbiA9IGNtc2ctXHUwMDNlY21zZ19sZW4gLSBzaXplb2Yoc3RydWN0IGNtc2doZHIpO1xuK1x0aWYgKGNvbm4tXHUwMDNlYnVuZGxlLVx1MDAzZWFwcF9kYXRhKSB7XG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0YXBwZGF0YSA9IChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKVxuK1x0XHRcdHVzZXJfa2V5X3BheWxvYWRfcmN1KGNvbm4tXHUwMDNlYnVuZGxlLVx1MDAzZWFwcF9kYXRhKTtcbitcdFx0aWYgKGFwcGRhdGEgXHUwMDI2XHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2YXBwZGF0YS1cdTAwM2VyZWYpKVxuK1x0XHRcdGFwcGRhdGEgPSBOVUxMO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0aWYgKCFhcHBkYXRhKVxuK1x0XHRcdHJldHVybiByeHJwY19hYm9ydF9jb25uKGNvbm4sIE5VTEwsIFJYR0tfRVhQSVJFRCwgLUVLRVlSRVZPS0VELFxuK1x0XHRcdFx0XHRcdHJ4Z2tfYWJvcnRfY2hhbGxfa2V5X2V4cGlyZWQpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHJ4Z2tfa2VybmVsX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNoYWxsZW5nZSwgXHUwMDI2YXBwZGF0YSk7XG4rXHRyZXQgPSByeGdrX2NvbnN0cnVjdF9yZXNwb25zZShjb25uLCBjaGFsbGVuZ2UsIGFwcGRhdGEpO1xuK1xuK1x0aWYgKGFwcGRhdGEgIT0gXHUwMDI2ZHVtbXkpXG4rXHRcdHB1dF91c2VyX2tleV9wYXlsb2FkKGFwcGRhdGEpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLypcbkBAIC0xMzQ2LDkgKzEyODYsNyBAQCBjb25zdCBzdHJ1Y3QgcnhycGNfc2VjdXJpdHkgcnhna195ZnMgPSB7XG4gXHQuZnJlZV9jYWxsX2NyeXB0b1x0XHQ9IHJ4Z2tfZnJlZV9jYWxsX2NyeXB0byxcbiBcdC5pc3N1ZV9jaGFsbGVuZ2VcdFx0PSByeGdrX2lzc3VlX2NoYWxsZW5nZSxcbiBcdC52YWxpZGF0ZV9jaGFsbGVuZ2VcdFx0PSByeGdrX3ZhbGlkYXRlX2NoYWxsZW5nZSxcbi1cdC5jaGFsbGVuZ2VfdG9fcmVjdm1zZ1x0XHQ9IHJ4Z2tfY2hhbGxlbmdlX3RvX3JlY3Ztc2csXG4tXHQuc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZVx0PSByeGdrX3NlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2UsXG4tXHQucmVzcG9uZF90b19jaGFsbGVuZ2VcdFx0PSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlX25vX2FwcGRhdGEsXG4rXHQucmVzcG9uZF90b19jaGFsbGVuZ2VcdFx0PSByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuIFx0LnZlcmlmeV9yZXNwb25zZVx0XHQ9IHJ4Z2tfdmVyaWZ5X3Jlc3BvbnNlLFxuIFx0LmNsZWFyXHRcdFx0XHQ9IHJ4Z2tfY2xlYXIsXG4gXHQuZGVmYXVsdF9kZWNvZGVfdGlja2V0XHRcdD0gcnhna195ZnNfZGVjb2RlX3RpY2tldCxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcnhrYWQuYyBiL25ldC9yeHJwYy9yeGthZC5jXG5pbmRleCBjYTlmMGU4MmNiOWFjNy4uZTU1YmZjYTEwZTFhOTQgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcnhrYWQuY1xuKysrIGIvbmV0L3J4cnBjL3J4a2FkLmNcbkBAIC03NDgsMzIgKzc0OCw2IEBAIHN0YXRpYyBpbnQgcnhrYWRfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIFJ4S0FEIGRvZXMgYXV0b21hdGljIHJlc3BvbnNlIG9ubHkgYXMgdGhlcmUncyBub3RoaW5nIHRvIG1hbmFnZSB0aGF0IGlzbid0XG4tICogYWxyZWFkeSBpbiB0aGUga2V5LlxuLSAqL1xuLXN0YXRpYyBpbnQgcnhrYWRfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZShzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbXNnaGRyICptc2cpXG4te1xuLVx0cmV0dXJuIC1FSU5WQUw7XG4tfVxuLVxuLS8qKlxuLSAqIHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSAtIFJlc3BvbmQgdG8gYSBjaGFsbGVuZ2Ugd2l0aCBhcHBkYXRhXG4tICogQGNoYWxsZW5nZTogVGhlIGNoYWxsZW5nZSB0byByZXNwb25kIHRvXG4tICpcbi0gKiBBbGxvdyBhIGtlcm5lbCBhcHBsaWNhdGlvbiB0byByZXNwb25kIHRvIGEgQ0hBTExFTkdFLlxuLSAqXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuLSAqL1xuLWludCByeGthZF9rZXJuZWxfcmVzcG9uZF90b19jaGFsbGVuZ2Uoc3RydWN0IHNrX2J1ZmYgKmNoYWxsZW5nZSlcbi17XG4tXHRzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKmNzcCA9IHJ4cnBjX3NrYihjaGFsbGVuZ2UpO1xuLVxuLVx0cmV0dXJuIHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlKGNzcC1cdTAwM2VjaGFsbC5jb25uLCBjaGFsbGVuZ2UpO1xuLX1cbi1FWFBPUlRfU1lNQk9MKHJ4a2FkX2tlcm5lbF9yZXNwb25kX3RvX2NoYWxsZW5nZSk7XG4tXG4gLyogRGVjcnlwdCBkYXRhIGluLXBsYWNlIHVzaW5nIERFUy1QQ0JDLiAgQGxlbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOC4gKi9cbiBWSVNJQkxFX0lGX0tVTklUIHZvaWQgZGVzX3BjYmNfZGVjcnlwdF9pbnBsYWNlKGNvbnN0IHN0cnVjdCBkZXNfY3R4ICprZXksXG4gXHRcdFx0XHRcdCAgICAgICBfX2xlNjQgaXYsIHU4ICpkYXRhLCBzaXplX3QgbGVuKVxuQEAgLTExMzQsNyArMTEwOCw2IEBAIGNvbnN0IHN0cnVjdCByeHJwY19zZWN1cml0eSByeGthZCA9IHtcbiBcdC5mcmVlX2NhbGxfY3J5cHRvXHRcdD0gcnhrYWRfZnJlZV9jYWxsX2NyeXB0byxcbiBcdC5pc3N1ZV9jaGFsbGVuZ2VcdFx0PSByeGthZF9pc3N1ZV9jaGFsbGVuZ2UsXG4gXHQudmFsaWRhdGVfY2hhbGxlbmdlXHRcdD0gcnhrYWRfdmFsaWRhdGVfY2hhbGxlbmdlLFxuLVx0LnNlbmRtc2dfcmVzcG9uZF90b19jaGFsbGVuZ2VcdD0gcnhrYWRfc2VuZG1zZ19yZXNwb25kX3RvX2NoYWxsZW5nZSxcbiBcdC5yZXNwb25kX3RvX2NoYWxsZW5nZVx0XHQ9IHJ4a2FkX3Jlc3BvbmRfdG9fY2hhbGxlbmdlLFxuIFx0LnZlcmlmeV9yZXNwb25zZVx0XHQ9IHJ4a2FkX3ZlcmlmeV9yZXNwb25zZSxcbiBcdC5jbGVhclx0XHRcdFx0PSByeGthZF9jbGVhcixcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VuZG1zZy5jIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuaW5kZXggZWQyYzlhNTEwMDVhZGUuLmNkZjM1NDQwMzE3ZDZkIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3NlbmRtc2cuY1xuKysrIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NrZXlzL3VzZXItdHlwZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9hZl9yeHJwYy5oXHUwMDNlXG5AQCAtMzIwLDggKzMyMSw4IEBAIHN0YXRpYyBpbnQgcnhycGNfYWxsb2NfdHhxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHQgICBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsXG4tXHRcdFx0ICAgYm9vbCAqX2Ryb3BwZWRfbG9jaylcbitcdFx0XHQgICByeHJwY19ub3RpZnlfZW5kX3R4X3Qgbm90aWZ5X2VuZF90eClcbitcdF9fcmVsZWFzZXMoXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KVxuIHtcbiBcdHN0cnVjdCByeHJwY190eGJ1ZiAqdHhiO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG5AQCAtMzMwLDIzICszMzEsMzEgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0Ym9vbCBtb3JlID0gbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX01PUkU7XG4gXHRpbnQgcmV0LCBjb3BpZWQgPSAwO1xuIFxuLVx0aWYgKHRlc3RfYml0KFJYUlBDX0NBTExfVFhfTk9fTU9SRSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpIHtcbitcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpKSkge1xuIFx0XHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVx1MDAzZWRlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcbiBcdFx0XHRcdCAgY2FsbC1cdTAwM2VjaWQsIGNhbGwtXHUwMDNlY2FsbF9pZCwgY2FsbC1cdTAwM2VyeF9jb25zdW1lZCxcbiBcdFx0XHRcdCAgMCwgLUVQUk9UTyk7XG4tXHRcdHJldHVybiAtRVBST1RPO1xuK1x0XHRyZXQgPSAtRVBST1RPO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXHRpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpKSB7XG4rXHRcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXG4rXHRcdFx0XHQgIGNhbGwtXHUwMDNlY2lkLCBjYWxsLVx1MDAzZWNhbGxfaWQsIGNhbGwtXHUwMDNlcnhfY29uc3VtZWQsXG4rXHRcdFx0XHQgIDAsIC1FSU8pO1xuK1x0XHRyZXQgPSAtRUlPO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4gXHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4gXG4gXHRyZXQgPSByeHJwY193YWl0X3RvX2JlX2Nvbm5lY3RlZChjYWxsLCBcdTAwMjZ0aW1lbyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHRpZiAoY2FsbC1cdTAwM2Vjb25uLVx1MDAzZXN0YXRlID09IFJYUlBDX0NPTk5fQ0xJRU5UX1VOU0VDVVJFRCkge1xuIFx0XHRyZXQgPSByeHJwY19pbml0X2NsaWVudF9jb25uX3NlY3VyaXR5KGNhbGwtXHUwMDNlY29ubik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4gXHQvKiB0aGlzIHNob3VsZCBiZSBpbiBwb2xsICovXG5AQCAtNDQwLDEyICs0NDksMjEgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0XHQvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCdzIG5vdyBmdWxsICovXG4gXHRcdGlmICghdHhiLVx1MDAzZXNwYWNlIHx8XG4gXHRcdCAgICAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKSkge1xuK1x0XHRcdC8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZFxuK1x0XHRcdCAqIGhhdmUgY29ycnVwdGVkIHRoZSB0eGJ1ZiBjb250ZW50IHdpdGggYSBwYXJ0aWFsXG4rXHRcdFx0ICogZW5jcnlwdC4gIEFzc3VtZSB0aGF0IEVOT01FTSBpcyByZXRyeWFibGUsIGJ1dFxuK1x0XHRcdCAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC5cbitcdFx0XHQgKi9cbitcdFx0XHRyZXQgPSBjYWxsLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXNlY3VyZV9wYWNrZXQoY2FsbCwgdHhiKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0XHRpZiAocmV0ID09IC1FTk9NRU0pXG4rXHRcdFx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHRcdFx0XHRzZXRfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdFx0Z290byBvdXRfdHhiO1xuK1x0XHRcdH1cbitcbiBcdFx0XHRpZiAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKVxuIFx0XHRcdFx0dHhiLVx1MDAzZWZsYWdzIHw9IFJYUlBDX0xBU1RfUEFDS0VUO1xuLVxuLVx0XHRcdHJldCA9IGNhbGwtXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VjdXJlX3BhY2tldChjYWxsLCB0eGIpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRnb3RvIG91dDtcbiBcdFx0XHRyeHJwY19xdWV1ZV9wYWNrZXQocngsIGNhbGwsIHR4Yiwgbm90aWZ5X2VuZF90eCk7XG4gXHRcdFx0dHhiID0gTlVMTDtcbiBcdFx0fVxuQEAgLTQ1Myw0OCArNDcxLDU4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcbiBzdWNjZXNzOlxuIFx0cmV0ID0gY29waWVkO1xuLVx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgY2FsbC1cdTAwM2VlcnJvciBcdTAwM2MgMClcbi1cdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbi1vdXQ6XG4rb3V0X3R4YjpcbiBcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gXHRfbGVhdmUoXCIgPSAlZFwiLCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiBcbiBjYWxsX3Rlcm1pbmF0ZWQ6XG4gXHRyeHJwY19wdXRfdHhidWYodHhiLCByeHJwY190eGJ1Zl9wdXRfc2VuZF9hYm9ydGVkKTtcbi1cdF9sZWF2ZShcIiA9ICVkXCIsIGNhbGwtXHUwMDNlZXJyb3IpO1xuLVx0cmV0dXJuIGNhbGwtXHUwMDNlZXJyb3I7XG4rXHRjYWxsLVx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xuK1x0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbitcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBtYXliZV9lcnJvcjpcbi1cdGlmIChjb3BpZWQpXG4rXHRpZiAoY29waWVkKSB7XG4rXHRcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY2FsbC1cdTAwM2VlcnJvciBcdTAwM2MgMCkge1xuK1x0XHRcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4rXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0XHR9XG4gXHRcdGdvdG8gc3VjY2Vzcztcbi1cdGdvdG8gb3V0O1xuK1x0fVxuK1x0Z290byBvdXRfdHhiO1xuIFxuIGVmYXVsdDpcbiBcdHJldCA9IC1FRkFVTFQ7XG4tXHRnb3RvIG91dDtcbitcdGdvdG8gb3V0X3R4YjtcbiBcbiB3YWl0X2Zvcl9zcGFjZTpcbiBcdHJldCA9IC1FQUdBSU47XG4gXHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKVxuIFx0XHRnb3RvIG1heWJlX2Vycm9yO1xuK1x0Y2FsbC1cdTAwM2V0eF9wZW5kaW5nID0gdHhiO1xuK1x0dHhiID0gTlVMTDtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuLVx0Kl9kcm9wcGVkX2xvY2sgPSB0cnVlO1xuK1xuIFx0cmV0ID0gcnhycGNfd2FpdF9mb3JfdHhfd2luZG93KHJ4LCBjYWxsLCBcdTAwMjZ0aW1lbyxcbiBcdFx0XHRcdCAgICAgICBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfV0FJVEFMTCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIG1heWJlX2Vycm9yO1xuK1x0XHRnb3RvIG91dF9ub2xvY2s7XG4gXHRpZiAoY2FsbC1cdTAwM2VpbnRlcnJ1cHRpYmlsaXR5ID09IFJYUlBDX0lOVEVSUlVQVElCTEUpIHtcbiBcdFx0aWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpIFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcbi1cdFx0XHRnb3RvIG1heWJlX2Vycm9yO1xuK1x0XHRcdGdvdG8gb3V0X25vbG9jaztcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFx0fVxuLVx0Kl9kcm9wcGVkX2xvY2sgPSBmYWxzZTtcbiBcdGdvdG8gcmVsb2FkO1xuK291dF9ub2xvY2s6XG4rXHRfbGVhdmUoXCIgPSAlZCBbaW50cl1cIiwgcmV0KTtcbitcdHJldHVybiBjb3BpZWQgPzogcmV0O1xuIH1cbiBcbiAvKlxuQEAgLTUwMyw2ICs1MzEsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gc3RhdGljIGludCByeHJwY19zZW5kbXNnX2Ntc2coc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgKnApXG4ge1xuIFx0c3RydWN0IGNtc2doZHIgKmNtc2c7XG4rXHRrZXlfc2VyaWFsX3Qga2V5X2lkO1xuK1x0a2V5X3JlZl90IGtleTtcbiBcdGJvb2wgZ290X3VzZXJfSUQgPSBmYWxzZTtcbiBcdGludCBsZW47XG4gXG5AQCAtNTg3LDYgKzYxNywyMiBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcbiBcdFx0XHRcdHJldHVybiAtRVJBTkdFO1xuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRjYXNlIFJYUlBDX1JFU1BPTlNFX0FQUERBVEE6XG4rXHRcdFx0aWYgKGxlbiAhPSBzaXplb2Yoa2V5X3NlcmlhbF90KSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdGlmIChwLVx1MDAzZWNhbGwuYXBwX2RhdGEpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRrZXlfaWQgPSAqKGtleV9zZXJpYWxfdCAqKUNNU0dfREFUQShjbXNnKTtcbitcdFx0XHRrZXkgPSBsb29rdXBfdXNlcl9rZXkoa2V5X2lkLCAwLCBLRVlfTkVFRF9TRUFSQ0gpO1xuK1x0XHRcdGlmIChJU19FUlIoa2V5KSlcbitcdFx0XHRcdHJldHVybiBQVFJfRVJSKGtleSk7XG4rXHRcdFx0aWYgKGtleV9yZWZfdG9fcHRyKGtleSktXHUwMDNldHlwZSA9PSBcdTAwMjZrZXlfdHlwZV91c2VyKSB7XG4rXHRcdFx0XHRrZXlfcmVmX3B1dChrZXkpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHRcdHAtXHUwMDNlY2FsbC5hcHBfZGF0YSA9IGtleV9yZWZfdG9fcHRyKGtleSk7XG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbkBAIC02OTUsOCArNzQxLDEwIEBAIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIFx0XHRcdGdvdG8gZXJyb3JfcmVsZWFzZV9zb2NrO1xuIFx0XHRjYWxsID0gcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHJ4LCBtc2csIFx1MDAyNnApO1xuIFx0XHQvKiBUaGUgc29ja2V0IGlzIG5vdyB1bmxvY2tlZC4uLiAqL1xuLVx0XHRpZiAoSVNfRVJSKGNhbGwpKVxuK1x0XHRpZiAoSVNfRVJSKGNhbGwpKSB7XG4rXHRcdFx0a2V5X3B1dChwLmNhbGwuYXBwX2RhdGEpO1xuIFx0XHRcdHJldHVybiBQVFJfRVJSKGNhbGwpO1xuK1x0XHR9XG4gXHRcdC8qIC4uLiBhbmQgd2UgaGF2ZSB0aGUgY2FsbCBsb2NrLiAqL1xuIFx0XHRwLmNhbGwubnJfdGltZW91dHMgPSAwO1xuIFx0XHRyZXQgPSAwO1xuQEAgLTc2OSw4ICs4MTcsOCBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJYUlBDX0NNRF9TRU5EX0RBVEE6XG4tXHRcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwsIFx1MDAyNmRyb3BwZWRfbG9jayk7XG4tXHRcdGJyZWFrO1xuK1x0XHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMKTtcbitcdFx0Z290byBlcnJvcl9wdXQ7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRicmVhaztcbkBAIC03ODEsMTEgKzgyOSwxMyBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gZXJyb3JfcHV0OlxuIFx0cnhycGNfcHV0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9wdXRfc2VuZG1zZyk7XG4rXHRrZXlfcHV0KHAuY2FsbC5hcHBfZGF0YSk7XG4gXHRfbGVhdmUoXCIgPSAlZFwiLCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiBcbiBlcnJvcl9yZWxlYXNlX3NvY2s6XG4gXHRyZWxlYXNlX3NvY2soXHUwMDI2cngtXHUwMDNlc2spO1xuK1x0a2V5X3B1dChwLmNhbGwuYXBwX2RhdGEpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtODA4LDcgKzg1OCw2IEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0XHQgICByeHJwY19ub3RpZnlfZW5kX3R4X3Qgbm90aWZ5X2VuZF90eClcbiB7XG4tXHRib29sIGRyb3BwZWRfbG9jayA9IGZhbHNlO1xuIFx0aW50IHJldDtcbiBcbiBcdF9lbnRlcihcInslZH0sXCIsIGNhbGwtXHUwMDNlZGVidWdfaWQpO1xuQEAgLTgxOSwxMiArODY4LDEwIEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFxuIFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spLCBjYWxsLCBtc2csIGxlbixcbi1cdFx0XHQgICAgICBub3RpZnlfZW5kX3R4LCBcdTAwMjZkcm9wcGVkX2xvY2spO1xuK1x0XHRcdCAgICAgIG5vdGlmeV9lbmRfdHgpO1xuIFx0aWYgKHJldCA9PSAtRVNIVVRET1dOKVxuIFx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuIFxuLVx0aWYgKCFkcm9wcGVkX2xvY2spXG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZXJ2ZXJfa2V5LmMgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXG5pbmRleCAzZWZlMTA0YjE5MzBjYi4uZmM2ZjQ3OGUxNzYyYTcgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvc2VydmVyX2tleS5jXG4rKysgYi9uZXQvcnhycGMvc2VydmVyX2tleS5jXG5AQCAtMTczLDQzICsxNzMsMyBAQCBpbnQgcnhycGNfc29ja19zZXRfc2VjdXJpdHlfa2V5cmluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBrZXkgKmtleXJpbmcpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJ4cnBjX3NvY2tfc2V0X3NlY3VyaXR5X2tleXJpbmcpO1xuLVxuLS8qKlxuLSAqIHJ4cnBjX3NvY2tfc2V0X21hbmFnZV9yZXNwb25zZSAtIFNldCB0aGUgbWFuYWdlLXJlc3BvbnNlIGZsYWcgZm9yIGEga2VybmVsIHNlcnZpY2Vcbi0gKiBAc2s6IFRoZSBzb2NrZXQgdG8gc2V0IHRoZSBrZXlyaW5nIG9uXG4tICogQHNldDogVHJ1ZSB0byBzZXQsIGZhbHNlIHRvIGNsZWFyIHRoZSBmbGFnXG4tICpcbi0gKiBTZXQgdGhlIGZsYWcgb24gYW4gcnhycGMgc29ja2V0IHRvIHNheSB0aGF0IHRoZSBjYWxsZXIgd2FudHMgdG8gbWFuYWdlIHRoZVxuLSAqIFJFU1BPTlNFIHBhY2tldCBhbmQgdGhlIHVzZXItZGVmaW5lZCBkYXRhIGl0IG1heSBjb250YWluLiAgU2V0dGluZyB0aGlzXG4tICogbWVhbnMgdGhhdCByZWN2bXNnKCkgd2lsbCByZXR1cm4gbWVzc2FnZXMgd2l0aCBSWFJQQ19DSEFMTEVOR0VEIGluIHRoZVxuLSAqIGNvbnRyb2wgbWVzc2FnZSBidWZmZXIgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hhbGxlbmdlLlxuLSAqXG4tICogVGhlIHVzZXIgc2hvdWxkIHJlc3BvbmQgdG8gdGhlIGNoYWxsZW5nZSBieSBwYXNzaW5nIFJYUlBDX1JFU1BPTkQgb3Jcbi0gKiBSWFJQQ19SRVNQT05EX0FCT1JUIGNvbnRyb2wgbWVzc2FnZXMgd2l0aCBzZW5kbXNnKCkgdG8gdGhlIHNhbWUgY2FsbC5cbi0gKiBTdXBwbGVtZW50YXJ5IGNvbnRyb2wgbWVzc2FnZXMsIHN1Y2ggYXMgUlhSUENfUkVTUF9SWEdLX0FQUERBVEEsIG1heSBiZVxuLSAqIGluY2x1ZGVkIHRvIGluZGljYXRlIHRoZSBwYXJ0cyB0aGUgdXNlciB3YW50cyB0byBzdXBwbHkuXG4tICpcbi0gKiBUaGUgc2VydmVyIHdpbGwgYmUgcGFzc2VkIHRoZSByZXNwb25zZSBkYXRhIHdpdGggYSBSWFJQQ19SRVNQT05ERUQgY29udHJvbFxuLSAqIG1lc3NhZ2Ugd2hlbiBpdCBnZXRzIHRoZSBmaXJzdCBkYXRhIGZyb20gZWFjaCBjYWxsLlxuLSAqXG4tICogTm90ZSB0aGF0IHRoaXMgaXMgb25seSBob25vdXJlZCBieSBzZWN1cml0eSBjbGFzc2VzIHRoYXQgbmVlZCBhdXhpbGlhcnkgZGF0YVxuLSAqIChlLmcuIFJ4R0spLiAgVGhvc2UgdGhhdCBkb24ndCBvZmZlciB0aGUgZmFjaWxpdHkgKGUuZy4gUnhLQUQpIHJlc3BvbmRcbi0gKiB3aXRob3V0IGNvbnN1bHRpbmcgdXNlcnNwYWNlLlxuLSAqXG4tICogUmV0dXJuOiBUaGUgcHJldmlvdXMgc2V0dGluZy5cbi0gKi9cbi1pbnQgcnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKHN0cnVjdCBzb2NrICpzaywgYm9vbCBzZXQpXG4te1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc2spO1xuLVx0aW50IHJldDtcbi1cbi1cdGxvY2tfc29jayhzayk7XG4tXHRyZXQgPSAhIXRlc3RfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRpZiAoc2V0KVxuLVx0XHRzZXRfYml0KFJYUlBDX1NPQ0tfTUFOQUdFX1JFU1BPTlNFLCBcdTAwMjZyeC1cdTAwM2VmbGFncyk7XG4tXHRlbHNlXG4tXHRcdGNsZWFyX2JpdChSWFJQQ19TT0NLX01BTkFHRV9SRVNQT05TRSwgXHUwMDI2cngtXHUwMDNlZmxhZ3MpO1xuLVx0cmVsZWFzZV9zb2NrKHNrKTtcbi1cdHJldHVybiByZXQ7XG4tfVxuLUVYUE9SVF9TWU1CT0wocnhycGNfc29ja19zZXRfbWFuYWdlX3Jlc3BvbnNlKTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xuaW5kZXggNmY4OGI1MDdmOTI3OTEuLjkwYzFiZDVkN2RmZWNmIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xuKysrIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xuQEAgLTY3LDYgKzY3LDcgQEAgaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbiBcdHVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgZGF0YWxlbik7XG4gXHRpZiAoIXVwYXlsb2FkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJlZmNvdW50X3NldChcdTAwMjZ1cGF5bG9hZC1cdTAwM2VyZWYsIDEpO1xuIFxuIFx0LyogYXR0YWNoIHRoZSBkYXRhICovXG4gXHRwcmVwLVx1MDAzZXF1b3RhbGVuID0gZGF0YWxlbjtcbkBAIC04OCwxMiArODksMjIgQEAgRVhQT1JUX1NZTUJPTF9HUEwodXNlcl9mcmVlX3ByZXBhcnNlKTtcbiBcbiBzdGF0aWMgdm9pZCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIHtcbi1cdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkO1xuK1x0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQgPVxuK1x0XHRjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQsIHJjdSk7XG4gXG4tXHRwYXlsb2FkID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpO1xuIFx0a2ZyZWVfc2Vuc2l0aXZlKHBheWxvYWQpO1xuIH1cbiBcbisvKlxuKyAqIEZyZWUgYSB1c2VyIGRlZmluZWQga2V5IHBheWxvYWQuXG4rICovXG4rdm9pZCBwdXRfdXNlcl9rZXlfcGF5bG9hZChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZClcbit7XG4rXHRpZiAocGF5bG9hZCBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnBheWxvYWQtXHUwMDNlcmVmKSlcbitcdFx0Y2FsbF9yY3UoXHUwMDI2cGF5bG9hZC1cdTAwM2VyY3UsIHVzZXJfZnJlZV9wYXlsb2FkX3JjdSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHB1dF91c2VyX2tleV9wYXlsb2FkKTtcbitcbiAvKlxuICAqIHVwZGF0ZSBhIHVzZXIgZGVmaW5lZCBrZXlcbiAgKiAtIHRoZSBrZXkncyBzZW1hcGhvcmUgaXMgd3JpdGUtbG9ja2VkXG5AQCAtMTE1LDggKzEyNiw3IEBAIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXG4gXHRyY3VfYXNzaWduX2tleXBvaW50ZXIoa2V5LCBwcmVwLVx1MDAzZXBheWxvYWQuZGF0YVswXSk7XG4gXHRwcmVwLVx1MDAzZXBheWxvYWQuZGF0YVswXSA9IE5VTEw7XG4gXG4tXHRpZiAoemFwKVxuLVx0XHRjYWxsX3JjdShcdTAwMjZ6YXAtXHUwMDNlcmN1LCB1c2VyX2ZyZWVfcGF5bG9hZF9yY3UpO1xuK1x0cHV0X3VzZXJfa2V5X3BheWxvYWQoemFwKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHVzZXJfdXBkYXRlKTtcbkBAIC0xMzQsNyArMTQ0LDcgQEAgdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpXG4gXG4gXHRpZiAodXBheWxvYWQpIHtcbiBcdFx0cmN1X2Fzc2lnbl9rZXlwb2ludGVyKGtleSwgTlVMTCk7XG4tXHRcdGNhbGxfcmN1KFx1MDAyNnVwYXlsb2FkLVx1MDAzZXJjdSwgdXNlcl9mcmVlX3BheWxvYWRfcmN1KTtcbitcdFx0cHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpO1xuIFx0fVxuIH1cbiBcbkBAIC0xNDcsOSArMTU3LDggQEAgdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KVxuIHtcbiBcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZCA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4gXG4tXHRrZnJlZV9zZW5zaXRpdmUodXBheWxvYWQpO1xuK1x0cHV0X3VzZXJfa2V5X3BheWxvYWQodXBheWxvYWQpO1xuIH1cbi1cbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2Rlc3Ryb3kpO1xuIFxuIC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMDowMC4zNjg0MTkyODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDAyMjk1OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUnhHSy9BRlMgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCdzIHRvdWNoaW5nIGJvdGggYGZzL2Fmcy9gIGFuZCBgbmV0L3J4cnBjL2AuIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYXJvdW5kIFJ4R0sgKFJ4UlBDIEdTU0FQSSBLZXJiZXJvcykgYW5kIGhvdyBBRlMgaGFuZGxlcyB0aGVzZSBjaGFsbGVuZ2UtcmVzcG9uc2UgaW50ZXJhY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIGBhcHBfZGF0YWAuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXkndmUgcmlwcGVkIG91dCB0aGUgb2xkIGByeHJwY19zb2NrX3NldF9tYW5hZ2VfcmVzcG9uc2VgIGFuZCB0aGUgb3V0LW9mLWJhbmQgKE9PQikgbWVzc2FnZSBoYW5kbGluZyBmb3IgdGhlc2UgY2hhbGxlbmdlcywgYW5kIGluc3RlYWQsIGFyZSBub3cgdXNpbmcgYGFwcF9kYXRhYCBhcyBhIGtleSB3aGVuIGtpY2tpbmcgb2ZmIGEgY2FsbCB3aXRoIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAuXG5cbk15IG5leHQgdGhvdWdodCBpcyB0byByZWFsbHkgZGlnIGludG8gd2hhdCdzIGJlaW5nIG1vZGlmaWVkIGluIGBmcy9hZnMvYCBhbmQgYG5ldC9yeHJwYy9gLiBJJ20gc2VlaW5nIHRoYXQgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIGlzIG5vdyByZXNwb25zaWJsZSBmb3IgY3JhZnRpbmcgYSBrZXkgdGhhdCBpbmNsdWRlcyB0aGlzIGBhcHBkYXRhYCwgd2hpY2ggdGhlbiBnZXRzIHN0b3JlZCBpbiBgc2VydmVyLVx1MDAzZXlmc19yeGdrX2FwcGRhdGFgLiBUaGlzIGtleSBpcyB0aGVuIHBhc3NlZCB0byBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLiBUaGlzIGlzIHRoZSBkaXJlY3QgcmVwbGFjZW1lbnQgb2YgdGhlIHByZXZpb3VzIE9PQiBjaGFsbGVuZ2UgaGFuZGxpbmcgaW4gQUZTLlxuXG5TbywgZnJvbSBhIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eSBwZXJzcGVjdGl2ZSwgdGhpcyBzZWVtcyBwcmV0dHkgc2lnbmlmaWNhbnQuIEl0J3MgbW9kaWZ5aW5nIGNvcmUgY29tcG9uZW50cyBvZiBSeFJQQywgdGhlIG5ldHdvcmsgcHJvdG9jb2wsIGFuZCBBRlMsIHRoZSBmaWxlc3lzdGVtLCBzbyBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBJJ20gbm90aW5nIHRoYXQgYG9vYi5jYCBoYXMgYmVlbiByZW1vdmVkIGZyb20gYG5ldC9yeHJwYy9gLCBhbmQgdGhlIGJlaGF2aW9yIG9mIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAgaGFzIGJlZW4gYWx0ZXJlZC5cblxuTm93LCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBCYXNlZCBvbiB0aGUgY2hhbmdlcywgSSdtIGdvaW5nIHRvIHdhbnQgdG8gY29uY2VudHJhdGUgb24gdGhlc2UgZnVuY3Rpb25zIGluIGBuZXQvcnhycGMvYDogYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYHJ4cnBjX3NlbmRfZGF0YWAsIGByeHJwY19kb19zZW5kbXNnYCwgYHJ4cnBjX3JlY3Ztc2dgLCBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAsIGFuZCBgcnhycGNfa2VybmVsX3F1ZXJ5X2tleWAuIEluIGBmcy9hZnMvYCwgSSB3aWxsIGJlIHJldmlld2luZyBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGBhZnNfY3JlYXRlX3lmc19yeGdrX2NtX2FwcGRhdGFgLCBgYWZzX21ha2VfY2FsbGAsIGFuZCBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgLlxuXG5GaW5hbGx5LCBpdCdzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IGBDT05GSUdfUlhHS2AgaXMgaW5kZWVkIGEgcHJlcmVxdWlzaXRlIGhlcmUuIFRoZSBjb2RlIGluY2x1ZGVzIGAjaWZkZWYgQ09ORklHX1JYR0tgIGluIGBmcy9hZnMvY21fc2VjdXJpdHkuY2AgYW5kIGBmcy9hZnMvaW50ZXJuYWwuaGAgYW5kIGFsc28gYG5ldC9yeHJwYy9yeGdrLmNgIGlzIGludm9sdmVkLCBzbyB5ZXMsIHRoaXMgaXMgY2xlYXJseSBjb25kaXRpb25hbCBvbiB0aGF0IGNvbmZpZ3VyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGdvIGFuZCBjaGVjayBLY29uZmlnIGFzIHdlbGwsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2NjQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMDowOS43NzA3MTc4MjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIwOTI0Mjg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUlhHS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvS2NvbmZpZz01OD1jb25maWcgUlhLQURcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTY1LVxcbm5ldC9yeHJwYy9LY29uZmlnOjY2OmNvbmZpZyBSWEdLXFxubmV0L3J4cnBjL0tjb25maWctNjctXFx0Ym9vbCBcXFwiUnhSUEMgR1NTQVBJIHNlY3VyaXR5XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMDoxMi45Nzk5Njk2NTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDAxODg3NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX1JYR0tgIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuUmlnaHQsIHNvIGBDT05GSUdfUlhHS2AuLi4gdGhhdCdzIGEga2VybmVsIGNvbmZpZyBvcHRpb24sIG9idmlvdXNseS4gSGFuZyBvbiBhIHNlY29uZCwgd2Fzbid0IHRoYXQgc3VwcG9zZWQgdG8gYmUgdXBzdHJlYW1lZCBhbHJlYWR5PyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2suIE9rYXksIEknbGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBwbGFjZSwgdGhlIGBuZXQvcnhycGMvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBtb3N0IGxpa2VseSBzcG90IGZvciBpdCwgZ2l2ZW4gdGhlIG5hbWUuIExldCdzIHNlZSBpZiBpdCdzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzg1OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEwOjAwOjE5Ljk4MTg1OTYwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYzNTgxNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBSWEdLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yeHJwYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9LY29uZmlnPTU4PWNvbmZpZyBSWEtBRFxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctNjUtXFxubmV0L3J4cnBjL0tjb25maWc6NjY6Y29uZmlnIFJYR0tcXG5uZXQvcnhycGMvS2NvbmZpZy02Ny1cXHRib29sIFxcXCJSeFJQQyBHU1NBUEkgc2VjdXJpdHlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEwOjAwOjIxLjc0NTQ0NTk0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNzkwMzExNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlF1aWNrIFNjYW46IEFGUyBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBJIHNlZSBpdC4gVGhlIHByZXNlbmNlIG9mIGBDT05GSUdfQUZTX0ZTYCBhbmQgYENPTkZJR19BRl9SWFJQQ2AgZGVmaW5pdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggQUZTIHN1cHBvcnQgaGVyZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBsZXQncyBkaXZlIGRlZXBlci4gU3BlY2lmaWNhbGx5LCBsZXQncyB6ZXJvIGluIG9uIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYC4gVGhhdCBmdW5jdGlvbiB3aWxsIGxpa2VseSBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzZXJ2ZXItc2lkZSBhcHBsaWNhdGlvbiBkYXRhIGlzIG1hbmFnZWQuIEl0IHByb2JhYmx5IGRldGFpbHMgaG93IGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB3aGVuIHNldHRpbmcgdXAgYW4gQUZTIHNlcnZlciBpbnN0YW5jZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgaW5mbHVlbmNlIHRoYXQgcHJvY2VzcywgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQxMzQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMDoyOC45MjQ0Nzk3NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0NDUyMjM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9jbV9zZWN1cml0eS5jPTI4PXN0YXRpYyBpbnQgYWZzX2NyZWF0ZV95ZnNfcnhna19jbV9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsIHUzMiBlbmN0eXBlKVxcbi0tXFxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjA3LSAqL1xcbmZzL2Fmcy9jbV9zZWN1cml0eS5jOjIwODppbnQgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3Qga2V5ICprZXkpXFxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjA5LXtcXG4tLVxcbmZzL2Fmcy9mc19wcm9iZS5jPTIzOD1pbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcXG4tLVxcbmZzL2Fmcy9mc19wcm9iZS5jLTI0Ny1cXG5mcy9hZnMvZnNfcHJvYmUuYzoyNDg6XFx0cmV0ID0gYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YShzZXJ2ZXIsIGtleSk7XFxuZnMvYWZzL2ZzX3Byb2JlLmMtMjQ5LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTA4NT1leHRlcm4gYm9vbCBhZnNfY21faW5jb21pbmdfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKik7XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDg5LSAqL1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwOTA6aW50IGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IGtleSAqa2V5KTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMDkxLSNpZmRlZiBDT05GSUdfUlhHS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMDozMS40NjkwMTA4NzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTMzNDU3NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIHdob2xlIHRoaW5nLiBVbmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgZmxvdywgdGhlIHVuZGVybHlpbmcgbG9naWMsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zIHdlIGNhbiBleHBsb3JlIGluIHRoaXMgYXJlYS4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIG9yIG1heWJlIGV2ZW4gdGhlIGhhcmR3YXJlLCBiZWdpbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBpdCdzIGRvaW5nIGluIGRldGFpbC4gVGhpcyBpc24ndCBqdXN0IGFib3V0IHJlYWRpbmcgdGhlIGNvZGU7IGl0J3MgYWJvdXQgY29ubmVjdGluZyBpdCB0byBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIFJYUlBDIHByb3RvY29sLCB0aGUga2VybmVsJ3MgYXJjaGl0ZWN0dXJlLCBhbmQgYWxsIHRoZSByZWxldmFudCBoYXJkd2FyZSBhbmQgaG93IGl0IGZpdHMuIEkgbmVlZCB0byBmb3JtIGEgbWVudGFsIG1vZGVsIG9mIHdoYXQncyBoYXBwZW5pbmcuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzIxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTA6MDA6MzUuMDAyNDcxNTM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMxOTMzMTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3Q9Nzk1PVRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QtNzk5LVxcdHN0cnVjdCByeHJwY19jYWxsICpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0OjgwMDpcXHRyeHJwY19rZXJuZWxfYmVnaW5fY2FsbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QtODAxLVxcdFxcdFxcdFxcdHN0cnVjdCBzb2NrYWRkcl9yeHJwYyAqc3J4LFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC05ODktICAgICBUaGlzIGlzIHVzZWQgdG8gYWNjZXB0IGFuIGluY29taW5nIGNhbGwgYW5kIHRvIGFzc2lnbiBpdCBhIGNhbGwgSUQuICBUaGlzXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdDo5OTA6ICAgICBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKCkgYW5kIGNhbGxzIGFjY2VwdGVkIG11c3RcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LTk5MS0gICAgIGJlIGVuZGVkIGluIHRoZSBzYW1lIHdheS5cXG4tLVxcbmZzL2Fmcy9yeHJwYy5jPTMwMT12b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuLS1cXG5mcy9hZnMvcnhycGMuYy0zNTUtXFx0LyogY3JlYXRlIGEgY2FsbCAqL1xcbmZzL2Fmcy9yeHJwYy5jOjM1NjpcXHRyeGNhbGwgPSByeHJwY19rZXJuZWxfYmVnaW5fY2FsbChjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZXNvY2tldCwgY2FsbC1cXHUwMDNlcGVlcixcXG5mcy9hZnMvcnhycGMuYy0zNTctXFx0XFx0XFx0XFx0XFx0IGNhbGwtXFx1MDAzZWtleSwgYXBwX2RhdGEsXFxuLS1cXG5pbmNsdWRlL25ldC9hZl9yeHJwYy5oPTUzPXZvaWQgcnhycGNfa2VybmVsX3NldF9ub3RpZmljYXRpb25zKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaC01NC1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHJ4cnBjX2tlcm5lbF9vcHMgKmFwcF9vcHMpO1xcbmluY2x1ZGUvbmV0L2FmX3J4cnBjLmg6NTU6c3RydWN0IHJ4cnBjX2NhbGwgKnJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuaW5jbHVkZS9uZXQvYWZfcnhycGMuaC01Ni1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcixcXG4tLVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jPTMxND1FWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9wdXRfcGVlcik7XFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zMTYtLyoqXFxubmV0L3J4cnBjL2FmX3J4cnBjLmM6MzE3OiAqIHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsIC0gQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byBiZWdpbiBhIGNhbGxcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zMTgtICogQHNvY2s6IFRoZSBzb2NrZXQgb24gd2hpY2ggdG8gbWFrZSB0aGUgY2FsbFxcbi0tXFxubmV0L3J4cnBjL2FmX3J4cnBjLmMtMzQwLSAqL1xcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjM0MTpzdHJ1Y3QgcnhycGNfY2FsbCAqcnhycGNfa2VybmVsX2JlZ2luX2NhbGwoc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zNDItXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIsXFxuLS1cXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zOTctfVxcbm5ldC9yeHJwYy9hZl9yeHJwYy5jOjM5ODpFWFBPUlRfU1lNQk9MKHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsKTtcXG5uZXQvcnhycGMvYWZfcnhycGMuYy0zOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEwOjAwOjM3LjUzNDQwOTkxN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjE4NDYxMzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIHRoZSBSWFJQQyBQYXRjaCoqXG5cblJpZ2h0LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIHNvbWUgY29yZSBmdW5jdGlvbnMgaW4gdGhlIFJYUlBDIGtlcm5lbCBtb2R1bGUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgc2lnbmF0dXJlIGNoYW5nZSBmb3IgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYC4gIEFkZGluZyBgc3RydWN0IGtleSAqYXBwX2RhdGFgIHRoZXJlIGlzIHNpZ25pZmljYW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhhdCB3YXMgZGVlbWVkIG5lY2Vzc2FyeS4gSXTigJlzIGxpa2VseSByZWxhdGVkIHRvIHNlY3VyaXR5IGNvbnRleHQgb3IgYXBwbGljYXRpb24tc3BlY2lmaWMgZGF0YSBhc3NvY2lhdGlvbi4gVGhpcyB3aWxsIGFmZmVjdCBob3cgY2FsbHMgYXJlIGluaXRpYXRlZC4gSXQgYWxzbyBtZWFucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgdXNlZCB0byBlbnN1cmUgdGhlIGBhcHBfZGF0YWAgaXMgY29ycmVjdGx5IHByb3ZpZGVkIG9yIGhhbmRsZWQuXG5cbk5leHQsIGl0IG1lbnRpb25zIGNoYW5nZXMgdG8gYHJ4cnBjX3NlbmRfZGF0YWAgYW5kIGByeHJwY19kb19zZW5kbXNnYC4gTm93LCBgcnhycGNfc2VuZF9kYXRhYCBkZWFscyB3aXRoIGFjdHVhbGx5IHRyYW5zbWl0dGluZyB0aGUgZGF0YSwgYW5kIGByeHJwY19kb19zZW5kbXNnYCBpcyBsaWtlbHkgaGFuZGxpbmcgdGhlIHNvY2tldCBvcGVyYXRpb25zLCByaWdodD8gQW55IGFsdGVyYXRpb24gdG8gdGhlc2UgZnVuY3Rpb25zIHdhcnJhbnRzIHNjcnV0aW55IGJlY2F1c2UgdGhleSdyZSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHJlbGlhYmlsaXR5LiBJIHNob3VsZCByZWFsbHkgY2hlY2sgaG93IHRoZXNlIGludGVyYWN0IHdpdGggdGhlIGFkZGVkIGBhcHBfZGF0YWAuXG5cblNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gaG93IHRoaXMgYWZmZWN0cyB0aGUgZGF0YSB0cmFuc21pc3Npb24gZmxvdy4gSXQncyBsaWtlbHkgdGhhdCBgYXBwX2RhdGFgIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZSBvciB1c2VkIHRvIGZpbHRlciBvciBjb25maWd1cmUgdGhlIHRyYW5zbWlzc2lvbiBwYXJhbWV0ZXJzLlxuXG5Pa2F5LCBsZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYHJ4cnBjX3NlbmRfZGF0YWAgaW4gYG5ldC9yeHJwYy9zZW5kbXNnLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWsuIFVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMgdGhlcmUgd2lsbCBpbGx1bWluYXRlIHRoZSBjb3JlIGltcGFjdCBvZiB0aGlzIG1vZGlmaWNhdGlvbi4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbnRleHQgYXJvdW5kIHRoZSBmdW5jdGlvbiBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTY3NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEwOjAwOjQxLjc1Mjg3MzEyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0MDEwODY5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19zZW5kX2RhdGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaD0xODY5PVRSQUNFX0VWRU5UKHJ4cnBjX3JldHJhbnNtaXQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaC0xODcwLVxcdCAgICBUUF9QUk9UTyhzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oOjE4NzE6XFx0XFx0ICAgICBzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmgtMTg3Mi1cXHRcXHQgICAgIHN0cnVjdCByeHJwY190eGJ1ZiAqdHhiKSxcXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTk2Nj1zdHJ1Y3QgcnhycGNfdHhxdWV1ZSB7XFxuLS1cXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC05OTAtICovXFxubmV0L3J4cnBjL2FyLWludGVybmFsLmg6OTkxOnN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxIHtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC05OTItXFx0a3RpbWVfdFxcdFxcdFxcdG5vdztcXHRcXHQvKiBDdXJyZW50IHRpbWUgKi9cXG4tLVxcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oPTEzNzc9aW50IHJ4cnBjX3NlbmRfYWJvcnRfcGFja2V0KHN0cnVjdCByeHJwY19jYWxsICopO1xcbm5ldC9yeHJwYy9hci1pbnRlcm5hbC5oOjEzNzg6dm9pZCByeHJwY19zZW5kX2RhdGFfcGFja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCBzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxKTtcXG5uZXQvcnhycGMvYXItaW50ZXJuYWwuaC0xMzc5LXZvaWQgcnhycGNfc2VuZF9jb25uX2Fib3J0KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uKTtcXG4tLVxcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM9NjA9c3RhdGljIGJvb2wgcnhycGNfcmV0cmFuc21pdF9kYXRhKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM6NjE6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxKVxcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmMtNjIte1xcbi0tXFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy03Mi1cXHR0eGItXFx1MDAzZWZsYWdzIHw9IFJYUlBDX1RYQlVGX1JFU0VOVDtcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jOjczOlxcdHJ4cnBjX3NlbmRfZGF0YV9wYWNrZXQoY2FsbCwgcmVxKTtcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTc0LVxcdHJ4cnBjX2luY19zdGF0KGNhbGwtXFx1MDAzZXJ4bmV0LCBzdGF0X3R4X2RhdGFfcmV0cmFucyk7XFxuLS1cXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jPTg2PXN0YXRpYyB2b2lkIHJ4cnBjX3Jlc2VuZChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTg3LXtcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jOjg4OlxcdHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxIHJlcSA9IHtcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTg5LVxcdFxcdC5ub3dcXHQ9IGt0aW1lX2dldF9yZWFsKCksXFxuLS1cXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jPTEzMT12b2lkIHJ4cnBjX3Jlc2VuZF90bHAoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy0xMzIte1xcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM6MTMzOlxcdHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxIHJlcSA9IHtcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTEzNC1cXHRcXHQubm93XFx0XFx0PSBrdGltZV9nZXRfcmVhbCgpLFxcbi0tXFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYz0xOTQ9c3RhdGljIHZvaWQgcnhycGNfdHJhbnNtaXRfZnJlc2hfZGF0YShzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgdW5zaWduZWQgaW50IGxpbWl0LFxcbi0tXFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy0yMDUtXFx0d2hpbGUgKHNwYWNlIFxcdTAwM2UgMCkge1xcbm5ldC9yeHJwYy9jYWxsX2V2ZW50LmM6MjA2OlxcdFxcdHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxIHJlcSA9IHtcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTIwNy1cXHRcXHRcXHQubm93XFx0PSBrdGltZV9nZXRfcmVhbCgpLFxcbi0tXFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYy0yNTYtXFx0XFx0c3BhY2UgLT0gcmVxLm47XFxubmV0L3J4cnBjL2NhbGxfZXZlbnQuYzoyNTc6XFx0XFx0cnhycGNfc2VuZF9kYXRhX3BhY2tldChjYWxsLCBcXHUwMDI2cmVxKTtcXG5uZXQvcnhycGMvY2FsbF9ldmVudC5jLTI1OC1cXHR9XFxuLS1cXG5uZXQvcnhycGMvb3V0cHV0LmM9NDI2PXN0YXRpYyBzaXplX3QgcnhycGNfcHJlcGFyZV9kYXRhX3N1YnBhY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG5uZXQvcnhycGMvb3V0cHV0LmM6NDI3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19zZW5kX2RhdGFfcmVxICpyZXEsXFxubmV0L3J4cnBjL291dHB1dC5jLTQyOC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcnhycGNfdHhidWYgKnR4YixcXG4tLVxcbm5ldC9yeHJwYy9vdXRwdXQuYz01MjA9c3RhdGljIHVuc2lnbmVkIGludCByeHJwY19wcmVwYXJlX3R4cXVldWUoc3RydWN0IHJ4cnBjX3R4cXVldWUgKnRxLFxcbm5ldC9yeHJwYy9vdXRwdXQuYzo1MjE6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxKVxcbm5ldC9yeHJwYy9vdXRwdXQuYy01MjIte1xcbi0tXFxubmV0L3J4cnBjL291dHB1dC5jPTUzNT1zdGF0aWMgc2l6ZV90IHJ4cnBjX3ByZXBhcmVfZGF0YV9wYWNrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxubmV0L3J4cnBjL291dHB1dC5jOjUzNjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcnhycGNfc2VuZF9kYXRhX3JlcSAqcmVxLFxcbm5ldC9yeHJwYy9vdXRwdXQuYy01MzctXFx0XFx0XFx0XFx0XFx0c3RydWN0IHJ4cnBjX3dpcmVfaGVhZGVyICp3aGRyKVxcbi0tXFxubmV0L3J4cnBjL291dHB1dC5jLTYzOC0gKi9cXG5uZXQvcnhycGMvb3V0cHV0LmM6NjM5OnZvaWQgcnhycGNfc2VuZF9kYXRhX3BhY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCwgc3RydWN0IHJ4cnBjX3NlbmRfZGF0YV9yZXEgKnJlcSlcXG5uZXQvcnhycGMvb3V0cHV0LmMtNjQwLXtcXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmM9MjMwPXN0YXRpYyB2b2lkIHJ4cnBjX25vdGlmeV9lbmRfdHgoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtMjM4LSAqIFF1ZXVlIGEgREFUQSBwYWNrZXQgZm9yIHRyYW5zbWlzc2lvbiwgc2V0IHRoZSByZXNlbmQgdGltZW91dCBhbmQgc2VuZFxcbm5ldC9yeHJwYy9zZW5kbXNnLmM6MjM5OiAqIHRoZSBwYWNrZXQgaW1tZWRpYXRlbHkuICBSZXR1cm5zIHRoZSBlcnJvciBmcm9tIHJ4cnBjX3NlbmRfZGF0YV9wYWNrZXQoKVxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtMjQwLSAqIGluIGNhc2UgdGhlIGNhbGxlciB3YW50cyB0byBkbyBzb21ldGhpbmcgd2l0aCBpdC5cXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmM9MjgyPXN0YXRpYyBpbnQgcnhycGNfYWxsb2NfdHhxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbi0tXFxubmV0L3J4cnBjL3NlbmRtc2cuYy0zMjAtICovXFxubmV0L3J4cnBjL3NlbmRtc2cuYzozMjE6c3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtMzIyLVxcdFxcdFxcdCAgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbi0tXFxubmV0L3J4cnBjL3NlbmRtc2cuYz03MDY9aW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvcnhycGMvc2VuZG1zZy5jLTgxOS1cXHRjYXNlIFJYUlBDX0NNRF9TRU5EX0RBVEE6XFxubmV0L3J4cnBjL3NlbmRtc2cuYzo4MjA6XFx0XFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCk7XFxubmV0L3J4cnBjL3NlbmRtc2cuYy04MjEtXFx0XFx0Z290byBlcnJvcl9wdXQ7XFxuLS1cXG5uZXQvcnhycGMvc2VuZG1zZy5jPTg1Nz1pbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtODY5LVxcbm5ldC9yeHJwYy9zZW5kbXNnLmM6ODcwOlxcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLVxcdTAwM2VzayksIGNhbGwsIG1zZywgbGVuLFxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtODcxLVxcdFxcdFxcdCAgICAgIG5vdGlmeV9lbmRfdHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMDo0NC4xOTI5ODk5MDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTMyNjIwOTYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJ4UlBDIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGhvdyBSeFJQQyBoYW5kbGVzIGNyeXB0byBlcnJvcnMgYW5kIGFwcGRhdGEuIEZpcnN0LCBpdCBsb29rcyBsaWtlIGByeHJwY19zZW5kX2RhdGFgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGhhbmRsZSBhbmQgcmV0dXJuIGNyeXB0byBlcnJvcnMsIGFuZCB0aGUgYGRyb3BwZWRfbG9ja2AgcGFyYW1ldGVyIGlzIGJlaW5nIHJlbW92ZWQuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIG1vcmUgaW50ZXJlc3Rpbmcgc3R1ZmYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgIGlzIGRvaW5nLiBBaCwgaXQgY3JlYXRlcyBhIGBrZXlfdHlwZV91c2VyYCBrZXkgY29udGFpbmluZyB0aGUgYXBwZGF0YSwgYW5kIHN0b3JlcyBpdCBpbiBgc2VydmVyLVx1MDAzZXlmc19yeGdrX2FwcGRhdGFgLiBUaGVuLCB3aGVuIGBhZnNfbWFrZV9jYWxsYCBpcyBpbnZva2VkLCBpdCBwYXNzZXMgdGhpcyBrZXkgdG8gYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYC4gVGhpcyByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBzaGlmdCBpbiBob3cgQUZTIGFuZCBSeFJQQyBpbnRlcmFjdCByZWdhcmRpbmcgUnhHSyBhcHBkYXRhLlxuXG5JcyB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSByZWFjaGFibGU/IFllcywgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCBjYWxscyBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGFuZCBgYWZzX21ha2VfY2FsbGAgZ2V0cyBjYWxsZWQgZm9yIGFsbCBBRlMgY2FsbHMuIGByeHJwY19rZXJuZWxfYmVnaW5fY2FsbGAgaXMgdGhlIGtlcm5lbCBlbnRyeSBwb2ludCBmb3IgUnhSUEMgY2FsbHMsIGFuZCBgcnhycGNfZG9fc2VuZG1zZ2AgYW5kIGByeHJwY19zZW5kbXNnYCBhcmUgdGhlIHVzZXItc3BhY2UgZW50cnkgcG9pbnRzLiBHb29kLlxuXG5Ib2xkIG9uLCB0aGUgcGF0Y2ggYWxzbyByZW1vdmVzIGBvb2IuY2AgZnJvbSBgbmV0L3J4cnBjL2AuIFRoaXMgaXMgYSBiaWcgb25lLiBJdCBtZWFucyB0aGUgT3V0LW9mLUJhbmQgKE9PQikgbWVjaGFuaXNtIGlzIGNvbXBsZXRlbHkgZ29uZS4gVGhhdCBpbXBsaWVzIHRoYXQgdXNlci1zcGFjZSBub3cgaGFzIHRvIHVzZSBgUlhSUENfUkVTUE9OU0VfQVBQREFUQWAgY29udHJvbCBtZXNzYWdlIGluIGBzZW5kbXNnYCB0byBwYXNzIHRoZSBhcHBkYXRhIGtleSBpbnN0ZWFkIG9mIHJlc3BvbmRpbmcgdG8gT09CIGNoYWxsZW5nZXMuXG5cbkxldCBtZSB2ZXJpZnkgaG93IGByeHJwY19zZW5kbXNnX2Ntc2dgIGhhbmRsZXMgdGhpcywgY2hlY2tpbmcgYG5ldC9yeHJwYy9zZW5kbXNnLmNgLiBPa2F5LCBoZXJlJ3MgdGhlIHJlbGV2YW50IHNlY3Rpb246XG5cbmBgYGNcblx0XHRjYXNlIFJYUlBDX1JFU1BPTlNFX0FQUERBVEE6XG5cdFx0XHRpZiAobGVuICE9IHNpemVvZihrZXlfc2VyaWFsX3QpKVxuXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcblx0XHRcdGlmIChwLVx1MDAzZWNhbGwuYXBwX2RhdGEpXG5cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuXHRcdFx0a2V5X2lkID0gKihrZXlfc2VyaWFsX3QgKilDTVNHX0RBVEEoY21zZyk7XG5cdFx0XHRrZXkgPSBsb29rdXBfdXNlcl9rZXkoa2V5X2lkLCAwLCBLRVlfTkVFRF9TRUFSQ0gpO1xuXHRcdFx0aWYgKElTX0VSUihrZXkpKVxuXHRcdFx0XHRyZXR1cm4gUFRSX0VSUihrZXkpO1xuXHRcdFx0aWYgKGtleV9yZWZfdG9fcHRyKGtleSktXHUwMDNldHlwZSA9PSBcdTAwMjZrZXlfdHlwZV91c2VyKSB7XG5cdFx0XHRcdGtleV9yZWZfcHV0KGtleSk7XG5cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuXHRcdFx0fVxuXHRcdFx0cC1cdTAwM2VjYWxsLmFwcF9kYXRhID0ga2V5X3JlZl90b19wdHIoa2V5KTtcblx0XHRcdGJyZWFrO1xuYGBgXG5cbldhaXQgYSBzZWNvbmQuLi4gSXQgY2hlY2tzIGBpZiAoa2V5X3JlZl90b19wdHIoa2V5KS1cdTAwM2V0eXBlID09IFx1MDAyNmtleV90eXBlX3VzZXIpYCBhbmQgcmV0dXJucyBgLUVJTlZBTGAgaWYgaXQgSVMgYGtleV90eXBlX3VzZXJgPyBUaGF0J3MgdGhlICp1c2VyKiBrZXkgdHlwZSEgIEl0IG1lYW5zIHRoZSBjb2RlIGlzICpyZWplY3RpbmcqIGEgdXNlciBrZXkuIFRoYXQgZG9lc24ndCBtYWtlIHNlbnNlISAgTGV0IG1lIGdvIGJhY2sgYW5kIHJlLXJlYWQgdGhhdCBwYXRjaCBjYXJlZnVsbHkuLi4gc29tZXRoaW5nIGlzbid0IHJpZ2h0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEwOjAwOjUzLjUxOTIwMTY5MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNDU4NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtleV90eXBlX3VzZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjL3NlbmRtc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvc2VuZG1zZy5jPTUzMT1zdGF0aWMgaW50IHJ4cnBjX3NlbmRtc2dfY21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyAqcClcXG4tLVxcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNjI4LVxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGtleSk7XFxubmV0L3J4cnBjL3NlbmRtc2cuYzo2Mjk6XFx0XFx0XFx0aWYgKGtleV9yZWZfdG9fcHRyKGtleSktXFx1MDAzZXR5cGUgPT0gXFx1MDAyNmtleV90eXBlX3VzZXIpIHtcXG5uZXQvcnhycGMvc2VuZG1zZy5jLTYzMC1cXHRcXHRcXHRcXHRrZXlfcmVmX3B1dChrZXkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMDo1My42Mjk2NjQyMTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxMjA5NzIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtleSBUeXBlIExvZ2ljKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gTGV0IG1lIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcy4gVGhlIGNvZGUncyBjaGVja2luZyBgaWYgKGtleV9yZWZfdG9fcHRyKGtleSktXHUwMDNldHlwZSA9PSBcdTAwMjZrZXlfdHlwZV91c2VyKWAuLi4gYnV0IHdoYXQncyB0aGUgaW1wbGljYXRpb24gaWYgaXQncyAqYWN0dWFsbHkqIGEgYGtleV90eXBlX3VzZXJgPyBJdCByZXR1cm5zIGAtRUlOVkFMYD8gVGhhdCBzZWVtcy4uLiBjb3VudGVyaW50dWl0aXZlLlxuXG5Ob3csIGxldCdzIGJhY2sgdXAuIEkgc2VlIHRoYXQgYGtleV90eXBlX3VzZXJgICppcyogaW5kZWVkIHRoZSB0eXBlIG9mIGtleSBBRlMgY3JlYXRlcywgc3BlY2lmaWNhbGx5LCBpbiBgYWZzX2NyZWF0ZV95ZnNfcnhna19jbV9hcHBkYXRhYCBpdCBjYWxscyBga2V5X2FsbG9jYCBhbmQgYXNzaWducyB0aGUgdHlwZSB0byBgXHUwMDI2a2V5X3R5cGVfdXNlcmAuIFNvIEFGUyAqZG9lcyogY3JlYXRlIHRoZXNlIGBrZXlfdHlwZV91c2VyYCBrZXlzLlxuXG5CdXQgdGhlbiBpbiBgcnhycGNfc2VuZG1zZ19jbXNnYCwgaXQgaGFzIHRoYXQgKnNhbWUqIGNoZWNrLCBgaWYgKGtleV9yZWZfdG9fcHRyKGtleSktXHUwMDNldHlwZSA9PSBcdTAwMjZrZXlfdHlwZV91c2VyKWAsIGFuZCAqc3RpbGwqIHJldHVybnMgYC1FSU5WQUxgIGlmIHRoZSBrZXkgKmlzKiBhIGBrZXlfdHlwZV91c2VyYC4gVGhpcyBkb2Vzbid0IG1ha2Ugc2Vuc2UuIElzbid0IHRoYXQgdGhlIHdob2xlIHBvaW50IG9mIHVzaW5nIGEgYGtleV90eXBlX3VzZXJgIGhlcmU/XG5cbldhaXQsIG1heWJlIEknbSBtaXNyZWFkaW5nIHRoZSBsb2dpYy4gUGVyaGFwcyBJIG5lZWQgdG8gY29uc2lkZXIgYCE9IFx1MDAyNmtleV90eXBlX3VzZXJgLiBJcyB0aGUgaW50ZW50aW9uIHRvICpyZWplY3QqIGBrZXlfdHlwZV91c2VyYCBrZXlzPyBJIG5lZWQgdG8gcmV2aWV3IHRoaXMgcGF0Y2ggbW9yZSBjYXJlZnVsbHkgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaGVyZS4gSSdsbCByZS1yZWFkIGl0IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzMzUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTA6MDE6MDAuMDQxNzY0MjcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQ5NzU5OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2V5X3R5cGVfdXNlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcnhycGMvc2VuZG1zZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9zZW5kbXNnLmM9NTMxPXN0YXRpYyBpbnQgcnhycGNfc2VuZG1zZ19jbXNnKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zICpwKVxcbi0tXFxubmV0L3J4cnBjL3NlbmRtc2cuYy02MjgtXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoa2V5KTtcXG5uZXQvcnhycGMvc2VuZG1zZy5jOjYyOTpcXHRcXHRcXHRpZiAoa2V5X3JlZl90b19wdHIoa2V5KS1cXHUwMDNldHlwZSA9PSBcXHUwMDI2a2V5X3R5cGVfdXNlcikge1xcbm5ldC9yeHJwYy9zZW5kbXNnLmMtNjMwLVxcdFxcdFxcdFxcdGtleV9yZWZfcHV0KGtleSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEwOjAxOjAwLjMzNjc0NDEyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Nzg5ODY1NjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUlhSUEMgUmVzcG9uc2UgQXBwbGljYXRpb24gRGF0YSBIYW5kbGluZyoqXG5cbk9rYXksIGxldCBtZSBjYXJlZnVsbHkgcmV2aWV3IHRoZXNlIGxpbmVzIGZyb20gdGhlIHBhdGNoIGRpZmYuIEZpcnN0LCBJJ20gbm90aW5nIHRoZSBoYW5kbGluZyBvZiBgUlhSUENfUkVTUE9OU0VfQVBQREFUQWAgc3BlY2lmaWNhbGx5LiBJIHNlZSB0aGF0IHRoZSBjb2RlIGNoZWNrcyBmb3IgdGhlIGxlbmd0aCwgYW5kIHRoZW4gdmVyaWZpZXMgdGhhdCB0aGVyZSdzIG5vIGV4aXN0aW5nIGFwcGxpY2F0aW9uIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYWxsLiBUaGVuLCBpdCBhdHRlbXB0cyB0byBsb29rIHVwIGEga2V5IGJhc2VkIG9uIHRoZSBga2V5X2lkYCBleHRyYWN0ZWQgZnJvbSB0aGUgY29udHJvbCBtZXNzYWdlLiBJdCdzIHVzaW5nIGBsb29rdXBfdXNlcl9rZXlgIHdpdGggYEtFWV9ORUVEX1NFQVJDSGAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIHVzZXIgY29udGV4dC4gSG1tLCBpdCBsb29rcyBsaWtlIGl0J3MgaGFuZGxpbmcgZXJyb3JzIGZyb20gYGxvb2t1cF91c2VyX2tleWAgY29ycmVjdGx5LCB3aGljaCBpcyBnb29kLlxuXG5CdXQsIGhhbmcgb24gYSBzZWNvbmQuIFRoaXMgbGluZSBpcyB0aHJvd2luZyBhIGZsYWc6IGBpZiAoa2V5X3JlZl90b19wdHIoa2V5KS1cdTAwM2V0eXBlID09IFx1MDAyNmtleV90eXBlX3VzZXIpYC4gSXQgYXBwZWFycyB0aGUgY29kZSBpcyByZWplY3RpbmcgYGtleV90eXBlX3VzZXJgPyBUaGF0IGRvZXNuJ3Qgc2VlbSByaWdodCBhdCBmaXJzdCBnbGFuY2UuIEl0IHNob3VsZCBhbGxvdyB0aGVtLiBVbmxlc3MuLi4gdW5sZXNzIGl0IHNob3VsZCBiZSBgIT1gIGluc3RlYWQgb2YgYD09YC4gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGJ1Zy5cblxuTGV0IG1lIGp1c3QgdmVyaWZ5IHRoaXMuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvcnhycGMvc2VuZG1zZy5jYCBmaWxlIHRvIGNoZWNrIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlaGF2ZS4gSSBuZWVkIHRvIHNlZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBncmVhdGVyIGNvbnRleHQuIEknbSBnb2luZyB0byBsb29rIGZvciBvdGhlciB1c2VzIG9mIHRoYXQga2V5IGFuZCB0aGlzIGV4YWN0IGNhbGwuIEFscmlnaHQsIGxldCdzIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDE0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMTowOC4xMjY2MTE5NzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9zZW5kbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjIwOlxcdFxcdFxcdGNhc2UgUlhSUENfUkVTUE9OU0VfQVBQREFUQTpcXG4gNjIxOlxcdFxcdFxcdFxcdGlmIChsZW4gIT0gc2l6ZW9mKGtleV9zZXJpYWxfdCkpXFxuIDYyMjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjIzOlxcdFxcdFxcdFxcdGlmIChwLVxcdTAwM2VjYWxsLmFwcF9kYXRhKVxcbiA2MjQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDYyNTpcXHRcXHRcXHRcXHRrZXlfaWQgPSAqKGtleV9zZXJpYWxfdCAqKUNNU0dfREFUQShjbXNnKTtcXG4gNjI2OlxcdFxcdFxcdFxcdGtleSA9IGxvb2t1cF91c2VyX2tleShrZXlfaWQsIDAsIEtFWV9ORUVEX1NFQVJDSCk7XFxuIDYyNzpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGtleSkpXFxuIDYyODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihrZXkpO1xcbiA2Mjk6XFx0XFx0XFx0XFx0aWYgKGtleV9yZWZfdG9fcHRyKGtleSktXFx1MDAzZXR5cGUgPT0gXFx1MDAyNmtleV90eXBlX3VzZXIpIHtcXG4gNjMwOlxcdFxcdFxcdFxcdFxcdGtleV9yZWZfcHV0KGtleSk7XFxuIDYzMTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjMyOlxcdFxcdFxcdFxcdH1cXG4gNjMzOlxcdFxcdFxcdFxcdHAtXFx1MDAzZWNhbGwuYXBwX2RhdGEgPSBrZXlfcmVmX3RvX3B0cihrZXkpO1xcbiA2MzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDYzNTpcXHRcXG4gNjM2OlxcdFxcdFxcdGRlZmF1bHQ6XFxuIDYzNzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjM4OlxcdFxcdFxcdH1cXG4gNjM5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTA6MDE6MDguMTI2NzI0Mjk3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2Mjg0MzMzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBSeFJQQyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IHNwaWRlciBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJdCdzIGdvdCBgPT0gXHUwMDI2a2V5X3R5cGVfdXNlcmAsIHdoaWNoLCBmcmFua2x5LCBzY3JlYW1zIGJ1ZyEgSSdtIHByZXR0eSBzdXJlIHRoYXQgc2hvdWxkIGJlIGEgYCE9IFx1MDAyNmtleV90eXBlX3VzZXJgIGluIHRoaXMgY29udGV4dC4gSG93ZXZlciwgZXZlbiBpZiB0aGF0J3MgYSBtaXN0YWtlLCB0aGUgY29kZSAqd29ya3MqIGFuZCBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggYHNlbmRtc2dgIG9uIGFuIEFGX1JYUlBDIHNvY2tldC4gVGhhdCBtZWFucyB0aGlzIGlzIGFic29sdXRlbHkgZnV6emFibGUuIFdlIG5lZWQgdG8gZ2V0IHNvbWUgZnV6eiB0ZXN0cyBydW5uaW5nIG9uIHRoaXMgQVNBUC5cblxuQWxyaWdodCwgdGltZSB0byBpZGVudGlmeSB0aGUga2V5IGFyZWFzLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoZXNlIHN5bWJvbHMgc3BlY2lmaWNhbGx5OiBgcnhycGNfc2VuZG1zZ19jbXNnYCwgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCwgYW5kIGByeHJwY19zZW5kX2RhdGFgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIGZvY3VzIG9uIHRvIHN0YXJ0IHdpdGguXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIExldCBtZSBzZWUuLi4geWVzLCBmb3IgdGhlIFJ4R0sgc3BlY2lmaWMgc2VjdGlvbnMsIHdlIGRlZmluaXRlbHkgbmVlZCBgQ09ORklHX1JYR0tgIGVuYWJsZWQuIFdlIGFsc28gbmVlZCBgQ09ORklHX0FGX1JYUlBDYCBhbmQgYENPTkZJR19BRlNfRlNgLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBhcmUgYWxsIHRoZSByZWxldmFudCBjb25maWdzIHRvIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTExMTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMToxMy43NTUxNjA1MjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTY4NDIzMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJYR0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3J4cnBjL0tjb25maWc9NTg9Y29uZmlnIFJYS0FEXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy02NS1cXG5uZXQvcnhycGMvS2NvbmZpZzo2Njpjb25maWcgUlhHS1xcbm5ldC9yeHJwYy9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIlJ4UlBDIEdTU0FQSSBzZWN1cml0eVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTA6MDE6MTUuNTcyMDEwMTEyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTc2NjYwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIEluc3BlY3Rpb246IEFGUyoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQUZTIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlLi4uIEknbSBoZWFkaW5nIGRpcmVjdGx5IHRvIGBmcy9hZnMvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBBbmRyZXcgRmlsZSBTeXN0ZW0uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHRoZSBkZXBlbmRlbmNpZXMgaW52b2x2ZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgQUZTIHN1YnN5c3RlbSdzIGN1cnJlbnQgc3RhdGUgd2l0aGluIHRoaXMga2VybmVsIGJ1aWxkIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIGJyb2FkZXIgZmlsZXN5c3RlbSBvcHRpb25zLiBJIHN1c3BlY3QgdGhlcmUgd2lsbCBiZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbnVhbmNlcyB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NTE3MjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMToxOS4wMjk2Nzg3NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjIwOTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvYWZzL0tjb25maWc6Mjpjb25maWcgQUZTX0ZTXFxuZnMvYWZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcXFwiXFxuLS1cXG5mcy9hZnMvS2NvbmZpZz0xNz1jb25maWcgQUZTX0RFQlVHXFxuLS1cXG5mcy9hZnMvS2NvbmZpZy0yNi1cXG5mcy9hZnMvS2NvbmZpZzoyNzpjb25maWcgQUZTX0ZTQ0FDSEVcXG5mcy9hZnMvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMToxOS4yNTE4OTI4ODJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyODY4MzUyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUnhSUEMgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gUnhSUEMsIGFuZCB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlIHdoYXQncyBkZWZpbmVkIGFuZCBob3cgaXQncyBoYW5kbGVkLiBUaGUgYG5ldC9yeHJwYy9LY29uZmlnYCBmaWxlIGlzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBzdGFydCwgYXMgaXQgc2hvdWxkIGhvbGQgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgUnhSUEMgc3Vic3lzdGVtLiBJJ2xsIG5lZWQgdG8gcGFyc2UgaXRzIGNvbnRlbnRzIGNhcmVmdWxseS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgZmVhdHVyZXMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGdvdmVybiBob3cgUnhSUEMgaXMgYnVpbHQgYW5kIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgaXQgcmVsaWVzIHVwb24uIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMDU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTA6MDE6MjMuMDgwNTc5ODQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYzMzU2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGX1JYUlBDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yeHJwYy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yeHJwYy9LY29uZmlnLTUtXFxubmV0L3J4cnBjL0tjb25maWc6Njpjb25maWcgQUZfUlhSUENcXG5uZXQvcnhycGMvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJSeFJQQyBzZXNzaW9uIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZz0yNT1pZiBBRl9SWFJQQ1xcbm5ldC9yeHJwYy9LY29uZmlnLTI2LVxcbm5ldC9yeHJwYy9LY29uZmlnOjI3OmNvbmZpZyBBRl9SWFJQQ19JUFY2XFxubmV0L3J4cnBjL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiSVB2NiBzdXBwb3J0IGZvciBSeFJQQ1xcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTMzLVxcbm5ldC9yeHJwYy9LY29uZmlnOjM0OmNvbmZpZyBBRl9SWFJQQ19JTkpFQ1RfTE9TU1xcbm5ldC9yeHJwYy9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkluamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy0zOS1cXG5uZXQvcnhycGMvS2NvbmZpZzo0MDpjb25maWcgQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXFxubmV0L3J4cnBjL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiSW5qZWN0IGRlbGF5IGludG8gcGFja2V0IHJlY2VwdGlvblxcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnLTQ5LVxcbm5ldC9yeHJwYy9LY29uZmlnOjUwOmNvbmZpZyBBRl9SWFJQQ19ERUJVR1xcbm5ldC9yeHJwYy9LY29uZmlnLTUxLVxcdGJvb2wgXFxcIlJ4UlBDIGR5bmFtaWMgZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWc9ODk9Y29uZmlnIFJYUEVSRlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctOTUtXFxubmV0L3J4cnBjL0tjb25maWc6OTY6Y29uZmlnIEFGX1JYUlBDX0tVTklUX1RFU1RcXG5uZXQvcnhycGMvS2NvbmZpZy05Ny1cXHR0cmlzdGF0ZSBcXFwiUnhSUEMgY3J5cHRvIEtVbml0IHRlc3RcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTA6MDE6MjMuMjQ2OTIyODEzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3ODIyMTkyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipDb25maWd1cmF0aW9uIEVzc2VudGlhbHMqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZS4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBBRl9SWFJQQ2AsIGBBRlNfRlNgLCBhbmQgYFJYR0tgIGFyZSB0aGUgbWFpbiBkcml2ZXJzLiBIb2xkIG9uLCB3YXNuJ3QgYFJYR0tgIGEgYm9vbGVhbj8gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0LiBCZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBzaG91bGQgZG91YmxlIGNoZWNrIHdoYXQncyBpbiBgS0VZU2AgYW5kIGBLRVlTX1VTRVJgLiBUaGF0J2xsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZXNlIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjY1MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDEwOjAxOjMwLjAyOTE0NjIwN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2ODQ5MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLRVlTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L2tleXMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJzZWN1cml0eS9rZXlzL0tjb25maWctNS1cXG5zZWN1cml0eS9rZXlzL0tjb25maWc6NjptZW51Y29uZmlnIEtFWVNcXG5zZWN1cml0eS9rZXlzL0tjb25maWctNy1cXHRib29sIFxcXCJFbmFibGUgYWNjZXNzIGtleSByZXRlbnRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L2tleXMvS2NvbmZpZz0yND1pZiBLRVlTXFxuc2VjdXJpdHkva2V5cy9LY29uZmlnLTI1LVxcbnNlY3VyaXR5L2tleXMvS2NvbmZpZzoyNjpjb25maWcgS0VZU19SRVFVRVNUX0NBQ0hFXFxuc2VjdXJpdHkva2V5cy9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIkVuYWJsZSB0ZW1wb3JhcnkgY2FjaGluZyBvZiB0aGUgbGFzdCByZXF1ZXN0X2tleSgpIHJlc3VsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTA6MDE6MzAuNTI2MDAyMDA4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NjM3ODY0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IEEgUXVpY2sgRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0J3MgZGVhbGluZyB3aXRoIHNvbWUga2V5LXJlbGF0ZWQgY2hhbmdlcyB3aXRoaW4gdGhlIFJYUlBDIHN1YnN5c3RlbS4gRmlyc3Qgb2ZmLCBJJ20gZ29pbmcgdG8gYXNzdW1lIGBLRVlTYCBpcyBhbHJlYWR5IGVuYWJsZWQsIGJ1dCBpdCdzIGFsd2F5cyBnb29kIHByYWN0aWNlIHRvIHZlcmlmeSwgc28gbGV0J3MgbGlzdCBpdCBvdXQganVzdCBpbiBjYXNlLiBBbmQgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBDT05GSUdfS0VZU2AgYW5kIGBDT05GSUdfQUZfUlhSUENgIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2guXG5cbkZyb20gdGhlIGZpbGUgY2hhbmdlcywgaXQgbG9va3MgbGlrZSBgb29iLmNgIGhhcyBiZWVuIHJlbW92ZWQsIGFuZCBzZXZlcmFsIGZ1bmN0aW9ucyBhcmUgZ2V0dGluZyB0b3VjaGVkOiBgcnhycGNfc2VuZG1zZ19jbXNnYCwgYHJ4cnBjX3NlbmRfZGF0YWAsIGByeGdrX3Jlc3BvbmRfdG9fY2hhbGxlbmdlYCwgYGFmc19jcmVhdGVfc2VydmVyX2FwcGRhdGFgLCBhbmQgYGFmc19tYWtlX2NhbGxgLiBPa2F5LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhvc2UuXG5cbkknbGwgbWFrZSBhIG1lbnRhbCBub3RlIG9mIGFsbCB0aGUgc3ltYm9scyBiZWluZyBmb2N1c2VkIG9uLiBMZXQgbWUgbGlzdCBvdXQgdGhlc2Ugc3ltYm9scyBhZ2FpbjpcbmByeHJwY19zZW5kbXNnX2Ntc2dgLCBgcnhycGNfZG9fc2VuZG1zZ2AsIGByeHJwY19zZW5kX2RhdGFgLCBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAsIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYCwgYGFmc19tYWtlX2NhbGxgLCBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBgcnhycGNfa2VybmVsX3F1ZXJ5X2tleWAsIGFuZCBgcHV0X3VzZXJfa2V5X3BheWxvYWRgLlxuXG5Ib2xkIG9uLi4uIGBwdXRfdXNlcl9rZXlfcGF5bG9hZGAgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgaW4gYG5ldC9yeHJwYy9yeGdrLmNgLCBpbnRlcmVzdGluZy4gVGhpcyBpcyBsaWtlbHkgdGhlIGNydWNpYWwgcG9pbnQuIEdpdmVuIGl0cyBuYW1lLCBpdCdzIGRlZmluaXRlbHkgcmVsYXRlZCB0byB1c2VyIGtleSBoYW5kbGluZy4gVGhpcyB3YXJyYW50cyBhIG1vcmUgZGV0YWlsZWQgbG9vay4gU28sIGxldCBtZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgcHV0X3VzZXJfa2V5X3BheWxvYWRgIGFuZCBpdHMgdXNhZ2UgaW4gYHNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNgLiBJdCB3aWxsIHJldmVhbCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjk2NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMTozNi4yODk3OTE5MTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTIzODgxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdXRfdXNlcl9rZXlfcGF5bG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9OTA9c3RhdGljIHZvaWQgdXNlcl9mcmVlX3BheWxvYWRfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTAwLSAqL1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTAxOnZvaWQgcHV0X3VzZXJfa2V5X3BheWxvYWQoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQpXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMDIte1xcbi0tXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMDUtfVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTA2OkVYUE9SVF9TWU1CT0xfR1BMKHB1dF91c2VyX2tleV9wYXlsb2FkKTtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwNy1cXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9MTEyPWludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEyOC1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjEyOTpcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh6YXApO1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTMwLVxcdHJldHVybiByZXQ7XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTEzOD12b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSlcXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTQ2LVxcdFxcdHJjdV9hc3NpZ25fa2V5cG9pbnRlcihrZXksIE5VTEwpO1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTQ3OlxcdFxcdHB1dF91c2VyX2tleV9wYXlsb2FkKHVwYXlsb2FkKTtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0OC1cXHR9XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTE1Nj12b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE1OS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjE2MDpcXHRwdXRfdXNlcl9rZXlfcGF5bG9hZCh1cGF5bG9hZCk7XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xNjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QxMDowMTozNi40NDUwMzk5MTRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk0MDQxMDc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgcHV0X3VzZXJfa2V5X3BheWxvYWRgLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zIFwiZnV6eiBtZSFcIiBUaGF0J3MgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBnZXQgdGhpcyBpbnRvIG15IGZ1enppbmcgdGFyZ2V0cyBBU0FQLlxuXG5MZXQncyBxdWlja2x5IHJlY2FwIHRoZSBjb25maWdzIGFjdGl2ZSBoZXJlOiBgQUZfUlhSUENgLCBgQUZTX0ZTYCwgYW5kIGBSWEdLYC4gVGhlc2UgYXJlIGltcG9ydGFudCBjb250ZXh0LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uOiBgcnhycGNfc2VuZG1zZ19jbXNnYCwgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfc2VuZF9kYXRhYCwgYHJ4Z2tfcmVzcG9uZF90b19jaGFsbGVuZ2VgLCBgYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YWAsIGBhZnNfbWFrZV9jYWxsYCwgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgYHJ4cnBjX2tlcm5lbF9xdWVyeV9rZXlgLCBhbmQgdGhhdCBicmFuZCBuZXcgYHB1dF91c2VyX2tleV9wYXlsb2FkYC5cblxuTGV0IG1lIHF1aWNrbHkgcmUtZXhhbWluZSBgcnhycGNfc2VuZF9kYXRhYC4gUmlnaHQsIGl0J3MgY2FsbGVkIGZyb20gYHJ4cnBjX2RvX3NlbmRtc2dgIGFuZCBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAgYW5kIHNlZW1zIGNlbnRyYWwgdG8gZGF0YSB0cmFuc21pc3Npb24sIGVzcGVjaWFsbHkgbm93IHRoYXQgaXQgaGFuZGxlcyBjcnlwdG8gZXJyb3JzLCBtYWtpbmcgaXQgYSBoaWdoLXZhbHVlIHRhcmdldC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBhZnNfY3JlYXRlX3NlcnZlcl9hcHBkYXRhYC4gQWgsIGNhbGxlZCBmcm9tIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAsIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGUgYXBwZGF0YSBrZXkuXG5cbkFuZCBgcnhna19yZXNwb25kX3RvX2NoYWxsZW5nZWAsIGl0J3MgY2FsbGVkIHZpYSB0aGUgYHJ4Z2tfeWZzYCBzZWN1cml0eSBvcHMgYW5kIGNvbnN0cnVjdHMgY2hhbGxlbmdlIHJlc3BvbnNlcy5cblxuRmluYWxseSwgYHJ4cnBjX2tlcm5lbF9iZWdpbl9jYWxsYCwgY2FsbGVkIGZyb20gYGFmc19tYWtlX2NhbGxgLlxuXG5PdmVyYWxsLCB0aGlzIHBhdGNoIHNlZW1zIGZ1bmN0aW9uYWwgYW5kIEkgY2FuIHNlZSBjbGVhciBwYXRocyB0byB0aGUgY29kZSBJIHdpbGwgdGVzdC4gSSdtIHNhdGlzZmllZC4gVGltZSB0byBtb3ZlIG9uIGFuZCBsZXQncyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDExMCwiT3V0cHV0VG9rZW5zIjoyNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMTA6MDE6NDUuMzg1NDUzNDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQyNzMxMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGX1JYUlBDXCIsXG4gICAgXCJBRlNfRlNcIixcbiAgICBcIlJYR0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyeHJwY19zZW5kbXNnX2Ntc2dcIixcbiAgICBcInJ4cnBjX2RvX3NlbmRtc2dcIixcbiAgICBcInJ4cnBjX3NlbmRfZGF0YVwiLFxuICAgIFwicnhna19yZXNwb25kX3RvX2NoYWxsZW5nZVwiLFxuICAgIFwiYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YVwiLFxuICAgIFwiYWZzX21ha2VfY2FsbFwiLFxuICAgIFwicnhycGNfa2VybmVsX2JlZ2luX2NhbGxcIixcbiAgICBcInJ4cnBjX2tlcm5lbF9xdWVyeV9rZXlcIixcbiAgICBcInB1dF91c2VyX2tleV9wYXlsb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIGFuZCBBRlMgc3Vic3lzdGVtcyB0byBoYW5kbGUgUnhHSyBjaGFsbGVuZ2UtcmVzcG9uc2UgYW5kIGFwcGRhdGEgdmlhIGEgbmV3IGtleS1iYXNlZCBtZWNoYW5pc20gaW5zdGVhZCBvZiBvdXQtb2YtYmFuZCAoT09CKSBtZXNzYWdlcy4gSXQgcmVtb3ZlcyB0aGUgT09CIG1lc3NhZ2UgaGFuZGxpbmcgZW50aXJlbHksIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBhbmQgaW50cm9kdWNlcyBhIG5ldyBjb250cm9sIG1lc3NhZ2UgYFJYUlBDX1JFU1BPTlNFX0FQUERBVEFgIGZvciB1c2Vyc3BhY2UgdG8gcHJvdmlkZSBhcHBkYXRhIGtleXMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gY29kZSwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGX1JYUlBDXCIsXG4gICAgXCJBRlNfRlNcIixcbiAgICBcIlJYR0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyeHJwY19zZW5kbXNnX2Ntc2dcIixcbiAgICBcInJ4cnBjX2RvX3NlbmRtc2dcIixcbiAgICBcInJ4cnBjX3NlbmRfZGF0YVwiLFxuICAgIFwicnhna19yZXNwb25kX3RvX2NoYWxsZW5nZVwiLFxuICAgIFwiYWZzX2NyZWF0ZV9zZXJ2ZXJfYXBwZGF0YVwiLFxuICAgIFwiYWZzX21ha2VfY2FsbFwiLFxuICAgIFwicnhycGNfa2VybmVsX2JlZ2luX2NhbGxcIixcbiAgICBcInJ4cnBjX2tlcm5lbF9xdWVyeV9rZXlcIixcbiAgICBcInB1dF91c2VyX2tleV9wYXlsb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJ4UlBDIGFuZCBBRlMgc3Vic3lzdGVtcyB0byBoYW5kbGUgUnhHSyBjaGFsbGVuZ2UtcmVzcG9uc2UgYW5kIGFwcGRhdGEgdmlhIGEgbmV3IGtleS1iYXNlZCBtZWNoYW5pc20gaW5zdGVhZCBvZiBvdXQtb2YtYmFuZCAoT09CKSBtZXNzYWdlcy4gSXQgcmVtb3ZlcyB0aGUgT09CIG1lc3NhZ2UgaGFuZGxpbmcgZW50aXJlbHksIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBgcnhycGNfa2VybmVsX2JlZ2luX2NhbGxgLCBhbmQgaW50cm9kdWNlcyBhIG5ldyBjb250cm9sIG1lc3NhZ2UgYFJYUlBDX1JFU1BPTlNFX0FQUERBVEFgIGZvciB1c2Vyc3BhY2UgdG8gcHJvdmlkZSBhcHBkYXRhIGtleXMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgYW5kIGZpbGVzeXN0ZW0gY29kZSwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}