Name: series-workflow2vvlb Phase: Running StartedAt: 2026-09-07 14:26:44 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[0] Phase: Succeeded StartedAt: 2026-09-07 14:26:44 +0000 UTC FinishedAt: 2026-09-07 14:50:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 14:26:44 +0000 UTC FinishedAt: 2026-09-07 14:50:44 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "AFS_FS", "RXGK", "RXPERF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "AFS_FS", "RXGK", "RXPERF" ], "series_id": "88a5cb11-a6ed-4bc5-9fd8-009791e242ce" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "net" ], "focus_symbols": [ "rxrpc_send_data", "rxrpc_do_sendmsg", "rxrpc_kernel_send_data", "rxrpc_recvmsg", "rxrpc_notify_socket", "rxrpc_poke_conn", "rxrpc_preparse_xdr_yfs_rxgk", "rxgk_init_connection_security", "afs_make_call", "afs_send_simple_reply", "afs_send_empty_reply", "afs_create_yfs_cm_token", "rxperf_process_call" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDssCiAgICAmIzM0O1JYUEVSRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX3NlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtyeHJwY19kb19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3J4cnBjX2tlcm5lbF9zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7cnhycGNfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDtyeHJwY19ub3RpZnlfc29ja2V0JiMzNDssCiAgICAmIzM0O3J4cnBjX3Bva2VfY29ubiYjMzQ7LAogICAgJiMzNDtyeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2smIzM0OywKICAgICYjMzQ7cnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7YWZzX21ha2VfY2FsbCYjMzQ7LAogICAgJiMzNDthZnNfc2VuZF9zaW1wbGVfcmVwbHkmIzM0OywKICAgICYjMzQ7YWZzX3NlbmRfZW1wdHlfcmVwbHkmIzM0OywKICAgICYjMzQ7YWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4mIzM0OywKICAgICYjMzQ7cnhwZXJmX3Byb2Nlc3NfY2FsbCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQUZfUlhSUEMgYW5kIEFGUyBuZXR3b3JraW5nIGNvZGUgdG8gc3VwcG9ydCBzaG9ydCB3cml0ZXMgaW4gcnhycGNfa2VybmVsX3NlbmRfZGF0YSwgbG9vcCB1bnRpbCBmdWxsIG1lc3NhZ2UgY29uc3VtcHRpb24gaW4gQUZTL3J4cGVyZiBjYWxsZXJzLCBzaW1wbGlmeSBsb2NraW5nIGFyb3VuZCByeHJwY19zZW5kX2RhdGEsIGZpeCB0aGUgdG9rc2l6ZSBjYWxjdWxhdGlvbiBmb3IgWUZTIENNIHRva2VucywgYWRkIGVuY3J5cHRpb24gdHlwZSB2YWxpZGF0aW9uIGZvciBZRlMga2V5cywgYW5kIGNsZWFuIHVwIHNvY2tldCBub3RpZmljYXRpb24gYW5kIGNvbm5lY3Rpb24gcmVmY291bnRpbmcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcbi0gVGhlIHRva2VuIGJ1ZmZlciBpbiBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgemVyb2luZyBhbGwgYnl0ZXM7IHRoZSBmaXggbWVyZWx5IGFjY291bnRzIGZvciB0aGUgNC1ieXRlIGBsZXZlbGAgZmllbGQgaW4gYHRva3NpemVgLlxuLSBJbiBgcnhycGNfc2VuZF9kYXRhYCwgZGF0YSB0cmFuc2ZlciBjb250aW51ZXMgdG8gdXNlIGBjb3B5X2Zyb21faXRlcl9mdWxsYCB3aXRoIGJvdW5kZWQgY29weSBzaXplcyAoYG1pbjNgKSwgYW5kIGVycm9yLXJld2luZCBsb2dpYyB1cGRhdGVzIGJ5dGUgY291bnRlcnMgYXBwcm9wcmlhdGVseS5cbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxuLSBObyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nL3N0cnVjdCBmaWVsZHMgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZC5cblxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJ4UlBDIHNvY2tldCBkYXRhIHNlbmRpbmcgYW5kIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIG1lY2hhbmlzbXMsIGNvbm5lY3Rpb24gcmVmZXJlbmNlIGNvdW50aW5nLCBrZXkgcGF5bG9hZCBwYXJzaW5nLCBhbmQgaW4ta2VybmVsIEFGUy9yeHBlcmYgc2VuZCBwYXRocy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvcmUgbmV0d29ya2luZyBhbmQgZmlsZXN5c3RlbSBzdGF0ZSBtYWNoaW5lcyBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgdGhhdCBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBBRl9SWFJQQyBzb2NrZXRzLCBrZXlzIHN5c2NhbGxzLCBhbmQgQUZTIG9wZXJhdGlvbnMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2QzYWZmMjMzNzY5MDgxNjkzZWRhODg5YjU4YWEzMjAzYTYyODkyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NDk6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RcbmluZGV4IDg5MjZkYWI4ZTJlNjAuLjdkZjZhZmY3NjQ0YzAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0XG5AQCAtODc5LDE0ICYjNDM7ODc5LDIxIEBAIFRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czpcbiAgICAgIGV4Y2x1c2l2ZWx5IHRvIGluLWtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Nlcy4gIG1zZy5tc2dfZmxhZ3MgbWF5IGJlIGdpdmVuXG4gICAgICBNU0dfTU9SRSBpZiB0aGVyZSB3aWxsIGJlIHN1YnNlcXVlbnQgZGF0YSBzZW5kcyBmb3IgdGhpcyBjYWxsLlxuIFxuLSAgICAgVGhlIG1zZyBtdXN0IG5vdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24gYWRkcmVzcywgY29udHJvbCBkYXRhIG9yIGFueSBmbGFnc1xuLSAgICAgb3RoZXIgdGhhbiBNU0dfTU9SRS4gIGxlbiBpcyB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgdG8gdHJhbnNtaXQuXG4mIzQzOyAgICAgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzXG4mIzQzOyAgICAgb3RoZXIgdGhhbiBNU0dfTU9SRS4gIGxlbiBpcyB0aGUgYW1vdW50IG9mIGRhdGEgdG8gYWRkIHRvIHRoZVxuJiM0MzsgICAgIHRyYW5zbWlzc2lvbi4gIFRoZSBsYXN0LXBhY2tldCBmbGFnIHdpbGwgb25seSBiZSBzZXQgb24gdGhlIG91dGdvaW5nXG4mIzQzOyAgICAgcGFja2V0IGlmIE1TR19NT1JFIGlzIG5vdCBzZXQgYW5kIGxlbiBhbW91bnQgb2YgYnl0ZXMgYXJlIGJ1ZmZlcmVkLlxuIFxuICAgICAgbm90aWZ5X2VuZF9yeCBjYW4gYmUgTlVMTCBvciBpdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZnVuY3Rpb24gdG8gYmVcbiAgICAgIGNhbGxlZCB3aGVuIHRoZSBjYWxsIGNoYW5nZXMgc3RhdGUgdG8gZW5kIHRoZSBUeCBwaGFzZS4gIFRoaXMgZnVuY3Rpb24gaXNcbiAgICAgIGNhbGxlZCB3aXRoIGEgc3BpbmxvY2sgaGVsZCB0byBwcmV2ZW50IHRoZSBsYXN0IERBVEEgcGFja2V0IGZyb20gYmVpbmdcbiAgICAgIHRyYW5zbWl0dGVkIHVudGlsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxuIFxuJiM0MzsgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgZGF0YSBidWZmZXJlZCBvciBhbiBlcnJvci4gIEl0IHdpbGxcbiYjNDM7ICAgICByZXR1cm4gemVybyBvbmx5IGlmIGxlbiBpcyAwIG9yIGlmIG1zZy1cdTAwM2Vtc2dfaXRlciBpcyBlbXB0eS4gIEl0IG1heSBhbHNvXG4mIzQzOyAgICAgbWFrZSBhIHNob3J0IHdyaXRlLCBidWZmZXJpbmcgbGVzcyB0aGFuIHRoZSBhbW91bnQgb2YgZGF0YSBwcm92aWRlZCBvciB0aGVcbiYjNDM7ICAgICBsZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZSBjYWxsZWQgYWdhaW4uXG4mIzQzO1xuICAoIykgUmVjZWl2ZSBkYXRhIGZyb20gYSBjYWxsOjpcbiBcbiBcdGludCByeHJwY19rZXJuZWxfcmVjdl9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuaW5kZXggMTAzMTY4YzcwZGQ0ZC4uNWVlZWVmNzYxY2YzMSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuQEAgLTIzNSw3ICYjNDM7MjM1LDcgQEAgc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuIFx0ICpcdHN0cnVjdCBSWEdLX0F1dGhOYW1lXHRpZGVudGl0aWVzXHUwMDNjXHUwMDNlO1xuIFx0ICogfTtcbiBcdCAqL1xuLVx0dG9rc2l6ZSA9IGtleXNpemUgJiM0MzsgOCAmIzQzOyA0ICYjNDM7IDQgJiM0MzsgOCAmIzQzOyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XG4mIzQzO1x0dG9rc2l6ZSA9IGtleXNpemUgJiM0MzsgNCAmIzQzOyA4ICYjNDM7IDQgJiM0MzsgNCAmIzQzOyA4ICYjNDM7IHhkcl9sZW5fb2JqZWN0KGF1dGhzaXplKTtcbiBcbiBcdG9mZnNldCA9IDA7XG4gXHRlbmNzaXplID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKHRva2VuX2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLCB0b2tzaXplLCBcdTAwMjZvZmZzZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjY1YTA4NjZjZDhiODUgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xNDE2LDIyICYjNDM7MTQxNiw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfc2VlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBlbnVtIGFmc19jYWxsX3RyYWNlIHdoeSlcbiBcdFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuLVx0XHRcdFx0ICAgIGdmcF90IGdmcClcbi17XG4tXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuLVxuLVx0b3AtXHUwMDNlY2FsbFx0PSBhZnNfZ2V0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfZ2V0KTtcbi1cdG9wLVx1MDAzZXR5cGVcdD0gY2FsbC1cdTAwM2V0eXBlO1xuLVx0Y2FsbC1cdTAwM2VvcFx0PSBvcDtcbi1cdGNhbGwtXHUwMDNla2V5XHQ9IG9wLVx1MDAzZWtleTtcbi1cdGNhbGwtXHUwMDNlaW50clx0PSAhKG9wLVx1MDAzZWZsYWdzIFx1MDAyNiBBRlNfT1BFUkFUSU9OX1VOSU5UUik7XG4tXHRjYWxsLVx1MDAzZXBlZXJcdD0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LVx1MDAzZWFkZHJzW29wLVx1MDAzZWFkZHJfaW5kZXhdLnBlZXIpO1xuLVx0Y2FsbC1cdTAwM2VzZXJ2aWNlX2lkID0gb3AtXHUwMDNlc2VydmVyLVx1MDAzZXNlcnZpY2VfaWQ7XG4tXHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZXh0cmFjdF9iZWdpbihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXG4ge1xuIFx0Y2FsbC1cdTAwM2Vpb3ZfbGVuID0gc2l6ZTtcbkBAIC0xNzYzLDYgJiM0MzsxNzQ3LDIzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpBRlNfVk5PREVfVE9fSShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSlcbiBcdHJldHVybiBcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuJiM0MztcdFx0XHRcdCAgICBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuJiM0MztcbiYjNDM7XHRvcC1cdTAwM2VjYWxsXHQ9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpO1xuJiM0MztcdG9wLVx1MDAzZXR5cGVcdD0gY2FsbC1cdTAwM2V0eXBlO1xuJiM0MztcdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4mIzQzO1x0Y2FsbC1cdTAwM2VzZXJ2ZXJcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XG4mIzQzO1x0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuJiM0MztcdGNhbGwtXHUwMDNlaW50clx0PSAhKG9wLVx1MDAzZWZsYWdzIFx1MDAyNiBBRlNfT1BFUkFUSU9OX1VOSU5UUik7XG4mIzQzO1x0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbiYjNDM7XHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbiYjNDM7XHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XG4mIzQzO1x0YWZzX3B1dF9jYWxsKGNhbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogTm90ZSB0aGF0IGEgZGVudHJ5IGdvdCBjaGFuZ2VkLiAgV2UgbmVlZCB0byBzZXQgZF9mc2RhdGEgdG8gdGhlIGRhdGEgdmVyc2lvblxuICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuY1xuaW5kZXggZDgyOTE2NjU3YTNkZC4uMWY1YjZhYTY4OTQzMyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9yeHJwYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvcnhycGMuY1xuQEAgLTQxMiwyNiAmIzQzOzQxMiwzMiBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbiBcdG1zZy5tc2dfZmxhZ3NcdFx0PSBNU0dfV0FJVEFMTCB8IChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xuIFxuLVx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIHJ4Y2FsbCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2bXNnLCBjYWxsLVx1MDAzZXJlcXVlc3Rfc2l6ZSxcbi1cdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yX2RvX2Fib3J0O1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCByeGNhbGwsIFx1MDAyNm1zZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XG4mIzQzO1x0fSB3aGlsZSAobXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpIFx1MDAzZSAwKTtcbiBcbiBcdGlmIChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIpIHtcbiBcdFx0bXNnLm1zZ19pdGVyID0gKmNhbGwtXHUwMDNld3JpdGVfaXRlcjtcbiBcdFx0bXNnLm1zZ19mbGFncyBcdTAwMjY9IH5NU0dfTU9SRTtcbiBcdFx0dHJhY2VfYWZzX3NlbmRfZGF0YShjYWxsLCBcdTAwMjZtc2cpO1xuIFxuLVx0XHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCxcbi1cdFx0XHRcdFx0ICAgICBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLFxuLVx0XHRcdFx0XHQgICAgIGlvdl9pdGVyX2NvdW50KFx1MDAyNm1zZy5tc2dfaXRlciksXG4tXHRcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGNhbGwtXHUwMDNlcnhjYWxsLCBcdTAwMjZtc2csXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIHJldCk7XG4mIzQzO1x0XHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSB3aGlsZSAobXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpIFx1MDAzZSAwKTtcbiBcdFx0KmNhbGwtXHUwMDNld3JpdGVfaXRlciA9IG1zZy5tc2dfaXRlcjtcbiBcbi1cdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIHJldCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbiYjNDM7XHRcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXHUwMDI2bXNnLCAwKTtcbiBcdH1cbiBcbiBcdC8qIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCB3ZSBtYXkgaGF2ZSByZWNlaXZlZCB0aGUgcmVwbHkgb3IgYW4gYWJvcnRcbkBAIC00NDMsMTAgJiM0Mzs0NDksOCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRyZXR1cm47XG4gXG4gZXJyb3JfZG9fYWJvcnQ6XG4tXHRpZiAocmV0ICE9IC1FQ09OTkFCT1JURUQpXG4tXHRcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLFxuLVx0XHRcdFx0XHRSWF9VU0VSX0FCT1JULCByZXQsXG4tXHRcdFx0XHRcdGFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpO1xuJiM0MztcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLFxuJiM0MztcdFx0XHRcdFJYX1VTRVJfQUJPUlQsIHJldCwgYWZzX2Fib3J0X3NlbmRfZGF0YV9lcnJvcik7XG4gXHRpZiAoY2FsbC1cdTAwM2Vhc3luYykge1xuIFx0XHRhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQpO1xuIFx0XHRyZXR1cm47XG5AQCAtODU5LDYgJiM0Mzs4NjMsNyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiB7XG4gXHRzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY2FsbC1cdTAwM2VuZXQ7XG4gXHRzdHJ1Y3QgbXNnaGRyIG1zZztcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0X2VudGVyKFwmIzM0O1wmIzM0Oyk7XG4gXG5AQCAtODcxLDIyICYjNDM7ODc2LDEzIEBAIHZvaWQgYWZzX3NlbmRfZW1wdHlfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIFx0bXNnLm1zZ19jb250cm9sbGVuXHQ9IDA7XG4gXHRtc2cubXNnX2ZsYWdzXHRcdD0gMDtcbiBcbi1cdHN3aXRjaCAocnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCAwLFxuLVx0XHRcdFx0ICAgICAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KSkge1xuLVx0Y2FzZSAwOlxuLVx0XHRfbGVhdmUoXCYjMzQ7IFtyZXBsaWVkXVwmIzM0Oyk7XG4mIzQzO1x0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCAwLFxuJiM0MztcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKSAvKiBTaG91bGRuJiMzOTt0IGJ1ZmZlciBtb3JlIHRoYW4gMCBieXRlcy4gKi9cbiBcdFx0cmV0dXJuO1xuIFxuLVx0Y2FzZSAtRU5PTUVNOlxuLVx0XHRfZGVidWcoXCYjMzQ7b29tXCYjMzQ7KTtcbi1cdFx0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsXG4tXHRcdFx0XHRcdFJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sXG4tXHRcdFx0XHRcdGFmc19hYm9ydF9vb20pO1xuLVx0XHRmYWxsdGhyb3VnaDtcbi1cdGRlZmF1bHQ6XG4tXHRcdF9sZWF2ZShcJiMzNDsgW2Vycm9yXVwmIzM0Oyk7XG4tXHRcdHJldHVybjtcbi1cdH1cbiYjNDM7XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbiYjNDM7XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCByZXQsIGFmc19hYm9ydF9zZW5kX2Vycm9yKTtcbiB9XG4gXG4gLypcbkBAIC05MTIsMjAgJiM0Mzs5MDgsMjEgQEAgdm9pZCBhZnNfc2VuZF9zaW1wbGVfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pXG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbiBcdG1zZy5tc2dfZmxhZ3NcdFx0PSAwO1xuIFxuLVx0biA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZywgbGVuLFxuLVx0XHRcdFx0ICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdG4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2bXNnLCBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZyksXG4mIzQzO1x0XHRcdFx0XHQgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCk7XG4mIzQzO1x0fSB3aGlsZSAobiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMCk7XG4mIzQzO1xuIFx0aWYgKG4gXHUwMDNlPSAwKSB7XG4gXHRcdC8qIFN1Y2Nlc3MgKi9cbiBcdFx0X2xlYXZlKFwmIzM0OyBbcmVwbGllZF1cJiMzNDspO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobiA9PSAtRU5PTUVNKSB7XG4tXHRcdF9kZWJ1ZyhcJiMzNDtvb21cJiMzNDspO1xuLVx0XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbi1cdFx0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgLUVOT01FTSxcbi1cdFx0XHRcdFx0YWZzX2Fib3J0X29vbSk7XG4tXHR9XG4mIzQzO1xuJiM0MztcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuJiM0MztcdFx0XHRcdFJYR0VOX1NTX01BUlNIQUwsIG4sIGFmc19hYm9ydF9zZW5kX2Vycm9yKTtcbiBcdF9sZWF2ZShcJiMzNDsgW2Vycm9yXVwmIzM0Oyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbmluZGV4IDFiM2M0OGI1NTkxZGYuLjA0YjBiYjY4MmI4MTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbkBAIC0xNDgsNiAmIzQzOzE0OCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VudXNlX3NsaXN0X2lzb3J0LFx0XCYjMzQ7VU5VIGlzb3J0XCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXHRcdFwmIzM0O1VQREFURSAgIFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXHRcJiMzNDtVU0UgdXVpZCBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcdFx0XCYjMzQ7VVNFIGNhbGwgXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCxcdFwmIzM0O1VTRSBjbS1jbFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLFx0XCYjMzQ7VVNFIGdjYXBzXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcdFwmIzM0O1VTRSBndnVwY1wmIzM0OykgXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuaW5kZXggNzA0YTEwZGU2NjcwMC4uNTJmODcxOGNmNzI1MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbkBAIC0yMCwxNiAmIzQzOzIwLDE2IEBAXG4gXHQvKiBBRlMgZXJyb3JzICovXHRcdFx0XHRcdFx0XFxcbiBcdEVNKGFmc19hYm9ydF9nZW5lcmFsX2Vycm9yLFx0XHRcJiMzNDthZnMtZXJyb3JcJiMzNDspXHRcdFxcXG4gXHRFTShhZnNfYWJvcnRfaW50ZXJydXB0ZWQsXHRcdFwmIzM0O2Fmcy1pbnRyXCYjMzQ7KVx0XHRcXFxuLVx0RU0oYWZzX2Fib3J0X29vbSxcdFx0XHRcJiMzNDthZnMtb29tXCYjMzQ7KVx0XHRcXFxuIFx0RU0oYWZzX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsXHRcdFwmIzM0O2Fmcy1vcC1ub3RzdXBwXCYjMzQ7KVx0XFxcbiBcdEVNKGFmc19hYm9ydF9wcm9iZXV1aWRfbmVnYXRpdmUsXHRcJiMzNDthZnMtcHJvYmV1dWlkLW5lZ1wmIzM0OylcdFxcXG4gXHRFTShhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yLFx0XHRcJiMzNDthZnMtc2VuZC1kYXRhXCYjMzQ7KVx0XFxcbiYjNDM7XHRFTShhZnNfYWJvcnRfc2VuZF9lcnJvcixcdFx0XCYjMzQ7YWZzLXNlbmQtZXJyb3JcJiMzNDspXHRcXFxuIFx0RU0oYWZzX2Fib3J0X3VubWFyc2hhbF9lcnJvcixcdFx0XCYjMzQ7YWZzLXVubWFyc2hhbFwmIzM0OylcdFxcXG4gXHRFTShhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzLFx0XCYjMzQ7YWZzLXVuc3VwLXNlYy1jbGFzc1wmIzM0OylcdFxcXG4gXHQvKiByeHBlcmYgZXJyb3JzICovXHRcdFx0XHRcdFx0XFxcbiBcdEVNKHJ4cGVyZl9hYm9ydF9nZW5lcmFsX2Vycm9yLFx0XHRcJiMzNDtyeHBlcmYtZXJyb3JcJiMzNDspXHRcdFxcXG4tXHRFTShyeHBlcmZfYWJvcnRfb29tLFx0XHRcdFwmIzM0O3J4cGVyZi1vb21cJiMzNDspXHRcdFxcXG4gXHRFTShyeHBlcmZfYWJvcnRfb3Bfbm90X3N1cHBvcnRlZCxcdFwmIzM0O3J4cGVyZi1vcC1ub3RzdXBwXCYjMzQ7KVx0XFxcbiYjNDM7XHRFTShyeHBlcmZfYWJvcnRfc2VuZF9lcnJvcixcdFx0XCYjMzQ7cnhwZXJmLXNlbmQtZXJyb3JcJiMzNDspXHRcXFxuIFx0RU0ocnhwZXJmX2Fib3J0X3VubWFyc2hhbF9lcnJvcixcdFwmIzM0O3J4cGVyZi11bm1hcnNoYWxcJiMzNDspXHRcXFxuIFx0LyogUnhLQUQgc2VjdXJpdHkgZXJyb3JzICovXHRcdFx0XHRcdFxcXG4gXHRFTShyeGthZF9hYm9ydF8xX3Nob3J0X2NoZWNrLFx0XHRcJiMzNDtyeGthZDEtc2hvcnQtY2hlY2tcJiMzNDspXHRcXFxuQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEBcbiBcdEVNKHJ4cnBjX2Vwcm90b193cm9uZ19zZWN1cml0eSxcdFx0XCYjMzQ7d3Jvbmctc2VjXCYjMzQ7KVx0XHRcXFxuIFx0RU0ocnhycGNfcmVjdm1zZ19leGNlc3NfZGF0YSxcdFx0XCYjMzQ7cmVjdm1zZy1leGNlc3NcJiMzNDspXHRcXFxuIFx0RU0ocnhycGNfcmVjdm1zZ19zaG9ydF9kYXRhLFx0XHRcJiMzNDtyZWN2bXNnLXNob3J0XCYjMzQ7KVx0XFxcbiYjNDM7XHRFTShyeHJwY19zZW5kbXNnX3R4X2Vycm9yLFx0XHRcJiMzNDt0eC1lcnJvclwmIzM0OylcdFx0XFxcbiBcdEVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFx0XHRcJiMzNDtzZW5kbXNnLWxhdGVcJiMzNDspXG4gXG4gI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFxcXG5AQCAtMzQyLDYgJiM0MzszNDMsNyBAQFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfZGlzdHJpYnV0ZV9lcnJvcixcdFwmIzM0O1NFRSBkaXN0LWVyclwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX2lucHV0LFx0XHRcJiMzNDtTRUUgaW5wdXQgICBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQsXHRcJiMzNDtTRUUgbmZ5LXJsc2RcJiMzNDspIFxcXG4mIzQzO1x0RU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQsXHRcJiMzNDtTRUUgbmZ5LXNraXBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnLFx0XHRcJiMzNDtTRUUgcmVjdm1zZyBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWUsXHRcJiMzNDtTRUUgcmVjdi1ycXVcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsIFwmIzM0O1NFRSByZWN2LXJxRlwmIzM0OykgXFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaCBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5pbmRleCA4NjVmMDVmZTM3YWI5Li5jYjM2YTcwOWY1NDBlIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5AQCAtNjQyLDYgJiM0Mzs2NDIsNyBAQCBlbnVtIHJ4cnBjX2NhbGxfZmxhZyB7XG4gXHRSWFJQQ19DQUxMX1RYX0xBU1QsXHRcdC8qIExhc3QgcGFja2V0IGluIFR4IGJ1ZmZlciAoYXQgcnh0eF90b3ApICovXG4gXHRSWFJQQ19DQUxMX1RYX0FMTF9BQ0tFRCxcdC8qIExhc3QgcGFja2V0IGhhcyBiZWVuIGhhcmQtYWNrZWQgKi9cbiBcdFJYUlBDX0NBTExfVFhfTk9fTU9SRSxcdFx0LyogTm8gbW9yZSBkYXRhIHRvIHRyYW5zbWl0IChNU0dfTU9SRSBkZWFzc2VydGVkKSAqL1xuJiM0MztcdFJYUlBDX0NBTExfVFhfRVJST1IsXHRcdC8qIFRlcm1pbmFsIGVycm9yOyBjYWxsIG5lZWRzIGFib3J0ICovXG4gXHRSWFJQQ19DQUxMX1NFTkRfUElORyxcdFx0LyogQSBwaW5nIHdpbGwgbmVlZCB0byBiZSBzZW50ICovXG4gXHRSWFJQQ19DQUxMX1JFVFJBTlNfVElNRU9VVCxcdC8qIFJldHJhbnNtaXNzaW9uIGR1ZSB0byB0aW1lb3V0IG9jY3VycmVkICovXG4gXHRSWFJQQ19DQUxMX0JFR0FOX1JYX1RJTUVSLFx0LyogV2UgYmVnYW4gdGhlIGV4cGVjdF9yeF9ieSB0aW1lciAqL1xuQEAgLTExMDksNiAmIzQzOzExMTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnhycGNfaXNfY2xpZW50X2NhbGwoY29uc3Qgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gLypcbiAgKiBjYWxsX3N0YXRlLmNcbiAgKi9cbiYjNDM7dm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKTtcbiBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRcdFx0ICAgICAgIGVudW0gcnhycGNfY2FsbF9jb21wbGV0aW9uIGNvbXBsLFxuIFx0XHRcdCAgICAgICB1MzIgYWJvcnRfY29kZSxcbkBAIC0xNDQxLDcgJiM0MzsxNDQzLDYgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByeHJwY19sb2NhbF9zZXFfb3BzO1xuIC8qXG4gICogcmVjdm1zZy5jXG4gICovXG4tdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICopO1xuIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1zZ2hkciAqLCBzaXplX3QsIGludCk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jIGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xuaW5kZXggNmFmYjU0MzczZWJiZi4uMzY0ODEwYzY1Mjc2NiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbkBAIC03LDYgJiM0Mzs3LDYwIEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX3J4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1JFTEVBU0VELCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0cnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XG4mIzQzO1x0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuJiM0MztcdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4mIzQzO1x0aWYgKHJ4IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSBcdTAwM2MgUlhSUENfQ0xPU0UpIHtcbiYjNDM7XHRcdGlmIChjYWxsLVx1MDAzZW5vdGlmeV9yeCkge1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdGNhbGwtXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVx1MDAzZXVzZXJfY2FsbF9JRCk7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y2FsbC1cdTAwM2Vub3RpZnlfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKSkge1xuJiM0MztcdFx0XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuJiM0MztcdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4mIzQzO1x0XHRcdFx0X2RlYnVnKFwmIzM0O2NhbGwgJXBzXCYjMzQ7LCBzay1cdTAwM2Vza19kYXRhX3JlYWR5KTtcbiYjNDM7XHRcdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbiYjNDM7e1xuJiM0MztcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpKSB7XG4mIzQzO1x0XHRyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBUcmFuc2l0aW9uIGEgY2FsbCB0byB0aGUgY29tcGxldGUgc3RhdGUuXG4gICovXG5AQCAtMjUsNyAmIzQzOzc5LDcgQEAgYm9vbCByeHJwY19zZXRfY2FsbF9jb21wbGV0aW9uKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0cnhycGNfc2V0X2NhbGxfc3RhdGUoY2FsbCwgUlhSUENfQ0FMTF9DT01QTEVURSk7XG4gXHR0cmFjZV9yeHJwY19jYWxsX2NvbXBsZXRlKGNhbGwpO1xuIFx0d2FrZV91cChcdTAwMjZjYWxsLVx1MDAzZXdhaXRxKTtcbi1cdHJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XG4mIzQzO1x0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX29iamVjdC5jIGIvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcbmluZGV4IDBlY2U3MTdkYjBmODUuLjFiZTUwZTBjOWNlZTUgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9vYmplY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcbkBAIC0zNCw3ICYjNDM7MzQsMTAgQEAgdm9pZCByeHJwY19wb2tlX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sIGVudW0gcnhycGNfY29ubl90cmFjZSB3aHkpXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZWxvY2spO1xuIFx0YnVzeSA9ICFsaXN0X2VtcHR5KFx1MDAyNmNvbm4tXHUwMDNlYXR0ZW5kX2xpbmspO1xuIFx0aWYgKCFidXN5KSB7XG4tXHRcdHJ4cnBjX2dldF9jb25uZWN0aW9uKGNvbm4sIHdoeSk7XG4mIzQzO1x0XHRpZiAoIXJ4cnBjX2dldF9jb25uZWN0aW9uX21heWJlKGNvbm4sIHdoeSkpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4gXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y29ubi1cdTAwM2VhdHRlbmRfbGluaywgXHUwMDI2bG9jYWwtXHUwMDNlY29ubl9hdHRlbmRfcSk7XG4gXHR9XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2bG9jYWwtXHUwMDNlbG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2tleS5jIGIvbmV0L3J4cnBjL2tleS5jXG5pbmRleCBhMGFhNzhkODkyODk3Li4zMGQ2ZGIwNTJjMjE2IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMva2V5LmNcbkBAIC0xNzIsNiAmIzQzOzE3Miw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG4gXHRjb25zdCBfX2JlMzIgKnRpY2tldCwgKmtleTtcbiBcdHM2NCB0bXA7XG4gXHRzaXplX3QgcmF3X2tleWxlbiwgcmF3X3RrdGxlbiwga2V5bGVuLCB0a3RsZW47XG4mIzQzO1x0aW50IHJldCA9IC1FS0VZUkVKRUNURUQ7XG4gXG4gXHRfZW50ZXIoXCYjMzQ7LHsleCwleCwleCwleH0sJXhcJiMzNDssXG4gXHQgICAgICAgbnRvaGwoeGRyWzBdKSwgbnRvaGwoeGRyWzFdKSwgbnRvaGwoeGRyWzJdKSwgbnRvaGwoeGRyWzNdKSxcbkBAIC0yMjksNiAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhnayhzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwLFxuIFx0dG9rZW4tXHUwMDNlcnhnay1cdTAwM2VrZXkuZGF0YVx0PSB0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZV9rZXk7XG4gXHR0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZXRpY2tldC5sZW4gPSByYXdfdGt0bGVuO1xuIFxuJiM0MztcdGlmICghY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNlZW5jdHlwZSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9QS0c7XG4mIzQzO1x0XHRnb3RvIHJlamVjdF90b2tlbjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNlZW5kdGltZSAhPSAwKSB7XG4gXHRcdGV4cGlyeSA9IHJ4cnBjX3M2NF90b190aW1lNjQodG9rZW4tXHUwMDNlcnhnay1cdTAwM2VlbmR0aW1lKTtcbiBcdFx0aWYgKGV4cGlyeSBcdTAwM2MgMClcbkBAIC0yODAsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG4gXHRrZnJlZSh0b2tlbi1cdTAwM2VyeGdrKTtcbiBcdGtmcmVlKHRva2VuKTtcbiByZWplY3Q6XG4tXHRyZXR1cm4gLUVLRVlSRUpFQ1RFRDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIGV4cGlyZWQ6XG4gXHRrZnJlZSh0b2tlbi1cdTAwM2VyeGdrKTtcbiBcdGtmcmVlKHRva2VuKTtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcmVjdm1zZy5jIGIvbmV0L3J4cnBjL3JlY3Ztc2cuY1xuaW5kZXggZWZjYmE0YjJlNzRmMC4uMjhiMjE0OGI1NjkzNiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yZWN2bXNnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcbkBAIC0xNywxMyAmIzQzOzE3LDEyIEBAXG4gI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuIFxuIC8qXG4tICogUG9zdCBhIGNhbGwgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlLiAgRnVydGhlclxuLSAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS5cbiYjNDM7ICogUmVxdWV1ZSBhIGNhbGwgZm9yIHJlY3Ztc2coKSB0byBwaWNrIHVwLlxuICAqL1xuLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbiYjNDM7c3RhdGljIHZvaWQgcnhycGNfcmVxdWV1ZV9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIHtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdHN0cnVjdCBzb2NrICpzaztcbiYjNDM7XHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbiBcbiBcdF9lbnRlcihcJiMzNDslZFwmIzM0OywgY2FsbC1cdTAwM2VkZWJ1Z19pZCk7XG4gXG5AQCAtMzIsMzEgJiM0MzszMSwxOCBAQCB2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cbi1cdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbi1cdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4tXHRpZiAocnggXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAzYyBSWFJQQ19DTE9TRSkge1xuLVx0XHRpZiAoY2FsbC1cdTAwM2Vub3RpZnlfcngpIHtcbi1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHRcdGNhbGwtXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVx1MDAzZXVzZXJfY2FsbF9JRCk7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbi1cdFx0XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuLVx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaywgXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbi1cdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKSkge1xuJiM0MztcdFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbiBcbi1cdFx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuLVx0XHRcdFx0X2RlYnVnKFwmIzM0O2NhbGwgJXBzXCYjMzQ7LCBzay1cdTAwM2Vza19kYXRhX3JlYWR5KTtcbi1cdFx0XHRcdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xuLVx0XHRcdH1cbi1cdFx0fVxuJiM0MztcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4mIzQzO1x0XHRfZGVidWcoXCYjMzQ7Y2FsbCAlcHNcJiMzNDssIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuJiM0MztcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4gXHR9XG4gXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdF9sZWF2ZShcJiMzNDtcJiMzNDspO1xuIH1cbiBcbkBAIC01NjEsNyAmIzQzOzU0Nyw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBNU0dfUEVFSykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfcXVldWUpKVxuLVx0XHRyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuJiM0MztcdFx0cnhycGNfcmVxdWV1ZV9jYWxsKHNvY2ssIGNhbGwpO1xuIFx0Z290byBub3RfeWV0X2NvbXBsZXRlO1xuIFxuIGNhbGxfZmFpbGVkOlxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGdrLmMgYi9uZXQvcnhycGMvcnhnay5jXG5pbmRleCA3N2E2N2FjZTFkMjQ4Li5iNDkyMjFmNTdmNjc3IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3J4Z2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3J4Z2suY1xuQEAgLTI1MSw4ICYjNDM7MjUxLDEwIEBAIHN0YXRpYyBpbnQgcnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHRcdCBHRlBfTk9GUyk7XG4gXHRpZiAoSVNfRVJSKGdrKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZ2spO1xuJiM0MztcdHdyaXRlX2xvY2soXHUwMDI2Y29ubi1cdTAwM2VzZWN1cml0eV91c2VfbG9jayk7XG4gXHRjb25uLVx1MDAzZXJ4Z2suZW5jdHlwZSA9IGdrLVx1MDAzZWtyYjUtXHUwMDNlZXR5cGU7XG4gXHRjb25uLVx1MDAzZXJ4Z2sua2V5c1tnay1cdTAwM2VrZXlfbnVtYmVyIFx1MDAyNiAzXSA9IGdrO1xuJiM0MztcdHdyaXRlX3VubG9jayhcdTAwMjZjb25uLVx1MDAzZXNlY3VyaXR5X3VzZV9sb2NrKTtcbiBcbiBcdHN3aXRjaCAoY29ubi1cdTAwM2VzZWN1cml0eV9sZXZlbCkge1xuIFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9QTEFJTjpcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcnhwZXJmLmMgYi9uZXQvcnhycGMvcnhwZXJmLmNcbmluZGV4IGI4ZGY2ZDIyMzE0ZDYuLmViZDU0MjIyYzY0ZWYgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcnhwZXJmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9yeHBlcmYuY1xuQEAgLTUzOCwxNSAmIzQzOzUzOCwxOCBAQCBzdGF0aWMgaW50IHJ4cGVyZl9wcm9jZXNzX2NhbGwoc3RydWN0IHJ4cGVyZl9jYWxsICpjYWxsKVxuIFx0aW92WzBdLmlvdl9sZW5cdD0gbGVuO1xuIFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIFdSSVRFLCBpb3YsIDEsIGxlbik7XG4gXHRtc2cubXNnX2ZsYWdzID0gMDtcbi1cdG4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLCBcdTAwMjZtc2csIGxlbixcbi1cdFx0XHRcdCAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTtcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShyeHBlcmZfc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNm1zZywgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuJiM0MztcdFx0XHRcdFx0ICAgcnhwZXJmX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuJiM0MztcdH0gd2hpbGUgKG4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZykgXHUwMDNlIDApO1xuJiM0MztcbiBcdGlmIChuIFx1MDAzZT0gMClcbiBcdFx0cmV0dXJuIDA7IC8qIFN1Y2Nlc3MgKi9cbiBcbi1cdGlmIChuID09IC1FTk9NRU0pXG4tXHRcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuLVx0XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLFxuLVx0XHRcdFx0XHRyeHBlcmZfYWJvcnRfb29tKTtcbiYjNDM7XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChyeHBlcmZfc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbiYjNDM7XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCBuLFxuJiM0MztcdFx0XHRcdHJ4cGVyZl9hYm9ydF9zZW5kX2Vycm9yKTtcbiBcdHJldHVybiBuO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VuZG1zZy5jIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuaW5kZXggZWQyYzlhNTEwMDVhZC4uOGJiMzI3ZGMyODMzZSAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9zZW5kbXNnLmNcbkBAIC0zMjAsOCAmIzQzOzMyMCw4IEBAIHN0YXRpYyBpbnQgcnhycGNfYWxsb2NfdHhxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHQgICBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsXG4tXHRcdFx0ICAgYm9vbCAqX2Ryb3BwZWRfbG9jaylcbiYjNDM7XHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpXG4mIzQzO1x0X19yZWxlYXNlcyhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3R4YnVmICp0eGI7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbkBAIC0zMzAsMjkgJiM0MzszMzAsMzcgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0Ym9vbCBtb3JlID0gbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX01PUkU7XG4gXHRpbnQgcmV0LCBjb3BpZWQgPSAwO1xuIFxuLVx0aWYgKHRlc3RfYml0KFJYUlBDX0NBTExfVFhfTk9fTU9SRSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpIHtcbi1cdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXG4tXHRcdFx0XHQgIGNhbGwtXHUwMDNlY2lkLCBjYWxsLVx1MDAzZWNhbGxfaWQsIGNhbGwtXHUwMDNlcnhfY29uc3VtZWQsXG4tXHRcdFx0XHQgIDAsIC1FUFJPVE8pO1xuLVx0XHRyZXR1cm4gLUVQUk9UTztcbi1cdH1cbi1cbiBcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcbiBcdHJldCA9IHJ4cnBjX3dhaXRfdG9fYmVfY29ubmVjdGVkKGNhbGwsIFx1MDAyNnRpbWVvKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHRpZiAoY2FsbC1cdTAwM2Vjb25uLVx1MDAzZXN0YXRlID09IFJYUlBDX0NPTk5fQ0xJRU5UX1VOU0VDVVJFRCkge1xuIFx0XHRyZXQgPSByeHJwY19pbml0X2NsaWVudF9jb25uX3NlY3VyaXR5KGNhbGwtXHUwMDNlY29ubik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0LyogdGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqL1xuIFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCBzayk7XG4gXG4gcmVsb2FkOlxuJiM0MztcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpKSkge1xuJiM0MztcdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXG4mIzQzO1x0XHRcdFx0ICBjYWxsLVx1MDAzZWNpZCwgY2FsbC1cdTAwM2VjYWxsX2lkLCBjYWxsLVx1MDAzZXJ4X2NvbnN1bWVkLFxuJiM0MztcdFx0XHRcdCAgMCwgLUVQUk9UTyk7XG4mIzQzO1x0XHRyZXQgPSAtRVBST1RPO1xuJiM0MztcdFx0Z290byBtYXliZV9lcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHVubGlrZWx5KHRlc3RfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpKSkge1xuJiM0MztcdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvcixcbiYjNDM7XHRcdFx0XHQgIGNhbGwtXHUwMDNlY2lkLCBjYWxsLVx1MDAzZWNhbGxfaWQsIGNhbGwtXHUwMDNlcnhfY29uc3VtZWQsXG4mIzQzO1x0XHRcdFx0ICAwLCAtRUlPKTtcbiYjNDM7XHRcdHJldCA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIG1heWJlX2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR0eGIgPSBjYWxsLVx1MDAzZXR4X3BlbmRpbmc7XG4gXHRjYWxsLVx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xuIFx0aWYgKHR4YilcbkBAIC0zNzksOSAmIzQzOzM4Nyw5IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcbiBcdHJldCA9IC1FTVNHU0laRTtcbiBcdGlmIChjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSkge1xuLVx0XHRpZiAobGVuIC0gY29waWVkIFx1MDAzZSBjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbilcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNlIGNhbGwtXHUwMDNldHhfdG90YWxfbGVuKVxuIFx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4tXHRcdGlmICghbW9yZSBcdTAwMjZcdTAwMjYgbGVuIC0gY29waWVkICE9IGNhbGwtXHUwMDNldHhfdG90YWxfbGVuKVxuJiM0MztcdFx0aWYgKCFtb3JlIFx1MDAyNlx1MDAyNiBsZW4gIT0gY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4gXHRcdFx0Z290byBtYXliZV9lcnJvcjtcbiBcdH1cbiBcbkBAIC00MDUsNyAmIzQzOzQxMyw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHQgKiB0aGUgc2VjdXJpdHkgaGVhZGVyIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBwYWRkZWRcbiBcdFx0XHQgKiByZWdpb24gKGVuYyBibG9ja3NpemUpLCBidXQgdGhlIHRyYWlsZXIgaXMgbm90LlxuIFx0XHRcdCAqL1xuLVx0XHRcdHJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbXNnX2RhdGFfbGVmdChtc2cpO1xuJiM0MztcdFx0XHRyZW1haW4gPSBtb3JlID8gSU5UX01BWCA6IGxlbjtcbiBcdFx0XHR0eGIgPSBjYWxsLVx1MDAzZWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlYWxsb2NfdHhidWYoY2FsbCwgcmVtYWluLCBzay1cdTAwM2Vza19hbGxvY2F0aW9uKTtcbiBcdFx0XHRpZiAoIXR4Yikge1xuIFx0XHRcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC00MTYsOCAmIzQzOzQyNCw4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0X2RlYnVnKFwmIzM0O2FwcGVuZFwmIzM0Oyk7XG4gXG4gXHRcdC8qIGFwcGVuZCBuZXh0IHNlZ21lbnQgb2YgZGF0YSB0byB0aGUgY3VycmVudCBidWZmZXIgKi9cbi1cdFx0aWYgKG1zZ19kYXRhX2xlZnQobXNnKSBcdTAwM2UgMCkge1xuLVx0XHRcdHNpemVfdCBjb3B5ID0gdW1pbih0eGItXHUwMDNlc3BhY2UsIG1zZ19kYXRhX2xlZnQobXNnKSk7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdHNpemVfdCBjb3B5ID0gbWluMyh0eGItXHUwMDNlc3BhY2UsIGxlbiwgbXNnX2RhdGFfbGVmdChtc2cpKTtcbiBcbiBcdFx0XHRfZGVidWcoXCYjMzQ7YWRkICV6dVwmIzM0OywgY29weSk7XG4gXHRcdFx0aWYgKCFjb3B5X2Zyb21faXRlcl9mdWxsKHR4Yi1cdTAwM2VkYXRhICYjNDM7IHR4Yi1cdTAwM2VvZmZzZXQsXG5AQCAtNDI4LDYgJiM0Mzs0MzYsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRcdFx0dHhiLVx1MDAzZWxlbiAmIzQzOz0gY29weTtcbiBcdFx0XHR0eGItXHUwMDNlb2Zmc2V0ICYjNDM7PSBjb3B5O1xuIFx0XHRcdGNvcGllZCAmIzQzOz0gY29weTtcbiYjNDM7XHRcdFx0bGVuIC09IGNvcHk7XG4gXHRcdFx0aWYgKGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxuIFx0XHRcdFx0Y2FsbC1cdTAwM2V0eF90b3RhbF9sZW4gLT0gY29weTtcbiBcdFx0fVxuQEAgLTQzOSw2MiAmIzQzOzQ0OCwxMDAgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFxuIFx0XHQvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCYjMzk7cyBub3cgZnVsbCAqL1xuIFx0XHRpZiAoIXR4Yi1cdTAwM2VzcGFjZSB8fFxuLVx0XHQgICAgKG1zZ19kYXRhX2xlZnQobXNnKSA9PSAwIFx1MDAyNlx1MDAyNiAhbW9yZSkpIHtcbi1cdFx0XHRpZiAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKVxuLVx0XHRcdFx0dHhiLVx1MDAzZWZsYWdzIHw9IFJYUlBDX0xBU1RfUEFDS0VUO1xuLVxuJiM0MztcdFx0ICAgIChsZW4gPT0gMCBcdTAwMjZcdTAwMjYgIW1vcmUpKSB7XG4mIzQzO1x0XHRcdC8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZFxuJiM0MztcdFx0XHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxuJiM0MztcdFx0XHQgKiBlbmNyeXB0LiAgQXNzdW1lIHRoYXQgRU5PTUVNIGlzIHJldHJ5YWJsZSwgYnV0XG4mIzQzO1x0XHRcdCAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC5cbiYjNDM7XHRcdFx0ICovXG4gXHRcdFx0cmV0ID0gY2FsbC1cdTAwM2VzZWN1cml0eS1cdTAwM2VzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0LyogQXNzdW1lIHRoYXQgRU5PTUVNIGhlcmUgbWVhbnMgdGhhdCB0aGVcbiYjNDM7XHRcdFx0XHQgKiBlbmNyeXB0aW9uIGhhc24mIzM5O3QgaGFwcGVuZWQgeWV0LiAgVGhlIGRhdGEgaXNcbiYjNDM7XHRcdFx0XHQgKiBhbGlnbmVkIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBzbG93IGJ1ZmZlcmluZ1xuJiM0MztcdFx0XHRcdCAqIGluIHRoZSBjcnlwdG8gd2Fsay5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRpZiAocmV0ID09IC1FTk9NRU0pXG4mIzQzO1x0XHRcdFx0XHRnb3RvIG1heWJlX2Vycm9yX3Jld2luZDtcbiYjNDM7XHRcdFx0XHRzZXRfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X3R4YjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGxlbiA9PSAwIFx1MDAyNlx1MDAyNiAhbW9yZSlcbiYjNDM7XHRcdFx0XHR0eGItXHUwMDNlZmxhZ3MgfD0gUlhSUENfTEFTVF9QQUNLRVQ7XG4gXHRcdFx0cnhycGNfcXVldWVfcGFja2V0KHJ4LCBjYWxsLCB0eGIsIG5vdGlmeV9lbmRfdHgpO1xuIFx0XHRcdHR4YiA9IE5VTEw7XG4gXHRcdH1cbi1cdH0gd2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSBcdTAwM2UgMCk7XG4mIzQzO1x0fSB3aGlsZSAobGVuIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBtc2dfZGF0YV9sZWZ0KG1zZykgXHUwMDNlIDApO1xuIFxuIHN1Y2Nlc3M6XG4gXHRyZXQgPSBjb3BpZWQ7XG4tXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKVxuLVx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuLW91dDpcbiYjNDM7b3V0X3R4YjpcbiBcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gXG4gY2FsbF90ZXJtaW5hdGVkOlxuIFx0cnhycGNfcHV0X3R4YnVmKHR4YiwgcnhycGNfdHhidWZfcHV0X3NlbmRfYWJvcnRlZCk7XG4tXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIGNhbGwtXHUwMDNlZXJyb3IpO1xuLVx0cmV0dXJuIGNhbGwtXHUwMDNlZXJyb3I7XG4tXG4mIzQzO1x0Y2FsbC1cdTAwM2V0eF9wZW5kaW5nID0gTlVMTDtcbiYjNDM7XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuJiM0MztcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO21heWJlX2Vycm9yX3Jld2luZDpcbiYjNDM7XHQvKiBJZiB3ZSBnb3QgYSByZXRyeWFibGUgZXJyb3IgYWZ0ZXIgY29weWluZyBhbGwgdGhlIHN1cHBsaWVkIGRhdGEgaW50b1xuJiM0MztcdCAqIHRoZSBsYXN0IHBhY2tldCwgd2UgbmVlZCB0byByZXdpbmQgYXMgbXVjaCBhcyB3ZSBjYW4gc28gdGhlIGNhbGxlclxuJiM0MztcdCAqIGtub3dzIHRoZXkgbmVlZCB0byByZXRyeSB0aGUgc2VuZG1zZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY29waWVkIFx1MDAyNlx1MDAyNiAhbW9yZSBcdTAwMjZcdTAwMjYgIWxlbikge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHJld2luZF9ieSA9IHVtaW4oY29waWVkLCB0eGItXHUwMDNlbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHR0eGItXHUwMDNlc3BhY2UgICYjNDM7PSByZXdpbmRfYnk7XG4mIzQzO1x0XHR0eGItXHUwMDNlbGVuICAgIC09IHJld2luZF9ieTtcbiYjNDM7XHRcdHR4Yi1cdTAwM2VvZmZzZXQgLT0gcmV3aW5kX2J5O1xuJiM0MztcdFx0Y29waWVkICAgICAgLT0gcmV3aW5kX2J5O1xuJiM0MztcdFx0aWYgKGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxuJiM0MztcdFx0XHRjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbiAmIzQzOz0gcmV3aW5kX2J5O1xuJiM0MztcdFx0aW92X2l0ZXJfcmV2ZXJ0KFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgcmV3aW5kX2J5KTtcbiYjNDM7XHR9XG4gbWF5YmVfZXJyb3I6XG4tXHRpZiAoY29waWVkKVxuJiM0MztcdGlmIChjb3BpZWQpIHtcbiYjNDM7XHRcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGNhbGwtXHUwMDNlZXJyb3IgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbiYjNDM7XHRcdFx0Z290byBvdXRfdHhiO1xuJiM0MztcdFx0fVxuIFx0XHRnb3RvIHN1Y2Nlc3M7XG4tXHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0Z290byBvdXRfdHhiO1xuIFxuIGVmYXVsdDpcbiBcdHJldCA9IC1FRkFVTFQ7XG4tXHRnb3RvIG91dDtcbiYjNDM7XHRnb3RvIG91dF90eGI7XG4gXG4gd2FpdF9mb3Jfc3BhY2U6XG4gXHRyZXQgPSAtRUFHQUlOO1xuIFx0aWYgKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVClcbiBcdFx0Z290byBtYXliZV9lcnJvcjtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuLVx0Kl9kcm9wcGVkX2xvY2sgPSB0cnVlO1xuJiM0MztcbiBcdHJldCA9IHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvdyhyeCwgY2FsbCwgXHUwMDI2dGltZW8sXG4gXHRcdFx0XHQgICAgICAgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1dBSVRBTEwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBtYXliZV9lcnJvcjtcbiYjNDM7XHRcdGdvdG8gb3V0X25vbG9jaztcbiBcdGlmIChjYWxsLVx1MDAzZWludGVycnVwdGliaWxpdHkgPT0gUlhSUENfSU5URVJSVVBUSUJMRSkge1xuIFx0XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCkgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuLVx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X25vbG9jaztcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFx0fVxuLVx0Kl9kcm9wcGVkX2xvY2sgPSBmYWxzZTtcbiBcdGdvdG8gcmVsb2FkO1xuJiM0MztvdXRfbm9sb2NrOlxuJiM0MztcdF9sZWF2ZShcJiMzNDsgPSAlZCBbaW50cl1cJiMzNDssIHJldCk7XG4mIzQzO1x0cmV0dXJuIGNvcGllZCA/OiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtNjYwLDcgJiM0Mzs3MDcsNiBAQCByeHJwY19uZXdfY2xpZW50X2NhbGxfZm9yX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IHJ4cnBjX2NhbGwgKmNhbGw7XG4tXHRib29sIGRyb3BwZWRfbG9jayA9IGZhbHNlO1xuIFx0aW50IHJldDtcbiBcbiBcdHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyBwID0ge1xuQEAgLTc2OSwxNiAmIzQzOzgxNSwxNSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJYUlBDX0NNRF9TRU5EX0RBVEE6XG4tXHRcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwsIFx1MDAyNmRyb3BwZWRfbG9jayk7XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCk7XG4mIzQzO1x0XHRnb3RvIGVycm9yX3B1dDtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuIG91dF9wdXRfdW5sb2NrOlxuLVx0aWYgKCFkcm9wcGVkX2xvY2spXG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIGVycm9yX3B1dDpcbiBcdHJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpO1xuIFx0X2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCByZXQpO1xuQEAgLTgwMCwxNSAmIzQzOzg0NSwyMSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiAgKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHNlbmQgZGF0YSBvbiBhIGNhbGwuICBUaGUgY2FsbCBtdXN0IGJlIGluIGFuIHN0YXRlXG4gICogYXBwcm9wcmlhdGUgdG8gc2VuZGluZyBkYXRhLiAgTm8gY29udHJvbCBkYXRhIHNob3VsZCBiZSBzdXBwbGllZCBpbiBAbXNnLFxuICAqIG5vciBzaG91bGQgYW4gYWRkcmVzcyBiZSBzdXBwbGllZC4gIE1TR19NT1JFIHNob3VsZCBiZSBmbGFnZ2VkIGlmIHRoZXJlJiMzOTtzXG4tICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZS5cbiYjNDM7ICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZSBpZlxuJiM0MzsgKiBhbGwgdGhlIGRhdGEgaXMgYnVmZmVyZWQuXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYSBzaG9ydCBzZW5kLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZVxuJiM0MzsgKiBjYWxsZWQgYWdhaW4gZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgb3IgdG8gcGljayB1cCBhbiBlcnJvciB0aGF0XG4mIzQzOyAqIGNhdXNlZCB0aGUgc2hvcnQgc2VuZC5cbiAgKlxuLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGJ1ZmZlcmVkIChjb3VsZCBiZSAlMCBpZiBAbGVuIGlzIDAgb3JcbiYjNDM7ICogbXNnX2l0ZXIgaG9sZHMgMCBieXRlcykgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqIG90aGVyd2lzZS5cbiAgKi9cbiBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpXG4ge1xuLVx0Ym9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTtcbiBcdGludCByZXQ7XG4gXG4gXHRfZW50ZXIoXCYjMzQ7eyVkfSxcJiMzNDssIGNhbGwtXHUwMDNlZGVidWdfaWQpO1xuQEAgLTgxOSwxMiAmIzQzOzg3MCwxMCBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdG11dGV4X2xvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcbiBcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLVx1MDAzZXNrKSwgY2FsbCwgbXNnLCBsZW4sXG4tXHRcdFx0ICAgICAgbm90aWZ5X2VuZF90eCwgXHUwMDI2ZHJvcHBlZF9sb2NrKTtcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5X2VuZF90eCk7XG4gXHRpZiAocmV0ID09IC1FU0hVVERPV04pXG4gXHRcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4gXG4tXHRpZiAoIWRyb3BwZWRfbG9jaylcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtBRlNfRlMmIzM0OywKICAgICYjMzQ7UlhHSyYjMzQ7LAogICAgJiMzNDtSWFBFUkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7cnhycGNfZG9fc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyeHJwY19rZXJuZWxfc2VuZF9kYXRhJiMzNDssCiAgICAmIzM0O3J4cnBjX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7cnhycGNfbm90aWZ5X3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19wb2tlX2Nvbm4mIzM0OywKICAgICYjMzQ7cnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrJiMzNDssCiAgICAmIzM0O3J4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O2Fmc19tYWtlX2NhbGwmIzM0OywKICAgICYjMzQ7YWZzX3NlbmRfc2ltcGxlX3JlcGx5JiMzNDssCiAgICAmIzM0O2Fmc19zZW5kX2VtcHR5X3JlcGx5JiMzNDssCiAgICAmIzM0O2Fmc19jcmVhdGVfeWZzX2NtX3Rva2VuJiMzNDssCiAgICAmIzM0O3J4cGVyZl9wcm9jZXNzX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgc29ja2V0IGRhdGEgc2VuZGluZyBhbmQgY29tcGxldGlvbiBub3RpZmljYXRpb24gbWVjaGFuaXNtcywgY29ubmVjdGlvbiByZWZlcmVuY2UgY291bnRpbmcsIGtleSBwYXlsb2FkIHBhcnNpbmcsIGFuZCBpbi1rZXJuZWwgQUZTL3J4cGVyZiBzZW5kIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29yZSBuZXR3b3JraW5nIGFuZCBmaWxlc3lzdGVtIHN0YXRlIG1hY2hpbmVzIGFuZCBlcnJvci1oYW5kbGluZyBwYXRocyB0aGF0IGFyZSBmdWxseSByZWFjaGFibGUgdmlhIEFGX1JYUlBDIHNvY2tldHMsIGtleXMgc3lzY2FsbHMsIGFuZCBBRlMgb3BlcmF0aW9ucyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZDNhZmYyMzM3NjkwODE2OTNlZGE4ODliNThhYTMyMDNhNjI4OTJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNDo0OToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0CmluZGV4IDg5MjZkYWI4ZTJlNjAuLjdkZjZhZmY3NjQ0YzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdApAQCAtODc5LDE0ICYjNDM7ODc5LDIxIEBAIFRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czoKICAgICAgZXhjbHVzaXZlbHkgdG8gaW4ta2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzLiAgbXNnLm1zZ19mbGFncyBtYXkgYmUgZ2l2ZW4KICAgICAgTVNHX01PUkUgaWYgdGhlcmUgd2lsbCBiZSBzdWJzZXF1ZW50IGRhdGEgc2VuZHMgZm9yIHRoaXMgY2FsbC4KIAotICAgICBUaGUgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzCi0gICAgIG90aGVyIHRoYW4gTVNHX01PUkUuICBsZW4gaXMgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIHRvIHRyYW5zbWl0LgomIzQzOyAgICAgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzCiYjNDM7ICAgICBvdGhlciB0aGFuIE1TR19NT1JFLiAgbGVuIGlzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBhZGQgdG8gdGhlCiYjNDM7ICAgICB0cmFuc21pc3Npb24uICBUaGUgbGFzdC1wYWNrZXQgZmxhZyB3aWxsIG9ubHkgYmUgc2V0IG9uIHRoZSBvdXRnb2luZwomIzQzOyAgICAgcGFja2V0IGlmIE1TR19NT1JFIGlzIG5vdCBzZXQgYW5kIGxlbiBhbW91bnQgb2YgYnl0ZXMgYXJlIGJ1ZmZlcmVkLgogCiAgICAgIG5vdGlmeV9lbmRfcnggY2FuIGJlIE5VTEwgb3IgaXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGJlCiAgICAgIGNhbGxlZCB3aGVuIHRoZSBjYWxsIGNoYW5nZXMgc3RhdGUgdG8gZW5kIHRoZSBUeCBwaGFzZS4gIFRoaXMgZnVuY3Rpb24gaXMKICAgICAgY2FsbGVkIHdpdGggYSBzcGlubG9jayBoZWxkIHRvIHByZXZlbnQgdGhlIGxhc3QgREFUQSBwYWNrZXQgZnJvbSBiZWluZwogICAgICB0cmFuc21pdHRlZCB1bnRpbCB0aGUgZnVuY3Rpb24gcmV0dXJucy4KIAomIzQzOyAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIG9yIGFuIGVycm9yLiAgSXQgd2lsbAomIzQzOyAgICAgcmV0dXJuIHplcm8gb25seSBpZiBsZW4gaXMgMCBvciBpZiBtc2ctJmd0O21zZ19pdGVyIGlzIGVtcHR5LiAgSXQgbWF5IGFsc28KJiM0MzsgICAgIG1ha2UgYSBzaG9ydCB3cml0ZSwgYnVmZmVyaW5nIGxlc3MgdGhhbiB0aGUgYW1vdW50IG9mIGRhdGEgcHJvdmlkZWQgb3IgdGhlCiYjNDM7ICAgICBsZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZSBjYWxsZWQgYWdhaW4uCiYjNDM7CiAgKCMpIFJlY2VpdmUgZGF0YSBmcm9tIGEgY2FsbDo6CiAKIAlpbnQgcnhycGNfa2VybmVsX3JlY3ZfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLApkaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuYwppbmRleCAxMDMxNjhjNzBkZDRkLi41ZWVlZWY3NjFjZjMxIDEwMDY0NAotLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY21fc2VjdXJpdHkuYwpAQCAtMjM1LDcgJiM0MzsyMzUsNyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCiAJICoJc3RydWN0IFJYR0tfQXV0aE5hbWUJaWRlbnRpdGllcyZsdDsmZ3Q7OwogCSAqIH07CiAJICovCi0JdG9rc2l6ZSA9IGtleXNpemUgJiM0MzsgOCAmIzQzOyA0ICYjNDM7IDQgJiM0MzsgOCAmIzQzOyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7CiYjNDM7CXRva3NpemUgPSBrZXlzaXplICYjNDM7IDQgJiM0MzsgOCAmIzQzOyA0ICYjNDM7IDQgJiM0MzsgOCAmIzQzOyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7CiAKIAlvZmZzZXQgPSAwOwogCWVuY3NpemUgPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIodG9rZW5fa3JiNSwgS1JCNV9FTkNSWVBUX01PREUsIHRva3NpemUsICZhbXA7b2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggMjkwODczYmFjODliMy4uNjVhMDg2NmNkOGI4NSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmgKQEAgLTE0MTYsMjIgJiM0MzsxNDE2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KQogCQkgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsCi0JCQkJICAgIGdmcF90IGdmcCkKLXsKLQlzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC0mZ3Q7ZXN0YXRlLSZndDthZGRyZXNzZXM7Ci0KLQlvcC0mZ3Q7Y2FsbAk9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpOwotCW9wLSZndDt0eXBlCT0gY2FsbC0mZ3Q7dHlwZTsKLQljYWxsLSZndDtvcAk9IG9wOwotCWNhbGwtJmd0O2tleQk9IG9wLSZndDtrZXk7Ci0JY2FsbC0mZ3Q7aW50cgk9ICEob3AtJmd0O2ZsYWdzICZhbXA7IEFGU19PUEVSQVRJT05fVU5JTlRSKTsKLQljYWxsLSZndDtwZWVyCT0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LSZndDthZGRyc1tvcC0mZ3Q7YWRkcl9pbmRleF0ucGVlcik7Ci0JY2FsbC0mZ3Q7c2VydmljZV9pZCA9IG9wLSZndDtzZXJ2ZXItJmd0O3NlcnZpY2VfaWQ7Ci0JYWZzX21ha2VfY2FsbChjYWxsLCBnZnApOwotCWFmc19wdXRfY2FsbChjYWxsKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAljYWxsLSZndDtpb3ZfbGVuID0gc2l6ZTsKQEAgLTE3NjMsNiAmIzQzOzE3NDcsMjMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKkFGU19WTk9ERV9UT19JKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKQogCXJldHVybiAmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLAomIzQzOwkJCQkgICAgZ2ZwX3QgZ2ZwKQomIzQzO3sKJiM0MzsJc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtJmd0O2VzdGF0ZS0mZ3Q7YWRkcmVzc2VzOwomIzQzOwomIzQzOwlvcC0mZ3Q7Y2FsbAk9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpOwomIzQzOwlvcC0mZ3Q7dHlwZQk9IGNhbGwtJmd0O3R5cGU7CiYjNDM7CWNhbGwtJmd0O29wCT0gb3A7CiYjNDM7CWNhbGwtJmd0O3NlcnZlcgk9IGFmc191c2Vfc2VydmVyKG9wLSZndDtzZXJ2ZXIsIGZhbHNlLCBhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsKTsKJiM0MzsJY2FsbC0mZ3Q7a2V5CT0gb3AtJmd0O2tleTsKJiM0MzsJY2FsbC0mZ3Q7aW50cgk9ICEob3AtJmd0O2ZsYWdzICZhbXA7IEFGU19PUEVSQVRJT05fVU5JTlRSKTsKJiM0MzsJY2FsbC0mZ3Q7cGVlcgk9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC0mZ3Q7YWRkcnNbb3AtJmd0O2FkZHJfaW5kZXhdLnBlZXIpOwomIzQzOwljYWxsLSZndDtzZXJ2aWNlX2lkID0gb3AtJmd0O3NlcnZlci0mZ3Q7c2VydmljZV9pZDsKJiM0MzsJYWZzX21ha2VfY2FsbChjYWxsLCBnZnApOwomIzQzOwlhZnNfcHV0X2NhbGwoY2FsbCk7CiYjNDM7fQomIzQzOwogLyoKICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb24KICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmCmRpZmYgLS1naXQgYS9mcy9hZnMvcnhycGMuYyBiL2ZzL2Fmcy9yeHJwYy5jCmluZGV4IGQ4MjkxNjY1N2EzZGQuLjFmNWI2YWE2ODk0MzMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9yeHJwYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9yeHJwYy5jCkBAIC00MTIsMjYgJiM0Mzs0MTIsMzIgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCW1zZy5tc2dfY29udHJvbGxlbgk9IDA7CiAJbXNnLm1zZ19mbGFncwkJPSBNU0dfV0FJVEFMTCB8IChjYWxsLSZndDt3cml0ZV9pdGVyID8gTVNHX01PUkUgOiAwKTsKIAotCXJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsIHJ4Y2FsbCwKLQkJCQkgICAgICZhbXA7bXNnLCBjYWxsLSZndDtyZXF1ZXN0X3NpemUsCi0JCQkJICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlcnJvcl9kb19hYm9ydDsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLCAmYW1wO21zZywKJiM0MzsJCQkJCSAgICAgbXNnX2RhdGFfbGVmdCgmYW1wO21zZyksCiYjNDM7CQkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJvcl9kb19hYm9ydDsKJiM0MzsJfSB3aGlsZSAobXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKIAogCWlmIChjYWxsLSZndDt3cml0ZV9pdGVyKSB7CiAJCW1zZy5tc2dfaXRlciA9ICpjYWxsLSZndDt3cml0ZV9pdGVyOwogCQltc2cubXNnX2ZsYWdzICZhbXA7PSB+TVNHX01PUkU7CiAJCXRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgJmFtcDttc2cpOwogCi0JCXJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsCi0JCQkJCSAgICAgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywKLQkJCQkJICAgICBpb3ZfaXRlcl9jb3VudCgmYW1wO21zZy5tc2dfaXRlciksCi0JCQkJCSAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJcmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwKJiM0MzsJCQkJCQkgICAgIGNhbGwtJmd0O3J4Y2FsbCwgJmFtcDttc2csCiYjNDM7CQkJCQkJICAgICBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJCXRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgJmFtcDttc2csIHJldCk7CiYjNDM7CQkJCWdvdG8gZXJyb3JfZG9fYWJvcnQ7CiYjNDM7CQkJfQomIzQzOwkJfSB3aGlsZSAobXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKIAkJKmNhbGwtJmd0O3dyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7CiAKLQkJdHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCAmYW1wO21zZywgcmV0KTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycm9yX2RvX2Fib3J0OwomIzQzOwkJdHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCAmYW1wO21zZywgMCk7CiAJfQogCiAJLyogTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQsIHdlIG1heSBoYXZlIHJlY2VpdmVkIHRoZSByZXBseSBvciBhbiBhYm9ydApAQCAtNDQzLDEwICYjNDM7NDQ5LDggQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCXJldHVybjsKIAogZXJyb3JfZG9fYWJvcnQ6Ci0JaWYgKHJldCAhPSAtRUNPTk5BQk9SVEVEKQotCQlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLAotCQkJCQlSWF9VU0VSX0FCT1JULCByZXQsCi0JCQkJCWFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpOwomIzQzOwlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLAomIzQzOwkJCQlSWF9VU0VSX0FCT1JULCByZXQsIGFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpOwogCWlmIChjYWxsLSZndDthc3luYykgewogCQlhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQpOwogCQlyZXR1cm47CkBAIC04NTksNiAmIzQzOzg2Myw3IEBAIHZvaWQgYWZzX3NlbmRfZW1wdHlfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsKQogewogCXN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjYWxsLSZndDtuZXQ7CiAJc3RydWN0IG1zZ2hkciBtc2c7CiYjNDM7CWludCByZXQ7CiAKIAlfZW50ZXIoJiMzNDsmIzM0Oyk7CiAKQEAgLTg3MSwyMiAmIzQzOzg3NiwxMyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIAltc2cubXNnX2NvbnRyb2xsZW4JPSAwOwogCW1zZy5tc2dfZmxhZ3MJCT0gMDsKIAotCXN3aXRjaCAocnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywgMCwKLQkJCQkgICAgICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpKSB7Ci0JY2FzZSAwOgotCQlfbGVhdmUoJiMzNDsgW3JlcGxpZWRdJiMzNDspOwomIzQzOwlyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsICZhbXA7bXNnLCAwLAomIzQzOwkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSAvKiBTaG91bGRuJiMzOTt0IGJ1ZmZlciBtb3JlIHRoYW4gMCBieXRlcy4gKi8KIAkJcmV0dXJuOwogCi0JY2FzZSAtRU5PTUVNOgotCQlfZGVidWcoJiMzNDtvb20mIzM0Oyk7Ci0JCXJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsCi0JCQkJCVJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sCi0JCQkJCWFmc19hYm9ydF9vb20pOwotCQlmYWxsdGhyb3VnaDsKLQlkZWZhdWx0OgotCQlfbGVhdmUoJiMzNDsgW2Vycm9yXSYjMzQ7KTsKLQkJcmV0dXJuOwotCX0KJiM0MzsJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJUlhHRU5fU1NfTUFSU0hBTCwgcmV0LCBhZnNfYWJvcnRfc2VuZF9lcnJvcik7CiB9CiAKIC8qCkBAIC05MTIsMjAgJiM0Mzs5MDgsMjEgQEAgdm9pZCBhZnNfc2VuZF9zaW1wbGVfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiAJbXNnLm1zZ19jb250cm9sbGVuCT0gMDsKIAltc2cubXNnX2ZsYWdzCQk9IDA7CiAKLQluID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywgbGVuLAotCQkJCSAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJZG8gewomIzQzOwkJbiA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJCSAgICZhbXA7bXNnLCBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCSAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJfSB3aGlsZSAobiAmZ3Q7PSAwICZhbXA7JmFtcDsgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKJiM0MzsKIAlpZiAobiAmZ3Q7PSAwKSB7CiAJCS8qIFN1Y2Nlc3MgKi8KIAkJX2xlYXZlKCYjMzQ7IFtyZXBsaWVkXSYjMzQ7KTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChuID09IC1FTk9NRU0pIHsKLQkJX2RlYnVnKCYjMzQ7b29tJiMzNDspOwotCQlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAotCQkJCQlSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLAotCQkJCQlhZnNfYWJvcnRfb29tKTsKLQl9CiYjNDM7CiYjNDM7CXJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsCiYjNDM7CQkJCVJYR0VOX1NTX01BUlNIQUwsIG4sIGFmc19hYm9ydF9zZW5kX2Vycm9yKTsKIAlfbGVhdmUoJiMzNDsgW2Vycm9yXSYjMzQ7KTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaAppbmRleCAxYjNjNDhiNTU5MWRmLi4wNGIwYmI2ODJiODEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaApAQCAtMTQ4LDYgJiM0MzsxNDgsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24gewogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsCSYjMzQ7VU5VIGlzb3J0JiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VwZGF0ZSwJCSYjMzQ7VVBEQVRFICAgJiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9ieV91dWlkLAkmIzM0O1VTRSB1dWlkICYjMzQ7KSBcCiYjNDM7CUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwsCQkmIzM0O1VTRSBjYWxsICYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCwJJiMzNDtVU0UgY20tY2wmIzM0OykgXAogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLAkmIzM0O1VTRSBnY2FwcyYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYiwJJiMzNDtVU0UgZ3Z1cGMmIzM0OykgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmgKaW5kZXggNzA0YTEwZGU2NjcwMC4uNTJmODcxOGNmNzI1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oCkBAIC0yMCwxNiAmIzQzOzIwLDE2IEBACiAJLyogQUZTIGVycm9ycyAqLwkJCQkJCVwKIAlFTShhZnNfYWJvcnRfZ2VuZXJhbF9lcnJvciwJCSYjMzQ7YWZzLWVycm9yJiMzNDspCQlcCiAJRU0oYWZzX2Fib3J0X2ludGVycnVwdGVkLAkJJiMzNDthZnMtaW50ciYjMzQ7KQkJXAotCUVNKGFmc19hYm9ydF9vb20sCQkJJiMzNDthZnMtb29tJiMzNDspCQlcCiAJRU0oYWZzX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsCQkmIzM0O2Fmcy1vcC1ub3RzdXBwJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfcHJvYmV1dWlkX25lZ2F0aXZlLAkmIzM0O2Fmcy1wcm9iZXV1aWQtbmVnJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yLAkJJiMzNDthZnMtc2VuZC1kYXRhJiMzNDspCVwKJiM0MzsJRU0oYWZzX2Fib3J0X3NlbmRfZXJyb3IsCQkmIzM0O2Fmcy1zZW5kLWVycm9yJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfdW5tYXJzaGFsX2Vycm9yLAkJJiMzNDthZnMtdW5tYXJzaGFsJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzLAkmIzM0O2Fmcy11bnN1cC1zZWMtY2xhc3MmIzM0OykJXAogCS8qIHJ4cGVyZiBlcnJvcnMgKi8JCQkJCQlcCiAJRU0ocnhwZXJmX2Fib3J0X2dlbmVyYWxfZXJyb3IsCQkmIzM0O3J4cGVyZi1lcnJvciYjMzQ7KQkJXAotCUVNKHJ4cGVyZl9hYm9ydF9vb20sCQkJJiMzNDtyeHBlcmYtb29tJiMzNDspCQlcCiAJRU0ocnhwZXJmX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsCSYjMzQ7cnhwZXJmLW9wLW5vdHN1cHAmIzM0OykJXAomIzQzOwlFTShyeHBlcmZfYWJvcnRfc2VuZF9lcnJvciwJCSYjMzQ7cnhwZXJmLXNlbmQtZXJyb3ImIzM0OykJXAogCUVNKHJ4cGVyZl9hYm9ydF91bm1hcnNoYWxfZXJyb3IsCSYjMzQ7cnhwZXJmLXVubWFyc2hhbCYjMzQ7KQlcCiAJLyogUnhLQUQgc2VjdXJpdHkgZXJyb3JzICovCQkJCQlcCiAJRU0ocnhrYWRfYWJvcnRfMV9zaG9ydF9jaGVjaywJCSYjMzQ7cnhrYWQxLXNob3J0LWNoZWNrJiMzNDspCVwKQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEAKIAlFTShyeHJwY19lcHJvdG9fd3Jvbmdfc2VjdXJpdHksCQkmIzM0O3dyb25nLXNlYyYjMzQ7KQkJXAogCUVNKHJ4cnBjX3JlY3Ztc2dfZXhjZXNzX2RhdGEsCQkmIzM0O3JlY3Ztc2ctZXhjZXNzJiMzNDspCVwKIAlFTShyeHJwY19yZWN2bXNnX3Nob3J0X2RhdGEsCQkmIzM0O3JlY3Ztc2ctc2hvcnQmIzM0OykJXAomIzQzOwlFTShyeHJwY19zZW5kbXNnX3R4X2Vycm9yLAkJJiMzNDt0eC1lcnJvciYjMzQ7KQkJXAogCUVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLAkJJiMzNDtzZW5kbXNnLWxhdGUmIzM0OykKIAogI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFwKQEAgLTM0Miw2ICYjNDM7MzQzLDcgQEAKIAlFTShyeHJwY19jYWxsX3NlZV9kaXN0cmlidXRlX2Vycm9yLAkmIzM0O1NFRSBkaXN0LWVyciYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfaW5wdXQsCQkmIzM0O1NFRSBpbnB1dCAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkLAkmIzM0O1NFRSBuZnktcmxzZCYjMzQ7KSBcCiYjNDM7CUVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkLAkmIzM0O1NFRSBuZnktc2tpcCYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZywJCSYjMzQ7U0VFIHJlY3Ztc2cgJiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWUsCSYjMzQ7U0VFIHJlY3YtcnF1JiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsICYjMzQ7U0VFIHJlY3YtcnFGJiMzNDspIFwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKaW5kZXggODY1ZjA1ZmUzN2FiOS4uY2IzNmE3MDlmNTQwZSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKQEAgLTY0Miw2ICYjNDM7NjQyLDcgQEAgZW51bSByeHJwY19jYWxsX2ZsYWcgewogCVJYUlBDX0NBTExfVFhfTEFTVCwJCS8qIExhc3QgcGFja2V0IGluIFR4IGJ1ZmZlciAoYXQgcnh0eF90b3ApICovCiAJUlhSUENfQ0FMTF9UWF9BTExfQUNLRUQsCS8qIExhc3QgcGFja2V0IGhhcyBiZWVuIGhhcmQtYWNrZWQgKi8KIAlSWFJQQ19DQUxMX1RYX05PX01PUkUsCQkvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovCiYjNDM7CVJYUlBDX0NBTExfVFhfRVJST1IsCQkvKiBUZXJtaW5hbCBlcnJvcjsgY2FsbCBuZWVkcyBhYm9ydCAqLwogCVJYUlBDX0NBTExfU0VORF9QSU5HLAkJLyogQSBwaW5nIHdpbGwgbmVlZCB0byBiZSBzZW50ICovCiAJUlhSUENfQ0FMTF9SRVRSQU5TX1RJTUVPVVQsCS8qIFJldHJhbnNtaXNzaW9uIGR1ZSB0byB0aW1lb3V0IG9jY3VycmVkICovCiAJUlhSUENfQ0FMTF9CRUdBTl9SWF9USU1FUiwJLyogV2UgYmVnYW4gdGhlIGV4cGVjdF9yeF9ieSB0aW1lciAqLwpAQCAtMTEwOSw2ICYjNDM7MTExMCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByeHJwY19pc19jbGllbnRfY2FsbChjb25zdCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIC8qCiAgKiBjYWxsX3N0YXRlLmMKICAqLwomIzQzO3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCk7CiBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsCiAJCQkgICAgICAgZW51bSByeHJwY19jYWxsX2NvbXBsZXRpb24gY29tcGwsCiAJCQkgICAgICAgdTMyIGFib3J0X2NvZGUsCkBAIC0xNDQxLDcgJiM0MzsxNDQzLDYgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByeHJwY19sb2NhbF9zZXFfb3BzOwogLyoKICAqIHJlY3Ztc2cuYwogICovCi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKik7CiBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtc2doZHIgKiwgc2l6ZV90LCBpbnQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmMKaW5kZXggNmFmYjU0MzczZWJiZi4uMzY0ODEwYzY1Mjc2NiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jCkBAIC03LDYgJiM0Mzs3LDYwIEBACiAKICNpbmNsdWRlICYjMzQ7YXItaW50ZXJuYWwuaCYjMzQ7CiAKJiM0MzsvKgomIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBfX3J4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnhycGNfc29jayAqcng7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFJYUlBDX0NBTExfUkVMRUFTRUQsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsKJiM0MzsJcnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC0mZ3Q7c29ja2V0KTsKJiM0MzsJc2sgPSAmYW1wO3J4LSZndDtzazsKJiM0MzsJaWYgKHJ4ICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICZsdDsgUlhSUENfQ0xPU0UpIHsKJiM0MzsJCWlmIChjYWxsLSZndDtub3RpZnlfcngpIHsKJiM0MzsJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrLCBmbGFncyk7CiYjNDM7CQkJY2FsbC0mZ3Q7bm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLSZndDt1c2VyX2NhbGxfSUQpOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjYWxsLSZndDtub3RpZnlfbG9jaywgZmxhZ3MpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2ssIGZsYWdzKTsKJiM0MzsJCQlpZiAobGlzdF9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaykpIHsKJiM0MzsJCQkJcnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7CiYjNDM7CQkJCWxpc3RfYWRkX3RhaWwoJmFtcDtjYWxsLSZndDtyZWN2bXNnX2xpbmssICZhbXA7cngtJmd0O3JlY3Ztc2dfcSk7CiYjNDM7CQkJfQomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKJiM0MzsJCQkJX2RlYnVnKCYjMzQ7Y2FsbCAlcHMmIzM0Oywgc2stJmd0O3NrX2RhdGFfcmVhZHkpOwomIzQzOwkJCQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiYjNDM7ewomIzQzOwlpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSkgewomIzQzOwkJcnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CV9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogVHJhbnNpdGlvbiBhIGNhbGwgdG8gdGhlIGNvbXBsZXRlIHN0YXRlLgogICovCkBAIC0yNSw3ICYjNDM7NzksNyBAQCBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsCiAJcnhycGNfc2V0X2NhbGxfc3RhdGUoY2FsbCwgUlhSUENfQ0FMTF9DT01QTEVURSk7CiAJdHJhY2VfcnhycGNfY2FsbF9jb21wbGV0ZShjYWxsKTsKIAl3YWtlX3VwKCZhbXA7Y2FsbC0mZ3Q7d2FpdHEpOwotCXJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7CiYjNDM7CV9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmMgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuYwppbmRleCAwZWNlNzE3ZGIwZjg1Li4xYmU1MGUwYzljZWU1IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvY29ubl9vYmplY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuYwpAQCAtMzQsNyAmIzQzOzM0LDEwIEBAIHZvaWQgcnhycGNfcG9rZV9jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLCBlbnVtIHJ4cnBjX2Nvbm5fdHJhY2Ugd2h5KQogCXNwaW5fbG9ja19pcnEoJmFtcDtsb2NhbC0mZ3Q7bG9jayk7CiAJYnVzeSA9ICFsaXN0X2VtcHR5KCZhbXA7Y29ubi0mZ3Q7YXR0ZW5kX2xpbmspOwogCWlmICghYnVzeSkgewotCQlyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCB3aHkpOwomIzQzOwkJaWYgKCFyeHJwY19nZXRfY29ubmVjdGlvbl9tYXliZShjb25uLCB3aHkpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bG9jYWwtJmd0O2xvY2spOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAkJbGlzdF9hZGRfdGFpbCgmYW1wO2Nvbm4tJmd0O2F0dGVuZF9saW5rLCAmYW1wO2xvY2FsLSZndDtjb25uX2F0dGVuZF9xKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bG9jYWwtJmd0O2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2tleS5jIGIvbmV0L3J4cnBjL2tleS5jCmluZGV4IGEwYWE3OGQ4OTI4OTcuLjMwZDZkYjA1MmMyMTYgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMva2V5LmMKQEAgLTE3Miw2ICYjNDM7MTcyLDcgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCwKIAljb25zdCBfX2JlMzIgKnRpY2tldCwgKmtleTsKIAlzNjQgdG1wOwogCXNpemVfdCByYXdfa2V5bGVuLCByYXdfdGt0bGVuLCBrZXlsZW4sIHRrdGxlbjsKJiM0MzsJaW50IHJldCA9IC1FS0VZUkVKRUNURUQ7CiAKIAlfZW50ZXIoJiMzNDsseyV4LCV4LCV4LCV4fSwleCYjMzQ7LAogCSAgICAgICBudG9obCh4ZHJbMF0pLCBudG9obCh4ZHJbMV0pLCBudG9obCh4ZHJbMl0pLCBudG9obCh4ZHJbM10pLApAQCAtMjI5LDYgJiM0MzsyMzAsMTEgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCwKIAl0b2tlbi0mZ3Q7cnhnay0mZ3Q7a2V5LmRhdGEJPSB0b2tlbi0mZ3Q7cnhnay0mZ3Q7X2tleTsKIAl0b2tlbi0mZ3Q7cnhnay0mZ3Q7dGlja2V0LmxlbiA9IHJhd190a3RsZW47CiAKJiM0MzsJaWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodG9rZW4tJmd0O3J4Z2stJmd0O2VuY3R5cGUpKSB7CiYjNDM7CQlyZXQgPSAtRU5PUEtHOwomIzQzOwkJZ290byByZWplY3RfdG9rZW47CiYjNDM7CX0KJiM0MzsKIAlpZiAodG9rZW4tJmd0O3J4Z2stJmd0O2VuZHRpbWUgIT0gMCkgewogCQlleHBpcnkgPSByeHJwY19zNjRfdG9fdGltZTY0KHRva2VuLSZndDtyeGdrLSZndDtlbmR0aW1lKTsKIAkJaWYgKGV4cGlyeSAmbHQ7IDApCkBAIC0yODAsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsCiAJa2ZyZWUodG9rZW4tJmd0O3J4Z2spOwogCWtmcmVlKHRva2VuKTsKIHJlamVjdDoKLQlyZXR1cm4gLUVLRVlSRUpFQ1RFRDsKJiM0MzsJcmV0dXJuIHJldDsKIGV4cGlyZWQ6CiAJa2ZyZWUodG9rZW4tJmd0O3J4Z2spOwogCWtmcmVlKHRva2VuKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jCmluZGV4IGVmY2JhNGIyZTc0ZjAuLjI4YjIxNDhiNTY5MzYgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9yZWN2bXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3JlY3Ztc2cuYwpAQCAtMTcsMTMgJiM0MzsxNywxMiBAQAogI2luY2x1ZGUgJiMzNDthci1pbnRlcm5hbC5oJiMzNDsKIAogLyoKLSAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXIKLSAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS4KJiM0MzsgKiBSZXF1ZXVlIGEgY2FsbCBmb3IgcmVjdm1zZygpIHRvIHBpY2sgdXAuCiAgKi8KLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKJiM0MztzdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiB7Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4OwotCXN0cnVjdCBzb2NrICpzazsKJiM0MzsJc3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay0mZ3Q7c2spOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3J4LSZndDtzazsKIAogCV9lbnRlcigmIzM0OyVkJiMzNDssIGNhbGwtJmd0O2RlYnVnX2lkKTsKIApAQCAtMzIsMzEgJiM0MzszMSwxOCBAQCB2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiAJCXJldHVybjsKIAl9CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLSZndDtzb2NrZXQpOwotCXNrID0gJmFtcDtyeC0mZ3Q7c2s7Ci0JaWYgKHJ4ICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICZsdDsgUlhSUENfQ0xPU0UpIHsKLQkJaWYgKGNhbGwtJmd0O25vdGlmeV9yeCkgewotCQkJc3Bpbl9sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKLQkJCWNhbGwtJmd0O25vdGlmeV9yeChzaywgY2FsbCwgY2FsbC0mZ3Q7dXNlcl9jYWxsX0lEKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fbG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKLQkJCWlmIChsaXN0X2VtcHR5KCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rKSkgewotCQkJCXJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpOwotCQkJCWxpc3RfYWRkX3RhaWwoJmFtcDtjYWxsLSZndDtyZWN2bXNnX2xpbmssICZhbXA7cngtJmd0O3JlY3Ztc2dfcSk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaykpIHsKJiM0MzsJCXJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaywgJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKIAotCQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKLQkJCQlfZGVidWcoJiMzNDtjYWxsICVwcyYjMzQ7LCBzay0mZ3Q7c2tfZGF0YV9yZWFkeSk7Ci0JCQkJc2stJmd0O3NrX2RhdGFfcmVhZHkoc2spOwotCQkJfQotCQl9CiYjNDM7CWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7CiYjNDM7CQlfZGVidWcoJiMzNDtjYWxsICVwcyYjMzQ7LCBzay0mZ3Q7c2tfZGF0YV9yZWFkeSk7CiYjNDM7CQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiAJfQogCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJX2xlYXZlKCYjMzQ7JiMzNDspOwogfQogCkBAIC01NjEsNyAmIzQzOzU0Nyw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAogCWlmICghKGZsYWdzICZhbXA7IE1TR19QRUVLKSAmYW1wOyZhbXA7CiAJICAgICFza2JfcXVldWVfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX3F1ZXVlKSkKLQkJcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKJiM0MzsJCXJ4cnBjX3JlcXVldWVfY2FsbChzb2NrLCBjYWxsKTsKIAlnb3RvIG5vdF95ZXRfY29tcGxldGU7CiAKIGNhbGxfZmFpbGVkOgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmMKaW5kZXggNzdhNjdhY2UxZDI0OC4uYjQ5MjIxZjU3ZjY3NyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3J4Z2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcnhnay5jCkBAIC0yNTEsOCAmIzQzOzI1MSwxMCBAQCBzdGF0aWMgaW50IHJ4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCQkJCQkgR0ZQX05PRlMpOwogCWlmIChJU19FUlIoZ2spKQogCQlyZXR1cm4gUFRSX0VSUihnayk7CiYjNDM7CXdyaXRlX2xvY2soJmFtcDtjb25uLSZndDtzZWN1cml0eV91c2VfbG9jayk7CiAJY29ubi0mZ3Q7cnhnay5lbmN0eXBlID0gZ2stJmd0O2tyYjUtJmd0O2V0eXBlOwogCWNvbm4tJmd0O3J4Z2sua2V5c1tnay0mZ3Q7a2V5X251bWJlciAmYW1wOyAzXSA9IGdrOwomIzQzOwl3cml0ZV91bmxvY2soJmFtcDtjb25uLSZndDtzZWN1cml0eV91c2VfbG9jayk7CiAKIAlzd2l0Y2ggKGNvbm4tJmd0O3NlY3VyaXR5X2xldmVsKSB7CiAJY2FzZSBSWFJQQ19TRUNVUklUWV9QTEFJTjoKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeHBlcmYuYyBiL25ldC9yeHJwYy9yeHBlcmYuYwppbmRleCBiOGRmNmQyMjMxNGQ2Li5lYmQ1NDIyMmM2NGVmIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvcnhwZXJmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3J4cGVyZi5jCkBAIC01MzgsMTUgJiM0Mzs1MzgsMTggQEAgc3RhdGljIGludCByeHBlcmZfcHJvY2Vzc19jYWxsKHN0cnVjdCByeHBlcmZfY2FsbCAqY2FsbCkKIAlpb3ZbMF0uaW92X2xlbgk9IGxlbjsKIAlpb3ZfaXRlcl9rdmVjKCZhbXA7bXNnLm1zZ19pdGVyLCBXUklURSwgaW92LCAxLCBsZW4pOwogCW1zZy5tc2dfZmxhZ3MgPSAwOwotCW4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwgJmFtcDttc2csIGxlbiwKLQkJCQkgICByeHBlcmZfbm90aWZ5X2VuZF9yZXBseV90eCk7CiYjNDM7CWRvIHsKJiM0MzsJCW4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJCSAgICZhbXA7bXNnLCBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCSAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJfSB3aGlsZSAobiAmZ3Q7PSAwICZhbXA7JmFtcDsgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKJiM0MzsKIAlpZiAobiAmZ3Q7PSAwKQogCQlyZXR1cm4gMDsgLyogU3VjY2VzcyAqLwogCi0JaWYgKG4gPT0gLUVOT01FTSkKLQkJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwocnhwZXJmX3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAotCQkJCQlSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLAotCQkJCQlyeHBlcmZfYWJvcnRfb29tKTsKJiM0MzsJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwocnhwZXJmX3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAomIzQzOwkJCQlSWEdFTl9TU19NQVJTSEFMLCBuLAomIzQzOwkJCQlyeHBlcmZfYWJvcnRfc2VuZF9lcnJvcik7CiAJcmV0dXJuIG47CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZW5kbXNnLmMgYi9uZXQvcnhycGMvc2VuZG1zZy5jCmluZGV4IGVkMmM5YTUxMDA1YWQuLjhiYjMyN2RjMjgzM2UgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3NlbmRtc2cuYwpAQCAtMzIwLDggJiM0MzszMjAsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX2FsbG9jX3R4cXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAkJCSAgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAotCQkJICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsCi0JCQkgICBib29sICpfZHJvcHBlZF9sb2NrKQomIzQzOwkJCSAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KQomIzQzOwlfX3JlbGVhc2VzKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCkKIHsKIAlzdHJ1Y3QgcnhycGNfdHhidWYgKnR4YjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3J4LSZndDtzazsKQEAgLTMzMCwyOSAmIzQzOzMzMCwzNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJYm9vbCBtb3JlID0gbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX01PUkU7CiAJaW50IHJldCwgY29waWVkID0gMDsKIAotCWlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSB7Ci0JCXRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtJmd0O2RlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCwKLQkJCQkgIGNhbGwtJmd0O2NpZCwgY2FsbC0mZ3Q7Y2FsbF9pZCwgY2FsbC0mZ3Q7cnhfY29uc3VtZWQsCi0JCQkJICAwLCAtRVBST1RPKTsKLQkJcmV0dXJuIC1FUFJPVE87Ci0JfQotCiAJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwogCiAJcmV0ID0gcnhycGNfd2FpdF90b19iZV9jb25uZWN0ZWQoY2FsbCwgJmFtcDt0aW1lbyk7CiAJaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAlpZiAoY2FsbC0mZ3Q7Y29ubi0mZ3Q7c3RhdGUgPT0gUlhSUENfQ09OTl9DTElFTlRfVU5TRUNVUkVEKSB7CiAJCXJldCA9IHJ4cnBjX2luaXRfY2xpZW50X2Nvbm5fc2VjdXJpdHkoY2FsbC0mZ3Q7Y29ubik7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJLyogdGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqLwogCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCiByZWxvYWQ6CiYjNDM7CWlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSkgewomIzQzOwkJdHJhY2VfcnhycGNfYWJvcnQoY2FsbC0mZ3Q7ZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLAomIzQzOwkJCQkgIGNhbGwtJmd0O2NpZCwgY2FsbC0mZ3Q7Y2FsbF9pZCwgY2FsbC0mZ3Q7cnhfY29uc3VtZWQsCiYjNDM7CQkJCSAgMCwgLUVQUk9UTyk7CiYjNDM7CQlyZXQgPSAtRVBST1RPOwomIzQzOwkJZ290byBtYXliZV9lcnJvcjsKJiM0MzsJfQomIzQzOwlpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgJmFtcDtjYWxsLSZndDtmbGFncykpKSB7CiYjNDM7CQl0cmFjZV9yeHJwY19hYm9ydChjYWxsLSZndDtkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvciwKJiM0MzsJCQkJICBjYWxsLSZndDtjaWQsIGNhbGwtJmd0O2NhbGxfaWQsIGNhbGwtJmd0O3J4X2NvbnN1bWVkLAomIzQzOwkJCQkgIDAsIC1FSU8pOwomIzQzOwkJcmV0ID0gLUVJTzsKJiM0MzsJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CX0KJiM0MzsKIAl0eGIgPSBjYWxsLSZndDt0eF9wZW5kaW5nOwogCWNhbGwtJmd0O3R4X3BlbmRpbmcgPSBOVUxMOwogCWlmICh0eGIpCkBAIC0zNzksOSAmIzQzOzM4Nyw5IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAogCXJldCA9IC1FTVNHU0laRTsKIAlpZiAoY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICE9IC0xKSB7Ci0JCWlmIChsZW4gLSBjb3BpZWQgJmd0OyBjYWxsLSZndDt0eF90b3RhbF9sZW4pCiYjNDM7CQlpZiAobGVuICZndDsgY2FsbC0mZ3Q7dHhfdG90YWxfbGVuKQogCQkJZ290byBtYXliZV9lcnJvcjsKLQkJaWYgKCFtb3JlICZhbXA7JmFtcDsgbGVuIC0gY29waWVkICE9IGNhbGwtJmd0O3R4X3RvdGFsX2xlbikKJiM0MzsJCWlmICghbW9yZSAmYW1wOyZhbXA7IGxlbiAhPSBjYWxsLSZndDt0eF90b3RhbF9sZW4pCiAJCQlnb3RvIG1heWJlX2Vycm9yOwogCX0KIApAQCAtNDA1LDcgJiM0Mzs0MTMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJCQkgKiB0aGUgc2VjdXJpdHkgaGVhZGVyIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBwYWRkZWQKIAkJCSAqIHJlZ2lvbiAoZW5jIGJsb2Nrc2l6ZSksIGJ1dCB0aGUgdHJhaWxlciBpcyBub3QuCiAJCQkgKi8KLQkJCXJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbXNnX2RhdGFfbGVmdChtc2cpOwomIzQzOwkJCXJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbGVuOwogCQkJdHhiID0gY2FsbC0mZ3Q7Y29ubi0mZ3Q7c2VjdXJpdHktJmd0O2FsbG9jX3R4YnVmKGNhbGwsIHJlbWFpbiwgc2stJmd0O3NrX2FsbG9jYXRpb24pOwogCQkJaWYgKCF0eGIpIHsKIAkJCQlyZXQgPSAtRU5PTUVNOwpAQCAtNDE2LDggJiM0Mzs0MjQsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJCV9kZWJ1ZygmIzM0O2FwcGVuZCYjMzQ7KTsKIAogCQkvKiBhcHBlbmQgbmV4dCBzZWdtZW50IG9mIGRhdGEgdG8gdGhlIGN1cnJlbnQgYnVmZmVyICovCi0JCWlmIChtc2dfZGF0YV9sZWZ0KG1zZykgJmd0OyAwKSB7Ci0JCQlzaXplX3QgY29weSA9IHVtaW4odHhiLSZndDtzcGFjZSwgbXNnX2RhdGFfbGVmdChtc2cpKTsKJiM0MzsJCWlmIChsZW4gJmd0OyAwKSB7CiYjNDM7CQkJc2l6ZV90IGNvcHkgPSBtaW4zKHR4Yi0mZ3Q7c3BhY2UsIGxlbiwgbXNnX2RhdGFfbGVmdChtc2cpKTsKIAogCQkJX2RlYnVnKCYjMzQ7YWRkICV6dSYjMzQ7LCBjb3B5KTsKIAkJCWlmICghY29weV9mcm9tX2l0ZXJfZnVsbCh0eGItJmd0O2RhdGEgJiM0MzsgdHhiLSZndDtvZmZzZXQsCkBAIC00MjgsNiAmIzQzOzQzNiw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAkJCXR4Yi0mZ3Q7bGVuICYjNDM7PSBjb3B5OwogCQkJdHhiLSZndDtvZmZzZXQgJiM0Mzs9IGNvcHk7CiAJCQljb3BpZWQgJiM0Mzs9IGNvcHk7CiYjNDM7CQkJbGVuIC09IGNvcHk7CiAJCQlpZiAoY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICE9IC0xKQogCQkJCWNhbGwtJmd0O3R4X3RvdGFsX2xlbiAtPSBjb3B5OwogCQl9CkBAIC00MzksNjIgJiM0Mzs0NDgsMTAwIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAogCQkvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCYjMzk7cyBub3cgZnVsbCAqLwogCQlpZiAoIXR4Yi0mZ3Q7c3BhY2UgfHwKLQkJICAgIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCAmYW1wOyZhbXA7ICFtb3JlKSkgewotCQkJaWYgKG1zZ19kYXRhX2xlZnQobXNnKSA9PSAwICZhbXA7JmFtcDsgIW1vcmUpCi0JCQkJdHhiLSZndDtmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDsKLQomIzQzOwkJICAgIChsZW4gPT0gMCAmYW1wOyZhbXA7ICFtb3JlKSkgewomIzQzOwkJCS8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZAomIzQzOwkJCSAqIGhhdmUgY29ycnVwdGVkIHRoZSB0eGJ1ZiBjb250ZW50IHdpdGggYSBwYXJ0aWFsCiYjNDM7CQkJICogZW5jcnlwdC4gIEFzc3VtZSB0aGF0IEVOT01FTSBpcyByZXRyeWFibGUsIGJ1dAomIzQzOwkJCSAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC4KJiM0MzsJCQkgKi8KIAkJCXJldCA9IGNhbGwtJmd0O3NlY3VyaXR5LSZndDtzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7Ci0JCQlpZiAocmV0ICZsdDsgMCkKLQkJCQlnb3RvIG91dDsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJCQkvKiBBc3N1bWUgdGhhdCBFTk9NRU0gaGVyZSBtZWFucyB0aGF0IHRoZQomIzQzOwkJCQkgKiBlbmNyeXB0aW9uIGhhc24mIzM5O3QgaGFwcGVuZWQgeWV0LiAgVGhlIGRhdGEgaXMKJiM0MzsJCQkJICogYWxpZ25lZCB0byBhdm9pZCB0aGUgbmVlZCBmb3Igc2xvdyBidWZmZXJpbmcKJiM0MzsJCQkJICogaW4gdGhlIGNyeXB0byB3YWxrLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKHJldCA9PSAtRU5PTUVNKQomIzQzOwkJCQkJZ290byBtYXliZV9lcnJvcl9yZXdpbmQ7CiYjNDM7CQkJCXNldF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgJmFtcDtjYWxsLSZndDtmbGFncyk7CiYjNDM7CQkJCWdvdG8gb3V0X3R4YjsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJaWYgKGxlbiA9PSAwICZhbXA7JmFtcDsgIW1vcmUpCiYjNDM7CQkJCXR4Yi0mZ3Q7ZmxhZ3MgfD0gUlhSUENfTEFTVF9QQUNLRVQ7CiAJCQlyeHJwY19xdWV1ZV9wYWNrZXQocngsIGNhbGwsIHR4Yiwgbm90aWZ5X2VuZF90eCk7CiAJCQl0eGIgPSBOVUxMOwogCQl9Ci0JfSB3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpICZndDsgMCk7CiYjNDM7CX0gd2hpbGUgKGxlbiAmZ3Q7IDAgJmFtcDsmYW1wOyBtc2dfZGF0YV9sZWZ0KG1zZykgJmd0OyAwKTsKIAogc3VjY2VzczoKIAlyZXQgPSBjb3BpZWQ7Ci0JaWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgJmFtcDsmYW1wOwotCSAgICBjYWxsLSZndDtlcnJvciAmbHQ7IDApCi0JCXJldCA9IGNhbGwtJmd0O2Vycm9yOwotb3V0OgomIzQzO291dF90eGI6CiAJY2FsbC0mZ3Q7dHhfcGVuZGluZyA9IHR4YjsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtjYWxsLSZndDt1c2VyX211dGV4KTsKIAlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCByZXQpOwogCXJldHVybiByZXQ7CiAKIGNhbGxfdGVybWluYXRlZDoKIAlyeHJwY19wdXRfdHhidWYodHhiLCByeHJwY190eGJ1Zl9wdXRfc2VuZF9hYm9ydGVkKTsKLQlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCBjYWxsLSZndDtlcnJvcik7Ci0JcmV0dXJuIGNhbGwtJmd0O2Vycm9yOwotCiYjNDM7CWNhbGwtJmd0O3R4X3BlbmRpbmcgPSBOVUxMOwomIzQzOwlyZXQgPSBjYWxsLSZndDtlcnJvcjsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzO21heWJlX2Vycm9yX3Jld2luZDoKJiM0MzsJLyogSWYgd2UgZ290IGEgcmV0cnlhYmxlIGVycm9yIGFmdGVyIGNvcHlpbmcgYWxsIHRoZSBzdXBwbGllZCBkYXRhIGludG8KJiM0MzsJICogdGhlIGxhc3QgcGFja2V0LCB3ZSBuZWVkIHRvIHJld2luZCBhcyBtdWNoIGFzIHdlIGNhbiBzbyB0aGUgY2FsbGVyCiYjNDM7CSAqIGtub3dzIHRoZXkgbmVlZCB0byByZXRyeSB0aGUgc2VuZG1zZy4KJiM0MzsJICovCiYjNDM7CWlmIChjb3BpZWQgJmFtcDsmYW1wOyAhbW9yZSAmYW1wOyZhbXA7ICFsZW4pIHsKJiM0MzsJCXVuc2lnbmVkIGludCByZXdpbmRfYnkgPSB1bWluKGNvcGllZCwgdHhiLSZndDtsZW4pOwomIzQzOwomIzQzOwkJdHhiLSZndDtzcGFjZSAgJiM0Mzs9IHJld2luZF9ieTsKJiM0MzsJCXR4Yi0mZ3Q7bGVuICAgIC09IHJld2luZF9ieTsKJiM0MzsJCXR4Yi0mZ3Q7b2Zmc2V0IC09IHJld2luZF9ieTsKJiM0MzsJCWNvcGllZCAgICAgIC09IHJld2luZF9ieTsKJiM0MzsJCWlmIChjYWxsLSZndDt0eF90b3RhbF9sZW4gIT0gLTEpCiYjNDM7CQkJY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICYjNDM7PSByZXdpbmRfYnk7CiYjNDM7CQlpb3ZfaXRlcl9yZXZlcnQoJmFtcDttc2ctJmd0O21zZ19pdGVyLCByZXdpbmRfYnkpOwomIzQzOwl9CiBtYXliZV9lcnJvcjoKLQlpZiAoY29waWVkKQomIzQzOwlpZiAoY29waWVkKSB7CiYjNDM7CQlpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY2FsbC0mZ3Q7ZXJyb3IgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gY2FsbC0mZ3Q7ZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfdHhiOwomIzQzOwkJfQogCQlnb3RvIHN1Y2Nlc3M7Ci0JZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZ290byBvdXRfdHhiOwogCiBlZmF1bHQ6CiAJcmV0ID0gLUVGQVVMVDsKLQlnb3RvIG91dDsKJiM0MzsJZ290byBvdXRfdHhiOwogCiB3YWl0X2Zvcl9zcGFjZToKIAlyZXQgPSAtRUFHQUlOOwogCWlmIChtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpCiAJCWdvdG8gbWF5YmVfZXJyb3I7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7Ci0JKl9kcm9wcGVkX2xvY2sgPSB0cnVlOwomIzQzOwogCXJldCA9IHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvdyhyeCwgY2FsbCwgJmFtcDt0aW1lbywKIAkJCQkgICAgICAgbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX1dBSVRBTEwpOwogCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIG1heWJlX2Vycm9yOwomIzQzOwkJZ290byBvdXRfbm9sb2NrOwogCWlmIChjYWxsLSZndDtpbnRlcnJ1cHRpYmlsaXR5ID09IFJYUlBDX0lOVEVSUlVQVElCTEUpIHsKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpICZsdDsgMCkgewogCQkJcmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTsKLQkJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfbm9sb2NrOwogCQl9CiAJfSBlbHNlIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogCX0KLQkqX2Ryb3BwZWRfbG9jayA9IGZhbHNlOwogCWdvdG8gcmVsb2FkOwomIzQzO291dF9ub2xvY2s6CiYjNDM7CV9sZWF2ZSgmIzM0OyA9ICVkIFtpbnRyXSYjMzQ7LCByZXQpOwomIzQzOwlyZXR1cm4gY29waWVkID86IHJldDsKIH0KIAogLyoKQEAgLTY2MCw3ICYjNDM7NzA3LDYgQEAgcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLAogaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGw7Ci0JYm9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zIHAgPSB7CkBAIC03NjksMTYgJiM0Mzs4MTUsMTUgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgUlhSUENfQ01EX1NFTkRfREFUQToKLQkJcmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCwgJmFtcDtkcm9wcGVkX2xvY2spOwotCQlicmVhazsKJiM0MzsJCXJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwpOwomIzQzOwkJZ290byBlcnJvcl9wdXQ7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQogCiBvdXRfcHV0X3VubG9jazoKLQlpZiAoIWRyb3BwZWRfbG9jaykKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogZXJyb3JfcHV0OgogCXJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpOwogCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7CkBAIC04MDAsMTUgJiM0Mzs4NDUsMjEgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAgKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHNlbmQgZGF0YSBvbiBhIGNhbGwuICBUaGUgY2FsbCBtdXN0IGJlIGluIGFuIHN0YXRlCiAgKiBhcHByb3ByaWF0ZSB0byBzZW5kaW5nIGRhdGEuICBObyBjb250cm9sIGRhdGEgc2hvdWxkIGJlIHN1cHBsaWVkIGluIEBtc2csCiAgKiBub3Igc2hvdWxkIGFuIGFkZHJlc3MgYmUgc3VwcGxpZWQuICBNU0dfTU9SRSBzaG91bGQgYmUgZmxhZ2dlZCBpZiB0aGVyZSYjMzk7cwotICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZS4KJiM0MzsgKiBtb3JlIGRhdGEgdG8gY29tZSwgb3RoZXJ3aXNlIHRoaXMgZGF0YSB3aWxsIGVuZCB0aGUgdHJhbnNtaXNzaW9uIHBoYXNlIGlmCiYjNDM7ICogYWxsIHRoZSBkYXRhIGlzIGJ1ZmZlcmVkLgomIzQzOyAqCiYjNDM7ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBhIHNob3J0IHNlbmQsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJlCiYjNDM7ICogY2FsbGVkIGFnYWluIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBkYXRhIG9yIHRvIHBpY2sgdXAgYW4gZXJyb3IgdGhhdAomIzQzOyAqIGNhdXNlZCB0aGUgc2hvcnQgc2VuZC4KICAqCi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGJ1ZmZlcmVkIChjb3VsZCBiZSAlMCBpZiBAbGVuIGlzIDAgb3IKJiM0MzsgKiBtc2dfaXRlciBob2xkcyAwIGJ5dGVzKSBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKiBvdGhlcndpc2UuCiAgKi8KIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQkJICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpCiB7Ci0JYm9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJX2VudGVyKCYjMzQ7eyVkfSwmIzM0OywgY2FsbC0mZ3Q7ZGVidWdfaWQpOwpAQCAtODE5LDEyICYjNDM7ODcwLDEwIEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCW11dGV4X2xvY2soJmFtcDtjYWxsLSZndDt1c2VyX211dGV4KTsKIAogCXJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLSZndDtzayksIGNhbGwsIG1zZywgbGVuLAotCQkJICAgICAgbm90aWZ5X2VuZF90eCwgJmFtcDtkcm9wcGVkX2xvY2spOwomIzQzOwkJCSAgICAgIG5vdGlmeV9lbmRfdHgpOwogCWlmIChyZXQgPT0gLUVTSFVURE9XTikKIAkJcmV0ID0gY2FsbC0mZ3Q7ZXJyb3I7CiAKLQlpZiAoIWRyb3BwZWRfbG9jaykKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEzNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBSWFJQQyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZnV6ei13b3J0aHksIHdoYXQgdGhlIGlkZWFsIGNvbmZpZ3VyYXRpb24gbG9va3MgbGlrZSwgYW5kIHdoYXQgc3ltYm9scyB3ZSBzaG91bGQgdGFyZ2V0LiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc2NvcGUgb2YgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHdlIGhhdmU6CgoxLiAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBub3QgdGVycmlibHkgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGJ1dCBnb29kIHRvIGtub3cgdGhleSYjMzk7cmUgdGhlcmUuCjIuICBBIGJ1ZmZlciBzaXplIGZpeCBpbiBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyB0YXJnZXQsIHNvIHdlJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGZvciBjb3ZlcmFnZS4KMy4gIFNvbWUgc2VydmVyIGFzc2lnbm1lbnQgdXBkYXRlcyBpbiBgYWZzX21ha2Vfb3BfY2FsbGAuCjQuICBTaWduaWZpY2FudCBjaGFuZ2VzIGluIHRoZSBSWFJQQyBjb2RlOiBgYWZzX21ha2VfY2FsbGAsIGBhZnNfc2VuZF9lbXB0eV9yZXBseWAsIGFuZCBgYWZzX3NlbmRfc2ltcGxlX3JlcGx5YCBhbGwgaGF2ZSBuZXcgbG9vcHMgYXJvdW5kIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCB3aXRoIHVwZGF0ZWQgZXJyb3IgaGFuZGxpbmcuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJ1Z3MgbGllLCBlc3BlY2lhbGx5IGFyb3VuZCBlcnJvciBjb25kaXRpb25zLgo1LiAgVHJhY2Vwb2ludCBhZGRpdGlvbnMuIFVzZWZ1bCBmb3IgZGVidWdnaW5nIGJ1dCBub3QgZGlyZWN0bHkgZnV6ei1yZWxldmFudC4KNi4gIERlY2xhcmF0aW9ucyBhbmQgZmxhZ3MgaW4gYGFyLWludGVybmFsLmhgLCBpbmNsdWRpbmcgYFJYUlBDX0NBTExfVFhfRVJST1JgLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBlcnJvciBmbGFncy4KNy4gIFVwZGF0ZXMgdG8gY2FsbCBzdGF0ZSBtYW5hZ2VtZW50IGluIGBjYWxsX3N0YXRlLmNgLgo4LiAgQSBjb25uZWN0aW9uIHBva2luZyBvcGVyYXRpb24gdXNpbmcgYHJ4cnBjX2dldF9jb25uZWN0aW9uX21heWJlYC4KOS4gIENyeXB0byB2YWxpZGF0aW9uIGluIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgLCBub3cgdmFsaWRhdGluZyB0aGUgY3J5cHRvIGVuY3R5cGUuIFRoaXMgaXMgaW50cmlndWluZywgbWlnaHQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nIGNyeXB0by1yZWxhdGVkIGJ1Z3MuCjEwLiBSZXF1ZXVlIGFuZCByZWNlaXZlIG1lc3NhZ2UgaGFuZGxpbmcuCjExLiBTZWN1cml0eSBsb2NraW5nIGluIGByeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eWAuCjEyLiBMb29waW5nIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCBpbiBgcnhwZXJmX3Byb2Nlc3NfY2FsbGAuCjEzLiBUaGUgYmlnIG9uZTogYHNlbmRtc2cuY2AuIE1ham9yIHJld3JpdGUgb2Ygc2VuZCBsb2dpYywgZm9jdXNpbmcgb24gZXJyb3IgaGFuZGxpbmcsIGxlbmd0aCBjaGVja3MsIGFuZCBsb2NraW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSB0YXJnZXQuIFRoZSB1c2Ugb2YgYFJYUlBDX0NBTExfVFhfRVJST1JgLCBgbXNnX2RhdGFfbGVmdGAsIGBjb3B5X2Zyb21faXRlcl9mdWxsYCwgYG1pbjNgLCBhbmQgYHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvd2AgYWxsIGluZGljYXRlIGNvbXBsZXggbG9naWMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gd2UgcmVhY2ggdGhlc2UgY2hhbmdlcyBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gVGhhbmtmdWxseSwgQUZcX1JYUlBDIGlzIGEgbmV0d29yayBzb2NrZXQgZmFtaWx5LCBhbmQgQUZTIGlzIGFuIGluLWtlcm5lbCBmaWxlc3lzdGVtLiBTeXprYWxsZXIgcmVndWxhcmx5IGZ1enpleiBBRlxfUlhSUEMsIGFuZCB3ZSBoYXZlIGluLWtlcm5lbCBmaWxlc3lzdGVtcyB0aGF0IG1ha2UgdXNlIG9mIHRoZSBwcm90b2NvbC4gV2UgY2FuIGFjY2VzcyBBRlxfUlhSUEMgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscywgYW5kIGtleSByaW5nIG9wZXJhdGlvbnMgYXJlIGFsc28gYWNjZXNzaWJsZS4gVGhpcyBpcyAqKmhlYXZpbHkqKiByZWFjaGFibGUgY29kZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW1zIHN1YnN5c3RlbXMsIG1ha2luZyBgV29ydGhGdXp6aW5nYCBhIHJlc291bmRpbmcgYHRydWVgLgoKTm93LCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGRldGVybWluZSB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIEFGXF9SWFJQQywgQUZTLCBSWEdLLCBhbmQgY3J5cHRvXF9rcmI1IChqdXN0IGluIGNhc2UgdGhleSYjMzk7cmUgcmVsZXZhbnQpLiBMZXQmIzM5O3MgbmFpbCBkb3duIHRob3NlIGNvbmZpZ3VyYXRpb25zIHNvIHdlIGNhbiBvcHRpbWl6ZSBvdXIgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIChBRl9SWFJQQ3xBRlNfRlN8UlhHSykmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcnhycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9LY29uZmlnLTUtXG5uZXQvcnhycGMvS2NvbmZpZzo2OmNvbmZpZyBBRl9SWFJQQ1xubmV0L3J4cnBjL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1J4UlBDIHNlc3Npb24gc29ja2V0c1wmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnPTI1PWlmIEFGX1JYUlBDXG5uZXQvcnhycGMvS2NvbmZpZy0yNi1cbm5ldC9yeHJwYy9LY29uZmlnOjI3OmNvbmZpZyBBRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBSeFJQQ1wmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTMzLVxubmV0L3J4cnBjL0tjb25maWc6MzQ6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXG5uZXQvcnhycGMvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7SW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVwmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTM5LVxubmV0L3J4cnBjL0tjb25maWc6NDA6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL0tjb25maWctNDEtXHRib29sIFwmIzM0O0luamVjdCBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb25cJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy00OS1cbm5ldC9yeHJwYy9LY29uZmlnOjUwOmNvbmZpZyBBRl9SWFJQQ19ERUJVR1xubmV0L3J4cnBjL0tjb25maWctNTEtXHRib29sIFwmIzM0O1J4UlBDIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWc9NTg9Y29uZmlnIFJYS0FEXG4tLVxubmV0L3J4cnBjL0tjb25maWctNjUtXG5uZXQvcnhycGMvS2NvbmZpZzo2Njpjb25maWcgUlhHS1xubmV0L3J4cnBjL0tjb25maWctNjctXHRib29sIFwmIzM0O1J4UlBDIEdTU0FQSSBzZWN1cml0eVwmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnPTg5PWNvbmZpZyBSWFBFUkZcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cbm5ldC9yeHJwYy9LY29uZmlnOjk2OmNvbmZpZyBBRl9SWFJQQ19LVU5JVF9URVNUXG5uZXQvcnhycGMvS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O1J4UlBDIGNyeXB0byBLVW5pdCB0ZXN0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGVzZSBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBvdXQgdGhlIGBmcy9hZnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBlbmFibGVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBvcHRpb25zIGludGVycmVsYXRlIHdpdGhpbiB0aGUgQUZTIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uLiBUaGVuLCBJIHNob3VsZCBoZWFkIG92ZXIgdG8gYG5ldC9yeHJwYy9LY29uZmlnYCBhbmQgcmVwZWF0IHRoZSBwcm9jZXNzIGZvciB0aGUgUnhSUEMgbmV0d29yayBwcm90b2NvbC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHR3byBhcmVhcywgaWYgdGhlcmUgYXJlIGFueSwgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkIGFuZCB0aGF0IHRoZSBvdmVyYWxsIGJ1aWxkIGlzIGNsZWFuLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBrZXJuZWwgbW9kdWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEFGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IEFGX1JYUlBDXG4gICA2Olx0XHRzZWxlY3QgRE5TX1JFU09MVkVSXG4gICA3Olx0XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19LUkI1XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBnZXQgYW4gZXhwZXJpbWVudGFsIEFuZHJldyBGaWxlIFN5c3RlbVxuICAxMTpcdFx0ICBkcml2ZXIuIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVuc2VjdXJlZCByZWFkLW9ubHkgQUZTIGFjY2Vzcy5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBBRlNfREVCVUdcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7QUZTIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAyMDpcdFx0aGVscFxuICAyMTpcdFx0ICBTYXkgWSBoZXJlIHRvIG1ha2UgcnVudGltZSBjb250cm9sbGFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIGFwcGVhci5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAyNDpcdFxuICAyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBBRlNfRlNDQUNIRVxuICAyODpcdFx0Ym9vbCBcJiMzNDtQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4gIDI5Olx0XHRkZXBlbmRzIG9uIEFGU19GUz1tIFx1MDAyNlx1MDAyNiBGU0NBQ0hFIHx8IEFGU19GUz15IFx1MDAyNlx1MDAyNiBGU0NBQ0hFPXlcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBBRlMgZGF0YSB0byBiZSBjYWNoZWQgbG9jYWxseSBvbiBkaXNrIHRocm91Z2hcbiAgMzI6XHRcdCAgdGhlIGdlbmVyaWMgZmlsZXN5c3RlbSBjYWNoZSBtYW5hZ2VyXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIEFGU19ERUJVR19DVVJTT1JcbiAgMzU6XHRcdGJvb2wgXCYjMzQ7QUZTIHNlcnZlciBjdXJzb3IgZGVidWdnaW5nXCYjMzQ7XG4gIDM2Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAzNzpcdFx0aGVscFxuICAzODpcdFx0ICBTYXkgWSBoZXJlIHRvIGNhdXNlIHRoZSBjb250ZW50cyBvZiBhIHNlcnZlciBjdXJzb3IgdG8gYmUgZHVtcGVkIHRvXG4gIDM5Olx0XHQgIHRoZSBkbWVzZyBsb2cgaWYgdGhlIHNlcnZlciByb3RhdGlvbiBhbGdvcml0aG0gZmFpbHMgdG8gc3VjY2Vzc2Z1bGx5XG4gIDQwOlx0XHQgIGNvbnRhY3QgYSBzZXJ2ZXIuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgNDM6XHRcbiAgNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIFJYUlBDIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgUlhHSywgUlhQRVJGLCBhbmQgQUZfUlhSUEMuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L3J4cnBjL0tjb25maWdgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsYXRpb25zaGlwcyBkZWZpbmVkIHRoZXJlIHRvIHNlZSB3aGljaCBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZXNlIHBpZWNlcyB0byBiZSBlbmFibGVkLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGJ1aWxkIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGFyZS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGFuZCBJIGNhbiBxdWlja2x5IG1hcCB0aGUgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0aGVyZSBtaWdodCBiZSBzb21lIGludGVycGxheSBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cywgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgY29ubmVjdGVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFJ4UlBDIHNlc3Npb24gc29ja2V0c1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgQUZfUlhSUENcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1J4UlBDIHNlc3Npb24gc29ja2V0c1wmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9ERVMgaWYgUlhLQURcbiAgMTE6XHRcdHNlbGVjdCBLRVlTXG4gIDEyOlx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgU2F5IFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzIChqdXN0XG4gIDE1Olx0XHQgIHRoZSB0cmFuc3BvcnQgcGFydCwgbm90IHRoZSBwcmVzZW50YXRpb24gcGFydDogKHVuKW1hcnNoYWxsaW5nIGlzXG4gIDE2Olx0XHQgIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uKS5cbiAgMTc6XHRcbiAgMTg6XHRcdCAgVGhlc2UgYXJlIHVzZWQgZm9yIEFGUyBrZXJuZWwgZmlsZXN5c3RlbSBhbmQgdXNlcnNwYWNlIHV0aWxpdGllcy5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgVGhpcyBtb2R1bGUgYXQgdGhlIG1vbWVudCBvbmx5IHN1cHBvcnRzIGNsaWVudCBvcGVyYXRpb25zIGFuZCBpc1xuICAyMTpcdFx0ICBjdXJyZW50bHkgaW5jb21wbGV0ZS5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXG4gIDI0Olx0XG4gIDI1Olx0aWYgQUZfUlhSUENcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQUZfUlhSUENfSVBWNlxuICAyODpcdFx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXCYjMzQ7XG4gIDI5Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBBRl9SWFJQQyB0byB1c2UgSVBWNiBVRFAgYXMgd2VsbCBhcyBJUFY0IFVEUCBhc1xuICAzMjpcdFx0ICBpdHMgbmV0d29yayB0cmFuc3BvcnQuXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXG4gIDM1Olx0XHRib29sIFwmIzM0O0luamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cJiMzNDtcbiAgMzY6XHRcdGhlbHBcbiAgMzc6XHRcdCAgU2F5IFkgaGVyZSB0byBpbmplY3QgcGFja2V0IGxvc3MgYnkgZGlzY2FyZGluZyBzb21lIHJlY2VpdmVkIGFuZCBzb21lXG4gIDM4Olx0XHQgIHRyYW5zbWl0dGVkIHBhY2tldHMuXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxuICA0MTpcdFx0Ym9vbCBcJiMzNDtJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXCYjMzQ7XG4gIDQyOlx0XHRkZXBlbmRzIG9uIFNZU0NUTFxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBTYXkgWSBoZXJlIHRvIGluamVjdCBhIGRlbGF5IGludG8gcGFja2V0IHJlY2VwdGlvbiwgYWxsb3dpbmcgYW5cbiAgNDU6XHRcdCAgZXh0ZW5kZWQgUlRUIHRpbWUgdG8gYmUgbW9kZWxsZWQuICBUaGUgZGVsYXkgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmdcbiAgNDY6XHRcdCAgL3Byb2Mvc3lzL25ldC9yeHJwYy9yeHJwY19pbmplY3RfcnhfZGVsYXksIHNldHRpbmcgYSBudW1iZXIgb2ZcbiAgNDc6XHRcdCAgbWlsbGlzZWNvbmRzIHVwIHRvIDAuNXMgKG5vdGUgdGhhdCB0aGUgZ3JhbnVsYXJpdHkgaXMgYWN0dWFsbHkgaW5cbiAgNDg6XHRcdCAgamlmZmllcykuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIEFGX1JYUlBDX0RFQlVHXG4gIDUxOlx0XHRib29sIFwmIzM0O1J4UlBDIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFNheSBZIGhlcmUgdG8gbWFrZSBydW50aW1lIGNvbnRyb2xsYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXBwZWFyLlxuICA1NDpcdFxuICA1NTpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cbiAgNTY6XHRcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgUlhLQURcbiAgNTk6XHRcdGJvb2wgXCYjMzQ7UnhSUEMgS2VyYmVyb3Mgc2VjdXJpdHlcJiMzNDtcbiAgNjA6XHRcdGhlbHBcbiAgNjE6XHRcdCAgUHJvdmlkZSBrZXJiZXJvcyA0IGFuZCBBRlMga2FzZXJ2ZXIgc2VjdXJpdHkgaGFuZGxpbmcgZm9yIEFGX1JYUlBDXG4gIDYyOlx0XHQgIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUga2V5IHJldGVudGlvbiBzZXJ2aWNlLlxuICA2MzpcdFxuICA2NDpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgUlhHS1xuICA2NzpcdFx0Ym9vbCBcJiMzNDtSeFJQQyBHU1NBUEkgc2VjdXJpdHlcJiMzNDtcbiAgNjg6XHRcdHNlbGVjdCBDUllQVE9fS1JCNVxuICA2OTpcdFx0c2VsZWN0IENSWVBUT19NQU5BR0VSXG4gIDcwOlx0XHRzZWxlY3QgQ1JZUFRPX0tSQjVFTkNcbiAgNzE6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICA3MjpcdFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxuICA3MzpcdFx0c2VsZWN0IENSWVBUT19IQVNIX0lORk9cbiAgNzQ6XHRcdHNlbGVjdCBDUllQVE9fSE1BQ1xuICA3NTpcdFx0c2VsZWN0IENSWVBUT19DTUFDXG4gIDc2Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTFcbiAgNzc6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2XG4gIDc4Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTUxMlxuICA3OTpcdFx0c2VsZWN0IENSWVBUT19DQkNcbiAgODA6XHRcdHNlbGVjdCBDUllQVE9fQ1RTXG4gIDgxOlx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICA4MjpcdFx0c2VsZWN0IENSWVBUT19DQU1FTExJQVxuICA4MzpcdFx0aGVscFxuICA4NDpcdFx0ICBQcm92aWRlIHRoZSBHU1NBUEktYmFzZWQgUnhHSyBzZWN1cml0eSBjbGFzcyBmb3IgQUZTLiAgS2V5cyBhcmUgYWRkZWRcbiAgODU6XHRcdCAgd2l0aCBhZGRfa2V5KCkuXG4gIDg2Olx0XG4gIDg3Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LlxuICA4ODpcdFxuICA4OTpcdGNvbmZpZyBSWFBFUkZcbiAgOTA6XHRcdHRyaXN0YXRlIFwmIzM0O1J4UlBDIHRlc3Qgc2VydmljZVwmIzM0O1xuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBQcm92aWRlIGFuIHJ4cGVyZiBzZXJ2aWNlIHRlc3Rlci4gIFRoaXMgbGlzdGVucyBvbiBVRFAgcG9ydCA3MDA5IGZvclxuICA5MzpcdFx0ICBpbmNvbWluZyBjYWxscyBmcm9tIHRoZSByeHBlcmYgcHJvZ3JhbSAoYW4gZXhhbXBsZSBvZiB3aGljaCBjYW4gYmVcbiAgOTQ6XHRcdCAgZm91bmQgaW4gT3BlbkFGUykuXG4gIDk1Olx0XG4gIDk2Olx0Y29uZmlnIEFGX1JYUlBDX0tVTklUX1RFU1RcbiAgOTc6XHRcdHRyaXN0YXRlIFwmIzM0O1J4UlBDIGNyeXB0byBLVW5pdCB0ZXN0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgOTg6XHRcdGRlcGVuZHMgb24gS1VOSVQgXHUwMDI2XHUwMDI2IFJYS0FEXG4gIDk5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuIDEwMDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyZWFkdGggb2YgaXRzIGltcGFjdCBiZWZvcmUgSSBkaWcgaW4uIFRoZSBpbml0aWFsIGluZGljYXRvcnMgYXJlIHBvaW50aW5nIHRvIGEgZmV3IGtleSBhcmVhcyB0aGF0IGFyZSBnb2luZyB0byBkZW1hbmQgbXkgYXR0ZW50aW9uOgoKKiAgICoqYEFGX1JYUlBDYDoqKiBUaGlzIGlzIHRoZSBjb3JlIFJ4UlBDIHByb3RvY29sLCBhbmQgdGhlIHBhdGNoIGhhcyBsYW5kZWQgaW4gc2V2ZXJhbCBmaWxlcyB3aXRoaW4gaXRzIGltcGxlbWVudGF0aW9uOiBgc2VuZG1zZy5jYCwgYGNhbGxfc3RhdGUuY2AsIGBjb25uX29iamVjdC5jYCwgYGtleS5jYCwgYW5kIGByZWN2bXNnLmNgLiBUaGF0JiMzOTtzIGEgbG90IG9mIHRoZSBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aG9zZSBtZXNzYWdlIGludGVyYWN0aW9ucywgY2FsbCBzdGF0ZSBtYW5hZ2VtZW50LCBjb25uZWN0aW9uIG9iamVjdHMgYW5kIGtleSBoYW5kbGluZywgYW5kIHRoZSByZWNlaXZlIHNpZGUgYXJlIGJlaW5nIGFmZmVjdGVkLgoKKiAgICoqYEFGU19GU2A6KiogVGhlIGBmcy9hZnMvYCBkaXJlY3RvcnkgaXMgYW5vdGhlciBjcml0aWNhbCBzaWduYWwuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoJiMzOTtzIHRvdWNoIHRvIGBjbV9zZWN1cml0eS5jYCwgYGludGVybmFsLmhgLCBhbmQgYHJ4cnBjLmNgIG1heSByZWxhdGUgdG8gdGhlIEFGUyBmaWxlc3l0ZW0mIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUlBDIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gc2VlIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSB1bmRlcmx5aW5nIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gb3IgdGhlIGludGVyYWN0aW9ucyB3aXRoIEFGUyBjbGllbnQgdG9vbHMuCgoqICAgKipgUlhHS2A6KiogVGhlIGBSWEdLYCBmaWxlcyB3aXRoaW4gYG5ldC9yeHJwYy9gIGFyZSBhIHNpZ25hbCBhcyB3ZWxsLiBJdCBsb29rcyBsaWtlIGByeGdrLmNgLCB0aGUga2V5aW5nIGltcGxlbWVudGF0aW9ucyBhcmUgZ2V0dGluZyBhbiB1cGRhdGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgIGJlY2F1c2UgaXQgbWF5IGludm9sdmUgaG93IHRoZSBSUEMgYW5kIFJYR0sgd29yayB3aXRoIGFuIG91dHNpZGUgYXBwbGljYXRpb24gbGF5ZXIuCgoqICAgKipgUlhQRVJGYDoqKiBUaGUgYHJ4cGVyZi5jYCBmaWxlIGlzIGdvb2QgYXMgd2VsbC4gSXQgbWF5IGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9uIFJYUlBDLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yaWVzLCBuYW1lbHkgYG5ldC9yeHJwYy9gIGFuZCBgZnMvYWZzL2AsIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3J4cnBjL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBMaW51eCBrZXJuZWwgUnhSUENcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKSAmIzQzOz0gcnhycGMub1xuICAgNzpcdFxuICAgODpcdHJ4cnBjLXkgOj0gXFxcbiAgIDk6XHRcdGFmX3J4cnBjLm8gXFxcbiAgMTA6XHRcdGNhbGxfYWNjZXB0Lm8gXFxcbiAgMTE6XHRcdGNhbGxfZXZlbnQubyBcXFxuICAxMjpcdFx0Y2FsbF9vYmplY3QubyBcXFxuICAxMzpcdFx0Y2FsbF9zdGF0ZS5vIFxcXG4gIDE0Olx0XHRjb25uX2NsaWVudC5vIFxcXG4gIDE1Olx0XHRjb25uX2V2ZW50Lm8gXFxcbiAgMTY6XHRcdGNvbm5fb2JqZWN0Lm8gXFxcbiAgMTc6XHRcdGNvbm5fc2VydmljZS5vIFxcXG4gIDE4Olx0XHRpbnB1dC5vIFxcXG4gIDE5Olx0XHRpbnB1dF9yYWNrLm8gXFxcbiAgMjA6XHRcdGluc2VjdXJlLm8gXFxcbiAgMjE6XHRcdGlvX3RocmVhZC5vIFxcXG4gIDIyOlx0XHRrZXkubyBcXFxuICAyMzpcdFx0bG9jYWxfZXZlbnQubyBcXFxuICAyNDpcdFx0bG9jYWxfb2JqZWN0Lm8gXFxcbiAgMjU6XHRcdG1pc2MubyBcXFxuICAyNjpcdFx0bmV0X25zLm8gXFxcbiAgMjc6XHRcdG9vYi5vIFxcXG4gIDI4Olx0XHRvdXRwdXQubyBcXFxuICAyOTpcdFx0cGVlcl9ldmVudC5vIFxcXG4gIDMwOlx0XHRwZWVyX29iamVjdC5vIFxcXG4gIDMxOlx0XHRyZWN2bXNnLm8gXFxcbiAgMzI6XHRcdHJ0dC5vIFxcXG4gIDMzOlx0XHRzZWN1cml0eS5vIFxcXG4gIDM0Olx0XHRzZW5kbXNnLm8gXFxcbiAgMzU6XHRcdHNlcnZlcl9rZXkubyBcXFxuICAzNjpcdFx0c2tidWZmLm8gXFxcbiAgMzc6XHRcdHR4YnVmLm8gXFxcbiAgMzg6XHRcdHV0aWxzLm9cbiAgMzk6XHRcbiAgNDA6XHRyeHJwYy0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgQmFjayBpbnRvIHRoZSBgbmV0L3J4cnBjL01ha2VmaWxlYCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYWRkcmVzc2VkIHRoYXQgaW5pdGlhbCBpc3N1ZSwgYnV0IHRoZXJlJiMzOTtzIGFsd2F5cyBtb3JlIGx1cmtpbmcuIFRpbWUgdG8gZ2V0IGJhY2sgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBuZXQvcnhycGMvTWFrZWZpbGVgLiBXZSBjYW4mIzM5O3QganVzdCBmaXggb25lIHRoaW5nIGFuZCBjYWxsIGl0IGEgZGF5LCBub3QgaW4gYSBjb21wbGV4IHN5c3RlbSBsaWtlIHRoaXMuIEl0JiMzOTtzIHRpbWUgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhlIHJlc3Qgb2YgaXQuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgc3BvdHRpbmcgb2J2aW91cyBlcnJvcnM7IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZCBmbGFncywgdGhlIGxpbmtpbmcgcHJvY2Vzcy4uLiBldmVyeXRoaW5nLiBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBjYXVzZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgd2UgY2FuIGltcGxlbWVudD8gQW55IHJlZHVuZGFuY2llcyB3ZSBjYW4gZWxpbWluYXRlPyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFyZWFzIHdoZXJlIGZ1dHVyZSBjaGFuZ2VzIGNvdWxkIGludHJvZHVjZSByZWdyZXNzaW9ucywgb3Igb3Bwb3J0dW5pdGllcyB0byBpbXByb3ZlIGJ1aWxkIHBlcmZvcm1hbmNlLiBJdCYjMzk7cyBhIGNvbXByZWhlbnNpdmUgYXVkaXQsIGVuc3VyaW5nIHRoaXMgY3JpdGljYWwgcGllY2Ugb2Ygb3VyIGluZnJhc3RydWN0dXJlIGlzIGFzIHJvYnVzdCBhbmQgZWZmaWNpZW50IGFzIHBvc3NpYmxlLiBUaGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMsIGFuZCBJIGludGVuZCB0byBmaW5kIGhpbS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQxOlx0cnhycGMtJChDT05GSUdfUlhLQUQpICYjNDM7PSByeGthZC5vIGZjcnlwdC5vXG4gIDQyOlx0cnhycGMtJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsLm9cbiAgNDM6XHRyeHJwYy0kKENPTkZJR19SWEdLKSAmIzQzOz0gXFxcbiAgNDQ6XHRcdHJ4Z2subyBcXFxuICA0NTpcdFx0cnhna19hcHAubyBcXFxuICA0NjpcdFx0cnhna19rZGYub1xuICA0NzpcdFxuICA0ODpcdG9iai0kKENPTkZJR19SWFBFUkYpICYjNDM7PSByeHBlcmYub1xuICA0OTpcdG9iai0kKENPTkZJR19LVU5JVCkgJiM0Mzs9IHRlc3RzL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDExNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQ6CgoqKkluaXRpYWwgQ2hlY2twb2ludDogRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gTGFuZHNjYXBlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgcHJvYmxlbSYjMzk7cyBsaWtlbHkgZmlsZXN5c3RlbS1yZWxhdGVkLCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBmcy9hZnMvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBBRlMtc3BlY2lmaWMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGxpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBBRlMgaXMgYmVpbmcgYnVpbHQsIGxpbmtlZCwgYW5kIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGBNYWtlZmlsZWAgd2lsbCByZXZlYWwgdGhlIGtleSBjb21wb25lbnRzOiBvYmplY3QgZmlsZXMsIGxpYnJhcmllcywgaW5jbHVkZSBwYXRocywgYW55IHNwZWNpYWwgZmxhZ3Mgb3IgZGVmaW5lcyBzcGVjaWZpYyB0byB0aGUgQUZTIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZXNlIHdpbGwgZ2V0IG1lIG9uZSBzdGVwIGNsb3NlciB0byBpc29sYXRpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYnVpbGQgc3RyYXRlZ3kuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBtaXNjb25maWd1cmF0aW9ucywgbWlzc2luZyBkZXBlbmRlbmNpZXMsIG9yIGNvbmZsaWN0aW5nIGZsYWdzIHRoYXQgbWlnaHQgYmUgY29udHJpYnV0aW5nIHRvIHRoZSBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgUmVkIEhhdCBMaW51eCBBRlMgY2xpZW50LlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRrYWZzLXkgOj0gXFxcbiAgIDc6XHRcdGFkZHJfbGlzdC5vIFxcXG4gICA4Olx0XHRhZGRyX3ByZWZzLm8gXFxcbiAgIDk6XHRcdGNhbGxiYWNrLm8gXFxcbiAgMTA6XHRcdGNlbGwubyBcXFxuICAxMTpcdFx0Y21fc2VjdXJpdHkubyBcXFxuICAxMjpcdFx0Y21zZXJ2aWNlLm8gXFxcbiAgMTM6XHRcdGRpci5vIFxcXG4gIDE0Olx0XHRkaXJfZWRpdC5vIFxcXG4gIDE1Olx0XHRkaXJfc2VhcmNoLm8gXFxcbiAgMTY6XHRcdGRpcl9zaWxseS5vIFxcXG4gIDE3Olx0XHRkeW5yb290Lm8gXFxcbiAgMTg6XHRcdGZpbGUubyBcXFxuICAxOTpcdFx0ZmxvY2subyBcXFxuICAyMDpcdFx0ZnNjbGllbnQubyBcXFxuICAyMTpcdFx0ZnNfb3BlcmF0aW9uLm8gXFxcbiAgMjI6XHRcdGZzX3Byb2JlLm8gXFxcbiAgMjM6XHRcdGlub2RlLm8gXFxcbiAgMjQ6XHRcdG1haW4ubyBcXFxuICAyNTpcdFx0bWlzYy5vIFxcXG4gIDI2Olx0XHRtbnRwdC5vIFxcXG4gIDI3Olx0XHRyb3RhdGUubyBcXFxuICAyODpcdFx0cnhycGMubyBcXFxuICAyOTpcdFx0c2VjdXJpdHkubyBcXFxuICAzMDpcdFx0c2VydmVyLm8gXFxcbiAgMzE6XHRcdHNlcnZlcl9saXN0Lm8gXFxcbiAgMzI6XHRcdHN1cGVyLm8gXFxcbiAgMzM6XHRcdHN5bWxpbmsubyBcXFxuICAzNDpcdFx0dmFsaWRhdGlvbi5vIFxcXG4gIDM1Olx0XHR2bGNsaWVudC5vIFxcXG4gIDM2Olx0XHR2bF9hbGlhcy5vIFxcXG4gIDM3Olx0XHR2bF9saXN0Lm8gXFxcbiAgMzg6XHRcdHZsX3Byb2JlLm8gXFxcbiAgMzk6XHRcdHZsX3JvdGF0ZS5vIFxcXG4gIDQwOlx0XHR2b2x1bWUubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc5OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGBmcy9hZnMvTWFrZWZpbGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlIGBmcy9hZnMvTWFrZWZpbGVgIGZpbGUsIHNwZWNpZmljYWxseSBhZnRlciBsaW5lIDQwLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW4gdGhlcmUgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhhdCBzZWN0aW9uLiBJdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIGEgcGFydGljdWxhciBidWlsZCB0YXJnZXQsIGRlcGVuZGVuY3kgZGVjbGFyYXRpb24sIG9yIHBlcmhhcHMgc29tZSBjb25maWd1cmF0aW9uIGxvZ2ljLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsYXRpb24gcHJvY2VzcywgbGlua2VyIGZsYWdzLCBvciBtYXliZSBldmVuIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvZiBzb3VyY2UgZmlsZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCB3aGF0IGV4YWN0bHkgdGhlIGtlcm5lbCBpcyBkb2luZyB3aXRoIEFGUyBhdCB0aGF0IHBvaW50LCBsaWtlIHdoZXJlIGl0IGlzIGNvbXBpbGluZyBpdCBpbiBvciBwZXJoYXBzIHdoaWNoIHBhcnQgb2YgQUZTIGlzIGJlaW5nIGJ1aWx0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQxOlx0XHR3cml0ZS5vIFxcXG4gIDQyOlx0XHR4YXR0ci5vIFxcXG4gIDQzOlx0XHR5ZnNjbGllbnQub1xuICA0NDpcdFxuICA0NTpcdGthZnMtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICA0NjpcdG9iai0kKENPTkZJR19BRlNfRlMpICA6PSBrYWZzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMDkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyYCBhbmQgYGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZWAuIFRoZXkmIzM5O3JlIGNsZWFybHkgcmVsYXRlZCwgYW5kIEkgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhleSBmdW5jdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogKipXaGVyZSBhcmUgdGhlc2UgdHdvIGZ1bmN0aW9ucyBkZWZpbmVkLCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHBhcmFtZXRlcnMgdWx0aW1hdGVseSBjb250cm9sIHRoZWlyIGJlaGF2aW9yIG9yIGluY2x1c2lvbj8qKiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgc291cmNlIGZpbGVzIGFuZCBhbnkgcmVsZXZhbnQgYCNpZmRlZmAgYmxvY2tzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBidWlsdCBpbnRvIHRoZSBmaW5hbCBleGVjdXRhYmxlLiBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGNyeXB0b2dyYXBoaWMgY29uZmlndXJhdGlvbiBhbmQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBkaWZmZXJlbnQgZW5jcnlwdGlvbiB0eXBlcyBpbiBLZXJiZXJvcy4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbnMgYW5kIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgc28gSSBjYW4gZm9ybSBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIHBpZWNlcyBmaXQgaW50byB0aGUgYnJvYWRlciBzZWN1cml0eSBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2NyeXB0by9rcmI1LnJzdD0xMDI9VGhlIGVuY29kaW5nIHR5cGUgaXMgbG9va2VkIHVwIGJ5IG51bWJlciB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOjpcbkRvY3VtZW50YXRpb24vY3J5cHRvL2tyYjUucnN0LTEwMy1cbkRvY3VtZW50YXRpb24vY3J5cHRvL2tyYjUucnN0OjEwNDpcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh1MzIgZW5jdHlwZSk7XG5Eb2N1bWVudGF0aW9uL2NyeXB0by9rcmI1LnJzdC0xMDUtXG4tLVxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYz0xOT1zdGF0aWMgY29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY29uc3Qga3JiNV9zdXBwb3J0ZWRfZW5jdHlwZXNbXSA9IHtcbi0tXG5jcnlwdG8va3JiNS9rcmI1X2FwaS5jLTI4LS8qKlxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYzoyOTogKiBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUgLSBGaW5kIHRoZSBoYW5kbGVyIGZvciBhIEtlcmJlcm9zNSBlbmNyeXB0aW9uIHR5cGVcbmNyeXB0by9rcmI1L2tyYjVfYXBpLmMtMzAtICogQGVuY3R5cGU6IFRoZSBzdGFuZGFyZCBLZXJiZXJvcyBlbmNyeXB0aW9uIHR5cGUgbnVtYmVyXG4tLVxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy0zNC0gKi9cbmNyeXB0by9rcmI1L2tyYjVfYXBpLmM6MzU6Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHUzMiBlbmN0eXBlKVxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy0zNi17XG4tLVxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy00Ny19XG5jcnlwdG8va3JiNS9rcmI1X2FwaS5jOjQ4OkVYUE9SVF9TWU1CT0woY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKTtcbmNyeXB0by9rcmI1L2tyYjVfYXBpLmMtNDktXG4tLVxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYz0xMTg9c3RhdGljIGludCBrcmI1X3Rlc3Rfb25lX3ByZihjb25zdCBzdHJ1Y3Qga3JiNV9wcmZfdGVzdCAqdGVzdClcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMTE5LXtcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmM6MTIwOlx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh0ZXN0LVx1MDAzZWV0eXBlKTtcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMTIxLVx0c3RydWN0IGtyYjVfYnVmZmVyIGtleSA9IHt9LCBvY3RldCA9IHt9LCByZXN1bHQgPSB7fSwgcHJmID0ge307XG4tLVxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYz0yMTA9c3RhdGljIGludCBrcmI1X3Rlc3Rfb25lX2tleShjb25zdCBzdHJ1Y3Qga3JiNV9rZXlfdGVzdCAqdGVzdClcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMjExLXtcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmM6MjEyOlx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh0ZXN0LVx1MDAzZWV0eXBlKTtcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMjEzLVx0c3RydWN0IGtyYjVfYnVmZmVyIGJhc2Vfa2V5ID0ge307XG4tLVxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYz0yNDE9c3RhdGljIGludCBrcmI1X3Rlc3Rfb25lX2VuYyhjb25zdCBzdHJ1Y3Qga3JiNV9lbmNfdGVzdCAqdGVzdCwgdm9pZCAqYnVmKVxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYy0yNDIte1xuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYzoyNDM6XHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICprcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHRlc3QtXHUwMDNlZXR5cGUpO1xuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYy0yNDQtXHRzdHJ1Y3QgY3J5cHRvX2FlYWQgKmNpID0gTlVMTDtcbi0tXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jPTM4MD1zdGF0aWMgaW50IGtyYjVfdGVzdF9vbmVfbWljKGNvbnN0IHN0cnVjdCBrcmI1X21pY190ZXN0ICp0ZXN0LCB2b2lkICpidWYpXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jLTM4MS17XG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jOjM4MjpcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodGVzdC1cdTAwM2VldHlwZSk7XG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jLTM4My1cdHN0cnVjdCBjcnlwdG9fc2hhc2ggKmNpID0gTlVMTDtcbi0tXG5mcy9hZnMvY21fc2VjdXJpdHkuYz0xMjE9aW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldClcbi0tXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0xNDItXHRyZXQgPSAtRU5PUEtHO1xuZnMvYWZzL2NtX3NlY3VyaXR5LmM6MTQzOlx0a3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShLUkI1X0VOQ1RZUEVfQUVTMTI4X0NUU19ITUFDX1NIQTFfOTYpO1xuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMTQ0LVx0aWYgKCFrcmI1KVxuLS1cbmZzL2Fmcy9jbV9zZWN1cml0eS5jPTE4MD1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tLVxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjA1LVxuZnMvYWZzL2NtX3NlY3VyaXR5LmM6MjA2Olx0Y29ubl9rcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGVuY3R5cGUpO1xuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjA3LVx0aWYgKCFjb25uX2tyYjUpXG4tLVxuaW5jbHVkZS9jcnlwdG8va3JiNS5oPTg3PXN0cnVjdCBrcmI1X2VuY3R5cGUge1xuLS1cbmluY2x1ZGUvY3J5cHRvL2tyYjUuaC0xMTYtICovXG5pbmNsdWRlL2NyeXB0by9rcmI1Lmg6MTE3OmNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh1MzIgZW5jdHlwZSk7XG5pbmNsdWRlL2NyeXB0by9rcmI1LmgtMTE4LXNpemVfdCBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIoY29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNSxcbi0tXG5uZXQvY2VwaC9jcnlwdG8uYz00MT1zdGF0aWMgaW50IHNldF9rcmI1X3RmbXMoc3RydWN0IGNlcGhfY3J5cHRvX2tleSAqa2V5LCBjb25zdCB1MzIgKmtleV91c2FnZXMsXG4tLVxubmV0L2NlcGgvY3J5cHRvLmMtNTEtXG5uZXQvY2VwaC9jcnlwdG8uYzo1MjpcdGtleS1cdTAwM2VrcmI1X3R5cGUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoXG5uZXQvY2VwaC9jcnlwdG8uYy01My1cdFx0XHQgICAgIEtSQjVfRU5DVFlQRV9BRVMyNTZfQ1RTX0hNQUNfU0hBMzg0XzE5Mik7XG4tLVxubmV0L3J4cnBjL2tleS5jPTE2NT1zdGF0aWMgaW50IHJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhnayhzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwLFxuLS1cbm5ldC9yeHJwYy9rZXkuYy0yMzItXG5uZXQvcnhycGMva2V5LmM6MjMzOlx0aWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodG9rZW4tXHUwMDNlcnhnay1cdTAwM2VlbmN0eXBlKSkge1xubmV0L3J4cnBjL2tleS5jLTIzNC1cdFx0cmV0ID0gLUVOT1BLRztcbi0tXG5uZXQvcnhycGMvcnhnay5jPTIwPXN0YXRpYyBpbnQgcnhna19wcmVwYXJzZV9zZXJ2ZXJfa2V5KHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXG4tLVxubmV0L3J4cnBjL3J4Z2suYy0zNS1cbm5ldC9yeHJwYy9yeGdrLmM6MzY6XHRrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGVuY3R5cGUpO1xubmV0L3J4cnBjL3J4Z2suYy0zNy1cdGlmICgha3JiNSlcbi0tXG5uZXQvcnhycGMvcnhna19rZGYuYz0yMDU9c3RydWN0IHJ4Z2tfY29udGV4dCAqcnhna19nZW5lcmF0ZV90cmFuc3BvcnRfa2V5KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9yeHJwYy9yeGdrX2tkZi5jLTIyMi1cbm5ldC9yeHJwYy9yeGdrX2tkZi5jOjIyMzpcdGdrLVx1MDAzZWtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoa2V5LVx1MDAzZWVuY3R5cGUpO1xubmV0L3J4cnBjL3J4Z2tfa2RmLmMtMjI0LVx0aWYgKCFnay1cdTAwM2VrcmI1KVxuLS1cbm5ldC9yeHJwYy9yeGdrX2tkZi5jPTI2OD1pbnQgcnhna19zZXRfdXBfdG9rZW5fY2lwaGVyKGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqc2VydmVyX2tleSxcbi0tXG5uZXQvcnhycGMvcnhna19rZGYuYy0yNzYtXG5uZXQvcnhycGMvcnhna19rZGYuYzoyNzc6XHRrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGVuY3R5cGUpO1xubmV0L3J4cnBjL3J4Z2tfa2RmLmMtMjc4LVx0aWYgKCFrcmI1KVxuLS1cbm5ldC9yeHJwYy9yeHBlcmYuYz01ODk9c3RhdGljIGludCByeHBlcmZfYWRkX3lmc19yeGdrX2tleShzdHJ1Y3Qga2V5ICprZXlyaW5nLCB1MzIgZW5jdHlwZSlcbm5ldC9yeHJwYy9yeHBlcmYuYy01OTAte1xubmV0L3J4cnBjL3J4cGVyZi5jOjU5MTpcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XG5uZXQvcnhycGMvcnhwZXJmLmMtNTkyLVx0a2V5X3JlZl90IGtyZWY7XG4tLVxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmM9NDY9c3RhdGljIHZvaWQgZ3NzX2tyYjVfcHJlcGFyZV9lbmN0eXBlX3ByaW9yaXR5X2xpc3Qodm9pZClcbi0tXG5uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYy01NS1cdGZvciAodG90YWwgPSAwLCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShnc3Nfa3JiNV9lbmN0eXBlcyk7IGkmIzQzOyYjNDM7KSB7XG5uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYzo1NjpcdFx0aWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZ3NzX2tyYjVfZW5jdHlwZXNbaV0pKVxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMtNTctXHRcdFx0Y29udGludWU7XG4tLVxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmM9MTIyPWdzc19pbXBvcnRfdjJfY29udGV4dChjb25zdCB2b2lkICpwLCBjb25zdCB2b2lkICplbmQsIHN0cnVjdCBrcmI1X2N0eCAqY3R4LFxuLS1cbm5ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jLTE0Ni1cdFx0Z290byBvdXRfZXJyO1xubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmM6MTQ3Olx0Y3R4LVx1MDAzZWtyYjVlID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGN0eC1cdTAwM2VlbmN0eXBlKTtcbm5ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jLTE0OC1cdGlmICghY3R4LVx1MDAzZWtyYjVlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjkwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFNjb3BlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbiBzeW1ib2xzOiBgQ09ORklHX0FGX1JYUlBDYCwgYENPTkZJR19BRlNfRlNgLCBgQ09ORklHX1JYR0tgLCBhbmQgYENPTkZJR19SWFBFUkZgLiBUaGUgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGBDUllQVE9fS1JCNWAuIEl0IHNlZW1zIGJvdGggYFJYR0tgIGFuZCBgQUZTX0ZTYCBkZXBlbmQgb24gYW5kIHNlbGVjdCBgQ1JZUFRPX0tSQjVgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBmb2N1c2luZyBvbiB0aGUgY29yZSBkZXBlbmRlbmNpZXMgb2YgYEFGX1JYUlBDYCBhbmQgYEFGU19GU2AsIEkgc2VlIHRoYXQgYEFGX1JYUlBDYCByZXF1aXJlcyBgSU5FVGAuIGBBRlNfRlNgIGlzIGRlcGVuZGVudCBvbiBgSU5FVGAgYW5kIGFsc28gc2VsZWN0cyBgQUZfUlhSUENgLCBgRE5TX1JFU09MVkVSYCwgYE5FVEZTX1NVUFBPUlRgLCBhbmQsIGltcG9ydGFudGx5LCBgQ1JZUFRPX0tSQjVgLiBUaGlzIGlzIHVzZWZ1bCBjb250ZXh0LgoKTmV4dCwgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBjb25maWd1cmF0aW9ucyBtYW5pZmVzdCBpbiB0aGUgY29kZWJhc2UuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIHRyeWluZyB0byBpZGVudGlmeSB0aGVpciByb2xlczoKCjEuICBgZnMvYWZzL2NtX3NlY3VyaXR5LmNgOiBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIC0gU2VjdXJpdHksIGxpa2VseSBBRlMtc3BlY2lmaWMuCjIuICBgZnMvYWZzL2ludGVybmFsLmhgOiBgYWZzX21ha2Vfb3BfY2FsbGAgLSBBRlMsIGludGVybmFsIGZ1bmN0aW9uIGNhbGwuCjMuICBgZnMvYWZzL3J4cnBjLmNgOiBgYWZzX21ha2VfY2FsbGAsIGBhZnNfc2VuZF9lbXB0eV9yZXBseWAsIGBhZnNfc2VuZF9zaW1wbGVfcmVwbHlgIC0gUlhSUEMvQUZTIGludGVyYWN0aW9uLgo0LiAgYG5ldC9yeHJwYy9jYWxsX3N0YXRlLmNgOiBgcnhycGNfbm90aWZ5X3NvY2tldGAsIGByeHJwY19zZXRfY2FsbF9jb21wbGV0aW9uYCAtIFJYUlBDIGNhbGwgbWFuYWdlbWVudC4KNS4gIGBuZXQvcnhycGMvY29ubl9vYmplY3QuY2A6IGByeHJwY19wb2tlX2Nvbm5gIC0gUlhSUEMgY29ubmVjdGlvbiBtYWludGVuYW5jZS4KNi4gIGBuZXQvcnhycGMva2V5LmNgOiBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYCAtIFJYUlBDL1lGUy9SeEdLIGtleSBwYXJzaW5nLgo3LiAgYG5ldC9yeHJwYy9yZWN2bXNnLmNgOiBgcnhycGNfcmVxdWV1ZV9jYWxsYCwgYHJ4cnBjX3JlY3Ztc2dgIC0gUlhSUEMgbWVzc2FnZSBoYW5kbGluZy4KOC4gIGBuZXQvcnhycGMvcnhnay5jYDogYHJ4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5YCAtIFJYR0sgc2VjdXJpdHkgaW5pdGlhbGl6YXRpb24uCjkuICBgbmV0L3J4cnBjL3J4cGVyZi5jYDogYHJ4cGVyZl9wcm9jZXNzX2NhbGxgIC0gUlhQRVJGIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuCjEwLiBgbmV0L3J4cnBjL3NlbmRtc2cuY2A6IGByeHJwY19zZW5kX2RhdGFgLCBgcnhycGNfZG9fc2VuZG1zZ2AsIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCAtIFJYUlBDIG1lc3NhZ2Ugc2VuZGluZy4KCk5vdywgSSYjMzk7bSBjaGVja2luZyB0aGUgbW9zdCB1c2VmdWwgc3ltYm9scywgdGhlIG9uZXMgSSBjYWxsICYjMzQ7Z29vZCBGb2N1c1N5bWJvbHMmIzM0Oy4gSSYjMzk7dmUgY29tcGlsZWQgYSBsaXN0IG9mIHN5bWJvbHMgYmFzZWQgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY2hhbmdlZCBhbmQgbWFya2VkIHRoZW0gZm9yIGNsb3NlciBpbnNwZWN0aW9uOgotIGByeHJwY19zZW5kX2RhdGFgCi0gYHJ4cnBjX2RvX3NlbmRtc2dgCi0gYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgCi0gYHJ4cnBjX3JlY3Ztc2dgCi0gYHJ4cnBjX25vdGlmeV9zb2NrZXRgCi0gYHJ4cnBjX3Bva2VfY29ubmAKLSBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYAotIGByeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eWAKLSBgYWZzX21ha2VfY2FsbGAKLSBgYWZzX3NlbmRfc2ltcGxlX3JlcGx5YAotIGBhZnNfc2VuZF9lbXB0eV9yZXBseWAKLSBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gCi0gYHJ4cGVyZl9wcm9jZXNzX2NhbGxgCgpUaGUgY3J1Y2lhbCB0ZXN0IG5vdyBpcyB1YmlxdWl0eS4gQXJlIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgKmV2ZXJ5d2hlcmUqIGluIHRoZSBrZXJuZWwsIG9yIGFyZSB0aGV5IHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBzdWJzeXN0ZW0/IEkgc2VlIHRoYXQgYWxsIG9mIHRoZW0gYXJlIHJlbGF0ZWQgdG8gUnhSUEMsIEFGUywgUnhHSywgb3IgUnhQZXJmLiBUaGlzIG1lYW5zIHRoZXkgYXJlIGxvY2FsaXplZC4KClRvIGJlIHRob3JvdWdoLCBJIGhhdmUgdG8gZW5zdXJlIGFsbCByZXF1aXJlZCBjb25maWdzIGFyZSBwcmVzZW50OiBgQUZfUlhSUENgLCBgQUZTX0ZTYCwgYFJYR0tgLCBhbmQgYFJYUEVSRmAgYXJlIGVzc2VudGlhbCwgZ2l2ZW4gd2hhdCBJJiMzOTt2ZSBmb3VuZC4KCkZpbmFsbHksIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlIHRvIHNlZSB3aGF0IGd1YXJkcyBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYC4gSXQgc2VlbXMsIGZyb20gbG9va2luZyBhdCBgbmV0L3J4cnBjL2tleS5jYCwgdGhhdCBgI2lmZGVmIENPTkZJR19SWEdLYCBtYXkgYmUgcHJlc2VudCwgb3IgaXQgbWF5IGFsd2F5cyBiZSBjb21waWxlZCBpbi4gSXQgZGVwZW5kcyBvbiBob3cgaXQgaXMgZ3VhcmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMva2V5LmM9MTM3PXN0YXRpYyB0aW1lNjRfdCByeHJwY19zNjRfdG9fdGltZTY0KHM2NCB0aW1lX2luXzEwMG5zKVxuLS1cbm5ldC9yeHJwYy9rZXkuYy0xNjQtICovXG5uZXQvcnhycGMva2V5LmM6MTY1OnN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG5uZXQvcnhycGMva2V5LmMtMTY2LVx0XHRcdFx0ICAgICAgIHNpemVfdCBkYXRhbGVuLFxuLS1cbm5ldC9yeHJwYy9rZXkuYz0zMDA9c3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHIoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbi0tXG5uZXQvcnhycGMva2V5LmMtMzk1LVx0XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxubmV0L3J4cnBjL2tleS5jOjM5NjpcdFx0XHRyZXQyID0gcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHByZXAsIGRhdGFsZW4sIHRva2VuLCB0b2tsZW4pO1xubmV0L3J4cnBjL2tleS5jLTM5Ny1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MDAKCQkJCQkJCW91dHB1dDogMjYzCgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZz10cnVlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gbG9va2luZyBhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMsIEkgc2VlIHRoYXQgYGtleS5jYCwgYHJ4Z2suY2AsIGByeHBlcmYuY2AsIGFuZCB0aGUgZW50aXJlIGBhZnMvYCBkaXJlY3RvcnkgYXJlIGNvbXBpbGVkIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM6IGBDT05GSUdfQUZfUlhSUENgLCBgQ09ORklHX1JYR0tgLCBgQ09ORklHX1JYUEVSRmAsIGFuZCBgQ09ORklHX0FGU19GU2AsIHJlc3BlY3RpdmVseS4gTmF0dXJhbGx5LCBJIHdhbnQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZ3MgYXJlIGF0IHBsYXkgaGVyZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBBRl9SWFJQQ2AsIGBBRlNfRlNgLCBgUlhHS2AsIGFuZCBgUlhQRVJGYC4gVGhlIHViaXF1aXRvdXMgYElORVRgIGRlcGVuZGVuY3kgaXMgaW1wbGljaXRseSB0aGVyZSwgYXMgYEFGX1JYUlBDYCBhbmQgYEFGU19GU2AgcmVseSBvbiBpdC4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYFJYR0tgIGlzIG5lc3RlZCB1bmRlciBgQUZfUlhSUENgLCBhbmQgYFJYUEVSRmAgaGFzIGl0cyBvd24gY29uZmlndXJhdGlvbiBlbnRyeSBpbiB0aGUgYG5ldC9yeHJwYy9LY29uZmlnYCBmaWxlLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogc2hvdWxkIGBXb3J0aEZ1enppbmdgIGJlIHNldCB0byB0cnVlPyBBYnNvbHV0ZWx5LCB5ZXMuIFRoZSBwYXRjaCBzZXJpZXMgZGl2ZXMgZGVlcCBpbnRvIGNvcmUgUnhSUEMgc2VuZC9yZWNlaXZlL2NvbXBsZXRpb24gbG9naWMsIHdoaWNoIGluY2x1ZGVzIFJ4R0sgc2VjdXJpdHkgY29udGV4dCBoYW5kbGluZywgY29ubmVjdGlvbiBwb2tpbmcsIGtleSBwYXJzaW5nIGZvciBSeEdLLCBhbmQgQUZTIGNsaWVudCBzZW5kL3JlcGx5IHBhdGhzLgoKSGVyZSYjMzk7cyB0aGUgcmF0aW9uYWxlOiB0aGUgbW9kaWZpY2F0aW9ucyBpbXBhY3Qga2V5IGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyBsaWtlIGByeHJwY19zZW5kX2RhdGFgLCBub3RpZmljYXRpb24gcm91dGluZXMgbGlrZSBgcnhycGNfbm90aWZ5X3NvY2tldGAgYW5kIGByeHJwY19yZXF1ZXVlX2NhbGxgLCB0aGUgcGFyc2luZyBvZiBrZXlzIHdpdGhpbiBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYCwgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHRocm91Z2ggYHJ4cnBjX3Bva2VfY29ubmAsIGFuZCwgY3J1Y2lhbGx5LCBBRlMgY2xpZW50IGNhbGxzIHZpYSBgYWZzX21ha2VfY2FsbGAgYW5kIGBhZnNfc2VuZF9zaW1wbGVfcmVwbHlgLgoKVGhlIGtleSBoZXJlIGlzIHRoYXQgYWxsIHRoZXNlIG1vZGlmaWVkIHBhdGhzIGFyZSBkaXJlY3RseSBleHBvc2VkIGFuZCBlYXNpbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZXRob2RzLiBXZSBjYW4gZ2V0IHRvIHRoZW0gdGhyb3VnaCBBRl9SWFJQQyBzb2NrZXQgb3BlcmF0aW9ucywgdGhlIGBhZGRfa2V5YCBzeXNjYWxsLCBhbmQgc3RhbmRhcmQgQUZTIGZpbGVzeXN0ZW0gaW50ZXJhY3Rpb25zIHdpdGhpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgbGV2ZWwgb2YgdXNlci1zcGFjZSBhY2Nlc3NpYmlsaXR5IG1ha2VzIHRoaXMgY29kZSBhbiBleGNlbGxlbnQgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaHVzLCBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYCBhbmQgaW52b2tlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtBRlNfRlMmIzM0OywKICAgICYjMzQ7UlhHSyYjMzQ7LAogICAgJiMzNDtSWFBFUkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7cnhycGNfZG9fc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyeHJwY19rZXJuZWxfc2VuZF9kYXRhJiMzNDssCiAgICAmIzM0O3J4cnBjX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7cnhycGNfbm90aWZ5X3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19wb2tlX2Nvbm4mIzM0OywKICAgICYjMzQ7cnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrJiMzNDssCiAgICAmIzM0O3J4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O2Fmc19tYWtlX2NhbGwmIzM0OywKICAgICYjMzQ7YWZzX3NlbmRfc2ltcGxlX3JlcGx5JiMzNDssCiAgICAmIzM0O2Fmc19zZW5kX2VtcHR5X3JlcGx5JiMzNDssCiAgICAmIzM0O2Fmc19jcmVhdGVfeWZzX2NtX3Rva2VuJiMzNDssCiAgICAmIzM0O3J4cGVyZl9wcm9jZXNzX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgc29ja2V0IGRhdGEgc2VuZGluZyBhbmQgY29tcGxldGlvbiBub3RpZmljYXRpb24gbWVjaGFuaXNtcywgY29ubmVjdGlvbiByZWZlcmVuY2UgY291bnRpbmcsIGtleSBwYXlsb2FkIHBhcnNpbmcsIGFuZCBpbi1rZXJuZWwgQUZTL3J4cGVyZiBzZW5kIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29yZSBuZXR3b3JraW5nIGFuZCBmaWxlc3lzdGVtIHN0YXRlIG1hY2hpbmVzIGFuZCBlcnJvci1oYW5kbGluZyBwYXRocyB0aGF0IGFyZSBmdWxseSByZWFjaGFibGUgdmlhIEFGX1JYUlBDIHNvY2tldHMsIGtleXMgc3lzY2FsbHMsIGFuZCBBRlMgb3BlcmF0aW9ucyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDssCiAgICAmIzM0O1JYUEVSRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX3NlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtyeHJwY19kb19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3J4cnBjX2tlcm5lbF9zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7cnhycGNfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDtyeHJwY19ub3RpZnlfc29ja2V0JiMzNDssCiAgICAmIzM0O3J4cnBjX3Bva2VfY29ubiYjMzQ7LAogICAgJiMzNDtyeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2smIzM0OywKICAgICYjMzQ7cnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7YWZzX21ha2VfY2FsbCYjMzQ7LAogICAgJiMzNDthZnNfc2VuZF9zaW1wbGVfcmVwbHkmIzM0OywKICAgICYjMzQ7YWZzX3NlbmRfZW1wdHlfcmVwbHkmIzM0OywKICAgICYjMzQ7YWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4mIzM0OywKICAgICYjMzQ7cnhwZXJmX3Byb2Nlc3NfY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBzb2NrZXQgZGF0YSBzZW5kaW5nIGFuZCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLCBjb25uZWN0aW9uIHJlZmVyZW5jZSBjb3VudGluZywga2V5IHBheWxvYWQgcGFyc2luZywgYW5kIGluLWtlcm5lbCBBRlMvcnhwZXJmIHNlbmQgcGF0aHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZXMgYW5kIGVycm9yLWhhbmRsaW5nIHBhdGhzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQUZfUlhSUEMgc29ja2V0cywga2V5cyBzeXNjYWxscywgYW5kIEFGUyBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQUZfUlhSUEMgYW5kIEFGUyBuZXR3b3JraW5nIGNvZGUgdG8gc3VwcG9ydCBzaG9ydCB3cml0ZXMgaW4gcnhycGNfa2VybmVsX3NlbmRfZGF0YSwgbG9vcCB1bnRpbCBmdWxsIG1lc3NhZ2UgY29uc3VtcHRpb24gaW4gQUZTL3J4cGVyZiBjYWxsZXJzLCBzaW1wbGlmeSBsb2NraW5nIGFyb3VuZCByeHJwY19zZW5kX2RhdGEsIGZpeCB0aGUgdG9rc2l6ZSBjYWxjdWxhdGlvbiBmb3IgWUZTIENNIHRva2VucywgYWRkIGVuY3J5cHRpb24gdHlwZSB2YWxpZGF0aW9uIGZvciBZRlMga2V5cywgYW5kIGNsZWFuIHVwIHNvY2tldCBub3RpZmljYXRpb24gYW5kIGNvbm5lY3Rpb24gcmVmY291bnRpbmcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcbi0gVGhlIHRva2VuIGJ1ZmZlciBpbiBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgemVyb2luZyBhbGwgYnl0ZXM7IHRoZSBmaXggbWVyZWx5IGFjY291bnRzIGZvciB0aGUgNC1ieXRlIGBsZXZlbGAgZmllbGQgaW4gYHRva3NpemVgLlxuLSBJbiBgcnhycGNfc2VuZF9kYXRhYCwgZGF0YSB0cmFuc2ZlciBjb250aW51ZXMgdG8gdXNlIGBjb3B5X2Zyb21faXRlcl9mdWxsYCB3aXRoIGJvdW5kZWQgY29weSBzaXplcyAoYG1pbjNgKSwgYW5kIGVycm9yLXJld2luZCBsb2dpYyB1cGRhdGVzIGJ5dGUgY291bnRlcnMgYXBwcm9wcmlhdGVseS5cbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxuLSBObyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nL3N0cnVjdCBmaWVsZHMgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZC5cblxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZDNhZmYyMzM3NjkwODE2OTNlZGE4ODliNThhYTMyMDNhNjI4OTJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNDo0OToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0CmluZGV4IDg5MjZkYWI4ZTJlNjAuLjdkZjZhZmY3NjQ0YzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdApAQCAtODc5LDE0ICYjNDM7ODc5LDIxIEBAIFRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czoKICAgICAgZXhjbHVzaXZlbHkgdG8gaW4ta2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzLiAgbXNnLm1zZ19mbGFncyBtYXkgYmUgZ2l2ZW4KICAgICAgTVNHX01PUkUgaWYgdGhlcmUgd2lsbCBiZSBzdWJzZXF1ZW50IGRhdGEgc2VuZHMgZm9yIHRoaXMgY2FsbC4KIAotICAgICBUaGUgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzCi0gICAgIG90aGVyIHRoYW4gTVNHX01PUkUuICBsZW4gaXMgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIHRvIHRyYW5zbWl0LgomIzQzOyAgICAgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzCiYjNDM7ICAgICBvdGhlciB0aGFuIE1TR19NT1JFLiAgbGVuIGlzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBhZGQgdG8gdGhlCiYjNDM7ICAgICB0cmFuc21pc3Npb24uICBUaGUgbGFzdC1wYWNrZXQgZmxhZyB3aWxsIG9ubHkgYmUgc2V0IG9uIHRoZSBvdXRnb2luZwomIzQzOyAgICAgcGFja2V0IGlmIE1TR19NT1JFIGlzIG5vdCBzZXQgYW5kIGxlbiBhbW91bnQgb2YgYnl0ZXMgYXJlIGJ1ZmZlcmVkLgogCiAgICAgIG5vdGlmeV9lbmRfcnggY2FuIGJlIE5VTEwgb3IgaXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGJlCiAgICAgIGNhbGxlZCB3aGVuIHRoZSBjYWxsIGNoYW5nZXMgc3RhdGUgdG8gZW5kIHRoZSBUeCBwaGFzZS4gIFRoaXMgZnVuY3Rpb24gaXMKICAgICAgY2FsbGVkIHdpdGggYSBzcGlubG9jayBoZWxkIHRvIHByZXZlbnQgdGhlIGxhc3QgREFUQSBwYWNrZXQgZnJvbSBiZWluZwogICAgICB0cmFuc21pdHRlZCB1bnRpbCB0aGUgZnVuY3Rpb24gcmV0dXJucy4KIAomIzQzOyAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIG9yIGFuIGVycm9yLiAgSXQgd2lsbAomIzQzOyAgICAgcmV0dXJuIHplcm8gb25seSBpZiBsZW4gaXMgMCBvciBpZiBtc2ctJmd0O21zZ19pdGVyIGlzIGVtcHR5LiAgSXQgbWF5IGFsc28KJiM0MzsgICAgIG1ha2UgYSBzaG9ydCB3cml0ZSwgYnVmZmVyaW5nIGxlc3MgdGhhbiB0aGUgYW1vdW50IG9mIGRhdGEgcHJvdmlkZWQgb3IgdGhlCiYjNDM7ICAgICBsZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZSBjYWxsZWQgYWdhaW4uCiYjNDM7CiAgKCMpIFJlY2VpdmUgZGF0YSBmcm9tIGEgY2FsbDo6CiAKIAlpbnQgcnhycGNfa2VybmVsX3JlY3ZfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLApkaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuYwppbmRleCAxMDMxNjhjNzBkZDRkLi41ZWVlZWY3NjFjZjMxIDEwMDY0NAotLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY21fc2VjdXJpdHkuYwpAQCAtMjM1LDcgJiM0MzsyMzUsNyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCiAJICoJc3RydWN0IFJYR0tfQXV0aE5hbWUJaWRlbnRpdGllcyZsdDsmZ3Q7OwogCSAqIH07CiAJICovCi0JdG9rc2l6ZSA9IGtleXNpemUgJiM0MzsgOCAmIzQzOyA0ICYjNDM7IDQgJiM0MzsgOCAmIzQzOyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7CiYjNDM7CXRva3NpemUgPSBrZXlzaXplICYjNDM7IDQgJiM0MzsgOCAmIzQzOyA0ICYjNDM7IDQgJiM0MzsgOCAmIzQzOyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7CiAKIAlvZmZzZXQgPSAwOwogCWVuY3NpemUgPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIodG9rZW5fa3JiNSwgS1JCNV9FTkNSWVBUX01PREUsIHRva3NpemUsICZhbXA7b2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggMjkwODczYmFjODliMy4uNjVhMDg2NmNkOGI4NSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmgKQEAgLTE0MTYsMjIgJiM0MzsxNDE2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KQogCQkgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsCi0JCQkJICAgIGdmcF90IGdmcCkKLXsKLQlzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC0mZ3Q7ZXN0YXRlLSZndDthZGRyZXNzZXM7Ci0KLQlvcC0mZ3Q7Y2FsbAk9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpOwotCW9wLSZndDt0eXBlCT0gY2FsbC0mZ3Q7dHlwZTsKLQljYWxsLSZndDtvcAk9IG9wOwotCWNhbGwtJmd0O2tleQk9IG9wLSZndDtrZXk7Ci0JY2FsbC0mZ3Q7aW50cgk9ICEob3AtJmd0O2ZsYWdzICZhbXA7IEFGU19PUEVSQVRJT05fVU5JTlRSKTsKLQljYWxsLSZndDtwZWVyCT0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LSZndDthZGRyc1tvcC0mZ3Q7YWRkcl9pbmRleF0ucGVlcik7Ci0JY2FsbC0mZ3Q7c2VydmljZV9pZCA9IG9wLSZndDtzZXJ2ZXItJmd0O3NlcnZpY2VfaWQ7Ci0JYWZzX21ha2VfY2FsbChjYWxsLCBnZnApOwotCWFmc19wdXRfY2FsbChjYWxsKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAljYWxsLSZndDtpb3ZfbGVuID0gc2l6ZTsKQEAgLTE3NjMsNiAmIzQzOzE3NDcsMjMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKkFGU19WTk9ERV9UT19JKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKQogCXJldHVybiAmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLAomIzQzOwkJCQkgICAgZ2ZwX3QgZ2ZwKQomIzQzO3sKJiM0MzsJc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtJmd0O2VzdGF0ZS0mZ3Q7YWRkcmVzc2VzOwomIzQzOwomIzQzOwlvcC0mZ3Q7Y2FsbAk9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpOwomIzQzOwlvcC0mZ3Q7dHlwZQk9IGNhbGwtJmd0O3R5cGU7CiYjNDM7CWNhbGwtJmd0O29wCT0gb3A7CiYjNDM7CWNhbGwtJmd0O3NlcnZlcgk9IGFmc191c2Vfc2VydmVyKG9wLSZndDtzZXJ2ZXIsIGZhbHNlLCBhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsKTsKJiM0MzsJY2FsbC0mZ3Q7a2V5CT0gb3AtJmd0O2tleTsKJiM0MzsJY2FsbC0mZ3Q7aW50cgk9ICEob3AtJmd0O2ZsYWdzICZhbXA7IEFGU19PUEVSQVRJT05fVU5JTlRSKTsKJiM0MzsJY2FsbC0mZ3Q7cGVlcgk9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC0mZ3Q7YWRkcnNbb3AtJmd0O2FkZHJfaW5kZXhdLnBlZXIpOwomIzQzOwljYWxsLSZndDtzZXJ2aWNlX2lkID0gb3AtJmd0O3NlcnZlci0mZ3Q7c2VydmljZV9pZDsKJiM0MzsJYWZzX21ha2VfY2FsbChjYWxsLCBnZnApOwomIzQzOwlhZnNfcHV0X2NhbGwoY2FsbCk7CiYjNDM7fQomIzQzOwogLyoKICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb24KICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmCmRpZmYgLS1naXQgYS9mcy9hZnMvcnhycGMuYyBiL2ZzL2Fmcy9yeHJwYy5jCmluZGV4IGQ4MjkxNjY1N2EzZGQuLjFmNWI2YWE2ODk0MzMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9yeHJwYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9yeHJwYy5jCkBAIC00MTIsMjYgJiM0Mzs0MTIsMzIgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCW1zZy5tc2dfY29udHJvbGxlbgk9IDA7CiAJbXNnLm1zZ19mbGFncwkJPSBNU0dfV0FJVEFMTCB8IChjYWxsLSZndDt3cml0ZV9pdGVyID8gTVNHX01PUkUgOiAwKTsKIAotCXJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsIHJ4Y2FsbCwKLQkJCQkgICAgICZhbXA7bXNnLCBjYWxsLSZndDtyZXF1ZXN0X3NpemUsCi0JCQkJICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlcnJvcl9kb19hYm9ydDsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLCAmYW1wO21zZywKJiM0MzsJCQkJCSAgICAgbXNnX2RhdGFfbGVmdCgmYW1wO21zZyksCiYjNDM7CQkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJvcl9kb19hYm9ydDsKJiM0MzsJfSB3aGlsZSAobXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKIAogCWlmIChjYWxsLSZndDt3cml0ZV9pdGVyKSB7CiAJCW1zZy5tc2dfaXRlciA9ICpjYWxsLSZndDt3cml0ZV9pdGVyOwogCQltc2cubXNnX2ZsYWdzICZhbXA7PSB+TVNHX01PUkU7CiAJCXRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgJmFtcDttc2cpOwogCi0JCXJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsCi0JCQkJCSAgICAgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywKLQkJCQkJICAgICBpb3ZfaXRlcl9jb3VudCgmYW1wO21zZy5tc2dfaXRlciksCi0JCQkJCSAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJcmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwKJiM0MzsJCQkJCQkgICAgIGNhbGwtJmd0O3J4Y2FsbCwgJmFtcDttc2csCiYjNDM7CQkJCQkJICAgICBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJCXRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgJmFtcDttc2csIHJldCk7CiYjNDM7CQkJCWdvdG8gZXJyb3JfZG9fYWJvcnQ7CiYjNDM7CQkJfQomIzQzOwkJfSB3aGlsZSAobXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKIAkJKmNhbGwtJmd0O3dyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7CiAKLQkJdHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCAmYW1wO21zZywgcmV0KTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycm9yX2RvX2Fib3J0OwomIzQzOwkJdHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCAmYW1wO21zZywgMCk7CiAJfQogCiAJLyogTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQsIHdlIG1heSBoYXZlIHJlY2VpdmVkIHRoZSByZXBseSBvciBhbiBhYm9ydApAQCAtNDQzLDEwICYjNDM7NDQ5LDggQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCXJldHVybjsKIAogZXJyb3JfZG9fYWJvcnQ6Ci0JaWYgKHJldCAhPSAtRUNPTk5BQk9SVEVEKQotCQlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLAotCQkJCQlSWF9VU0VSX0FCT1JULCByZXQsCi0JCQkJCWFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpOwomIzQzOwlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLAomIzQzOwkJCQlSWF9VU0VSX0FCT1JULCByZXQsIGFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpOwogCWlmIChjYWxsLSZndDthc3luYykgewogCQlhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQpOwogCQlyZXR1cm47CkBAIC04NTksNiAmIzQzOzg2Myw3IEBAIHZvaWQgYWZzX3NlbmRfZW1wdHlfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsKQogewogCXN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjYWxsLSZndDtuZXQ7CiAJc3RydWN0IG1zZ2hkciBtc2c7CiYjNDM7CWludCByZXQ7CiAKIAlfZW50ZXIoJiMzNDsmIzM0Oyk7CiAKQEAgLTg3MSwyMiAmIzQzOzg3NiwxMyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIAltc2cubXNnX2NvbnRyb2xsZW4JPSAwOwogCW1zZy5tc2dfZmxhZ3MJCT0gMDsKIAotCXN3aXRjaCAocnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywgMCwKLQkJCQkgICAgICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpKSB7Ci0JY2FzZSAwOgotCQlfbGVhdmUoJiMzNDsgW3JlcGxpZWRdJiMzNDspOwomIzQzOwlyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsICZhbXA7bXNnLCAwLAomIzQzOwkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSAvKiBTaG91bGRuJiMzOTt0IGJ1ZmZlciBtb3JlIHRoYW4gMCBieXRlcy4gKi8KIAkJcmV0dXJuOwogCi0JY2FzZSAtRU5PTUVNOgotCQlfZGVidWcoJiMzNDtvb20mIzM0Oyk7Ci0JCXJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsCi0JCQkJCVJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sCi0JCQkJCWFmc19hYm9ydF9vb20pOwotCQlmYWxsdGhyb3VnaDsKLQlkZWZhdWx0OgotCQlfbGVhdmUoJiMzNDsgW2Vycm9yXSYjMzQ7KTsKLQkJcmV0dXJuOwotCX0KJiM0MzsJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJUlhHRU5fU1NfTUFSU0hBTCwgcmV0LCBhZnNfYWJvcnRfc2VuZF9lcnJvcik7CiB9CiAKIC8qCkBAIC05MTIsMjAgJiM0Mzs5MDgsMjEgQEAgdm9pZCBhZnNfc2VuZF9zaW1wbGVfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiAJbXNnLm1zZ19jb250cm9sbGVuCT0gMDsKIAltc2cubXNnX2ZsYWdzCQk9IDA7CiAKLQluID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywgbGVuLAotCQkJCSAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJZG8gewomIzQzOwkJbiA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJCSAgICZhbXA7bXNnLCBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCSAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJfSB3aGlsZSAobiAmZ3Q7PSAwICZhbXA7JmFtcDsgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKJiM0MzsKIAlpZiAobiAmZ3Q7PSAwKSB7CiAJCS8qIFN1Y2Nlc3MgKi8KIAkJX2xlYXZlKCYjMzQ7IFtyZXBsaWVkXSYjMzQ7KTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChuID09IC1FTk9NRU0pIHsKLQkJX2RlYnVnKCYjMzQ7b29tJiMzNDspOwotCQlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAotCQkJCQlSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLAotCQkJCQlhZnNfYWJvcnRfb29tKTsKLQl9CiYjNDM7CiYjNDM7CXJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsCiYjNDM7CQkJCVJYR0VOX1NTX01BUlNIQUwsIG4sIGFmc19hYm9ydF9zZW5kX2Vycm9yKTsKIAlfbGVhdmUoJiMzNDsgW2Vycm9yXSYjMzQ7KTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaAppbmRleCAxYjNjNDhiNTU5MWRmLi4wNGIwYmI2ODJiODEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaApAQCAtMTQ4LDYgJiM0MzsxNDgsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24gewogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsCSYjMzQ7VU5VIGlzb3J0JiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VwZGF0ZSwJCSYjMzQ7VVBEQVRFICAgJiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9ieV91dWlkLAkmIzM0O1VTRSB1dWlkICYjMzQ7KSBcCiYjNDM7CUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwsCQkmIzM0O1VTRSBjYWxsICYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCwJJiMzNDtVU0UgY20tY2wmIzM0OykgXAogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLAkmIzM0O1VTRSBnY2FwcyYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYiwJJiMzNDtVU0UgZ3Z1cGMmIzM0OykgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmgKaW5kZXggNzA0YTEwZGU2NjcwMC4uNTJmODcxOGNmNzI1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oCkBAIC0yMCwxNiAmIzQzOzIwLDE2IEBACiAJLyogQUZTIGVycm9ycyAqLwkJCQkJCVwKIAlFTShhZnNfYWJvcnRfZ2VuZXJhbF9lcnJvciwJCSYjMzQ7YWZzLWVycm9yJiMzNDspCQlcCiAJRU0oYWZzX2Fib3J0X2ludGVycnVwdGVkLAkJJiMzNDthZnMtaW50ciYjMzQ7KQkJXAotCUVNKGFmc19hYm9ydF9vb20sCQkJJiMzNDthZnMtb29tJiMzNDspCQlcCiAJRU0oYWZzX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsCQkmIzM0O2Fmcy1vcC1ub3RzdXBwJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfcHJvYmV1dWlkX25lZ2F0aXZlLAkmIzM0O2Fmcy1wcm9iZXV1aWQtbmVnJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yLAkJJiMzNDthZnMtc2VuZC1kYXRhJiMzNDspCVwKJiM0MzsJRU0oYWZzX2Fib3J0X3NlbmRfZXJyb3IsCQkmIzM0O2Fmcy1zZW5kLWVycm9yJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfdW5tYXJzaGFsX2Vycm9yLAkJJiMzNDthZnMtdW5tYXJzaGFsJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzLAkmIzM0O2Fmcy11bnN1cC1zZWMtY2xhc3MmIzM0OykJXAogCS8qIHJ4cGVyZiBlcnJvcnMgKi8JCQkJCQlcCiAJRU0ocnhwZXJmX2Fib3J0X2dlbmVyYWxfZXJyb3IsCQkmIzM0O3J4cGVyZi1lcnJvciYjMzQ7KQkJXAotCUVNKHJ4cGVyZl9hYm9ydF9vb20sCQkJJiMzNDtyeHBlcmYtb29tJiMzNDspCQlcCiAJRU0ocnhwZXJmX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsCSYjMzQ7cnhwZXJmLW9wLW5vdHN1cHAmIzM0OykJXAomIzQzOwlFTShyeHBlcmZfYWJvcnRfc2VuZF9lcnJvciwJCSYjMzQ7cnhwZXJmLXNlbmQtZXJyb3ImIzM0OykJXAogCUVNKHJ4cGVyZl9hYm9ydF91bm1hcnNoYWxfZXJyb3IsCSYjMzQ7cnhwZXJmLXVubWFyc2hhbCYjMzQ7KQlcCiAJLyogUnhLQUQgc2VjdXJpdHkgZXJyb3JzICovCQkJCQlcCiAJRU0ocnhrYWRfYWJvcnRfMV9zaG9ydF9jaGVjaywJCSYjMzQ7cnhrYWQxLXNob3J0LWNoZWNrJiMzNDspCVwKQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEAKIAlFTShyeHJwY19lcHJvdG9fd3Jvbmdfc2VjdXJpdHksCQkmIzM0O3dyb25nLXNlYyYjMzQ7KQkJXAogCUVNKHJ4cnBjX3JlY3Ztc2dfZXhjZXNzX2RhdGEsCQkmIzM0O3JlY3Ztc2ctZXhjZXNzJiMzNDspCVwKIAlFTShyeHJwY19yZWN2bXNnX3Nob3J0X2RhdGEsCQkmIzM0O3JlY3Ztc2ctc2hvcnQmIzM0OykJXAomIzQzOwlFTShyeHJwY19zZW5kbXNnX3R4X2Vycm9yLAkJJiMzNDt0eC1lcnJvciYjMzQ7KQkJXAogCUVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLAkJJiMzNDtzZW5kbXNnLWxhdGUmIzM0OykKIAogI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFwKQEAgLTM0Miw2ICYjNDM7MzQzLDcgQEAKIAlFTShyeHJwY19jYWxsX3NlZV9kaXN0cmlidXRlX2Vycm9yLAkmIzM0O1NFRSBkaXN0LWVyciYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfaW5wdXQsCQkmIzM0O1NFRSBpbnB1dCAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkLAkmIzM0O1NFRSBuZnktcmxzZCYjMzQ7KSBcCiYjNDM7CUVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkLAkmIzM0O1NFRSBuZnktc2tpcCYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZywJCSYjMzQ7U0VFIHJlY3Ztc2cgJiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWUsCSYjMzQ7U0VFIHJlY3YtcnF1JiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsICYjMzQ7U0VFIHJlY3YtcnFGJiMzNDspIFwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKaW5kZXggODY1ZjA1ZmUzN2FiOS4uY2IzNmE3MDlmNTQwZSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKQEAgLTY0Miw2ICYjNDM7NjQyLDcgQEAgZW51bSByeHJwY19jYWxsX2ZsYWcgewogCVJYUlBDX0NBTExfVFhfTEFTVCwJCS8qIExhc3QgcGFja2V0IGluIFR4IGJ1ZmZlciAoYXQgcnh0eF90b3ApICovCiAJUlhSUENfQ0FMTF9UWF9BTExfQUNLRUQsCS8qIExhc3QgcGFja2V0IGhhcyBiZWVuIGhhcmQtYWNrZWQgKi8KIAlSWFJQQ19DQUxMX1RYX05PX01PUkUsCQkvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovCiYjNDM7CVJYUlBDX0NBTExfVFhfRVJST1IsCQkvKiBUZXJtaW5hbCBlcnJvcjsgY2FsbCBuZWVkcyBhYm9ydCAqLwogCVJYUlBDX0NBTExfU0VORF9QSU5HLAkJLyogQSBwaW5nIHdpbGwgbmVlZCB0byBiZSBzZW50ICovCiAJUlhSUENfQ0FMTF9SRVRSQU5TX1RJTUVPVVQsCS8qIFJldHJhbnNtaXNzaW9uIGR1ZSB0byB0aW1lb3V0IG9jY3VycmVkICovCiAJUlhSUENfQ0FMTF9CRUdBTl9SWF9USU1FUiwJLyogV2UgYmVnYW4gdGhlIGV4cGVjdF9yeF9ieSB0aW1lciAqLwpAQCAtMTEwOSw2ICYjNDM7MTExMCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByeHJwY19pc19jbGllbnRfY2FsbChjb25zdCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIC8qCiAgKiBjYWxsX3N0YXRlLmMKICAqLwomIzQzO3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCk7CiBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsCiAJCQkgICAgICAgZW51bSByeHJwY19jYWxsX2NvbXBsZXRpb24gY29tcGwsCiAJCQkgICAgICAgdTMyIGFib3J0X2NvZGUsCkBAIC0xNDQxLDcgJiM0MzsxNDQzLDYgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByeHJwY19sb2NhbF9zZXFfb3BzOwogLyoKICAqIHJlY3Ztc2cuYwogICovCi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKik7CiBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtc2doZHIgKiwgc2l6ZV90LCBpbnQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmMKaW5kZXggNmFmYjU0MzczZWJiZi4uMzY0ODEwYzY1Mjc2NiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jCkBAIC03LDYgJiM0Mzs3LDYwIEBACiAKICNpbmNsdWRlICYjMzQ7YXItaW50ZXJuYWwuaCYjMzQ7CiAKJiM0MzsvKgomIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBfX3J4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnhycGNfc29jayAqcng7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFJYUlBDX0NBTExfUkVMRUFTRUQsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsKJiM0MzsJcnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC0mZ3Q7c29ja2V0KTsKJiM0MzsJc2sgPSAmYW1wO3J4LSZndDtzazsKJiM0MzsJaWYgKHJ4ICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICZsdDsgUlhSUENfQ0xPU0UpIHsKJiM0MzsJCWlmIChjYWxsLSZndDtub3RpZnlfcngpIHsKJiM0MzsJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrLCBmbGFncyk7CiYjNDM7CQkJY2FsbC0mZ3Q7bm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLSZndDt1c2VyX2NhbGxfSUQpOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjYWxsLSZndDtub3RpZnlfbG9jaywgZmxhZ3MpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2ssIGZsYWdzKTsKJiM0MzsJCQlpZiAobGlzdF9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaykpIHsKJiM0MzsJCQkJcnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7CiYjNDM7CQkJCWxpc3RfYWRkX3RhaWwoJmFtcDtjYWxsLSZndDtyZWN2bXNnX2xpbmssICZhbXA7cngtJmd0O3JlY3Ztc2dfcSk7CiYjNDM7CQkJfQomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKJiM0MzsJCQkJX2RlYnVnKCYjMzQ7Y2FsbCAlcHMmIzM0Oywgc2stJmd0O3NrX2RhdGFfcmVhZHkpOwomIzQzOwkJCQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiYjNDM7ewomIzQzOwlpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSkgewomIzQzOwkJcnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CV9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogVHJhbnNpdGlvbiBhIGNhbGwgdG8gdGhlIGNvbXBsZXRlIHN0YXRlLgogICovCkBAIC0yNSw3ICYjNDM7NzksNyBAQCBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsCiAJcnhycGNfc2V0X2NhbGxfc3RhdGUoY2FsbCwgUlhSUENfQ0FMTF9DT01QTEVURSk7CiAJdHJhY2VfcnhycGNfY2FsbF9jb21wbGV0ZShjYWxsKTsKIAl3YWtlX3VwKCZhbXA7Y2FsbC0mZ3Q7d2FpdHEpOwotCXJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7CiYjNDM7CV9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmMgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuYwppbmRleCAwZWNlNzE3ZGIwZjg1Li4xYmU1MGUwYzljZWU1IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvY29ubl9vYmplY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuYwpAQCAtMzQsNyAmIzQzOzM0LDEwIEBAIHZvaWQgcnhycGNfcG9rZV9jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLCBlbnVtIHJ4cnBjX2Nvbm5fdHJhY2Ugd2h5KQogCXNwaW5fbG9ja19pcnEoJmFtcDtsb2NhbC0mZ3Q7bG9jayk7CiAJYnVzeSA9ICFsaXN0X2VtcHR5KCZhbXA7Y29ubi0mZ3Q7YXR0ZW5kX2xpbmspOwogCWlmICghYnVzeSkgewotCQlyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCB3aHkpOwomIzQzOwkJaWYgKCFyeHJwY19nZXRfY29ubmVjdGlvbl9tYXliZShjb25uLCB3aHkpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bG9jYWwtJmd0O2xvY2spOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAkJbGlzdF9hZGRfdGFpbCgmYW1wO2Nvbm4tJmd0O2F0dGVuZF9saW5rLCAmYW1wO2xvY2FsLSZndDtjb25uX2F0dGVuZF9xKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bG9jYWwtJmd0O2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2tleS5jIGIvbmV0L3J4cnBjL2tleS5jCmluZGV4IGEwYWE3OGQ4OTI4OTcuLjMwZDZkYjA1MmMyMTYgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMva2V5LmMKQEAgLTE3Miw2ICYjNDM7MTcyLDcgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCwKIAljb25zdCBfX2JlMzIgKnRpY2tldCwgKmtleTsKIAlzNjQgdG1wOwogCXNpemVfdCByYXdfa2V5bGVuLCByYXdfdGt0bGVuLCBrZXlsZW4sIHRrdGxlbjsKJiM0MzsJaW50IHJldCA9IC1FS0VZUkVKRUNURUQ7CiAKIAlfZW50ZXIoJiMzNDsseyV4LCV4LCV4LCV4fSwleCYjMzQ7LAogCSAgICAgICBudG9obCh4ZHJbMF0pLCBudG9obCh4ZHJbMV0pLCBudG9obCh4ZHJbMl0pLCBudG9obCh4ZHJbM10pLApAQCAtMjI5LDYgJiM0MzsyMzAsMTEgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCwKIAl0b2tlbi0mZ3Q7cnhnay0mZ3Q7a2V5LmRhdGEJPSB0b2tlbi0mZ3Q7cnhnay0mZ3Q7X2tleTsKIAl0b2tlbi0mZ3Q7cnhnay0mZ3Q7dGlja2V0LmxlbiA9IHJhd190a3RsZW47CiAKJiM0MzsJaWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodG9rZW4tJmd0O3J4Z2stJmd0O2VuY3R5cGUpKSB7CiYjNDM7CQlyZXQgPSAtRU5PUEtHOwomIzQzOwkJZ290byByZWplY3RfdG9rZW47CiYjNDM7CX0KJiM0MzsKIAlpZiAodG9rZW4tJmd0O3J4Z2stJmd0O2VuZHRpbWUgIT0gMCkgewogCQlleHBpcnkgPSByeHJwY19zNjRfdG9fdGltZTY0KHRva2VuLSZndDtyeGdrLSZndDtlbmR0aW1lKTsKIAkJaWYgKGV4cGlyeSAmbHQ7IDApCkBAIC0yODAsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsCiAJa2ZyZWUodG9rZW4tJmd0O3J4Z2spOwogCWtmcmVlKHRva2VuKTsKIHJlamVjdDoKLQlyZXR1cm4gLUVLRVlSRUpFQ1RFRDsKJiM0MzsJcmV0dXJuIHJldDsKIGV4cGlyZWQ6CiAJa2ZyZWUodG9rZW4tJmd0O3J4Z2spOwogCWtmcmVlKHRva2VuKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jCmluZGV4IGVmY2JhNGIyZTc0ZjAuLjI4YjIxNDhiNTY5MzYgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9yZWN2bXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3JlY3Ztc2cuYwpAQCAtMTcsMTMgJiM0MzsxNywxMiBAQAogI2luY2x1ZGUgJiMzNDthci1pbnRlcm5hbC5oJiMzNDsKIAogLyoKLSAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXIKLSAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS4KJiM0MzsgKiBSZXF1ZXVlIGEgY2FsbCBmb3IgcmVjdm1zZygpIHRvIHBpY2sgdXAuCiAgKi8KLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKJiM0MztzdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiB7Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4OwotCXN0cnVjdCBzb2NrICpzazsKJiM0MzsJc3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay0mZ3Q7c2spOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3J4LSZndDtzazsKIAogCV9lbnRlcigmIzM0OyVkJiMzNDssIGNhbGwtJmd0O2RlYnVnX2lkKTsKIApAQCAtMzIsMzEgJiM0MzszMSwxOCBAQCB2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiAJCXJldHVybjsKIAl9CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLSZndDtzb2NrZXQpOwotCXNrID0gJmFtcDtyeC0mZ3Q7c2s7Ci0JaWYgKHJ4ICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICZsdDsgUlhSUENfQ0xPU0UpIHsKLQkJaWYgKGNhbGwtJmd0O25vdGlmeV9yeCkgewotCQkJc3Bpbl9sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKLQkJCWNhbGwtJmd0O25vdGlmeV9yeChzaywgY2FsbCwgY2FsbC0mZ3Q7dXNlcl9jYWxsX0lEKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fbG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKLQkJCWlmIChsaXN0X2VtcHR5KCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rKSkgewotCQkJCXJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpOwotCQkJCWxpc3RfYWRkX3RhaWwoJmFtcDtjYWxsLSZndDtyZWN2bXNnX2xpbmssICZhbXA7cngtJmd0O3JlY3Ztc2dfcSk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaykpIHsKJiM0MzsJCXJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaywgJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKIAotCQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKLQkJCQlfZGVidWcoJiMzNDtjYWxsICVwcyYjMzQ7LCBzay0mZ3Q7c2tfZGF0YV9yZWFkeSk7Ci0JCQkJc2stJmd0O3NrX2RhdGFfcmVhZHkoc2spOwotCQkJfQotCQl9CiYjNDM7CWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7CiYjNDM7CQlfZGVidWcoJiMzNDtjYWxsICVwcyYjMzQ7LCBzay0mZ3Q7c2tfZGF0YV9yZWFkeSk7CiYjNDM7CQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiAJfQogCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJX2xlYXZlKCYjMzQ7JiMzNDspOwogfQogCkBAIC01NjEsNyAmIzQzOzU0Nyw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAogCWlmICghKGZsYWdzICZhbXA7IE1TR19QRUVLKSAmYW1wOyZhbXA7CiAJICAgICFza2JfcXVldWVfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX3F1ZXVlKSkKLQkJcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKJiM0MzsJCXJ4cnBjX3JlcXVldWVfY2FsbChzb2NrLCBjYWxsKTsKIAlnb3RvIG5vdF95ZXRfY29tcGxldGU7CiAKIGNhbGxfZmFpbGVkOgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmMKaW5kZXggNzdhNjdhY2UxZDI0OC4uYjQ5MjIxZjU3ZjY3NyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3J4Z2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcnhnay5jCkBAIC0yNTEsOCAmIzQzOzI1MSwxMCBAQCBzdGF0aWMgaW50IHJ4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCQkJCQkgR0ZQX05PRlMpOwogCWlmIChJU19FUlIoZ2spKQogCQlyZXR1cm4gUFRSX0VSUihnayk7CiYjNDM7CXdyaXRlX2xvY2soJmFtcDtjb25uLSZndDtzZWN1cml0eV91c2VfbG9jayk7CiAJY29ubi0mZ3Q7cnhnay5lbmN0eXBlID0gZ2stJmd0O2tyYjUtJmd0O2V0eXBlOwogCWNvbm4tJmd0O3J4Z2sua2V5c1tnay0mZ3Q7a2V5X251bWJlciAmYW1wOyAzXSA9IGdrOwomIzQzOwl3cml0ZV91bmxvY2soJmFtcDtjb25uLSZndDtzZWN1cml0eV91c2VfbG9jayk7CiAKIAlzd2l0Y2ggKGNvbm4tJmd0O3NlY3VyaXR5X2xldmVsKSB7CiAJY2FzZSBSWFJQQ19TRUNVUklUWV9QTEFJTjoKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeHBlcmYuYyBiL25ldC9yeHJwYy9yeHBlcmYuYwppbmRleCBiOGRmNmQyMjMxNGQ2Li5lYmQ1NDIyMmM2NGVmIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvcnhwZXJmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3J4cGVyZi5jCkBAIC01MzgsMTUgJiM0Mzs1MzgsMTggQEAgc3RhdGljIGludCByeHBlcmZfcHJvY2Vzc19jYWxsKHN0cnVjdCByeHBlcmZfY2FsbCAqY2FsbCkKIAlpb3ZbMF0uaW92X2xlbgk9IGxlbjsKIAlpb3ZfaXRlcl9rdmVjKCZhbXA7bXNnLm1zZ19pdGVyLCBXUklURSwgaW92LCAxLCBsZW4pOwogCW1zZy5tc2dfZmxhZ3MgPSAwOwotCW4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwgJmFtcDttc2csIGxlbiwKLQkJCQkgICByeHBlcmZfbm90aWZ5X2VuZF9yZXBseV90eCk7CiYjNDM7CWRvIHsKJiM0MzsJCW4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJCSAgICZhbXA7bXNnLCBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCSAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJfSB3aGlsZSAobiAmZ3Q7PSAwICZhbXA7JmFtcDsgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKJiM0MzsKIAlpZiAobiAmZ3Q7PSAwKQogCQlyZXR1cm4gMDsgLyogU3VjY2VzcyAqLwogCi0JaWYgKG4gPT0gLUVOT01FTSkKLQkJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwocnhwZXJmX3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAotCQkJCQlSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLAotCQkJCQlyeHBlcmZfYWJvcnRfb29tKTsKJiM0MzsJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwocnhwZXJmX3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAomIzQzOwkJCQlSWEdFTl9TU19NQVJTSEFMLCBuLAomIzQzOwkJCQlyeHBlcmZfYWJvcnRfc2VuZF9lcnJvcik7CiAJcmV0dXJuIG47CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZW5kbXNnLmMgYi9uZXQvcnhycGMvc2VuZG1zZy5jCmluZGV4IGVkMmM5YTUxMDA1YWQuLjhiYjMyN2RjMjgzM2UgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3NlbmRtc2cuYwpAQCAtMzIwLDggJiM0MzszMjAsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX2FsbG9jX3R4cXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAkJCSAgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAotCQkJICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsCi0JCQkgICBib29sICpfZHJvcHBlZF9sb2NrKQomIzQzOwkJCSAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KQomIzQzOwlfX3JlbGVhc2VzKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCkKIHsKIAlzdHJ1Y3QgcnhycGNfdHhidWYgKnR4YjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3J4LSZndDtzazsKQEAgLTMzMCwyOSAmIzQzOzMzMCwzNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJYm9vbCBtb3JlID0gbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX01PUkU7CiAJaW50IHJldCwgY29waWVkID0gMDsKIAotCWlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSB7Ci0JCXRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtJmd0O2RlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCwKLQkJCQkgIGNhbGwtJmd0O2NpZCwgY2FsbC0mZ3Q7Y2FsbF9pZCwgY2FsbC0mZ3Q7cnhfY29uc3VtZWQsCi0JCQkJICAwLCAtRVBST1RPKTsKLQkJcmV0dXJuIC1FUFJPVE87Ci0JfQotCiAJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwogCiAJcmV0ID0gcnhycGNfd2FpdF90b19iZV9jb25uZWN0ZWQoY2FsbCwgJmFtcDt0aW1lbyk7CiAJaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAlpZiAoY2FsbC0mZ3Q7Y29ubi0mZ3Q7c3RhdGUgPT0gUlhSUENfQ09OTl9DTElFTlRfVU5TRUNVUkVEKSB7CiAJCXJldCA9IHJ4cnBjX2luaXRfY2xpZW50X2Nvbm5fc2VjdXJpdHkoY2FsbC0mZ3Q7Y29ubik7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJLyogdGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqLwogCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCiByZWxvYWQ6CiYjNDM7CWlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSkgewomIzQzOwkJdHJhY2VfcnhycGNfYWJvcnQoY2FsbC0mZ3Q7ZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLAomIzQzOwkJCQkgIGNhbGwtJmd0O2NpZCwgY2FsbC0mZ3Q7Y2FsbF9pZCwgY2FsbC0mZ3Q7cnhfY29uc3VtZWQsCiYjNDM7CQkJCSAgMCwgLUVQUk9UTyk7CiYjNDM7CQlyZXQgPSAtRVBST1RPOwomIzQzOwkJZ290byBtYXliZV9lcnJvcjsKJiM0MzsJfQomIzQzOwlpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgJmFtcDtjYWxsLSZndDtmbGFncykpKSB7CiYjNDM7CQl0cmFjZV9yeHJwY19hYm9ydChjYWxsLSZndDtkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvciwKJiM0MzsJCQkJICBjYWxsLSZndDtjaWQsIGNhbGwtJmd0O2NhbGxfaWQsIGNhbGwtJmd0O3J4X2NvbnN1bWVkLAomIzQzOwkJCQkgIDAsIC1FSU8pOwomIzQzOwkJcmV0ID0gLUVJTzsKJiM0MzsJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CX0KJiM0MzsKIAl0eGIgPSBjYWxsLSZndDt0eF9wZW5kaW5nOwogCWNhbGwtJmd0O3R4X3BlbmRpbmcgPSBOVUxMOwogCWlmICh0eGIpCkBAIC0zNzksOSAmIzQzOzM4Nyw5IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAogCXJldCA9IC1FTVNHU0laRTsKIAlpZiAoY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICE9IC0xKSB7Ci0JCWlmIChsZW4gLSBjb3BpZWQgJmd0OyBjYWxsLSZndDt0eF90b3RhbF9sZW4pCiYjNDM7CQlpZiAobGVuICZndDsgY2FsbC0mZ3Q7dHhfdG90YWxfbGVuKQogCQkJZ290byBtYXliZV9lcnJvcjsKLQkJaWYgKCFtb3JlICZhbXA7JmFtcDsgbGVuIC0gY29waWVkICE9IGNhbGwtJmd0O3R4X3RvdGFsX2xlbikKJiM0MzsJCWlmICghbW9yZSAmYW1wOyZhbXA7IGxlbiAhPSBjYWxsLSZndDt0eF90b3RhbF9sZW4pCiAJCQlnb3RvIG1heWJlX2Vycm9yOwogCX0KIApAQCAtNDA1LDcgJiM0Mzs0MTMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJCQkgKiB0aGUgc2VjdXJpdHkgaGVhZGVyIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBwYWRkZWQKIAkJCSAqIHJlZ2lvbiAoZW5jIGJsb2Nrc2l6ZSksIGJ1dCB0aGUgdHJhaWxlciBpcyBub3QuCiAJCQkgKi8KLQkJCXJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbXNnX2RhdGFfbGVmdChtc2cpOwomIzQzOwkJCXJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbGVuOwogCQkJdHhiID0gY2FsbC0mZ3Q7Y29ubi0mZ3Q7c2VjdXJpdHktJmd0O2FsbG9jX3R4YnVmKGNhbGwsIHJlbWFpbiwgc2stJmd0O3NrX2FsbG9jYXRpb24pOwogCQkJaWYgKCF0eGIpIHsKIAkJCQlyZXQgPSAtRU5PTUVNOwpAQCAtNDE2LDggJiM0Mzs0MjQsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJCV9kZWJ1ZygmIzM0O2FwcGVuZCYjMzQ7KTsKIAogCQkvKiBhcHBlbmQgbmV4dCBzZWdtZW50IG9mIGRhdGEgdG8gdGhlIGN1cnJlbnQgYnVmZmVyICovCi0JCWlmIChtc2dfZGF0YV9sZWZ0KG1zZykgJmd0OyAwKSB7Ci0JCQlzaXplX3QgY29weSA9IHVtaW4odHhiLSZndDtzcGFjZSwgbXNnX2RhdGFfbGVmdChtc2cpKTsKJiM0MzsJCWlmIChsZW4gJmd0OyAwKSB7CiYjNDM7CQkJc2l6ZV90IGNvcHkgPSBtaW4zKHR4Yi0mZ3Q7c3BhY2UsIGxlbiwgbXNnX2RhdGFfbGVmdChtc2cpKTsKIAogCQkJX2RlYnVnKCYjMzQ7YWRkICV6dSYjMzQ7LCBjb3B5KTsKIAkJCWlmICghY29weV9mcm9tX2l0ZXJfZnVsbCh0eGItJmd0O2RhdGEgJiM0MzsgdHhiLSZndDtvZmZzZXQsCkBAIC00MjgsNiAmIzQzOzQzNiw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAkJCXR4Yi0mZ3Q7bGVuICYjNDM7PSBjb3B5OwogCQkJdHhiLSZndDtvZmZzZXQgJiM0Mzs9IGNvcHk7CiAJCQljb3BpZWQgJiM0Mzs9IGNvcHk7CiYjNDM7CQkJbGVuIC09IGNvcHk7CiAJCQlpZiAoY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICE9IC0xKQogCQkJCWNhbGwtJmd0O3R4X3RvdGFsX2xlbiAtPSBjb3B5OwogCQl9CkBAIC00MzksNjIgJiM0Mzs0NDgsMTAwIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAogCQkvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCYjMzk7cyBub3cgZnVsbCAqLwogCQlpZiAoIXR4Yi0mZ3Q7c3BhY2UgfHwKLQkJICAgIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCAmYW1wOyZhbXA7ICFtb3JlKSkgewotCQkJaWYgKG1zZ19kYXRhX2xlZnQobXNnKSA9PSAwICZhbXA7JmFtcDsgIW1vcmUpCi0JCQkJdHhiLSZndDtmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDsKLQomIzQzOwkJICAgIChsZW4gPT0gMCAmYW1wOyZhbXA7ICFtb3JlKSkgewomIzQzOwkJCS8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZAomIzQzOwkJCSAqIGhhdmUgY29ycnVwdGVkIHRoZSB0eGJ1ZiBjb250ZW50IHdpdGggYSBwYXJ0aWFsCiYjNDM7CQkJICogZW5jcnlwdC4gIEFzc3VtZSB0aGF0IEVOT01FTSBpcyByZXRyeWFibGUsIGJ1dAomIzQzOwkJCSAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC4KJiM0MzsJCQkgKi8KIAkJCXJldCA9IGNhbGwtJmd0O3NlY3VyaXR5LSZndDtzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7Ci0JCQlpZiAocmV0ICZsdDsgMCkKLQkJCQlnb3RvIG91dDsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJCQkvKiBBc3N1bWUgdGhhdCBFTk9NRU0gaGVyZSBtZWFucyB0aGF0IHRoZQomIzQzOwkJCQkgKiBlbmNyeXB0aW9uIGhhc24mIzM5O3QgaGFwcGVuZWQgeWV0LiAgVGhlIGRhdGEgaXMKJiM0MzsJCQkJICogYWxpZ25lZCB0byBhdm9pZCB0aGUgbmVlZCBmb3Igc2xvdyBidWZmZXJpbmcKJiM0MzsJCQkJICogaW4gdGhlIGNyeXB0byB3YWxrLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKHJldCA9PSAtRU5PTUVNKQomIzQzOwkJCQkJZ290byBtYXliZV9lcnJvcl9yZXdpbmQ7CiYjNDM7CQkJCXNldF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgJmFtcDtjYWxsLSZndDtmbGFncyk7CiYjNDM7CQkJCWdvdG8gb3V0X3R4YjsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJaWYgKGxlbiA9PSAwICZhbXA7JmFtcDsgIW1vcmUpCiYjNDM7CQkJCXR4Yi0mZ3Q7ZmxhZ3MgfD0gUlhSUENfTEFTVF9QQUNLRVQ7CiAJCQlyeHJwY19xdWV1ZV9wYWNrZXQocngsIGNhbGwsIHR4Yiwgbm90aWZ5X2VuZF90eCk7CiAJCQl0eGIgPSBOVUxMOwogCQl9Ci0JfSB3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpICZndDsgMCk7CiYjNDM7CX0gd2hpbGUgKGxlbiAmZ3Q7IDAgJmFtcDsmYW1wOyBtc2dfZGF0YV9sZWZ0KG1zZykgJmd0OyAwKTsKIAogc3VjY2VzczoKIAlyZXQgPSBjb3BpZWQ7Ci0JaWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgJmFtcDsmYW1wOwotCSAgICBjYWxsLSZndDtlcnJvciAmbHQ7IDApCi0JCXJldCA9IGNhbGwtJmd0O2Vycm9yOwotb3V0OgomIzQzO291dF90eGI6CiAJY2FsbC0mZ3Q7dHhfcGVuZGluZyA9IHR4YjsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtjYWxsLSZndDt1c2VyX211dGV4KTsKIAlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCByZXQpOwogCXJldHVybiByZXQ7CiAKIGNhbGxfdGVybWluYXRlZDoKIAlyeHJwY19wdXRfdHhidWYodHhiLCByeHJwY190eGJ1Zl9wdXRfc2VuZF9hYm9ydGVkKTsKLQlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCBjYWxsLSZndDtlcnJvcik7Ci0JcmV0dXJuIGNhbGwtJmd0O2Vycm9yOwotCiYjNDM7CWNhbGwtJmd0O3R4X3BlbmRpbmcgPSBOVUxMOwomIzQzOwlyZXQgPSBjYWxsLSZndDtlcnJvcjsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzO21heWJlX2Vycm9yX3Jld2luZDoKJiM0MzsJLyogSWYgd2UgZ290IGEgcmV0cnlhYmxlIGVycm9yIGFmdGVyIGNvcHlpbmcgYWxsIHRoZSBzdXBwbGllZCBkYXRhIGludG8KJiM0MzsJICogdGhlIGxhc3QgcGFja2V0LCB3ZSBuZWVkIHRvIHJld2luZCBhcyBtdWNoIGFzIHdlIGNhbiBzbyB0aGUgY2FsbGVyCiYjNDM7CSAqIGtub3dzIHRoZXkgbmVlZCB0byByZXRyeSB0aGUgc2VuZG1zZy4KJiM0MzsJICovCiYjNDM7CWlmIChjb3BpZWQgJmFtcDsmYW1wOyAhbW9yZSAmYW1wOyZhbXA7ICFsZW4pIHsKJiM0MzsJCXVuc2lnbmVkIGludCByZXdpbmRfYnkgPSB1bWluKGNvcGllZCwgdHhiLSZndDtsZW4pOwomIzQzOwomIzQzOwkJdHhiLSZndDtzcGFjZSAgJiM0Mzs9IHJld2luZF9ieTsKJiM0MzsJCXR4Yi0mZ3Q7bGVuICAgIC09IHJld2luZF9ieTsKJiM0MzsJCXR4Yi0mZ3Q7b2Zmc2V0IC09IHJld2luZF9ieTsKJiM0MzsJCWNvcGllZCAgICAgIC09IHJld2luZF9ieTsKJiM0MzsJCWlmIChjYWxsLSZndDt0eF90b3RhbF9sZW4gIT0gLTEpCiYjNDM7CQkJY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICYjNDM7PSByZXdpbmRfYnk7CiYjNDM7CQlpb3ZfaXRlcl9yZXZlcnQoJmFtcDttc2ctJmd0O21zZ19pdGVyLCByZXdpbmRfYnkpOwomIzQzOwl9CiBtYXliZV9lcnJvcjoKLQlpZiAoY29waWVkKQomIzQzOwlpZiAoY29waWVkKSB7CiYjNDM7CQlpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY2FsbC0mZ3Q7ZXJyb3IgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gY2FsbC0mZ3Q7ZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfdHhiOwomIzQzOwkJfQogCQlnb3RvIHN1Y2Nlc3M7Ci0JZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZ290byBvdXRfdHhiOwogCiBlZmF1bHQ6CiAJcmV0ID0gLUVGQVVMVDsKLQlnb3RvIG91dDsKJiM0MzsJZ290byBvdXRfdHhiOwogCiB3YWl0X2Zvcl9zcGFjZToKIAlyZXQgPSAtRUFHQUlOOwogCWlmIChtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpCiAJCWdvdG8gbWF5YmVfZXJyb3I7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7Ci0JKl9kcm9wcGVkX2xvY2sgPSB0cnVlOwomIzQzOwogCXJldCA9IHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvdyhyeCwgY2FsbCwgJmFtcDt0aW1lbywKIAkJCQkgICAgICAgbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX1dBSVRBTEwpOwogCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIG1heWJlX2Vycm9yOwomIzQzOwkJZ290byBvdXRfbm9sb2NrOwogCWlmIChjYWxsLSZndDtpbnRlcnJ1cHRpYmlsaXR5ID09IFJYUlBDX0lOVEVSUlVQVElCTEUpIHsKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpICZsdDsgMCkgewogCQkJcmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTsKLQkJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfbm9sb2NrOwogCQl9CiAJfSBlbHNlIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogCX0KLQkqX2Ryb3BwZWRfbG9jayA9IGZhbHNlOwogCWdvdG8gcmVsb2FkOwomIzQzO291dF9ub2xvY2s6CiYjNDM7CV9sZWF2ZSgmIzM0OyA9ICVkIFtpbnRyXSYjMzQ7LCByZXQpOwomIzQzOwlyZXR1cm4gY29waWVkID86IHJldDsKIH0KIAogLyoKQEAgLTY2MCw3ICYjNDM7NzA3LDYgQEAgcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLAogaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGw7Ci0JYm9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zIHAgPSB7CkBAIC03NjksMTYgJiM0Mzs4MTUsMTUgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgUlhSUENfQ01EX1NFTkRfREFUQToKLQkJcmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCwgJmFtcDtkcm9wcGVkX2xvY2spOwotCQlicmVhazsKJiM0MzsJCXJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwpOwomIzQzOwkJZ290byBlcnJvcl9wdXQ7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQogCiBvdXRfcHV0X3VubG9jazoKLQlpZiAoIWRyb3BwZWRfbG9jaykKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogZXJyb3JfcHV0OgogCXJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpOwogCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7CkBAIC04MDAsMTUgJiM0Mzs4NDUsMjEgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAgKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHNlbmQgZGF0YSBvbiBhIGNhbGwuICBUaGUgY2FsbCBtdXN0IGJlIGluIGFuIHN0YXRlCiAgKiBhcHByb3ByaWF0ZSB0byBzZW5kaW5nIGRhdGEuICBObyBjb250cm9sIGRhdGEgc2hvdWxkIGJlIHN1cHBsaWVkIGluIEBtc2csCiAgKiBub3Igc2hvdWxkIGFuIGFkZHJlc3MgYmUgc3VwcGxpZWQuICBNU0dfTU9SRSBzaG91bGQgYmUgZmxhZ2dlZCBpZiB0aGVyZSYjMzk7cwotICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZS4KJiM0MzsgKiBtb3JlIGRhdGEgdG8gY29tZSwgb3RoZXJ3aXNlIHRoaXMgZGF0YSB3aWxsIGVuZCB0aGUgdHJhbnNtaXNzaW9uIHBoYXNlIGlmCiYjNDM7ICogYWxsIHRoZSBkYXRhIGlzIGJ1ZmZlcmVkLgomIzQzOyAqCiYjNDM7ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBhIHNob3J0IHNlbmQsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJlCiYjNDM7ICogY2FsbGVkIGFnYWluIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBkYXRhIG9yIHRvIHBpY2sgdXAgYW4gZXJyb3IgdGhhdAomIzQzOyAqIGNhdXNlZCB0aGUgc2hvcnQgc2VuZC4KICAqCi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGJ1ZmZlcmVkIChjb3VsZCBiZSAlMCBpZiBAbGVuIGlzIDAgb3IKJiM0MzsgKiBtc2dfaXRlciBob2xkcyAwIGJ5dGVzKSBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKiBvdGhlcndpc2UuCiAgKi8KIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQkJICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpCiB7Ci0JYm9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJX2VudGVyKCYjMzQ7eyVkfSwmIzM0OywgY2FsbC0mZ3Q7ZGVidWdfaWQpOwpAQCAtODE5LDEyICYjNDM7ODcwLDEwIEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCW11dGV4X2xvY2soJmFtcDtjYWxsLSZndDt1c2VyX211dGV4KTsKIAogCXJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLSZndDtzayksIGNhbGwsIG1zZywgbGVuLAotCQkJICAgICAgbm90aWZ5X2VuZF90eCwgJmFtcDtkcm9wcGVkX2xvY2spOwomIzQzOwkJCSAgICAgIG5vdGlmeV9lbmRfdHgpOwogCWlmIChyZXQgPT0gLUVTSFVURE9XTikKIAkJcmV0ID0gY2FsbC0mZ3Q7ZXJyb3I7CiAKLQlpZiAoIWRyb3BwZWRfbG9jaykKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEtNU0FOIFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIGVhY2ggY2hhbmdlIHN5c3RlbWF0aWNhbGx5IGFuZCBzY3J1dGluaXplIGl0IGZvciBwb3RlbnRpYWwgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSByaXNrcy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoOyBzbG9wcHkgYW5hbHlzaXMgaGVyZSBjb3VsZCBsZWFkIHRvIGhhcmQtdG8tZGVidWcgaXNzdWVzLgoKRmlyc3QsIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIHBhdGNoIGZpbGUgYnkgZmlsZSwgbm90aW5nIHRoZSBjaGFuZ2VzLiBTbywgaXQgbG9va3MgbGlrZToKCjEuICBEb2N1bWVudGF0aW9uIGdvdCBhbiB1cGRhdGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYC4gVGhhdCYjMzk7cyBtb3N0bHkgY29zbWV0aWMsIGJ1dCBJJiMzOTtsbCBtYWtlIGEgbm90ZSBqdXN0IGluIGNhc2UgZG9jdW1lbnRhdGlvbiBpcyBjcml0aWNhbC4KMi4gIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAgaW4gYGZzL2Fmcy9jbV9zZWN1cml0eS5jYCBoYXMgYSBmaXhlZC1zaXplIGNhbGN1bGF0aW9uIGZvciBgdG9rc2l6ZWAuIE9rYXksIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGNhbGN1bGF0aW9uIGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cy4gVGhlIGNoYW5nZSB0byBhZGQgNCBieXRlcyBjb3VsZCBiZSBzaWduaWZpY2FudC4KMy4gIFNvbWUgcmVmYWN0b3Jpbmcgd2l0aCBgYWZzX21ha2Vfb3BfY2FsbGAgYW5kIHNlcnZlciBoYW5kbGluZyBpbiBgZnMvYWZzL2ludGVybmFsLmhgLiBNb3ZpbmcgdGhhdCBhbmQgYWRkaW5nIGEgc2VydmVyIHVzZSBpcyBhIGRlZmluaXRlIGFyZWEgdG8gc2NydXRpbml6ZSBmb3IgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KNC4gIFRoZXJlJiMzOTtzIGEgbG9vcCB1c2luZyBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAgaW4gYGZzL2Fmcy9yeHJwYy5jYCwgc28gaXQgd2lsbCBub3cga2VlcCBsb29waW5nIHVudGlsIGFsbCBkYXRhIGlzIHNlbnQuIEkgd2lsbCBuZWVkIHRvIGVuc3VyZSB0aGUgbG9vcCBjb25kaXRpb25zIGFuZCBkYXRhIGhhbmRsaW5nIGFyZSByb2J1c3QgYW5kIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBhcnRpYWwgd3JpdGVzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyB0aGUgaXRlcmF0aXZlIHByb2Nlc3MuCjUuICBBZGRlZCBzb21lIHRyYWNlIGV2ZW50cyBmb3IgQUZTIGFuZCBSeFJQQywgd2hpY2ggd29uJiMzOTt0IHBvc2UgS01TQU4gcmlza3MgZGlyZWN0bHkuIEJ1dCwgYW55IGV4dHJhIHRyYWNlIGV2ZW50IHNob3VsZCBzdGlsbCBiZSBjaGVja2VkIGluIGNvbnRleHQgb2Ygb3RoZXIgY2hhbmdlcy4KNi4gIFNvbWUgaW50ZXJuYWwgUnhSUEMgZnVuY3Rpb25zLCBsaWtlIGBfX3J4cnBjX25vdGlmeV9zb2NrZXRgIGFuZCBgcnhycGNfbm90aWZ5X3NvY2tldGAsIGFyZSBzZXBhcmF0ZWQuIEludGVybmFsIHJlZmFjdG9yaW5nIGNhbiBiZSBkYW5nZXJvdXMgaWYgbm90IGRvbmUgY29ycmVjdGx5LCBzbyBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBjYWxsaW5nIGNvbnRleHRzLgo3LiAgQSBuZXcgZnVuY3Rpb24gYHJ4cnBjX2dldF9jb25uZWN0aW9uX21heWJlYCBpcyBhZGRlZDsgSSYjMzk7bGwgY2hlY2sgaXRzIHVzYWdlIGFuZCBpbml0aWFsaXphdGlvbi4KOC4gIFRoZXJlJiMzOTtzIGEgY2hlY2sgZm9yIGBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGVgIGluIFJ4UlBDIGtleSBoYW5kbGluZy4gU2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzIGFyZSBhbHdheXMgd29ydGggZXh0cmEgc2NydXRpbnkuCjkuICBgcnhycGNfcmVxdWV1ZV9jYWxsYCByZXBsYWNlcyBgcnhycGNfbm90aWZ5X3NvY2tldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgaWYgaXQgaW1wYWN0cyBhbnkgZGF0YSBmbG93IG9yIGVycm9yIGhhbmRsaW5nLgoxMC4gTG9ja2luZyBhZGRlZCBpbiBgcnhnay5jYCDigJMgbG9ja2luZyBpcyBhbHdheXMgZ29vZCBidXQgY2FuIGJlIHByb2JsZW1hdGljLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGNvcnJlY3QgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucy4KMTEuIFJ4UGVyZiBhbHNvIGxvb3BzIG9uIGRhdGEgc2VuZDsgc2FtZSBjb25zaWRlcmF0aW9ucyBhcyBhYm92ZS4KMTIuICBTaWduaWZpY2FudCBjaGFuZ2VzIGluIGBuZXQvcnhycGMvc2VuZG1zZy5jYDoKICAgICogICBMb2NraW5nIGhhbmRsaW5nIHdpdGhpbiBgcnhycGNfc2VuZF9kYXRhYCBpcyBjbGVhbmVkIHVwLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgbG9jay91bmxvY2sgb3BlcmF0aW9ucyBhcmUgY29ycmVjdCBhbmQgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGxlYWQgdG8gYW55IGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuCiAgICAqICAgU2hvcnQgc2VuZHMsIHJldHVybmluZyBieXRlIGNvdW50IOKAkyBhIGNoYW5nZSBpbiBmdW5jdGlvbiBzZW1hbnRpY3MsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBsb29wIEkgbm90ZWQgYmVmb3JlLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgYnl0ZSBjb3VudCBpcyBjb3JyZWN0IGFuZCB0aGF0IGVycm9yIGhhbmRsaW5nIGlzIHNvdW5kLiBgaW92X2l0ZXJfcmV2ZXJ0YCBpbiBgbWF5YmVfZXJyb3JfcmV3aW5kYCBuZWVkcyBhIGhhcmQgbG9vay4KICAgICogICBUaGUgc2lnbmF0dXJlIGFuZCBzZW1hbnRpY3Mgb2YgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIGhhdmUgYmVlbiBtb2RpZmllZCwgd2l0aCBhIHJldHVybiB2YWx1ZSBjaGFuZ2UuIFRoZSBjYWxsZXJzIG5vdyBsb29wLiBUaGlzIGlzIGNyaXRpY2FsLCBhcyB0aGlzIGFsdGVycyBkYXRhIGZsb3csIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBuZXcgdXNhZ2UgdGhyb3VnaG91dCB0aGUga2VybmVsIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIGRhdGEuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIHB1dCBvbiBteSBLTVNBTiBoYXQuIEkmIzM5O2xsIG5lZWQgdG8gYW5zd2VyIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucyBhcyBJIHNjcnV0aW5pemUgZWFjaCBmaWxlOgoKMS4gICoqRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyoqIEkgbmVlZCB0byBsb29rIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIHNrYiBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMuIEkmIzM5O2xsIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGRhdGEgYmVpbmcgc2VudCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgemVyb2VkIG91dC4KMi4gICoqRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIEkgbmVlZCB0byBjYXJlZnVsbHkgY2hlY2sgYW55IGBpZmAgc3RhdGVtZW50cyBvciBvdGhlciBjb25kaXRpb25hbCBzdHJ1Y3R1cmVzIHRvIGVuc3VyZSB0aGF0IHRoZSB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgY29uZGl0aW9ucyBhcmUgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB0aGV5IGFyZSB1c2VkLgozLiAgKipEb2VzIHRoaXMgcGF0Y2ggYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzPyoqIEkgd2lsbCBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IGNhc2VzIHdoZXJlIG5ldyBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9jbV9zZWN1cml0eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHRcdCAqXHRhZnNfaW50MzJcdGtpbmQ7XG4gMjIxOlx0XHQgKlx0b3BhcXVlXHRcdGRhdGFcdTAwM2NBVVRIREFUQU1BWFx1MDAzZTtcbiAyMjI6XHRcdCAqXHRvcGFxdWVcdFx0ZGlzcGxheVx1MDAzY0FVVEhQUklOVEFCTEVNQVhcdTAwM2U7XG4gMjIzOlx0XHQgKiB9O1xuIDIyNDpcdFx0ICovXG4gMjI1Olx0XHR1dWlkc2l6ZSA9IHNpemVvZihzZXJ2ZXItXHUwMDNldXVpZCk7XG4gMjI2Olx0XHRhdXRoc2l6ZSA9IDQgJiM0MzsgeGRyX2xlbl9vYmplY3QodXVpZHNpemUpICYjNDM7IHhkcl9sZW5fb2JqZWN0KDApO1xuIDIyNzpcdFxuIDIyODpcdFx0Lyogc3RydWN0IFJYR0tfVG9rZW4ge1xuIDIyOTpcdFx0ICpcdHJ4Z2tfa2V5XHRcdEswO1xuIDIzMDpcdFx0ICpcdFJYR0tfTGV2ZWxcdFx0bGV2ZWw7XG4gMjMxOlx0XHQgKlx0cnhna1RpbWVcdFx0c3RhcnR0aW1lO1xuIDIzMjpcdFx0ICpcdGFmc19pbnQzMlx0XHRsaWZldGltZTtcbiAyMzM6XHRcdCAqXHRhZnNfaW50MzJcdFx0Ynl0ZWxpZmU7XG4gMjM0Olx0XHQgKlx0cnhna1RpbWVcdFx0ZXhwaXJhdGlvbnRpbWU7XG4gMjM1Olx0XHQgKlx0c3RydWN0IFJYR0tfQXV0aE5hbWVcdGlkZW50aXRpZXNcdTAwM2NcdTAwM2U7XG4gMjM2Olx0XHQgKiB9O1xuIDIzNzpcdFx0ICovXG4gMjM4Olx0XHR0b2tzaXplID0ga2V5c2l6ZSAmIzQzOyA0ICYjNDM7IDggJiM0MzsgNCAmIzQzOyA0ICYjNDM7IDggJiM0MzsgeGRyX2xlbl9vYmplY3QoYXV0aHNpemUpO1xuIDIzOTpcdFxuIDI0MDpcdFx0b2Zmc2V0ID0gMDtcbiAyNDE6XHRcdGVuY3NpemUgPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIodG9rZW5fa3JiNSwgS1JCNV9FTkNSWVBUX01PREUsIHRva3NpemUsIFx1MDAyNm9mZnNldCk7XG4gMjQyOlx0XG4gMjQzOlx0XHQvKiBzdHJ1Y3QgUlhHS19Ub2tlbkNvbnRhaW5lciB7XG4gMjQ0Olx0XHQgKlx0YWZzX2ludDMyXHRrdm5vO1xuIDI0NTpcdFx0ICpcdGFmc19pbnQzMlx0ZW5jdHlwZTtcbiAyNDY6XHRcdCAqXHRvcGFxdWVcdFx0ZW5jcnlwdGVkX3Rva2VuXHUwMDNjXHUwMDNlO1xuIDI0NzpcdFx0ICogfTtcbiAyNDg6XHRcdCAqL1xuIDI0OTpcdFx0Y29udHNpemUgPSA0ICYjNDM7IDQgJiM0MzsgeGRyX2xlbl9vYmplY3QoZW5jc2l6ZSk7XG4gMjUwOlx0XG4gMjUxOlx0XHQvKiBzdHJ1Y3QgWUZTQXBwRGF0YSB7XG4gMjUyOlx0XHQgKlx0b3ByX3V1aWRcdGluaXRpYXRvclV1aWQ7XG4gMjUzOlx0XHQgKlx0b3ByX3V1aWRcdGFjY2VwdG9yVXVpZDtcbiAyNTQ6XHRcdCAqXHRDYXBhYmlsaXRpZXNcdGNhcHM7XG4gMjU1Olx0XHQgKlx0YWZzX2ludDMyXHRlbmN0eXBlO1xuIDI1NjpcdFx0ICpcdG9wYXF1ZVx0XHRjYWxsYmFja0tleVx1MDAzY1x1MDAzZTtcbiAyNTc6XHRcdCAqXHRvcGFxdWVcdFx0Y2FsbGJhY2tUb2tlblx1MDAzY1x1MDAzZTtcbiAyNTg6XHRcdCAqIH07XG4gMjU5Olx0XHQgKi9cbiAyNjA6XHRcdGFkYXRhc2l6ZSA9IDE2ICYjNDM7IDE2ICYjNDM7XG4gMjYxOlx0XHRcdHhkcl9sZW5fb2JqZWN0KHNpemVvZihjYXBzKSkgJiM0MztcbiAyNjI6XHRcdFx0NCAmIzQzO1xuIDI2MzpcdFx0XHR4ZHJfbGVuX29iamVjdChjb25uX2tyYjUtXHUwMDNla2V5X2xlbikgJiM0MztcbiAyNjQ6XHRcdFx0eGRyX2xlbl9vYmplY3QoY29udHNpemUpO1xuIDI2NTpcdFxuIDI2NjpcdFx0cmV0ID0gLUVOT01FTTtcbiAyNjc6XHRcdGFwcGRhdGEgPSBremFsbG9jKGFkYXRhc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gMjY4Olx0XHRpZiAoIWFwcGRhdGEpXG4gMjY5Olx0XHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRva2VuIENyZWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgYFJYR0tfVG9rZW5gIHN0cnVjdCBkZWZpbml0aW9uLCBJIHNlZSBhIGZldyB0aGluZ3MgdGhhdCBpbW1lZGlhdGVseSBqdW1wIG91dC4gSSByZW1lbWJlciBmcm9tIG15IHByaW9yIGV4cGVyaWVuY2UgdGhhdCB0aGUgc3RydWN0IGNvbW1lbnQgaXRzZWxmIGlzIGtleS4gU3BlY2lmaWNhbGx5LCB0aGUgc3RydWN0IGhhcyBgSzBgLCBgbGV2ZWxgLCBgc3RhcnR0aW1lYCwgYGxpZmV0aW1lYCwgYGJ5dGVsaWZlYCwgYGV4cGlyYXRpb250aW1lYCwgYW5kIHRoZW4gYGlkZW50aXRpZXNgLCB3aGljaCBpcyBhIHZhcmlhYmxlLWxlbmd0aCBhcnJheSBiYXNlZCBvbiBgYXV0aHNpemVgLgoKSSBzZWUgdGhhdCB0aGVyZSB3YXMgYSBwcmV2aW91cyBlcnJvciBpbiBjYWxjdWxhdGluZyBgdG9rc2l6ZWAuIFRoZSBjb21tZW50IHNheXMgdGhlIGlzc3VlIHdhcyB0aGF0IHRoZSBzaXplIGNhbGN1bGF0aW9uIHdhcyBtaXNzaW5nIDQgYnl0ZXMgZm9yIHRoZSBgUlhHS19MZXZlbCBsZXZlbGAgZmllbGQuIFNvLCB0aGUgb2xkIGB0b2tzaXplYCBhbGxvY2F0aW9uIHdvdWxkIGhhdmUgYmVlbiBpbnN1ZmZpY2llbnQuIFRoZSBhZGRpdGlvbiBvZiBgJiM0MzsgNGAgdG8gdGhlIGNhbGN1bGF0aW9uIG5vdyBjb3JyZWN0cyB0aGlzIGJ5IGluY2x1ZGluZyB0aGUgc2l6ZSBvZiBgUlhHS19MZXZlbCBsZXZlbGAsIGVuc3VyaW5nIHdlIGFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlIGVudGlyZSB0b2tlbiBzdHJ1Y3R1cmUuIFRoZSB0b2tlbiBhbGxvY2F0aW9uIHNpemUgc2VlbXMgZ29vZCBub3cuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBgdG9rYCB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlIHRva2VuIGl0c2VsZiwgaXMgYWxsb2NhdGVkIGFuZCBob3cgaXRzIGZpZWxkcyBhcmUgcG9wdWxhdGVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9jbV9zZWN1cml0eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdHhkciA9IGFwcGRhdGE7XG4gMjcxOlx0XG4gMjcyOlx0XHRtZW1jcHkoeGRyLCBcdTAwMjZuZXQtXHUwMDNldXVpZCwgMTYpO1x0XHQvKiBhcHBkYXRhLmluaXRpYXRvclV1aWQgKi9cbiAyNzM6XHRcdHhkciAmIzQzOz0gMTYgLyA0O1xuIDI3NDpcdFx0bWVtY3B5KHhkciwgXHUwMDI2c2VydmVyLVx1MDAzZXV1aWQsIDE2KTtcdFx0LyogYXBwZGF0YS5hY2NlcHRvclV1aWQgKi9cbiAyNzU6XHRcdHhkciAmIzQzOz0gMTYgLyA0O1xuIDI3NjpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubChBUlJBWV9TSVpFKGNhcHMpKTtcdC8qIGFwcGRhdGEuY2Fwcy5sZW4gKi9cbiAyNzc6XHRcdG1lbWNweSh4ZHIsIFx1MDAyNmNhcHMsIHNpemVvZihjYXBzKSk7XHQvKiBhcHBkYXRhLmNhcHMgKi9cbiAyNzg6XHRcdHhkciAmIzQzOz0gQVJSQVlfU0laRShjYXBzKTtcbiAyNzk6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwoY29ubl9rcmI1LVx1MDAzZWV0eXBlKTtcdC8qIGFwcGRhdGEuZW5jdHlwZSAqL1xuIDI4MDpcdFxuIDI4MTpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubChjb25uX2tyYjUtXHUwMDNla2V5X2xlbik7XHQvKiBhcHBkYXRhLmNhbGxiYWNrS2V5LmxlbiAqL1xuIDI4MjpcdFx0SzAgPSB4ZHI7XG4gMjgzOlx0XHRnZXRfcmFuZG9tX2J5dGVzKEswLCBjb25uX2tyYjUtXHUwMDNla2V5X2xlbik7IC8qIGFwcGRhdGEuY2FsbGJhY2tLZXkuZGF0YSAqL1xuIDI4NDpcdFx0eGRyICYjNDM7PSB4ZHJfcm91bmRfdXAoY29ubl9rcmI1LVx1MDAzZWtleV9sZW4pIC8gNDtcbiAyODU6XHRcbiAyODY6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwoY29udHNpemUpO1x0XHQvKiBhcHBkYXRhLmNhbGxiYWNrVG9rZW4ubGVuICovXG4gMjg3Olx0XHQqeGRyJiM0MzsmIzQzOyA9IGh0b25sKDEpO1x0XHRcdC8qIGNvbnQua3ZubyAqL1xuIDI4ODpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCh0b2tlbl9rcmI1LVx1MDAzZWV0eXBlKTtcdC8qIGNvbnQuZW5jdHlwZSAqL1xuIDI4OTpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubChlbmNzaXplKTtcdFx0LyogY29udC5lbmNyeXB0ZWRfdG9rZW4ubGVuICovXG4gMjkwOlx0XG4gMjkxOlx0XHRlbmNiYXNlID0geGRyO1xuIDI5MjpcdFx0eGRyICYjNDM7PSBvZmZzZXQgLyA0O1xuIDI5MzpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubChjb25uX2tyYjUtXHUwMDNlZXR5cGUpO1x0LyogdG9rZW4uSzAuZW5jdHlwZSAqL1xuIDI5NDpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubChjb25uX2tyYjUtXHUwMDNla2V5X2xlbik7XHQvKiB0b2tlbi5LMC5rZXkubGVuICovXG4gMjk1Olx0XHRtZW1jcHkoeGRyLCBLMCwgY29ubl9rcmI1LVx1MDAzZWtleV9sZW4pO1x0LyogdG9rZW4uSzAua2V5LmRhdGEgKi9cbiAyOTY6XHRcdHhkciAmIzQzOz0geGRyX3JvdW5kX3VwKGNvbm5fa3JiNS1cdTAwM2VrZXlfbGVuKSAvIDQ7XG4gMjk3Olx0XG4gMjk4Olx0XHQqeGRyJiM0MzsmIzQzOyA9IGh0b25sKFJYUlBDX1NFQ1VSSVRZX0VOQ1JZUFQpO1x0LyogdG9rZW4ubGV2ZWwgKi9cbiAyOTk6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwoMCk7XHRcdFx0LyogdG9rZW4uc3RhcnR0aW1lICovXG4gMzAwOlx0XHQqeGRyJiM0MzsmIzQzOyA9IGh0b25sKDApO1x0XHRcdC8qIFwmIzM0OyAqL1xuIDMwMTpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCgwKTtcdFx0XHQvKiB0b2tlbi5saWZldGltZSAqL1xuIDMwMjpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCgwKTtcdFx0XHQvKiB0b2tlbi5ieXRlbGlmZSAqL1xuIDMwMzpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCgwKTtcdFx0XHQvKiB0b2tlbi5leHBpcmF0aW9udGltZSAqL1xuIDMwNDpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCgwKTtcdFx0XHQvKiBcJiMzNDsgKi9cbiAzMDU6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwoMSk7XHRcdFx0LyogdG9rZW4uaWRlbnRpdGllcy5jb3VudCAqL1xuIDMwNjpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCgwKTtcdFx0XHQvKiB0b2tlbi5pZGVudGl0aWVzWzBdLmtpbmQgKi9cbiAzMDc6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwodXVpZHNpemUpO1x0XHQvKiB0b2tlbi5pZGVudGl0aWVzWzBdLmRhdGEubGVuICovXG4gMzA4Olx0XHRtZW1jcHkoeGRyLCBcdTAwMjZzZXJ2ZXItXHUwMDNldXVpZCwgdXVpZHNpemUpO1xuIDMwOTpcdFx0eGRyICYjNDM7PSB4ZHJfcm91bmRfdXAodXVpZHNpemUpIC8gNDtcbiAzMTA6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwoMCk7XHRcdFx0LyogdG9rZW4uaWRlbnRpdGllc1swXS5kaXNwbGF5LmxlbiAqL1xuIDMxMTpcdFxuIDMxMjpcdFx0eGRyID0gZW5jYmFzZSAmIzQzOyB4ZHJfcm91bmRfdXAoZW5jc2l6ZSk7XG4gMzEzOlx0XG4gMzE0Olx0XHRpZiAoKHVuc2lnbmVkIGxvbmcpeGRyIC0gKHVuc2lnbmVkIGxvbmcpYXBwZGF0YSAhPSBhZGF0YXNpemUpXG4gMzE1Olx0XHRcdHByX2VycihcJiMzNDtBcHBkYXRhIHNpemUgaW5jb3JyZWN0ICVseCAhPSAlenhcXG5cJiMzNDssXG4gMzE2Olx0XHRcdCAgICAgICAodW5zaWduZWQgbG9uZyl4ZHIgLSAodW5zaWduZWQgbG9uZylhcHBkYXRhLCBhZGF0YXNpemUpO1xuIDMxNzpcdFxuIDMxODpcdFx0YWVhZCA9IGNyeXB0b19rcmI1X3ByZXBhcmVfZW5jcnlwdGlvbih0b2tlbl9rcmI1LCB0b2tlbl9rZXksIFJYR0tfU0VSVkVSX0VOQ19UT0tFTixcbiAzMTk6XHRcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVmZmVyIFNpemUgQ2FsY3VsYXRpb24gRml4KioKCk9rYXksIHNvIHRoZSBmaXggaXMgaW4gZm9yIGEgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24gZXJyb3IgcmVsYXRlZCB0byBgdG9rc2l6ZWAuIFRoZSBtZW1vcnkgd2FzIGluaXRpYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLCBtZWFuaW5nIGV2ZXJ5dGhpbmcgc3RhcnRlZCBvdXQgemVyb2VkLiBUaGUgYnVnIHdhcyBpbiBmYWlsaW5nIHRvIGFjY291bnQgZm9yIHRoZSA0LWJ5dGUgYGxldmVsYCBmaWVsZCB0aGF0IGdldHMgd3JpdHRlbiBsYXRlciwgYXMgZXZpZGVuY2VkIGJ5IHRoZSBgaHRvbmwoUlhSUENfU0VDVVJJVFlfRU5DUllQVClgIGNhbGwgb24gbGluZSAyOTguIEVzc2VudGlhbGx5LCB3ZSB3ZXJlIHVuZGVyLWFsbG9jYXRpbmcsIGV2ZW4gdGhvdWdoIHRoZSBjb25zZXF1ZW5jZXMgd2VyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBkdWUgdG8gdGhlIHplcm8gaW5pdGlhbGl6YXRpb24uIEl0IGxvb2tzIGxpa2UgaXQgd2FzIG9ubHkgZml4aW5nIGEgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24sIG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uLCBidXQgaXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIGhvdyB0aGUgYnVmZmVyIHdpbGwgYmUgdXNlZC4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBUaW1lIHRvIHRob3JvdWdobHkgYW5hbHl6ZSBgbmV0L3J4cnBjL3NlbmRtc2cuY2AgYW5kIHJlbGF0ZWQgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBmdXJ0aGVyIGlzc3VlcyBsdXJraW5nLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L3J4cnBjL3NlbmRtc2cuY2AgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9zZW5kbXNnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0ICAgIHN0YXRlICE9IFJYUlBDX0NBTExfU0VSVkVSX1NFTkRfUkVQTFkpIHtcbiAzODE6XHRcdFx0LyogUmVxdWVzdCBwaGFzZSBjb21wbGV0ZSBmb3IgdGhpcyBjbGllbnQgY2FsbCAqL1xuIDM4MjpcdFx0XHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVx1MDAzZWRlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcbiAzODM6XHRcdFx0XHRcdCAgY2FsbC1cdTAwM2VjaWQsIGNhbGwtXHUwMDNlY2FsbF9pZCwgY2FsbC1cdTAwM2VyeF9jb25zdW1lZCxcbiAzODQ6XHRcdFx0XHRcdCAgMCwgLUVQUk9UTyk7XG4gMzg1Olx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4gMzg2Olx0XHR9XG4gMzg3Olx0XG4gMzg4Olx0XHRyZXQgPSAtRU1TR1NJWkU7XG4gMzg5Olx0XHRpZiAoY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4gIT0gLTEpIHtcbiAzOTA6XHRcdFx0aWYgKGxlbiBcdTAwM2UgY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4gMzkxOlx0XHRcdFx0Z290byBtYXliZV9lcnJvcjtcbiAzOTI6XHRcdFx0aWYgKCFtb3JlIFx1MDAyNlx1MDAyNiBsZW4gIT0gY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4gMzkzOlx0XHRcdFx0Z290byBtYXliZV9lcnJvcjtcbiAzOTQ6XHRcdH1cbiAzOTU6XHRcbiAzOTY6XHRcdGRvIHtcbiAzOTc6XHRcdFx0aWYgKCF0eGIpIHtcbiAzOTg6XHRcdFx0XHRzaXplX3QgcmVtYWluO1xuIDM5OTpcdFxuIDQwMDpcdFx0XHRcdF9kZWJ1ZyhcJiMzNDthbGxvY1wmIzM0Oyk7XG4gNDAxOlx0XG4gNDAyOlx0XHRcdFx0aWYgKCFyeHJwY19jaGVja190eF9zcGFjZShjYWxsLCBOVUxMKSlcbiA0MDM6XHRcdFx0XHRcdGdvdG8gd2FpdF9mb3Jfc3BhY2U7XG4gNDA0Olx0XG4gNDA1Olx0XHRcdFx0LyogU2VlIGlmIHdlIG5lZWQgdG8gYmVnaW4vZXh0ZW5kIHRoZSBUeCBxdWV1ZS4gKi9cbiA0MDY6XHRcdFx0XHRpZiAoIWNhbGwtXHUwMDNlc2VuZF9xdWV1ZSB8fCAhKChjYWxsLVx1MDAzZXNlbmRfdG9wICYjNDM7IDEpIFx1MDAyNiBSWFJQQ19UWFFfTUFTSykpIHtcbiA0MDc6XHRcdFx0XHRcdHJldCA9IHJ4cnBjX2FsbG9jX3R4cXVldWUoc2ssIGNhbGwpO1xuIDQwODpcdFx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA0MDk6XHRcdFx0XHRcdFx0Z290byBtYXliZV9lcnJvcjtcbiA0MTA6XHRcdFx0XHR9XG4gNDExOlx0XG4gNDEyOlx0XHRcdFx0LyogV29yayBvdXQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIHBhY2tldC4gIEFzc3VtZSB0aGF0XG4gNDEzOlx0XHRcdFx0ICogdGhlIHNlY3VyaXR5IGhlYWRlciBpcyBnb2luZyB0byBiZSBpbiB0aGUgcGFkZGVkXG4gNDE0Olx0XHRcdFx0ICogcmVnaW9uIChlbmMgYmxvY2tzaXplKSwgYnV0IHRoZSB0cmFpbGVyIGlzIG5vdC5cbiA0MTU6XHRcdFx0XHQgKi9cbiA0MTY6XHRcdFx0XHRyZW1haW4gPSBtb3JlID8gSU5UX01BWCA6IGxlbjtcbiA0MTc6XHRcdFx0XHR0eGIgPSBjYWxsLVx1MDAzZWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlYWxsb2NfdHhidWYoY2FsbCwgcmVtYWluLCBzay1cdTAwM2Vza19hbGxvY2F0aW9uKTtcbiA0MTg6XHRcdFx0XHRpZiAoIXR4Yikge1xuIDQxOTpcdFx0XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA0MjA6XHRcdFx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4gNDIxOlx0XHRcdFx0fVxuIDQyMjpcdFx0XHR9XG4gNDIzOlx0XG4gNDI0Olx0XHRcdF9kZWJ1ZyhcJiMzNDthcHBlbmRcJiMzNDspO1xuIDQyNTpcdFxuIDQyNjpcdFx0XHQvKiBhcHBlbmQgbmV4dCBzZWdtZW50IG9mIGRhdGEgdG8gdGhlIGN1cnJlbnQgYnVmZmVyICovXG4gNDI3Olx0XHRcdGlmIChsZW4gXHUwMDNlIDApIHtcbiA0Mjg6XHRcdFx0XHRzaXplX3QgY29weSA9IG1pbjModHhiLVx1MDAzZXNwYWNlLCBsZW4sIG1zZ19kYXRhX2xlZnQobXNnKSk7XG4gNDI5Olx0XG4gNDMwOlx0XHRcdFx0X2RlYnVnKFwmIzM0O2FkZCAlenVcJiMzNDssIGNvcHkpO1xuIDQzMTpcdFx0XHRcdGlmICghY29weV9mcm9tX2l0ZXJfZnVsbCh0eGItXHUwMDNlZGF0YSAmIzQzOyB0eGItXHUwMDNlb2Zmc2V0LFxuIDQzMjpcdFx0XHRcdFx0XHRcdCBjb3B5LCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIpKVxuIDQzMzpcdFx0XHRcdFx0Z290byBlZmF1bHQ7XG4gNDM0Olx0XHRcdFx0X2RlYnVnKFwmIzM0O2FkZGVkXCYjMzQ7KTtcbiA0MzU6XHRcdFx0XHR0eGItXHUwMDNlc3BhY2UgLT0gY29weTtcbiA0MzY6XHRcdFx0XHR0eGItXHUwMDNlbGVuICYjNDM7PSBjb3B5O1xuIDQzNzpcdFx0XHRcdHR4Yi1cdTAwM2VvZmZzZXQgJiM0Mzs9IGNvcHk7XG4gNDM4Olx0XHRcdFx0Y29waWVkICYjNDM7PSBjb3B5O1xuIDQzOTpcdFx0XHRcdGxlbiAtPSBjb3B5O1xuIDQ0MDpcdFx0XHRcdGlmIChjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSlcbiA0NDE6XHRcdFx0XHRcdGNhbGwtXHUwMDNldHhfdG90YWxfbGVuIC09IGNvcHk7XG4gNDQyOlx0XHRcdH1cbiA0NDM6XHRcbiA0NDQ6XHRcdFx0LyogY2hlY2sgZm9yIHRoZSBmYXIgc2lkZSBhYm9ydGluZyB0aGUgY2FsbCBvciBhIG5ldHdvcmsgZXJyb3JcbiA0NDU6XHRcdFx0ICogb2NjdXJyaW5nICovXG4gNDQ2Olx0XHRcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpKVxuIDQ0NzpcdFx0XHRcdGdvdG8gY2FsbF90ZXJtaW5hdGVkO1xuIDQ0ODpcdFxuIDQ0OTpcdFx0XHQvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCYjMzk7cyBub3cgZnVsbCAqL1xuIDQ1MDpcdFx0XHRpZiAoIXR4Yi1cdTAwM2VzcGFjZSB8fFxuIDQ1MTpcdFx0XHQgICAgKGxlbiA9PSAwIFx1MDAyNlx1MDAyNiAhbW9yZSkpIHtcbiA0NTI6XHRcdFx0XHQvKiBEbyBhbnkgcmVxdWlyZWQgY3J5cHRvLiAgSWYgdGhpcyBmYWlscywgaXQgY291bGRcbiA0NTM6XHRcdFx0XHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxuIDQ1NDpcdFx0XHRcdCAqIGVuY3J5cHQuICBBc3N1bWUgdGhhdCBFTk9NRU0gaXMgcmV0cnlhYmxlLCBidXRcbiA0NTU6XHRcdFx0XHQgKiBldmVyeXRoaW5nIGVsc2UgaXMgdGVybWluYWwuXG4gNDU2Olx0XHRcdFx0ICovXG4gNDU3Olx0XHRcdFx0cmV0ID0gY2FsbC1cdTAwM2VzZWN1cml0eS1cdTAwM2VzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7XG4gNDU4Olx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDQ1OTpcdFx0XHRcdFx0LyogQXNzdW1lIHRoYXQgRU5PTUVNIGhlcmUgbWVhbnMgdGhhdCB0aGVcbiA0NjA6XHRcdFx0XHRcdCAqIGVuY3J5cHRpb24gaGFzbiYjMzk7dCBoYXBwZW5lZCB5ZXQuICBUaGUgZGF0YSBpc1xuIDQ2MTpcdFx0XHRcdFx0ICogYWxpZ25lZCB0byBhdm9pZCB0aGUgbmVlZCBmb3Igc2xvdyBidWZmZXJpbmdcbiA0NjI6XHRcdFx0XHRcdCAqIGluIHRoZSBjcnlwdG8gd2Fsay5cbiA0NjM6XHRcdFx0XHRcdCAqL1xuIDQ2NDpcdFx0XHRcdFx0aWYgKHJldCA9PSAtRU5PTUVNKVxuIDQ2NTpcdFx0XHRcdFx0XHRnb3RvIG1heWJlX2Vycm9yX3Jld2luZDtcbiA0NjY6XHRcdFx0XHRcdHNldF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncyk7XG4gNDY3Olx0XHRcdFx0XHRnb3RvIG91dF90eGI7XG4gNDY4Olx0XHRcdFx0fVxuIDQ2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMwOQoJCQkJCQkJb3V0cHV0OiAzMjgKCQkJCQkJCXRob3VnaHRzOiAxNzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFJ4UlBDIFBhdGNoIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIFJ4UlBDIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBgTmVlZHNLTVNBTj10cnVlYCBmbGFnLiBNeSBmb2N1cyBpcyBvbiBpZGVudGlmeWluZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgdGhpcyBhcmVhLgoKRmlyc3QsIEkgZXhhbWluZWQgYGFsbG9jX3R4YnVmYCBhbmQgYHNlY3VyZV9wYWNrZXRgIHdpdGhpbiBgcnhycGNgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBjb3B5X2Zyb21faXRlcl9mdWxsYCBjYWxsLCBjb3B5aW5nIGRhdGEgaW50byB0aGUgdHJhbnNtaXQgYnVmZmVyIChgdHhiYCkuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCB0aGUgYHR4Yi0mZ3Q7bGVuYCBpcyAqb25seSogaW5jcmVtZW50ZWQgYnkgdGhlIGNvcGllZCBhbW91bnQgYW5kIHRoYXQgdGhlIGByeHJwY19xdWV1ZV9wYWNrZXRgIGZ1bmN0aW9uIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGFtb3VudCBjb3BpZWQuIEFsc28sIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCBub3cgcmV0dXJucyB0aGUgKm51bWJlciBvZiBieXRlcyBidWZmZXJlZCogd2hpY2ggaW5kaWNhdGVzIHN1Y2Nlc3MgLSBub3QgemVybyAtIHNvIHRoZXJlIGlzIG5vIGNvbmNlcm4gdGhlcmUuCgpOZXh0LCBJIGxvb2tlZCBhdCBob3cgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIGlzIHVzZWQgaW4gc2V2ZXJhbCBgZnMvYWZzL3J4cnBjLmNgIGZ1bmN0aW9uczogYGFmc19tYWtlX2NhbGxgLCBgYWZzX3NlbmRfZW1wdHlfcmVwbHlgLCBgYWZzX3NlbmRfc2ltcGxlX3JlcGx5YCwgYW5kIGByeHBlcmZfcHJvY2Vzc19jYWxsYC4gRWFjaCB1c2VzIGEgYGRvLi4ud2hpbGVgIGxvb3AgdGhhdCBjYWxscyBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAgcmVwZWF0ZWRseSB1bnRpbCBhbGwgdGhlIG1lc3NhZ2UgZGF0YSBpcyBzZW50LiBUaGUgbG9vcCBjb25kaXRpb25zIChgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwYCBvciBgbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwYCkgYXBwZWFyIHNvdW5kOyBpZiBhIG5lZ2F0aXZlIHJldHVybiBjb2RlIGlzIHJldHVybmVkLCB0aGUgbG9vcCBpcyBleGl0ZWQuIGByZXRgIGFuZCBgbmAgYXJlIGFzc2lnbmVkIGJlZm9yZSB1c2UgYW5kIHRoZWlyIHVzYWdlIGlzIGNoZWNrZWQuCgpOb3csIHRoZSByZWFsIGxpdG11cyB0ZXN0OiB0aGUgZm91ciBLTVNBTiBjcml0ZXJpYS4KCjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlOioqIEkmIzM5O20gbWV0aWN1bG91c2x5IGxvb2tpbmcgZm9yIGFueSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGwsIG9yIEJQRiBjaGFuZ2VzLiBUaGUgcGF0Y2ggaGFzIGByeHJwY19yZXF1ZXVlX2NhbGxgLCBgX19yeHJwY19ub3RpZnlfc29ja2V0YCwgYHJ4cnBjX25vdGlmeV9zb2NrZXRgIGluIGByZWN2bXNnLmNgIGFuZCBgY2FsbF9zdGF0ZS5jYCBidXQgdGhlc2UgYXBwZWFyIHRvIGJlIGludGVybmFsIG5vdGlmaWNhdGlvbnMsIG5vdCBkaXJlY3QgdXNlci1mYWNpbmcgY29waWVzLiBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYCBpbiBga2V5LmNgIHJldHVybnMgYHJldGAgd2hpY2ggaXMgYXNzaWduZWQgd2l0aCBgLUVLRVlSRUpFQ1RFRGAgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgY2hlY2tlZC4gVGhlIGB0b2tzaXplYCBjYWxjdWxhdGlvbiBmaXggaW4gYGNtX3NlY3VyaXR5LmNgIGlzIGltcG9ydGFudCB0byBjb25maXJtIHRoZXJlIGFyZSBubyBidWZmZXIgb3ZlcmZsb3dzIG9yIHNpbWlsYXIgYnVncy4KMi4gICoqQ29uZGl0aW9uYWwgTG9naWMvQnJhbmNoaW5nOioqIEkmIzM5O20gaW5zcGVjdGluZyBhbGwgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgc3RhdGVtZW50cyB0byBlbnN1cmUgdGhleSYjMzk7cmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGNvZGUgdXNlcyBgcmV0YCBhbmQgYG5gIHdoaWNoIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGluIGFsbCBpbnN0YW5jZXMsIGFzIHdlbGwgYXMgYHJld2luZF9ieWAgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgYnkgYHVtaW4oY29waWVkLCB0eGItJmd0O2xlbilgLgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBJJiMzOTttIGNoZWNraW5nIGZvciBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgZXhhbXBsZXMgb2YgdGhpcyBoZXJlLgo0LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBUaGUgYHNlbmRtc2cuY2AgY2hhbmdlcyBtZXRpY3Vsb3VzbHkgdHJhY2sgYGxlbmAgYW5kIGBtc2dfZGF0YV9sZWZ0KG1zZylgLiBUaGUgY29kZSBpcyBjYXJlZnVsIHdpdGggYG1pbjModHhiLSZndDtzcGFjZSwgbGVuLCBtc2dfZGF0YV9sZWZ0KG1zZykpYCBhbmQgZGF0YSBpcyBjb3BpZWQgZGlyZWN0bHkgZnJvbSBgbXNnX2l0ZXJgLiBObyB1bmluaXRpYWxpemVkIGJ5dGVzIGFyZSBiZWluZyBhY2Nlc3NlZCBvciB0cmFuc21pdHRlZC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBkb3VibGUtY2hlY2tlZCAqYWxsKiB0aGUgZGlmZiBodW5rcy4gSSByZXZpZXdlZCB0aGUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RgKSBhbmQgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzIGxpa2UgZml4ZXMgdG8gYHRva3NpemVgIGNhbGN1bGF0aW9uIChgZnMvYWZzL2NtX3NlY3VyaXR5LmNgKSwgaW5saW5lIGZ1bmN0aW9uIG1vdmVzIChgZnMvYWZzL2ludGVybmFsLmhgKSwgdGhlIGxvb3BzIHdpdGggYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIGluIGBmcy9hZnMvcnhycGMuY2AsIHRyYWNlIGV2ZW50cywgZGVjbGFyYXRpb25zIGFuZCBmbGFnIGVudW1zIChgbmV0L3J4cnBjL2FyLWludGVybmFsLmhgKSwgc29ja2V0IG5vdGlmaWNhdGlvbiBsb2dpYyBjbGVhbnVwLCBudWxsL3JlZiBjaGVja3MsICBgY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlYCB2YWxpZGF0aW9uLCBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgbG9ja2luZy4KCkJhc2VkIG9uIHRoaXMgY29tcHJlaGVuc2l2ZSByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSAqbm8qIGRpcmVjdCByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBrZXJuZWwgcHJvdGVjdGlvbnMgKEtBU0FOLCBMT0NLREVQLCBldGMuKSBzaG91bGQgY2F0Y2ggYW55IG90aGVyIHBvdGVudGlhbCBpc3N1ZXMuIFRoZXJlZm9yZSwgSSYjMzk7bSByZWNvbW1lbmRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhhdCwgYWxvbmcgd2l0aCB0aGlzIGRldGFpbGVkIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBRl9SWFJQQyBhbmQgQUZTIG5ldHdvcmtpbmcgY29kZSB0byBzdXBwb3J0IHNob3J0IHdyaXRlcyBpbiByeHJwY19rZXJuZWxfc2VuZF9kYXRhLCBsb29wIHVudGlsIGZ1bGwgbWVzc2FnZSBjb25zdW1wdGlvbiBpbiBBRlMvcnhwZXJmIGNhbGxlcnMsIHNpbXBsaWZ5IGxvY2tpbmcgYXJvdW5kIHJ4cnBjX3NlbmRfZGF0YSwgZml4IHRoZSB0b2tzaXplIGNhbGN1bGF0aW9uIGZvciBZRlMgQ00gdG9rZW5zLCBhZGQgZW5jcnlwdGlvbiB0eXBlIHZhbGlkYXRpb24gZm9yIFlGUyBrZXlzLCBhbmQgY2xlYW4gdXAgc29ja2V0IG5vdGlmaWNhdGlvbiBhbmQgY29ubmVjdGlvbiByZWZjb3VudGluZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzOlxuLSBUaGUgdG9rZW4gYnVmZmVyIGluIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCB6ZXJvaW5nIGFsbCBieXRlczsgdGhlIGZpeCBtZXJlbHkgYWNjb3VudHMgZm9yIHRoZSA0LWJ5dGUgYGxldmVsYCBmaWVsZCBpbiBgdG9rc2l6ZWAuXG4tIEluIGByeHJwY19zZW5kX2RhdGFgLCBkYXRhIHRyYW5zZmVyIGNvbnRpbnVlcyB0byB1c2UgYGNvcHlfZnJvbV9pdGVyX2Z1bGxgIHdpdGggYm91bmRlZCBjb3B5IHNpemVzIChgbWluM2ApLCBhbmQgZXJyb3ItcmV3aW5kIGxvZ2ljIHVwZGF0ZXMgYnl0ZSBjb3VudGVycyBhcHByb3ByaWF0ZWx5LlxuLSBMb2NhbCB2YXJpYWJsZXMgYWNyb3NzIG1vZGlmaWVkIGZ1bmN0aW9ucyAoYHJldGAsIGBuYCwgYHJld2luZF9ieWAsIGV0Yy4pIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIGJlZm9yZSB1c2UuXG4tIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlICh2aWEgYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBldGMuKSBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLlxuXG5BbnkgY29uY3VycmVuY3ksIHJlZmNvdW50aW5nLCBvciBib3VuZHMgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgYXJlIGZ1bGx5IGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWcgYnVpbGRzIChLQVNBTiwgTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQUZfUlhSUEMgYW5kIEFGUyBuZXR3b3JraW5nIGNvZGUgdG8gc3VwcG9ydCBzaG9ydCB3cml0ZXMgaW4gcnhycGNfa2VybmVsX3NlbmRfZGF0YSwgbG9vcCB1bnRpbCBmdWxsIG1lc3NhZ2UgY29uc3VtcHRpb24gaW4gQUZTL3J4cGVyZiBjYWxsZXJzLCBzaW1wbGlmeSBsb2NraW5nIGFyb3VuZCByeHJwY19zZW5kX2RhdGEsIGZpeCB0aGUgdG9rc2l6ZSBjYWxjdWxhdGlvbiBmb3IgWUZTIENNIHRva2VucywgYWRkIGVuY3J5cHRpb24gdHlwZSB2YWxpZGF0aW9uIGZvciBZRlMga2V5cywgYW5kIGNsZWFuIHVwIHNvY2tldCBub3RpZmljYXRpb24gYW5kIGNvbm5lY3Rpb24gcmVmY291bnRpbmcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcbi0gVGhlIHRva2VuIGJ1ZmZlciBpbiBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgemVyb2luZyBhbGwgYnl0ZXM7IHRoZSBmaXggbWVyZWx5IGFjY291bnRzIGZvciB0aGUgNC1ieXRlIGBsZXZlbGAgZmllbGQgaW4gYHRva3NpemVgLlxuLSBJbiBgcnhycGNfc2VuZF9kYXRhYCwgZGF0YSB0cmFuc2ZlciBjb250aW51ZXMgdG8gdXNlIGBjb3B5X2Zyb21faXRlcl9mdWxsYCB3aXRoIGJvdW5kZWQgY29weSBzaXplcyAoYG1pbjNgKSwgYW5kIGVycm9yLXJld2luZCBsb2dpYyB1cGRhdGVzIGJ5dGUgY291bnRlcnMgYXBwcm9wcmlhdGVseS5cbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxuLSBObyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nL3N0cnVjdCBmaWVsZHMgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZC5cblxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjIzLjI2NTIyMjcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg5MjQyOTQzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZfUlhSUENcIixcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiUlhHS1wiLFxuICAgIFwiUlhQRVJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnhycGNfc2VuZF9kYXRhXCIsXG4gICAgXCJyeHJwY19kb19zZW5kbXNnXCIsXG4gICAgXCJyeHJwY19rZXJuZWxfc2VuZF9kYXRhXCIsXG4gICAgXCJyeHJwY19yZWN2bXNnXCIsXG4gICAgXCJyeHJwY19ub3RpZnlfc29ja2V0XCIsXG4gICAgXCJyeHJwY19wb2tlX2Nvbm5cIixcbiAgICBcInJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhna1wiLFxuICAgIFwicnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHlcIixcbiAgICBcImFmc19tYWtlX2NhbGxcIixcbiAgICBcImFmc19zZW5kX3NpbXBsZV9yZXBseVwiLFxuICAgIFwiYWZzX3NlbmRfZW1wdHlfcmVwbHlcIixcbiAgICBcImFmc19jcmVhdGVfeWZzX2NtX3Rva2VuXCIsXG4gICAgXCJyeHBlcmZfcHJvY2Vzc19jYWxsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEFGX1JYUlBDIGFuZCBBRlMgbmV0d29ya2luZyBjb2RlIHRvIHN1cHBvcnQgc2hvcnQgd3JpdGVzIGluIHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEsIGxvb3AgdW50aWwgZnVsbCBtZXNzYWdlIGNvbnN1bXB0aW9uIGluIEFGUy9yeHBlcmYgY2FsbGVycywgc2ltcGxpZnkgbG9ja2luZyBhcm91bmQgcnhycGNfc2VuZF9kYXRhLCBmaXggdGhlIHRva3NpemUgY2FsY3VsYXRpb24gZm9yIFlGUyBDTSB0b2tlbnMsIGFkZCBlbmNyeXB0aW9uIHR5cGUgdmFsaWRhdGlvbiBmb3IgWUZTIGtleXMsIGFuZCBjbGVhbiB1cCBzb2NrZXQgbm90aWZpY2F0aW9uIGFuZCBjb25uZWN0aW9uIHJlZmNvdW50aW5nLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcXG4tIFRoZSB0b2tlbiBidWZmZXIgaW4gYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHplcm9pbmcgYWxsIGJ5dGVzOyB0aGUgZml4IG1lcmVseSBhY2NvdW50cyBmb3IgdGhlIDQtYnl0ZSBgbGV2ZWxgIGZpZWxkIGluIGB0b2tzaXplYC5cXG4tIEluIGByeHJwY19zZW5kX2RhdGFgLCBkYXRhIHRyYW5zZmVyIGNvbnRpbnVlcyB0byB1c2UgYGNvcHlfZnJvbV9pdGVyX2Z1bGxgIHdpdGggYm91bmRlZCBjb3B5IHNpemVzIChgbWluM2ApLCBhbmQgZXJyb3ItcmV3aW5kIGxvZ2ljIHVwZGF0ZXMgYnl0ZSBjb3VudGVycyBhcHByb3ByaWF0ZWx5Llxcbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxcbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuXFxuXFxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgc29ja2V0IGRhdGEgc2VuZGluZyBhbmQgY29tcGxldGlvbiBub3RpZmljYXRpb24gbWVjaGFuaXNtcywgY29ubmVjdGlvbiByZWZlcmVuY2UgY291bnRpbmcsIGtleSBwYXlsb2FkIHBhcnNpbmcsIGFuZCBpbi1rZXJuZWwgQUZTL3J4cGVyZiBzZW5kIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29yZSBuZXR3b3JraW5nIGFuZCBmaWxlc3lzdGVtIHN0YXRlIG1hY2hpbmVzIGFuZCBlcnJvci1oYW5kbGluZyBwYXRocyB0aGF0IGFyZSBmdWxseSByZWFjaGFibGUgdmlhIEFGX1JYUlBDIHNvY2tldHMsIGtleXMgc3lzY2FsbHMsIGFuZCBBRlMgb3BlcmF0aW9ucyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjIzLjI2NTIyNjk3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ1NjY1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZDNhZmYyMzM3NjkwODE2OTNlZGE4ODliNThhYTMyMDNhNjI4OTJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NDk6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RcXG5pbmRleCA4OTI2ZGFiOGUyZTYwLi43ZGY2YWZmNzY0NGMwIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0XFxuQEAgLTg3OSwxNCArODc5LDIxIEBAIFRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czpcXG4gICAgICBleGNsdXNpdmVseSB0byBpbi1rZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMuICBtc2cubXNnX2ZsYWdzIG1heSBiZSBnaXZlblxcbiAgICAgIE1TR19NT1JFIGlmIHRoZXJlIHdpbGwgYmUgc3Vic2VxdWVudCBkYXRhIHNlbmRzIGZvciB0aGlzIGNhbGwuXFxuIFxcbi0gICAgIFRoZSBtc2cgbXVzdCBub3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGNvbnRyb2wgZGF0YSBvciBhbnkgZmxhZ3NcXG4tICAgICBvdGhlciB0aGFuIE1TR19NT1JFLiAgbGVuIGlzIHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSB0byB0cmFuc21pdC5cXG4rICAgICBtc2cgbXVzdCBub3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGNvbnRyb2wgZGF0YSBvciBhbnkgZmxhZ3NcXG4rICAgICBvdGhlciB0aGFuIE1TR19NT1JFLiAgbGVuIGlzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBhZGQgdG8gdGhlXFxuKyAgICAgdHJhbnNtaXNzaW9uLiAgVGhlIGxhc3QtcGFja2V0IGZsYWcgd2lsbCBvbmx5IGJlIHNldCBvbiB0aGUgb3V0Z29pbmdcXG4rICAgICBwYWNrZXQgaWYgTVNHX01PUkUgaXMgbm90IHNldCBhbmQgbGVuIGFtb3VudCBvZiBieXRlcyBhcmUgYnVmZmVyZWQuXFxuIFxcbiAgICAgIG5vdGlmeV9lbmRfcnggY2FuIGJlIE5VTEwgb3IgaXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGJlXFxuICAgICAgY2FsbGVkIHdoZW4gdGhlIGNhbGwgY2hhbmdlcyBzdGF0ZSB0byBlbmQgdGhlIFR4IHBoYXNlLiAgVGhpcyBmdW5jdGlvbiBpc1xcbiAgICAgIGNhbGxlZCB3aXRoIGEgc3BpbmxvY2sgaGVsZCB0byBwcmV2ZW50IHRoZSBsYXN0IERBVEEgcGFja2V0IGZyb20gYmVpbmdcXG4gICAgICB0cmFuc21pdHRlZCB1bnRpbCB0aGUgZnVuY3Rpb24gcmV0dXJucy5cXG4gXFxuKyAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIG9yIGFuIGVycm9yLiAgSXQgd2lsbFxcbisgICAgIHJldHVybiB6ZXJvIG9ubHkgaWYgbGVuIGlzIDAgb3IgaWYgbXNnLVxcdTAwM2Vtc2dfaXRlciBpcyBlbXB0eS4gIEl0IG1heSBhbHNvXFxuKyAgICAgbWFrZSBhIHNob3J0IHdyaXRlLCBidWZmZXJpbmcgbGVzcyB0aGFuIHRoZSBhbW91bnQgb2YgZGF0YSBwcm92aWRlZCBvciB0aGVcXG4rICAgICBsZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZSBjYWxsZWQgYWdhaW4uXFxuK1xcbiAgKCMpIFJlY2VpdmUgZGF0YSBmcm9tIGEgY2FsbDo6XFxuIFxcbiBcXHRpbnQgcnhycGNfa2VybmVsX3JlY3ZfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbmRpZmYgLS1naXQgYS9mcy9hZnMvY21fc2VjdXJpdHkuYyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXFxuaW5kZXggMTAzMTY4YzcwZGQ0ZC4uNWVlZWVmNzYxY2YzMSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuY1xcbisrKyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXFxuQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuIFxcdCAqXFx0c3RydWN0IFJYR0tfQXV0aE5hbWVcXHRpZGVudGl0aWVzXFx1MDAzY1xcdTAwM2U7XFxuIFxcdCAqIH07XFxuIFxcdCAqL1xcbi1cXHR0b2tzaXplID0ga2V5c2l6ZSArIDggKyA0ICsgNCArIDggKyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XFxuK1xcdHRva3NpemUgPSBrZXlzaXplICsgNCArIDggKyA0ICsgNCArIDggKyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XFxuIFxcbiBcXHRvZmZzZXQgPSAwO1xcbiBcXHRlbmNzaXplID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKHRva2VuX2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLCB0b2tzaXplLCBcXHUwMDI2b2Zmc2V0KTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjY1YTA4NjZjZDhiODUgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9hZnMvaW50ZXJuYWwuaFxcbkBAIC0xNDE2LDIyICsxNDE2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KVxcbiBcXHRcXHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXFxuLVxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuLXtcXG4tXFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXFx1MDAzZWVzdGF0ZS1cXHUwMDNlYWRkcmVzc2VzO1xcbi1cXG4tXFx0b3AtXFx1MDAzZWNhbGxcXHQ9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpO1xcbi1cXHRvcC1cXHUwMDNldHlwZVxcdD0gY2FsbC1cXHUwMDNldHlwZTtcXG4tXFx0Y2FsbC1cXHUwMDNlb3BcXHQ9IG9wO1xcbi1cXHRjYWxsLVxcdTAwM2VrZXlcXHQ9IG9wLVxcdTAwM2VrZXk7XFxuLVxcdGNhbGwtXFx1MDAzZWludHJcXHQ9ICEob3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xcbi1cXHRjYWxsLVxcdTAwM2VwZWVyXFx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXFx1MDAzZWFkZHJzW29wLVxcdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcXG4tXFx0Y2FsbC1cXHUwMDNlc2VydmljZV9pZCA9IG9wLVxcdTAwM2VzZXJ2ZXItXFx1MDAzZXNlcnZpY2VfaWQ7XFxuLVxcdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcXG4tXFx0YWZzX3B1dF9jYWxsKGNhbGwpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2V4dHJhY3RfYmVnaW4oc3RydWN0IGFmc19jYWxsICpjYWxsLCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxcbiB7XFxuIFxcdGNhbGwtXFx1MDAzZWlvdl9sZW4gPSBzaXplO1xcbkBAIC0xNzYzLDYgKzE3NDcsMjMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKkFGU19WTk9ERV9UT19JKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKVxcbiBcXHRyZXR1cm4gXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXFxuK1xcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXFx1MDAzZWVzdGF0ZS1cXHUwMDNlYWRkcmVzc2VzO1xcbitcXG4rXFx0b3AtXFx1MDAzZWNhbGxcXHQ9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpO1xcbitcXHRvcC1cXHUwMDNldHlwZVxcdD0gY2FsbC1cXHUwMDNldHlwZTtcXG4rXFx0Y2FsbC1cXHUwMDNlb3BcXHQ9IG9wO1xcbitcXHRjYWxsLVxcdTAwM2VzZXJ2ZXJcXHQ9IGFmc191c2Vfc2VydmVyKG9wLVxcdTAwM2VzZXJ2ZXIsIGZhbHNlLCBhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsKTtcXG4rXFx0Y2FsbC1cXHUwMDNla2V5XFx0PSBvcC1cXHUwMDNla2V5O1xcbitcXHRjYWxsLVxcdTAwM2VpbnRyXFx0PSAhKG9wLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcXG4rXFx0Y2FsbC1cXHUwMDNlcGVlclxcdD0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LVxcdTAwM2VhZGRyc1tvcC1cXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XFxuK1xcdGNhbGwtXFx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cXHUwMDNlc2VydmVyLVxcdTAwM2VzZXJ2aWNlX2lkO1xcbitcXHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XFxuK1xcdGFmc19wdXRfY2FsbChjYWxsKTtcXG4rfVxcbitcXG4gLypcXG4gICogTm90ZSB0aGF0IGEgZGVudHJ5IGdvdCBjaGFuZ2VkLiAgV2UgbmVlZCB0byBzZXQgZF9mc2RhdGEgdG8gdGhlIGRhdGEgdmVyc2lvblxcbiAgKiBudW1iZXIgZGVyaXZlZCBmcm9tIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9yeHJwYy5jIGIvZnMvYWZzL3J4cnBjLmNcXG5pbmRleCBkODI5MTY2NTdhM2RkLi4xZjViNmFhNjg5NDMzIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9yeHJwYy5jXFxuKysrIGIvZnMvYWZzL3J4cnBjLmNcXG5AQCAtNDEyLDI2ICs0MTIsMzIgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxcbiBcXHRtc2cubXNnX2NvbnRyb2xsZW5cXHQ9IDA7XFxuIFxcdG1zZy5tc2dfZmxhZ3NcXHRcXHQ9IE1TR19XQUlUQUxMIHwgKGNhbGwtXFx1MDAzZXdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xcbiBcXG4tXFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZXNvY2tldCwgcnhjYWxsLFxcbi1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZtc2csIGNhbGwtXFx1MDAzZXJlcXVlc3Rfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XFxuK1xcdGRvIHtcXG4rXFx0XFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZXNvY2tldCwgcnhjYWxsLCBcXHUwMDI2bXNnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG1zZ19kYXRhX2xlZnQoXFx1MDAyNm1zZyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yX2RvX2Fib3J0O1xcbitcXHR9IHdoaWxlIChtc2dfZGF0YV9sZWZ0KFxcdTAwMjZtc2cpIFxcdTAwM2UgMCk7XFxuIFxcbiBcXHRpZiAoY2FsbC1cXHUwMDNld3JpdGVfaXRlcikge1xcbiBcXHRcXHRtc2cubXNnX2l0ZXIgPSAqY2FsbC1cXHUwMDNld3JpdGVfaXRlcjtcXG4gXFx0XFx0bXNnLm1zZ19mbGFncyBcXHUwMDI2PSB+TVNHX01PUkU7XFxuIFxcdFxcdHRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgXFx1MDAyNm1zZyk7XFxuIFxcbi1cXHRcXHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXFx1MDAzZW5ldC1cXHUwMDNlc29ja2V0LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIGNhbGwtXFx1MDAzZXJ4Y2FsbCwgXFx1MDAyNm1zZyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBpb3ZfaXRlcl9jb3VudChcXHUwMDI2bXNnLm1zZ19pdGVyKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXFx1MDAzZW5ldC1cXHUwMDNlc29ja2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNhbGwtXFx1MDAzZXJ4Y2FsbCwgXFx1MDAyNm1zZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBtc2dfZGF0YV9sZWZ0KFxcdTAwMjZtc2cpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRcXHR0cmFjZV9hZnNfc2VudF9kYXRhKGNhbGwsIFxcdTAwMjZtc2csIHJldCk7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fSB3aGlsZSAobXNnX2RhdGFfbGVmdChcXHUwMDI2bXNnKSBcXHUwMDNlIDApO1xcbiBcXHRcXHQqY2FsbC1cXHUwMDNld3JpdGVfaXRlciA9IG1zZy5tc2dfaXRlcjtcXG4gXFxuLVxcdFxcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXFx1MDAyNm1zZywgcmV0KTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XFxuK1xcdFxcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXFx1MDAyNm1zZywgMCk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCB3ZSBtYXkgaGF2ZSByZWNlaXZlZCB0aGUgcmVwbHkgb3IgYW4gYWJvcnRcXG5AQCAtNDQzLDEwICs0NDksOCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuIFxcdHJldHVybjtcXG4gXFxuIGVycm9yX2RvX2Fib3J0Olxcbi1cXHRpZiAocmV0ICE9IC1FQ09OTkFCT1JURUQpXFxuLVxcdFxcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKGNhbGwtXFx1MDAzZW5ldC1cXHUwMDNlc29ja2V0LCByeGNhbGwsXFxuLVxcdFxcdFxcdFxcdFxcdFJYX1VTRVJfQUJPUlQsIHJldCxcXG4tXFx0XFx0XFx0XFx0XFx0YWZzX2Fib3J0X3NlbmRfZGF0YV9lcnJvcik7XFxuK1xcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKGNhbGwtXFx1MDAzZW5ldC1cXHUwMDNlc29ja2V0LCByeGNhbGwsXFxuK1xcdFxcdFxcdFxcdFJYX1VTRVJfQUJPUlQsIHJldCwgYWZzX2Fib3J0X3NlbmRfZGF0YV9lcnJvcik7XFxuIFxcdGlmIChjYWxsLVxcdTAwM2Vhc3luYykge1xcbiBcXHRcXHRhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQpO1xcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTg1OSw2ICs4NjMsNyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4ge1xcbiBcXHRzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY2FsbC1cXHUwMDNlbmV0O1xcbiBcXHRzdHJ1Y3QgbXNnaGRyIG1zZztcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdF9lbnRlcihcXFwiXFxcIik7XFxuIFxcbkBAIC04NzEsMjIgKzg3NiwxMyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4gXFx0bXNnLm1zZ19jb250cm9sbGVuXFx0PSAwO1xcbiBcXHRtc2cubXNnX2ZsYWdzXFx0XFx0PSAwO1xcbiBcXG4tXFx0c3dpdGNoIChyeHJwY19rZXJuZWxfc2VuZF9kYXRhKG5ldC1cXHUwMDNlc29ja2V0LCBjYWxsLVxcdTAwM2VyeGNhbGwsIFxcdTAwMjZtc2csIDAsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCkpIHtcXG4tXFx0Y2FzZSAwOlxcbi1cXHRcXHRfbGVhdmUoXFxcIiBbcmVwbGllZF1cXFwiKTtcXG4rXFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXFx1MDAzZXNvY2tldCwgY2FsbC1cXHUwMDNlcnhjYWxsLCBcXHUwMDI2bXNnLCAwLFxcbitcXHRcXHRcXHRcXHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwKSAvKiBTaG91bGRuJ3QgYnVmZmVyIG1vcmUgdGhhbiAwIGJ5dGVzLiAqL1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRjYXNlIC1FTk9NRU06XFxuLVxcdFxcdF9kZWJ1ZyhcXFwib29tXFxcIik7XFxuLVxcdFxcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cXHUwMDNlc29ja2V0LCBjYWxsLVxcdTAwM2VyeGNhbGwsXFxuLVxcdFxcdFxcdFxcdFxcdFJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sXFxuLVxcdFxcdFxcdFxcdFxcdGFmc19hYm9ydF9vb20pO1xcbi1cXHRcXHRmYWxsdGhyb3VnaDtcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0X2xlYXZlKFxcXCIgW2Vycm9yXVxcXCIpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFx0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVxcdTAwM2Vzb2NrZXQsIGNhbGwtXFx1MDAzZXJ4Y2FsbCxcXG4rXFx0XFx0XFx0XFx0UlhHRU5fU1NfTUFSU0hBTCwgcmV0LCBhZnNfYWJvcnRfc2VuZF9lcnJvcik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTkxMiwyMCArOTA4LDIxIEBAIHZvaWQgYWZzX3NlbmRfc2ltcGxlX3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbiBcXHRtc2cubXNnX2NvbnRyb2xsZW5cXHQ9IDA7XFxuIFxcdG1zZy5tc2dfZmxhZ3NcXHRcXHQ9IDA7XFxuIFxcbi1cXHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXFx1MDAzZXNvY2tldCwgY2FsbC1cXHUwMDNlcnhjYWxsLCBcXHUwMDI2bXNnLCBsZW4sXFxuLVxcdFxcdFxcdFxcdCAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXFx1MDAzZXNvY2tldCwgY2FsbC1cXHUwMDNlcnhjYWxsLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bXNnLCBtc2dfZGF0YV9sZWZ0KFxcdTAwMjZtc2cpLFxcbitcXHRcXHRcXHRcXHRcXHQgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCk7XFxuK1xcdH0gd2hpbGUgKG4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBtc2dfZGF0YV9sZWZ0KFxcdTAwMjZtc2cpIFxcdTAwM2UgMCk7XFxuK1xcbiBcXHRpZiAobiBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdC8qIFN1Y2Nlc3MgKi9cXG4gXFx0XFx0X2xlYXZlKFxcXCIgW3JlcGxpZWRdXFxcIik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG4gPT0gLUVOT01FTSkge1xcbi1cXHRcXHRfZGVidWcoXFxcIm9vbVxcXCIpO1xcbi1cXHRcXHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtXFx1MDAzZXNvY2tldCwgY2FsbC1cXHUwMDNlcnhjYWxsLFxcbi1cXHRcXHRcXHRcXHRcXHRSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLFxcbi1cXHRcXHRcXHRcXHRcXHRhZnNfYWJvcnRfb29tKTtcXG4tXFx0fVxcbitcXG4rXFx0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVxcdTAwM2Vzb2NrZXQsIGNhbGwtXFx1MDAzZXJ4Y2FsbCxcXG4rXFx0XFx0XFx0XFx0UlhHRU5fU1NfTUFSU0hBTCwgbiwgYWZzX2Fib3J0X3NlbmRfZXJyb3IpO1xcbiBcXHRfbGVhdmUoXFxcIiBbZXJyb3JdXFxcIik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcXG5pbmRleCAxYjNjNDhiNTU5MWRmLi4wNGIwYmI2ODJiODEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcXG5AQCAtMTQ4LDYgKzE0OCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsXFx0XFxcIlVOVSBpc29ydFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXFx0XFx0XFxcIlVQREFURSAgIFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfYnlfdXVpZCxcXHRcXFwiVVNFIHV1aWQgXFxcIikgXFxcXFxcbitcXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsLFxcdFxcdFxcXCJVU0UgY2FsbCBcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NtX2NhbGwsXFx0XFxcIlVTRSBjbS1jbFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2V0X2NhcHMsXFx0XFxcIlVTRSBnY2Fwc1xcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcXHRcXFwiVVNFIGd2dXBjXFxcIikgXFxcXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxcbmluZGV4IDcwNGExMGRlNjY3MDAuLjUyZjg3MThjZjcyNTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcXG5AQCAtMjAsMTYgKzIwLDE2IEBAXFxuIFxcdC8qIEFGUyBlcnJvcnMgKi9cXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdEVNKGFmc19hYm9ydF9nZW5lcmFsX2Vycm9yLFxcdFxcdFxcXCJhZnMtZXJyb3JcXFwiKVxcdFxcdFxcXFxcXG4gXFx0RU0oYWZzX2Fib3J0X2ludGVycnVwdGVkLFxcdFxcdFxcXCJhZnMtaW50clxcXCIpXFx0XFx0XFxcXFxcbi1cXHRFTShhZnNfYWJvcnRfb29tLFxcdFxcdFxcdFxcXCJhZnMtb29tXFxcIilcXHRcXHRcXFxcXFxuIFxcdEVNKGFmc19hYm9ydF9vcF9ub3Rfc3VwcG9ydGVkLFxcdFxcdFxcXCJhZnMtb3Atbm90c3VwcFxcXCIpXFx0XFxcXFxcbiBcXHRFTShhZnNfYWJvcnRfcHJvYmV1dWlkX25lZ2F0aXZlLFxcdFxcXCJhZnMtcHJvYmV1dWlkLW5lZ1xcXCIpXFx0XFxcXFxcbiBcXHRFTShhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yLFxcdFxcdFxcXCJhZnMtc2VuZC1kYXRhXFxcIilcXHRcXFxcXFxuK1xcdEVNKGFmc19hYm9ydF9zZW5kX2Vycm9yLFxcdFxcdFxcXCJhZnMtc2VuZC1lcnJvclxcXCIpXFx0XFxcXFxcbiBcXHRFTShhZnNfYWJvcnRfdW5tYXJzaGFsX2Vycm9yLFxcdFxcdFxcXCJhZnMtdW5tYXJzaGFsXFxcIilcXHRcXFxcXFxuIFxcdEVNKGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MsXFx0XFxcImFmcy11bnN1cC1zZWMtY2xhc3NcXFwiKVxcdFxcXFxcXG4gXFx0LyogcnhwZXJmIGVycm9ycyAqL1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0RU0ocnhwZXJmX2Fib3J0X2dlbmVyYWxfZXJyb3IsXFx0XFx0XFxcInJ4cGVyZi1lcnJvclxcXCIpXFx0XFx0XFxcXFxcbi1cXHRFTShyeHBlcmZfYWJvcnRfb29tLFxcdFxcdFxcdFxcXCJyeHBlcmYtb29tXFxcIilcXHRcXHRcXFxcXFxuIFxcdEVNKHJ4cGVyZl9hYm9ydF9vcF9ub3Rfc3VwcG9ydGVkLFxcdFxcXCJyeHBlcmYtb3Atbm90c3VwcFxcXCIpXFx0XFxcXFxcbitcXHRFTShyeHBlcmZfYWJvcnRfc2VuZF9lcnJvcixcXHRcXHRcXFwicnhwZXJmLXNlbmQtZXJyb3JcXFwiKVxcdFxcXFxcXG4gXFx0RU0ocnhwZXJmX2Fib3J0X3VubWFyc2hhbF9lcnJvcixcXHRcXFwicnhwZXJmLXVubWFyc2hhbFxcXCIpXFx0XFxcXFxcbiBcXHQvKiBSeEtBRCBzZWN1cml0eSBlcnJvcnMgKi9cXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdEVNKHJ4a2FkX2Fib3J0XzFfc2hvcnRfY2hlY2ssXFx0XFx0XFxcInJ4a2FkMS1zaG9ydC1jaGVja1xcXCIpXFx0XFxcXFxcbkBAIC0xNDgsNiArMTQ4LDcgQEBcXG4gXFx0RU0ocnhycGNfZXByb3RvX3dyb25nX3NlY3VyaXR5LFxcdFxcdFxcXCJ3cm9uZy1zZWNcXFwiKVxcdFxcdFxcXFxcXG4gXFx0RU0ocnhycGNfcmVjdm1zZ19leGNlc3NfZGF0YSxcXHRcXHRcXFwicmVjdm1zZy1leGNlc3NcXFwiKVxcdFxcXFxcXG4gXFx0RU0ocnhycGNfcmVjdm1zZ19zaG9ydF9kYXRhLFxcdFxcdFxcXCJyZWN2bXNnLXNob3J0XFxcIilcXHRcXFxcXFxuK1xcdEVNKHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXFx0XFx0XFxcInR4LWVycm9yXFxcIilcXHRcXHRcXFxcXFxuIFxcdEVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFxcdFxcdFxcXCJzZW5kbXNnLWxhdGVcXFwiKVxcbiBcXG4gI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFxcXFxcXG5AQCAtMzQyLDYgKzM0Myw3IEBAXFxuIFxcdEVNKHJ4cnBjX2NhbGxfc2VlX2Rpc3RyaWJ1dGVfZXJyb3IsXFx0XFxcIlNFRSBkaXN0LWVyclxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY2FsbF9zZWVfaW5wdXQsXFx0XFx0XFxcIlNFRSBpbnB1dCAgIFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkLFxcdFxcXCJTRUUgbmZ5LXJsc2RcXFwiKSBcXFxcXFxuK1xcdEVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkLFxcdFxcXCJTRUUgbmZ5LXNraXBcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2csXFx0XFx0XFxcIlNFRSByZWN2bXNnIFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZ19yZXF1ZXVlLFxcdFxcXCJTRUUgcmVjdi1ycXVcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2dfcmVxdWV1ZV9maXJzdCwgXFxcIlNFRSByZWN2LXJxRlxcXCIpIFxcXFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmggYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxcbmluZGV4IDg2NWYwNWZlMzdhYjkuLmNiMzZhNzA5ZjU0MGUgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcXG4rKysgYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxcbkBAIC02NDIsNiArNjQyLDcgQEAgZW51bSByeHJwY19jYWxsX2ZsYWcge1xcbiBcXHRSWFJQQ19DQUxMX1RYX0xBU1QsXFx0XFx0LyogTGFzdCBwYWNrZXQgaW4gVHggYnVmZmVyIChhdCByeHR4X3RvcCkgKi9cXG4gXFx0UlhSUENfQ0FMTF9UWF9BTExfQUNLRUQsXFx0LyogTGFzdCBwYWNrZXQgaGFzIGJlZW4gaGFyZC1hY2tlZCAqL1xcbiBcXHRSWFJQQ19DQUxMX1RYX05PX01PUkUsXFx0XFx0LyogTm8gbW9yZSBkYXRhIHRvIHRyYW5zbWl0IChNU0dfTU9SRSBkZWFzc2VydGVkKSAqL1xcbitcXHRSWFJQQ19DQUxMX1RYX0VSUk9SLFxcdFxcdC8qIFRlcm1pbmFsIGVycm9yOyBjYWxsIG5lZWRzIGFib3J0ICovXFxuIFxcdFJYUlBDX0NBTExfU0VORF9QSU5HLFxcdFxcdC8qIEEgcGluZyB3aWxsIG5lZWQgdG8gYmUgc2VudCAqL1xcbiBcXHRSWFJQQ19DQUxMX1JFVFJBTlNfVElNRU9VVCxcXHQvKiBSZXRyYW5zbWlzc2lvbiBkdWUgdG8gdGltZW91dCBvY2N1cnJlZCAqL1xcbiBcXHRSWFJQQ19DQUxMX0JFR0FOX1JYX1RJTUVSLFxcdC8qIFdlIGJlZ2FuIHRoZSBleHBlY3RfcnhfYnkgdGltZXIgKi9cXG5AQCAtMTEwOSw2ICsxMTEwLDcgQEAgc3RhdGljIGlubGluZSBib29sIHJ4cnBjX2lzX2NsaWVudF9jYWxsKGNvbnN0IHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbiAvKlxcbiAgKiBjYWxsX3N0YXRlLmNcXG4gICovXFxuK3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCk7XFxuIGJvb2wgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4gXFx0XFx0XFx0ICAgICAgIGVudW0gcnhycGNfY2FsbF9jb21wbGV0aW9uIGNvbXBsLFxcbiBcXHRcXHRcXHQgICAgICAgdTMyIGFib3J0X2NvZGUsXFxuQEAgLTE0NDEsNyArMTQ0Myw2IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcnhycGNfbG9jYWxfc2VxX29wcztcXG4gLypcXG4gICogcmVjdm1zZy5jXFxuICAqL1xcbi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKik7XFxuIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1zZ2hkciAqLCBzaXplX3QsIGludCk7XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jIGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xcbmluZGV4IDZhZmI1NDM3M2ViYmYuLjM2NDgxMGM2NTI3NjYgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xcbisrKyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcXG5AQCAtNyw2ICs3LDYwIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiYXItaW50ZXJuYWwuaFxcXCJcXG4gXFxuKy8qXFxuKyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9fcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4re1xcbitcXHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XFxuK1xcdHN0cnVjdCBzb2NrICpzaztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1JFTEVBU0VELCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdHJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9yZWxlYXNlZCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXG4rXFx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cXHUwMDNlc29ja2V0KTtcXG4rXFx0c2sgPSBcXHUwMDI2cngtXFx1MDAzZXNrO1xcbitcXHRpZiAocnggXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlIFxcdTAwM2MgUlhSUENfQ0xPU0UpIHtcXG4rXFx0XFx0aWYgKGNhbGwtXFx1MDAzZW5vdGlmeV9yeCkge1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y2FsbC1cXHUwMDNlbm90aWZ5X2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0XFx0Y2FsbC1cXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVxcdTAwM2V1c2VyX2NhbGxfSUQpO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjYWxsLVxcdTAwM2Vub3RpZnlfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19saW5rKSkge1xcbitcXHRcXHRcXHRcXHRyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTtcXG4rXFx0XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19saW5rLCBcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcXG4rXFx0XFx0XFx0XFx0X2RlYnVnKFxcXCJjYWxsICVwc1xcXCIsIHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KTtcXG4rXFx0XFx0XFx0XFx0c2stXFx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS5cXG4rICovXFxuK3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4re1xcbitcXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSkge1xcbitcXHRcXHRyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBUcmFuc2l0aW9uIGEgY2FsbCB0byB0aGUgY29tcGxldGUgc3RhdGUuXFxuICAqL1xcbkBAIC0yNSw3ICs3OSw3IEBAIGJvb2wgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4gXFx0cnhycGNfc2V0X2NhbGxfc3RhdGUoY2FsbCwgUlhSUENfQ0FMTF9DT01QTEVURSk7XFxuIFxcdHRyYWNlX3J4cnBjX2NhbGxfY29tcGxldGUoY2FsbCk7XFxuIFxcdHdha2VfdXAoXFx1MDAyNmNhbGwtXFx1MDAzZXdhaXRxKTtcXG4tXFx0cnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcXG4rXFx0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmMgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuY1xcbmluZGV4IDBlY2U3MTdkYjBmODUuLjFiZTUwZTBjOWNlZTUgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcXG4rKysgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuY1xcbkBAIC0zNCw3ICszNCwxMCBAQCB2b2lkIHJ4cnBjX3Bva2VfY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgZW51bSByeHJwY19jb25uX3RyYWNlIHdoeSlcXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2bG9jYWwtXFx1MDAzZWxvY2spO1xcbiBcXHRidXN5ID0gIWxpc3RfZW1wdHkoXFx1MDAyNmNvbm4tXFx1MDAzZWF0dGVuZF9saW5rKTtcXG4gXFx0aWYgKCFidXN5KSB7XFxuLVxcdFxcdHJ4cnBjX2dldF9jb25uZWN0aW9uKGNvbm4sIHdoeSk7XFxuK1xcdFxcdGlmICghcnhycGNfZ2V0X2Nvbm5lY3Rpb25fbWF5YmUoY29ubiwgd2h5KSkge1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmxvY2FsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuIFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmNvbm4tXFx1MDAzZWF0dGVuZF9saW5rLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWNvbm5fYXR0ZW5kX3EpO1xcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bG9jYWwtXFx1MDAzZWxvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmNcXG5pbmRleCBhMGFhNzhkODkyODk3Li4zMGQ2ZGIwNTJjMjE2IDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9rZXkuY1xcbisrKyBiL25ldC9yeHJwYy9rZXkuY1xcbkBAIC0xNzIsNiArMTcyLDcgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCxcXG4gXFx0Y29uc3QgX19iZTMyICp0aWNrZXQsICprZXk7XFxuIFxcdHM2NCB0bXA7XFxuIFxcdHNpemVfdCByYXdfa2V5bGVuLCByYXdfdGt0bGVuLCBrZXlsZW4sIHRrdGxlbjtcXG4rXFx0aW50IHJldCA9IC1FS0VZUkVKRUNURUQ7XFxuIFxcbiBcXHRfZW50ZXIoXFxcIix7JXgsJXgsJXgsJXh9LCV4XFxcIixcXG4gXFx0ICAgICAgIG50b2hsKHhkclswXSksIG50b2hsKHhkclsxXSksIG50b2hsKHhkclsyXSksIG50b2hsKHhkclszXSksXFxuQEAgLTIyOSw2ICsyMzAsMTEgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCxcXG4gXFx0dG9rZW4tXFx1MDAzZXJ4Z2stXFx1MDAzZWtleS5kYXRhXFx0PSB0b2tlbi1cXHUwMDNlcnhnay1cXHUwMDNlX2tleTtcXG4gXFx0dG9rZW4tXFx1MDAzZXJ4Z2stXFx1MDAzZXRpY2tldC5sZW4gPSByYXdfdGt0bGVuO1xcbiBcXG4rXFx0aWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodG9rZW4tXFx1MDAzZXJ4Z2stXFx1MDAzZWVuY3R5cGUpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9QS0c7XFxuK1xcdFxcdGdvdG8gcmVqZWN0X3Rva2VuO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAodG9rZW4tXFx1MDAzZXJ4Z2stXFx1MDAzZWVuZHRpbWUgIT0gMCkge1xcbiBcXHRcXHRleHBpcnkgPSByeHJwY19zNjRfdG9fdGltZTY0KHRva2VuLVxcdTAwM2VyeGdrLVxcdTAwM2VlbmR0aW1lKTtcXG4gXFx0XFx0aWYgKGV4cGlyeSBcXHUwMDNjIDApXFxuQEAgLTI4MCw3ICsyODYsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhnayhzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwLFxcbiBcXHRrZnJlZSh0b2tlbi1cXHUwMDNlcnhnayk7XFxuIFxcdGtmcmVlKHRva2VuKTtcXG4gcmVqZWN0Olxcbi1cXHRyZXR1cm4gLUVLRVlSRUpFQ1RFRDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gZXhwaXJlZDpcXG4gXFx0a2ZyZWUodG9rZW4tXFx1MDAzZXJ4Z2spO1xcbiBcXHRrZnJlZSh0b2tlbik7XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jXFxuaW5kZXggZWZjYmE0YjJlNzRmMC4uMjhiMjE0OGI1NjkzNiAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXFxuKysrIGIvbmV0L3J4cnBjL3JlY3Ztc2cuY1xcbkBAIC0xNywxMyArMTcsMTIgQEBcXG4gI2luY2x1ZGUgXFxcImFyLWludGVybmFsLmhcXFwiXFxuIFxcbiAvKlxcbi0gKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuICBGdXJ0aGVyXFxuLSAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS5cXG4rICogUmVxdWV1ZSBhIGNhbGwgZm9yIHJlY3Ztc2coKSB0byBwaWNrIHVwLlxcbiAgKi9cXG4tdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbitzdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXFxuIHtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2s7XFxuK1xcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXFx1MDAzZXNrKTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNnJ4LVxcdTAwM2VzaztcXG4gXFxuIFxcdF9lbnRlcihcXFwiJWRcXFwiLCBjYWxsLVxcdTAwM2VkZWJ1Z19pZCk7XFxuIFxcbkBAIC0zMiwzMSArMzEsMTggQEAgdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFxuLVxcdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXFx1MDAzZXNvY2tldCk7XFxuLVxcdHNrID0gXFx1MDAyNnJ4LVxcdTAwM2VzaztcXG4tXFx0aWYgKHJ4IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSBcXHUwMDNjIFJYUlBDX0NMT1NFKSB7XFxuLVxcdFxcdGlmIChjYWxsLVxcdTAwM2Vub3RpZnlfcngpIHtcXG4tXFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2FsbC1cXHUwMDNlbm90aWZ5X2xvY2spO1xcbi1cXHRcXHRcXHRjYWxsLVxcdTAwM2Vub3RpZnlfcngoc2ssIGNhbGwsIGNhbGwtXFx1MDAzZXVzZXJfY2FsbF9JRCk7XFxuLVxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y2FsbC1cXHUwMDNlbm90aWZ5X2xvY2spO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19sb2NrKTtcXG4tXFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluaykpIHtcXG4tXFx0XFx0XFx0XFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XFxuLVxcdFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluaywgXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX2xvY2spO1xcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19saW5rKSkge1xcbitcXHRcXHRyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTtcXG4rXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19saW5rLCBcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSk7XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19sb2NrKTtcXG4gXFxuLVxcdFxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XFxuLVxcdFxcdFxcdFxcdF9kZWJ1ZyhcXFwiY2FsbCAlcHNcXFwiLCBzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSk7XFxuLVxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuK1xcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XFxuK1xcdFxcdF9kZWJ1ZyhcXFwiY2FsbCAlcHNcXFwiLCBzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSk7XFxuK1xcdFxcdHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdF9sZWF2ZShcXFwiXFxcIik7XFxuIH1cXG4gXFxuQEAgLTU2MSw3ICs1NDcsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcbiBcXHRpZiAoIShmbGFncyBcXHUwMDI2IE1TR19QRUVLKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19xdWV1ZSkpXFxuLVxcdFxcdHJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XFxuK1xcdFxcdHJ4cnBjX3JlcXVldWVfY2FsbChzb2NrLCBjYWxsKTtcXG4gXFx0Z290byBub3RfeWV0X2NvbXBsZXRlO1xcbiBcXG4gY2FsbF9mYWlsZWQ6XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGdrLmMgYi9uZXQvcnhycGMvcnhnay5jXFxuaW5kZXggNzdhNjdhY2UxZDI0OC4uYjQ5MjIxZjU3ZjY3NyAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvcnhnay5jXFxuKysrIGIvbmV0L3J4cnBjL3J4Z2suY1xcbkBAIC0yNTEsOCArMjUxLDEwIEBAIHN0YXRpYyBpbnQgcnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcdFxcdFxcdFxcdFxcdCBHRlBfTk9GUyk7XFxuIFxcdGlmIChJU19FUlIoZ2spKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihnayk7XFxuK1xcdHdyaXRlX2xvY2soXFx1MDAyNmNvbm4tXFx1MDAzZXNlY3VyaXR5X3VzZV9sb2NrKTtcXG4gXFx0Y29ubi1cXHUwMDNlcnhnay5lbmN0eXBlID0gZ2stXFx1MDAzZWtyYjUtXFx1MDAzZWV0eXBlO1xcbiBcXHRjb25uLVxcdTAwM2VyeGdrLmtleXNbZ2stXFx1MDAzZWtleV9udW1iZXIgXFx1MDAyNiAzXSA9IGdrO1xcbitcXHR3cml0ZV91bmxvY2soXFx1MDAyNmNvbm4tXFx1MDAzZXNlY3VyaXR5X3VzZV9sb2NrKTtcXG4gXFxuIFxcdHN3aXRjaCAoY29ubi1cXHUwMDNlc2VjdXJpdHlfbGV2ZWwpIHtcXG4gXFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9QTEFJTjpcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4cGVyZi5jIGIvbmV0L3J4cnBjL3J4cGVyZi5jXFxuaW5kZXggYjhkZjZkMjIzMTRkNi4uZWJkNTQyMjJjNjRlZiAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvcnhwZXJmLmNcXG4rKysgYi9uZXQvcnhycGMvcnhwZXJmLmNcXG5AQCAtNTM4LDE1ICs1MzgsMTggQEAgc3RhdGljIGludCByeHBlcmZfcHJvY2Vzc19jYWxsKHN0cnVjdCByeHBlcmZfY2FsbCAqY2FsbClcXG4gXFx0aW92WzBdLmlvdl9sZW5cXHQ9IGxlbjtcXG4gXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2bXNnLm1zZ19pdGVyLCBXUklURSwgaW92LCAxLCBsZW4pO1xcbiBcXHRtc2cubXNnX2ZsYWdzID0gMDtcXG4tXFx0biA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEocnhwZXJmX3NvY2tldCwgY2FsbC1cXHUwMDNlcnhjYWxsLCBcXHUwMDI2bXNnLCBsZW4sXFxuLVxcdFxcdFxcdFxcdCAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShyeHBlcmZfc29ja2V0LCBjYWxsLVxcdTAwM2VyeGNhbGwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtc2csIG1zZ19kYXRhX2xlZnQoXFx1MDAyNm1zZyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTtcXG4rXFx0fSB3aGlsZSAobiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG1zZ19kYXRhX2xlZnQoXFx1MDAyNm1zZykgXFx1MDAzZSAwKTtcXG4rXFxuIFxcdGlmIChuIFxcdTAwM2U9IDApXFxuIFxcdFxcdHJldHVybiAwOyAvKiBTdWNjZXNzICovXFxuIFxcbi1cXHRpZiAobiA9PSAtRU5PTUVNKVxcbi1cXHRcXHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChyeHBlcmZfc29ja2V0LCBjYWxsLVxcdTAwM2VyeGNhbGwsXFxuLVxcdFxcdFxcdFxcdFxcdFJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sXFxuLVxcdFxcdFxcdFxcdFxcdHJ4cGVyZl9hYm9ydF9vb20pO1xcbitcXHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChyeHBlcmZfc29ja2V0LCBjYWxsLVxcdTAwM2VyeGNhbGwsXFxuK1xcdFxcdFxcdFxcdFJYR0VOX1NTX01BUlNIQUwsIG4sXFxuK1xcdFxcdFxcdFxcdHJ4cGVyZl9hYm9ydF9zZW5kX2Vycm9yKTtcXG4gXFx0cmV0dXJuIG47XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZW5kbXNnLmMgYi9uZXQvcnhycGMvc2VuZG1zZy5jXFxuaW5kZXggZWQyYzlhNTEwMDVhZC4uOGJiMzI3ZGMyODMzZSAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvc2VuZG1zZy5jXFxuKysrIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xcbkBAIC0zMjAsOCArMzIwLDggQEAgc3RhdGljIGludCByeHJwY19hbGxvY190eHF1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXFxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tXFx0XFx0XFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsXFxuLVxcdFxcdFxcdCAgIGJvb2wgKl9kcm9wcGVkX2xvY2spXFxuK1xcdFxcdFxcdCAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KVxcbitcXHRfX3JlbGVhc2VzKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KVxcbiB7XFxuIFxcdHN0cnVjdCByeHJwY190eGJ1ZiAqdHhiO1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2cngtXFx1MDAzZXNrO1xcbkBAIC0zMzAsMjkgKzMzMCwzNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdGJvb2wgbW9yZSA9IG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX01PUkU7XFxuIFxcdGludCByZXQsIGNvcGllZCA9IDA7XFxuIFxcbi1cXHRpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9OT19NT1JFLCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXFx1MDAzZWRlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcXG4tXFx0XFx0XFx0XFx0ICBjYWxsLVxcdTAwM2VjaWQsIGNhbGwtXFx1MDAzZWNhbGxfaWQsIGNhbGwtXFx1MDAzZXJ4X2NvbnN1bWVkLFxcbi1cXHRcXHRcXHRcXHQgIDAsIC1FUFJPVE8pO1xcbi1cXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4tXFx0fVxcbi1cXG4gXFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuIFxcbiBcXHRyZXQgPSByeHJwY193YWl0X3RvX2JlX2Nvbm5lY3RlZChjYWxsLCBcXHUwMDI2dGltZW8pO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0aWYgKGNhbGwtXFx1MDAzZWNvbm4tXFx1MDAzZXN0YXRlID09IFJYUlBDX0NPTk5fQ0xJRU5UX1VOU0VDVVJFRCkge1xcbiBcXHRcXHRyZXQgPSByeHJwY19pbml0X2NsaWVudF9jb25uX3NlY3VyaXR5KGNhbGwtXFx1MDAzZWNvbm4pO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiB0aGlzIHNob3VsZCBiZSBpbiBwb2xsICovXFxuIFxcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spO1xcbiBcXG4gcmVsb2FkOlxcbitcXHRpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9OT19NT1JFLCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpKSkge1xcbitcXHRcXHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVxcdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXFxuK1xcdFxcdFxcdFxcdCAgY2FsbC1cXHUwMDNlY2lkLCBjYWxsLVxcdTAwM2VjYWxsX2lkLCBjYWxsLVxcdTAwM2VyeF9jb25zdW1lZCxcXG4rXFx0XFx0XFx0XFx0ICAwLCAtRVBST1RPKTtcXG4rXFx0XFx0cmV0ID0gLUVQUk9UTztcXG4rXFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4rXFx0fVxcbitcXHRpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgXFx1MDAyNmNhbGwtXFx1MDAzZWZsYWdzKSkpIHtcXG4rXFx0XFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cXHUwMDNlZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXFxuK1xcdFxcdFxcdFxcdCAgY2FsbC1cXHUwMDNlY2lkLCBjYWxsLVxcdTAwM2VjYWxsX2lkLCBjYWxsLVxcdTAwM2VyeF9jb25zdW1lZCxcXG4rXFx0XFx0XFx0XFx0ICAwLCAtRUlPKTtcXG4rXFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4rXFx0fVxcbitcXG4gXFx0dHhiID0gY2FsbC1cXHUwMDNldHhfcGVuZGluZztcXG4gXFx0Y2FsbC1cXHUwMDNldHhfcGVuZGluZyA9IE5VTEw7XFxuIFxcdGlmICh0eGIpXFxuQEAgLTM3OSw5ICszODcsOSBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcbiBcXHRyZXQgPSAtRU1TR1NJWkU7XFxuIFxcdGlmIChjYWxsLVxcdTAwM2V0eF90b3RhbF9sZW4gIT0gLTEpIHtcXG4tXFx0XFx0aWYgKGxlbiAtIGNvcGllZCBcXHUwMDNlIGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbilcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNlIGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbilcXG4gXFx0XFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4tXFx0XFx0aWYgKCFtb3JlIFxcdTAwMjZcXHUwMDI2IGxlbiAtIGNvcGllZCAhPSBjYWxsLVxcdTAwM2V0eF90b3RhbF9sZW4pXFxuK1xcdFxcdGlmICghbW9yZSBcXHUwMDI2XFx1MDAyNiBsZW4gIT0gY2FsbC1cXHUwMDNldHhfdG90YWxfbGVuKVxcbiBcXHRcXHRcXHRnb3RvIG1heWJlX2Vycm9yO1xcbiBcXHR9XFxuIFxcbkBAIC00MDUsNyArNDEzLDcgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxcbiBcXHRcXHRcXHQgKiB0aGUgc2VjdXJpdHkgaGVhZGVyIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBwYWRkZWRcXG4gXFx0XFx0XFx0ICogcmVnaW9uIChlbmMgYmxvY2tzaXplKSwgYnV0IHRoZSB0cmFpbGVyIGlzIG5vdC5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdHJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbXNnX2RhdGFfbGVmdChtc2cpO1xcbitcXHRcXHRcXHRyZW1haW4gPSBtb3JlID8gSU5UX01BWCA6IGxlbjtcXG4gXFx0XFx0XFx0dHhiID0gY2FsbC1cXHUwMDNlY29ubi1cXHUwMDNlc2VjdXJpdHktXFx1MDAzZWFsbG9jX3R4YnVmKGNhbGwsIHJlbWFpbiwgc2stXFx1MDAzZXNrX2FsbG9jYXRpb24pO1xcbiBcXHRcXHRcXHRpZiAoIXR4Yikge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbkBAIC00MTYsOCArNDI0LDggQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxcbiBcXHRcXHRfZGVidWcoXFxcImFwcGVuZFxcXCIpO1xcbiBcXG4gXFx0XFx0LyogYXBwZW5kIG5leHQgc2VnbWVudCBvZiBkYXRhIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciAqL1xcbi1cXHRcXHRpZiAobXNnX2RhdGFfbGVmdChtc2cpIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRzaXplX3QgY29weSA9IHVtaW4odHhiLVxcdTAwM2VzcGFjZSwgbXNnX2RhdGFfbGVmdChtc2cpKTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0c2l6ZV90IGNvcHkgPSBtaW4zKHR4Yi1cXHUwMDNlc3BhY2UsIGxlbiwgbXNnX2RhdGFfbGVmdChtc2cpKTtcXG4gXFxuIFxcdFxcdFxcdF9kZWJ1ZyhcXFwiYWRkICV6dVxcXCIsIGNvcHkpO1xcbiBcXHRcXHRcXHRpZiAoIWNvcHlfZnJvbV9pdGVyX2Z1bGwodHhiLVxcdTAwM2VkYXRhICsgdHhiLVxcdTAwM2VvZmZzZXQsXFxuQEAgLTQyOCw2ICs0MzYsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdFxcdFxcdHR4Yi1cXHUwMDNlbGVuICs9IGNvcHk7XFxuIFxcdFxcdFxcdHR4Yi1cXHUwMDNlb2Zmc2V0ICs9IGNvcHk7XFxuIFxcdFxcdFxcdGNvcGllZCArPSBjb3B5O1xcbitcXHRcXHRcXHRsZW4gLT0gY29weTtcXG4gXFx0XFx0XFx0aWYgKGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSlcXG4gXFx0XFx0XFx0XFx0Y2FsbC1cXHUwMDNldHhfdG90YWxfbGVuIC09IGNvcHk7XFxuIFxcdFxcdH1cXG5AQCAtNDM5LDYyICs0NDgsMTAwIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gXFxuIFxcdFxcdC8qIGFkZCB0aGUgcGFja2V0IHRvIHRoZSBzZW5kIHF1ZXVlIGlmIGl0J3Mgbm93IGZ1bGwgKi9cXG4gXFx0XFx0aWYgKCF0eGItXFx1MDAzZXNwYWNlIHx8XFxuLVxcdFxcdCAgICAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXFx1MDAyNlxcdTAwMjYgIW1vcmUpKSB7XFxuLVxcdFxcdFxcdGlmIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCBcXHUwMDI2XFx1MDAyNiAhbW9yZSlcXG4tXFx0XFx0XFx0XFx0dHhiLVxcdTAwM2VmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDtcXG4tXFxuK1xcdFxcdCAgICAobGVuID09IDAgXFx1MDAyNlxcdTAwMjYgIW1vcmUpKSB7XFxuK1xcdFxcdFxcdC8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZFxcbitcXHRcXHRcXHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxcbitcXHRcXHRcXHQgKiBlbmNyeXB0LiAgQXNzdW1lIHRoYXQgRU5PTUVNIGlzIHJldHJ5YWJsZSwgYnV0XFxuK1xcdFxcdFxcdCAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC5cXG4rXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdHJldCA9IGNhbGwtXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0LyogQXNzdW1lIHRoYXQgRU5PTUVNIGhlcmUgbWVhbnMgdGhhdCB0aGVcXG4rXFx0XFx0XFx0XFx0ICogZW5jcnlwdGlvbiBoYXNuJ3QgaGFwcGVuZWQgeWV0LiAgVGhlIGRhdGEgaXNcXG4rXFx0XFx0XFx0XFx0ICogYWxpZ25lZCB0byBhdm9pZCB0aGUgbmVlZCBmb3Igc2xvdyBidWZmZXJpbmdcXG4rXFx0XFx0XFx0XFx0ICogaW4gdGhlIGNyeXB0byB3YWxrLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PTUVNKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIG1heWJlX2Vycm9yX3Jld2luZDtcXG4rXFx0XFx0XFx0XFx0c2V0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF90eGI7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGlmIChsZW4gPT0gMCBcXHUwMDI2XFx1MDAyNiAhbW9yZSlcXG4rXFx0XFx0XFx0XFx0dHhiLVxcdTAwM2VmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDtcXG4gXFx0XFx0XFx0cnhycGNfcXVldWVfcGFja2V0KHJ4LCBjYWxsLCB0eGIsIG5vdGlmeV9lbmRfdHgpO1xcbiBcXHRcXHRcXHR0eGIgPSBOVUxMO1xcbiBcXHRcXHR9XFxuLVxcdH0gd2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSBcXHUwMDNlIDApO1xcbitcXHR9IHdoaWxlIChsZW4gXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IG1zZ19kYXRhX2xlZnQobXNnKSBcXHUwMDNlIDApO1xcbiBcXG4gc3VjY2VzczpcXG4gXFx0cmV0ID0gY29waWVkO1xcbi1cXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgY2FsbC1cXHUwMDNlZXJyb3IgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXQgPSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4tb3V0OlxcbitvdXRfdHhiOlxcbiBcXHRjYWxsLVxcdTAwM2V0eF9wZW5kaW5nID0gdHhiO1xcbitvdXRfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmNhbGwtXFx1MDAzZXVzZXJfbXV0ZXgpO1xcbiBcXHRfbGVhdmUoXFxcIiA9ICVkXFxcIiwgcmV0KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gXFxuIGNhbGxfdGVybWluYXRlZDpcXG4gXFx0cnhycGNfcHV0X3R4YnVmKHR4YiwgcnhycGNfdHhidWZfcHV0X3NlbmRfYWJvcnRlZCk7XFxuLVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCBjYWxsLVxcdTAwM2VlcnJvcik7XFxuLVxcdHJldHVybiBjYWxsLVxcdTAwM2VlcnJvcjtcXG4tXFxuK1xcdGNhbGwtXFx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xcbitcXHRyZXQgPSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4rXFx0Z290byBvdXRfdW5sb2NrO1xcbitcXG4rbWF5YmVfZXJyb3JfcmV3aW5kOlxcbitcXHQvKiBJZiB3ZSBnb3QgYSByZXRyeWFibGUgZXJyb3IgYWZ0ZXIgY29weWluZyBhbGwgdGhlIHN1cHBsaWVkIGRhdGEgaW50b1xcbitcXHQgKiB0aGUgbGFzdCBwYWNrZXQsIHdlIG5lZWQgdG8gcmV3aW5kIGFzIG11Y2ggYXMgd2UgY2FuIHNvIHRoZSBjYWxsZXJcXG4rXFx0ICoga25vd3MgdGhleSBuZWVkIHRvIHJldHJ5IHRoZSBzZW5kbXNnLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNvcGllZCBcXHUwMDI2XFx1MDAyNiAhbW9yZSBcXHUwMDI2XFx1MDAyNiAhbGVuKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCByZXdpbmRfYnkgPSB1bWluKGNvcGllZCwgdHhiLVxcdTAwM2VsZW4pO1xcbitcXG4rXFx0XFx0dHhiLVxcdTAwM2VzcGFjZSAgKz0gcmV3aW5kX2J5O1xcbitcXHRcXHR0eGItXFx1MDAzZWxlbiAgICAtPSByZXdpbmRfYnk7XFxuK1xcdFxcdHR4Yi1cXHUwMDNlb2Zmc2V0IC09IHJld2luZF9ieTtcXG4rXFx0XFx0Y29waWVkICAgICAgLT0gcmV3aW5kX2J5O1xcbitcXHRcXHRpZiAoY2FsbC1cXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxcbitcXHRcXHRcXHRjYWxsLVxcdTAwM2V0eF90b3RhbF9sZW4gKz0gcmV3aW5kX2J5O1xcbitcXHRcXHRpb3ZfaXRlcl9yZXZlcnQoXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIsIHJld2luZF9ieSk7XFxuK1xcdH1cXG4gbWF5YmVfZXJyb3I6XFxuLVxcdGlmIChjb3BpZWQpXFxuK1xcdGlmIChjb3BpZWQpIHtcXG4rXFx0XFx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGNhbGwtXFx1MDAzZWVycm9yIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRyZXQgPSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4rXFx0XFx0XFx0Z290byBvdXRfdHhiO1xcbitcXHRcXHR9XFxuIFxcdFxcdGdvdG8gc3VjY2VzcztcXG4tXFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0Z290byBvdXRfdHhiO1xcbiBcXG4gZWZhdWx0OlxcbiBcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRnb3RvIG91dDtcXG4rXFx0Z290byBvdXRfdHhiO1xcbiBcXG4gd2FpdF9mb3Jfc3BhY2U6XFxuIFxcdHJldCA9IC1FQUdBSU47XFxuIFxcdGlmIChtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVClcXG4gXFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KTtcXG4tXFx0Kl9kcm9wcGVkX2xvY2sgPSB0cnVlO1xcbitcXG4gXFx0cmV0ID0gcnhycGNfd2FpdF9mb3JfdHhfd2luZG93KHJ4LCBjYWxsLCBcXHUwMDI2dGltZW8sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19XQUlUQUxMKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gbWF5YmVfZXJyb3I7XFxuK1xcdFxcdGdvdG8gb3V0X25vbG9jaztcXG4gXFx0aWYgKGNhbGwtXFx1MDAzZWludGVycnVwdGliaWxpdHkgPT0gUlhSUENfSU5URVJSVVBUSUJMRSkge1xcbiBcXHRcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcXG4tXFx0XFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4rXFx0XFx0XFx0Z290byBvdXRfbm9sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNhbGwtXFx1MDAzZXVzZXJfbXV0ZXgpO1xcbiBcXHR9XFxuLVxcdCpfZHJvcHBlZF9sb2NrID0gZmFsc2U7XFxuIFxcdGdvdG8gcmVsb2FkO1xcbitvdXRfbm9sb2NrOlxcbitcXHRfbGVhdmUoXFxcIiA9ICVkIFtpbnRyXVxcXCIsIHJldCk7XFxuK1xcdHJldHVybiBjb3BpZWQgPzogcmV0O1xcbiB9XFxuIFxcbiAvKlxcbkBAIC02NjAsNyArNzA3LDYgQEAgcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLFxcbiBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbDtcXG4tXFx0Ym9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyBwID0ge1xcbkBAIC03NjksMTYgKzgxNSwxNSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gXFx0XFx0cmV0ID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgUlhSUENfQ01EX1NFTkRfREFUQTpcXG4tXFx0XFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCwgXFx1MDAyNmRyb3BwZWRfbG9jayk7XFxuLVxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMKTtcXG4rXFx0XFx0Z290byBlcnJvcl9wdXQ7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbiBvdXRfcHV0X3VubG9jazpcXG4tXFx0aWYgKCFkcm9wcGVkX2xvY2spXFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y2FsbC1cXHUwMDNldXNlcl9tdXRleCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Y2FsbC1cXHUwMDNldXNlcl9tdXRleCk7XFxuIGVycm9yX3B1dDpcXG4gXFx0cnhycGNfcHV0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9wdXRfc2VuZG1zZyk7XFxuIFxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbkBAIC04MDAsMTUgKzg0NSwyMSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gICogQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byBzZW5kIGRhdGEgb24gYSBjYWxsLiAgVGhlIGNhbGwgbXVzdCBiZSBpbiBhbiBzdGF0ZVxcbiAgKiBhcHByb3ByaWF0ZSB0byBzZW5kaW5nIGRhdGEuICBObyBjb250cm9sIGRhdGEgc2hvdWxkIGJlIHN1cHBsaWVkIGluIEBtc2csXFxuICAqIG5vciBzaG91bGQgYW4gYWRkcmVzcyBiZSBzdXBwbGllZC4gIE1TR19NT1JFIHNob3VsZCBiZSBmbGFnZ2VkIGlmIHRoZXJlJ3NcXG4tICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZS5cXG4rICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZSBpZlxcbisgKiBhbGwgdGhlIGRhdGEgaXMgYnVmZmVyZWQuXFxuKyAqXFxuKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYSBzaG9ydCBzZW5kLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZVxcbisgKiBjYWxsZWQgYWdhaW4gZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgb3IgdG8gcGljayB1cCBhbiBlcnJvciB0aGF0XFxuKyAqIGNhdXNlZCB0aGUgc2hvcnQgc2VuZC5cXG4gICpcXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgYnl0ZXMgYnVmZmVyZWQgKGNvdWxkIGJlICUwIGlmIEBsZW4gaXMgMCBvclxcbisgKiBtc2dfaXRlciBob2xkcyAwIGJ5dGVzKSBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICogb3RoZXJ3aXNlLlxcbiAgKi9cXG4gaW50IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpXFxuIHtcXG4tXFx0Ym9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdF9lbnRlcihcXFwieyVkfSxcXFwiLCBjYWxsLVxcdTAwM2VkZWJ1Z19pZCk7XFxuQEAgLTgxOSwxMiArODcwLDEwIEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KTtcXG4gXFxuIFxcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLVxcdTAwM2VzayksIGNhbGwsIG1zZywgbGVuLFxcbi1cXHRcXHRcXHQgICAgICBub3RpZnlfZW5kX3R4LCBcXHUwMDI2ZHJvcHBlZF9sb2NrKTtcXG4rXFx0XFx0XFx0ICAgICAgbm90aWZ5X2VuZF90eCk7XFxuIFxcdGlmIChyZXQgPT0gLUVTSFVURE9XTilcXG4gXFx0XFx0cmV0ID0gY2FsbC1cXHUwMDNlZXJyb3I7XFxuIFxcbi1cXHRpZiAoIWRyb3BwZWRfbG9jaylcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KTtcXG4gXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDk6MjMuODUwMzcxMjUxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NDE5MDI2OTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJSWEdLXCIsXG4gICAgXCJSWFBFUkZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyeHJwY19zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX2RvX3NlbmRtc2dcIixcbiAgICBcInJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX3JlY3Ztc2dcIixcbiAgICBcInJ4cnBjX25vdGlmeV9zb2NrZXRcIixcbiAgICBcInJ4cnBjX3Bva2VfY29ublwiLFxuICAgIFwicnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrXCIsXG4gICAgXCJyeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eVwiLFxuICAgIFwiYWZzX21ha2VfY2FsbFwiLFxuICAgIFwiYWZzX3NlbmRfc2ltcGxlX3JlcGx5XCIsXG4gICAgXCJhZnNfc2VuZF9lbXB0eV9yZXBseVwiLFxuICAgIFwiYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5cIixcbiAgICBcInJ4cGVyZl9wcm9jZXNzX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBzb2NrZXQgZGF0YSBzZW5kaW5nIGFuZCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLCBjb25uZWN0aW9uIHJlZmVyZW5jZSBjb3VudGluZywga2V5IHBheWxvYWQgcGFyc2luZywgYW5kIGluLWtlcm5lbCBBRlMvcnhwZXJmIHNlbmQgcGF0aHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZXMgYW5kIGVycm9yLWhhbmRsaW5nIHBhdGhzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQUZfUlhSUEMgc29ja2V0cywga2V5cyBzeXNjYWxscywgYW5kIEFGUyBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZDNhZmYyMzM3NjkwODE2OTNlZGE4ODliNThhYTMyMDNhNjI4OTJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDo0OToyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0XG5pbmRleCA4OTI2ZGFiOGUyZTYwLi43ZGY2YWZmNzY0NGMwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdFxuQEAgLTg3OSwxNCArODc5LDIxIEBAIFRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czpcbiAgICAgIGV4Y2x1c2l2ZWx5IHRvIGluLWtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Nlcy4gIG1zZy5tc2dfZmxhZ3MgbWF5IGJlIGdpdmVuXG4gICAgICBNU0dfTU9SRSBpZiB0aGVyZSB3aWxsIGJlIHN1YnNlcXVlbnQgZGF0YSBzZW5kcyBmb3IgdGhpcyBjYWxsLlxuIFxuLSAgICAgVGhlIG1zZyBtdXN0IG5vdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24gYWRkcmVzcywgY29udHJvbCBkYXRhIG9yIGFueSBmbGFnc1xuLSAgICAgb3RoZXIgdGhhbiBNU0dfTU9SRS4gIGxlbiBpcyB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgdG8gdHJhbnNtaXQuXG4rICAgICBtc2cgbXVzdCBub3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGNvbnRyb2wgZGF0YSBvciBhbnkgZmxhZ3NcbisgICAgIG90aGVyIHRoYW4gTVNHX01PUkUuICBsZW4gaXMgdGhlIGFtb3VudCBvZiBkYXRhIHRvIGFkZCB0byB0aGVcbisgICAgIHRyYW5zbWlzc2lvbi4gIFRoZSBsYXN0LXBhY2tldCBmbGFnIHdpbGwgb25seSBiZSBzZXQgb24gdGhlIG91dGdvaW5nXG4rICAgICBwYWNrZXQgaWYgTVNHX01PUkUgaXMgbm90IHNldCBhbmQgbGVuIGFtb3VudCBvZiBieXRlcyBhcmUgYnVmZmVyZWQuXG4gXG4gICAgICBub3RpZnlfZW5kX3J4IGNhbiBiZSBOVUxMIG9yIGl0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBmdW5jdGlvbiB0byBiZVxuICAgICAgY2FsbGVkIHdoZW4gdGhlIGNhbGwgY2hhbmdlcyBzdGF0ZSB0byBlbmQgdGhlIFR4IHBoYXNlLiAgVGhpcyBmdW5jdGlvbiBpc1xuICAgICAgY2FsbGVkIHdpdGggYSBzcGlubG9jayBoZWxkIHRvIHByZXZlbnQgdGhlIGxhc3QgREFUQSBwYWNrZXQgZnJvbSBiZWluZ1xuICAgICAgdHJhbnNtaXR0ZWQgdW50aWwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG4gXG4rICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50IG9mIGRhdGEgYnVmZmVyZWQgb3IgYW4gZXJyb3IuICBJdCB3aWxsXG4rICAgICByZXR1cm4gemVybyBvbmx5IGlmIGxlbiBpcyAwIG9yIGlmIG1zZy1cdTAwM2Vtc2dfaXRlciBpcyBlbXB0eS4gIEl0IG1heSBhbHNvXG4rICAgICBtYWtlIGEgc2hvcnQgd3JpdGUsIGJ1ZmZlcmluZyBsZXNzIHRoYW4gdGhlIGFtb3VudCBvZiBkYXRhIHByb3ZpZGVkIG9yIHRoZVxuKyAgICAgbGVuIHNwZWNpZmllZCwgaW4gd2hpY2ggY2FzZSBpdCBzaG91bGQgYmUgY2FsbGVkIGFnYWluLlxuK1xuICAoIykgUmVjZWl2ZSBkYXRhIGZyb20gYSBjYWxsOjpcbiBcbiBcdGludCByeHJwY19rZXJuZWxfcmVjdl9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuaW5kZXggMTAzMTY4YzcwZGQ0ZC4uNWVlZWVmNzYxY2YzMSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG4rKysgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4gXHQgKlx0c3RydWN0IFJYR0tfQXV0aE5hbWVcdGlkZW50aXRpZXNcdTAwM2NcdTAwM2U7XG4gXHQgKiB9O1xuIFx0ICovXG4tXHR0b2tzaXplID0ga2V5c2l6ZSArIDggKyA0ICsgNCArIDggKyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XG4rXHR0b2tzaXplID0ga2V5c2l6ZSArIDQgKyA4ICsgNCArIDQgKyA4ICsgeGRyX2xlbl9vYmplY3QoYXV0aHNpemUpO1xuIFxuIFx0b2Zmc2V0ID0gMDtcbiBcdGVuY3NpemUgPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIodG9rZW5fa3JiNSwgS1JCNV9FTkNSWVBUX01PREUsIHRva3NpemUsIFx1MDAyNm9mZnNldCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggMjkwODczYmFjODliMy4uNjVhMDg2NmNkOGI4NSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9hZnMvaW50ZXJuYWwuaFxuQEAgLTE0MTYsMjIgKzE0MTYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NlZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZW51bSBhZnNfY2FsbF90cmFjZSB3aHkpXG4gXHRcdCAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbi1cdFx0XHRcdCAgICBnZnBfdCBnZnApXG4te1xuLVx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXHUwMDNlZXN0YXRlLVx1MDAzZWFkZHJlc3Nlcztcbi1cbi1cdG9wLVx1MDAzZWNhbGxcdD0gYWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2dldCk7XG4tXHRvcC1cdTAwM2V0eXBlXHQ9IGNhbGwtXHUwMDNldHlwZTtcbi1cdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4tXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG4tXHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuLVx0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbi1cdGNhbGwtXHUwMDNlc2VydmljZV9pZCA9IG9wLVx1MDAzZXNlcnZlci1cdTAwM2VzZXJ2aWNlX2lkO1xuLVx0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2V4dHJhY3RfYmVnaW4oc3RydWN0IGFmc19jYWxsICpjYWxsLCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxuIHtcbiBcdGNhbGwtXHUwMDNlaW92X2xlbiA9IHNpemU7XG5AQCAtMTc2Myw2ICsxNzQ3LDIzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpBRlNfVk5PREVfVE9fSShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSlcbiBcdHJldHVybiBcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4rXHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLVx1MDAzZWVzdGF0ZS1cdTAwM2VhZGRyZXNzZXM7XG4rXG4rXHRvcC1cdTAwM2VjYWxsXHQ9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpO1xuK1x0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4rXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuK1x0Y2FsbC1cdTAwM2VzZXJ2ZXJcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XG4rXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG4rXHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuK1x0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbitcdGNhbGwtXHUwMDNlc2VydmljZV9pZCA9IG9wLVx1MDAzZXNlcnZlci1cdTAwM2VzZXJ2aWNlX2lkO1xuK1x0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuK1x0YWZzX3B1dF9jYWxsKGNhbGwpO1xuK31cbitcbiAvKlxuICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb25cbiAgKiBudW1iZXIgZGVyaXZlZCBmcm9tIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuY1xuaW5kZXggZDgyOTE2NjU3YTNkZC4uMWY1YjZhYTY4OTQzMyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9yeHJwYy5jXG4rKysgYi9mcy9hZnMvcnhycGMuY1xuQEAgLTQxMiwyNiArNDEyLDMyIEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdG1zZy5tc2dfY29udHJvbGxlblx0PSAwO1xuIFx0bXNnLm1zZ19mbGFnc1x0XHQ9IE1TR19XQUlUQUxMIHwgKGNhbGwtXHUwMDNld3JpdGVfaXRlciA/IE1TR19NT1JFIDogMCk7XG4gXG4tXHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZtc2csIGNhbGwtXHUwMDNlcmVxdWVzdF9zaXplLFxuLVx0XHRcdFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XG4rXHRkbyB7XG4rXHRcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCByeGNhbGwsIFx1MDAyNm1zZyxcbitcdFx0XHRcdFx0ICAgICBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZyksXG4rXHRcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbitcdH0gd2hpbGUgKG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMCk7XG4gXG4gXHRpZiAoY2FsbC1cdTAwM2V3cml0ZV9pdGVyKSB7XG4gXHRcdG1zZy5tc2dfaXRlciA9ICpjYWxsLVx1MDAzZXdyaXRlX2l0ZXI7XG4gXHRcdG1zZy5tc2dfZmxhZ3MgXHUwMDI2PSB+TVNHX01PUkU7XG4gXHRcdHRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgXHUwMDI2bXNnKTtcbiBcbi1cdFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsXG4tXHRcdFx0XHRcdCAgICAgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZyxcbi1cdFx0XHRcdFx0ICAgICBpb3ZfaXRlcl9jb3VudChcdTAwMjZtc2cubXNnX2l0ZXIpLFxuLVx0XHRcdFx0XHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xuK1x0XHRkbyB7XG4rXHRcdFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsXG4rXHRcdFx0XHRcdFx0ICAgICBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLFxuK1x0XHRcdFx0XHRcdCAgICAgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuK1x0XHRcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIHJldCk7XG4rXHRcdFx0XHRnb3RvIGVycm9yX2RvX2Fib3J0O1xuK1x0XHRcdH1cbitcdFx0fSB3aGlsZSAobXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpIFx1MDAzZSAwKTtcbiBcdFx0KmNhbGwtXHUwMDNld3JpdGVfaXRlciA9IG1zZy5tc2dfaXRlcjtcbiBcbi1cdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIHJldCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbitcdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIDApO1xuIFx0fVxuIFxuIFx0LyogTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQsIHdlIG1heSBoYXZlIHJlY2VpdmVkIHRoZSByZXBseSBvciBhbiBhYm9ydFxuQEAgLTQ0MywxMCArNDQ5LDggQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0cmV0dXJuO1xuIFxuIGVycm9yX2RvX2Fib3J0OlxuLVx0aWYgKHJldCAhPSAtRUNPTk5BQk9SVEVEKVxuLVx0XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIHJ4Y2FsbCxcbi1cdFx0XHRcdFx0UlhfVVNFUl9BQk9SVCwgcmV0LFxuLVx0XHRcdFx0XHRhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yKTtcbitcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLFxuK1x0XHRcdFx0UlhfVVNFUl9BQk9SVCwgcmV0LCBhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yKTtcbiBcdGlmIChjYWxsLVx1MDAzZWFzeW5jKSB7XG4gXHRcdGFmc19zZWVfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9hc3luY19hYm9ydCk7XG4gXHRcdHJldHVybjtcbkBAIC04NTksNiArODYzLDcgQEAgdm9pZCBhZnNfc2VuZF9lbXB0eV9yZXBseShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4ge1xuIFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IGNhbGwtXHUwMDNlbmV0O1xuIFx0c3RydWN0IG1zZ2hkciBtc2c7XG4rXHRpbnQgcmV0O1xuIFxuIFx0X2VudGVyKFwiXCIpO1xuIFxuQEAgLTg3MSwyMiArODc2LDEzIEBAIHZvaWQgYWZzX3NlbmRfZW1wdHlfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIFx0bXNnLm1zZ19jb250cm9sbGVuXHQ9IDA7XG4gXHRtc2cubXNnX2ZsYWdzXHRcdD0gMDtcbiBcbi1cdHN3aXRjaCAocnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCAwLFxuLVx0XHRcdFx0ICAgICAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KSkge1xuLVx0Y2FzZSAwOlxuLVx0XHRfbGVhdmUoXCIgW3JlcGxpZWRdXCIpO1xuK1x0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCAwLFxuK1x0XHRcdFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCkgLyogU2hvdWxkbid0IGJ1ZmZlciBtb3JlIHRoYW4gMCBieXRlcy4gKi9cbiBcdFx0cmV0dXJuO1xuIFxuLVx0Y2FzZSAtRU5PTUVNOlxuLVx0XHRfZGVidWcoXCJvb21cIik7XG4tXHRcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuLVx0XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLFxuLVx0XHRcdFx0XHRhZnNfYWJvcnRfb29tKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRkZWZhdWx0OlxuLVx0XHRfbGVhdmUoXCIgW2Vycm9yXVwiKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuK1x0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsXG4rXHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCByZXQsIGFmc19hYm9ydF9zZW5kX2Vycm9yKTtcbiB9XG4gXG4gLypcbkBAIC05MTIsMjAgKzkwOCwyMSBAQCB2b2lkIGFmc19zZW5kX3NpbXBsZV9yZXBseShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdG1zZy5tc2dfY29udHJvbGxlblx0PSAwO1xuIFx0bXNnLm1zZ19mbGFnc1x0XHQ9IDA7XG4gXG4tXHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCBsZW4sXG4tXHRcdFx0XHQgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCk7XG4rXHRkbyB7XG4rXHRcdG4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZtc2csIG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSxcbitcdFx0XHRcdFx0ICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuK1x0fSB3aGlsZSAobiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMCk7XG4rXG4gXHRpZiAobiBcdTAwM2U9IDApIHtcbiBcdFx0LyogU3VjY2VzcyAqL1xuIFx0XHRfbGVhdmUoXCIgW3JlcGxpZWRdXCIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobiA9PSAtRU5PTUVNKSB7XG4tXHRcdF9kZWJ1ZyhcIm9vbVwiKTtcbi1cdFx0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsXG4tXHRcdFx0XHRcdFJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sXG4tXHRcdFx0XHRcdGFmc19hYm9ydF9vb20pO1xuLVx0fVxuK1xuK1x0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsXG4rXHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCBuLCBhZnNfYWJvcnRfc2VuZF9lcnJvcik7XG4gXHRfbGVhdmUoXCIgW2Vycm9yXVwiKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuaW5kZXggMWIzYzQ4YjU1OTFkZi4uMDRiMGJiNjgyYjgxMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuQEAgLTE0OCw2ICsxNDgsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24ge1xuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91bnVzZV9zbGlzdF9pc29ydCxcdFwiVU5VIGlzb3J0XCIpIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VwZGF0ZSxcdFx0XCJVUERBVEUgICBcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXHRcIlVTRSB1dWlkIFwiKSBcXFxuK1x0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcdFx0XCJVU0UgY2FsbCBcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NtX2NhbGwsXHRcIlVTRSBjbS1jbFwiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2V0X2NhcHMsXHRcIlVTRSBnY2Fwc1wiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcdFwiVVNFIGd2dXBjXCIpIFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbmluZGV4IDcwNGExMGRlNjY3MDAuLjUyZjg3MThjZjcyNTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oXG5AQCAtMjAsMTYgKzIwLDE2IEBAXG4gXHQvKiBBRlMgZXJyb3JzICovXHRcdFx0XHRcdFx0XFxcbiBcdEVNKGFmc19hYm9ydF9nZW5lcmFsX2Vycm9yLFx0XHRcImFmcy1lcnJvclwiKVx0XHRcXFxuIFx0RU0oYWZzX2Fib3J0X2ludGVycnVwdGVkLFx0XHRcImFmcy1pbnRyXCIpXHRcdFxcXG4tXHRFTShhZnNfYWJvcnRfb29tLFx0XHRcdFwiYWZzLW9vbVwiKVx0XHRcXFxuIFx0RU0oYWZzX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsXHRcdFwiYWZzLW9wLW5vdHN1cHBcIilcdFxcXG4gXHRFTShhZnNfYWJvcnRfcHJvYmV1dWlkX25lZ2F0aXZlLFx0XCJhZnMtcHJvYmV1dWlkLW5lZ1wiKVx0XFxcbiBcdEVNKGFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IsXHRcdFwiYWZzLXNlbmQtZGF0YVwiKVx0XFxcbitcdEVNKGFmc19hYm9ydF9zZW5kX2Vycm9yLFx0XHRcImFmcy1zZW5kLWVycm9yXCIpXHRcXFxuIFx0RU0oYWZzX2Fib3J0X3VubWFyc2hhbF9lcnJvcixcdFx0XCJhZnMtdW5tYXJzaGFsXCIpXHRcXFxuIFx0RU0oYWZzX2Fib3J0X3Vuc3VwcG9ydGVkX3NlY19jbGFzcyxcdFwiYWZzLXVuc3VwLXNlYy1jbGFzc1wiKVx0XFxcbiBcdC8qIHJ4cGVyZiBlcnJvcnMgKi9cdFx0XHRcdFx0XHRcXFxuIFx0RU0ocnhwZXJmX2Fib3J0X2dlbmVyYWxfZXJyb3IsXHRcdFwicnhwZXJmLWVycm9yXCIpXHRcdFxcXG4tXHRFTShyeHBlcmZfYWJvcnRfb29tLFx0XHRcdFwicnhwZXJmLW9vbVwiKVx0XHRcXFxuIFx0RU0ocnhwZXJmX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsXHRcInJ4cGVyZi1vcC1ub3RzdXBwXCIpXHRcXFxuK1x0RU0ocnhwZXJmX2Fib3J0X3NlbmRfZXJyb3IsXHRcdFwicnhwZXJmLXNlbmQtZXJyb3JcIilcdFxcXG4gXHRFTShyeHBlcmZfYWJvcnRfdW5tYXJzaGFsX2Vycm9yLFx0XCJyeHBlcmYtdW5tYXJzaGFsXCIpXHRcXFxuIFx0LyogUnhLQUQgc2VjdXJpdHkgZXJyb3JzICovXHRcdFx0XHRcdFxcXG4gXHRFTShyeGthZF9hYm9ydF8xX3Nob3J0X2NoZWNrLFx0XHRcInJ4a2FkMS1zaG9ydC1jaGVja1wiKVx0XFxcbkBAIC0xNDgsNiArMTQ4LDcgQEBcbiBcdEVNKHJ4cnBjX2Vwcm90b193cm9uZ19zZWN1cml0eSxcdFx0XCJ3cm9uZy1zZWNcIilcdFx0XFxcbiBcdEVNKHJ4cnBjX3JlY3Ztc2dfZXhjZXNzX2RhdGEsXHRcdFwicmVjdm1zZy1leGNlc3NcIilcdFxcXG4gXHRFTShyeHJwY19yZWN2bXNnX3Nob3J0X2RhdGEsXHRcdFwicmVjdm1zZy1zaG9ydFwiKVx0XFxcbitcdEVNKHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXHRcdFwidHgtZXJyb3JcIilcdFx0XFxcbiBcdEVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFx0XHRcInNlbmRtc2ctbGF0ZVwiKVxuIFxuICNkZWZpbmUgcnhycGNfY2FsbF9wb2tlX3RyYWNlcyBcXFxuQEAgLTM0Miw2ICszNDMsNyBAQFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfZGlzdHJpYnV0ZV9lcnJvcixcdFwiU0VFIGRpc3QtZXJyXCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9pbnB1dCxcdFx0XCJTRUUgaW5wdXQgICBcIikgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9yZWxlYXNlZCxcdFwiU0VFIG5meS1ybHNkXCIpIFxcXG4rXHRFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCxcdFwiU0VFIG5meS1za2lwXCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnLFx0XHRcIlNFRSByZWN2bXNnIFwiKSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZ19yZXF1ZXVlLFx0XCJTRUUgcmVjdi1ycXVcIikgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2dfcmVxdWV1ZV9maXJzdCwgXCJTRUUgcmVjdi1ycUZcIikgXFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaCBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5pbmRleCA4NjVmMDVmZTM3YWI5Li5jYjM2YTcwOWY1NDBlIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbisrKyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5AQCAtNjQyLDYgKzY0Miw3IEBAIGVudW0gcnhycGNfY2FsbF9mbGFnIHtcbiBcdFJYUlBDX0NBTExfVFhfTEFTVCxcdFx0LyogTGFzdCBwYWNrZXQgaW4gVHggYnVmZmVyIChhdCByeHR4X3RvcCkgKi9cbiBcdFJYUlBDX0NBTExfVFhfQUxMX0FDS0VELFx0LyogTGFzdCBwYWNrZXQgaGFzIGJlZW4gaGFyZC1hY2tlZCAqL1xuIFx0UlhSUENfQ0FMTF9UWF9OT19NT1JFLFx0XHQvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovXG4rXHRSWFJQQ19DQUxMX1RYX0VSUk9SLFx0XHQvKiBUZXJtaW5hbCBlcnJvcjsgY2FsbCBuZWVkcyBhYm9ydCAqL1xuIFx0UlhSUENfQ0FMTF9TRU5EX1BJTkcsXHRcdC8qIEEgcGluZyB3aWxsIG5lZWQgdG8gYmUgc2VudCAqL1xuIFx0UlhSUENfQ0FMTF9SRVRSQU5TX1RJTUVPVVQsXHQvKiBSZXRyYW5zbWlzc2lvbiBkdWUgdG8gdGltZW91dCBvY2N1cnJlZCAqL1xuIFx0UlhSUENfQ0FMTF9CRUdBTl9SWF9USU1FUixcdC8qIFdlIGJlZ2FuIHRoZSBleHBlY3RfcnhfYnkgdGltZXIgKi9cbkBAIC0xMTA5LDYgKzExMTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnhycGNfaXNfY2xpZW50X2NhbGwoY29uc3Qgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gLypcbiAgKiBjYWxsX3N0YXRlLmNcbiAgKi9cbit2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpO1xuIGJvb2wgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICAgICAgZW51bSByeHJwY19jYWxsX2NvbXBsZXRpb24gY29tcGwsXG4gXHRcdFx0ICAgICAgIHUzMiBhYm9ydF9jb2RlLFxuQEAgLTE0NDEsNyArMTQ0Myw2IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcnhycGNfbG9jYWxfc2VxX29wcztcbiAvKlxuICAqIHJlY3Ztc2cuY1xuICAqL1xuLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqKTtcbiBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtc2doZHIgKiwgc2l6ZV90LCBpbnQpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbmluZGV4IDZhZmI1NDM3M2ViYmYuLjM2NDgxMGM2NTI3NjYgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jXG4rKysgYi9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jXG5AQCAtNyw2ICs3LDYwIEBAXG4gXG4gI2luY2x1ZGUgXCJhci1pbnRlcm5hbC5oXCJcbiBcbisvKlxuKyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS5cbisgKi9cbitzdGF0aWMgdm9pZCBfX3J4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4re1xuK1x0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xuK1x0c3RydWN0IHNvY2sgKnNrO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdGlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1JFTEVBU0VELCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVx1MDAzZXNvY2tldCk7XG4rXHRzayA9IFx1MDAyNnJ4LVx1MDAzZXNrO1xuK1x0aWYgKHJ4IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSBcdTAwM2MgUlhSUENfQ0xPU0UpIHtcbitcdFx0aWYgKGNhbGwtXHUwMDNlbm90aWZ5X3J4KSB7XG4rXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y2FsbC1cdTAwM2Vub3RpZnlfbG9jaywgZmxhZ3MpO1xuK1x0XHRcdGNhbGwtXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVx1MDAzZXVzZXJfY2FsbF9JRCk7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrLCBmbGFncyk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrLCBmbGFncyk7XG4rXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmspKSB7XG4rXHRcdFx0XHRyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTtcbitcdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4rXHRcdFx0fVxuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrLCBmbGFncyk7XG4rXG4rXHRcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcbitcdFx0XHRcdF9kZWJ1ZyhcImNhbGwgJXBzXCIsIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuK1x0XHRcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rXG4rLypcbisgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuXG4rICovXG4rdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuK3tcbitcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpKSB7XG4rXHRcdHJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuK31cbitcbiAvKlxuICAqIFRyYW5zaXRpb24gYSBjYWxsIHRvIHRoZSBjb21wbGV0ZSBzdGF0ZS5cbiAgKi9cbkBAIC0yNSw3ICs3OSw3IEBAIGJvb2wgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdHJ4cnBjX3NldF9jYWxsX3N0YXRlKGNhbGwsIFJYUlBDX0NBTExfQ09NUExFVEUpO1xuIFx0dHJhY2VfcnhycGNfY2FsbF9jb21wbGV0ZShjYWxsKTtcbiBcdHdha2VfdXAoXHUwMDI2Y2FsbC1cdTAwM2V3YWl0cSk7XG4tXHRyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuK1x0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX29iamVjdC5jIGIvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcbmluZGV4IDBlY2U3MTdkYjBmODUuLjFiZTUwZTBjOWNlZTUgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9vYmplY3QuY1xuKysrIGIvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcbkBAIC0zNCw3ICszNCwxMCBAQCB2b2lkIHJ4cnBjX3Bva2VfY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgZW51bSByeHJwY19jb25uX3RyYWNlIHdoeSlcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2bG9jYWwtXHUwMDNlbG9jayk7XG4gXHRidXN5ID0gIWxpc3RfZW1wdHkoXHUwMDI2Y29ubi1cdTAwM2VhdHRlbmRfbGluayk7XG4gXHRpZiAoIWJ1c3kpIHtcbi1cdFx0cnhycGNfZ2V0X2Nvbm5lY3Rpb24oY29ubiwgd2h5KTtcbitcdFx0aWYgKCFyeHJwY19nZXRfY29ubmVjdGlvbl9tYXliZShjb25uLCB3aHkpKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZWxvY2spO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNvbm4tXHUwMDNlYXR0ZW5kX2xpbmssIFx1MDAyNmxvY2FsLVx1MDAzZWNvbm5fYXR0ZW5kX3EpO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9rZXkuYyBiL25ldC9yeHJwYy9rZXkuY1xuaW5kZXggYTBhYTc4ZDg5Mjg5Ny4uMzBkNmRiMDUyYzIxNiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9rZXkuY1xuKysrIGIvbmV0L3J4cnBjL2tleS5jXG5AQCAtMTcyLDYgKzE3Miw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG4gXHRjb25zdCBfX2JlMzIgKnRpY2tldCwgKmtleTtcbiBcdHM2NCB0bXA7XG4gXHRzaXplX3QgcmF3X2tleWxlbiwgcmF3X3RrdGxlbiwga2V5bGVuLCB0a3RsZW47XG4rXHRpbnQgcmV0ID0gLUVLRVlSRUpFQ1RFRDtcbiBcbiBcdF9lbnRlcihcIix7JXgsJXgsJXgsJXh9LCV4XCIsXG4gXHQgICAgICAgbnRvaGwoeGRyWzBdKSwgbnRvaGwoeGRyWzFdKSwgbnRvaGwoeGRyWzJdKSwgbnRvaGwoeGRyWzNdKSxcbkBAIC0yMjksNiArMjMwLDExIEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG4gXHR0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWtleS5kYXRhXHQ9IHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNlX2tleTtcbiBcdHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNldGlja2V0LmxlbiA9IHJhd190a3RsZW47XG4gXG4rXHRpZiAoIWNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWVuY3R5cGUpKSB7XG4rXHRcdHJldCA9IC1FTk9QS0c7XG4rXHRcdGdvdG8gcmVqZWN0X3Rva2VuO1xuK1x0fVxuK1xuIFx0aWYgKHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNlZW5kdGltZSAhPSAwKSB7XG4gXHRcdGV4cGlyeSA9IHJ4cnBjX3M2NF90b190aW1lNjQodG9rZW4tXHUwMDNlcnhnay1cdTAwM2VlbmR0aW1lKTtcbiBcdFx0aWYgKGV4cGlyeSBcdTAwM2MgMClcbkBAIC0yODAsNyArMjg2LDcgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCxcbiBcdGtmcmVlKHRva2VuLVx1MDAzZXJ4Z2spO1xuIFx0a2ZyZWUodG9rZW4pO1xuIHJlamVjdDpcbi1cdHJldHVybiAtRUtFWVJFSkVDVEVEO1xuK1x0cmV0dXJuIHJldDtcbiBleHBpcmVkOlxuIFx0a2ZyZWUodG9rZW4tXHUwMDNlcnhnayk7XG4gXHRrZnJlZSh0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3JlY3Ztc2cuYyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcbmluZGV4IGVmY2JhNGIyZTc0ZjAuLjI4YjIxNDhiNTY5MzYgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXG4rKysgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5AQCAtMTcsMTMgKzE3LDEyIEBAXG4gI2luY2x1ZGUgXCJhci1pbnRlcm5hbC5oXCJcbiBcbiAvKlxuLSAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXJcbi0gKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuXG4rICogUmVxdWV1ZSBhIGNhbGwgZm9yIHJlY3Ztc2coKSB0byBwaWNrIHVwLlxuICAqL1xuLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbitzdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4ge1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xuLVx0c3RydWN0IHNvY2sgKnNrO1xuK1x0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbiBcbiBcdF9lbnRlcihcIiVkXCIsIGNhbGwtXHUwMDNlZGVidWdfaWQpO1xuIFxuQEAgLTMyLDMxICszMSwxOCBAQCB2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cbi1cdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbi1cdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4tXHRpZiAocnggXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAzYyBSWFJQQ19DTE9TRSkge1xuLVx0XHRpZiAoY2FsbC1cdTAwM2Vub3RpZnlfcngpIHtcbi1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHRcdGNhbGwtXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVx1MDAzZXVzZXJfY2FsbF9JRCk7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbi1cdFx0XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuLVx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaywgXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbi1cdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbitcdFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbiBcbi1cdFx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuLVx0XHRcdFx0X2RlYnVnKFwiY2FsbCAlcHNcIiwgc2stXHUwMDNlc2tfZGF0YV9yZWFkeSk7XG4tXHRcdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdFx0XHR9XG4tXHRcdH1cbitcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4rXHRcdF9kZWJ1ZyhcImNhbGwgJXBzXCIsIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuK1x0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0X2xlYXZlKFwiXCIpO1xuIH1cbiBcbkBAIC01NjEsNyArNTQ3LDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkpXG4tXHRcdHJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XG4rXHRcdHJ4cnBjX3JlcXVldWVfY2FsbChzb2NrLCBjYWxsKTtcbiBcdGdvdG8gbm90X3lldF9jb21wbGV0ZTtcbiBcbiBjYWxsX2ZhaWxlZDpcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcnhnay5jIGIvbmV0L3J4cnBjL3J4Z2suY1xuaW5kZXggNzdhNjdhY2UxZDI0OC4uYjQ5MjIxZjU3ZjY3NyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGdrLmNcbisrKyBiL25ldC9yeHJwYy9yeGdrLmNcbkBAIC0yNTEsOCArMjUxLDEwIEBAIHN0YXRpYyBpbnQgcnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHRcdCBHRlBfTk9GUyk7XG4gXHRpZiAoSVNfRVJSKGdrKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZ2spO1xuK1x0d3JpdGVfbG9jayhcdTAwMjZjb25uLVx1MDAzZXNlY3VyaXR5X3VzZV9sb2NrKTtcbiBcdGNvbm4tXHUwMDNlcnhnay5lbmN0eXBlID0gZ2stXHUwMDNla3JiNS1cdTAwM2VldHlwZTtcbiBcdGNvbm4tXHUwMDNlcnhnay5rZXlzW2drLVx1MDAzZWtleV9udW1iZXIgXHUwMDI2IDNdID0gZ2s7XG4rXHR3cml0ZV91bmxvY2soXHUwMDI2Y29ubi1cdTAwM2VzZWN1cml0eV91c2VfbG9jayk7XG4gXG4gXHRzd2l0Y2ggKGNvbm4tXHUwMDNlc2VjdXJpdHlfbGV2ZWwpIHtcbiBcdGNhc2UgUlhSUENfU0VDVVJJVFlfUExBSU46XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4cGVyZi5jIGIvbmV0L3J4cnBjL3J4cGVyZi5jXG5pbmRleCBiOGRmNmQyMjMxNGQ2Li5lYmQ1NDIyMmM2NGVmIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3J4cGVyZi5jXG4rKysgYi9uZXQvcnhycGMvcnhwZXJmLmNcbkBAIC01MzgsMTUgKzUzOCwxOCBAQCBzdGF0aWMgaW50IHJ4cGVyZl9wcm9jZXNzX2NhbGwoc3RydWN0IHJ4cGVyZl9jYWxsICpjYWxsKVxuIFx0aW92WzBdLmlvdl9sZW5cdD0gbGVuO1xuIFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIFdSSVRFLCBpb3YsIDEsIGxlbik7XG4gXHRtc2cubXNnX2ZsYWdzID0gMDtcbi1cdG4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLCBcdTAwMjZtc2csIGxlbixcbi1cdFx0XHRcdCAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTtcbitcdGRvIHtcbitcdFx0biA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEocnhwZXJmX3NvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNm1zZywgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuK1x0XHRcdFx0XHQgICByeHBlcmZfbm90aWZ5X2VuZF9yZXBseV90eCk7XG4rXHR9IHdoaWxlIChuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpIFx1MDAzZSAwKTtcbitcbiBcdGlmIChuIFx1MDAzZT0gMClcbiBcdFx0cmV0dXJuIDA7IC8qIFN1Y2Nlc3MgKi9cbiBcbi1cdGlmIChuID09IC1FTk9NRU0pXG4tXHRcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuLVx0XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLFxuLVx0XHRcdFx0XHRyeHBlcmZfYWJvcnRfb29tKTtcbitcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuK1x0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgbixcbitcdFx0XHRcdHJ4cGVyZl9hYm9ydF9zZW5kX2Vycm9yKTtcbiBcdHJldHVybiBuO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VuZG1zZy5jIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuaW5kZXggZWQyYzlhNTEwMDVhZC4uOGJiMzI3ZGMyODMzZSAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmNcbisrKyBiL25ldC9yeHJwYy9zZW5kbXNnLmNcbkBAIC0zMjAsOCArMzIwLDggQEAgc3RhdGljIGludCByeHJwY19hbGxvY190eHF1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0XHRcdCAgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbi1cdFx0XHQgICByeHJwY19ub3RpZnlfZW5kX3R4X3Qgbm90aWZ5X2VuZF90eCxcbi1cdFx0XHQgICBib29sICpfZHJvcHBlZF9sb2NrKVxuK1x0XHRcdCAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KVxuK1x0X19yZWxlYXNlcyhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3R4YnVmICp0eGI7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbkBAIC0zMzAsMjkgKzMzMCwzNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRib29sIG1vcmUgPSBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfTU9SRTtcbiBcdGludCByZXQsIGNvcGllZCA9IDA7XG4gXG4tXHRpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9OT19NT1JFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkge1xuLVx0XHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVx1MDAzZWRlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcbi1cdFx0XHRcdCAgY2FsbC1cdTAwM2VjaWQsIGNhbGwtXHUwMDNlY2FsbF9pZCwgY2FsbC1cdTAwM2VyeF9jb25zdW1lZCxcbi1cdFx0XHRcdCAgMCwgLUVQUk9UTyk7XG4tXHRcdHJldHVybiAtRVBST1RPO1xuLVx0fVxuLVxuIFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIFxuIFx0cmV0ID0gcnhycGNfd2FpdF90b19iZV9jb25uZWN0ZWQoY2FsbCwgXHUwMDI2dGltZW8pO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0aWYgKGNhbGwtXHUwMDNlY29ubi1cdTAwM2VzdGF0ZSA9PSBSWFJQQ19DT05OX0NMSUVOVF9VTlNFQ1VSRUQpIHtcbiBcdFx0cmV0ID0gcnhycGNfaW5pdF9jbGllbnRfY29ubl9zZWN1cml0eShjYWxsLVx1MDAzZWNvbm4pO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0LyogdGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqL1xuIFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCBzayk7XG4gXG4gcmVsb2FkOlxuK1x0aWYgKHVubGlrZWx5KHRlc3RfYml0KFJYUlBDX0NBTExfVFhfTk9fTU9SRSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpKSB7XG4rXHRcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFxuK1x0XHRcdFx0ICBjYWxsLVx1MDAzZWNpZCwgY2FsbC1cdTAwM2VjYWxsX2lkLCBjYWxsLVx1MDAzZXJ4X2NvbnN1bWVkLFxuK1x0XHRcdFx0ICAwLCAtRVBST1RPKTtcbitcdFx0cmV0ID0gLUVQUk9UTztcbitcdFx0Z290byBtYXliZV9lcnJvcjtcbitcdH1cbitcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkpIHtcbitcdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvcixcbitcdFx0XHRcdCAgY2FsbC1cdTAwM2VjaWQsIGNhbGwtXHUwMDNlY2FsbF9pZCwgY2FsbC1cdTAwM2VyeF9jb25zdW1lZCxcbitcdFx0XHRcdCAgMCwgLUVJTyk7XG4rXHRcdHJldCA9IC1FSU87XG4rXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHR9XG4rXG4gXHR0eGIgPSBjYWxsLVx1MDAzZXR4X3BlbmRpbmc7XG4gXHRjYWxsLVx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xuIFx0aWYgKHR4YilcbkBAIC0zNzksOSArMzg3LDkgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFxuIFx0cmV0ID0gLUVNU0dTSVpFO1xuIFx0aWYgKGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKSB7XG4tXHRcdGlmIChsZW4gLSBjb3BpZWQgXHUwMDNlIGNhbGwtXHUwMDNldHhfdG90YWxfbGVuKVxuK1x0XHRpZiAobGVuIFx1MDAzZSBjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbilcbiBcdFx0XHRnb3RvIG1heWJlX2Vycm9yO1xuLVx0XHRpZiAoIW1vcmUgXHUwMDI2XHUwMDI2IGxlbiAtIGNvcGllZCAhPSBjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbilcbitcdFx0aWYgKCFtb3JlIFx1MDAyNlx1MDAyNiBsZW4gIT0gY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4gXHRcdFx0Z290byBtYXliZV9lcnJvcjtcbiBcdH1cbiBcbkBAIC00MDUsNyArNDEzLDcgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0XHRcdCAqIHRoZSBzZWN1cml0eSBoZWFkZXIgaXMgZ29pbmcgdG8gYmUgaW4gdGhlIHBhZGRlZFxuIFx0XHRcdCAqIHJlZ2lvbiAoZW5jIGJsb2Nrc2l6ZSksIGJ1dCB0aGUgdHJhaWxlciBpcyBub3QuXG4gXHRcdFx0ICovXG4tXHRcdFx0cmVtYWluID0gbW9yZSA/IElOVF9NQVggOiBtc2dfZGF0YV9sZWZ0KG1zZyk7XG4rXHRcdFx0cmVtYWluID0gbW9yZSA/IElOVF9NQVggOiBsZW47XG4gXHRcdFx0dHhiID0gY2FsbC1cdTAwM2Vjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZWFsbG9jX3R4YnVmKGNhbGwsIHJlbWFpbiwgc2stXHUwMDNlc2tfYWxsb2NhdGlvbik7XG4gXHRcdFx0aWYgKCF0eGIpIHtcbiBcdFx0XHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNDE2LDggKzQyNCw4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0X2RlYnVnKFwiYXBwZW5kXCIpO1xuIFxuIFx0XHQvKiBhcHBlbmQgbmV4dCBzZWdtZW50IG9mIGRhdGEgdG8gdGhlIGN1cnJlbnQgYnVmZmVyICovXG4tXHRcdGlmIChtc2dfZGF0YV9sZWZ0KG1zZykgXHUwMDNlIDApIHtcbi1cdFx0XHRzaXplX3QgY29weSA9IHVtaW4odHhiLVx1MDAzZXNwYWNlLCBtc2dfZGF0YV9sZWZ0KG1zZykpO1xuK1x0XHRpZiAobGVuIFx1MDAzZSAwKSB7XG4rXHRcdFx0c2l6ZV90IGNvcHkgPSBtaW4zKHR4Yi1cdTAwM2VzcGFjZSwgbGVuLCBtc2dfZGF0YV9sZWZ0KG1zZykpO1xuIFxuIFx0XHRcdF9kZWJ1ZyhcImFkZCAlenVcIiwgY29weSk7XG4gXHRcdFx0aWYgKCFjb3B5X2Zyb21faXRlcl9mdWxsKHR4Yi1cdTAwM2VkYXRhICsgdHhiLVx1MDAzZW9mZnNldCxcbkBAIC00MjgsNiArNDM2LDcgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0XHRcdHR4Yi1cdTAwM2VsZW4gKz0gY29weTtcbiBcdFx0XHR0eGItXHUwMDNlb2Zmc2V0ICs9IGNvcHk7XG4gXHRcdFx0Y29waWVkICs9IGNvcHk7XG4rXHRcdFx0bGVuIC09IGNvcHk7XG4gXHRcdFx0aWYgKGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxuIFx0XHRcdFx0Y2FsbC1cdTAwM2V0eF90b3RhbF9sZW4gLT0gY29weTtcbiBcdFx0fVxuQEAgLTQzOSw2MiArNDQ4LDEwMCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXG4gXHRcdC8qIGFkZCB0aGUgcGFja2V0IHRvIHRoZSBzZW5kIHF1ZXVlIGlmIGl0J3Mgbm93IGZ1bGwgKi9cbiBcdFx0aWYgKCF0eGItXHUwMDNlc3BhY2UgfHxcbi1cdFx0ICAgIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCBcdTAwMjZcdTAwMjYgIW1vcmUpKSB7XG4tXHRcdFx0aWYgKG1zZ19kYXRhX2xlZnQobXNnKSA9PSAwIFx1MDAyNlx1MDAyNiAhbW9yZSlcbi1cdFx0XHRcdHR4Yi1cdTAwM2VmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDtcbi1cbitcdFx0ICAgIChsZW4gPT0gMCBcdTAwMjZcdTAwMjYgIW1vcmUpKSB7XG4rXHRcdFx0LyogRG8gYW55IHJlcXVpcmVkIGNyeXB0by4gIElmIHRoaXMgZmFpbHMsIGl0IGNvdWxkXG4rXHRcdFx0ICogaGF2ZSBjb3JydXB0ZWQgdGhlIHR4YnVmIGNvbnRlbnQgd2l0aCBhIHBhcnRpYWxcbitcdFx0XHQgKiBlbmNyeXB0LiAgQXNzdW1lIHRoYXQgRU5PTUVNIGlzIHJldHJ5YWJsZSwgYnV0XG4rXHRcdFx0ICogZXZlcnl0aGluZyBlbHNlIGlzIHRlcm1pbmFsLlxuK1x0XHRcdCAqL1xuIFx0XHRcdHJldCA9IGNhbGwtXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VjdXJlX3BhY2tldChjYWxsLCB0eGIpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0XHQvKiBBc3N1bWUgdGhhdCBFTk9NRU0gaGVyZSBtZWFucyB0aGF0IHRoZVxuK1x0XHRcdFx0ICogZW5jcnlwdGlvbiBoYXNuJ3QgaGFwcGVuZWQgeWV0LiAgVGhlIGRhdGEgaXNcbitcdFx0XHRcdCAqIGFsaWduZWQgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIHNsb3cgYnVmZmVyaW5nXG4rXHRcdFx0XHQgKiBpbiB0aGUgY3J5cHRvIHdhbGsuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdGlmIChyZXQgPT0gLUVOT01FTSlcbitcdFx0XHRcdFx0Z290byBtYXliZV9lcnJvcl9yZXdpbmQ7XG4rXHRcdFx0XHRzZXRfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdFx0Z290byBvdXRfdHhiO1xuK1x0XHRcdH1cbitcbitcdFx0XHRpZiAobGVuID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKVxuK1x0XHRcdFx0dHhiLVx1MDAzZWZsYWdzIHw9IFJYUlBDX0xBU1RfUEFDS0VUO1xuIFx0XHRcdHJ4cnBjX3F1ZXVlX3BhY2tldChyeCwgY2FsbCwgdHhiLCBub3RpZnlfZW5kX3R4KTtcbiBcdFx0XHR0eGIgPSBOVUxMO1xuIFx0XHR9XG4tXHR9IHdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykgXHUwMDNlIDApO1xuK1x0fSB3aGlsZSAobGVuIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBtc2dfZGF0YV9sZWZ0KG1zZykgXHUwMDNlIDApO1xuIFxuIHN1Y2Nlc3M6XG4gXHRyZXQgPSBjb3BpZWQ7XG4tXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKVxuLVx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuLW91dDpcbitvdXRfdHhiOlxuIFx0Y2FsbC1cdTAwM2V0eF9wZW5kaW5nID0gdHhiO1xuK291dF91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIFxuIGNhbGxfdGVybWluYXRlZDpcbiBcdHJ4cnBjX3B1dF90eGJ1Zih0eGIsIHJ4cnBjX3R4YnVmX3B1dF9zZW5kX2Fib3J0ZWQpO1xuLVx0X2xlYXZlKFwiID0gJWRcIiwgY2FsbC1cdTAwM2VlcnJvcik7XG4tXHRyZXR1cm4gY2FsbC1cdTAwM2VlcnJvcjtcbi1cbitcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IE5VTEw7XG4rXHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuK1x0Z290byBvdXRfdW5sb2NrO1xuK1xuK21heWJlX2Vycm9yX3Jld2luZDpcbitcdC8qIElmIHdlIGdvdCBhIHJldHJ5YWJsZSBlcnJvciBhZnRlciBjb3B5aW5nIGFsbCB0aGUgc3VwcGxpZWQgZGF0YSBpbnRvXG4rXHQgKiB0aGUgbGFzdCBwYWNrZXQsIHdlIG5lZWQgdG8gcmV3aW5kIGFzIG11Y2ggYXMgd2UgY2FuIHNvIHRoZSBjYWxsZXJcbitcdCAqIGtub3dzIHRoZXkgbmVlZCB0byByZXRyeSB0aGUgc2VuZG1zZy5cbitcdCAqL1xuK1x0aWYgKGNvcGllZCBcdTAwMjZcdTAwMjYgIW1vcmUgXHUwMDI2XHUwMDI2ICFsZW4pIHtcbitcdFx0dW5zaWduZWQgaW50IHJld2luZF9ieSA9IHVtaW4oY29waWVkLCB0eGItXHUwMDNlbGVuKTtcbitcbitcdFx0dHhiLVx1MDAzZXNwYWNlICArPSByZXdpbmRfYnk7XG4rXHRcdHR4Yi1cdTAwM2VsZW4gICAgLT0gcmV3aW5kX2J5O1xuK1x0XHR0eGItXHUwMDNlb2Zmc2V0IC09IHJld2luZF9ieTtcbitcdFx0Y29waWVkICAgICAgLT0gcmV3aW5kX2J5O1xuK1x0XHRpZiAoY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4gIT0gLTEpXG4rXHRcdFx0Y2FsbC1cdTAwM2V0eF90b3RhbF9sZW4gKz0gcmV3aW5kX2J5O1xuK1x0XHRpb3ZfaXRlcl9yZXZlcnQoXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCByZXdpbmRfYnkpO1xuK1x0fVxuIG1heWJlX2Vycm9yOlxuLVx0aWYgKGNvcGllZClcbitcdGlmIChjb3BpZWQpIHtcbitcdFx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKSB7XG4rXHRcdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbitcdFx0XHRnb3RvIG91dF90eGI7XG4rXHRcdH1cbiBcdFx0Z290byBzdWNjZXNzO1xuLVx0Z290byBvdXQ7XG4rXHR9XG4rXHRnb3RvIG91dF90eGI7XG4gXG4gZWZhdWx0OlxuIFx0cmV0ID0gLUVGQVVMVDtcbi1cdGdvdG8gb3V0O1xuK1x0Z290byBvdXRfdHhiO1xuIFxuIHdhaXRfZm9yX3NwYWNlOlxuIFx0cmV0ID0gLUVBR0FJTjtcbiBcdGlmIChtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpXG4gXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbi1cdCpfZHJvcHBlZF9sb2NrID0gdHJ1ZTtcbitcbiBcdHJldCA9IHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvdyhyeCwgY2FsbCwgXHUwMDI2dGltZW8sXG4gXHRcdFx0XHQgICAgICAgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1dBSVRBTEwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBtYXliZV9lcnJvcjtcbitcdFx0Z290byBvdXRfbm9sb2NrO1xuIFx0aWYgKGNhbGwtXHUwMDNlaW50ZXJydXB0aWJpbGl0eSA9PSBSWFJQQ19JTlRFUlJVUFRJQkxFKSB7XG4gXHRcdGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KSBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XG4tXHRcdFx0Z290byBtYXliZV9lcnJvcjtcbitcdFx0XHRnb3RvIG91dF9ub2xvY2s7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdH1cbi1cdCpfZHJvcHBlZF9sb2NrID0gZmFsc2U7XG4gXHRnb3RvIHJlbG9hZDtcbitvdXRfbm9sb2NrOlxuK1x0X2xlYXZlKFwiID0gJWQgW2ludHJdXCIsIHJldCk7XG4rXHRyZXR1cm4gY29waWVkID86IHJldDtcbiB9XG4gXG4gLypcbkBAIC02NjAsNyArNzA3LDYgQEAgcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLFxuIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCByeHJwY19jYWxsICpjYWxsO1xuLVx0Ym9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTtcbiBcdGludCByZXQ7XG4gXG4gXHRzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgcCA9IHtcbkBAIC03NjksMTYgKzgxNSwxNSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJYUlBDX0NNRF9TRU5EX0RBVEE6XG4tXHRcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwsIFx1MDAyNmRyb3BwZWRfbG9jayk7XG4tXHRcdGJyZWFrO1xuK1x0XHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMKTtcbitcdFx0Z290byBlcnJvcl9wdXQ7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbiBvdXRfcHV0X3VubG9jazpcbi1cdGlmICghZHJvcHBlZF9sb2NrKVxuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIGVycm9yX3B1dDpcbiBcdHJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbkBAIC04MDAsMTUgKzg0NSwyMSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiAgKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHNlbmQgZGF0YSBvbiBhIGNhbGwuICBUaGUgY2FsbCBtdXN0IGJlIGluIGFuIHN0YXRlXG4gICogYXBwcm9wcmlhdGUgdG8gc2VuZGluZyBkYXRhLiAgTm8gY29udHJvbCBkYXRhIHNob3VsZCBiZSBzdXBwbGllZCBpbiBAbXNnLFxuICAqIG5vciBzaG91bGQgYW4gYWRkcmVzcyBiZSBzdXBwbGllZC4gIE1TR19NT1JFIHNob3VsZCBiZSBmbGFnZ2VkIGlmIHRoZXJlJ3Ncbi0gKiBtb3JlIGRhdGEgdG8gY29tZSwgb3RoZXJ3aXNlIHRoaXMgZGF0YSB3aWxsIGVuZCB0aGUgdHJhbnNtaXNzaW9uIHBoYXNlLlxuKyAqIG1vcmUgZGF0YSB0byBjb21lLCBvdGhlcndpc2UgdGhpcyBkYXRhIHdpbGwgZW5kIHRoZSB0cmFuc21pc3Npb24gcGhhc2UgaWZcbisgKiBhbGwgdGhlIGRhdGEgaXMgYnVmZmVyZWQuXG4rICpcbisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGEgc2hvcnQgc2VuZCwgaW4gd2hpY2ggY2FzZSBpdCBzaG91bGQgYmVcbisgKiBjYWxsZWQgYWdhaW4gZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgb3IgdG8gcGljayB1cCBhbiBlcnJvciB0aGF0XG4rICogY2F1c2VkIHRoZSBzaG9ydCBzZW5kLlxuICAqXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBidWZmZXJlZCAoY291bGQgYmUgJTAgaWYgQGxlbiBpcyAwIG9yXG4rICogbXNnX2l0ZXIgaG9sZHMgMCBieXRlcykgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICogb3RoZXJ3aXNlLlxuICAqL1xuIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0XHQgICByeHJwY19ub3RpZnlfZW5kX3R4X3Qgbm90aWZ5X2VuZF90eClcbiB7XG4tXHRib29sIGRyb3BwZWRfbG9jayA9IGZhbHNlO1xuIFx0aW50IHJldDtcbiBcbiBcdF9lbnRlcihcInslZH0sXCIsIGNhbGwtXHUwMDNlZGVidWdfaWQpO1xuQEAgLTgxOSwxMiArODcwLDEwIEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFxuIFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spLCBjYWxsLCBtc2csIGxlbixcbi1cdFx0XHQgICAgICBub3RpZnlfZW5kX3R4LCBcdTAwMjZkcm9wcGVkX2xvY2spO1xuK1x0XHRcdCAgICAgIG5vdGlmeV9lbmRfdHgpO1xuIFx0aWYgKHJldCA9PSAtRVNIVVRET1dOKVxuIFx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuIFxuLVx0aWYgKCFkcm9wcGVkX2xvY2spXG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDk6MjMuODUwMzcyNzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzQxMzMxODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IFJYUlBDIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyBmdXp6LXdvcnRoeSwgd2hhdCB0aGUgaWRlYWwgY29uZmlndXJhdGlvbiBsb29rcyBsaWtlLCBhbmQgd2hhdCBzeW1ib2xzIHdlIHNob3VsZCB0YXJnZXQuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgd2UgaGF2ZTpcblxuMS4gIERvY3VtZW50YXRpb24gdXBkYXRlcywgbm90IHRlcnJpYmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBidXQgZ29vZCB0byBrbm93IHRoZXkncmUgdGhlcmUuXG4yLiAgQSBidWZmZXIgc2l6ZSBmaXggaW4gYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYC4gVGhhdCdzIGEgY2xhc3NpYyB0YXJnZXQsIHNvIHdlJ2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgZm9yIGNvdmVyYWdlLlxuMy4gIFNvbWUgc2VydmVyIGFzc2lnbm1lbnQgdXBkYXRlcyBpbiBgYWZzX21ha2Vfb3BfY2FsbGAuXG40LiAgU2lnbmlmaWNhbnQgY2hhbmdlcyBpbiB0aGUgUlhSUEMgY29kZTogYGFmc19tYWtlX2NhbGxgLCBgYWZzX3NlbmRfZW1wdHlfcmVwbHlgLCBhbmQgYGFmc19zZW5kX3NpbXBsZV9yZXBseWAgYWxsIGhhdmUgbmV3IGxvb3BzIGFyb3VuZCBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAgd2l0aCB1cGRhdGVkIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBidWdzIGxpZSwgZXNwZWNpYWxseSBhcm91bmQgZXJyb3IgY29uZGl0aW9ucy5cbjUuICBUcmFjZXBvaW50IGFkZGl0aW9ucy4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcgYnV0IG5vdCBkaXJlY3RseSBmdXp6LXJlbGV2YW50LlxuNi4gIERlY2xhcmF0aW9ucyBhbmQgZmxhZ3MgaW4gYGFyLWludGVybmFsLmhgLCBpbmNsdWRpbmcgYFJYUlBDX0NBTExfVFhfRVJST1JgLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBlcnJvciBmbGFncy5cbjcuICBVcGRhdGVzIHRvIGNhbGwgc3RhdGUgbWFuYWdlbWVudCBpbiBgY2FsbF9zdGF0ZS5jYC5cbjguICBBIGNvbm5lY3Rpb24gcG9raW5nIG9wZXJhdGlvbiB1c2luZyBgcnhycGNfZ2V0X2Nvbm5lY3Rpb25fbWF5YmVgLlxuOS4gIENyeXB0byB2YWxpZGF0aW9uIGluIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgLCBub3cgdmFsaWRhdGluZyB0aGUgY3J5cHRvIGVuY3R5cGUuIFRoaXMgaXMgaW50cmlndWluZywgbWlnaHQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nIGNyeXB0by1yZWxhdGVkIGJ1Z3MuXG4xMC4gUmVxdWV1ZSBhbmQgcmVjZWl2ZSBtZXNzYWdlIGhhbmRsaW5nLlxuMTEuIFNlY3VyaXR5IGxvY2tpbmcgaW4gYHJ4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5YC5cbjEyLiBMb29waW5nIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCBpbiBgcnhwZXJmX3Byb2Nlc3NfY2FsbGAuXG4xMy4gVGhlIGJpZyBvbmU6IGBzZW5kbXNnLmNgLiBNYWpvciByZXdyaXRlIG9mIHNlbmQgbG9naWMsIGZvY3VzaW5nIG9uIGVycm9yIGhhbmRsaW5nLCBsZW5ndGggY2hlY2tzLCBhbmQgbG9ja2luZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgcHJpbWUgdGFyZ2V0LiBUaGUgdXNlIG9mIGBSWFJQQ19DQUxMX1RYX0VSUk9SYCwgYG1zZ19kYXRhX2xlZnRgLCBgY29weV9mcm9tX2l0ZXJfZnVsbGAsIGBtaW4zYCwgYW5kIGByeHJwY193YWl0X2Zvcl90eF93aW5kb3dgIGFsbCBpbmRpY2F0ZSBjb21wbGV4IGxvZ2ljLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gd2UgcmVhY2ggdGhlc2UgY2hhbmdlcyBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gVGhhbmtmdWxseSwgQUZcXF9SWFJQQyBpcyBhIG5ldHdvcmsgc29ja2V0IGZhbWlseSwgYW5kIEFGUyBpcyBhbiBpbi1rZXJuZWwgZmlsZXN5c3RlbS4gU3l6a2FsbGVyIHJlZ3VsYXJseSBmdXp6ZXogQUZcXF9SWFJQQywgYW5kIHdlIGhhdmUgaW4ta2VybmVsIGZpbGVzeXN0ZW1zIHRoYXQgbWFrZSB1c2Ugb2YgdGhlIHByb3RvY29sLiBXZSBjYW4gYWNjZXNzIEFGXFxfUlhSUEMgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscywgYW5kIGtleSByaW5nIG9wZXJhdGlvbnMgYXJlIGFsc28gYWNjZXNzaWJsZS4gVGhpcyBpcyAqKmhlYXZpbHkqKiByZWFjaGFibGUgY29kZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW1zIHN1YnN5c3RlbXMsIG1ha2luZyBgV29ydGhGdXp6aW5nYCBhIHJlc291bmRpbmcgYHRydWVgLlxuXG5Ob3csIEknbGwgdXNlIGBncmVwcGVyYCB0byBkZXRlcm1pbmUgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBBRlxcX1JYUlBDLCBBRlMsIFJYR0ssIGFuZCBjcnlwdG9cXF9rcmI1IChqdXN0IGluIGNhc2UgdGhleSdyZSByZWxldmFudCkuIExldCdzIG5haWwgZG93biB0aG9zZSBjb25maWd1cmF0aW9ucyBzbyB3ZSBjYW4gb3B0aW1pemUgb3VyIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEzNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjMxLjE5MTcwNzk4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ3NzE2ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChBRl9SWFJQQ3xBRlNfRlN8UlhHSylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvS2NvbmZpZy01LVxcbm5ldC9yeHJwYy9LY29uZmlnOjY6Y29uZmlnIEFGX1JYUlBDXFxubmV0L3J4cnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWc9MjU9aWYgQUZfUlhSUENcXG5uZXQvcnhycGMvS2NvbmZpZy0yNi1cXG5uZXQvcnhycGMvS2NvbmZpZzoyNzpjb25maWcgQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgUnhSUENcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy0zMy1cXG5uZXQvcnhycGMvS2NvbmZpZzozNDpjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1NcXG5uZXQvcnhycGMvS2NvbmZpZy0zNS1cXHRib29sIFxcXCJJbmplY3QgcGFja2V0IGxvc3MgaW50byBSeFJQQyBwYWNrZXQgc3RyZWFtXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctMzktXFxubmV0L3J4cnBjL0tjb25maWc6NDA6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbm5ldC9yeHJwYy9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIkluamVjdCBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb25cXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy00OS1cXG5uZXQvcnhycGMvS2NvbmZpZzo1MDpjb25maWcgQUZfUlhSUENfREVCVUdcXG5uZXQvcnhycGMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJSeFJQQyBkeW5hbWljIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnPTU4PWNvbmZpZyBSWEtBRFxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctNjUtXFxubmV0L3J4cnBjL0tjb25maWc6NjY6Y29uZmlnIFJYR0tcXG5uZXQvcnhycGMvS2NvbmZpZy02Ny1cXHRib29sIFxcXCJSeFJQQyBHU1NBUEkgc2VjdXJpdHlcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZz04OT1jb25maWcgUlhQRVJGXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cXG5uZXQvcnhycGMvS2NvbmZpZzo5Njpjb25maWcgQUZfUlhSUENfS1VOSVRfVEVTVFxcbm5ldC9yeHJwYy9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJSeFJQQyBjcnlwdG8gS1VuaXQgdGVzdFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTozMS40OTY0ODUyMDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE1NDk4OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZXNlIHN1YnN5c3RlbXMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgb3V0IHRoZSBgZnMvYWZzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBlbmFibGVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBvcHRpb25zIGludGVycmVsYXRlIHdpdGhpbiB0aGUgQUZTIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uLiBUaGVuLCBJIHNob3VsZCBoZWFkIG92ZXIgdG8gYG5ldC9yeHJwYy9LY29uZmlnYCBhbmQgcmVwZWF0IHRoZSBwcm9jZXNzIGZvciB0aGUgUnhSUEMgbmV0d29yayBwcm90b2NvbC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHR3byBhcmVhcywgaWYgdGhlcmUgYXJlIGFueSwgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkIGFuZCB0aGF0IHRoZSBvdmVyYWxsIGJ1aWxkIGlzIGNsZWFuLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBrZXJuZWwgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNDQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTozMy42MTE5ODczOTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9hZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEFGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgQUZfUlhSUENcXG4gICA2OlxcdFxcdHNlbGVjdCBETlNfUkVTT0xWRVJcXG4gICA3OlxcdFxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0tSQjVcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGdldCBhbiBleHBlcmltZW50YWwgQW5kcmV3IEZpbGUgU3lzdGVtXFxuICAxMTpcXHRcXHQgIGRyaXZlci4gSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdW5zZWN1cmVkIHJlYWQtb25seSBBRlMgYWNjZXNzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Fmcy5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBBRlNfREVCVUdcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIkFGUyBkeW5hbWljIGRlYnVnZ2luZ1xcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gQUZTX0ZTXFxuICAyMDpcXHRcXHRoZWxwXFxuICAyMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gbWFrZSBydW50aW1lIGNvbnRyb2xsYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXBwZWFyLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Fmcy5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBBRlNfRlNDQUNIRVxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiUHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG4gIDI5OlxcdFxcdGRlcGVuZHMgb24gQUZTX0ZTPW0gXFx1MDAyNlxcdTAwMjYgRlNDQUNIRSB8fCBBRlNfRlM9eSBcXHUwMDI2XFx1MDAyNiBGU0NBQ0hFPXlcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBBRlMgZGF0YSB0byBiZSBjYWNoZWQgbG9jYWxseSBvbiBkaXNrIHRocm91Z2hcXG4gIDMyOlxcdFxcdCAgdGhlIGdlbmVyaWMgZmlsZXN5c3RlbSBjYWNoZSBtYW5hZ2VyXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBBRlNfREVCVUdfQ1VSU09SXFxuICAzNTpcXHRcXHRib29sIFxcXCJBRlMgc2VydmVyIGN1cnNvciBkZWJ1Z2dpbmdcXFwiXFxuICAzNjpcXHRcXHRkZXBlbmRzIG9uIEFGU19GU1xcbiAgMzc6XFx0XFx0aGVscFxcbiAgMzg6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNhdXNlIHRoZSBjb250ZW50cyBvZiBhIHNlcnZlciBjdXJzb3IgdG8gYmUgZHVtcGVkIHRvXFxuICAzOTpcXHRcXHQgIHRoZSBkbWVzZyBsb2cgaWYgdGhlIHNlcnZlciByb3RhdGlvbiBhbGdvcml0aG0gZmFpbHMgdG8gc3VjY2Vzc2Z1bGx5XFxuICA0MDpcXHRcXHQgIGNvbnRhY3QgYSBzZXJ2ZXIuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDk6MzMuNjEyMDczMTgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4NzM5NDUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgUlhSUEMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIFJYR0ssIFJYUEVSRiwgYW5kIEFGX1JYUlBDLiBJdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L3J4cnBjL0tjb25maWdgIGZpbGUuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0aW9uc2hpcHMgZGVmaW5lZCB0aGVyZSB0byBzZWUgd2hpY2ggZmVhdHVyZXMgYXJlIHJlcXVpcmVkIGZvciB0aGVzZSBwaWVjZXMgdG8gYmUgZW5hYmxlZCwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBidWlsZCBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUuIEhvcGVmdWxseSwgaXQncyBzdHJhaWdodGZvcndhcmQsIGFuZCBJIGNhbiBxdWlja2x5IG1hcCB0aGUgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0aGVyZSBtaWdodCBiZSBzb21lIGludGVycGxheSBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cywgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhleSdyZSBjb25uZWN0ZWQgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjM1Ljc5OTQ2OTkyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBSeFJQQyBzZXNzaW9uIHNvY2tldHNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEFGX1JYUlBDXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9ERVMgaWYgUlhLQURcXG4gIDExOlxcdFxcdHNlbGVjdCBLRVlTXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgU2F5IFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzIChqdXN0XFxuICAxNTpcXHRcXHQgIHRoZSB0cmFuc3BvcnQgcGFydCwgbm90IHRoZSBwcmVzZW50YXRpb24gcGFydDogKHVuKW1hcnNoYWxsaW5nIGlzXFxuICAxNjpcXHRcXHQgIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uKS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0ICBUaGVzZSBhcmUgdXNlZCBmb3IgQUZTIGtlcm5lbCBmaWxlc3lzdGVtIGFuZCB1c2Vyc3BhY2UgdXRpbGl0aWVzLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIFRoaXMgbW9kdWxlIGF0IHRoZSBtb21lbnQgb25seSBzdXBwb3J0cyBjbGllbnQgb3BlcmF0aW9ucyBhbmQgaXNcXG4gIDIxOlxcdFxcdCAgY3VycmVudGx5IGluY29tcGxldGUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXFxuICAyNDpcXHRcXG4gIDI1OlxcdGlmIEFGX1JYUlBDXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBBRl9SWFJQQ19JUFY2XFxuICAyODpcXHRcXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXFxcIlxcbiAgMjk6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgQUZfUlhSUEMgdG8gdXNlIElQVjYgVURQIGFzIHdlbGwgYXMgSVBWNCBVRFAgYXNcXG4gIDMyOlxcdFxcdCAgaXRzIG5ldHdvcmsgdHJhbnNwb3J0LlxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1NcXG4gIDM1OlxcdFxcdGJvb2wgXFxcIkluamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cXFwiXFxuICAzNjpcXHRcXHRoZWxwXFxuICAzNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gaW5qZWN0IHBhY2tldCBsb3NzIGJ5IGRpc2NhcmRpbmcgc29tZSByZWNlaXZlZCBhbmQgc29tZVxcbiAgMzg6XFx0XFx0ICB0cmFuc21pdHRlZCBwYWNrZXRzLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRjb25maWcgQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXFxuICA0MTpcXHRcXHRib29sIFxcXCJJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXFxcIlxcbiAgNDI6XFx0XFx0ZGVwZW5kcyBvbiBTWVNDVExcXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmplY3QgYSBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb24sIGFsbG93aW5nIGFuXFxuICA0NTpcXHRcXHQgIGV4dGVuZGVkIFJUVCB0aW1lIHRvIGJlIG1vZGVsbGVkLiAgVGhlIGRlbGF5IGNhbiBiZSBjb25maWd1cmVkIHVzaW5nXFxuICA0NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvcnhycGMvcnhycGNfaW5qZWN0X3J4X2RlbGF5LCBzZXR0aW5nIGEgbnVtYmVyIG9mXFxuICA0NzpcXHRcXHQgIG1pbGxpc2Vjb25kcyB1cCB0byAwLjVzIChub3RlIHRoYXQgdGhlIGdyYW51bGFyaXR5IGlzIGFjdHVhbGx5IGluXFxuICA0ODpcXHRcXHQgIGppZmZpZXMpLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgQUZfUlhSUENfREVCVUdcXG4gIDUxOlxcdFxcdGJvb2wgXFxcIlJ4UlBDIGR5bmFtaWMgZGVidWdnaW5nXFxcIlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIG1ha2UgcnVudGltZSBjb250cm9sbGFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIGFwcGVhci5cXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgUlhLQURcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIlJ4UlBDIEtlcmJlcm9zIHNlY3VyaXR5XFxcIlxcbiAgNjA6XFx0XFx0aGVscFxcbiAgNjE6XFx0XFx0ICBQcm92aWRlIGtlcmJlcm9zIDQgYW5kIEFGUyBrYXNlcnZlciBzZWN1cml0eSBoYW5kbGluZyBmb3IgQUZfUlhSUENcXG4gIDYyOlxcdFxcdCAgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSBrZXkgcmV0ZW50aW9uIHNlcnZpY2UuXFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBSWEdLXFxuICA2NzpcXHRcXHRib29sIFxcXCJSeFJQQyBHU1NBUEkgc2VjdXJpdHlcXFwiXFxuICA2ODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0tSQjVcXG4gIDY5OlxcdFxcdHNlbGVjdCBDUllQVE9fTUFOQUdFUlxcbiAgNzA6XFx0XFx0c2VsZWN0IENSWVBUT19LUkI1RU5DXFxuICA3MTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcXG4gIDcyOlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gIDczOlxcdFxcdHNlbGVjdCBDUllQVE9fSEFTSF9JTkZPXFxuICA3NDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0hNQUNcXG4gIDc1OlxcdFxcdHNlbGVjdCBDUllQVE9fQ01BQ1xcbiAgNzY6XFx0XFx0c2VsZWN0IENSWVBUT19TSEExXFxuICA3NzpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NlxcbiAgNzg6XFx0XFx0c2VsZWN0IENSWVBUT19TSEE1MTJcXG4gIDc5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0JDXFxuICA4MDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NUU1xcbiAgODE6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gIDgyOlxcdFxcdHNlbGVjdCBDUllQVE9fQ0FNRUxMSUFcXG4gIDgzOlxcdFxcdGhlbHBcXG4gIDg0OlxcdFxcdCAgUHJvdmlkZSB0aGUgR1NTQVBJLWJhc2VkIFJ4R0sgc2VjdXJpdHkgY2xhc3MgZm9yIEFGUy4gIEtleXMgYXJlIGFkZGVkXFxuICA4NTpcXHRcXHQgIHdpdGggYWRkX2tleSgpLlxcbiAgODY6XFx0XFxuICA4NzpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LlxcbiAgODg6XFx0XFxuICA4OTpcXHRjb25maWcgUlhQRVJGXFxuICA5MDpcXHRcXHR0cmlzdGF0ZSBcXFwiUnhSUEMgdGVzdCBzZXJ2aWNlXFxcIlxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBQcm92aWRlIGFuIHJ4cGVyZiBzZXJ2aWNlIHRlc3Rlci4gIFRoaXMgbGlzdGVucyBvbiBVRFAgcG9ydCA3MDA5IGZvclxcbiAgOTM6XFx0XFx0ICBpbmNvbWluZyBjYWxscyBmcm9tIHRoZSByeHBlcmYgcHJvZ3JhbSAoYW4gZXhhbXBsZSBvZiB3aGljaCBjYW4gYmVcXG4gIDk0OlxcdFxcdCAgZm91bmQgaW4gT3BlbkFGUykuXFxuICA5NTpcXHRcXG4gIDk2OlxcdGNvbmZpZyBBRl9SWFJQQ19LVU5JVF9URVNUXFxuICA5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiUnhSUEMgY3J5cHRvIEtVbml0IHRlc3RcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gS1VOSVQgXFx1MDAyNlxcdTAwMjYgUlhLQURcXG4gIDk5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuIDEwMDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjM1Ljc5OTU1OTA0OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NDI0OTY1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNjb3BlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyZWFkdGggb2YgaXRzIGltcGFjdCBiZWZvcmUgSSBkaWcgaW4uIFRoZSBpbml0aWFsIGluZGljYXRvcnMgYXJlIHBvaW50aW5nIHRvIGEgZmV3IGtleSBhcmVhcyB0aGF0IGFyZSBnb2luZyB0byBkZW1hbmQgbXkgYXR0ZW50aW9uOlxuXG4qICAgKipgQUZfUlhSUENgOioqIFRoaXMgaXMgdGhlIGNvcmUgUnhSUEMgcHJvdG9jb2wsIGFuZCB0aGUgcGF0Y2ggaGFzIGxhbmRlZCBpbiBzZXZlcmFsIGZpbGVzIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb246IGBzZW5kbXNnLmNgLCBgY2FsbF9zdGF0ZS5jYCwgYGNvbm5fb2JqZWN0LmNgLCBga2V5LmNgLCBhbmQgYHJlY3Ztc2cuY2AuIFRoYXQncyBhIGxvdCBvZiB0aGUgY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aG9zZSBtZXNzYWdlIGludGVyYWN0aW9ucywgY2FsbCBzdGF0ZSBtYW5hZ2VtZW50LCBjb25uZWN0aW9uIG9iamVjdHMgYW5kIGtleSBoYW5kbGluZywgYW5kIHRoZSByZWNlaXZlIHNpZGUgYXJlIGJlaW5nIGFmZmVjdGVkLlxuXG4qICAgKipgQUZTX0ZTYDoqKiBUaGUgYGZzL2Fmcy9gIGRpcmVjdG9yeSBpcyBhbm90aGVyIGNyaXRpY2FsIHNpZ25hbC4gSXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2gncyB0b3VjaCB0byBgY21fc2VjdXJpdHkuY2AsIGBpbnRlcm5hbC5oYCwgYW5kIGByeHJwYy5jYCBtYXkgcmVsYXRlIHRvIHRoZSBBRlMgZmlsZXN5dGVtJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUlBDIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gc2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21lIHVuZGVybHlpbmcgc2VjdXJpdHkgY29uZmlndXJhdGlvbiBvciB0aGUgaW50ZXJhY3Rpb25zIHdpdGggQUZTIGNsaWVudCB0b29scy5cblxuKiAgICoqYFJYR0tgOioqIFRoZSBgUlhHS2AgZmlsZXMgd2l0aGluIGBuZXQvcnhycGMvYCBhcmUgYSBzaWduYWwgYXMgd2VsbC4gSXQgbG9va3MgbGlrZSBgcnhnay5jYCwgdGhlIGtleWluZyBpbXBsZW1lbnRhdGlvbnMgYXJlIGdldHRpbmcgYW4gdXBkYXRlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgIGJlY2F1c2UgaXQgbWF5IGludm9sdmUgaG93IHRoZSBSUEMgYW5kIFJYR0sgd29yayB3aXRoIGFuIG91dHNpZGUgYXBwbGljYXRpb24gbGF5ZXIuXG5cbiogICAqKmBSWFBFUkZgOioqIFRoZSBgcnhwZXJmLmNgIGZpbGUgaXMgZ29vZCBhcyB3ZWxsLiBJdCBtYXkgaGF2ZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb24gUlhSUEMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yaWVzLCBuYW1lbHkgYG5ldC9yeHJwYy9gIGFuZCBgZnMvYWZzL2AsIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjM5LjM0MjA1ODUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIExpbnV4IGtlcm5lbCBSeFJQQ1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfQUZfUlhSUEMpICs9IHJ4cnBjLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0cnhycGMteSA6PSBcXFxcXFxuICAgOTpcXHRcXHRhZl9yeHJwYy5vIFxcXFxcXG4gIDEwOlxcdFxcdGNhbGxfYWNjZXB0Lm8gXFxcXFxcbiAgMTE6XFx0XFx0Y2FsbF9ldmVudC5vIFxcXFxcXG4gIDEyOlxcdFxcdGNhbGxfb2JqZWN0Lm8gXFxcXFxcbiAgMTM6XFx0XFx0Y2FsbF9zdGF0ZS5vIFxcXFxcXG4gIDE0OlxcdFxcdGNvbm5fY2xpZW50Lm8gXFxcXFxcbiAgMTU6XFx0XFx0Y29ubl9ldmVudC5vIFxcXFxcXG4gIDE2OlxcdFxcdGNvbm5fb2JqZWN0Lm8gXFxcXFxcbiAgMTc6XFx0XFx0Y29ubl9zZXJ2aWNlLm8gXFxcXFxcbiAgMTg6XFx0XFx0aW5wdXQubyBcXFxcXFxuICAxOTpcXHRcXHRpbnB1dF9yYWNrLm8gXFxcXFxcbiAgMjA6XFx0XFx0aW5zZWN1cmUubyBcXFxcXFxuICAyMTpcXHRcXHRpb190aHJlYWQubyBcXFxcXFxuICAyMjpcXHRcXHRrZXkubyBcXFxcXFxuICAyMzpcXHRcXHRsb2NhbF9ldmVudC5vIFxcXFxcXG4gIDI0OlxcdFxcdGxvY2FsX29iamVjdC5vIFxcXFxcXG4gIDI1OlxcdFxcdG1pc2MubyBcXFxcXFxuICAyNjpcXHRcXHRuZXRfbnMubyBcXFxcXFxuICAyNzpcXHRcXHRvb2IubyBcXFxcXFxuICAyODpcXHRcXHRvdXRwdXQubyBcXFxcXFxuICAyOTpcXHRcXHRwZWVyX2V2ZW50Lm8gXFxcXFxcbiAgMzA6XFx0XFx0cGVlcl9vYmplY3QubyBcXFxcXFxuICAzMTpcXHRcXHRyZWN2bXNnLm8gXFxcXFxcbiAgMzI6XFx0XFx0cnR0Lm8gXFxcXFxcbiAgMzM6XFx0XFx0c2VjdXJpdHkubyBcXFxcXFxuICAzNDpcXHRcXHRzZW5kbXNnLm8gXFxcXFxcbiAgMzU6XFx0XFx0c2VydmVyX2tleS5vIFxcXFxcXG4gIDM2OlxcdFxcdHNrYnVmZi5vIFxcXFxcXG4gIDM3OlxcdFxcdHR4YnVmLm8gXFxcXFxcbiAgMzg6XFx0XFx0dXRpbHMub1xcbiAgMzk6XFx0XFxuICA0MDpcXHRyeHJwYy0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDk6MzkuMzQyMTI3MDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA3MzQ2MTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgQmFjayBpbnRvIHRoZSBgbmV0L3J4cnBjL01ha2VmaWxlYCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGFkZHJlc3NlZCB0aGF0IGluaXRpYWwgaXNzdWUsIGJ1dCB0aGVyZSdzIGFsd2F5cyBtb3JlIGx1cmtpbmcuIFRpbWUgdG8gZ2V0IGJhY2sgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBuZXQvcnhycGMvTWFrZWZpbGVgLiBXZSBjYW4ndCBqdXN0IGZpeCBvbmUgdGhpbmcgYW5kIGNhbGwgaXQgYSBkYXksIG5vdCBpbiBhIGNvbXBsZXggc3lzdGVtIGxpa2UgdGhpcy4gSXQncyB0aW1lIHRvIHRob3JvdWdobHkgcmV2aWV3IHRoZSByZXN0IG9mIGl0LiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgc3BvdHRpbmcgb2J2aW91cyBlcnJvcnM7IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZCBmbGFncywgdGhlIGxpbmtpbmcgcHJvY2Vzcy4uLiBldmVyeXRoaW5nLiBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBjYXVzZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgd2UgY2FuIGltcGxlbWVudD8gQW55IHJlZHVuZGFuY2llcyB3ZSBjYW4gZWxpbWluYXRlPyBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYXJlYXMgd2hlcmUgZnV0dXJlIGNoYW5nZXMgY291bGQgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBvciBvcHBvcnR1bml0aWVzIHRvIGltcHJvdmUgYnVpbGQgcGVyZm9ybWFuY2UuIEl0J3MgYSBjb21wcmVoZW5zaXZlIGF1ZGl0LCBlbnN1cmluZyB0aGlzIGNyaXRpY2FsIHBpZWNlIG9mIG91ciBpbmZyYXN0cnVjdHVyZSBpcyBhcyByb2J1c3QgYW5kIGVmZmljaWVudCBhcyBwb3NzaWJsZS4gVGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLCBhbmQgSSBpbnRlbmQgdG8gZmluZCBoaW0uIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjQ0LjQxNTU5MTk5OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcnhycGMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogNDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDE6XFx0cnhycGMtJChDT05GSUdfUlhLQUQpICs9IHJ4a2FkLm8gZmNyeXB0Lm9cXG4gIDQyOlxcdHJ4cnBjLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsLm9cXG4gIDQzOlxcdHJ4cnBjLSQoQ09ORklHX1JYR0spICs9IFxcXFxcXG4gIDQ0OlxcdFxcdHJ4Z2subyBcXFxcXFxuICA0NTpcXHRcXHRyeGdrX2FwcC5vIFxcXFxcXG4gIDQ2OlxcdFxcdHJ4Z2tfa2RmLm9cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0b2JqLSQoQ09ORklHX1JYUEVSRikgKz0gcnhwZXJmLm9cXG4gIDQ5OlxcdG9iai0kKENPTkZJR19LVU5JVCkgKz0gdGVzdHMvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjQ0LjQxNTY0ODIyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTg2OTg4NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50OlxuXG4qKkluaXRpYWwgQ2hlY2twb2ludDogRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJ3MgbGlrZWx5IGZpbGVzeXN0ZW0tcmVsYXRlZCwgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZnMvYWZzL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBBRlMtc3BlY2lmaWMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGxpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBBRlMgaXMgYmVpbmcgYnVpbHQsIGxpbmtlZCwgYW5kIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGBNYWtlZmlsZWAgd2lsbCByZXZlYWwgdGhlIGtleSBjb21wb25lbnRzOiBvYmplY3QgZmlsZXMsIGxpYnJhcmllcywgaW5jbHVkZSBwYXRocywgYW55IHNwZWNpYWwgZmxhZ3Mgb3IgZGVmaW5lcyBzcGVjaWZpYyB0byB0aGUgQUZTIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZXNlIHdpbGwgZ2V0IG1lIG9uZSBzdGVwIGNsb3NlciB0byBpc29sYXRpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYnVpbGQgc3RyYXRlZ3kuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBtaXNjb25maWd1cmF0aW9ucywgbWlzc2luZyBkZXBlbmRlbmNpZXMsIG9yIGNvbmZsaWN0aW5nIGZsYWdzIHRoYXQgbWlnaHQgYmUgY29udHJpYnV0aW5nIHRvIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTE0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTo0OC4wMDI2Mzk1MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9hZnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBSZWQgSGF0IExpbnV4IEFGUyBjbGllbnQuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGthZnMteSA6PSBcXFxcXFxuICAgNzpcXHRcXHRhZGRyX2xpc3QubyBcXFxcXFxuICAgODpcXHRcXHRhZGRyX3ByZWZzLm8gXFxcXFxcbiAgIDk6XFx0XFx0Y2FsbGJhY2subyBcXFxcXFxuICAxMDpcXHRcXHRjZWxsLm8gXFxcXFxcbiAgMTE6XFx0XFx0Y21fc2VjdXJpdHkubyBcXFxcXFxuICAxMjpcXHRcXHRjbXNlcnZpY2UubyBcXFxcXFxuICAxMzpcXHRcXHRkaXIubyBcXFxcXFxuICAxNDpcXHRcXHRkaXJfZWRpdC5vIFxcXFxcXG4gIDE1OlxcdFxcdGRpcl9zZWFyY2gubyBcXFxcXFxuICAxNjpcXHRcXHRkaXJfc2lsbHkubyBcXFxcXFxuICAxNzpcXHRcXHRkeW5yb290Lm8gXFxcXFxcbiAgMTg6XFx0XFx0ZmlsZS5vIFxcXFxcXG4gIDE5OlxcdFxcdGZsb2NrLm8gXFxcXFxcbiAgMjA6XFx0XFx0ZnNjbGllbnQubyBcXFxcXFxuICAyMTpcXHRcXHRmc19vcGVyYXRpb24ubyBcXFxcXFxuICAyMjpcXHRcXHRmc19wcm9iZS5vIFxcXFxcXG4gIDIzOlxcdFxcdGlub2RlLm8gXFxcXFxcbiAgMjQ6XFx0XFx0bWFpbi5vIFxcXFxcXG4gIDI1OlxcdFxcdG1pc2MubyBcXFxcXFxuICAyNjpcXHRcXHRtbnRwdC5vIFxcXFxcXG4gIDI3OlxcdFxcdHJvdGF0ZS5vIFxcXFxcXG4gIDI4OlxcdFxcdHJ4cnBjLm8gXFxcXFxcbiAgMjk6XFx0XFx0c2VjdXJpdHkubyBcXFxcXFxuICAzMDpcXHRcXHRzZXJ2ZXIubyBcXFxcXFxuICAzMTpcXHRcXHRzZXJ2ZXJfbGlzdC5vIFxcXFxcXG4gIDMyOlxcdFxcdHN1cGVyLm8gXFxcXFxcbiAgMzM6XFx0XFx0c3ltbGluay5vIFxcXFxcXG4gIDM0OlxcdFxcdHZhbGlkYXRpb24ubyBcXFxcXFxuICAzNTpcXHRcXHR2bGNsaWVudC5vIFxcXFxcXG4gIDM2OlxcdFxcdHZsX2FsaWFzLm8gXFxcXFxcbiAgMzc6XFx0XFx0dmxfbGlzdC5vIFxcXFxcXG4gIDM4OlxcdFxcdHZsX3Byb2JlLm8gXFxcXFxcbiAgMzk6XFx0XFx0dmxfcm90YXRlLm8gXFxcXFxcbiAgNDA6XFx0XFx0dm9sdW1lLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTo0OC4wMDI3MjgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjY5ODk4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIGBmcy9hZnMvTWFrZWZpbGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBgZnMvYWZzL01ha2VmaWxlYCBmaWxlLCBzcGVjaWZpY2FsbHkgYWZ0ZXIgbGluZSA0MC4gSSdtIGdvaW5nIHRvIGp1bXAgaW4gdGhlcmUgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhhdCBzZWN0aW9uLiBJdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIGJ1aWxkIHRhcmdldCwgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiwgb3IgcGVyaGFwcyBzb21lIGNvbmZpZ3VyYXRpb24gbG9naWMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGxpbmtlciBmbGFncywgb3IgbWF5YmUgZXZlbiBjb25kaXRpb25hbCBpbmNsdXNpb24gb2Ygc291cmNlIGZpbGVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCB3aGF0IGV4YWN0bHkgdGhlIGtlcm5lbCBpcyBkb2luZyB3aXRoIEFGUyBhdCB0aGF0IHBvaW50LCBsaWtlIHdoZXJlIGl0IGlzIGNvbXBpbGluZyBpdCBpbiBvciBwZXJoYXBzIHdoaWNoIHBhcnQgb2YgQUZTIGlzIGJlaW5nIGJ1aWx0LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTo1MC44Njk3MjE2NDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQxOlxcdFxcdHdyaXRlLm8gXFxcXFxcbiAgNDI6XFx0XFx0eGF0dHIubyBcXFxcXFxuICA0MzpcXHRcXHR5ZnNjbGllbnQub1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRrYWZzLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgNDY6XFx0b2JqLSQoQ09ORklHX0FGU19GUykgIDo9IGthZnMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTo1MC44Njk3ODg3NTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgwNDcyMDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXJgIGFuZCBgY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlYC4gVGhleSdyZSBjbGVhcmx5IHJlbGF0ZWQsIGFuZCBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZXkgZnVuY3Rpb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6ICoqV2hlcmUgYXJlIHRoZXNlIHR3byBmdW5jdGlvbnMgZGVmaW5lZCwgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBwYXJhbWV0ZXJzIHVsdGltYXRlbHkgY29udHJvbCB0aGVpciBiZWhhdmlvciBvciBpbmNsdXNpb24/KiogSSBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIHNvdXJjZSBmaWxlcyBhbmQgYW55IHJlbGV2YW50IGAjaWZkZWZgIGJsb2NrcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyB0aGF0IGRldGVybWluZSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYnVpbHQgaW50byB0aGUgZmluYWwgZXhlY3V0YWJsZS4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjcnlwdG9ncmFwaGljIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZGlmZmVyZW50IGVuY3J5cHRpb24gdHlwZXMgaW4gS2VyYmVyb3MuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbnMgYW5kIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgc28gSSBjYW4gZm9ybSBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIHBpZWNlcyBmaXQgaW50byB0aGUgYnJvYWRlciBzZWN1cml0eSBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTA5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTo1Mi42NzQ1MTMxNjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDUxNTUyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vY3J5cHRvL2tyYjUucnN0PTEwMj1UaGUgZW5jb2RpbmcgdHlwZSBpcyBsb29rZWQgdXAgYnkgbnVtYmVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246OlxcbkRvY3VtZW50YXRpb24vY3J5cHRvL2tyYjUucnN0LTEwMy1cXG5Eb2N1bWVudGF0aW9uL2NyeXB0by9rcmI1LnJzdDoxMDQ6XFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHUzMiBlbmN0eXBlKTtcXG5Eb2N1bWVudGF0aW9uL2NyeXB0by9rcmI1LnJzdC0xMDUtXFxuLS1cXG5jcnlwdG8va3JiNS9rcmI1X2FwaS5jPTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICpjb25zdCBrcmI1X3N1cHBvcnRlZF9lbmN0eXBlc1tdID0ge1xcbi0tXFxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy0yOC0vKipcXG5jcnlwdG8va3JiNS9rcmI1X2FwaS5jOjI5OiAqIGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSAtIEZpbmQgdGhlIGhhbmRsZXIgZm9yIGEgS2VyYmVyb3M1IGVuY3J5cHRpb24gdHlwZVxcbmNyeXB0by9rcmI1L2tyYjVfYXBpLmMtMzAtICogQGVuY3R5cGU6IFRoZSBzdGFuZGFyZCBLZXJiZXJvcyBlbmNyeXB0aW9uIHR5cGUgbnVtYmVyXFxuLS1cXG5jcnlwdG8va3JiNS9rcmI1X2FwaS5jLTM0LSAqL1xcbmNyeXB0by9rcmI1L2tyYjVfYXBpLmM6MzU6Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHUzMiBlbmN0eXBlKVxcbmNyeXB0by9rcmI1L2tyYjVfYXBpLmMtMzYte1xcbi0tXFxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy00Ny19XFxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYzo0ODpFWFBPUlRfU1lNQk9MKGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSk7XFxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy00OS1cXG4tLVxcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmM9MTE4PXN0YXRpYyBpbnQga3JiNV90ZXN0X29uZV9wcmYoY29uc3Qgc3RydWN0IGtyYjVfcHJmX3Rlc3QgKnRlc3QpXFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYy0xMTkte1xcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmM6MTIwOlxcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodGVzdC1cXHUwMDNlZXR5cGUpO1xcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMTIxLVxcdHN0cnVjdCBrcmI1X2J1ZmZlciBrZXkgPSB7fSwgb2N0ZXQgPSB7fSwgcmVzdWx0ID0ge30sIHByZiA9IHt9O1xcbi0tXFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYz0yMTA9c3RhdGljIGludCBrcmI1X3Rlc3Rfb25lX2tleShjb25zdCBzdHJ1Y3Qga3JiNV9rZXlfdGVzdCAqdGVzdClcXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jLTIxMS17XFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYzoyMTI6XFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh0ZXN0LVxcdTAwM2VldHlwZSk7XFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYy0yMTMtXFx0c3RydWN0IGtyYjVfYnVmZmVyIGJhc2Vfa2V5ID0ge307XFxuLS1cXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jPTI0MT1zdGF0aWMgaW50IGtyYjVfdGVzdF9vbmVfZW5jKGNvbnN0IHN0cnVjdCBrcmI1X2VuY190ZXN0ICp0ZXN0LCB2b2lkICpidWYpXFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYy0yNDIte1xcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmM6MjQzOlxcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodGVzdC1cXHUwMDNlZXR5cGUpO1xcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMjQ0LVxcdHN0cnVjdCBjcnlwdG9fYWVhZCAqY2kgPSBOVUxMO1xcbi0tXFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYz0zODA9c3RhdGljIGludCBrcmI1X3Rlc3Rfb25lX21pYyhjb25zdCBzdHJ1Y3Qga3JiNV9taWNfdGVzdCAqdGVzdCwgdm9pZCAqYnVmKVxcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMzgxLXtcXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jOjM4MjpcXHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICprcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHRlc3QtXFx1MDAzZWV0eXBlKTtcXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jLTM4My1cXHRzdHJ1Y3QgY3J5cHRvX3NoYXNoICpjaSA9IE5VTEw7XFxuLS1cXG5mcy9hZnMvY21fc2VjdXJpdHkuYz0xMjE9aW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldClcXG4tLVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTE0Mi1cXHRyZXQgPSAtRU5PUEtHO1xcbmZzL2Fmcy9jbV9zZWN1cml0eS5jOjE0MzpcXHRrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKEtSQjVfRU5DVFlQRV9BRVMxMjhfQ1RTX0hNQUNfU0hBMV85Nik7XFxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMTQ0LVxcdGlmICgha3JiNSlcXG4tLVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jPTE4MD1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLS1cXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0yMDUtXFxuZnMvYWZzL2NtX3NlY3VyaXR5LmM6MjA2OlxcdGNvbm5fa3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShlbmN0eXBlKTtcXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0yMDctXFx0aWYgKCFjb25uX2tyYjUpXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9rcmI1Lmg9ODc9c3RydWN0IGtyYjVfZW5jdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2NyeXB0by9rcmI1LmgtMTE2LSAqL1xcbmluY2x1ZGUvY3J5cHRvL2tyYjUuaDoxMTc6Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHUzMiBlbmN0eXBlKTtcXG5pbmNsdWRlL2NyeXB0by9rcmI1LmgtMTE4LXNpemVfdCBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIoY29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNSxcXG4tLVxcbm5ldC9jZXBoL2NyeXB0by5jPTQxPXN0YXRpYyBpbnQgc2V0X2tyYjVfdGZtcyhzdHJ1Y3QgY2VwaF9jcnlwdG9fa2V5ICprZXksIGNvbnN0IHUzMiAqa2V5X3VzYWdlcyxcXG4tLVxcbm5ldC9jZXBoL2NyeXB0by5jLTUxLVxcbm5ldC9jZXBoL2NyeXB0by5jOjUyOlxcdGtleS1cXHUwMDNla3JiNV90eXBlID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKFxcbm5ldC9jZXBoL2NyeXB0by5jLTUzLVxcdFxcdFxcdCAgICAgS1JCNV9FTkNUWVBFX0FFUzI1Nl9DVFNfSE1BQ19TSEEzODRfMTkyKTtcXG4tLVxcbm5ldC9yeHJwYy9rZXkuYz0xNjU9c3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCxcXG4tLVxcbm5ldC9yeHJwYy9rZXkuYy0yMzItXFxubmV0L3J4cnBjL2tleS5jOjIzMzpcXHRpZiAoIWNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh0b2tlbi1cXHUwMDNlcnhnay1cXHUwMDNlZW5jdHlwZSkpIHtcXG5uZXQvcnhycGMva2V5LmMtMjM0LVxcdFxcdHJldCA9IC1FTk9QS0c7XFxuLS1cXG5uZXQvcnhycGMvcnhnay5jPTIwPXN0YXRpYyBpbnQgcnhna19wcmVwYXJzZV9zZXJ2ZXJfa2V5KHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuLS1cXG5uZXQvcnhycGMvcnhnay5jLTM1LVxcbm5ldC9yeHJwYy9yeGdrLmM6MzY6XFx0a3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShlbmN0eXBlKTtcXG5uZXQvcnhycGMvcnhnay5jLTM3LVxcdGlmICgha3JiNSlcXG4tLVxcbm5ldC9yeHJwYy9yeGdrX2tkZi5jPTIwNT1zdHJ1Y3Qgcnhna19jb250ZXh0ICpyeGdrX2dlbmVyYXRlX3RyYW5zcG9ydF9rZXkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuLS1cXG5uZXQvcnhycGMvcnhna19rZGYuYy0yMjItXFxubmV0L3J4cnBjL3J4Z2tfa2RmLmM6MjIzOlxcdGdrLVxcdTAwM2VrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGtleS1cXHUwMDNlZW5jdHlwZSk7XFxubmV0L3J4cnBjL3J4Z2tfa2RmLmMtMjI0LVxcdGlmICghZ2stXFx1MDAzZWtyYjUpXFxuLS1cXG5uZXQvcnhycGMvcnhna19rZGYuYz0yNjg9aW50IHJ4Z2tfc2V0X3VwX3Rva2VuX2NpcGhlcihjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKnNlcnZlcl9rZXksXFxuLS1cXG5uZXQvcnhycGMvcnhna19rZGYuYy0yNzYtXFxubmV0L3J4cnBjL3J4Z2tfa2RmLmM6Mjc3OlxcdGtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XFxubmV0L3J4cnBjL3J4Z2tfa2RmLmMtMjc4LVxcdGlmICgha3JiNSlcXG4tLVxcbm5ldC9yeHJwYy9yeHBlcmYuYz01ODk9c3RhdGljIGludCByeHBlcmZfYWRkX3lmc19yeGdrX2tleShzdHJ1Y3Qga2V5ICprZXlyaW5nLCB1MzIgZW5jdHlwZSlcXG5uZXQvcnhycGMvcnhwZXJmLmMtNTkwLXtcXG5uZXQvcnhycGMvcnhwZXJmLmM6NTkxOlxcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XFxubmV0L3J4cnBjL3J4cGVyZi5jLTU5Mi1cXHRrZXlfcmVmX3Qga3JlZjtcXG4tLVxcbm5ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jPTQ2PXN0YXRpYyB2b2lkIGdzc19rcmI1X3ByZXBhcmVfZW5jdHlwZV9wcmlvcml0eV9saXN0KHZvaWQpXFxuLS1cXG5uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYy01NS1cXHRmb3IgKHRvdGFsID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGdzc19rcmI1X2VuY3R5cGVzKTsgaSsrKSB7XFxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmM6NTY6XFx0XFx0aWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZ3NzX2tyYjVfZW5jdHlwZXNbaV0pKVxcbm5ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jLTU3LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmM9MTIyPWdzc19pbXBvcnRfdjJfY29udGV4dChjb25zdCB2b2lkICpwLCBjb25zdCB2b2lkICplbmQsIHN0cnVjdCBrcmI1X2N0eCAqY3R4LFxcbi0tXFxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMtMTQ2LVxcdFxcdGdvdG8gb3V0X2VycjtcXG5uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYzoxNDc6XFx0Y3R4LVxcdTAwM2VrcmI1ZSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShjdHgtXFx1MDAzZWVuY3R5cGUpO1xcbm5ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jLTE0OC1cXHRpZiAoIWN0eC1cXHUwMDNla3JiNWUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDk6NTUuMzE5Njc2NDMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyMTM1NTQyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gU2NvcGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIHN5bWJvbHM6IGBDT05GSUdfQUZfUlhSUENgLCBgQ09ORklHX0FGU19GU2AsIGBDT05GSUdfUlhHS2AsIGFuZCBgQ09ORklHX1JYUEVSRmAuIFRoZSBpbW1lZGlhdGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgYENSWVBUT19LUkI1YC4gSXQgc2VlbXMgYm90aCBgUlhHS2AgYW5kIGBBRlNfRlNgIGRlcGVuZCBvbiBhbmQgc2VsZWN0IGBDUllQVE9fS1JCNWAsIHdoaWNoIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgZGVwZW5kZW5jaWVzIG9mIGBBRl9SWFJQQ2AgYW5kIGBBRlNfRlNgLCBJIHNlZSB0aGF0IGBBRl9SWFJQQ2AgcmVxdWlyZXMgYElORVRgLiBgQUZTX0ZTYCBpcyBkZXBlbmRlbnQgb24gYElORVRgIGFuZCBhbHNvIHNlbGVjdHMgYEFGX1JYUlBDYCwgYEROU19SRVNPTFZFUmAsIGBORVRGU19TVVBQT1JUYCwgYW5kLCBpbXBvcnRhbnRseSwgYENSWVBUT19LUkI1YC4gVGhpcyBpcyB1c2VmdWwgY29udGV4dC5cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBjb25maWd1cmF0aW9ucyBtYW5pZmVzdCBpbiB0aGUgY29kZWJhc2UuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucywgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZWlyIHJvbGVzOlxuXG4xLiAgYGZzL2Fmcy9jbV9zZWN1cml0eS5jYDogYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCAtIFNlY3VyaXR5LCBsaWtlbHkgQUZTLXNwZWNpZmljLlxuMi4gIGBmcy9hZnMvaW50ZXJuYWwuaGA6IGBhZnNfbWFrZV9vcF9jYWxsYCAtIEFGUywgaW50ZXJuYWwgZnVuY3Rpb24gY2FsbC5cbjMuICBgZnMvYWZzL3J4cnBjLmNgOiBgYWZzX21ha2VfY2FsbGAsIGBhZnNfc2VuZF9lbXB0eV9yZXBseWAsIGBhZnNfc2VuZF9zaW1wbGVfcmVwbHlgIC0gUlhSUEMvQUZTIGludGVyYWN0aW9uLlxuNC4gIGBuZXQvcnhycGMvY2FsbF9zdGF0ZS5jYDogYHJ4cnBjX25vdGlmeV9zb2NrZXRgLCBgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbmAgLSBSWFJQQyBjYWxsIG1hbmFnZW1lbnQuXG41LiAgYG5ldC9yeHJwYy9jb25uX29iamVjdC5jYDogYHJ4cnBjX3Bva2VfY29ubmAgLSBSWFJQQyBjb25uZWN0aW9uIG1haW50ZW5hbmNlLlxuNi4gIGBuZXQvcnhycGMva2V5LmNgOiBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYCAtIFJYUlBDL1lGUy9SeEdLIGtleSBwYXJzaW5nLlxuNy4gIGBuZXQvcnhycGMvcmVjdm1zZy5jYDogYHJ4cnBjX3JlcXVldWVfY2FsbGAsIGByeHJwY19yZWN2bXNnYCAtIFJYUlBDIG1lc3NhZ2UgaGFuZGxpbmcuXG44LiAgYG5ldC9yeHJwYy9yeGdrLmNgOiBgcnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHlgIC0gUlhHSyBzZWN1cml0eSBpbml0aWFsaXphdGlvbi5cbjkuICBgbmV0L3J4cnBjL3J4cGVyZi5jYDogYHJ4cGVyZl9wcm9jZXNzX2NhbGxgIC0gUlhQRVJGIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuXG4xMC4gYG5ldC9yeHJwYy9zZW5kbXNnLmNgOiBgcnhycGNfc2VuZF9kYXRhYCwgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAgLSBSWFJQQyBtZXNzYWdlIHNlbmRpbmcuXG5cbk5vdywgSSdtIGNoZWNraW5nIHRoZSBtb3N0IHVzZWZ1bCBzeW1ib2xzLCB0aGUgb25lcyBJIGNhbGwgXCJnb29kIEZvY3VzU3ltYm9sc1wiLiBJJ3ZlIGNvbXBpbGVkIGEgbGlzdCBvZiBzeW1ib2xzIGJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGNoYW5nZWQgYW5kIG1hcmtlZCB0aGVtIGZvciBjbG9zZXIgaW5zcGVjdGlvbjpcbi0gYHJ4cnBjX3NlbmRfZGF0YWBcbi0gYHJ4cnBjX2RvX3NlbmRtc2dgXG4tIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYFxuLSBgcnhycGNfcmVjdm1zZ2Bcbi0gYHJ4cnBjX25vdGlmeV9zb2NrZXRgXG4tIGByeHJwY19wb2tlX2Nvbm5gXG4tIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgXG4tIGByeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eWBcbi0gYGFmc19tYWtlX2NhbGxgXG4tIGBhZnNfc2VuZF9zaW1wbGVfcmVwbHlgXG4tIGBhZnNfc2VuZF9lbXB0eV9yZXBseWBcbi0gYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYFxuLSBgcnhwZXJmX3Byb2Nlc3NfY2FsbGBcblxuVGhlIGNydWNpYWwgdGVzdCBub3cgaXMgdWJpcXVpdHkuIEFyZSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zICpldmVyeXdoZXJlKiBpbiB0aGUga2VybmVsLCBvciBhcmUgdGhleSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtPyBJIHNlZSB0aGF0IGFsbCBvZiB0aGVtIGFyZSByZWxhdGVkIHRvIFJ4UlBDLCBBRlMsIFJ4R0ssIG9yIFJ4UGVyZi4gVGhpcyBtZWFucyB0aGV5IGFyZSBsb2NhbGl6ZWQuXG5cblRvIGJlIHRob3JvdWdoLCBJIGhhdmUgdG8gZW5zdXJlIGFsbCByZXF1aXJlZCBjb25maWdzIGFyZSBwcmVzZW50OiBgQUZfUlhSUENgLCBgQUZTX0ZTYCwgYFJYR0tgLCBhbmQgYFJYUEVSRmAgYXJlIGVzc2VudGlhbCwgZ2l2ZW4gd2hhdCBJJ3ZlIGZvdW5kLlxuXG5GaW5hbGx5LCBJJ20gZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlIHRvIHNlZSB3aGF0IGd1YXJkcyBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYC4gSXQgc2VlbXMsIGZyb20gbG9va2luZyBhdCBgbmV0L3J4cnBjL2tleS5jYCwgdGhhdCBgI2lmZGVmIENPTkZJR19SWEdLYCBtYXkgYmUgcHJlc2VudCwgb3IgaXQgbWF5IGFsd2F5cyBiZSBjb21waWxlZCBpbi4gSXQgZGVwZW5kcyBvbiBob3cgaXQgaXMgZ3VhcmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2OTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MDIuNTMzMjMyODY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzcwMTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMva2V5LmM9MTM3PXN0YXRpYyB0aW1lNjRfdCByeHJwY19zNjRfdG9fdGltZTY0KHM2NCB0aW1lX2luXzEwMG5zKVxcbi0tXFxubmV0L3J4cnBjL2tleS5jLTE2NC0gKi9cXG5uZXQvcnhycGMva2V5LmM6MTY1OnN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXFxubmV0L3J4cnBjL2tleS5jLTE2Ni1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZV90IGRhdGFsZW4sXFxuLS1cXG5uZXQvcnhycGMva2V5LmM9MzAwPXN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuLS1cXG5uZXQvcnhycGMva2V5LmMtMzk1LVxcdFxcdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XFxubmV0L3J4cnBjL2tleS5jOjM5NjpcXHRcXHRcXHRyZXQyID0gcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHByZXAsIGRhdGFsZW4sIHRva2VuLCB0b2tsZW4pO1xcbm5ldC9yeHJwYy9rZXkuYy0zOTctXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjUwOjAyLjYyNjk0MjI2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjkyNDcyMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZz10cnVlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGxvb2tpbmcgYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBJIHNlZSB0aGF0IGBrZXkuY2AsIGByeGdrLmNgLCBgcnhwZXJmLmNgLCBhbmQgdGhlIGVudGlyZSBgYWZzL2AgZGlyZWN0b3J5IGFyZSBjb21waWxlZCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zOiBgQ09ORklHX0FGX1JYUlBDYCwgYENPTkZJR19SWEdLYCwgYENPTkZJR19SWFBFUkZgLCBhbmQgYENPTkZJR19BRlNfRlNgLCByZXNwZWN0aXZlbHkuIE5hdHVyYWxseSwgSSB3YW50IHRvIHZlcmlmeSB3aGljaCBjb25maWdzIGFyZSBhdCBwbGF5IGhlcmUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBBRl9SWFJQQ2AsIGBBRlNfRlNgLCBgUlhHS2AsIGFuZCBgUlhQRVJGYC4gVGhlIHViaXF1aXRvdXMgYElORVRgIGRlcGVuZGVuY3kgaXMgaW1wbGljaXRseSB0aGVyZSwgYXMgYEFGX1JYUlBDYCBhbmQgYEFGU19GU2AgcmVseSBvbiBpdC4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYFJYR0tgIGlzIG5lc3RlZCB1bmRlciBgQUZfUlhSUENgLCBhbmQgYFJYUEVSRmAgaGFzIGl0cyBvd24gY29uZmlndXJhdGlvbiBlbnRyeSBpbiB0aGUgYG5ldC9yeHJwYy9LY29uZmlnYCBmaWxlLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBzaG91bGQgYFdvcnRoRnV6emluZ2AgYmUgc2V0IHRvIHRydWU/IEFic29sdXRlbHksIHllcy4gVGhlIHBhdGNoIHNlcmllcyBkaXZlcyBkZWVwIGludG8gY29yZSBSeFJQQyBzZW5kL3JlY2VpdmUvY29tcGxldGlvbiBsb2dpYywgd2hpY2ggaW5jbHVkZXMgUnhHSyBzZWN1cml0eSBjb250ZXh0IGhhbmRsaW5nLCBjb25uZWN0aW9uIHBva2luZywga2V5IHBhcnNpbmcgZm9yIFJ4R0ssIGFuZCBBRlMgY2xpZW50IHNlbmQvcmVwbHkgcGF0aHMuXG5cbkhlcmUncyB0aGUgcmF0aW9uYWxlOiB0aGUgbW9kaWZpY2F0aW9ucyBpbXBhY3Qga2V5IGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyBsaWtlIGByeHJwY19zZW5kX2RhdGFgLCBub3RpZmljYXRpb24gcm91dGluZXMgbGlrZSBgcnhycGNfbm90aWZ5X3NvY2tldGAgYW5kIGByeHJwY19yZXF1ZXVlX2NhbGxgLCB0aGUgcGFyc2luZyBvZiBrZXlzIHdpdGhpbiBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYCwgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHRocm91Z2ggYHJ4cnBjX3Bva2VfY29ubmAsIGFuZCwgY3J1Y2lhbGx5LCBBRlMgY2xpZW50IGNhbGxzIHZpYSBgYWZzX21ha2VfY2FsbGAgYW5kIGBhZnNfc2VuZF9zaW1wbGVfcmVwbHlgLlxuXG5UaGUga2V5IGhlcmUgaXMgdGhhdCBhbGwgdGhlc2UgbW9kaWZpZWQgcGF0aHMgYXJlIGRpcmVjdGx5IGV4cG9zZWQgYW5kIGVhc2lseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG1ldGhvZHMuIFdlIGNhbiBnZXQgdG8gdGhlbSB0aHJvdWdoIEFGX1JYUlBDIHNvY2tldCBvcGVyYXRpb25zLCB0aGUgYGFkZF9rZXlgIHN5c2NhbGwsIGFuZCBzdGFuZGFyZCBBRlMgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgd2l0aGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBsZXZlbCBvZiB1c2VyLXNwYWNlIGFjY2Vzc2liaWxpdHkgbWFrZXMgdGhpcyBjb2RlIGFuIGV4Y2VsbGVudCB0YXJnZXQgZm9yIGZ1enppbmcuIFRodXMsIEknbGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAgYW5kIGludm9rZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTgwMCwiT3V0cHV0VG9rZW5zIjoyNjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MDcuOTE5NDIwNDE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMjE2NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJSWEdLXCIsXG4gICAgXCJSWFBFUkZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyeHJwY19zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX2RvX3NlbmRtc2dcIixcbiAgICBcInJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX3JlY3Ztc2dcIixcbiAgICBcInJ4cnBjX25vdGlmeV9zb2NrZXRcIixcbiAgICBcInJ4cnBjX3Bva2VfY29ublwiLFxuICAgIFwicnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrXCIsXG4gICAgXCJyeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eVwiLFxuICAgIFwiYWZzX21ha2VfY2FsbFwiLFxuICAgIFwiYWZzX3NlbmRfc2ltcGxlX3JlcGx5XCIsXG4gICAgXCJhZnNfc2VuZF9lbXB0eV9yZXBseVwiLFxuICAgIFwiYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5cIixcbiAgICBcInJ4cGVyZl9wcm9jZXNzX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBzb2NrZXQgZGF0YSBzZW5kaW5nIGFuZCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLCBjb25uZWN0aW9uIHJlZmVyZW5jZSBjb3VudGluZywga2V5IHBheWxvYWQgcGFyc2luZywgYW5kIGluLWtlcm5lbCBBRlMvcnhwZXJmIHNlbmQgcGF0aHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZXMgYW5kIGVycm9yLWhhbmRsaW5nIHBhdGhzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQUZfUlhSUEMgc29ja2V0cywga2V5cyBzeXNjYWxscywgYW5kIEFGUyBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJSWEdLXCIsXG4gICAgXCJSWFBFUkZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyeHJwY19zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX2RvX3NlbmRtc2dcIixcbiAgICBcInJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX3JlY3Ztc2dcIixcbiAgICBcInJ4cnBjX25vdGlmeV9zb2NrZXRcIixcbiAgICBcInJ4cnBjX3Bva2VfY29ublwiLFxuICAgIFwicnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrXCIsXG4gICAgXCJyeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eVwiLFxuICAgIFwiYWZzX21ha2VfY2FsbFwiLFxuICAgIFwiYWZzX3NlbmRfc2ltcGxlX3JlcGx5XCIsXG4gICAgXCJhZnNfc2VuZF9lbXB0eV9yZXBseVwiLFxuICAgIFwiYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5cIixcbiAgICBcInJ4cGVyZl9wcm9jZXNzX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBzb2NrZXQgZGF0YSBzZW5kaW5nIGFuZCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLCBjb25uZWN0aW9uIHJlZmVyZW5jZSBjb3VudGluZywga2V5IHBheWxvYWQgcGFyc2luZywgYW5kIGluLWtlcm5lbCBBRlMvcnhwZXJmIHNlbmQgcGF0aHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZXMgYW5kIGVycm9yLWhhbmRsaW5nIHBhdGhzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQUZfUlhSUEMgc29ja2V0cywga2V5cyBzeXNjYWxscywgYW5kIEFGUyBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MDguMDQwNjQ1MDg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE0ODg1NTExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjUwOjA4LjA0MTI2MDQzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0MTQ4MjMyNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEFGX1JYUlBDIGFuZCBBRlMgbmV0d29ya2luZyBjb2RlIHRvIHN1cHBvcnQgc2hvcnQgd3JpdGVzIGluIHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEsIGxvb3AgdW50aWwgZnVsbCBtZXNzYWdlIGNvbnN1bXB0aW9uIGluIEFGUy9yeHBlcmYgY2FsbGVycywgc2ltcGxpZnkgbG9ja2luZyBhcm91bmQgcnhycGNfc2VuZF9kYXRhLCBmaXggdGhlIHRva3NpemUgY2FsY3VsYXRpb24gZm9yIFlGUyBDTSB0b2tlbnMsIGFkZCBlbmNyeXB0aW9uIHR5cGUgdmFsaWRhdGlvbiBmb3IgWUZTIGtleXMsIGFuZCBjbGVhbiB1cCBzb2NrZXQgbm90aWZpY2F0aW9uIGFuZCBjb25uZWN0aW9uIHJlZmNvdW50aW5nLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcXG4tIFRoZSB0b2tlbiBidWZmZXIgaW4gYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHplcm9pbmcgYWxsIGJ5dGVzOyB0aGUgZml4IG1lcmVseSBhY2NvdW50cyBmb3IgdGhlIDQtYnl0ZSBgbGV2ZWxgIGZpZWxkIGluIGB0b2tzaXplYC5cXG4tIEluIGByeHJwY19zZW5kX2RhdGFgLCBkYXRhIHRyYW5zZmVyIGNvbnRpbnVlcyB0byB1c2UgYGNvcHlfZnJvbV9pdGVyX2Z1bGxgIHdpdGggYm91bmRlZCBjb3B5IHNpemVzIChgbWluM2ApLCBhbmQgZXJyb3ItcmV3aW5kIGxvZ2ljIHVwZGF0ZXMgYnl0ZSBjb3VudGVycyBhcHByb3ByaWF0ZWx5Llxcbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxcbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuXFxuXFxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2QzYWZmMjMzNzY5MDgxNjkzZWRhODg5YjU4YWEzMjAzYTYyODkyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NDk6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdFxuaW5kZXggODkyNmRhYjhlMmU2MC4uN2RmNmFmZjc2NDRjMCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RcbkBAIC04NzksMTQgKzg3OSwyMSBAQCBUaGUga2VybmVsIGludGVyZmFjZSBmdW5jdGlvbnMgYXJlIGFzIGZvbGxvd3M6XG4gICAgICBleGNsdXNpdmVseSB0byBpbi1rZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMuICBtc2cubXNnX2ZsYWdzIG1heSBiZSBnaXZlblxuICAgICAgTVNHX01PUkUgaWYgdGhlcmUgd2lsbCBiZSBzdWJzZXF1ZW50IGRhdGEgc2VuZHMgZm9yIHRoaXMgY2FsbC5cbiBcbi0gICAgIFRoZSBtc2cgbXVzdCBub3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGNvbnRyb2wgZGF0YSBvciBhbnkgZmxhZ3Ncbi0gICAgIG90aGVyIHRoYW4gTVNHX01PUkUuICBsZW4gaXMgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIHRvIHRyYW5zbWl0LlxuKyAgICAgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzXG4rICAgICBvdGhlciB0aGFuIE1TR19NT1JFLiAgbGVuIGlzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBhZGQgdG8gdGhlXG4rICAgICB0cmFuc21pc3Npb24uICBUaGUgbGFzdC1wYWNrZXQgZmxhZyB3aWxsIG9ubHkgYmUgc2V0IG9uIHRoZSBvdXRnb2luZ1xuKyAgICAgcGFja2V0IGlmIE1TR19NT1JFIGlzIG5vdCBzZXQgYW5kIGxlbiBhbW91bnQgb2YgYnl0ZXMgYXJlIGJ1ZmZlcmVkLlxuIFxuICAgICAgbm90aWZ5X2VuZF9yeCBjYW4gYmUgTlVMTCBvciBpdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZnVuY3Rpb24gdG8gYmVcbiAgICAgIGNhbGxlZCB3aGVuIHRoZSBjYWxsIGNoYW5nZXMgc3RhdGUgdG8gZW5kIHRoZSBUeCBwaGFzZS4gIFRoaXMgZnVuY3Rpb24gaXNcbiAgICAgIGNhbGxlZCB3aXRoIGEgc3BpbmxvY2sgaGVsZCB0byBwcmV2ZW50IHRoZSBsYXN0IERBVEEgcGFja2V0IGZyb20gYmVpbmdcbiAgICAgIHRyYW5zbWl0dGVkIHVudGlsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxuIFxuKyAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIG9yIGFuIGVycm9yLiAgSXQgd2lsbFxuKyAgICAgcmV0dXJuIHplcm8gb25seSBpZiBsZW4gaXMgMCBvciBpZiBtc2ctXHUwMDNlbXNnX2l0ZXIgaXMgZW1wdHkuICBJdCBtYXkgYWxzb1xuKyAgICAgbWFrZSBhIHNob3J0IHdyaXRlLCBidWZmZXJpbmcgbGVzcyB0aGFuIHRoZSBhbW91bnQgb2YgZGF0YSBwcm92aWRlZCBvciB0aGVcbisgICAgIGxlbiBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJlIGNhbGxlZCBhZ2Fpbi5cbitcbiAgKCMpIFJlY2VpdmUgZGF0YSBmcm9tIGEgY2FsbDo6XG4gXG4gXHRpbnQgcnhycGNfa2VybmVsX3JlY3ZfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jIGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbmluZGV4IDEwMzE2OGM3MGRkNGQuLjVlZWVlZjc2MWNmMzEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuY1xuKysrIGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbkBAIC0yMzUsNyArMjM1LDcgQEAgc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuIFx0ICpcdHN0cnVjdCBSWEdLX0F1dGhOYW1lXHRpZGVudGl0aWVzXHUwMDNjXHUwMDNlO1xuIFx0ICogfTtcbiBcdCAqL1xuLVx0dG9rc2l6ZSA9IGtleXNpemUgKyA4ICsgNCArIDQgKyA4ICsgeGRyX2xlbl9vYmplY3QoYXV0aHNpemUpO1xuK1x0dG9rc2l6ZSA9IGtleXNpemUgKyA0ICsgOCArIDQgKyA0ICsgOCArIHhkcl9sZW5fb2JqZWN0KGF1dGhzaXplKTtcbiBcbiBcdG9mZnNldCA9IDA7XG4gXHRlbmNzaXplID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKHRva2VuX2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLCB0b2tzaXplLCBcdTAwMjZvZmZzZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjY1YTA4NjZjZDhiODUgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xNDE2LDIyICsxNDE2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KVxuIFx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4tXHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuLXtcbi1cdHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLVx1MDAzZWVzdGF0ZS1cdTAwM2VhZGRyZXNzZXM7XG4tXG4tXHRvcC1cdTAwM2VjYWxsXHQ9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpO1xuLVx0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4tXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuLVx0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuLVx0Y2FsbC1cdTAwM2VpbnRyXHQ9ICEob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcbi1cdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4tXHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbi1cdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcbi1cdGFmc19wdXRfY2FsbChjYWxsKTtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB7XG4gXHRjYWxsLVx1MDAzZWlvdl9sZW4gPSBzaXplO1xuQEAgLTE3NjMsNiArMTc0NywyMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXG4gXHRyZXR1cm4gXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuK1x0XHRcdFx0ICAgIGdmcF90IGdmcClcbit7XG4rXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuK1xuK1x0b3AtXHUwMDNlY2FsbFx0PSBhZnNfZ2V0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfZ2V0KTtcbitcdG9wLVx1MDAzZXR5cGVcdD0gY2FsbC1cdTAwM2V0eXBlO1xuK1x0Y2FsbC1cdTAwM2VvcFx0PSBvcDtcbitcdGNhbGwtXHUwMDNlc2VydmVyXHQ9IGFmc191c2Vfc2VydmVyKG9wLVx1MDAzZXNlcnZlciwgZmFsc2UsIGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwpO1xuK1x0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuK1x0Y2FsbC1cdTAwM2VpbnRyXHQ9ICEob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcbitcdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4rXHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbitcdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcbitcdGFmc19wdXRfY2FsbChjYWxsKTtcbit9XG4rXG4gLypcbiAgKiBOb3RlIHRoYXQgYSBkZW50cnkgZ290IGNoYW5nZWQuICBXZSBuZWVkIHRvIHNldCBkX2ZzZGF0YSB0byB0aGUgZGF0YSB2ZXJzaW9uXG4gICogbnVtYmVyIGRlcml2ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uICBJdCBkb2Vzbid0IG1hdHRlciBpZlxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9yeHJwYy5jIGIvZnMvYWZzL3J4cnBjLmNcbmluZGV4IGQ4MjkxNjY1N2EzZGQuLjFmNWI2YWE2ODk0MzMgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvcnhycGMuY1xuKysrIGIvZnMvYWZzL3J4cnBjLmNcbkBAIC00MTIsMjYgKzQxMiwzMiBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbiBcdG1zZy5tc2dfZmxhZ3NcdFx0PSBNU0dfV0FJVEFMTCB8IChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xuIFxuLVx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIHJ4Y2FsbCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2bXNnLCBjYWxsLVx1MDAzZXJlcXVlc3Rfc2l6ZSxcbi1cdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yX2RvX2Fib3J0O1xuK1x0ZG8ge1xuK1x0XHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLCBcdTAwMjZtc2csXG4rXHRcdFx0XHRcdCAgICAgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuK1x0XHRcdFx0XHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XG4rXHR9IHdoaWxlIChtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZykgXHUwMDNlIDApO1xuIFxuIFx0aWYgKGNhbGwtXHUwMDNld3JpdGVfaXRlcikge1xuIFx0XHRtc2cubXNnX2l0ZXIgPSAqY2FsbC1cdTAwM2V3cml0ZV9pdGVyO1xuIFx0XHRtc2cubXNnX2ZsYWdzIFx1MDAyNj0gfk1TR19NT1JFO1xuIFx0XHR0cmFjZV9hZnNfc2VuZF9kYXRhKGNhbGwsIFx1MDAyNm1zZyk7XG4gXG4tXHRcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LFxuLVx0XHRcdFx0XHQgICAgIGNhbGwtXHUwMDNlcnhjYWxsLCBcdTAwMjZtc2csXG4tXHRcdFx0XHRcdCAgICAgaW92X2l0ZXJfY291bnQoXHUwMDI2bXNnLm1zZ19pdGVyKSxcbi1cdFx0XHRcdFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcbitcdFx0ZG8ge1xuK1x0XHRcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LFxuK1x0XHRcdFx0XHRcdCAgICAgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZyxcbitcdFx0XHRcdFx0XHQgICAgIG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSxcbitcdFx0XHRcdFx0XHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXHUwMDI2bXNnLCByZXQpO1xuK1x0XHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbitcdFx0XHR9XG4rXHRcdH0gd2hpbGUgKG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMCk7XG4gXHRcdCpjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7XG4gXG4tXHRcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXHUwMDI2bXNnLCByZXQpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XG4rXHRcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXHUwMDI2bXNnLCAwKTtcbiBcdH1cbiBcbiBcdC8qIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCB3ZSBtYXkgaGF2ZSByZWNlaXZlZCB0aGUgcmVwbHkgb3IgYW4gYWJvcnRcbkBAIC00NDMsMTAgKzQ0OSw4IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdHJldHVybjtcbiBcbiBlcnJvcl9kb19hYm9ydDpcbi1cdGlmIChyZXQgIT0gLUVDT05OQUJPUlRFRClcbi1cdFx0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCByeGNhbGwsXG4tXHRcdFx0XHRcdFJYX1VTRVJfQUJPUlQsIHJldCxcbi1cdFx0XHRcdFx0YWZzX2Fib3J0X3NlbmRfZGF0YV9lcnJvcik7XG4rXHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIHJ4Y2FsbCxcbitcdFx0XHRcdFJYX1VTRVJfQUJPUlQsIHJldCwgYWZzX2Fib3J0X3NlbmRfZGF0YV9lcnJvcik7XG4gXHRpZiAoY2FsbC1cdTAwM2Vhc3luYykge1xuIFx0XHRhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQpO1xuIFx0XHRyZXR1cm47XG5AQCAtODU5LDYgKzg2Myw3IEBAIHZvaWQgYWZzX3NlbmRfZW1wdHlfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIHtcbiBcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjYWxsLVx1MDAzZW5ldDtcbiBcdHN0cnVjdCBtc2doZHIgbXNnO1xuK1x0aW50IHJldDtcbiBcbiBcdF9lbnRlcihcIlwiKTtcbiBcbkBAIC04NzEsMjIgKzg3NiwxMyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdG1zZy5tc2dfY29udHJvbGxlblx0PSAwO1xuIFx0bXNnLm1zZ19mbGFnc1x0XHQ9IDA7XG4gXG4tXHRzd2l0Y2ggKHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZywgMCxcbi1cdFx0XHRcdCAgICAgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCkpIHtcbi1cdGNhc2UgMDpcbi1cdFx0X2xlYXZlKFwiIFtyZXBsaWVkXVwiKTtcbitcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZywgMCxcbitcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDApIC8qIFNob3VsZG4ndCBidWZmZXIgbW9yZSB0aGFuIDAgYnl0ZXMuICovXG4gXHRcdHJldHVybjtcbiBcbi1cdGNhc2UgLUVOT01FTTpcbi1cdFx0X2RlYnVnKFwib29tXCIpO1xuLVx0XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbi1cdFx0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgLUVOT01FTSxcbi1cdFx0XHRcdFx0YWZzX2Fib3J0X29vbSk7XG4tXHRcdGZhbGx0aHJvdWdoO1xuLVx0ZGVmYXVsdDpcbi1cdFx0X2xlYXZlKFwiIFtlcnJvcl1cIik7XG4tXHRcdHJldHVybjtcbi1cdH1cbitcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuK1x0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgcmV0LCBhZnNfYWJvcnRfc2VuZF9lcnJvcik7XG4gfVxuIFxuIC8qXG5AQCAtOTEyLDIwICs5MDgsMjEgQEAgdm9pZCBhZnNfc2VuZF9zaW1wbGVfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pXG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbiBcdG1zZy5tc2dfZmxhZ3NcdFx0PSAwO1xuIFxuLVx0biA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZywgbGVuLFxuLVx0XHRcdFx0ICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuK1x0ZG8ge1xuK1x0XHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbitcdFx0XHRcdFx0ICAgXHUwMDI2bXNnLCBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZyksXG4rXHRcdFx0XHRcdCAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTtcbitcdH0gd2hpbGUgKG4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZykgXHUwMDNlIDApO1xuK1xuIFx0aWYgKG4gXHUwMDNlPSAwKSB7XG4gXHRcdC8qIFN1Y2Nlc3MgKi9cbiBcdFx0X2xlYXZlKFwiIFtyZXBsaWVkXVwiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKG4gPT0gLUVOT01FTSkge1xuLVx0XHRfZGVidWcoXCJvb21cIik7XG4tXHRcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuLVx0XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLFxuLVx0XHRcdFx0XHRhZnNfYWJvcnRfb29tKTtcbi1cdH1cbitcbitcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuK1x0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgbiwgYWZzX2Fib3J0X3NlbmRfZXJyb3IpO1xuIFx0X2xlYXZlKFwiIFtlcnJvcl1cIik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbmluZGV4IDFiM2M0OGI1NTkxZGYuLjA0YjBiYjY4MmI4MTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbkBAIC0xNDgsNiArMTQ4LDcgQEAgZW51bSB5ZnNfY21fb3BlcmF0aW9uIHtcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsXHRcIlVOVSBpc29ydFwiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXHRcdFwiVVBEQVRFICAgXCIpIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9ieV91dWlkLFx0XCJVU0UgdXVpZCBcIikgXFxcbitcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwsXHRcdFwiVVNFIGNhbGwgXCIpIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9jbV9jYWxsLFx0XCJVU0UgY20tY2xcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLFx0XCJVU0UgZ2NhcHNcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dpdmVfdXBfY2IsXHRcIlVTRSBndnVwY1wiKSBcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oXG5pbmRleCA3MDRhMTBkZTY2NzAwLi41MmY4NzE4Y2Y3MjUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuQEAgLTIwLDE2ICsyMCwxNiBAQFxuIFx0LyogQUZTIGVycm9ycyAqL1x0XHRcdFx0XHRcdFxcXG4gXHRFTShhZnNfYWJvcnRfZ2VuZXJhbF9lcnJvcixcdFx0XCJhZnMtZXJyb3JcIilcdFx0XFxcbiBcdEVNKGFmc19hYm9ydF9pbnRlcnJ1cHRlZCxcdFx0XCJhZnMtaW50clwiKVx0XHRcXFxuLVx0RU0oYWZzX2Fib3J0X29vbSxcdFx0XHRcImFmcy1vb21cIilcdFx0XFxcbiBcdEVNKGFmc19hYm9ydF9vcF9ub3Rfc3VwcG9ydGVkLFx0XHRcImFmcy1vcC1ub3RzdXBwXCIpXHRcXFxuIFx0RU0oYWZzX2Fib3J0X3Byb2JldXVpZF9uZWdhdGl2ZSxcdFwiYWZzLXByb2JldXVpZC1uZWdcIilcdFxcXG4gXHRFTShhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yLFx0XHRcImFmcy1zZW5kLWRhdGFcIilcdFxcXG4rXHRFTShhZnNfYWJvcnRfc2VuZF9lcnJvcixcdFx0XCJhZnMtc2VuZC1lcnJvclwiKVx0XFxcbiBcdEVNKGFmc19hYm9ydF91bm1hcnNoYWxfZXJyb3IsXHRcdFwiYWZzLXVubWFyc2hhbFwiKVx0XFxcbiBcdEVNKGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MsXHRcImFmcy11bnN1cC1zZWMtY2xhc3NcIilcdFxcXG4gXHQvKiByeHBlcmYgZXJyb3JzICovXHRcdFx0XHRcdFx0XFxcbiBcdEVNKHJ4cGVyZl9hYm9ydF9nZW5lcmFsX2Vycm9yLFx0XHRcInJ4cGVyZi1lcnJvclwiKVx0XHRcXFxuLVx0RU0ocnhwZXJmX2Fib3J0X29vbSxcdFx0XHRcInJ4cGVyZi1vb21cIilcdFx0XFxcbiBcdEVNKHJ4cGVyZl9hYm9ydF9vcF9ub3Rfc3VwcG9ydGVkLFx0XCJyeHBlcmYtb3Atbm90c3VwcFwiKVx0XFxcbitcdEVNKHJ4cGVyZl9hYm9ydF9zZW5kX2Vycm9yLFx0XHRcInJ4cGVyZi1zZW5kLWVycm9yXCIpXHRcXFxuIFx0RU0ocnhwZXJmX2Fib3J0X3VubWFyc2hhbF9lcnJvcixcdFwicnhwZXJmLXVubWFyc2hhbFwiKVx0XFxcbiBcdC8qIFJ4S0FEIHNlY3VyaXR5IGVycm9ycyAqL1x0XHRcdFx0XHRcXFxuIFx0RU0ocnhrYWRfYWJvcnRfMV9zaG9ydF9jaGVjayxcdFx0XCJyeGthZDEtc2hvcnQtY2hlY2tcIilcdFxcXG5AQCAtMTQ4LDYgKzE0OCw3IEBAXG4gXHRFTShyeHJwY19lcHJvdG9fd3Jvbmdfc2VjdXJpdHksXHRcdFwid3Jvbmctc2VjXCIpXHRcdFxcXG4gXHRFTShyeHJwY19yZWN2bXNnX2V4Y2Vzc19kYXRhLFx0XHRcInJlY3Ztc2ctZXhjZXNzXCIpXHRcXFxuIFx0RU0ocnhycGNfcmVjdm1zZ19zaG9ydF9kYXRhLFx0XHRcInJlY3Ztc2ctc2hvcnRcIilcdFxcXG4rXHRFTShyeHJwY19zZW5kbXNnX3R4X2Vycm9yLFx0XHRcInR4LWVycm9yXCIpXHRcdFxcXG4gXHRFXyhyeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcdFx0XCJzZW5kbXNnLWxhdGVcIilcbiBcbiAjZGVmaW5lIHJ4cnBjX2NhbGxfcG9rZV90cmFjZXMgXFxcbkBAIC0zNDIsNiArMzQzLDcgQEBcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX2Rpc3RyaWJ1dGVfZXJyb3IsXHRcIlNFRSBkaXN0LWVyclwiKSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfaW5wdXQsXHRcdFwiU0VFIGlucHV0ICAgXCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQsXHRcIlNFRSBuZnktcmxzZFwiKSBcXFxuK1x0RU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQsXHRcIlNFRSBuZnktc2tpcFwiKSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZyxcdFx0XCJTRUUgcmVjdm1zZyBcIikgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2dfcmVxdWV1ZSxcdFwiU0VFIHJlY3YtcnF1XCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsIFwiU0VFIHJlY3YtcnFGXCIpIFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmggYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuaW5kZXggODY1ZjA1ZmUzN2FiOS4uY2IzNmE3MDlmNTQwZSAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG4rKysgYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuQEAgLTY0Miw2ICs2NDIsNyBAQCBlbnVtIHJ4cnBjX2NhbGxfZmxhZyB7XG4gXHRSWFJQQ19DQUxMX1RYX0xBU1QsXHRcdC8qIExhc3QgcGFja2V0IGluIFR4IGJ1ZmZlciAoYXQgcnh0eF90b3ApICovXG4gXHRSWFJQQ19DQUxMX1RYX0FMTF9BQ0tFRCxcdC8qIExhc3QgcGFja2V0IGhhcyBiZWVuIGhhcmQtYWNrZWQgKi9cbiBcdFJYUlBDX0NBTExfVFhfTk9fTU9SRSxcdFx0LyogTm8gbW9yZSBkYXRhIHRvIHRyYW5zbWl0IChNU0dfTU9SRSBkZWFzc2VydGVkKSAqL1xuK1x0UlhSUENfQ0FMTF9UWF9FUlJPUixcdFx0LyogVGVybWluYWwgZXJyb3I7IGNhbGwgbmVlZHMgYWJvcnQgKi9cbiBcdFJYUlBDX0NBTExfU0VORF9QSU5HLFx0XHQvKiBBIHBpbmcgd2lsbCBuZWVkIHRvIGJlIHNlbnQgKi9cbiBcdFJYUlBDX0NBTExfUkVUUkFOU19USU1FT1VULFx0LyogUmV0cmFuc21pc3Npb24gZHVlIHRvIHRpbWVvdXQgb2NjdXJyZWQgKi9cbiBcdFJYUlBDX0NBTExfQkVHQU5fUlhfVElNRVIsXHQvKiBXZSBiZWdhbiB0aGUgZXhwZWN0X3J4X2J5IHRpbWVyICovXG5AQCAtMTEwOSw2ICsxMTEwLDcgQEAgc3RhdGljIGlubGluZSBib29sIHJ4cnBjX2lzX2NsaWVudF9jYWxsKGNvbnN0IHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIC8qXG4gICogY2FsbF9zdGF0ZS5jXG4gICovXG4rdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKTtcbiBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRcdFx0ICAgICAgIGVudW0gcnhycGNfY2FsbF9jb21wbGV0aW9uIGNvbXBsLFxuIFx0XHRcdCAgICAgICB1MzIgYWJvcnRfY29kZSxcbkBAIC0xNDQxLDcgKzE0NDMsNiBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHJ4cnBjX2xvY2FsX3NlcV9vcHM7XG4gLypcbiAgKiByZWN2bXNnLmNcbiAgKi9cbi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKik7XG4gaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICosIHNpemVfdCwgaW50KTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jYWxsX3N0YXRlLmMgYi9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jXG5pbmRleCA2YWZiNTQzNzNlYmJmLi4zNjQ4MTBjNjUyNzY2IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xuKysrIGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xuQEAgLTcsNiArNyw2MCBAQFxuIFxuICNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4gXG4rLypcbisgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuXG4rICovXG4rc3RhdGljIHZvaWQgX19yeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuK3tcbitcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbitcdHN0cnVjdCBzb2NrICpzaztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9SRUxFQVNFRCwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpIHtcbitcdFx0cnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1xuK1x0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuK1x0c2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbitcdGlmIChyeCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgXHUwMDNjIFJYUlBDX0NMT1NFKSB7XG4rXHRcdGlmIChjYWxsLVx1MDAzZW5vdGlmeV9yeCkge1xuK1x0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2ssIGZsYWdzKTtcbitcdFx0XHRjYWxsLVx1MDAzZW5vdGlmeV9yeChzaywgY2FsbCwgY2FsbC1cdTAwM2V1c2VyX2NhbGxfSUQpO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y2FsbC1cdTAwM2Vub3RpZnlfbG9jaywgZmxhZ3MpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jaywgZmxhZ3MpO1xuK1x0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKSkge1xuK1x0XHRcdFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XG4rXHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpO1xuK1x0XHRcdH1cbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jaywgZmxhZ3MpO1xuK1xuK1x0XHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4rXHRcdFx0XHRfZGVidWcoXCJjYWxsICVwc1wiLCBzay1cdTAwM2Vza19kYXRhX3JlYWR5KTtcbitcdFx0XHRcdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rfVxuK1xuKy8qXG4rICogUG9zdCBhIGNhbGwgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlLlxuKyAqL1xuK3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbit7XG4rXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSkge1xuK1x0XHRyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdF9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcbit9XG4rXG4gLypcbiAgKiBUcmFuc2l0aW9uIGEgY2FsbCB0byB0aGUgY29tcGxldGUgc3RhdGUuXG4gICovXG5AQCAtMjUsNyArNzksNyBAQCBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRyeHJwY19zZXRfY2FsbF9zdGF0ZShjYWxsLCBSWFJQQ19DQUxMX0NPTVBMRVRFKTtcbiBcdHRyYWNlX3J4cnBjX2NhbGxfY29tcGxldGUoY2FsbCk7XG4gXHR3YWtlX3VwKFx1MDAyNmNhbGwtXHUwMDNld2FpdHEpO1xuLVx0cnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcbitcdF9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9vYmplY3QuYyBiL25ldC9yeHJwYy9jb25uX29iamVjdC5jXG5pbmRleCAwZWNlNzE3ZGIwZjg1Li4xYmU1MGUwYzljZWU1IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcbisrKyBiL25ldC9yeHJwYy9jb25uX29iamVjdC5jXG5AQCAtMzQsNyArMzQsMTAgQEAgdm9pZCByeHJwY19wb2tlX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sIGVudW0gcnhycGNfY29ubl90cmFjZSB3aHkpXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZWxvY2spO1xuIFx0YnVzeSA9ICFsaXN0X2VtcHR5KFx1MDAyNmNvbm4tXHUwMDNlYXR0ZW5kX2xpbmspO1xuIFx0aWYgKCFidXN5KSB7XG4tXHRcdHJ4cnBjX2dldF9jb25uZWN0aW9uKGNvbm4sIHdoeSk7XG4rXHRcdGlmICghcnhycGNfZ2V0X2Nvbm5lY3Rpb25fbWF5YmUoY29ubiwgd2h5KSkge1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZsb2NhbC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZjb25uLVx1MDAzZWF0dGVuZF9saW5rLCBcdTAwMjZsb2NhbC1cdTAwM2Vjb25uX2F0dGVuZF9xKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZsb2NhbC1cdTAwM2Vsb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmNcbmluZGV4IGEwYWE3OGQ4OTI4OTcuLjMwZDZkYjA1MmMyMTYgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMva2V5LmNcbisrKyBiL25ldC9yeHJwYy9rZXkuY1xuQEAgLTE3Miw2ICsxNzIsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhnayhzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwLFxuIFx0Y29uc3QgX19iZTMyICp0aWNrZXQsICprZXk7XG4gXHRzNjQgdG1wO1xuIFx0c2l6ZV90IHJhd19rZXlsZW4sIHJhd190a3RsZW4sIGtleWxlbiwgdGt0bGVuO1xuK1x0aW50IHJldCA9IC1FS0VZUkVKRUNURUQ7XG4gXG4gXHRfZW50ZXIoXCIseyV4LCV4LCV4LCV4fSwleFwiLFxuIFx0ICAgICAgIG50b2hsKHhkclswXSksIG50b2hsKHhkclsxXSksIG50b2hsKHhkclsyXSksIG50b2hsKHhkclszXSksXG5AQCAtMjI5LDYgKzIzMCwxMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhnayhzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwLFxuIFx0dG9rZW4tXHUwMDNlcnhnay1cdTAwM2VrZXkuZGF0YVx0PSB0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZV9rZXk7XG4gXHR0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZXRpY2tldC5sZW4gPSByYXdfdGt0bGVuO1xuIFxuK1x0aWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodG9rZW4tXHUwMDNlcnhnay1cdTAwM2VlbmN0eXBlKSkge1xuK1x0XHRyZXQgPSAtRU5PUEtHO1xuK1x0XHRnb3RvIHJlamVjdF90b2tlbjtcbitcdH1cbitcbiBcdGlmICh0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWVuZHRpbWUgIT0gMCkge1xuIFx0XHRleHBpcnkgPSByeHJwY19zNjRfdG9fdGltZTY0KHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNlZW5kdGltZSk7XG4gXHRcdGlmIChleHBpcnkgXHUwMDNjIDApXG5AQCAtMjgwLDcgKzI4Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG4gXHRrZnJlZSh0b2tlbi1cdTAwM2VyeGdrKTtcbiBcdGtmcmVlKHRva2VuKTtcbiByZWplY3Q6XG4tXHRyZXR1cm4gLUVLRVlSRUpFQ1RFRDtcbitcdHJldHVybiByZXQ7XG4gZXhwaXJlZDpcbiBcdGtmcmVlKHRva2VuLVx1MDAzZXJ4Z2spO1xuIFx0a2ZyZWUodG9rZW4pO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5pbmRleCBlZmNiYTRiMmU3NGYwLi4yOGIyMTQ4YjU2OTM2IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3JlY3Ztc2cuY1xuKysrIGIvbmV0L3J4cnBjL3JlY3Ztc2cuY1xuQEAgLTE3LDEzICsxNywxMiBAQFxuICNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4gXG4gLypcbi0gKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuICBGdXJ0aGVyXG4tICogbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHJlY3Ztc2dfbGluayBvbiBhIGR1bW15IHF1ZXVlLlxuKyAqIFJlcXVldWUgYSBjYWxsIGZvciByZWN2bXNnKCkgdG8gcGljayB1cC5cbiAgKi9cbi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4rc3RhdGljIHZvaWQgcnhycGNfcmVxdWV1ZV9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIHtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdHN0cnVjdCBzb2NrICpzaztcbitcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4gXG4gXHRfZW50ZXIoXCIlZFwiLCBjYWxsLVx1MDAzZWRlYnVnX2lkKTtcbiBcbkBAIC0zMiwzMSArMzEsMTggQEAgdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVx1MDAzZXNvY2tldCk7XG4tXHRzayA9IFx1MDAyNnJ4LVx1MDAzZXNrO1xuLVx0aWYgKHJ4IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSBcdTAwM2MgUlhSUENfQ0xPU0UpIHtcbi1cdFx0aWYgKGNhbGwtXHUwMDNlbm90aWZ5X3J4KSB7XG4tXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrKTtcbi1cdFx0XHRjYWxsLVx1MDAzZW5vdGlmeV9yeChzaywgY2FsbCwgY2FsbC1cdTAwM2V1c2VyX2NhbGxfSUQpO1xuLVx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4tXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmspKSB7XG4tXHRcdFx0XHRyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4tXHRcdFx0fVxuLVx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuK1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmspKSB7XG4rXHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4gXG4tXHRcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcbi1cdFx0XHRcdF9kZWJ1ZyhcImNhbGwgJXBzXCIsIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuLVx0XHRcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4tXHRcdFx0fVxuLVx0XHR9XG4rXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuK1x0XHRfZGVidWcoXCJjYWxsICVwc1wiLCBzay1cdTAwM2Vza19kYXRhX3JlYWR5KTtcbitcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4gXHR9XG4gXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdF9sZWF2ZShcIlwiKTtcbiB9XG4gXG5AQCAtNTYxLDcgKzU0Nyw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBNU0dfUEVFSykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfcXVldWUpKVxuLVx0XHRyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuK1x0XHRyeHJwY19yZXF1ZXVlX2NhbGwoc29jaywgY2FsbCk7XG4gXHRnb3RvIG5vdF95ZXRfY29tcGxldGU7XG4gXG4gY2FsbF9mYWlsZWQ6XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcbmluZGV4IDc3YTY3YWNlMWQyNDguLmI0OTIyMWY1N2Y2NzcgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcnhnay5jXG4rKysgYi9uZXQvcnhycGMvcnhnay5jXG5AQCAtMjUxLDggKzI1MSwxMCBAQCBzdGF0aWMgaW50IHJ4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0XHRcdFx0XHQgR0ZQX05PRlMpO1xuIFx0aWYgKElTX0VSUihnaykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGdrKTtcbitcdHdyaXRlX2xvY2soXHUwMDI2Y29ubi1cdTAwM2VzZWN1cml0eV91c2VfbG9jayk7XG4gXHRjb25uLVx1MDAzZXJ4Z2suZW5jdHlwZSA9IGdrLVx1MDAzZWtyYjUtXHUwMDNlZXR5cGU7XG4gXHRjb25uLVx1MDAzZXJ4Z2sua2V5c1tnay1cdTAwM2VrZXlfbnVtYmVyIFx1MDAyNiAzXSA9IGdrO1xuK1x0d3JpdGVfdW5sb2NrKFx1MDAyNmNvbm4tXHUwMDNlc2VjdXJpdHlfdXNlX2xvY2spO1xuIFxuIFx0c3dpdGNoIChjb25uLVx1MDAzZXNlY3VyaXR5X2xldmVsKSB7XG4gXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1BMQUlOOlxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeHBlcmYuYyBiL25ldC9yeHJwYy9yeHBlcmYuY1xuaW5kZXggYjhkZjZkMjIzMTRkNi4uZWJkNTQyMjJjNjRlZiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeHBlcmYuY1xuKysrIGIvbmV0L3J4cnBjL3J4cGVyZi5jXG5AQCAtNTM4LDE1ICs1MzgsMTggQEAgc3RhdGljIGludCByeHBlcmZfcHJvY2Vzc19jYWxsKHN0cnVjdCByeHBlcmZfY2FsbCAqY2FsbClcbiBcdGlvdlswXS5pb3ZfbGVuXHQ9IGxlbjtcbiBcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBXUklURSwgaW92LCAxLCBsZW4pO1xuIFx0bXNnLm1zZ19mbGFncyA9IDA7XG4tXHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShyeHBlcmZfc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCBsZW4sXG4tXHRcdFx0XHQgICByeHBlcmZfbm90aWZ5X2VuZF9yZXBseV90eCk7XG4rXHRkbyB7XG4rXHRcdG4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZtc2csIG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSxcbitcdFx0XHRcdFx0ICAgcnhwZXJmX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuK1x0fSB3aGlsZSAobiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMCk7XG4rXG4gXHRpZiAobiBcdTAwM2U9IDApXG4gXHRcdHJldHVybiAwOyAvKiBTdWNjZXNzICovXG4gXG4tXHRpZiAobiA9PSAtRU5PTUVNKVxuLVx0XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChyeHBlcmZfc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbi1cdFx0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgLUVOT01FTSxcbi1cdFx0XHRcdFx0cnhwZXJmX2Fib3J0X29vbSk7XG4rXHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChyeHBlcmZfc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbitcdFx0XHRcdFJYR0VOX1NTX01BUlNIQUwsIG4sXG4rXHRcdFx0XHRyeHBlcmZfYWJvcnRfc2VuZF9lcnJvcik7XG4gXHRyZXR1cm4gbjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3NlbmRtc2cuYyBiL25ldC9yeHJwYy9zZW5kbXNnLmNcbmluZGV4IGVkMmM5YTUxMDA1YWQuLjhiYjMyN2RjMjgzM2UgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvc2VuZG1zZy5jXG4rKysgYi9uZXQvcnhycGMvc2VuZG1zZy5jXG5AQCAtMzIwLDggKzMyMCw4IEBAIHN0YXRpYyBpbnQgcnhycGNfYWxsb2NfdHhxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHQgICBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsXG4tXHRcdFx0ICAgYm9vbCAqX2Ryb3BwZWRfbG9jaylcbitcdFx0XHQgICByeHJwY19ub3RpZnlfZW5kX3R4X3Qgbm90aWZ5X2VuZF90eClcbitcdF9fcmVsZWFzZXMoXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KVxuIHtcbiBcdHN0cnVjdCByeHJwY190eGJ1ZiAqdHhiO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG5AQCAtMzMwLDI5ICszMzAsMzcgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0Ym9vbCBtb3JlID0gbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX01PUkU7XG4gXHRpbnQgcmV0LCBjb3BpZWQgPSAwO1xuIFxuLVx0aWYgKHRlc3RfYml0KFJYUlBDX0NBTExfVFhfTk9fTU9SRSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpIHtcbi1cdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXG4tXHRcdFx0XHQgIGNhbGwtXHUwMDNlY2lkLCBjYWxsLVx1MDAzZWNhbGxfaWQsIGNhbGwtXHUwMDNlcnhfY29uc3VtZWQsXG4tXHRcdFx0XHQgIDAsIC1FUFJPVE8pO1xuLVx0XHRyZXR1cm4gLUVQUk9UTztcbi1cdH1cbi1cbiBcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcbiBcdHJldCA9IHJ4cnBjX3dhaXRfdG9fYmVfY29ubmVjdGVkKGNhbGwsIFx1MDAyNnRpbWVvKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGlmIChjYWxsLVx1MDAzZWNvbm4tXHUwMDNlc3RhdGUgPT0gUlhSUENfQ09OTl9DTElFTlRfVU5TRUNVUkVEKSB7XG4gXHRcdHJldCA9IHJ4cnBjX2luaXRfY2xpZW50X2Nvbm5fc2VjdXJpdHkoY2FsbC1cdTAwM2Vjb25uKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbiBcdC8qIHRoaXMgc2hvdWxkIGJlIGluIHBvbGwgKi9cbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spO1xuIFxuIHJlbG9hZDpcbitcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpKSkge1xuK1x0XHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVx1MDAzZWRlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcbitcdFx0XHRcdCAgY2FsbC1cdTAwM2VjaWQsIGNhbGwtXHUwMDNlY2FsbF9pZCwgY2FsbC1cdTAwM2VyeF9jb25zdW1lZCxcbitcdFx0XHRcdCAgMCwgLUVQUk9UTyk7XG4rXHRcdHJldCA9IC1FUFJPVE87XG4rXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHR9XG4rXHRpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpKSB7XG4rXHRcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXG4rXHRcdFx0XHQgIGNhbGwtXHUwMDNlY2lkLCBjYWxsLVx1MDAzZWNhbGxfaWQsIGNhbGwtXHUwMDNlcnhfY29uc3VtZWQsXG4rXHRcdFx0XHQgIDAsIC1FSU8pO1xuK1x0XHRyZXQgPSAtRUlPO1xuK1x0XHRnb3RvIG1heWJlX2Vycm9yO1xuK1x0fVxuK1xuIFx0dHhiID0gY2FsbC1cdTAwM2V0eF9wZW5kaW5nO1xuIFx0Y2FsbC1cdTAwM2V0eF9wZW5kaW5nID0gTlVMTDtcbiBcdGlmICh0eGIpXG5AQCAtMzc5LDkgKzM4Nyw5IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcbiBcdHJldCA9IC1FTVNHU0laRTtcbiBcdGlmIChjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSkge1xuLVx0XHRpZiAobGVuIC0gY29waWVkIFx1MDAzZSBjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbilcbitcdFx0aWYgKGxlbiBcdTAwM2UgY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4gXHRcdFx0Z290byBtYXliZV9lcnJvcjtcbi1cdFx0aWYgKCFtb3JlIFx1MDAyNlx1MDAyNiBsZW4gLSBjb3BpZWQgIT0gY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4rXHRcdGlmICghbW9yZSBcdTAwMjZcdTAwMjYgbGVuICE9IGNhbGwtXHUwMDNldHhfdG90YWxfbGVuKVxuIFx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4gXHR9XG4gXG5AQCAtNDA1LDcgKzQxMyw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHQgKiB0aGUgc2VjdXJpdHkgaGVhZGVyIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBwYWRkZWRcbiBcdFx0XHQgKiByZWdpb24gKGVuYyBibG9ja3NpemUpLCBidXQgdGhlIHRyYWlsZXIgaXMgbm90LlxuIFx0XHRcdCAqL1xuLVx0XHRcdHJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbXNnX2RhdGFfbGVmdChtc2cpO1xuK1x0XHRcdHJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbGVuO1xuIFx0XHRcdHR4YiA9IGNhbGwtXHUwMDNlY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VhbGxvY190eGJ1ZihjYWxsLCByZW1haW4sIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24pO1xuIFx0XHRcdGlmICghdHhiKSB7XG4gXHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuQEAgLTQxNiw4ICs0MjQsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRcdF9kZWJ1ZyhcImFwcGVuZFwiKTtcbiBcbiBcdFx0LyogYXBwZW5kIG5leHQgc2VnbWVudCBvZiBkYXRhIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciAqL1xuLVx0XHRpZiAobXNnX2RhdGFfbGVmdChtc2cpIFx1MDAzZSAwKSB7XG4tXHRcdFx0c2l6ZV90IGNvcHkgPSB1bWluKHR4Yi1cdTAwM2VzcGFjZSwgbXNnX2RhdGFfbGVmdChtc2cpKTtcbitcdFx0aWYgKGxlbiBcdTAwM2UgMCkge1xuK1x0XHRcdHNpemVfdCBjb3B5ID0gbWluMyh0eGItXHUwMDNlc3BhY2UsIGxlbiwgbXNnX2RhdGFfbGVmdChtc2cpKTtcbiBcbiBcdFx0XHRfZGVidWcoXCJhZGQgJXp1XCIsIGNvcHkpO1xuIFx0XHRcdGlmICghY29weV9mcm9tX2l0ZXJfZnVsbCh0eGItXHUwMDNlZGF0YSArIHR4Yi1cdTAwM2VvZmZzZXQsXG5AQCAtNDI4LDYgKzQzNiw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHR0eGItXHUwMDNlbGVuICs9IGNvcHk7XG4gXHRcdFx0dHhiLVx1MDAzZW9mZnNldCArPSBjb3B5O1xuIFx0XHRcdGNvcGllZCArPSBjb3B5O1xuK1x0XHRcdGxlbiAtPSBjb3B5O1xuIFx0XHRcdGlmIChjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSlcbiBcdFx0XHRcdGNhbGwtXHUwMDNldHhfdG90YWxfbGVuIC09IGNvcHk7XG4gXHRcdH1cbkBAIC00MzksNjIgKzQ0OCwxMDAgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFxuIFx0XHQvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCdzIG5vdyBmdWxsICovXG4gXHRcdGlmICghdHhiLVx1MDAzZXNwYWNlIHx8XG4tXHRcdCAgICAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKSkge1xuLVx0XHRcdGlmIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCBcdTAwMjZcdTAwMjYgIW1vcmUpXG4tXHRcdFx0XHR0eGItXHUwMDNlZmxhZ3MgfD0gUlhSUENfTEFTVF9QQUNLRVQ7XG4tXG4rXHRcdCAgICAobGVuID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKSkge1xuK1x0XHRcdC8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZFxuK1x0XHRcdCAqIGhhdmUgY29ycnVwdGVkIHRoZSB0eGJ1ZiBjb250ZW50IHdpdGggYSBwYXJ0aWFsXG4rXHRcdFx0ICogZW5jcnlwdC4gIEFzc3VtZSB0aGF0IEVOT01FTSBpcyByZXRyeWFibGUsIGJ1dFxuK1x0XHRcdCAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC5cbitcdFx0XHQgKi9cbiBcdFx0XHRyZXQgPSBjYWxsLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXNlY3VyZV9wYWNrZXQoY2FsbCwgdHhiKTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdFx0LyogQXNzdW1lIHRoYXQgRU5PTUVNIGhlcmUgbWVhbnMgdGhhdCB0aGVcbitcdFx0XHRcdCAqIGVuY3J5cHRpb24gaGFzbid0IGhhcHBlbmVkIHlldC4gIFRoZSBkYXRhIGlzXG4rXHRcdFx0XHQgKiBhbGlnbmVkIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBzbG93IGJ1ZmZlcmluZ1xuK1x0XHRcdFx0ICogaW4gdGhlIGNyeXB0byB3YWxrLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRpZiAocmV0ID09IC1FTk9NRU0pXG4rXHRcdFx0XHRcdGdvdG8gbWF5YmVfZXJyb3JfcmV3aW5kO1xuK1x0XHRcdFx0c2V0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKTtcbitcdFx0XHRcdGdvdG8gb3V0X3R4YjtcbitcdFx0XHR9XG4rXG4rXHRcdFx0aWYgKGxlbiA9PSAwIFx1MDAyNlx1MDAyNiAhbW9yZSlcbitcdFx0XHRcdHR4Yi1cdTAwM2VmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDtcbiBcdFx0XHRyeHJwY19xdWV1ZV9wYWNrZXQocngsIGNhbGwsIHR4Yiwgbm90aWZ5X2VuZF90eCk7XG4gXHRcdFx0dHhiID0gTlVMTDtcbiBcdFx0fVxuLVx0fSB3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpIFx1MDAzZSAwKTtcbitcdH0gd2hpbGUgKGxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbXNnX2RhdGFfbGVmdChtc2cpIFx1MDAzZSAwKTtcbiBcbiBzdWNjZXNzOlxuIFx0cmV0ID0gY29waWVkO1xuLVx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgY2FsbC1cdTAwM2VlcnJvciBcdTAwM2MgMClcbi1cdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbi1vdXQ6XG4rb3V0X3R4YjpcbiBcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gXHRfbGVhdmUoXCIgPSAlZFwiLCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiBcbiBjYWxsX3Rlcm1pbmF0ZWQ6XG4gXHRyeHJwY19wdXRfdHhidWYodHhiLCByeHJwY190eGJ1Zl9wdXRfc2VuZF9hYm9ydGVkKTtcbi1cdF9sZWF2ZShcIiA9ICVkXCIsIGNhbGwtXHUwMDNlZXJyb3IpO1xuLVx0cmV0dXJuIGNhbGwtXHUwMDNlZXJyb3I7XG4tXG4rXHRjYWxsLVx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xuK1x0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbitcdGdvdG8gb3V0X3VubG9jaztcbitcbittYXliZV9lcnJvcl9yZXdpbmQ6XG4rXHQvKiBJZiB3ZSBnb3QgYSByZXRyeWFibGUgZXJyb3IgYWZ0ZXIgY29weWluZyBhbGwgdGhlIHN1cHBsaWVkIGRhdGEgaW50b1xuK1x0ICogdGhlIGxhc3QgcGFja2V0LCB3ZSBuZWVkIHRvIHJld2luZCBhcyBtdWNoIGFzIHdlIGNhbiBzbyB0aGUgY2FsbGVyXG4rXHQgKiBrbm93cyB0aGV5IG5lZWQgdG8gcmV0cnkgdGhlIHNlbmRtc2cuXG4rXHQgKi9cbitcdGlmIChjb3BpZWQgXHUwMDI2XHUwMDI2ICFtb3JlIFx1MDAyNlx1MDAyNiAhbGVuKSB7XG4rXHRcdHVuc2lnbmVkIGludCByZXdpbmRfYnkgPSB1bWluKGNvcGllZCwgdHhiLVx1MDAzZWxlbik7XG4rXG4rXHRcdHR4Yi1cdTAwM2VzcGFjZSAgKz0gcmV3aW5kX2J5O1xuK1x0XHR0eGItXHUwMDNlbGVuICAgIC09IHJld2luZF9ieTtcbitcdFx0dHhiLVx1MDAzZW9mZnNldCAtPSByZXdpbmRfYnk7XG4rXHRcdGNvcGllZCAgICAgIC09IHJld2luZF9ieTtcbitcdFx0aWYgKGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxuK1x0XHRcdGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICs9IHJld2luZF9ieTtcbitcdFx0aW92X2l0ZXJfcmV2ZXJ0KFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgcmV3aW5kX2J5KTtcbitcdH1cbiBtYXliZV9lcnJvcjpcbi1cdGlmIChjb3BpZWQpXG4rXHRpZiAoY29waWVkKSB7XG4rXHRcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY2FsbC1cdTAwM2VlcnJvciBcdTAwM2MgMCkge1xuK1x0XHRcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4rXHRcdFx0Z290byBvdXRfdHhiO1xuK1x0XHR9XG4gXHRcdGdvdG8gc3VjY2Vzcztcbi1cdGdvdG8gb3V0O1xuK1x0fVxuK1x0Z290byBvdXRfdHhiO1xuIFxuIGVmYXVsdDpcbiBcdHJldCA9IC1FRkFVTFQ7XG4tXHRnb3RvIG91dDtcbitcdGdvdG8gb3V0X3R4YjtcbiBcbiB3YWl0X2Zvcl9zcGFjZTpcbiBcdHJldCA9IC1FQUdBSU47XG4gXHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKVxuIFx0XHRnb3RvIG1heWJlX2Vycm9yO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4tXHQqX2Ryb3BwZWRfbG9jayA9IHRydWU7XG4rXG4gXHRyZXQgPSByeHJwY193YWl0X2Zvcl90eF93aW5kb3cocngsIGNhbGwsIFx1MDAyNnRpbWVvLFxuIFx0XHRcdFx0ICAgICAgIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHRcdGdvdG8gb3V0X25vbG9jaztcbiBcdGlmIChjYWxsLVx1MDAzZWludGVycnVwdGliaWxpdHkgPT0gUlhSUENfSU5URVJSVVBUSUJMRSkge1xuIFx0XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCkgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuLVx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHRcdFx0Z290byBvdXRfbm9sb2NrO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHRtdXRleF9sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gXHR9XG4tXHQqX2Ryb3BwZWRfbG9jayA9IGZhbHNlO1xuIFx0Z290byByZWxvYWQ7XG4rb3V0X25vbG9jazpcbitcdF9sZWF2ZShcIiA9ICVkIFtpbnRyXVwiLCByZXQpO1xuK1x0cmV0dXJuIGNvcGllZCA/OiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtNjYwLDcgKzcwNyw2IEBAIHJ4cnBjX25ld19jbGllbnRfY2FsbF9mb3Jfc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbDtcbi1cdGJvb2wgZHJvcHBlZF9sb2NrID0gZmFsc2U7XG4gXHRpbnQgcmV0O1xuIFxuIFx0c3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zIHAgPSB7XG5AQCAtNzY5LDE2ICs4MTUsMTUgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHRcdHJldCA9IDA7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBSWFJQQ19DTURfU0VORF9EQVRBOlxuLVx0XHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMLCBcdTAwMjZkcm9wcGVkX2xvY2spO1xuLVx0XHRicmVhaztcbitcdFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCk7XG4rXHRcdGdvdG8gZXJyb3JfcHV0O1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4gb3V0X3B1dF91bmxvY2s6XG4tXHRpZiAoIWRyb3BwZWRfbG9jaylcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBlcnJvcl9wdXQ6XG4gXHRyeHJwY19wdXRfY2FsbChjYWxsLCByeHJwY19jYWxsX3B1dF9zZW5kbXNnKTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG5AQCAtODAwLDE1ICs4NDUsMjEgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gICogQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byBzZW5kIGRhdGEgb24gYSBjYWxsLiAgVGhlIGNhbGwgbXVzdCBiZSBpbiBhbiBzdGF0ZVxuICAqIGFwcHJvcHJpYXRlIHRvIHNlbmRpbmcgZGF0YS4gIE5vIGNvbnRyb2wgZGF0YSBzaG91bGQgYmUgc3VwcGxpZWQgaW4gQG1zZyxcbiAgKiBub3Igc2hvdWxkIGFuIGFkZHJlc3MgYmUgc3VwcGxpZWQuICBNU0dfTU9SRSBzaG91bGQgYmUgZmxhZ2dlZCBpZiB0aGVyZSdzXG4tICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZS5cbisgKiBtb3JlIGRhdGEgdG8gY29tZSwgb3RoZXJ3aXNlIHRoaXMgZGF0YSB3aWxsIGVuZCB0aGUgdHJhbnNtaXNzaW9uIHBoYXNlIGlmXG4rICogYWxsIHRoZSBkYXRhIGlzIGJ1ZmZlcmVkLlxuKyAqXG4rICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBhIHNob3J0IHNlbmQsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJlXG4rICogY2FsbGVkIGFnYWluIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBkYXRhIG9yIHRvIHBpY2sgdXAgYW4gZXJyb3IgdGhhdFxuKyAqIGNhdXNlZCB0aGUgc2hvcnQgc2VuZC5cbiAgKlxuLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgYnl0ZXMgYnVmZmVyZWQgKGNvdWxkIGJlICUwIGlmIEBsZW4gaXMgMCBvclxuKyAqIG1zZ19pdGVyIGhvbGRzIDAgYnl0ZXMpIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqIG90aGVyd2lzZS5cbiAgKi9cbiBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpXG4ge1xuLVx0Ym9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTtcbiBcdGludCByZXQ7XG4gXG4gXHRfZW50ZXIoXCJ7JWR9LFwiLCBjYWxsLVx1MDAzZWRlYnVnX2lkKTtcbkBAIC04MTksMTIgKzg3MCwxMCBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdG11dGV4X2xvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcbiBcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLVx1MDAzZXNrKSwgY2FsbCwgbXNnLCBsZW4sXG4tXHRcdFx0ICAgICAgbm90aWZ5X2VuZF90eCwgXHUwMDI2ZHJvcHBlZF9sb2NrKTtcbitcdFx0XHQgICAgICBub3RpZnlfZW5kX3R4KTtcbiBcdGlmIChyZXQgPT0gLUVTSFVURE9XTilcbiBcdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbiBcbi1cdGlmICghZHJvcHBlZF9sb2NrKVxuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjUwOjA4LjA0MTI2MTI4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjk2OTAxNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGRvd24gZWFjaCBjaGFuZ2Ugc3lzdGVtYXRpY2FsbHkgYW5kIHNjcnV0aW5pemUgaXQgZm9yIHBvdGVudGlhbCBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIHJpc2tzLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2g7IHNsb3BweSBhbmFseXNpcyBoZXJlIGNvdWxkIGxlYWQgdG8gaGFyZC10by1kZWJ1ZyBpc3N1ZXMuXG5cbkZpcnN0LCBJJ2xsIGdvIHRocm91Z2ggdGhlIHBhdGNoIGZpbGUgYnkgZmlsZSwgbm90aW5nIHRoZSBjaGFuZ2VzLiBTbywgaXQgbG9va3MgbGlrZTpcblxuMS4gIERvY3VtZW50YXRpb24gZ290IGFuIHVwZGF0ZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgLiBUaGF0J3MgbW9zdGx5IGNvc21ldGljLCBidXQgSSdsbCBtYWtlIGEgbm90ZSBqdXN0IGluIGNhc2UgZG9jdW1lbnRhdGlvbiBpcyBjcml0aWNhbC5cbjIuICBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIGluIGBmcy9hZnMvY21fc2VjdXJpdHkuY2AgaGFzIGEgZml4ZWQtc2l6ZSBjYWxjdWxhdGlvbiBmb3IgYHRva3NpemVgLiBPa2F5LCB0aGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGNhbGN1bGF0aW9uIGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLiBUaGUgY2hhbmdlIHRvIGFkZCA0IGJ5dGVzIGNvdWxkIGJlIHNpZ25pZmljYW50LlxuMy4gIFNvbWUgcmVmYWN0b3Jpbmcgd2l0aCBgYWZzX21ha2Vfb3BfY2FsbGAgYW5kIHNlcnZlciBoYW5kbGluZyBpbiBgZnMvYWZzL2ludGVybmFsLmhgLiBNb3ZpbmcgdGhhdCBhbmQgYWRkaW5nIGEgc2VydmVyIHVzZSBpcyBhIGRlZmluaXRlIGFyZWEgdG8gc2NydXRpbml6ZSBmb3IgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cbjQuICBUaGVyZSdzIGEgbG9vcCB1c2luZyBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAgaW4gYGZzL2Fmcy9yeHJwYy5jYCwgc28gaXQgd2lsbCBub3cga2VlcCBsb29waW5nIHVudGlsIGFsbCBkYXRhIGlzIHNlbnQuIEkgd2lsbCBuZWVkIHRvIGVuc3VyZSB0aGUgbG9vcCBjb25kaXRpb25zIGFuZCBkYXRhIGhhbmRsaW5nIGFyZSByb2J1c3QgYW5kIHRoYXQgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFydGlhbCB3cml0ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZHVyaW5nIHRoZSBpdGVyYXRpdmUgcHJvY2Vzcy5cbjUuICBBZGRlZCBzb21lIHRyYWNlIGV2ZW50cyBmb3IgQUZTIGFuZCBSeFJQQywgd2hpY2ggd29uJ3QgcG9zZSBLTVNBTiByaXNrcyBkaXJlY3RseS4gQnV0LCBhbnkgZXh0cmEgdHJhY2UgZXZlbnQgc2hvdWxkIHN0aWxsIGJlIGNoZWNrZWQgaW4gY29udGV4dCBvZiBvdGhlciBjaGFuZ2VzLlxuNi4gIFNvbWUgaW50ZXJuYWwgUnhSUEMgZnVuY3Rpb25zLCBsaWtlIGBfX3J4cnBjX25vdGlmeV9zb2NrZXRgIGFuZCBgcnhycGNfbm90aWZ5X3NvY2tldGAsIGFyZSBzZXBhcmF0ZWQuIEludGVybmFsIHJlZmFjdG9yaW5nIGNhbiBiZSBkYW5nZXJvdXMgaWYgbm90IGRvbmUgY29ycmVjdGx5LCBzbyBJJ2xsIG5lZWQgdG8gZXhhbWluZSBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGNhbGxpbmcgY29udGV4dHMuXG43LiAgQSBuZXcgZnVuY3Rpb24gYHJ4cnBjX2dldF9jb25uZWN0aW9uX21heWJlYCBpcyBhZGRlZDsgSSdsbCBjaGVjayBpdHMgdXNhZ2UgYW5kIGluaXRpYWxpemF0aW9uLlxuOC4gIFRoZXJlJ3MgYSBjaGVjayBmb3IgYGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZWAgaW4gUnhSUEMga2V5IGhhbmRsaW5nLiBTZWN1cml0eS1yZWxhdGVkIGNoYW5nZXMgYXJlIGFsd2F5cyB3b3J0aCBleHRyYSBzY3J1dGlueS5cbjkuICBgcnhycGNfcmVxdWV1ZV9jYWxsYCByZXBsYWNlcyBgcnhycGNfbm90aWZ5X3NvY2tldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgaWYgaXQgaW1wYWN0cyBhbnkgZGF0YSBmbG93IG9yIGVycm9yIGhhbmRsaW5nLlxuMTAuIExvY2tpbmcgYWRkZWQgaW4gYHJ4Z2suY2Ag4oCTIGxvY2tpbmcgaXMgYWx3YXlzIGdvb2QgYnV0IGNhbiBiZSBwcm9ibGVtYXRpYy4gSSBuZWVkIHRvIGVuc3VyZSBpdCdzIGNvcnJlY3QgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucy5cbjExLiBSeFBlcmYgYWxzbyBsb29wcyBvbiBkYXRhIHNlbmQ7IHNhbWUgY29uc2lkZXJhdGlvbnMgYXMgYWJvdmUuXG4xMi4gIFNpZ25pZmljYW50IGNoYW5nZXMgaW4gYG5ldC9yeHJwYy9zZW5kbXNnLmNgOlxuICAgICogICBMb2NraW5nIGhhbmRsaW5nIHdpdGhpbiBgcnhycGNfc2VuZF9kYXRhYCBpcyBjbGVhbmVkIHVwLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSBsb2NrL3VubG9jayBvcGVyYXRpb25zIGFyZSBjb3JyZWN0IGFuZCB0aGF0IHRoaXMgZG9lc24ndCBsZWFkIHRvIGFueSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlxuICAgICogICBTaG9ydCBzZW5kcywgcmV0dXJuaW5nIGJ5dGUgY291bnQg4oCTIGEgY2hhbmdlIGluIGZ1bmN0aW9uIHNlbWFudGljcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGxvb3AgSSBub3RlZCBiZWZvcmUuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBieXRlIGNvdW50IGlzIGNvcnJlY3QgYW5kIHRoYXQgZXJyb3IgaGFuZGxpbmcgaXMgc291bmQuIGBpb3ZfaXRlcl9yZXZlcnRgIGluIGBtYXliZV9lcnJvcl9yZXdpbmRgIG5lZWRzIGEgaGFyZCBsb29rLlxuICAgICogICBUaGUgc2lnbmF0dXJlIGFuZCBzZW1hbnRpY3Mgb2YgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIGhhdmUgYmVlbiBtb2RpZmllZCwgd2l0aCBhIHJldHVybiB2YWx1ZSBjaGFuZ2UuIFRoZSBjYWxsZXJzIG5vdyBsb29wLiBUaGlzIGlzIGNyaXRpY2FsLCBhcyB0aGlzIGFsdGVycyBkYXRhIGZsb3csIGFuZCBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIG5ldyB1c2FnZSB0aHJvdWdob3V0IHRoZSBrZXJuZWwgdG8gY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIHB1dCBvbiBteSBLTVNBTiBoYXQuIEknbGwgbmVlZCB0byBhbnN3ZXIgYSBzZXJpZXMgb2YgcXVlc3Rpb25zIGFzIEkgc2NydXRpbml6ZSBlYWNoIGZpbGU6XG5cbjEuICAqKkRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8qKiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGluc3RhbmNlcyBvZiBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiBJJ2xsIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGRhdGEgYmVpbmcgc2VudCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgemVyb2VkIG91dC5cbjIuICAqKkRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGNoZWNrIGFueSBgaWZgIHN0YXRlbWVudHMgb3Igb3RoZXIgY29uZGl0aW9uYWwgc3RydWN0dXJlcyB0byBlbnN1cmUgdGhhdCB0aGUgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGNvbmRpdGlvbnMgYXJlIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgdGhleSBhcmUgdXNlZC5cbjMuICAqKkRvZXMgdGhpcyBwYXRjaCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHM/KiogSSB3aWxsIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgY2FzZXMgd2hlcmUgbmV3IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZFxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1MDoxNS4zMzgxNjU5NThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL2NtX3NlY3VyaXR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjIwOlxcdFxcdCAqXFx0YWZzX2ludDMyXFx0a2luZDtcXG4gMjIxOlxcdFxcdCAqXFx0b3BhcXVlXFx0XFx0ZGF0YVxcdTAwM2NBVVRIREFUQU1BWFxcdTAwM2U7XFxuIDIyMjpcXHRcXHQgKlxcdG9wYXF1ZVxcdFxcdGRpc3BsYXlcXHUwMDNjQVVUSFBSSU5UQUJMRU1BWFxcdTAwM2U7XFxuIDIyMzpcXHRcXHQgKiB9O1xcbiAyMjQ6XFx0XFx0ICovXFxuIDIyNTpcXHRcXHR1dWlkc2l6ZSA9IHNpemVvZihzZXJ2ZXItXFx1MDAzZXV1aWQpO1xcbiAyMjY6XFx0XFx0YXV0aHNpemUgPSA0ICsgeGRyX2xlbl9vYmplY3QodXVpZHNpemUpICsgeGRyX2xlbl9vYmplY3QoMCk7XFxuIDIyNzpcXHRcXG4gMjI4OlxcdFxcdC8qIHN0cnVjdCBSWEdLX1Rva2VuIHtcXG4gMjI5OlxcdFxcdCAqXFx0cnhna19rZXlcXHRcXHRLMDtcXG4gMjMwOlxcdFxcdCAqXFx0UlhHS19MZXZlbFxcdFxcdGxldmVsO1xcbiAyMzE6XFx0XFx0ICpcXHRyeGdrVGltZVxcdFxcdHN0YXJ0dGltZTtcXG4gMjMyOlxcdFxcdCAqXFx0YWZzX2ludDMyXFx0XFx0bGlmZXRpbWU7XFxuIDIzMzpcXHRcXHQgKlxcdGFmc19pbnQzMlxcdFxcdGJ5dGVsaWZlO1xcbiAyMzQ6XFx0XFx0ICpcXHRyeGdrVGltZVxcdFxcdGV4cGlyYXRpb250aW1lO1xcbiAyMzU6XFx0XFx0ICpcXHRzdHJ1Y3QgUlhHS19BdXRoTmFtZVxcdGlkZW50aXRpZXNcXHUwMDNjXFx1MDAzZTtcXG4gMjM2OlxcdFxcdCAqIH07XFxuIDIzNzpcXHRcXHQgKi9cXG4gMjM4OlxcdFxcdHRva3NpemUgPSBrZXlzaXplICsgNCArIDggKyA0ICsgNCArIDggKyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdG9mZnNldCA9IDA7XFxuIDI0MTpcXHRcXHRlbmNzaXplID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKHRva2VuX2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLCB0b2tzaXplLCBcXHUwMDI2b2Zmc2V0KTtcXG4gMjQyOlxcdFxcbiAyNDM6XFx0XFx0Lyogc3RydWN0IFJYR0tfVG9rZW5Db250YWluZXIge1xcbiAyNDQ6XFx0XFx0ICpcXHRhZnNfaW50MzJcXHRrdm5vO1xcbiAyNDU6XFx0XFx0ICpcXHRhZnNfaW50MzJcXHRlbmN0eXBlO1xcbiAyNDY6XFx0XFx0ICpcXHRvcGFxdWVcXHRcXHRlbmNyeXB0ZWRfdG9rZW5cXHUwMDNjXFx1MDAzZTtcXG4gMjQ3OlxcdFxcdCAqIH07XFxuIDI0ODpcXHRcXHQgKi9cXG4gMjQ5OlxcdFxcdGNvbnRzaXplID0gNCArIDQgKyB4ZHJfbGVuX29iamVjdChlbmNzaXplKTtcXG4gMjUwOlxcdFxcbiAyNTE6XFx0XFx0Lyogc3RydWN0IFlGU0FwcERhdGEge1xcbiAyNTI6XFx0XFx0ICpcXHRvcHJfdXVpZFxcdGluaXRpYXRvclV1aWQ7XFxuIDI1MzpcXHRcXHQgKlxcdG9wcl91dWlkXFx0YWNjZXB0b3JVdWlkO1xcbiAyNTQ6XFx0XFx0ICpcXHRDYXBhYmlsaXRpZXNcXHRjYXBzO1xcbiAyNTU6XFx0XFx0ICpcXHRhZnNfaW50MzJcXHRlbmN0eXBlO1xcbiAyNTY6XFx0XFx0ICpcXHRvcGFxdWVcXHRcXHRjYWxsYmFja0tleVxcdTAwM2NcXHUwMDNlO1xcbiAyNTc6XFx0XFx0ICpcXHRvcGFxdWVcXHRcXHRjYWxsYmFja1Rva2VuXFx1MDAzY1xcdTAwM2U7XFxuIDI1ODpcXHRcXHQgKiB9O1xcbiAyNTk6XFx0XFx0ICovXFxuIDI2MDpcXHRcXHRhZGF0YXNpemUgPSAxNiArIDE2ICtcXG4gMjYxOlxcdFxcdFxcdHhkcl9sZW5fb2JqZWN0KHNpemVvZihjYXBzKSkgK1xcbiAyNjI6XFx0XFx0XFx0NCArXFxuIDI2MzpcXHRcXHRcXHR4ZHJfbGVuX29iamVjdChjb25uX2tyYjUtXFx1MDAzZWtleV9sZW4pICtcXG4gMjY0OlxcdFxcdFxcdHhkcl9sZW5fb2JqZWN0KGNvbnRzaXplKTtcXG4gMjY1OlxcdFxcbiAyNjY6XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMjY3OlxcdFxcdGFwcGRhdGEgPSBremFsbG9jKGFkYXRhc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDI2ODpcXHRcXHRpZiAoIWFwcGRhdGEpXFxuIDI2OTpcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MTUuMzM4MjQwODE4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNzkzMjUwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUb2tlbiBDcmVhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIGZ1bmN0aW9uLiBMb29raW5nIGF0IHRoZSBgUlhHS19Ub2tlbmAgc3RydWN0IGRlZmluaXRpb24sIEkgc2VlIGEgZmV3IHRoaW5ncyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgb3V0LiBJIHJlbWVtYmVyIGZyb20gbXkgcHJpb3IgZXhwZXJpZW5jZSB0aGF0IHRoZSBzdHJ1Y3QgY29tbWVudCBpdHNlbGYgaXMga2V5LiBTcGVjaWZpY2FsbHksIHRoZSBzdHJ1Y3QgaGFzIGBLMGAsIGBsZXZlbGAsIGBzdGFydHRpbWVgLCBgbGlmZXRpbWVgLCBgYnl0ZWxpZmVgLCBgZXhwaXJhdGlvbnRpbWVgLCBhbmQgdGhlbiBgaWRlbnRpdGllc2AsIHdoaWNoIGlzIGEgdmFyaWFibGUtbGVuZ3RoIGFycmF5IGJhc2VkIG9uIGBhdXRoc2l6ZWAuXG5cbkkgc2VlIHRoYXQgdGhlcmUgd2FzIGEgcHJldmlvdXMgZXJyb3IgaW4gY2FsY3VsYXRpbmcgYHRva3NpemVgLiBUaGUgY29tbWVudCBzYXlzIHRoZSBpc3N1ZSB3YXMgdGhhdCB0aGUgc2l6ZSBjYWxjdWxhdGlvbiB3YXMgbWlzc2luZyA0IGJ5dGVzIGZvciB0aGUgYFJYR0tfTGV2ZWwgbGV2ZWxgIGZpZWxkLiBTbywgdGhlIG9sZCBgdG9rc2l6ZWAgYWxsb2NhdGlvbiB3b3VsZCBoYXZlIGJlZW4gaW5zdWZmaWNpZW50LiBUaGUgYWRkaXRpb24gb2YgYCsgNGAgdG8gdGhlIGNhbGN1bGF0aW9uIG5vdyBjb3JyZWN0cyB0aGlzIGJ5IGluY2x1ZGluZyB0aGUgc2l6ZSBvZiBgUlhHS19MZXZlbCBsZXZlbGAsIGVuc3VyaW5nIHdlIGFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlIGVudGlyZSB0b2tlbiBzdHJ1Y3R1cmUuIFRoZSB0b2tlbiBhbGxvY2F0aW9uIHNpemUgc2VlbXMgZ29vZCBub3cuIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlIGB0b2tgIHZhcmlhYmxlLCB3aGljaCBpcyB0aGUgdG9rZW4gaXRzZWxmLCBpcyBhbGxvY2F0ZWQgYW5kIGhvdyBpdHMgZmllbGRzIGFyZSBwb3B1bGF0ZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDA5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MTguNDE3NTY5OTE5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9jbV9zZWN1cml0eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHR4ZHIgPSBhcHBkYXRhO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRtZW1jcHkoeGRyLCBcXHUwMDI2bmV0LVxcdTAwM2V1dWlkLCAxNik7XFx0XFx0LyogYXBwZGF0YS5pbml0aWF0b3JVdWlkICovXFxuIDI3MzpcXHRcXHR4ZHIgKz0gMTYgLyA0O1xcbiAyNzQ6XFx0XFx0bWVtY3B5KHhkciwgXFx1MDAyNnNlcnZlci1cXHUwMDNldXVpZCwgMTYpO1xcdFxcdC8qIGFwcGRhdGEuYWNjZXB0b3JVdWlkICovXFxuIDI3NTpcXHRcXHR4ZHIgKz0gMTYgLyA0O1xcbiAyNzY6XFx0XFx0KnhkcisrID0gaHRvbmwoQVJSQVlfU0laRShjYXBzKSk7XFx0LyogYXBwZGF0YS5jYXBzLmxlbiAqL1xcbiAyNzc6XFx0XFx0bWVtY3B5KHhkciwgXFx1MDAyNmNhcHMsIHNpemVvZihjYXBzKSk7XFx0LyogYXBwZGF0YS5jYXBzICovXFxuIDI3ODpcXHRcXHR4ZHIgKz0gQVJSQVlfU0laRShjYXBzKTtcXG4gMjc5OlxcdFxcdCp4ZHIrKyA9IGh0b25sKGNvbm5fa3JiNS1cXHUwMDNlZXR5cGUpO1xcdC8qIGFwcGRhdGEuZW5jdHlwZSAqL1xcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHQqeGRyKysgPSBodG9ubChjb25uX2tyYjUtXFx1MDAzZWtleV9sZW4pO1xcdC8qIGFwcGRhdGEuY2FsbGJhY2tLZXkubGVuICovXFxuIDI4MjpcXHRcXHRLMCA9IHhkcjtcXG4gMjgzOlxcdFxcdGdldF9yYW5kb21fYnl0ZXMoSzAsIGNvbm5fa3JiNS1cXHUwMDNla2V5X2xlbik7IC8qIGFwcGRhdGEuY2FsbGJhY2tLZXkuZGF0YSAqL1xcbiAyODQ6XFx0XFx0eGRyICs9IHhkcl9yb3VuZF91cChjb25uX2tyYjUtXFx1MDAzZWtleV9sZW4pIC8gNDtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0KnhkcisrID0gaHRvbmwoY29udHNpemUpO1xcdFxcdC8qIGFwcGRhdGEuY2FsbGJhY2tUb2tlbi5sZW4gKi9cXG4gMjg3OlxcdFxcdCp4ZHIrKyA9IGh0b25sKDEpO1xcdFxcdFxcdC8qIGNvbnQua3ZubyAqL1xcbiAyODg6XFx0XFx0KnhkcisrID0gaHRvbmwodG9rZW5fa3JiNS1cXHUwMDNlZXR5cGUpO1xcdC8qIGNvbnQuZW5jdHlwZSAqL1xcbiAyODk6XFx0XFx0KnhkcisrID0gaHRvbmwoZW5jc2l6ZSk7XFx0XFx0LyogY29udC5lbmNyeXB0ZWRfdG9rZW4ubGVuICovXFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdGVuY2Jhc2UgPSB4ZHI7XFxuIDI5MjpcXHRcXHR4ZHIgKz0gb2Zmc2V0IC8gNDtcXG4gMjkzOlxcdFxcdCp4ZHIrKyA9IGh0b25sKGNvbm5fa3JiNS1cXHUwMDNlZXR5cGUpO1xcdC8qIHRva2VuLkswLmVuY3R5cGUgKi9cXG4gMjk0OlxcdFxcdCp4ZHIrKyA9IGh0b25sKGNvbm5fa3JiNS1cXHUwMDNla2V5X2xlbik7XFx0LyogdG9rZW4uSzAua2V5LmxlbiAqL1xcbiAyOTU6XFx0XFx0bWVtY3B5KHhkciwgSzAsIGNvbm5fa3JiNS1cXHUwMDNla2V5X2xlbik7XFx0LyogdG9rZW4uSzAua2V5LmRhdGEgKi9cXG4gMjk2OlxcdFxcdHhkciArPSB4ZHJfcm91bmRfdXAoY29ubl9rcmI1LVxcdTAwM2VrZXlfbGVuKSAvIDQ7XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdCp4ZHIrKyA9IGh0b25sKFJYUlBDX1NFQ1VSSVRZX0VOQ1JZUFQpO1xcdC8qIHRva2VuLmxldmVsICovXFxuIDI5OTpcXHRcXHQqeGRyKysgPSBodG9ubCgwKTtcXHRcXHRcXHQvKiB0b2tlbi5zdGFydHRpbWUgKi9cXG4gMzAwOlxcdFxcdCp4ZHIrKyA9IGh0b25sKDApO1xcdFxcdFxcdC8qIFxcXCIgKi9cXG4gMzAxOlxcdFxcdCp4ZHIrKyA9IGh0b25sKDApO1xcdFxcdFxcdC8qIHRva2VuLmxpZmV0aW1lICovXFxuIDMwMjpcXHRcXHQqeGRyKysgPSBodG9ubCgwKTtcXHRcXHRcXHQvKiB0b2tlbi5ieXRlbGlmZSAqL1xcbiAzMDM6XFx0XFx0KnhkcisrID0gaHRvbmwoMCk7XFx0XFx0XFx0LyogdG9rZW4uZXhwaXJhdGlvbnRpbWUgKi9cXG4gMzA0OlxcdFxcdCp4ZHIrKyA9IGh0b25sKDApO1xcdFxcdFxcdC8qIFxcXCIgKi9cXG4gMzA1OlxcdFxcdCp4ZHIrKyA9IGh0b25sKDEpO1xcdFxcdFxcdC8qIHRva2VuLmlkZW50aXRpZXMuY291bnQgKi9cXG4gMzA2OlxcdFxcdCp4ZHIrKyA9IGh0b25sKDApO1xcdFxcdFxcdC8qIHRva2VuLmlkZW50aXRpZXNbMF0ua2luZCAqL1xcbiAzMDc6XFx0XFx0KnhkcisrID0gaHRvbmwodXVpZHNpemUpO1xcdFxcdC8qIHRva2VuLmlkZW50aXRpZXNbMF0uZGF0YS5sZW4gKi9cXG4gMzA4OlxcdFxcdG1lbWNweSh4ZHIsIFxcdTAwMjZzZXJ2ZXItXFx1MDAzZXV1aWQsIHV1aWRzaXplKTtcXG4gMzA5OlxcdFxcdHhkciArPSB4ZHJfcm91bmRfdXAodXVpZHNpemUpIC8gNDtcXG4gMzEwOlxcdFxcdCp4ZHIrKyA9IGh0b25sKDApO1xcdFxcdFxcdC8qIHRva2VuLmlkZW50aXRpZXNbMF0uZGlzcGxheS5sZW4gKi9cXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0eGRyID0gZW5jYmFzZSArIHhkcl9yb3VuZF91cChlbmNzaXplKTtcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0aWYgKCh1bnNpZ25lZCBsb25nKXhkciAtICh1bnNpZ25lZCBsb25nKWFwcGRhdGEgIT0gYWRhdGFzaXplKVxcbiAzMTU6XFx0XFx0XFx0cHJfZXJyKFxcXCJBcHBkYXRhIHNpemUgaW5jb3JyZWN0ICVseCAhPSAlenhcXFxcblxcXCIsXFxuIDMxNjpcXHRcXHRcXHQgICAgICAgKHVuc2lnbmVkIGxvbmcpeGRyIC0gKHVuc2lnbmVkIGxvbmcpYXBwZGF0YSwgYWRhdGFzaXplKTtcXG4gMzE3OlxcdFxcbiAzMTg6XFx0XFx0YWVhZCA9IGNyeXB0b19rcmI1X3ByZXBhcmVfZW5jcnlwdGlvbih0b2tlbl9rcmI1LCB0b2tlbl9rZXksIFJYR0tfU0VSVkVSX0VOQ19UT0tFTixcXG4gMzE5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1MDoxOC40MTc2NjI3NjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2MjAzODg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZmZlciBTaXplIENhbGN1bGF0aW9uIEZpeCoqXG5cbk9rYXksIHNvIHRoZSBmaXggaXMgaW4gZm9yIGEgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24gZXJyb3IgcmVsYXRlZCB0byBgdG9rc2l6ZWAuIFRoZSBtZW1vcnkgd2FzIGluaXRpYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLCBtZWFuaW5nIGV2ZXJ5dGhpbmcgc3RhcnRlZCBvdXQgemVyb2VkLiBUaGUgYnVnIHdhcyBpbiBmYWlsaW5nIHRvIGFjY291bnQgZm9yIHRoZSA0LWJ5dGUgYGxldmVsYCBmaWVsZCB0aGF0IGdldHMgd3JpdHRlbiBsYXRlciwgYXMgZXZpZGVuY2VkIGJ5IHRoZSBgaHRvbmwoUlhSUENfU0VDVVJJVFlfRU5DUllQVClgIGNhbGwgb24gbGluZSAyOTguIEVzc2VudGlhbGx5LCB3ZSB3ZXJlIHVuZGVyLWFsbG9jYXRpbmcsIGV2ZW4gdGhvdWdoIHRoZSBjb25zZXF1ZW5jZXMgd2VyZW4ndCBpbW1lZGlhdGVseSBvYnZpb3VzIGR1ZSB0byB0aGUgemVybyBpbml0aWFsaXphdGlvbi4gSXQgbG9va3MgbGlrZSBpdCB3YXMgb25seSBmaXhpbmcgYSBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbiwgbm90IGEgbWVtb3J5IGNvcnJ1cHRpb24sIGJ1dCBpdCBpcyBpbXBvcnRhbnQgdG8gY2hlY2sgaG93IHRoZSBidWZmZXIgd2lsbCBiZSB1c2VkLlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBUaW1lIHRvIHRob3JvdWdobHkgYW5hbHl6ZSBgbmV0L3J4cnBjL3NlbmRtc2cuY2AgYW5kIHJlbGF0ZWQgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGZ1cnRoZXIgaXNzdWVzIGx1cmtpbmcuIExldCdzIHN0YXJ0IHdpdGggYG5ldC9yeHJwYy9zZW5kbXNnLmNgIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1MDoyMS4yNzk3MDU0NzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9zZW5kbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdFxcdCAgICBzdGF0ZSAhPSBSWFJQQ19DQUxMX1NFUlZFUl9TRU5EX1JFUExZKSB7XFxuIDM4MTpcXHRcXHRcXHQvKiBSZXF1ZXN0IHBoYXNlIGNvbXBsZXRlIGZvciB0aGlzIGNsaWVudCBjYWxsICovXFxuIDM4MjpcXHRcXHRcXHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVxcdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXFxuIDM4MzpcXHRcXHRcXHRcXHRcXHQgIGNhbGwtXFx1MDAzZWNpZCwgY2FsbC1cXHUwMDNlY2FsbF9pZCwgY2FsbC1cXHUwMDNlcnhfY29uc3VtZWQsXFxuIDM4NDpcXHRcXHRcXHRcXHRcXHQgIDAsIC1FUFJPVE8pO1xcbiAzODU6XFx0XFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4gMzg2OlxcdFxcdH1cXG4gMzg3OlxcdFxcbiAzODg6XFx0XFx0cmV0ID0gLUVNU0dTSVpFO1xcbiAzODk6XFx0XFx0aWYgKGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSkge1xcbiAzOTA6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNlIGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbilcXG4gMzkxOlxcdFxcdFxcdFxcdGdvdG8gbWF5YmVfZXJyb3I7XFxuIDM5MjpcXHRcXHRcXHRpZiAoIW1vcmUgXFx1MDAyNlxcdTAwMjYgbGVuICE9IGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbilcXG4gMzkzOlxcdFxcdFxcdFxcdGdvdG8gbWF5YmVfZXJyb3I7XFxuIDM5NDpcXHRcXHR9XFxuIDM5NTpcXHRcXG4gMzk2OlxcdFxcdGRvIHtcXG4gMzk3OlxcdFxcdFxcdGlmICghdHhiKSB7XFxuIDM5ODpcXHRcXHRcXHRcXHRzaXplX3QgcmVtYWluO1xcbiAzOTk6XFx0XFxuIDQwMDpcXHRcXHRcXHRcXHRfZGVidWcoXFxcImFsbG9jXFxcIik7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdFxcdFxcdGlmICghcnhycGNfY2hlY2tfdHhfc3BhY2UoY2FsbCwgTlVMTCkpXFxuIDQwMzpcXHRcXHRcXHRcXHRcXHRnb3RvIHdhaXRfZm9yX3NwYWNlO1xcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRcXHRcXHQvKiBTZWUgaWYgd2UgbmVlZCB0byBiZWdpbi9leHRlbmQgdGhlIFR4IHF1ZXVlLiAqL1xcbiA0MDY6XFx0XFx0XFx0XFx0aWYgKCFjYWxsLVxcdTAwM2VzZW5kX3F1ZXVlIHx8ICEoKGNhbGwtXFx1MDAzZXNlbmRfdG9wICsgMSkgXFx1MDAyNiBSWFJQQ19UWFFfTUFTSykpIHtcXG4gNDA3OlxcdFxcdFxcdFxcdFxcdHJldCA9IHJ4cnBjX2FsbG9jX3R4cXVldWUoc2ssIGNhbGwpO1xcbiA0MDg6XFx0XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDQwOTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG1heWJlX2Vycm9yO1xcbiA0MTA6XFx0XFx0XFx0XFx0fVxcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRcXHRcXHQvKiBXb3JrIG91dCB0aGUgbWF4aW11bSBzaXplIG9mIGEgcGFja2V0LiAgQXNzdW1lIHRoYXRcXG4gNDEzOlxcdFxcdFxcdFxcdCAqIHRoZSBzZWN1cml0eSBoZWFkZXIgaXMgZ29pbmcgdG8gYmUgaW4gdGhlIHBhZGRlZFxcbiA0MTQ6XFx0XFx0XFx0XFx0ICogcmVnaW9uIChlbmMgYmxvY2tzaXplKSwgYnV0IHRoZSB0cmFpbGVyIGlzIG5vdC5cXG4gNDE1OlxcdFxcdFxcdFxcdCAqL1xcbiA0MTY6XFx0XFx0XFx0XFx0cmVtYWluID0gbW9yZSA/IElOVF9NQVggOiBsZW47XFxuIDQxNzpcXHRcXHRcXHRcXHR0eGIgPSBjYWxsLVxcdTAwM2Vjb25uLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNlYWxsb2NfdHhidWYoY2FsbCwgcmVtYWluLCBzay1cXHUwMDNlc2tfYWxsb2NhdGlvbik7XFxuIDQxODpcXHRcXHRcXHRcXHRpZiAoIXR4Yikge1xcbiA0MTk6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNDIwOlxcdFxcdFxcdFxcdFxcdGdvdG8gbWF5YmVfZXJyb3I7XFxuIDQyMTpcXHRcXHRcXHRcXHR9XFxuIDQyMjpcXHRcXHRcXHR9XFxuIDQyMzpcXHRcXG4gNDI0OlxcdFxcdFxcdF9kZWJ1ZyhcXFwiYXBwZW5kXFxcIik7XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdFxcdC8qIGFwcGVuZCBuZXh0IHNlZ21lbnQgb2YgZGF0YSB0byB0aGUgY3VycmVudCBidWZmZXIgKi9cXG4gNDI3OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzZSAwKSB7XFxuIDQyODpcXHRcXHRcXHRcXHRzaXplX3QgY29weSA9IG1pbjModHhiLVxcdTAwM2VzcGFjZSwgbGVuLCBtc2dfZGF0YV9sZWZ0KG1zZykpO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRcXHRcXHRfZGVidWcoXFxcImFkZCAlenVcXFwiLCBjb3B5KTtcXG4gNDMxOlxcdFxcdFxcdFxcdGlmICghY29weV9mcm9tX2l0ZXJfZnVsbCh0eGItXFx1MDAzZWRhdGEgKyB0eGItXFx1MDAzZW9mZnNldCxcXG4gNDMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBjb3B5LCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlcikpXFxuIDQzMzpcXHRcXHRcXHRcXHRcXHRnb3RvIGVmYXVsdDtcXG4gNDM0OlxcdFxcdFxcdFxcdF9kZWJ1ZyhcXFwiYWRkZWRcXFwiKTtcXG4gNDM1OlxcdFxcdFxcdFxcdHR4Yi1cXHUwMDNlc3BhY2UgLT0gY29weTtcXG4gNDM2OlxcdFxcdFxcdFxcdHR4Yi1cXHUwMDNlbGVuICs9IGNvcHk7XFxuIDQzNzpcXHRcXHRcXHRcXHR0eGItXFx1MDAzZW9mZnNldCArPSBjb3B5O1xcbiA0Mzg6XFx0XFx0XFx0XFx0Y29waWVkICs9IGNvcHk7XFxuIDQzOTpcXHRcXHRcXHRcXHRsZW4gLT0gY29weTtcXG4gNDQwOlxcdFxcdFxcdFxcdGlmIChjYWxsLVxcdTAwM2V0eF90b3RhbF9sZW4gIT0gLTEpXFxuIDQ0MTpcXHRcXHRcXHRcXHRcXHRjYWxsLVxcdTAwM2V0eF90b3RhbF9sZW4gLT0gY29weTtcXG4gNDQyOlxcdFxcdFxcdH1cXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0XFx0LyogY2hlY2sgZm9yIHRoZSBmYXIgc2lkZSBhYm9ydGluZyB0aGUgY2FsbCBvciBhIG5ldHdvcmsgZXJyb3JcXG4gNDQ1OlxcdFxcdFxcdCAqIG9jY3VycmluZyAqL1xcbiA0NDY6XFx0XFx0XFx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkpXFxuIDQ0NzpcXHRcXHRcXHRcXHRnb3RvIGNhbGxfdGVybWluYXRlZDtcXG4gNDQ4OlxcdFxcbiA0NDk6XFx0XFx0XFx0LyogYWRkIHRoZSBwYWNrZXQgdG8gdGhlIHNlbmQgcXVldWUgaWYgaXQncyBub3cgZnVsbCAqL1xcbiA0NTA6XFx0XFx0XFx0aWYgKCF0eGItXFx1MDAzZXNwYWNlIHx8XFxuIDQ1MTpcXHRcXHRcXHQgICAgKGxlbiA9PSAwIFxcdTAwMjZcXHUwMDI2ICFtb3JlKSkge1xcbiA0NTI6XFx0XFx0XFx0XFx0LyogRG8gYW55IHJlcXVpcmVkIGNyeXB0by4gIElmIHRoaXMgZmFpbHMsIGl0IGNvdWxkXFxuIDQ1MzpcXHRcXHRcXHRcXHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxcbiA0NTQ6XFx0XFx0XFx0XFx0ICogZW5jcnlwdC4gIEFzc3VtZSB0aGF0IEVOT01FTSBpcyByZXRyeWFibGUsIGJ1dFxcbiA0NTU6XFx0XFx0XFx0XFx0ICogZXZlcnl0aGluZyBlbHNlIGlzIHRlcm1pbmFsLlxcbiA0NTY6XFx0XFx0XFx0XFx0ICovXFxuIDQ1NzpcXHRcXHRcXHRcXHRyZXQgPSBjYWxsLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNlc2VjdXJlX3BhY2tldChjYWxsLCB0eGIpO1xcbiA0NTg6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gNDU5OlxcdFxcdFxcdFxcdFxcdC8qIEFzc3VtZSB0aGF0IEVOT01FTSBoZXJlIG1lYW5zIHRoYXQgdGhlXFxuIDQ2MDpcXHRcXHRcXHRcXHRcXHQgKiBlbmNyeXB0aW9uIGhhc24ndCBoYXBwZW5lZCB5ZXQuICBUaGUgZGF0YSBpc1xcbiA0NjE6XFx0XFx0XFx0XFx0XFx0ICogYWxpZ25lZCB0byBhdm9pZCB0aGUgbmVlZCBmb3Igc2xvdyBidWZmZXJpbmdcXG4gNDYyOlxcdFxcdFxcdFxcdFxcdCAqIGluIHRoZSBjcnlwdG8gd2Fsay5cXG4gNDYzOlxcdFxcdFxcdFxcdFxcdCAqL1xcbiA0NjQ6XFx0XFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PTUVNKVxcbiA0NjU6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBtYXliZV9lcnJvcl9yZXdpbmQ7XFxuIDQ2NjpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsIFxcdTAwMjZjYWxsLVxcdTAwM2VmbGFncyk7XFxuIDQ2NzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF90eGI7XFxuIDQ2ODpcXHRcXHRcXHRcXHR9XFxuIDQ2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MjEuMjc5ODYyNTkzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTA5NTg5NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFJ4UlBDIFBhdGNoIFJldmlldyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBSeFJQQyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgYE5lZWRzS01TQU49dHJ1ZWAgZmxhZy4gTXkgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBnaXZlbiB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoaXMgYXJlYS5cblxuRmlyc3QsIEkgZXhhbWluZWQgYGFsbG9jX3R4YnVmYCBhbmQgYHNlY3VyZV9wYWNrZXRgIHdpdGhpbiBgcnhycGNgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBjb3B5X2Zyb21faXRlcl9mdWxsYCBjYWxsLCBjb3B5aW5nIGRhdGEgaW50byB0aGUgdHJhbnNtaXQgYnVmZmVyIChgdHhiYCkuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCB0aGUgYHR4Yi1cdTAwM2VsZW5gIGlzICpvbmx5KiBpbmNyZW1lbnRlZCBieSB0aGUgY29waWVkIGFtb3VudCBhbmQgdGhhdCB0aGUgYHJ4cnBjX3F1ZXVlX3BhY2tldGAgZnVuY3Rpb24gYWNjdXJhdGVseSByZWZsZWN0cyB0aGUgYW1vdW50IGNvcGllZC4gQWxzbywgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIG5vdyByZXR1cm5zIHRoZSAqbnVtYmVyIG9mIGJ5dGVzIGJ1ZmZlcmVkKiB3aGljaCBpbmRpY2F0ZXMgc3VjY2VzcyAtIG5vdCB6ZXJvIC0gc28gdGhlcmUgaXMgbm8gY29uY2VybiB0aGVyZS5cblxuTmV4dCwgSSBsb29rZWQgYXQgaG93IGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCBpcyB1c2VkIGluIHNldmVyYWwgYGZzL2Fmcy9yeHJwYy5jYCBmdW5jdGlvbnM6IGBhZnNfbWFrZV9jYWxsYCwgYGFmc19zZW5kX2VtcHR5X3JlcGx5YCwgYGFmc19zZW5kX3NpbXBsZV9yZXBseWAsIGFuZCBgcnhwZXJmX3Byb2Nlc3NfY2FsbGAuIEVhY2ggdXNlcyBhIGBkby4uLndoaWxlYCBsb29wIHRoYXQgY2FsbHMgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIHJlcGVhdGVkbHkgdW50aWwgYWxsIHRoZSBtZXNzYWdlIGRhdGEgaXMgc2VudC4gVGhlIGxvb3AgY29uZGl0aW9ucyAoYG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMGAgb3IgYG4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZykgXHUwMDNlIDBgKSBhcHBlYXIgc291bmQ7IGlmIGEgbmVnYXRpdmUgcmV0dXJuIGNvZGUgaXMgcmV0dXJuZWQsIHRoZSBsb29wIGlzIGV4aXRlZC4gYHJldGAgYW5kIGBuYCBhcmUgYXNzaWduZWQgYmVmb3JlIHVzZSBhbmQgdGhlaXIgdXNhZ2UgaXMgY2hlY2tlZC5cblxuTm93LCB0aGUgcmVhbCBsaXRtdXMgdGVzdDogdGhlIGZvdXIgS01TQU4gY3JpdGVyaWEuXG5cbjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlOioqIEknbSBtZXRpY3Vsb3VzbHkgbG9va2luZyBmb3IgYW55IGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgb3IgQlBGIGNoYW5nZXMuIFRoZSBwYXRjaCBoYXMgYHJ4cnBjX3JlcXVldWVfY2FsbGAsIGBfX3J4cnBjX25vdGlmeV9zb2NrZXRgLCBgcnhycGNfbm90aWZ5X3NvY2tldGAgaW4gYHJlY3Ztc2cuY2AgYW5kIGBjYWxsX3N0YXRlLmNgIGJ1dCB0aGVzZSBhcHBlYXIgdG8gYmUgaW50ZXJuYWwgbm90aWZpY2F0aW9ucywgbm90IGRpcmVjdCB1c2VyLWZhY2luZyBjb3BpZXMuIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgIGluIGBrZXkuY2AgcmV0dXJucyBgcmV0YCB3aGljaCBpcyBhc3NpZ25lZCB3aXRoIGAtRUtFWVJFSkVDVEVEYCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyBjaGVja2VkLiBUaGUgYHRva3NpemVgIGNhbGN1bGF0aW9uIGZpeCBpbiBgY21fc2VjdXJpdHkuY2AgaXMgaW1wb3J0YW50IHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igc2ltaWxhciBidWdzLlxuMi4gICoqQ29uZGl0aW9uYWwgTG9naWMvQnJhbmNoaW5nOioqIEknbSBpbnNwZWN0aW5nIGFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRvIGVuc3VyZSB0aGV5J3JlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjb2RlIHVzZXMgYHJldGAgYW5kIGBuYCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBpbiBhbGwgaW5zdGFuY2VzLCBhcyB3ZWxsIGFzIGByZXdpbmRfYnlgIHdoaWNoIGlzIGluaXRpYWxpemVkIGJ5IGB1bWluKGNvcGllZCwgdHhiLVx1MDAzZWxlbilgLlxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogSSdtIGNoZWNraW5nIGZvciBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBleGFtcGxlcyBvZiB0aGlzIGhlcmUuXG40LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBUaGUgYHNlbmRtc2cuY2AgY2hhbmdlcyBtZXRpY3Vsb3VzbHkgdHJhY2sgYGxlbmAgYW5kIGBtc2dfZGF0YV9sZWZ0KG1zZylgLiBUaGUgY29kZSBpcyBjYXJlZnVsIHdpdGggYG1pbjModHhiLVx1MDAzZXNwYWNlLCBsZW4sIG1zZ19kYXRhX2xlZnQobXNnKSlgIGFuZCBkYXRhIGlzIGNvcGllZCBkaXJlY3RseSBmcm9tIGBtc2dfaXRlcmAuIE5vIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIGJlaW5nIGFjY2Vzc2VkIG9yIHRyYW5zbWl0dGVkLlxuXG5JJ3ZlIGNhcmVmdWxseSBkb3VibGUtY2hlY2tlZCAqYWxsKiB0aGUgZGlmZiBodW5rcy4gSSByZXZpZXdlZCB0aGUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RgKSBhbmQgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzIGxpa2UgZml4ZXMgdG8gYHRva3NpemVgIGNhbGN1bGF0aW9uIChgZnMvYWZzL2NtX3NlY3VyaXR5LmNgKSwgaW5saW5lIGZ1bmN0aW9uIG1vdmVzIChgZnMvYWZzL2ludGVybmFsLmhgKSwgdGhlIGxvb3BzIHdpdGggYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIGluIGBmcy9hZnMvcnhycGMuY2AsIHRyYWNlIGV2ZW50cywgZGVjbGFyYXRpb25zIGFuZCBmbGFnIGVudW1zIChgbmV0L3J4cnBjL2FyLWludGVybmFsLmhgKSwgc29ja2V0IG5vdGlmaWNhdGlvbiBsb2dpYyBjbGVhbnVwLCBudWxsL3JlZiBjaGVja3MsICBgY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlYCB2YWxpZGF0aW9uLCBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgbG9ja2luZy5cblxuQmFzZWQgb24gdGhpcyBjb21wcmVoZW5zaXZlIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGVyZSBhcmUgKm5vKiBkaXJlY3Qgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQga2VybmVsIHByb3RlY3Rpb25zIChLQVNBTiwgTE9DS0RFUCwgZXRjLikgc2hvdWxkIGNhdGNoIGFueSBvdGhlciBwb3RlbnRpYWwgaXNzdWVzLiBUaGVyZWZvcmUsIEknbSByZWNvbW1lbmRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGF0LCBhbG9uZyB3aXRoIHRoaXMgZGV0YWlsZWQgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMwOSwiT3V0cHV0VG9rZW5zIjozMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MzIuMTg5NDU2NjAyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEFGX1JYUlBDIGFuZCBBRlMgbmV0d29ya2luZyBjb2RlIHRvIHN1cHBvcnQgc2hvcnQgd3JpdGVzIGluIHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEsIGxvb3AgdW50aWwgZnVsbCBtZXNzYWdlIGNvbnN1bXB0aW9uIGluIEFGUy9yeHBlcmYgY2FsbGVycywgc2ltcGxpZnkgbG9ja2luZyBhcm91bmQgcnhycGNfc2VuZF9kYXRhLCBmaXggdGhlIHRva3NpemUgY2FsY3VsYXRpb24gZm9yIFlGUyBDTSB0b2tlbnMsIGFkZCBlbmNyeXB0aW9uIHR5cGUgdmFsaWRhdGlvbiBmb3IgWUZTIGtleXMsIGFuZCBjbGVhbiB1cCBzb2NrZXQgbm90aWZpY2F0aW9uIGFuZCBjb25uZWN0aW9uIHJlZmNvdW50aW5nLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcXG4tIFRoZSB0b2tlbiBidWZmZXIgaW4gYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHplcm9pbmcgYWxsIGJ5dGVzOyB0aGUgZml4IG1lcmVseSBhY2NvdW50cyBmb3IgdGhlIDQtYnl0ZSBgbGV2ZWxgIGZpZWxkIGluIGB0b2tzaXplYC5cXG4tIEluIGByeHJwY19zZW5kX2RhdGFgLCBkYXRhIHRyYW5zZmVyIGNvbnRpbnVlcyB0byB1c2UgYGNvcHlfZnJvbV9pdGVyX2Z1bGxgIHdpdGggYm91bmRlZCBjb3B5IHNpemVzIChgbWluM2ApLCBhbmQgZXJyb3ItcmV3aW5kIGxvZ2ljIHVwZGF0ZXMgYnl0ZSBjb3VudGVycyBhcHByb3ByaWF0ZWx5Llxcbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxcbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuXFxuXFxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBRl9SWFJQQyBhbmQgQUZTIG5ldHdvcmtpbmcgY29kZSB0byBzdXBwb3J0IHNob3J0IHdyaXRlcyBpbiByeHJwY19rZXJuZWxfc2VuZF9kYXRhLCBsb29wIHVudGlsIGZ1bGwgbWVzc2FnZSBjb25zdW1wdGlvbiBpbiBBRlMvcnhwZXJmIGNhbGxlcnMsIHNpbXBsaWZ5IGxvY2tpbmcgYXJvdW5kIHJ4cnBjX3NlbmRfZGF0YSwgZml4IHRoZSB0b2tzaXplIGNhbGN1bGF0aW9uIGZvciBZRlMgQ00gdG9rZW5zLCBhZGQgZW5jcnlwdGlvbiB0eXBlIHZhbGlkYXRpb24gZm9yIFlGUyBrZXlzLCBhbmQgY2xlYW4gdXAgc29ja2V0IG5vdGlmaWNhdGlvbiBhbmQgY29ubmVjdGlvbiByZWZjb3VudGluZy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6XFxuLSBUaGUgdG9rZW4gYnVmZmVyIGluIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCB6ZXJvaW5nIGFsbCBieXRlczsgdGhlIGZpeCBtZXJlbHkgYWNjb3VudHMgZm9yIHRoZSA0LWJ5dGUgYGxldmVsYCBmaWVsZCBpbiBgdG9rc2l6ZWAuXFxuLSBJbiBgcnhycGNfc2VuZF9kYXRhYCwgZGF0YSB0cmFuc2ZlciBjb250aW51ZXMgdG8gdXNlIGBjb3B5X2Zyb21faXRlcl9mdWxsYCB3aXRoIGJvdW5kZWQgY29weSBzaXplcyAoYG1pbjNgKSwgYW5kIGVycm9yLXJld2luZCBsb2dpYyB1cGRhdGVzIGJ5dGUgY291bnRlcnMgYXBwcm9wcmlhdGVseS5cXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgcmV0YCwgYG5gLCBgcmV3aW5kX2J5YCwgZXRjLikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgYmVmb3JlIHVzZS5cXG4tIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlICh2aWEgYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBldGMuKSBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLlxcblxcbkFueSBjb25jdXJyZW5jeSwgcmVmY291bnRpbmcsIG9yIGJvdW5kcyBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBhcmUgZnVsbHkgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1ZyBidWlsZHMgKEtBU0FOLCBMT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vvlb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 14:26:44 +0000 UTC FinishedAt: 2026-09-07 14:50:34 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "AFS_FS", "RXGK", "RXPERF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AF_RXRPC", "AFS_FS", "RXGK", "RXPERF" ], "series_id": "88a5cb11-a6ed-4bc5-9fd8-009791e242ce" }, "track": "KASAN", "fuzz": { "focus": [ "fs", "net" ], "focus_symbols": [ "rxrpc_send_data", "rxrpc_do_sendmsg", "rxrpc_kernel_send_data", "rxrpc_recvmsg", "rxrpc_notify_socket", "rxrpc_poke_conn", "rxrpc_preparse_xdr_yfs_rxgk", "rxgk_init_connection_security", "afs_make_call", "afs_send_simple_reply", "afs_send_empty_reply", "afs_create_yfs_cm_token", "rxperf_process_call" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDssCiAgICAmIzM0O1JYUEVSRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX3NlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtyeHJwY19kb19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3J4cnBjX2tlcm5lbF9zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7cnhycGNfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDtyeHJwY19ub3RpZnlfc29ja2V0JiMzNDssCiAgICAmIzM0O3J4cnBjX3Bva2VfY29ubiYjMzQ7LAogICAgJiMzNDtyeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2smIzM0OywKICAgICYjMzQ7cnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7YWZzX21ha2VfY2FsbCYjMzQ7LAogICAgJiMzNDthZnNfc2VuZF9zaW1wbGVfcmVwbHkmIzM0OywKICAgICYjMzQ7YWZzX3NlbmRfZW1wdHlfcmVwbHkmIzM0OywKICAgICYjMzQ7YWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4mIzM0OywKICAgICYjMzQ7cnhwZXJmX3Byb2Nlc3NfY2FsbCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQUZfUlhSUEMgYW5kIEFGUyBuZXR3b3JraW5nIGNvZGUgdG8gc3VwcG9ydCBzaG9ydCB3cml0ZXMgaW4gcnhycGNfa2VybmVsX3NlbmRfZGF0YSwgbG9vcCB1bnRpbCBmdWxsIG1lc3NhZ2UgY29uc3VtcHRpb24gaW4gQUZTL3J4cGVyZiBjYWxsZXJzLCBzaW1wbGlmeSBsb2NraW5nIGFyb3VuZCByeHJwY19zZW5kX2RhdGEsIGZpeCB0aGUgdG9rc2l6ZSBjYWxjdWxhdGlvbiBmb3IgWUZTIENNIHRva2VucywgYWRkIGVuY3J5cHRpb24gdHlwZSB2YWxpZGF0aW9uIGZvciBZRlMga2V5cywgYW5kIGNsZWFuIHVwIHNvY2tldCBub3RpZmljYXRpb24gYW5kIGNvbm5lY3Rpb24gcmVmY291bnRpbmcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcbi0gVGhlIHRva2VuIGJ1ZmZlciBpbiBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgemVyb2luZyBhbGwgYnl0ZXM7IHRoZSBmaXggbWVyZWx5IGFjY291bnRzIGZvciB0aGUgNC1ieXRlIGBsZXZlbGAgZmllbGQgaW4gYHRva3NpemVgLlxuLSBJbiBgcnhycGNfc2VuZF9kYXRhYCwgZGF0YSB0cmFuc2ZlciBjb250aW51ZXMgdG8gdXNlIGBjb3B5X2Zyb21faXRlcl9mdWxsYCB3aXRoIGJvdW5kZWQgY29weSBzaXplcyAoYG1pbjNgKSwgYW5kIGVycm9yLXJld2luZCBsb2dpYyB1cGRhdGVzIGJ5dGUgY291bnRlcnMgYXBwcm9wcmlhdGVseS5cbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxuLSBObyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nL3N0cnVjdCBmaWVsZHMgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZC5cblxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFJ4UlBDIHNvY2tldCBkYXRhIHNlbmRpbmcgYW5kIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIG1lY2hhbmlzbXMsIGNvbm5lY3Rpb24gcmVmZXJlbmNlIGNvdW50aW5nLCBrZXkgcGF5bG9hZCBwYXJzaW5nLCBhbmQgaW4ta2VybmVsIEFGUy9yeHBlcmYgc2VuZCBwYXRocy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvcmUgbmV0d29ya2luZyBhbmQgZmlsZXN5c3RlbSBzdGF0ZSBtYWNoaW5lcyBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgdGhhdCBhcmUgZnVsbHkgcmVhY2hhYmxlIHZpYSBBRl9SWFJQQyBzb2NrZXRzLCBrZXlzIHN5c2NhbGxzLCBhbmQgQUZTIG9wZXJhdGlvbnMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2QzYWZmMjMzNzY5MDgxNjkzZWRhODg5YjU4YWEzMjAzYTYyODkyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NDk6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RcbmluZGV4IDg5MjZkYWI4ZTJlNjAuLjdkZjZhZmY3NjQ0YzAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0XG5AQCAtODc5LDE0ICYjNDM7ODc5LDIxIEBAIFRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czpcbiAgICAgIGV4Y2x1c2l2ZWx5IHRvIGluLWtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Nlcy4gIG1zZy5tc2dfZmxhZ3MgbWF5IGJlIGdpdmVuXG4gICAgICBNU0dfTU9SRSBpZiB0aGVyZSB3aWxsIGJlIHN1YnNlcXVlbnQgZGF0YSBzZW5kcyBmb3IgdGhpcyBjYWxsLlxuIFxuLSAgICAgVGhlIG1zZyBtdXN0IG5vdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24gYWRkcmVzcywgY29udHJvbCBkYXRhIG9yIGFueSBmbGFnc1xuLSAgICAgb3RoZXIgdGhhbiBNU0dfTU9SRS4gIGxlbiBpcyB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgdG8gdHJhbnNtaXQuXG4mIzQzOyAgICAgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzXG4mIzQzOyAgICAgb3RoZXIgdGhhbiBNU0dfTU9SRS4gIGxlbiBpcyB0aGUgYW1vdW50IG9mIGRhdGEgdG8gYWRkIHRvIHRoZVxuJiM0MzsgICAgIHRyYW5zbWlzc2lvbi4gIFRoZSBsYXN0LXBhY2tldCBmbGFnIHdpbGwgb25seSBiZSBzZXQgb24gdGhlIG91dGdvaW5nXG4mIzQzOyAgICAgcGFja2V0IGlmIE1TR19NT1JFIGlzIG5vdCBzZXQgYW5kIGxlbiBhbW91bnQgb2YgYnl0ZXMgYXJlIGJ1ZmZlcmVkLlxuIFxuICAgICAgbm90aWZ5X2VuZF9yeCBjYW4gYmUgTlVMTCBvciBpdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZnVuY3Rpb24gdG8gYmVcbiAgICAgIGNhbGxlZCB3aGVuIHRoZSBjYWxsIGNoYW5nZXMgc3RhdGUgdG8gZW5kIHRoZSBUeCBwaGFzZS4gIFRoaXMgZnVuY3Rpb24gaXNcbiAgICAgIGNhbGxlZCB3aXRoIGEgc3BpbmxvY2sgaGVsZCB0byBwcmV2ZW50IHRoZSBsYXN0IERBVEEgcGFja2V0IGZyb20gYmVpbmdcbiAgICAgIHRyYW5zbWl0dGVkIHVudGlsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxuIFxuJiM0MzsgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgZGF0YSBidWZmZXJlZCBvciBhbiBlcnJvci4gIEl0IHdpbGxcbiYjNDM7ICAgICByZXR1cm4gemVybyBvbmx5IGlmIGxlbiBpcyAwIG9yIGlmIG1zZy1cdTAwM2Vtc2dfaXRlciBpcyBlbXB0eS4gIEl0IG1heSBhbHNvXG4mIzQzOyAgICAgbWFrZSBhIHNob3J0IHdyaXRlLCBidWZmZXJpbmcgbGVzcyB0aGFuIHRoZSBhbW91bnQgb2YgZGF0YSBwcm92aWRlZCBvciB0aGVcbiYjNDM7ICAgICBsZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZSBjYWxsZWQgYWdhaW4uXG4mIzQzO1xuICAoIykgUmVjZWl2ZSBkYXRhIGZyb20gYSBjYWxsOjpcbiBcbiBcdGludCByeHJwY19rZXJuZWxfcmVjdl9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuaW5kZXggMTAzMTY4YzcwZGQ0ZC4uNWVlZWVmNzYxY2YzMSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuQEAgLTIzNSw3ICYjNDM7MjM1LDcgQEAgc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuIFx0ICpcdHN0cnVjdCBSWEdLX0F1dGhOYW1lXHRpZGVudGl0aWVzXHUwMDNjXHUwMDNlO1xuIFx0ICogfTtcbiBcdCAqL1xuLVx0dG9rc2l6ZSA9IGtleXNpemUgJiM0MzsgOCAmIzQzOyA0ICYjNDM7IDQgJiM0MzsgOCAmIzQzOyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XG4mIzQzO1x0dG9rc2l6ZSA9IGtleXNpemUgJiM0MzsgNCAmIzQzOyA4ICYjNDM7IDQgJiM0MzsgNCAmIzQzOyA4ICYjNDM7IHhkcl9sZW5fb2JqZWN0KGF1dGhzaXplKTtcbiBcbiBcdG9mZnNldCA9IDA7XG4gXHRlbmNzaXplID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKHRva2VuX2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLCB0b2tzaXplLCBcdTAwMjZvZmZzZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjY1YTA4NjZjZDhiODUgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xNDE2LDIyICYjNDM7MTQxNiw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfc2VlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBlbnVtIGFmc19jYWxsX3RyYWNlIHdoeSlcbiBcdFx0ICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuLVx0XHRcdFx0ICAgIGdmcF90IGdmcClcbi17XG4tXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuLVxuLVx0b3AtXHUwMDNlY2FsbFx0PSBhZnNfZ2V0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfZ2V0KTtcbi1cdG9wLVx1MDAzZXR5cGVcdD0gY2FsbC1cdTAwM2V0eXBlO1xuLVx0Y2FsbC1cdTAwM2VvcFx0PSBvcDtcbi1cdGNhbGwtXHUwMDNla2V5XHQ9IG9wLVx1MDAzZWtleTtcbi1cdGNhbGwtXHUwMDNlaW50clx0PSAhKG9wLVx1MDAzZWZsYWdzIFx1MDAyNiBBRlNfT1BFUkFUSU9OX1VOSU5UUik7XG4tXHRjYWxsLVx1MDAzZXBlZXJcdD0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LVx1MDAzZWFkZHJzW29wLVx1MDAzZWFkZHJfaW5kZXhdLnBlZXIpO1xuLVx0Y2FsbC1cdTAwM2VzZXJ2aWNlX2lkID0gb3AtXHUwMDNlc2VydmVyLVx1MDAzZXNlcnZpY2VfaWQ7XG4tXHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XG4tXHRhZnNfcHV0X2NhbGwoY2FsbCk7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZXh0cmFjdF9iZWdpbihzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXG4ge1xuIFx0Y2FsbC1cdTAwM2Vpb3ZfbGVuID0gc2l6ZTtcbkBAIC0xNzYzLDYgJiM0MzsxNzQ3LDIzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpBRlNfVk5PREVfVE9fSShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSlcbiBcdHJldHVybiBcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuJiM0MztcdFx0XHRcdCAgICBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuJiM0MztcbiYjNDM7XHRvcC1cdTAwM2VjYWxsXHQ9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpO1xuJiM0MztcdG9wLVx1MDAzZXR5cGVcdD0gY2FsbC1cdTAwM2V0eXBlO1xuJiM0MztcdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4mIzQzO1x0Y2FsbC1cdTAwM2VzZXJ2ZXJcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XG4mIzQzO1x0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuJiM0MztcdGNhbGwtXHUwMDNlaW50clx0PSAhKG9wLVx1MDAzZWZsYWdzIFx1MDAyNiBBRlNfT1BFUkFUSU9OX1VOSU5UUik7XG4mIzQzO1x0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbiYjNDM7XHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbiYjNDM7XHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XG4mIzQzO1x0YWZzX3B1dF9jYWxsKGNhbGwpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogTm90ZSB0aGF0IGEgZGVudHJ5IGdvdCBjaGFuZ2VkLiAgV2UgbmVlZCB0byBzZXQgZF9mc2RhdGEgdG8gdGhlIGRhdGEgdmVyc2lvblxuICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuY1xuaW5kZXggZDgyOTE2NjU3YTNkZC4uMWY1YjZhYTY4OTQzMyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9yeHJwYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvcnhycGMuY1xuQEAgLTQxMiwyNiAmIzQzOzQxMiwzMiBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbiBcdG1zZy5tc2dfZmxhZ3NcdFx0PSBNU0dfV0FJVEFMTCB8IChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xuIFxuLVx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIHJ4Y2FsbCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2bXNnLCBjYWxsLVx1MDAzZXJlcXVlc3Rfc2l6ZSxcbi1cdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yX2RvX2Fib3J0O1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCByeGNhbGwsIFx1MDAyNm1zZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XG4mIzQzO1x0fSB3aGlsZSAobXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpIFx1MDAzZSAwKTtcbiBcbiBcdGlmIChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIpIHtcbiBcdFx0bXNnLm1zZ19pdGVyID0gKmNhbGwtXHUwMDNld3JpdGVfaXRlcjtcbiBcdFx0bXNnLm1zZ19mbGFncyBcdTAwMjY9IH5NU0dfTU9SRTtcbiBcdFx0dHJhY2VfYWZzX3NlbmRfZGF0YShjYWxsLCBcdTAwMjZtc2cpO1xuIFxuLVx0XHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCxcbi1cdFx0XHRcdFx0ICAgICBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLFxuLVx0XHRcdFx0XHQgICAgIGlvdl9pdGVyX2NvdW50KFx1MDAyNm1zZy5tc2dfaXRlciksXG4tXHRcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGNhbGwtXHUwMDNlcnhjYWxsLCBcdTAwMjZtc2csXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIHJldCk7XG4mIzQzO1x0XHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSB3aGlsZSAobXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpIFx1MDAzZSAwKTtcbiBcdFx0KmNhbGwtXHUwMDNld3JpdGVfaXRlciA9IG1zZy5tc2dfaXRlcjtcbiBcbi1cdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIHJldCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbiYjNDM7XHRcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXHUwMDI2bXNnLCAwKTtcbiBcdH1cbiBcbiBcdC8qIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCB3ZSBtYXkgaGF2ZSByZWNlaXZlZCB0aGUgcmVwbHkgb3IgYW4gYWJvcnRcbkBAIC00NDMsMTAgJiM0Mzs0NDksOCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRyZXR1cm47XG4gXG4gZXJyb3JfZG9fYWJvcnQ6XG4tXHRpZiAocmV0ICE9IC1FQ09OTkFCT1JURUQpXG4tXHRcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLFxuLVx0XHRcdFx0XHRSWF9VU0VSX0FCT1JULCByZXQsXG4tXHRcdFx0XHRcdGFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpO1xuJiM0MztcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLFxuJiM0MztcdFx0XHRcdFJYX1VTRVJfQUJPUlQsIHJldCwgYWZzX2Fib3J0X3NlbmRfZGF0YV9lcnJvcik7XG4gXHRpZiAoY2FsbC1cdTAwM2Vhc3luYykge1xuIFx0XHRhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQpO1xuIFx0XHRyZXR1cm47XG5AQCAtODU5LDYgJiM0Mzs4NjMsNyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiB7XG4gXHRzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY2FsbC1cdTAwM2VuZXQ7XG4gXHRzdHJ1Y3QgbXNnaGRyIG1zZztcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0X2VudGVyKFwmIzM0O1wmIzM0Oyk7XG4gXG5AQCAtODcxLDIyICYjNDM7ODc2LDEzIEBAIHZvaWQgYWZzX3NlbmRfZW1wdHlfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIFx0bXNnLm1zZ19jb250cm9sbGVuXHQ9IDA7XG4gXHRtc2cubXNnX2ZsYWdzXHRcdD0gMDtcbiBcbi1cdHN3aXRjaCAocnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCAwLFxuLVx0XHRcdFx0ICAgICAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KSkge1xuLVx0Y2FzZSAwOlxuLVx0XHRfbGVhdmUoXCYjMzQ7IFtyZXBsaWVkXVwmIzM0Oyk7XG4mIzQzO1x0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCAwLFxuJiM0MztcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKSAvKiBTaG91bGRuJiMzOTt0IGJ1ZmZlciBtb3JlIHRoYW4gMCBieXRlcy4gKi9cbiBcdFx0cmV0dXJuO1xuIFxuLVx0Y2FzZSAtRU5PTUVNOlxuLVx0XHRfZGVidWcoXCYjMzQ7b29tXCYjMzQ7KTtcbi1cdFx0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsXG4tXHRcdFx0XHRcdFJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sXG4tXHRcdFx0XHRcdGFmc19hYm9ydF9vb20pO1xuLVx0XHRmYWxsdGhyb3VnaDtcbi1cdGRlZmF1bHQ6XG4tXHRcdF9sZWF2ZShcJiMzNDsgW2Vycm9yXVwmIzM0Oyk7XG4tXHRcdHJldHVybjtcbi1cdH1cbiYjNDM7XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbiYjNDM7XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCByZXQsIGFmc19hYm9ydF9zZW5kX2Vycm9yKTtcbiB9XG4gXG4gLypcbkBAIC05MTIsMjAgJiM0Mzs5MDgsMjEgQEAgdm9pZCBhZnNfc2VuZF9zaW1wbGVfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pXG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbiBcdG1zZy5tc2dfZmxhZ3NcdFx0PSAwO1xuIFxuLVx0biA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZywgbGVuLFxuLVx0XHRcdFx0ICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdG4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2bXNnLCBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZyksXG4mIzQzO1x0XHRcdFx0XHQgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCk7XG4mIzQzO1x0fSB3aGlsZSAobiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMCk7XG4mIzQzO1xuIFx0aWYgKG4gXHUwMDNlPSAwKSB7XG4gXHRcdC8qIFN1Y2Nlc3MgKi9cbiBcdFx0X2xlYXZlKFwmIzM0OyBbcmVwbGllZF1cJiMzNDspO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobiA9PSAtRU5PTUVNKSB7XG4tXHRcdF9kZWJ1ZyhcJiMzNDtvb21cJiMzNDspO1xuLVx0XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbi1cdFx0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgLUVOT01FTSxcbi1cdFx0XHRcdFx0YWZzX2Fib3J0X29vbSk7XG4tXHR9XG4mIzQzO1xuJiM0MztcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuJiM0MztcdFx0XHRcdFJYR0VOX1NTX01BUlNIQUwsIG4sIGFmc19hYm9ydF9zZW5kX2Vycm9yKTtcbiBcdF9sZWF2ZShcJiMzNDsgW2Vycm9yXVwmIzM0Oyk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbmluZGV4IDFiM2M0OGI1NTkxZGYuLjA0YjBiYjY4MmI4MTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbkBAIC0xNDgsNiAmIzQzOzE0OCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VudXNlX3NsaXN0X2lzb3J0LFx0XCYjMzQ7VU5VIGlzb3J0XCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXHRcdFwmIzM0O1VQREFURSAgIFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXHRcJiMzNDtVU0UgdXVpZCBcJiMzNDspIFxcXG4mIzQzO1x0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcdFx0XCYjMzQ7VVNFIGNhbGwgXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCxcdFwmIzM0O1VTRSBjbS1jbFwmIzM0OykgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLFx0XCYjMzQ7VVNFIGdjYXBzXCYjMzQ7KSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcdFwmIzM0O1VTRSBndnVwY1wmIzM0OykgXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuaW5kZXggNzA0YTEwZGU2NjcwMC4uNTJmODcxOGNmNzI1MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbkBAIC0yMCwxNiAmIzQzOzIwLDE2IEBAXG4gXHQvKiBBRlMgZXJyb3JzICovXHRcdFx0XHRcdFx0XFxcbiBcdEVNKGFmc19hYm9ydF9nZW5lcmFsX2Vycm9yLFx0XHRcJiMzNDthZnMtZXJyb3JcJiMzNDspXHRcdFxcXG4gXHRFTShhZnNfYWJvcnRfaW50ZXJydXB0ZWQsXHRcdFwmIzM0O2Fmcy1pbnRyXCYjMzQ7KVx0XHRcXFxuLVx0RU0oYWZzX2Fib3J0X29vbSxcdFx0XHRcJiMzNDthZnMtb29tXCYjMzQ7KVx0XHRcXFxuIFx0RU0oYWZzX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsXHRcdFwmIzM0O2Fmcy1vcC1ub3RzdXBwXCYjMzQ7KVx0XFxcbiBcdEVNKGFmc19hYm9ydF9wcm9iZXV1aWRfbmVnYXRpdmUsXHRcJiMzNDthZnMtcHJvYmV1dWlkLW5lZ1wmIzM0OylcdFxcXG4gXHRFTShhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yLFx0XHRcJiMzNDthZnMtc2VuZC1kYXRhXCYjMzQ7KVx0XFxcbiYjNDM7XHRFTShhZnNfYWJvcnRfc2VuZF9lcnJvcixcdFx0XCYjMzQ7YWZzLXNlbmQtZXJyb3JcJiMzNDspXHRcXFxuIFx0RU0oYWZzX2Fib3J0X3VubWFyc2hhbF9lcnJvcixcdFx0XCYjMzQ7YWZzLXVubWFyc2hhbFwmIzM0OylcdFxcXG4gXHRFTShhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzLFx0XCYjMzQ7YWZzLXVuc3VwLXNlYy1jbGFzc1wmIzM0OylcdFxcXG4gXHQvKiByeHBlcmYgZXJyb3JzICovXHRcdFx0XHRcdFx0XFxcbiBcdEVNKHJ4cGVyZl9hYm9ydF9nZW5lcmFsX2Vycm9yLFx0XHRcJiMzNDtyeHBlcmYtZXJyb3JcJiMzNDspXHRcdFxcXG4tXHRFTShyeHBlcmZfYWJvcnRfb29tLFx0XHRcdFwmIzM0O3J4cGVyZi1vb21cJiMzNDspXHRcdFxcXG4gXHRFTShyeHBlcmZfYWJvcnRfb3Bfbm90X3N1cHBvcnRlZCxcdFwmIzM0O3J4cGVyZi1vcC1ub3RzdXBwXCYjMzQ7KVx0XFxcbiYjNDM7XHRFTShyeHBlcmZfYWJvcnRfc2VuZF9lcnJvcixcdFx0XCYjMzQ7cnhwZXJmLXNlbmQtZXJyb3JcJiMzNDspXHRcXFxuIFx0RU0ocnhwZXJmX2Fib3J0X3VubWFyc2hhbF9lcnJvcixcdFwmIzM0O3J4cGVyZi11bm1hcnNoYWxcJiMzNDspXHRcXFxuIFx0LyogUnhLQUQgc2VjdXJpdHkgZXJyb3JzICovXHRcdFx0XHRcdFxcXG4gXHRFTShyeGthZF9hYm9ydF8xX3Nob3J0X2NoZWNrLFx0XHRcJiMzNDtyeGthZDEtc2hvcnQtY2hlY2tcJiMzNDspXHRcXFxuQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEBcbiBcdEVNKHJ4cnBjX2Vwcm90b193cm9uZ19zZWN1cml0eSxcdFx0XCYjMzQ7d3Jvbmctc2VjXCYjMzQ7KVx0XHRcXFxuIFx0RU0ocnhycGNfcmVjdm1zZ19leGNlc3NfZGF0YSxcdFx0XCYjMzQ7cmVjdm1zZy1leGNlc3NcJiMzNDspXHRcXFxuIFx0RU0ocnhycGNfcmVjdm1zZ19zaG9ydF9kYXRhLFx0XHRcJiMzNDtyZWN2bXNnLXNob3J0XCYjMzQ7KVx0XFxcbiYjNDM7XHRFTShyeHJwY19zZW5kbXNnX3R4X2Vycm9yLFx0XHRcJiMzNDt0eC1lcnJvclwmIzM0OylcdFx0XFxcbiBcdEVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFx0XHRcJiMzNDtzZW5kbXNnLWxhdGVcJiMzNDspXG4gXG4gI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFxcXG5AQCAtMzQyLDYgJiM0MzszNDMsNyBAQFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfZGlzdHJpYnV0ZV9lcnJvcixcdFwmIzM0O1NFRSBkaXN0LWVyclwmIzM0OykgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX2lucHV0LFx0XHRcJiMzNDtTRUUgaW5wdXQgICBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQsXHRcJiMzNDtTRUUgbmZ5LXJsc2RcJiMzNDspIFxcXG4mIzQzO1x0RU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQsXHRcJiMzNDtTRUUgbmZ5LXNraXBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnLFx0XHRcJiMzNDtTRUUgcmVjdm1zZyBcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWUsXHRcJiMzNDtTRUUgcmVjdi1ycXVcJiMzNDspIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsIFwmIzM0O1NFRSByZWN2LXJxRlwmIzM0OykgXFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaCBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5pbmRleCA4NjVmMDVmZTM3YWI5Li5jYjM2YTcwOWY1NDBlIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5AQCAtNjQyLDYgJiM0Mzs2NDIsNyBAQCBlbnVtIHJ4cnBjX2NhbGxfZmxhZyB7XG4gXHRSWFJQQ19DQUxMX1RYX0xBU1QsXHRcdC8qIExhc3QgcGFja2V0IGluIFR4IGJ1ZmZlciAoYXQgcnh0eF90b3ApICovXG4gXHRSWFJQQ19DQUxMX1RYX0FMTF9BQ0tFRCxcdC8qIExhc3QgcGFja2V0IGhhcyBiZWVuIGhhcmQtYWNrZWQgKi9cbiBcdFJYUlBDX0NBTExfVFhfTk9fTU9SRSxcdFx0LyogTm8gbW9yZSBkYXRhIHRvIHRyYW5zbWl0IChNU0dfTU9SRSBkZWFzc2VydGVkKSAqL1xuJiM0MztcdFJYUlBDX0NBTExfVFhfRVJST1IsXHRcdC8qIFRlcm1pbmFsIGVycm9yOyBjYWxsIG5lZWRzIGFib3J0ICovXG4gXHRSWFJQQ19DQUxMX1NFTkRfUElORyxcdFx0LyogQSBwaW5nIHdpbGwgbmVlZCB0byBiZSBzZW50ICovXG4gXHRSWFJQQ19DQUxMX1JFVFJBTlNfVElNRU9VVCxcdC8qIFJldHJhbnNtaXNzaW9uIGR1ZSB0byB0aW1lb3V0IG9jY3VycmVkICovXG4gXHRSWFJQQ19DQUxMX0JFR0FOX1JYX1RJTUVSLFx0LyogV2UgYmVnYW4gdGhlIGV4cGVjdF9yeF9ieSB0aW1lciAqL1xuQEAgLTExMDksNiAmIzQzOzExMTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnhycGNfaXNfY2xpZW50X2NhbGwoY29uc3Qgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gLypcbiAgKiBjYWxsX3N0YXRlLmNcbiAgKi9cbiYjNDM7dm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKTtcbiBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRcdFx0ICAgICAgIGVudW0gcnhycGNfY2FsbF9jb21wbGV0aW9uIGNvbXBsLFxuIFx0XHRcdCAgICAgICB1MzIgYWJvcnRfY29kZSxcbkBAIC0xNDQxLDcgJiM0MzsxNDQzLDYgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByeHJwY19sb2NhbF9zZXFfb3BzO1xuIC8qXG4gICogcmVjdm1zZy5jXG4gICovXG4tdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICopO1xuIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1zZ2hkciAqLCBzaXplX3QsIGludCk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jIGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xuaW5kZXggNmFmYjU0MzczZWJiZi4uMzY0ODEwYzY1Mjc2NiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbkBAIC03LDYgJiM0Mzs3LDYwIEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX3J4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1JFTEVBU0VELCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0cnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XG4mIzQzO1x0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuJiM0MztcdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4mIzQzO1x0aWYgKHJ4IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSBcdTAwM2MgUlhSUENfQ0xPU0UpIHtcbiYjNDM7XHRcdGlmIChjYWxsLVx1MDAzZW5vdGlmeV9yeCkge1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdGNhbGwtXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVx1MDAzZXVzZXJfY2FsbF9JRCk7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y2FsbC1cdTAwM2Vub3RpZnlfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKSkge1xuJiM0MztcdFx0XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuJiM0MztcdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4mIzQzO1x0XHRcdFx0X2RlYnVnKFwmIzM0O2NhbGwgJXBzXCYjMzQ7LCBzay1cdTAwM2Vza19kYXRhX3JlYWR5KTtcbiYjNDM7XHRcdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbiYjNDM7e1xuJiM0MztcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpKSB7XG4mIzQzO1x0XHRyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX3J4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBUcmFuc2l0aW9uIGEgY2FsbCB0byB0aGUgY29tcGxldGUgc3RhdGUuXG4gICovXG5AQCAtMjUsNyAmIzQzOzc5LDcgQEAgYm9vbCByeHJwY19zZXRfY2FsbF9jb21wbGV0aW9uKHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0cnhycGNfc2V0X2NhbGxfc3RhdGUoY2FsbCwgUlhSUENfQ0FMTF9DT01QTEVURSk7XG4gXHR0cmFjZV9yeHJwY19jYWxsX2NvbXBsZXRlKGNhbGwpO1xuIFx0d2FrZV91cChcdTAwMjZjYWxsLVx1MDAzZXdhaXRxKTtcbi1cdHJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XG4mIzQzO1x0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX29iamVjdC5jIGIvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcbmluZGV4IDBlY2U3MTdkYjBmODUuLjFiZTUwZTBjOWNlZTUgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9vYmplY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcbkBAIC0zNCw3ICYjNDM7MzQsMTAgQEAgdm9pZCByeHJwY19wb2tlX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sIGVudW0gcnhycGNfY29ubl90cmFjZSB3aHkpXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZWxvY2spO1xuIFx0YnVzeSA9ICFsaXN0X2VtcHR5KFx1MDAyNmNvbm4tXHUwMDNlYXR0ZW5kX2xpbmspO1xuIFx0aWYgKCFidXN5KSB7XG4tXHRcdHJ4cnBjX2dldF9jb25uZWN0aW9uKGNvbm4sIHdoeSk7XG4mIzQzO1x0XHRpZiAoIXJ4cnBjX2dldF9jb25uZWN0aW9uX21heWJlKGNvbm4sIHdoeSkpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4gXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y29ubi1cdTAwM2VhdHRlbmRfbGluaywgXHUwMDI2bG9jYWwtXHUwMDNlY29ubl9hdHRlbmRfcSk7XG4gXHR9XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2bG9jYWwtXHUwMDNlbG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2tleS5jIGIvbmV0L3J4cnBjL2tleS5jXG5pbmRleCBhMGFhNzhkODkyODk3Li4zMGQ2ZGIwNTJjMjE2IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMva2V5LmNcbkBAIC0xNzIsNiAmIzQzOzE3Miw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG4gXHRjb25zdCBfX2JlMzIgKnRpY2tldCwgKmtleTtcbiBcdHM2NCB0bXA7XG4gXHRzaXplX3QgcmF3X2tleWxlbiwgcmF3X3RrdGxlbiwga2V5bGVuLCB0a3RsZW47XG4mIzQzO1x0aW50IHJldCA9IC1FS0VZUkVKRUNURUQ7XG4gXG4gXHRfZW50ZXIoXCYjMzQ7LHsleCwleCwleCwleH0sJXhcJiMzNDssXG4gXHQgICAgICAgbnRvaGwoeGRyWzBdKSwgbnRvaGwoeGRyWzFdKSwgbnRvaGwoeGRyWzJdKSwgbnRvaGwoeGRyWzNdKSxcbkBAIC0yMjksNiAmIzQzOzIzMCwxMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhnayhzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwLFxuIFx0dG9rZW4tXHUwMDNlcnhnay1cdTAwM2VrZXkuZGF0YVx0PSB0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZV9rZXk7XG4gXHR0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZXRpY2tldC5sZW4gPSByYXdfdGt0bGVuO1xuIFxuJiM0MztcdGlmICghY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNlZW5jdHlwZSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FTk9QS0c7XG4mIzQzO1x0XHRnb3RvIHJlamVjdF90b2tlbjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNlZW5kdGltZSAhPSAwKSB7XG4gXHRcdGV4cGlyeSA9IHJ4cnBjX3M2NF90b190aW1lNjQodG9rZW4tXHUwMDNlcnhnay1cdTAwM2VlbmR0aW1lKTtcbiBcdFx0aWYgKGV4cGlyeSBcdTAwM2MgMClcbkBAIC0yODAsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG4gXHRrZnJlZSh0b2tlbi1cdTAwM2VyeGdrKTtcbiBcdGtmcmVlKHRva2VuKTtcbiByZWplY3Q6XG4tXHRyZXR1cm4gLUVLRVlSRUpFQ1RFRDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIGV4cGlyZWQ6XG4gXHRrZnJlZSh0b2tlbi1cdTAwM2VyeGdrKTtcbiBcdGtmcmVlKHRva2VuKTtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcmVjdm1zZy5jIGIvbmV0L3J4cnBjL3JlY3Ztc2cuY1xuaW5kZXggZWZjYmE0YjJlNzRmMC4uMjhiMjE0OGI1NjkzNiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yZWN2bXNnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcbkBAIC0xNywxMyAmIzQzOzE3LDEyIEBAXG4gI2luY2x1ZGUgXCYjMzQ7YXItaW50ZXJuYWwuaFwmIzM0O1xuIFxuIC8qXG4tICogUG9zdCBhIGNhbGwgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlLiAgRnVydGhlclxuLSAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS5cbiYjNDM7ICogUmVxdWV1ZSBhIGNhbGwgZm9yIHJlY3Ztc2coKSB0byBwaWNrIHVwLlxuICAqL1xuLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbiYjNDM7c3RhdGljIHZvaWQgcnhycGNfcmVxdWV1ZV9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIHtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdHN0cnVjdCBzb2NrICpzaztcbiYjNDM7XHRzdHJ1Y3QgcnhycGNfc29jayAqcnggPSByeHJwY19zayhzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbiBcbiBcdF9lbnRlcihcJiMzNDslZFwmIzM0OywgY2FsbC1cdTAwM2VkZWJ1Z19pZCk7XG4gXG5AQCAtMzIsMzEgJiM0MzszMSwxOCBAQCB2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cbi1cdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbi1cdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4tXHRpZiAocnggXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAzYyBSWFJQQ19DTE9TRSkge1xuLVx0XHRpZiAoY2FsbC1cdTAwM2Vub3RpZnlfcngpIHtcbi1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHRcdGNhbGwtXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVx1MDAzZXVzZXJfY2FsbF9JRCk7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbi1cdFx0XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuLVx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaywgXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbi1cdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKSkge1xuJiM0MztcdFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbiBcbi1cdFx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuLVx0XHRcdFx0X2RlYnVnKFwmIzM0O2NhbGwgJXBzXCYjMzQ7LCBzay1cdTAwM2Vza19kYXRhX3JlYWR5KTtcbi1cdFx0XHRcdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xuLVx0XHRcdH1cbi1cdFx0fVxuJiM0MztcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4mIzQzO1x0XHRfZGVidWcoXCYjMzQ7Y2FsbCAlcHNcJiMzNDssIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuJiM0MztcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4gXHR9XG4gXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdF9sZWF2ZShcJiMzNDtcJiMzNDspO1xuIH1cbiBcbkBAIC01NjEsNyAmIzQzOzU0Nyw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBNU0dfUEVFSykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfcXVldWUpKVxuLVx0XHRyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuJiM0MztcdFx0cnhycGNfcmVxdWV1ZV9jYWxsKHNvY2ssIGNhbGwpO1xuIFx0Z290byBub3RfeWV0X2NvbXBsZXRlO1xuIFxuIGNhbGxfZmFpbGVkOlxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGdrLmMgYi9uZXQvcnhycGMvcnhnay5jXG5pbmRleCA3N2E2N2FjZTFkMjQ4Li5iNDkyMjFmNTdmNjc3IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3J4Z2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3J4Z2suY1xuQEAgLTI1MSw4ICYjNDM7MjUxLDEwIEBAIHN0YXRpYyBpbnQgcnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHRcdCBHRlBfTk9GUyk7XG4gXHRpZiAoSVNfRVJSKGdrKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZ2spO1xuJiM0MztcdHdyaXRlX2xvY2soXHUwMDI2Y29ubi1cdTAwM2VzZWN1cml0eV91c2VfbG9jayk7XG4gXHRjb25uLVx1MDAzZXJ4Z2suZW5jdHlwZSA9IGdrLVx1MDAzZWtyYjUtXHUwMDNlZXR5cGU7XG4gXHRjb25uLVx1MDAzZXJ4Z2sua2V5c1tnay1cdTAwM2VrZXlfbnVtYmVyIFx1MDAyNiAzXSA9IGdrO1xuJiM0MztcdHdyaXRlX3VubG9jayhcdTAwMjZjb25uLVx1MDAzZXNlY3VyaXR5X3VzZV9sb2NrKTtcbiBcbiBcdHN3aXRjaCAoY29ubi1cdTAwM2VzZWN1cml0eV9sZXZlbCkge1xuIFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9QTEFJTjpcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcnhwZXJmLmMgYi9uZXQvcnhycGMvcnhwZXJmLmNcbmluZGV4IGI4ZGY2ZDIyMzE0ZDYuLmViZDU0MjIyYzY0ZWYgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcnhwZXJmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9yeHBlcmYuY1xuQEAgLTUzOCwxNSAmIzQzOzUzOCwxOCBAQCBzdGF0aWMgaW50IHJ4cGVyZl9wcm9jZXNzX2NhbGwoc3RydWN0IHJ4cGVyZl9jYWxsICpjYWxsKVxuIFx0aW92WzBdLmlvdl9sZW5cdD0gbGVuO1xuIFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIFdSSVRFLCBpb3YsIDEsIGxlbik7XG4gXHRtc2cubXNnX2ZsYWdzID0gMDtcbi1cdG4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLCBcdTAwMjZtc2csIGxlbixcbi1cdFx0XHRcdCAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTtcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShyeHBlcmZfc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNm1zZywgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuJiM0MztcdFx0XHRcdFx0ICAgcnhwZXJmX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuJiM0MztcdH0gd2hpbGUgKG4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZykgXHUwMDNlIDApO1xuJiM0MztcbiBcdGlmIChuIFx1MDAzZT0gMClcbiBcdFx0cmV0dXJuIDA7IC8qIFN1Y2Nlc3MgKi9cbiBcbi1cdGlmIChuID09IC1FTk9NRU0pXG4tXHRcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuLVx0XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLFxuLVx0XHRcdFx0XHRyeHBlcmZfYWJvcnRfb29tKTtcbiYjNDM7XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChyeHBlcmZfc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbiYjNDM7XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCBuLFxuJiM0MztcdFx0XHRcdHJ4cGVyZl9hYm9ydF9zZW5kX2Vycm9yKTtcbiBcdHJldHVybiBuO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VuZG1zZy5jIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuaW5kZXggZWQyYzlhNTEwMDVhZC4uOGJiMzI3ZGMyODMzZSAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yeHJwYy9zZW5kbXNnLmNcbkBAIC0zMjAsOCAmIzQzOzMyMCw4IEBAIHN0YXRpYyBpbnQgcnhycGNfYWxsb2NfdHhxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHQgICBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsXG4tXHRcdFx0ICAgYm9vbCAqX2Ryb3BwZWRfbG9jaylcbiYjNDM7XHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpXG4mIzQzO1x0X19yZWxlYXNlcyhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3R4YnVmICp0eGI7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbkBAIC0zMzAsMjkgJiM0MzszMzAsMzcgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0Ym9vbCBtb3JlID0gbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX01PUkU7XG4gXHRpbnQgcmV0LCBjb3BpZWQgPSAwO1xuIFxuLVx0aWYgKHRlc3RfYml0KFJYUlBDX0NBTExfVFhfTk9fTU9SRSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpIHtcbi1cdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXG4tXHRcdFx0XHQgIGNhbGwtXHUwMDNlY2lkLCBjYWxsLVx1MDAzZWNhbGxfaWQsIGNhbGwtXHUwMDNlcnhfY29uc3VtZWQsXG4tXHRcdFx0XHQgIDAsIC1FUFJPVE8pO1xuLVx0XHRyZXR1cm4gLUVQUk9UTztcbi1cdH1cbi1cbiBcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcbiBcdHJldCA9IHJ4cnBjX3dhaXRfdG9fYmVfY29ubmVjdGVkKGNhbGwsIFx1MDAyNnRpbWVvKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHRpZiAoY2FsbC1cdTAwM2Vjb25uLVx1MDAzZXN0YXRlID09IFJYUlBDX0NPTk5fQ0xJRU5UX1VOU0VDVVJFRCkge1xuIFx0XHRyZXQgPSByeHJwY19pbml0X2NsaWVudF9jb25uX3NlY3VyaXR5KGNhbGwtXHUwMDNlY29ubik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0LyogdGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqL1xuIFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCBzayk7XG4gXG4gcmVsb2FkOlxuJiM0MztcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpKSkge1xuJiM0MztcdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXG4mIzQzO1x0XHRcdFx0ICBjYWxsLVx1MDAzZWNpZCwgY2FsbC1cdTAwM2VjYWxsX2lkLCBjYWxsLVx1MDAzZXJ4X2NvbnN1bWVkLFxuJiM0MztcdFx0XHRcdCAgMCwgLUVQUk9UTyk7XG4mIzQzO1x0XHRyZXQgPSAtRVBST1RPO1xuJiM0MztcdFx0Z290byBtYXliZV9lcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHVubGlrZWx5KHRlc3RfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpKSkge1xuJiM0MztcdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvcixcbiYjNDM7XHRcdFx0XHQgIGNhbGwtXHUwMDNlY2lkLCBjYWxsLVx1MDAzZWNhbGxfaWQsIGNhbGwtXHUwMDNlcnhfY29uc3VtZWQsXG4mIzQzO1x0XHRcdFx0ICAwLCAtRUlPKTtcbiYjNDM7XHRcdHJldCA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIG1heWJlX2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4gXHR0eGIgPSBjYWxsLVx1MDAzZXR4X3BlbmRpbmc7XG4gXHRjYWxsLVx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xuIFx0aWYgKHR4YilcbkBAIC0zNzksOSAmIzQzOzM4Nyw5IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcbiBcdHJldCA9IC1FTVNHU0laRTtcbiBcdGlmIChjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSkge1xuLVx0XHRpZiAobGVuIC0gY29waWVkIFx1MDAzZSBjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbilcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNlIGNhbGwtXHUwMDNldHhfdG90YWxfbGVuKVxuIFx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4tXHRcdGlmICghbW9yZSBcdTAwMjZcdTAwMjYgbGVuIC0gY29waWVkICE9IGNhbGwtXHUwMDNldHhfdG90YWxfbGVuKVxuJiM0MztcdFx0aWYgKCFtb3JlIFx1MDAyNlx1MDAyNiBsZW4gIT0gY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4gXHRcdFx0Z290byBtYXliZV9lcnJvcjtcbiBcdH1cbiBcbkBAIC00MDUsNyAmIzQzOzQxMyw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHQgKiB0aGUgc2VjdXJpdHkgaGVhZGVyIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBwYWRkZWRcbiBcdFx0XHQgKiByZWdpb24gKGVuYyBibG9ja3NpemUpLCBidXQgdGhlIHRyYWlsZXIgaXMgbm90LlxuIFx0XHRcdCAqL1xuLVx0XHRcdHJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbXNnX2RhdGFfbGVmdChtc2cpO1xuJiM0MztcdFx0XHRyZW1haW4gPSBtb3JlID8gSU5UX01BWCA6IGxlbjtcbiBcdFx0XHR0eGIgPSBjYWxsLVx1MDAzZWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlYWxsb2NfdHhidWYoY2FsbCwgcmVtYWluLCBzay1cdTAwM2Vza19hbGxvY2F0aW9uKTtcbiBcdFx0XHRpZiAoIXR4Yikge1xuIFx0XHRcdFx0cmV0ID0gLUVOT01FTTtcbkBAIC00MTYsOCAmIzQzOzQyNCw4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0X2RlYnVnKFwmIzM0O2FwcGVuZFwmIzM0Oyk7XG4gXG4gXHRcdC8qIGFwcGVuZCBuZXh0IHNlZ21lbnQgb2YgZGF0YSB0byB0aGUgY3VycmVudCBidWZmZXIgKi9cbi1cdFx0aWYgKG1zZ19kYXRhX2xlZnQobXNnKSBcdTAwM2UgMCkge1xuLVx0XHRcdHNpemVfdCBjb3B5ID0gdW1pbih0eGItXHUwMDNlc3BhY2UsIG1zZ19kYXRhX2xlZnQobXNnKSk7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdHNpemVfdCBjb3B5ID0gbWluMyh0eGItXHUwMDNlc3BhY2UsIGxlbiwgbXNnX2RhdGFfbGVmdChtc2cpKTtcbiBcbiBcdFx0XHRfZGVidWcoXCYjMzQ7YWRkICV6dVwmIzM0OywgY29weSk7XG4gXHRcdFx0aWYgKCFjb3B5X2Zyb21faXRlcl9mdWxsKHR4Yi1cdTAwM2VkYXRhICYjNDM7IHR4Yi1cdTAwM2VvZmZzZXQsXG5AQCAtNDI4LDYgJiM0Mzs0MzYsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRcdFx0dHhiLVx1MDAzZWxlbiAmIzQzOz0gY29weTtcbiBcdFx0XHR0eGItXHUwMDNlb2Zmc2V0ICYjNDM7PSBjb3B5O1xuIFx0XHRcdGNvcGllZCAmIzQzOz0gY29weTtcbiYjNDM7XHRcdFx0bGVuIC09IGNvcHk7XG4gXHRcdFx0aWYgKGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxuIFx0XHRcdFx0Y2FsbC1cdTAwM2V0eF90b3RhbF9sZW4gLT0gY29weTtcbiBcdFx0fVxuQEAgLTQzOSw2MiAmIzQzOzQ0OCwxMDAgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFxuIFx0XHQvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCYjMzk7cyBub3cgZnVsbCAqL1xuIFx0XHRpZiAoIXR4Yi1cdTAwM2VzcGFjZSB8fFxuLVx0XHQgICAgKG1zZ19kYXRhX2xlZnQobXNnKSA9PSAwIFx1MDAyNlx1MDAyNiAhbW9yZSkpIHtcbi1cdFx0XHRpZiAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKVxuLVx0XHRcdFx0dHhiLVx1MDAzZWZsYWdzIHw9IFJYUlBDX0xBU1RfUEFDS0VUO1xuLVxuJiM0MztcdFx0ICAgIChsZW4gPT0gMCBcdTAwMjZcdTAwMjYgIW1vcmUpKSB7XG4mIzQzO1x0XHRcdC8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZFxuJiM0MztcdFx0XHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxuJiM0MztcdFx0XHQgKiBlbmNyeXB0LiAgQXNzdW1lIHRoYXQgRU5PTUVNIGlzIHJldHJ5YWJsZSwgYnV0XG4mIzQzO1x0XHRcdCAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC5cbiYjNDM7XHRcdFx0ICovXG4gXHRcdFx0cmV0ID0gY2FsbC1cdTAwM2VzZWN1cml0eS1cdTAwM2VzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7XG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdFx0LyogQXNzdW1lIHRoYXQgRU5PTUVNIGhlcmUgbWVhbnMgdGhhdCB0aGVcbiYjNDM7XHRcdFx0XHQgKiBlbmNyeXB0aW9uIGhhc24mIzM5O3QgaGFwcGVuZWQgeWV0LiAgVGhlIGRhdGEgaXNcbiYjNDM7XHRcdFx0XHQgKiBhbGlnbmVkIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBzbG93IGJ1ZmZlcmluZ1xuJiM0MztcdFx0XHRcdCAqIGluIHRoZSBjcnlwdG8gd2Fsay5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRpZiAocmV0ID09IC1FTk9NRU0pXG4mIzQzO1x0XHRcdFx0XHRnb3RvIG1heWJlX2Vycm9yX3Jld2luZDtcbiYjNDM7XHRcdFx0XHRzZXRfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0XHRcdGdvdG8gb3V0X3R4YjtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGxlbiA9PSAwIFx1MDAyNlx1MDAyNiAhbW9yZSlcbiYjNDM7XHRcdFx0XHR0eGItXHUwMDNlZmxhZ3MgfD0gUlhSUENfTEFTVF9QQUNLRVQ7XG4gXHRcdFx0cnhycGNfcXVldWVfcGFja2V0KHJ4LCBjYWxsLCB0eGIsIG5vdGlmeV9lbmRfdHgpO1xuIFx0XHRcdHR4YiA9IE5VTEw7XG4gXHRcdH1cbi1cdH0gd2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSBcdTAwM2UgMCk7XG4mIzQzO1x0fSB3aGlsZSAobGVuIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBtc2dfZGF0YV9sZWZ0KG1zZykgXHUwMDNlIDApO1xuIFxuIHN1Y2Nlc3M6XG4gXHRyZXQgPSBjb3BpZWQ7XG4tXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKVxuLVx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuLW91dDpcbiYjNDM7b3V0X3R4YjpcbiBcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdF9sZWF2ZShcJiMzNDsgPSAlZFwmIzM0OywgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gXG4gY2FsbF90ZXJtaW5hdGVkOlxuIFx0cnhycGNfcHV0X3R4YnVmKHR4YiwgcnhycGNfdHhidWZfcHV0X3NlbmRfYWJvcnRlZCk7XG4tXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIGNhbGwtXHUwMDNlZXJyb3IpO1xuLVx0cmV0dXJuIGNhbGwtXHUwMDNlZXJyb3I7XG4tXG4mIzQzO1x0Y2FsbC1cdTAwM2V0eF9wZW5kaW5nID0gTlVMTDtcbiYjNDM7XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuJiM0MztcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO21heWJlX2Vycm9yX3Jld2luZDpcbiYjNDM7XHQvKiBJZiB3ZSBnb3QgYSByZXRyeWFibGUgZXJyb3IgYWZ0ZXIgY29weWluZyBhbGwgdGhlIHN1cHBsaWVkIGRhdGEgaW50b1xuJiM0MztcdCAqIHRoZSBsYXN0IHBhY2tldCwgd2UgbmVlZCB0byByZXdpbmQgYXMgbXVjaCBhcyB3ZSBjYW4gc28gdGhlIGNhbGxlclxuJiM0MztcdCAqIGtub3dzIHRoZXkgbmVlZCB0byByZXRyeSB0aGUgc2VuZG1zZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY29waWVkIFx1MDAyNlx1MDAyNiAhbW9yZSBcdTAwMjZcdTAwMjYgIWxlbikge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHJld2luZF9ieSA9IHVtaW4oY29waWVkLCB0eGItXHUwMDNlbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHR0eGItXHUwMDNlc3BhY2UgICYjNDM7PSByZXdpbmRfYnk7XG4mIzQzO1x0XHR0eGItXHUwMDNlbGVuICAgIC09IHJld2luZF9ieTtcbiYjNDM7XHRcdHR4Yi1cdTAwM2VvZmZzZXQgLT0gcmV3aW5kX2J5O1xuJiM0MztcdFx0Y29waWVkICAgICAgLT0gcmV3aW5kX2J5O1xuJiM0MztcdFx0aWYgKGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxuJiM0MztcdFx0XHRjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbiAmIzQzOz0gcmV3aW5kX2J5O1xuJiM0MztcdFx0aW92X2l0ZXJfcmV2ZXJ0KFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgcmV3aW5kX2J5KTtcbiYjNDM7XHR9XG4gbWF5YmVfZXJyb3I6XG4tXHRpZiAoY29waWVkKVxuJiM0MztcdGlmIChjb3BpZWQpIHtcbiYjNDM7XHRcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGNhbGwtXHUwMDNlZXJyb3IgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbiYjNDM7XHRcdFx0Z290byBvdXRfdHhiO1xuJiM0MztcdFx0fVxuIFx0XHRnb3RvIHN1Y2Nlc3M7XG4tXHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0Z290byBvdXRfdHhiO1xuIFxuIGVmYXVsdDpcbiBcdHJldCA9IC1FRkFVTFQ7XG4tXHRnb3RvIG91dDtcbiYjNDM7XHRnb3RvIG91dF90eGI7XG4gXG4gd2FpdF9mb3Jfc3BhY2U6XG4gXHRyZXQgPSAtRUFHQUlOO1xuIFx0aWYgKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVClcbiBcdFx0Z290byBtYXliZV9lcnJvcjtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuLVx0Kl9kcm9wcGVkX2xvY2sgPSB0cnVlO1xuJiM0MztcbiBcdHJldCA9IHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvdyhyeCwgY2FsbCwgXHUwMDI2dGltZW8sXG4gXHRcdFx0XHQgICAgICAgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1dBSVRBTEwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBtYXliZV9lcnJvcjtcbiYjNDM7XHRcdGdvdG8gb3V0X25vbG9jaztcbiBcdGlmIChjYWxsLVx1MDAzZWludGVycnVwdGliaWxpdHkgPT0gUlhSUENfSU5URVJSVVBUSUJMRSkge1xuIFx0XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCkgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuLVx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X25vbG9jaztcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFx0fVxuLVx0Kl9kcm9wcGVkX2xvY2sgPSBmYWxzZTtcbiBcdGdvdG8gcmVsb2FkO1xuJiM0MztvdXRfbm9sb2NrOlxuJiM0MztcdF9sZWF2ZShcJiMzNDsgPSAlZCBbaW50cl1cJiMzNDssIHJldCk7XG4mIzQzO1x0cmV0dXJuIGNvcGllZCA/OiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtNjYwLDcgJiM0Mzs3MDcsNiBAQCByeHJwY19uZXdfY2xpZW50X2NhbGxfZm9yX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csXG4gaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IHJ4cnBjX2NhbGwgKmNhbGw7XG4tXHRib29sIGRyb3BwZWRfbG9jayA9IGZhbHNlO1xuIFx0aW50IHJldDtcbiBcbiBcdHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyBwID0ge1xuQEAgLTc2OSwxNiAmIzQzOzgxNSwxNSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJYUlBDX0NNRF9TRU5EX0RBVEE6XG4tXHRcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwsIFx1MDAyNmRyb3BwZWRfbG9jayk7XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCk7XG4mIzQzO1x0XHRnb3RvIGVycm9yX3B1dDtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuIG91dF9wdXRfdW5sb2NrOlxuLVx0aWYgKCFkcm9wcGVkX2xvY2spXG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIGVycm9yX3B1dDpcbiBcdHJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpO1xuIFx0X2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCByZXQpO1xuQEAgLTgwMCwxNSAmIzQzOzg0NSwyMSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiAgKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHNlbmQgZGF0YSBvbiBhIGNhbGwuICBUaGUgY2FsbCBtdXN0IGJlIGluIGFuIHN0YXRlXG4gICogYXBwcm9wcmlhdGUgdG8gc2VuZGluZyBkYXRhLiAgTm8gY29udHJvbCBkYXRhIHNob3VsZCBiZSBzdXBwbGllZCBpbiBAbXNnLFxuICAqIG5vciBzaG91bGQgYW4gYWRkcmVzcyBiZSBzdXBwbGllZC4gIE1TR19NT1JFIHNob3VsZCBiZSBmbGFnZ2VkIGlmIHRoZXJlJiMzOTtzXG4tICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZS5cbiYjNDM7ICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZSBpZlxuJiM0MzsgKiBhbGwgdGhlIGRhdGEgaXMgYnVmZmVyZWQuXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYSBzaG9ydCBzZW5kLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZVxuJiM0MzsgKiBjYWxsZWQgYWdhaW4gZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgb3IgdG8gcGljayB1cCBhbiBlcnJvciB0aGF0XG4mIzQzOyAqIGNhdXNlZCB0aGUgc2hvcnQgc2VuZC5cbiAgKlxuLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGJ1ZmZlcmVkIChjb3VsZCBiZSAlMCBpZiBAbGVuIGlzIDAgb3JcbiYjNDM7ICogbXNnX2l0ZXIgaG9sZHMgMCBieXRlcykgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqIG90aGVyd2lzZS5cbiAgKi9cbiBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpXG4ge1xuLVx0Ym9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTtcbiBcdGludCByZXQ7XG4gXG4gXHRfZW50ZXIoXCYjMzQ7eyVkfSxcJiMzNDssIGNhbGwtXHUwMDNlZGVidWdfaWQpO1xuQEAgLTgxOSwxMiAmIzQzOzg3MCwxMCBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdG11dGV4X2xvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcbiBcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLVx1MDAzZXNrKSwgY2FsbCwgbXNnLCBsZW4sXG4tXHRcdFx0ICAgICAgbm90aWZ5X2VuZF90eCwgXHUwMDI2ZHJvcHBlZF9sb2NrKTtcbiYjNDM7XHRcdFx0ICAgICAgbm90aWZ5X2VuZF90eCk7XG4gXHRpZiAocmV0ID09IC1FU0hVVERPV04pXG4gXHRcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4gXG4tXHRpZiAoIWRyb3BwZWRfbG9jaylcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtBRlNfRlMmIzM0OywKICAgICYjMzQ7UlhHSyYjMzQ7LAogICAgJiMzNDtSWFBFUkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7cnhycGNfZG9fc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyeHJwY19rZXJuZWxfc2VuZF9kYXRhJiMzNDssCiAgICAmIzM0O3J4cnBjX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7cnhycGNfbm90aWZ5X3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19wb2tlX2Nvbm4mIzM0OywKICAgICYjMzQ7cnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrJiMzNDssCiAgICAmIzM0O3J4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O2Fmc19tYWtlX2NhbGwmIzM0OywKICAgICYjMzQ7YWZzX3NlbmRfc2ltcGxlX3JlcGx5JiMzNDssCiAgICAmIzM0O2Fmc19zZW5kX2VtcHR5X3JlcGx5JiMzNDssCiAgICAmIzM0O2Fmc19jcmVhdGVfeWZzX2NtX3Rva2VuJiMzNDssCiAgICAmIzM0O3J4cGVyZl9wcm9jZXNzX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgc29ja2V0IGRhdGEgc2VuZGluZyBhbmQgY29tcGxldGlvbiBub3RpZmljYXRpb24gbWVjaGFuaXNtcywgY29ubmVjdGlvbiByZWZlcmVuY2UgY291bnRpbmcsIGtleSBwYXlsb2FkIHBhcnNpbmcsIGFuZCBpbi1rZXJuZWwgQUZTL3J4cGVyZiBzZW5kIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29yZSBuZXR3b3JraW5nIGFuZCBmaWxlc3lzdGVtIHN0YXRlIG1hY2hpbmVzIGFuZCBlcnJvci1oYW5kbGluZyBwYXRocyB0aGF0IGFyZSBmdWxseSByZWFjaGFibGUgdmlhIEFGX1JYUlBDIHNvY2tldHMsIGtleXMgc3lzY2FsbHMsIGFuZCBBRlMgb3BlcmF0aW9ucyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZDNhZmYyMzM3NjkwODE2OTNlZGE4ODliNThhYTMyMDNhNjI4OTJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNDo0OToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0CmluZGV4IDg5MjZkYWI4ZTJlNjAuLjdkZjZhZmY3NjQ0YzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdApAQCAtODc5LDE0ICYjNDM7ODc5LDIxIEBAIFRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czoKICAgICAgZXhjbHVzaXZlbHkgdG8gaW4ta2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzLiAgbXNnLm1zZ19mbGFncyBtYXkgYmUgZ2l2ZW4KICAgICAgTVNHX01PUkUgaWYgdGhlcmUgd2lsbCBiZSBzdWJzZXF1ZW50IGRhdGEgc2VuZHMgZm9yIHRoaXMgY2FsbC4KIAotICAgICBUaGUgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzCi0gICAgIG90aGVyIHRoYW4gTVNHX01PUkUuICBsZW4gaXMgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIHRvIHRyYW5zbWl0LgomIzQzOyAgICAgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzCiYjNDM7ICAgICBvdGhlciB0aGFuIE1TR19NT1JFLiAgbGVuIGlzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBhZGQgdG8gdGhlCiYjNDM7ICAgICB0cmFuc21pc3Npb24uICBUaGUgbGFzdC1wYWNrZXQgZmxhZyB3aWxsIG9ubHkgYmUgc2V0IG9uIHRoZSBvdXRnb2luZwomIzQzOyAgICAgcGFja2V0IGlmIE1TR19NT1JFIGlzIG5vdCBzZXQgYW5kIGxlbiBhbW91bnQgb2YgYnl0ZXMgYXJlIGJ1ZmZlcmVkLgogCiAgICAgIG5vdGlmeV9lbmRfcnggY2FuIGJlIE5VTEwgb3IgaXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGJlCiAgICAgIGNhbGxlZCB3aGVuIHRoZSBjYWxsIGNoYW5nZXMgc3RhdGUgdG8gZW5kIHRoZSBUeCBwaGFzZS4gIFRoaXMgZnVuY3Rpb24gaXMKICAgICAgY2FsbGVkIHdpdGggYSBzcGlubG9jayBoZWxkIHRvIHByZXZlbnQgdGhlIGxhc3QgREFUQSBwYWNrZXQgZnJvbSBiZWluZwogICAgICB0cmFuc21pdHRlZCB1bnRpbCB0aGUgZnVuY3Rpb24gcmV0dXJucy4KIAomIzQzOyAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIG9yIGFuIGVycm9yLiAgSXQgd2lsbAomIzQzOyAgICAgcmV0dXJuIHplcm8gb25seSBpZiBsZW4gaXMgMCBvciBpZiBtc2ctJmd0O21zZ19pdGVyIGlzIGVtcHR5LiAgSXQgbWF5IGFsc28KJiM0MzsgICAgIG1ha2UgYSBzaG9ydCB3cml0ZSwgYnVmZmVyaW5nIGxlc3MgdGhhbiB0aGUgYW1vdW50IG9mIGRhdGEgcHJvdmlkZWQgb3IgdGhlCiYjNDM7ICAgICBsZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZSBjYWxsZWQgYWdhaW4uCiYjNDM7CiAgKCMpIFJlY2VpdmUgZGF0YSBmcm9tIGEgY2FsbDo6CiAKIAlpbnQgcnhycGNfa2VybmVsX3JlY3ZfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLApkaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuYwppbmRleCAxMDMxNjhjNzBkZDRkLi41ZWVlZWY3NjFjZjMxIDEwMDY0NAotLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY21fc2VjdXJpdHkuYwpAQCAtMjM1LDcgJiM0MzsyMzUsNyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCiAJICoJc3RydWN0IFJYR0tfQXV0aE5hbWUJaWRlbnRpdGllcyZsdDsmZ3Q7OwogCSAqIH07CiAJICovCi0JdG9rc2l6ZSA9IGtleXNpemUgJiM0MzsgOCAmIzQzOyA0ICYjNDM7IDQgJiM0MzsgOCAmIzQzOyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7CiYjNDM7CXRva3NpemUgPSBrZXlzaXplICYjNDM7IDQgJiM0MzsgOCAmIzQzOyA0ICYjNDM7IDQgJiM0MzsgOCAmIzQzOyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7CiAKIAlvZmZzZXQgPSAwOwogCWVuY3NpemUgPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIodG9rZW5fa3JiNSwgS1JCNV9FTkNSWVBUX01PREUsIHRva3NpemUsICZhbXA7b2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggMjkwODczYmFjODliMy4uNjVhMDg2NmNkOGI4NSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmgKQEAgLTE0MTYsMjIgJiM0MzsxNDE2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KQogCQkgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsCi0JCQkJICAgIGdmcF90IGdmcCkKLXsKLQlzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC0mZ3Q7ZXN0YXRlLSZndDthZGRyZXNzZXM7Ci0KLQlvcC0mZ3Q7Y2FsbAk9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpOwotCW9wLSZndDt0eXBlCT0gY2FsbC0mZ3Q7dHlwZTsKLQljYWxsLSZndDtvcAk9IG9wOwotCWNhbGwtJmd0O2tleQk9IG9wLSZndDtrZXk7Ci0JY2FsbC0mZ3Q7aW50cgk9ICEob3AtJmd0O2ZsYWdzICZhbXA7IEFGU19PUEVSQVRJT05fVU5JTlRSKTsKLQljYWxsLSZndDtwZWVyCT0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LSZndDthZGRyc1tvcC0mZ3Q7YWRkcl9pbmRleF0ucGVlcik7Ci0JY2FsbC0mZ3Q7c2VydmljZV9pZCA9IG9wLSZndDtzZXJ2ZXItJmd0O3NlcnZpY2VfaWQ7Ci0JYWZzX21ha2VfY2FsbChjYWxsLCBnZnApOwotCWFmc19wdXRfY2FsbChjYWxsKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAljYWxsLSZndDtpb3ZfbGVuID0gc2l6ZTsKQEAgLTE3NjMsNiAmIzQzOzE3NDcsMjMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKkFGU19WTk9ERV9UT19JKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKQogCXJldHVybiAmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLAomIzQzOwkJCQkgICAgZ2ZwX3QgZ2ZwKQomIzQzO3sKJiM0MzsJc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtJmd0O2VzdGF0ZS0mZ3Q7YWRkcmVzc2VzOwomIzQzOwomIzQzOwlvcC0mZ3Q7Y2FsbAk9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpOwomIzQzOwlvcC0mZ3Q7dHlwZQk9IGNhbGwtJmd0O3R5cGU7CiYjNDM7CWNhbGwtJmd0O29wCT0gb3A7CiYjNDM7CWNhbGwtJmd0O3NlcnZlcgk9IGFmc191c2Vfc2VydmVyKG9wLSZndDtzZXJ2ZXIsIGZhbHNlLCBhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsKTsKJiM0MzsJY2FsbC0mZ3Q7a2V5CT0gb3AtJmd0O2tleTsKJiM0MzsJY2FsbC0mZ3Q7aW50cgk9ICEob3AtJmd0O2ZsYWdzICZhbXA7IEFGU19PUEVSQVRJT05fVU5JTlRSKTsKJiM0MzsJY2FsbC0mZ3Q7cGVlcgk9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC0mZ3Q7YWRkcnNbb3AtJmd0O2FkZHJfaW5kZXhdLnBlZXIpOwomIzQzOwljYWxsLSZndDtzZXJ2aWNlX2lkID0gb3AtJmd0O3NlcnZlci0mZ3Q7c2VydmljZV9pZDsKJiM0MzsJYWZzX21ha2VfY2FsbChjYWxsLCBnZnApOwomIzQzOwlhZnNfcHV0X2NhbGwoY2FsbCk7CiYjNDM7fQomIzQzOwogLyoKICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb24KICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmCmRpZmYgLS1naXQgYS9mcy9hZnMvcnhycGMuYyBiL2ZzL2Fmcy9yeHJwYy5jCmluZGV4IGQ4MjkxNjY1N2EzZGQuLjFmNWI2YWE2ODk0MzMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9yeHJwYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9yeHJwYy5jCkBAIC00MTIsMjYgJiM0Mzs0MTIsMzIgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCW1zZy5tc2dfY29udHJvbGxlbgk9IDA7CiAJbXNnLm1zZ19mbGFncwkJPSBNU0dfV0FJVEFMTCB8IChjYWxsLSZndDt3cml0ZV9pdGVyID8gTVNHX01PUkUgOiAwKTsKIAotCXJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsIHJ4Y2FsbCwKLQkJCQkgICAgICZhbXA7bXNnLCBjYWxsLSZndDtyZXF1ZXN0X3NpemUsCi0JCQkJICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlcnJvcl9kb19hYm9ydDsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLCAmYW1wO21zZywKJiM0MzsJCQkJCSAgICAgbXNnX2RhdGFfbGVmdCgmYW1wO21zZyksCiYjNDM7CQkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJvcl9kb19hYm9ydDsKJiM0MzsJfSB3aGlsZSAobXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKIAogCWlmIChjYWxsLSZndDt3cml0ZV9pdGVyKSB7CiAJCW1zZy5tc2dfaXRlciA9ICpjYWxsLSZndDt3cml0ZV9pdGVyOwogCQltc2cubXNnX2ZsYWdzICZhbXA7PSB+TVNHX01PUkU7CiAJCXRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgJmFtcDttc2cpOwogCi0JCXJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsCi0JCQkJCSAgICAgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywKLQkJCQkJICAgICBpb3ZfaXRlcl9jb3VudCgmYW1wO21zZy5tc2dfaXRlciksCi0JCQkJCSAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJcmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwKJiM0MzsJCQkJCQkgICAgIGNhbGwtJmd0O3J4Y2FsbCwgJmFtcDttc2csCiYjNDM7CQkJCQkJICAgICBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJCXRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgJmFtcDttc2csIHJldCk7CiYjNDM7CQkJCWdvdG8gZXJyb3JfZG9fYWJvcnQ7CiYjNDM7CQkJfQomIzQzOwkJfSB3aGlsZSAobXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKIAkJKmNhbGwtJmd0O3dyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7CiAKLQkJdHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCAmYW1wO21zZywgcmV0KTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycm9yX2RvX2Fib3J0OwomIzQzOwkJdHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCAmYW1wO21zZywgMCk7CiAJfQogCiAJLyogTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQsIHdlIG1heSBoYXZlIHJlY2VpdmVkIHRoZSByZXBseSBvciBhbiBhYm9ydApAQCAtNDQzLDEwICYjNDM7NDQ5LDggQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCXJldHVybjsKIAogZXJyb3JfZG9fYWJvcnQ6Ci0JaWYgKHJldCAhPSAtRUNPTk5BQk9SVEVEKQotCQlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLAotCQkJCQlSWF9VU0VSX0FCT1JULCByZXQsCi0JCQkJCWFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpOwomIzQzOwlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLAomIzQzOwkJCQlSWF9VU0VSX0FCT1JULCByZXQsIGFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpOwogCWlmIChjYWxsLSZndDthc3luYykgewogCQlhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQpOwogCQlyZXR1cm47CkBAIC04NTksNiAmIzQzOzg2Myw3IEBAIHZvaWQgYWZzX3NlbmRfZW1wdHlfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsKQogewogCXN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjYWxsLSZndDtuZXQ7CiAJc3RydWN0IG1zZ2hkciBtc2c7CiYjNDM7CWludCByZXQ7CiAKIAlfZW50ZXIoJiMzNDsmIzM0Oyk7CiAKQEAgLTg3MSwyMiAmIzQzOzg3NiwxMyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIAltc2cubXNnX2NvbnRyb2xsZW4JPSAwOwogCW1zZy5tc2dfZmxhZ3MJCT0gMDsKIAotCXN3aXRjaCAocnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywgMCwKLQkJCQkgICAgICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpKSB7Ci0JY2FzZSAwOgotCQlfbGVhdmUoJiMzNDsgW3JlcGxpZWRdJiMzNDspOwomIzQzOwlyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsICZhbXA7bXNnLCAwLAomIzQzOwkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSAvKiBTaG91bGRuJiMzOTt0IGJ1ZmZlciBtb3JlIHRoYW4gMCBieXRlcy4gKi8KIAkJcmV0dXJuOwogCi0JY2FzZSAtRU5PTUVNOgotCQlfZGVidWcoJiMzNDtvb20mIzM0Oyk7Ci0JCXJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsCi0JCQkJCVJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sCi0JCQkJCWFmc19hYm9ydF9vb20pOwotCQlmYWxsdGhyb3VnaDsKLQlkZWZhdWx0OgotCQlfbGVhdmUoJiMzNDsgW2Vycm9yXSYjMzQ7KTsKLQkJcmV0dXJuOwotCX0KJiM0MzsJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJUlhHRU5fU1NfTUFSU0hBTCwgcmV0LCBhZnNfYWJvcnRfc2VuZF9lcnJvcik7CiB9CiAKIC8qCkBAIC05MTIsMjAgJiM0Mzs5MDgsMjEgQEAgdm9pZCBhZnNfc2VuZF9zaW1wbGVfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiAJbXNnLm1zZ19jb250cm9sbGVuCT0gMDsKIAltc2cubXNnX2ZsYWdzCQk9IDA7CiAKLQluID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywgbGVuLAotCQkJCSAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJZG8gewomIzQzOwkJbiA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJCSAgICZhbXA7bXNnLCBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCSAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJfSB3aGlsZSAobiAmZ3Q7PSAwICZhbXA7JmFtcDsgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKJiM0MzsKIAlpZiAobiAmZ3Q7PSAwKSB7CiAJCS8qIFN1Y2Nlc3MgKi8KIAkJX2xlYXZlKCYjMzQ7IFtyZXBsaWVkXSYjMzQ7KTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChuID09IC1FTk9NRU0pIHsKLQkJX2RlYnVnKCYjMzQ7b29tJiMzNDspOwotCQlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAotCQkJCQlSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLAotCQkJCQlhZnNfYWJvcnRfb29tKTsKLQl9CiYjNDM7CiYjNDM7CXJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsCiYjNDM7CQkJCVJYR0VOX1NTX01BUlNIQUwsIG4sIGFmc19hYm9ydF9zZW5kX2Vycm9yKTsKIAlfbGVhdmUoJiMzNDsgW2Vycm9yXSYjMzQ7KTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaAppbmRleCAxYjNjNDhiNTU5MWRmLi4wNGIwYmI2ODJiODEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaApAQCAtMTQ4LDYgJiM0MzsxNDgsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24gewogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsCSYjMzQ7VU5VIGlzb3J0JiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VwZGF0ZSwJCSYjMzQ7VVBEQVRFICAgJiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9ieV91dWlkLAkmIzM0O1VTRSB1dWlkICYjMzQ7KSBcCiYjNDM7CUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwsCQkmIzM0O1VTRSBjYWxsICYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCwJJiMzNDtVU0UgY20tY2wmIzM0OykgXAogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLAkmIzM0O1VTRSBnY2FwcyYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYiwJJiMzNDtVU0UgZ3Z1cGMmIzM0OykgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmgKaW5kZXggNzA0YTEwZGU2NjcwMC4uNTJmODcxOGNmNzI1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oCkBAIC0yMCwxNiAmIzQzOzIwLDE2IEBACiAJLyogQUZTIGVycm9ycyAqLwkJCQkJCVwKIAlFTShhZnNfYWJvcnRfZ2VuZXJhbF9lcnJvciwJCSYjMzQ7YWZzLWVycm9yJiMzNDspCQlcCiAJRU0oYWZzX2Fib3J0X2ludGVycnVwdGVkLAkJJiMzNDthZnMtaW50ciYjMzQ7KQkJXAotCUVNKGFmc19hYm9ydF9vb20sCQkJJiMzNDthZnMtb29tJiMzNDspCQlcCiAJRU0oYWZzX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsCQkmIzM0O2Fmcy1vcC1ub3RzdXBwJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfcHJvYmV1dWlkX25lZ2F0aXZlLAkmIzM0O2Fmcy1wcm9iZXV1aWQtbmVnJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yLAkJJiMzNDthZnMtc2VuZC1kYXRhJiMzNDspCVwKJiM0MzsJRU0oYWZzX2Fib3J0X3NlbmRfZXJyb3IsCQkmIzM0O2Fmcy1zZW5kLWVycm9yJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfdW5tYXJzaGFsX2Vycm9yLAkJJiMzNDthZnMtdW5tYXJzaGFsJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzLAkmIzM0O2Fmcy11bnN1cC1zZWMtY2xhc3MmIzM0OykJXAogCS8qIHJ4cGVyZiBlcnJvcnMgKi8JCQkJCQlcCiAJRU0ocnhwZXJmX2Fib3J0X2dlbmVyYWxfZXJyb3IsCQkmIzM0O3J4cGVyZi1lcnJvciYjMzQ7KQkJXAotCUVNKHJ4cGVyZl9hYm9ydF9vb20sCQkJJiMzNDtyeHBlcmYtb29tJiMzNDspCQlcCiAJRU0ocnhwZXJmX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsCSYjMzQ7cnhwZXJmLW9wLW5vdHN1cHAmIzM0OykJXAomIzQzOwlFTShyeHBlcmZfYWJvcnRfc2VuZF9lcnJvciwJCSYjMzQ7cnhwZXJmLXNlbmQtZXJyb3ImIzM0OykJXAogCUVNKHJ4cGVyZl9hYm9ydF91bm1hcnNoYWxfZXJyb3IsCSYjMzQ7cnhwZXJmLXVubWFyc2hhbCYjMzQ7KQlcCiAJLyogUnhLQUQgc2VjdXJpdHkgZXJyb3JzICovCQkJCQlcCiAJRU0ocnhrYWRfYWJvcnRfMV9zaG9ydF9jaGVjaywJCSYjMzQ7cnhrYWQxLXNob3J0LWNoZWNrJiMzNDspCVwKQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEAKIAlFTShyeHJwY19lcHJvdG9fd3Jvbmdfc2VjdXJpdHksCQkmIzM0O3dyb25nLXNlYyYjMzQ7KQkJXAogCUVNKHJ4cnBjX3JlY3Ztc2dfZXhjZXNzX2RhdGEsCQkmIzM0O3JlY3Ztc2ctZXhjZXNzJiMzNDspCVwKIAlFTShyeHJwY19yZWN2bXNnX3Nob3J0X2RhdGEsCQkmIzM0O3JlY3Ztc2ctc2hvcnQmIzM0OykJXAomIzQzOwlFTShyeHJwY19zZW5kbXNnX3R4X2Vycm9yLAkJJiMzNDt0eC1lcnJvciYjMzQ7KQkJXAogCUVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLAkJJiMzNDtzZW5kbXNnLWxhdGUmIzM0OykKIAogI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFwKQEAgLTM0Miw2ICYjNDM7MzQzLDcgQEAKIAlFTShyeHJwY19jYWxsX3NlZV9kaXN0cmlidXRlX2Vycm9yLAkmIzM0O1NFRSBkaXN0LWVyciYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfaW5wdXQsCQkmIzM0O1NFRSBpbnB1dCAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkLAkmIzM0O1NFRSBuZnktcmxzZCYjMzQ7KSBcCiYjNDM7CUVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkLAkmIzM0O1NFRSBuZnktc2tpcCYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZywJCSYjMzQ7U0VFIHJlY3Ztc2cgJiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWUsCSYjMzQ7U0VFIHJlY3YtcnF1JiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsICYjMzQ7U0VFIHJlY3YtcnFGJiMzNDspIFwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKaW5kZXggODY1ZjA1ZmUzN2FiOS4uY2IzNmE3MDlmNTQwZSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKQEAgLTY0Miw2ICYjNDM7NjQyLDcgQEAgZW51bSByeHJwY19jYWxsX2ZsYWcgewogCVJYUlBDX0NBTExfVFhfTEFTVCwJCS8qIExhc3QgcGFja2V0IGluIFR4IGJ1ZmZlciAoYXQgcnh0eF90b3ApICovCiAJUlhSUENfQ0FMTF9UWF9BTExfQUNLRUQsCS8qIExhc3QgcGFja2V0IGhhcyBiZWVuIGhhcmQtYWNrZWQgKi8KIAlSWFJQQ19DQUxMX1RYX05PX01PUkUsCQkvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovCiYjNDM7CVJYUlBDX0NBTExfVFhfRVJST1IsCQkvKiBUZXJtaW5hbCBlcnJvcjsgY2FsbCBuZWVkcyBhYm9ydCAqLwogCVJYUlBDX0NBTExfU0VORF9QSU5HLAkJLyogQSBwaW5nIHdpbGwgbmVlZCB0byBiZSBzZW50ICovCiAJUlhSUENfQ0FMTF9SRVRSQU5TX1RJTUVPVVQsCS8qIFJldHJhbnNtaXNzaW9uIGR1ZSB0byB0aW1lb3V0IG9jY3VycmVkICovCiAJUlhSUENfQ0FMTF9CRUdBTl9SWF9USU1FUiwJLyogV2UgYmVnYW4gdGhlIGV4cGVjdF9yeF9ieSB0aW1lciAqLwpAQCAtMTEwOSw2ICYjNDM7MTExMCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByeHJwY19pc19jbGllbnRfY2FsbChjb25zdCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIC8qCiAgKiBjYWxsX3N0YXRlLmMKICAqLwomIzQzO3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCk7CiBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsCiAJCQkgICAgICAgZW51bSByeHJwY19jYWxsX2NvbXBsZXRpb24gY29tcGwsCiAJCQkgICAgICAgdTMyIGFib3J0X2NvZGUsCkBAIC0xNDQxLDcgJiM0MzsxNDQzLDYgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByeHJwY19sb2NhbF9zZXFfb3BzOwogLyoKICAqIHJlY3Ztc2cuYwogICovCi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKik7CiBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtc2doZHIgKiwgc2l6ZV90LCBpbnQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmMKaW5kZXggNmFmYjU0MzczZWJiZi4uMzY0ODEwYzY1Mjc2NiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jCkBAIC03LDYgJiM0Mzs3LDYwIEBACiAKICNpbmNsdWRlICYjMzQ7YXItaW50ZXJuYWwuaCYjMzQ7CiAKJiM0MzsvKgomIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBfX3J4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnhycGNfc29jayAqcng7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFJYUlBDX0NBTExfUkVMRUFTRUQsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsKJiM0MzsJcnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC0mZ3Q7c29ja2V0KTsKJiM0MzsJc2sgPSAmYW1wO3J4LSZndDtzazsKJiM0MzsJaWYgKHJ4ICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICZsdDsgUlhSUENfQ0xPU0UpIHsKJiM0MzsJCWlmIChjYWxsLSZndDtub3RpZnlfcngpIHsKJiM0MzsJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrLCBmbGFncyk7CiYjNDM7CQkJY2FsbC0mZ3Q7bm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLSZndDt1c2VyX2NhbGxfSUQpOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjYWxsLSZndDtub3RpZnlfbG9jaywgZmxhZ3MpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2ssIGZsYWdzKTsKJiM0MzsJCQlpZiAobGlzdF9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaykpIHsKJiM0MzsJCQkJcnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7CiYjNDM7CQkJCWxpc3RfYWRkX3RhaWwoJmFtcDtjYWxsLSZndDtyZWN2bXNnX2xpbmssICZhbXA7cngtJmd0O3JlY3Ztc2dfcSk7CiYjNDM7CQkJfQomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKJiM0MzsJCQkJX2RlYnVnKCYjMzQ7Y2FsbCAlcHMmIzM0Oywgc2stJmd0O3NrX2RhdGFfcmVhZHkpOwomIzQzOwkJCQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiYjNDM7ewomIzQzOwlpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSkgewomIzQzOwkJcnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CV9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogVHJhbnNpdGlvbiBhIGNhbGwgdG8gdGhlIGNvbXBsZXRlIHN0YXRlLgogICovCkBAIC0yNSw3ICYjNDM7NzksNyBAQCBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsCiAJcnhycGNfc2V0X2NhbGxfc3RhdGUoY2FsbCwgUlhSUENfQ0FMTF9DT01QTEVURSk7CiAJdHJhY2VfcnhycGNfY2FsbF9jb21wbGV0ZShjYWxsKTsKIAl3YWtlX3VwKCZhbXA7Y2FsbC0mZ3Q7d2FpdHEpOwotCXJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7CiYjNDM7CV9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmMgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuYwppbmRleCAwZWNlNzE3ZGIwZjg1Li4xYmU1MGUwYzljZWU1IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvY29ubl9vYmplY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuYwpAQCAtMzQsNyAmIzQzOzM0LDEwIEBAIHZvaWQgcnhycGNfcG9rZV9jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLCBlbnVtIHJ4cnBjX2Nvbm5fdHJhY2Ugd2h5KQogCXNwaW5fbG9ja19pcnEoJmFtcDtsb2NhbC0mZ3Q7bG9jayk7CiAJYnVzeSA9ICFsaXN0X2VtcHR5KCZhbXA7Y29ubi0mZ3Q7YXR0ZW5kX2xpbmspOwogCWlmICghYnVzeSkgewotCQlyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCB3aHkpOwomIzQzOwkJaWYgKCFyeHJwY19nZXRfY29ubmVjdGlvbl9tYXliZShjb25uLCB3aHkpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bG9jYWwtJmd0O2xvY2spOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAkJbGlzdF9hZGRfdGFpbCgmYW1wO2Nvbm4tJmd0O2F0dGVuZF9saW5rLCAmYW1wO2xvY2FsLSZndDtjb25uX2F0dGVuZF9xKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bG9jYWwtJmd0O2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2tleS5jIGIvbmV0L3J4cnBjL2tleS5jCmluZGV4IGEwYWE3OGQ4OTI4OTcuLjMwZDZkYjA1MmMyMTYgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMva2V5LmMKQEAgLTE3Miw2ICYjNDM7MTcyLDcgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCwKIAljb25zdCBfX2JlMzIgKnRpY2tldCwgKmtleTsKIAlzNjQgdG1wOwogCXNpemVfdCByYXdfa2V5bGVuLCByYXdfdGt0bGVuLCBrZXlsZW4sIHRrdGxlbjsKJiM0MzsJaW50IHJldCA9IC1FS0VZUkVKRUNURUQ7CiAKIAlfZW50ZXIoJiMzNDsseyV4LCV4LCV4LCV4fSwleCYjMzQ7LAogCSAgICAgICBudG9obCh4ZHJbMF0pLCBudG9obCh4ZHJbMV0pLCBudG9obCh4ZHJbMl0pLCBudG9obCh4ZHJbM10pLApAQCAtMjI5LDYgJiM0MzsyMzAsMTEgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCwKIAl0b2tlbi0mZ3Q7cnhnay0mZ3Q7a2V5LmRhdGEJPSB0b2tlbi0mZ3Q7cnhnay0mZ3Q7X2tleTsKIAl0b2tlbi0mZ3Q7cnhnay0mZ3Q7dGlja2V0LmxlbiA9IHJhd190a3RsZW47CiAKJiM0MzsJaWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodG9rZW4tJmd0O3J4Z2stJmd0O2VuY3R5cGUpKSB7CiYjNDM7CQlyZXQgPSAtRU5PUEtHOwomIzQzOwkJZ290byByZWplY3RfdG9rZW47CiYjNDM7CX0KJiM0MzsKIAlpZiAodG9rZW4tJmd0O3J4Z2stJmd0O2VuZHRpbWUgIT0gMCkgewogCQlleHBpcnkgPSByeHJwY19zNjRfdG9fdGltZTY0KHRva2VuLSZndDtyeGdrLSZndDtlbmR0aW1lKTsKIAkJaWYgKGV4cGlyeSAmbHQ7IDApCkBAIC0yODAsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsCiAJa2ZyZWUodG9rZW4tJmd0O3J4Z2spOwogCWtmcmVlKHRva2VuKTsKIHJlamVjdDoKLQlyZXR1cm4gLUVLRVlSRUpFQ1RFRDsKJiM0MzsJcmV0dXJuIHJldDsKIGV4cGlyZWQ6CiAJa2ZyZWUodG9rZW4tJmd0O3J4Z2spOwogCWtmcmVlKHRva2VuKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jCmluZGV4IGVmY2JhNGIyZTc0ZjAuLjI4YjIxNDhiNTY5MzYgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9yZWN2bXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3JlY3Ztc2cuYwpAQCAtMTcsMTMgJiM0MzsxNywxMiBAQAogI2luY2x1ZGUgJiMzNDthci1pbnRlcm5hbC5oJiMzNDsKIAogLyoKLSAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXIKLSAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS4KJiM0MzsgKiBSZXF1ZXVlIGEgY2FsbCBmb3IgcmVjdm1zZygpIHRvIHBpY2sgdXAuCiAgKi8KLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKJiM0MztzdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiB7Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4OwotCXN0cnVjdCBzb2NrICpzazsKJiM0MzsJc3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay0mZ3Q7c2spOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3J4LSZndDtzazsKIAogCV9lbnRlcigmIzM0OyVkJiMzNDssIGNhbGwtJmd0O2RlYnVnX2lkKTsKIApAQCAtMzIsMzEgJiM0MzszMSwxOCBAQCB2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiAJCXJldHVybjsKIAl9CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLSZndDtzb2NrZXQpOwotCXNrID0gJmFtcDtyeC0mZ3Q7c2s7Ci0JaWYgKHJ4ICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICZsdDsgUlhSUENfQ0xPU0UpIHsKLQkJaWYgKGNhbGwtJmd0O25vdGlmeV9yeCkgewotCQkJc3Bpbl9sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKLQkJCWNhbGwtJmd0O25vdGlmeV9yeChzaywgY2FsbCwgY2FsbC0mZ3Q7dXNlcl9jYWxsX0lEKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fbG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKLQkJCWlmIChsaXN0X2VtcHR5KCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rKSkgewotCQkJCXJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpOwotCQkJCWxpc3RfYWRkX3RhaWwoJmFtcDtjYWxsLSZndDtyZWN2bXNnX2xpbmssICZhbXA7cngtJmd0O3JlY3Ztc2dfcSk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaykpIHsKJiM0MzsJCXJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaywgJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKIAotCQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKLQkJCQlfZGVidWcoJiMzNDtjYWxsICVwcyYjMzQ7LCBzay0mZ3Q7c2tfZGF0YV9yZWFkeSk7Ci0JCQkJc2stJmd0O3NrX2RhdGFfcmVhZHkoc2spOwotCQkJfQotCQl9CiYjNDM7CWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7CiYjNDM7CQlfZGVidWcoJiMzNDtjYWxsICVwcyYjMzQ7LCBzay0mZ3Q7c2tfZGF0YV9yZWFkeSk7CiYjNDM7CQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiAJfQogCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJX2xlYXZlKCYjMzQ7JiMzNDspOwogfQogCkBAIC01NjEsNyAmIzQzOzU0Nyw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAogCWlmICghKGZsYWdzICZhbXA7IE1TR19QRUVLKSAmYW1wOyZhbXA7CiAJICAgICFza2JfcXVldWVfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX3F1ZXVlKSkKLQkJcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKJiM0MzsJCXJ4cnBjX3JlcXVldWVfY2FsbChzb2NrLCBjYWxsKTsKIAlnb3RvIG5vdF95ZXRfY29tcGxldGU7CiAKIGNhbGxfZmFpbGVkOgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmMKaW5kZXggNzdhNjdhY2UxZDI0OC4uYjQ5MjIxZjU3ZjY3NyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3J4Z2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcnhnay5jCkBAIC0yNTEsOCAmIzQzOzI1MSwxMCBAQCBzdGF0aWMgaW50IHJ4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCQkJCQkgR0ZQX05PRlMpOwogCWlmIChJU19FUlIoZ2spKQogCQlyZXR1cm4gUFRSX0VSUihnayk7CiYjNDM7CXdyaXRlX2xvY2soJmFtcDtjb25uLSZndDtzZWN1cml0eV91c2VfbG9jayk7CiAJY29ubi0mZ3Q7cnhnay5lbmN0eXBlID0gZ2stJmd0O2tyYjUtJmd0O2V0eXBlOwogCWNvbm4tJmd0O3J4Z2sua2V5c1tnay0mZ3Q7a2V5X251bWJlciAmYW1wOyAzXSA9IGdrOwomIzQzOwl3cml0ZV91bmxvY2soJmFtcDtjb25uLSZndDtzZWN1cml0eV91c2VfbG9jayk7CiAKIAlzd2l0Y2ggKGNvbm4tJmd0O3NlY3VyaXR5X2xldmVsKSB7CiAJY2FzZSBSWFJQQ19TRUNVUklUWV9QTEFJTjoKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeHBlcmYuYyBiL25ldC9yeHJwYy9yeHBlcmYuYwppbmRleCBiOGRmNmQyMjMxNGQ2Li5lYmQ1NDIyMmM2NGVmIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvcnhwZXJmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3J4cGVyZi5jCkBAIC01MzgsMTUgJiM0Mzs1MzgsMTggQEAgc3RhdGljIGludCByeHBlcmZfcHJvY2Vzc19jYWxsKHN0cnVjdCByeHBlcmZfY2FsbCAqY2FsbCkKIAlpb3ZbMF0uaW92X2xlbgk9IGxlbjsKIAlpb3ZfaXRlcl9rdmVjKCZhbXA7bXNnLm1zZ19pdGVyLCBXUklURSwgaW92LCAxLCBsZW4pOwogCW1zZy5tc2dfZmxhZ3MgPSAwOwotCW4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwgJmFtcDttc2csIGxlbiwKLQkJCQkgICByeHBlcmZfbm90aWZ5X2VuZF9yZXBseV90eCk7CiYjNDM7CWRvIHsKJiM0MzsJCW4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJCSAgICZhbXA7bXNnLCBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCSAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJfSB3aGlsZSAobiAmZ3Q7PSAwICZhbXA7JmFtcDsgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKJiM0MzsKIAlpZiAobiAmZ3Q7PSAwKQogCQlyZXR1cm4gMDsgLyogU3VjY2VzcyAqLwogCi0JaWYgKG4gPT0gLUVOT01FTSkKLQkJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwocnhwZXJmX3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAotCQkJCQlSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLAotCQkJCQlyeHBlcmZfYWJvcnRfb29tKTsKJiM0MzsJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwocnhwZXJmX3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAomIzQzOwkJCQlSWEdFTl9TU19NQVJTSEFMLCBuLAomIzQzOwkJCQlyeHBlcmZfYWJvcnRfc2VuZF9lcnJvcik7CiAJcmV0dXJuIG47CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZW5kbXNnLmMgYi9uZXQvcnhycGMvc2VuZG1zZy5jCmluZGV4IGVkMmM5YTUxMDA1YWQuLjhiYjMyN2RjMjgzM2UgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3NlbmRtc2cuYwpAQCAtMzIwLDggJiM0MzszMjAsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX2FsbG9jX3R4cXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAkJCSAgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAotCQkJICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsCi0JCQkgICBib29sICpfZHJvcHBlZF9sb2NrKQomIzQzOwkJCSAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KQomIzQzOwlfX3JlbGVhc2VzKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCkKIHsKIAlzdHJ1Y3QgcnhycGNfdHhidWYgKnR4YjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3J4LSZndDtzazsKQEAgLTMzMCwyOSAmIzQzOzMzMCwzNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJYm9vbCBtb3JlID0gbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX01PUkU7CiAJaW50IHJldCwgY29waWVkID0gMDsKIAotCWlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSB7Ci0JCXRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtJmd0O2RlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCwKLQkJCQkgIGNhbGwtJmd0O2NpZCwgY2FsbC0mZ3Q7Y2FsbF9pZCwgY2FsbC0mZ3Q7cnhfY29uc3VtZWQsCi0JCQkJICAwLCAtRVBST1RPKTsKLQkJcmV0dXJuIC1FUFJPVE87Ci0JfQotCiAJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwogCiAJcmV0ID0gcnhycGNfd2FpdF90b19iZV9jb25uZWN0ZWQoY2FsbCwgJmFtcDt0aW1lbyk7CiAJaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAlpZiAoY2FsbC0mZ3Q7Y29ubi0mZ3Q7c3RhdGUgPT0gUlhSUENfQ09OTl9DTElFTlRfVU5TRUNVUkVEKSB7CiAJCXJldCA9IHJ4cnBjX2luaXRfY2xpZW50X2Nvbm5fc2VjdXJpdHkoY2FsbC0mZ3Q7Y29ubik7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJLyogdGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqLwogCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCiByZWxvYWQ6CiYjNDM7CWlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSkgewomIzQzOwkJdHJhY2VfcnhycGNfYWJvcnQoY2FsbC0mZ3Q7ZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLAomIzQzOwkJCQkgIGNhbGwtJmd0O2NpZCwgY2FsbC0mZ3Q7Y2FsbF9pZCwgY2FsbC0mZ3Q7cnhfY29uc3VtZWQsCiYjNDM7CQkJCSAgMCwgLUVQUk9UTyk7CiYjNDM7CQlyZXQgPSAtRVBST1RPOwomIzQzOwkJZ290byBtYXliZV9lcnJvcjsKJiM0MzsJfQomIzQzOwlpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgJmFtcDtjYWxsLSZndDtmbGFncykpKSB7CiYjNDM7CQl0cmFjZV9yeHJwY19hYm9ydChjYWxsLSZndDtkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvciwKJiM0MzsJCQkJICBjYWxsLSZndDtjaWQsIGNhbGwtJmd0O2NhbGxfaWQsIGNhbGwtJmd0O3J4X2NvbnN1bWVkLAomIzQzOwkJCQkgIDAsIC1FSU8pOwomIzQzOwkJcmV0ID0gLUVJTzsKJiM0MzsJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CX0KJiM0MzsKIAl0eGIgPSBjYWxsLSZndDt0eF9wZW5kaW5nOwogCWNhbGwtJmd0O3R4X3BlbmRpbmcgPSBOVUxMOwogCWlmICh0eGIpCkBAIC0zNzksOSAmIzQzOzM4Nyw5IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAogCXJldCA9IC1FTVNHU0laRTsKIAlpZiAoY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICE9IC0xKSB7Ci0JCWlmIChsZW4gLSBjb3BpZWQgJmd0OyBjYWxsLSZndDt0eF90b3RhbF9sZW4pCiYjNDM7CQlpZiAobGVuICZndDsgY2FsbC0mZ3Q7dHhfdG90YWxfbGVuKQogCQkJZ290byBtYXliZV9lcnJvcjsKLQkJaWYgKCFtb3JlICZhbXA7JmFtcDsgbGVuIC0gY29waWVkICE9IGNhbGwtJmd0O3R4X3RvdGFsX2xlbikKJiM0MzsJCWlmICghbW9yZSAmYW1wOyZhbXA7IGxlbiAhPSBjYWxsLSZndDt0eF90b3RhbF9sZW4pCiAJCQlnb3RvIG1heWJlX2Vycm9yOwogCX0KIApAQCAtNDA1LDcgJiM0Mzs0MTMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJCQkgKiB0aGUgc2VjdXJpdHkgaGVhZGVyIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBwYWRkZWQKIAkJCSAqIHJlZ2lvbiAoZW5jIGJsb2Nrc2l6ZSksIGJ1dCB0aGUgdHJhaWxlciBpcyBub3QuCiAJCQkgKi8KLQkJCXJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbXNnX2RhdGFfbGVmdChtc2cpOwomIzQzOwkJCXJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbGVuOwogCQkJdHhiID0gY2FsbC0mZ3Q7Y29ubi0mZ3Q7c2VjdXJpdHktJmd0O2FsbG9jX3R4YnVmKGNhbGwsIHJlbWFpbiwgc2stJmd0O3NrX2FsbG9jYXRpb24pOwogCQkJaWYgKCF0eGIpIHsKIAkJCQlyZXQgPSAtRU5PTUVNOwpAQCAtNDE2LDggJiM0Mzs0MjQsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJCV9kZWJ1ZygmIzM0O2FwcGVuZCYjMzQ7KTsKIAogCQkvKiBhcHBlbmQgbmV4dCBzZWdtZW50IG9mIGRhdGEgdG8gdGhlIGN1cnJlbnQgYnVmZmVyICovCi0JCWlmIChtc2dfZGF0YV9sZWZ0KG1zZykgJmd0OyAwKSB7Ci0JCQlzaXplX3QgY29weSA9IHVtaW4odHhiLSZndDtzcGFjZSwgbXNnX2RhdGFfbGVmdChtc2cpKTsKJiM0MzsJCWlmIChsZW4gJmd0OyAwKSB7CiYjNDM7CQkJc2l6ZV90IGNvcHkgPSBtaW4zKHR4Yi0mZ3Q7c3BhY2UsIGxlbiwgbXNnX2RhdGFfbGVmdChtc2cpKTsKIAogCQkJX2RlYnVnKCYjMzQ7YWRkICV6dSYjMzQ7LCBjb3B5KTsKIAkJCWlmICghY29weV9mcm9tX2l0ZXJfZnVsbCh0eGItJmd0O2RhdGEgJiM0MzsgdHhiLSZndDtvZmZzZXQsCkBAIC00MjgsNiAmIzQzOzQzNiw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAkJCXR4Yi0mZ3Q7bGVuICYjNDM7PSBjb3B5OwogCQkJdHhiLSZndDtvZmZzZXQgJiM0Mzs9IGNvcHk7CiAJCQljb3BpZWQgJiM0Mzs9IGNvcHk7CiYjNDM7CQkJbGVuIC09IGNvcHk7CiAJCQlpZiAoY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICE9IC0xKQogCQkJCWNhbGwtJmd0O3R4X3RvdGFsX2xlbiAtPSBjb3B5OwogCQl9CkBAIC00MzksNjIgJiM0Mzs0NDgsMTAwIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAogCQkvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCYjMzk7cyBub3cgZnVsbCAqLwogCQlpZiAoIXR4Yi0mZ3Q7c3BhY2UgfHwKLQkJICAgIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCAmYW1wOyZhbXA7ICFtb3JlKSkgewotCQkJaWYgKG1zZ19kYXRhX2xlZnQobXNnKSA9PSAwICZhbXA7JmFtcDsgIW1vcmUpCi0JCQkJdHhiLSZndDtmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDsKLQomIzQzOwkJICAgIChsZW4gPT0gMCAmYW1wOyZhbXA7ICFtb3JlKSkgewomIzQzOwkJCS8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZAomIzQzOwkJCSAqIGhhdmUgY29ycnVwdGVkIHRoZSB0eGJ1ZiBjb250ZW50IHdpdGggYSBwYXJ0aWFsCiYjNDM7CQkJICogZW5jcnlwdC4gIEFzc3VtZSB0aGF0IEVOT01FTSBpcyByZXRyeWFibGUsIGJ1dAomIzQzOwkJCSAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC4KJiM0MzsJCQkgKi8KIAkJCXJldCA9IGNhbGwtJmd0O3NlY3VyaXR5LSZndDtzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7Ci0JCQlpZiAocmV0ICZsdDsgMCkKLQkJCQlnb3RvIG91dDsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJCQkvKiBBc3N1bWUgdGhhdCBFTk9NRU0gaGVyZSBtZWFucyB0aGF0IHRoZQomIzQzOwkJCQkgKiBlbmNyeXB0aW9uIGhhc24mIzM5O3QgaGFwcGVuZWQgeWV0LiAgVGhlIGRhdGEgaXMKJiM0MzsJCQkJICogYWxpZ25lZCB0byBhdm9pZCB0aGUgbmVlZCBmb3Igc2xvdyBidWZmZXJpbmcKJiM0MzsJCQkJICogaW4gdGhlIGNyeXB0byB3YWxrLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKHJldCA9PSAtRU5PTUVNKQomIzQzOwkJCQkJZ290byBtYXliZV9lcnJvcl9yZXdpbmQ7CiYjNDM7CQkJCXNldF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgJmFtcDtjYWxsLSZndDtmbGFncyk7CiYjNDM7CQkJCWdvdG8gb3V0X3R4YjsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJaWYgKGxlbiA9PSAwICZhbXA7JmFtcDsgIW1vcmUpCiYjNDM7CQkJCXR4Yi0mZ3Q7ZmxhZ3MgfD0gUlhSUENfTEFTVF9QQUNLRVQ7CiAJCQlyeHJwY19xdWV1ZV9wYWNrZXQocngsIGNhbGwsIHR4Yiwgbm90aWZ5X2VuZF90eCk7CiAJCQl0eGIgPSBOVUxMOwogCQl9Ci0JfSB3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpICZndDsgMCk7CiYjNDM7CX0gd2hpbGUgKGxlbiAmZ3Q7IDAgJmFtcDsmYW1wOyBtc2dfZGF0YV9sZWZ0KG1zZykgJmd0OyAwKTsKIAogc3VjY2VzczoKIAlyZXQgPSBjb3BpZWQ7Ci0JaWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgJmFtcDsmYW1wOwotCSAgICBjYWxsLSZndDtlcnJvciAmbHQ7IDApCi0JCXJldCA9IGNhbGwtJmd0O2Vycm9yOwotb3V0OgomIzQzO291dF90eGI6CiAJY2FsbC0mZ3Q7dHhfcGVuZGluZyA9IHR4YjsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtjYWxsLSZndDt1c2VyX211dGV4KTsKIAlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCByZXQpOwogCXJldHVybiByZXQ7CiAKIGNhbGxfdGVybWluYXRlZDoKIAlyeHJwY19wdXRfdHhidWYodHhiLCByeHJwY190eGJ1Zl9wdXRfc2VuZF9hYm9ydGVkKTsKLQlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCBjYWxsLSZndDtlcnJvcik7Ci0JcmV0dXJuIGNhbGwtJmd0O2Vycm9yOwotCiYjNDM7CWNhbGwtJmd0O3R4X3BlbmRpbmcgPSBOVUxMOwomIzQzOwlyZXQgPSBjYWxsLSZndDtlcnJvcjsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzO21heWJlX2Vycm9yX3Jld2luZDoKJiM0MzsJLyogSWYgd2UgZ290IGEgcmV0cnlhYmxlIGVycm9yIGFmdGVyIGNvcHlpbmcgYWxsIHRoZSBzdXBwbGllZCBkYXRhIGludG8KJiM0MzsJICogdGhlIGxhc3QgcGFja2V0LCB3ZSBuZWVkIHRvIHJld2luZCBhcyBtdWNoIGFzIHdlIGNhbiBzbyB0aGUgY2FsbGVyCiYjNDM7CSAqIGtub3dzIHRoZXkgbmVlZCB0byByZXRyeSB0aGUgc2VuZG1zZy4KJiM0MzsJICovCiYjNDM7CWlmIChjb3BpZWQgJmFtcDsmYW1wOyAhbW9yZSAmYW1wOyZhbXA7ICFsZW4pIHsKJiM0MzsJCXVuc2lnbmVkIGludCByZXdpbmRfYnkgPSB1bWluKGNvcGllZCwgdHhiLSZndDtsZW4pOwomIzQzOwomIzQzOwkJdHhiLSZndDtzcGFjZSAgJiM0Mzs9IHJld2luZF9ieTsKJiM0MzsJCXR4Yi0mZ3Q7bGVuICAgIC09IHJld2luZF9ieTsKJiM0MzsJCXR4Yi0mZ3Q7b2Zmc2V0IC09IHJld2luZF9ieTsKJiM0MzsJCWNvcGllZCAgICAgIC09IHJld2luZF9ieTsKJiM0MzsJCWlmIChjYWxsLSZndDt0eF90b3RhbF9sZW4gIT0gLTEpCiYjNDM7CQkJY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICYjNDM7PSByZXdpbmRfYnk7CiYjNDM7CQlpb3ZfaXRlcl9yZXZlcnQoJmFtcDttc2ctJmd0O21zZ19pdGVyLCByZXdpbmRfYnkpOwomIzQzOwl9CiBtYXliZV9lcnJvcjoKLQlpZiAoY29waWVkKQomIzQzOwlpZiAoY29waWVkKSB7CiYjNDM7CQlpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY2FsbC0mZ3Q7ZXJyb3IgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gY2FsbC0mZ3Q7ZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfdHhiOwomIzQzOwkJfQogCQlnb3RvIHN1Y2Nlc3M7Ci0JZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZ290byBvdXRfdHhiOwogCiBlZmF1bHQ6CiAJcmV0ID0gLUVGQVVMVDsKLQlnb3RvIG91dDsKJiM0MzsJZ290byBvdXRfdHhiOwogCiB3YWl0X2Zvcl9zcGFjZToKIAlyZXQgPSAtRUFHQUlOOwogCWlmIChtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpCiAJCWdvdG8gbWF5YmVfZXJyb3I7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7Ci0JKl9kcm9wcGVkX2xvY2sgPSB0cnVlOwomIzQzOwogCXJldCA9IHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvdyhyeCwgY2FsbCwgJmFtcDt0aW1lbywKIAkJCQkgICAgICAgbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX1dBSVRBTEwpOwogCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIG1heWJlX2Vycm9yOwomIzQzOwkJZ290byBvdXRfbm9sb2NrOwogCWlmIChjYWxsLSZndDtpbnRlcnJ1cHRpYmlsaXR5ID09IFJYUlBDX0lOVEVSUlVQVElCTEUpIHsKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpICZsdDsgMCkgewogCQkJcmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTsKLQkJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfbm9sb2NrOwogCQl9CiAJfSBlbHNlIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogCX0KLQkqX2Ryb3BwZWRfbG9jayA9IGZhbHNlOwogCWdvdG8gcmVsb2FkOwomIzQzO291dF9ub2xvY2s6CiYjNDM7CV9sZWF2ZSgmIzM0OyA9ICVkIFtpbnRyXSYjMzQ7LCByZXQpOwomIzQzOwlyZXR1cm4gY29waWVkID86IHJldDsKIH0KIAogLyoKQEAgLTY2MCw3ICYjNDM7NzA3LDYgQEAgcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLAogaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGw7Ci0JYm9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zIHAgPSB7CkBAIC03NjksMTYgJiM0Mzs4MTUsMTUgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgUlhSUENfQ01EX1NFTkRfREFUQToKLQkJcmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCwgJmFtcDtkcm9wcGVkX2xvY2spOwotCQlicmVhazsKJiM0MzsJCXJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwpOwomIzQzOwkJZ290byBlcnJvcl9wdXQ7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQogCiBvdXRfcHV0X3VubG9jazoKLQlpZiAoIWRyb3BwZWRfbG9jaykKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogZXJyb3JfcHV0OgogCXJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpOwogCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7CkBAIC04MDAsMTUgJiM0Mzs4NDUsMjEgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAgKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHNlbmQgZGF0YSBvbiBhIGNhbGwuICBUaGUgY2FsbCBtdXN0IGJlIGluIGFuIHN0YXRlCiAgKiBhcHByb3ByaWF0ZSB0byBzZW5kaW5nIGRhdGEuICBObyBjb250cm9sIGRhdGEgc2hvdWxkIGJlIHN1cHBsaWVkIGluIEBtc2csCiAgKiBub3Igc2hvdWxkIGFuIGFkZHJlc3MgYmUgc3VwcGxpZWQuICBNU0dfTU9SRSBzaG91bGQgYmUgZmxhZ2dlZCBpZiB0aGVyZSYjMzk7cwotICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZS4KJiM0MzsgKiBtb3JlIGRhdGEgdG8gY29tZSwgb3RoZXJ3aXNlIHRoaXMgZGF0YSB3aWxsIGVuZCB0aGUgdHJhbnNtaXNzaW9uIHBoYXNlIGlmCiYjNDM7ICogYWxsIHRoZSBkYXRhIGlzIGJ1ZmZlcmVkLgomIzQzOyAqCiYjNDM7ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBhIHNob3J0IHNlbmQsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJlCiYjNDM7ICogY2FsbGVkIGFnYWluIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBkYXRhIG9yIHRvIHBpY2sgdXAgYW4gZXJyb3IgdGhhdAomIzQzOyAqIGNhdXNlZCB0aGUgc2hvcnQgc2VuZC4KICAqCi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGJ1ZmZlcmVkIChjb3VsZCBiZSAlMCBpZiBAbGVuIGlzIDAgb3IKJiM0MzsgKiBtc2dfaXRlciBob2xkcyAwIGJ5dGVzKSBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKiBvdGhlcndpc2UuCiAgKi8KIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQkJICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpCiB7Ci0JYm9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJX2VudGVyKCYjMzQ7eyVkfSwmIzM0OywgY2FsbC0mZ3Q7ZGVidWdfaWQpOwpAQCAtODE5LDEyICYjNDM7ODcwLDEwIEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCW11dGV4X2xvY2soJmFtcDtjYWxsLSZndDt1c2VyX211dGV4KTsKIAogCXJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLSZndDtzayksIGNhbGwsIG1zZywgbGVuLAotCQkJICAgICAgbm90aWZ5X2VuZF90eCwgJmFtcDtkcm9wcGVkX2xvY2spOwomIzQzOwkJCSAgICAgIG5vdGlmeV9lbmRfdHgpOwogCWlmIChyZXQgPT0gLUVTSFVURE9XTikKIAkJcmV0ID0gY2FsbC0mZ3Q7ZXJyb3I7CiAKLQlpZiAoIWRyb3BwZWRfbG9jaykKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEzNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBSWFJQQyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZnV6ei13b3J0aHksIHdoYXQgdGhlIGlkZWFsIGNvbmZpZ3VyYXRpb24gbG9va3MgbGlrZSwgYW5kIHdoYXQgc3ltYm9scyB3ZSBzaG91bGQgdGFyZ2V0LiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc2NvcGUgb2YgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHdlIGhhdmU6CgoxLiAgRG9jdW1lbnRhdGlvbiB1cGRhdGVzLCBub3QgdGVycmlibHkgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGJ1dCBnb29kIHRvIGtub3cgdGhleSYjMzk7cmUgdGhlcmUuCjIuICBBIGJ1ZmZlciBzaXplIGZpeCBpbiBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyB0YXJnZXQsIHNvIHdlJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGZvciBjb3ZlcmFnZS4KMy4gIFNvbWUgc2VydmVyIGFzc2lnbm1lbnQgdXBkYXRlcyBpbiBgYWZzX21ha2Vfb3BfY2FsbGAuCjQuICBTaWduaWZpY2FudCBjaGFuZ2VzIGluIHRoZSBSWFJQQyBjb2RlOiBgYWZzX21ha2VfY2FsbGAsIGBhZnNfc2VuZF9lbXB0eV9yZXBseWAsIGFuZCBgYWZzX3NlbmRfc2ltcGxlX3JlcGx5YCBhbGwgaGF2ZSBuZXcgbG9vcHMgYXJvdW5kIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCB3aXRoIHVwZGF0ZWQgZXJyb3IgaGFuZGxpbmcuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJ1Z3MgbGllLCBlc3BlY2lhbGx5IGFyb3VuZCBlcnJvciBjb25kaXRpb25zLgo1LiAgVHJhY2Vwb2ludCBhZGRpdGlvbnMuIFVzZWZ1bCBmb3IgZGVidWdnaW5nIGJ1dCBub3QgZGlyZWN0bHkgZnV6ei1yZWxldmFudC4KNi4gIERlY2xhcmF0aW9ucyBhbmQgZmxhZ3MgaW4gYGFyLWludGVybmFsLmhgLCBpbmNsdWRpbmcgYFJYUlBDX0NBTExfVFhfRVJST1JgLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBlcnJvciBmbGFncy4KNy4gIFVwZGF0ZXMgdG8gY2FsbCBzdGF0ZSBtYW5hZ2VtZW50IGluIGBjYWxsX3N0YXRlLmNgLgo4LiAgQSBjb25uZWN0aW9uIHBva2luZyBvcGVyYXRpb24gdXNpbmcgYHJ4cnBjX2dldF9jb25uZWN0aW9uX21heWJlYC4KOS4gIENyeXB0byB2YWxpZGF0aW9uIGluIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgLCBub3cgdmFsaWRhdGluZyB0aGUgY3J5cHRvIGVuY3R5cGUuIFRoaXMgaXMgaW50cmlndWluZywgbWlnaHQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nIGNyeXB0by1yZWxhdGVkIGJ1Z3MuCjEwLiBSZXF1ZXVlIGFuZCByZWNlaXZlIG1lc3NhZ2UgaGFuZGxpbmcuCjExLiBTZWN1cml0eSBsb2NraW5nIGluIGByeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eWAuCjEyLiBMb29waW5nIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCBpbiBgcnhwZXJmX3Byb2Nlc3NfY2FsbGAuCjEzLiBUaGUgYmlnIG9uZTogYHNlbmRtc2cuY2AuIE1ham9yIHJld3JpdGUgb2Ygc2VuZCBsb2dpYywgZm9jdXNpbmcgb24gZXJyb3IgaGFuZGxpbmcsIGxlbmd0aCBjaGVja3MsIGFuZCBsb2NraW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSB0YXJnZXQuIFRoZSB1c2Ugb2YgYFJYUlBDX0NBTExfVFhfRVJST1JgLCBgbXNnX2RhdGFfbGVmdGAsIGBjb3B5X2Zyb21faXRlcl9mdWxsYCwgYG1pbjNgLCBhbmQgYHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvd2AgYWxsIGluZGljYXRlIGNvbXBsZXggbG9naWMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gd2UgcmVhY2ggdGhlc2UgY2hhbmdlcyBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gVGhhbmtmdWxseSwgQUZcX1JYUlBDIGlzIGEgbmV0d29yayBzb2NrZXQgZmFtaWx5LCBhbmQgQUZTIGlzIGFuIGluLWtlcm5lbCBmaWxlc3lzdGVtLiBTeXprYWxsZXIgcmVndWxhcmx5IGZ1enpleiBBRlxfUlhSUEMsIGFuZCB3ZSBoYXZlIGluLWtlcm5lbCBmaWxlc3lzdGVtcyB0aGF0IG1ha2UgdXNlIG9mIHRoZSBwcm90b2NvbC4gV2UgY2FuIGFjY2VzcyBBRlxfUlhSUEMgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscywgYW5kIGtleSByaW5nIG9wZXJhdGlvbnMgYXJlIGFsc28gYWNjZXNzaWJsZS4gVGhpcyBpcyAqKmhlYXZpbHkqKiByZWFjaGFibGUgY29kZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW1zIHN1YnN5c3RlbXMsIG1ha2luZyBgV29ydGhGdXp6aW5nYCBhIHJlc291bmRpbmcgYHRydWVgLgoKTm93LCBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGRldGVybWluZSB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIEFGXF9SWFJQQywgQUZTLCBSWEdLLCBhbmQgY3J5cHRvXF9rcmI1IChqdXN0IGluIGNhc2UgdGhleSYjMzk7cmUgcmVsZXZhbnQpLiBMZXQmIzM5O3MgbmFpbCBkb3duIHRob3NlIGNvbmZpZ3VyYXRpb25zIHNvIHdlIGNhbiBvcHRpbWl6ZSBvdXIgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIChBRl9SWFJQQ3xBRlNfRlN8UlhHSykmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcnhycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yeHJwYy9LY29uZmlnLTUtXG5uZXQvcnhycGMvS2NvbmZpZzo2OmNvbmZpZyBBRl9SWFJQQ1xubmV0L3J4cnBjL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1J4UlBDIHNlc3Npb24gc29ja2V0c1wmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnPTI1PWlmIEFGX1JYUlBDXG5uZXQvcnhycGMvS2NvbmZpZy0yNi1cbm5ldC9yeHJwYy9LY29uZmlnOjI3OmNvbmZpZyBBRl9SWFJQQ19JUFY2XG5uZXQvcnhycGMvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7SVB2NiBzdXBwb3J0IGZvciBSeFJQQ1wmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTMzLVxubmV0L3J4cnBjL0tjb25maWc6MzQ6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXG5uZXQvcnhycGMvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7SW5qZWN0IHBhY2tldCBsb3NzIGludG8gUnhSUEMgcGFja2V0IHN0cmVhbVwmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnLTM5LVxubmV0L3J4cnBjL0tjb25maWc6NDA6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxubmV0L3J4cnBjL0tjb25maWctNDEtXHRib29sIFwmIzM0O0luamVjdCBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb25cJiMzNDtcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy00OS1cbm5ldC9yeHJwYy9LY29uZmlnOjUwOmNvbmZpZyBBRl9SWFJQQ19ERUJVR1xubmV0L3J4cnBjL0tjb25maWctNTEtXHRib29sIFwmIzM0O1J4UlBDIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L3J4cnBjL0tjb25maWc9NTg9Y29uZmlnIFJYS0FEXG4tLVxubmV0L3J4cnBjL0tjb25maWctNjUtXG5uZXQvcnhycGMvS2NvbmZpZzo2Njpjb25maWcgUlhHS1xubmV0L3J4cnBjL0tjb25maWctNjctXHRib29sIFwmIzM0O1J4UlBDIEdTU0FQSSBzZWN1cml0eVwmIzM0O1xuLS1cbm5ldC9yeHJwYy9LY29uZmlnPTg5PWNvbmZpZyBSWFBFUkZcbi0tXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cbm5ldC9yeHJwYy9LY29uZmlnOjk2OmNvbmZpZyBBRl9SWFJQQ19LVU5JVF9URVNUXG5uZXQvcnhycGMvS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O1J4UlBDIGNyeXB0byBLVW5pdCB0ZXN0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGVzZSBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBvdXQgdGhlIGBmcy9hZnMvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBlbmFibGVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBvcHRpb25zIGludGVycmVsYXRlIHdpdGhpbiB0aGUgQUZTIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uLiBUaGVuLCBJIHNob3VsZCBoZWFkIG92ZXIgdG8gYG5ldC9yeHJwYy9LY29uZmlnYCBhbmQgcmVwZWF0IHRoZSBwcm9jZXNzIGZvciB0aGUgUnhSUEMgbmV0d29yayBwcm90b2NvbC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHR3byBhcmVhcywgaWYgdGhlcmUgYXJlIGFueSwgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkIGFuZCB0aGF0IHRoZSBvdmVyYWxsIGJ1aWxkIGlzIGNsZWFuLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBrZXJuZWwgbW9kdWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEFGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IEFGX1JYUlBDXG4gICA2Olx0XHRzZWxlY3QgRE5TX1JFU09MVkVSXG4gICA3Olx0XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19LUkI1XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBnZXQgYW4gZXhwZXJpbWVudGFsIEFuZHJldyBGaWxlIFN5c3RlbVxuICAxMTpcdFx0ICBkcml2ZXIuIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVuc2VjdXJlZCByZWFkLW9ubHkgQUZTIGFjY2Vzcy5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBBRlNfREVCVUdcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7QUZTIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAyMDpcdFx0aGVscFxuICAyMTpcdFx0ICBTYXkgWSBoZXJlIHRvIG1ha2UgcnVudGltZSBjb250cm9sbGFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIGFwcGVhci5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAyNDpcdFxuICAyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBBRlNfRlNDQUNIRVxuICAyODpcdFx0Ym9vbCBcJiMzNDtQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4gIDI5Olx0XHRkZXBlbmRzIG9uIEFGU19GUz1tIFx1MDAyNlx1MDAyNiBGU0NBQ0hFIHx8IEFGU19GUz15IFx1MDAyNlx1MDAyNiBGU0NBQ0hFPXlcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBBRlMgZGF0YSB0byBiZSBjYWNoZWQgbG9jYWxseSBvbiBkaXNrIHRocm91Z2hcbiAgMzI6XHRcdCAgdGhlIGdlbmVyaWMgZmlsZXN5c3RlbSBjYWNoZSBtYW5hZ2VyXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIEFGU19ERUJVR19DVVJTT1JcbiAgMzU6XHRcdGJvb2wgXCYjMzQ7QUZTIHNlcnZlciBjdXJzb3IgZGVidWdnaW5nXCYjMzQ7XG4gIDM2Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAzNzpcdFx0aGVscFxuICAzODpcdFx0ICBTYXkgWSBoZXJlIHRvIGNhdXNlIHRoZSBjb250ZW50cyBvZiBhIHNlcnZlciBjdXJzb3IgdG8gYmUgZHVtcGVkIHRvXG4gIDM5Olx0XHQgIHRoZSBkbWVzZyBsb2cgaWYgdGhlIHNlcnZlciByb3RhdGlvbiBhbGdvcml0aG0gZmFpbHMgdG8gc3VjY2Vzc2Z1bGx5XG4gIDQwOlx0XHQgIGNvbnRhY3QgYSBzZXJ2ZXIuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgNDM6XHRcbiAgNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIFJYUlBDIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgUlhHSywgUlhQRVJGLCBhbmQgQUZfUlhSUEMuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L3J4cnBjL0tjb25maWdgIGZpbGUuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsYXRpb25zaGlwcyBkZWZpbmVkIHRoZXJlIHRvIHNlZSB3aGljaCBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZXNlIHBpZWNlcyB0byBiZSBlbmFibGVkLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGJ1aWxkIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIGFyZS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGFuZCBJIGNhbiBxdWlja2x5IG1hcCB0aGUgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0aGVyZSBtaWdodCBiZSBzb21lIGludGVycGxheSBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cywgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgY29ubmVjdGVkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFJ4UlBDIHNlc3Npb24gc29ja2V0c1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgQUZfUlhSUENcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1J4UlBDIHNlc3Npb24gc29ja2V0c1wmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9ERVMgaWYgUlhLQURcbiAgMTE6XHRcdHNlbGVjdCBLRVlTXG4gIDEyOlx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgU2F5IFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzIChqdXN0XG4gIDE1Olx0XHQgIHRoZSB0cmFuc3BvcnQgcGFydCwgbm90IHRoZSBwcmVzZW50YXRpb24gcGFydDogKHVuKW1hcnNoYWxsaW5nIGlzXG4gIDE2Olx0XHQgIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uKS5cbiAgMTc6XHRcbiAgMTg6XHRcdCAgVGhlc2UgYXJlIHVzZWQgZm9yIEFGUyBrZXJuZWwgZmlsZXN5c3RlbSBhbmQgdXNlcnNwYWNlIHV0aWxpdGllcy5cbiAgMTk6XHRcbiAgMjA6XHRcdCAgVGhpcyBtb2R1bGUgYXQgdGhlIG1vbWVudCBvbmx5IHN1cHBvcnRzIGNsaWVudCBvcGVyYXRpb25zIGFuZCBpc1xuICAyMTpcdFx0ICBjdXJyZW50bHkgaW5jb21wbGV0ZS5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXG4gIDI0Olx0XG4gIDI1Olx0aWYgQUZfUlhSUENcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQUZfUlhSUENfSVBWNlxuICAyODpcdFx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXCYjMzQ7XG4gIDI5Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgU2F5IFkgaGVyZSB0byBhbGxvdyBBRl9SWFJQQyB0byB1c2UgSVBWNiBVRFAgYXMgd2VsbCBhcyBJUFY0IFVEUCBhc1xuICAzMjpcdFx0ICBpdHMgbmV0d29yayB0cmFuc3BvcnQuXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9MT1NTXG4gIDM1Olx0XHRib29sIFwmIzM0O0luamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cJiMzNDtcbiAgMzY6XHRcdGhlbHBcbiAgMzc6XHRcdCAgU2F5IFkgaGVyZSB0byBpbmplY3QgcGFja2V0IGxvc3MgYnkgZGlzY2FyZGluZyBzb21lIHJlY2VpdmVkIGFuZCBzb21lXG4gIDM4Olx0XHQgIHRyYW5zbWl0dGVkIHBhY2tldHMuXG4gIDM5Olx0XG4gIDQwOlx0Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxuICA0MTpcdFx0Ym9vbCBcJiMzNDtJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXCYjMzQ7XG4gIDQyOlx0XHRkZXBlbmRzIG9uIFNZU0NUTFxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBTYXkgWSBoZXJlIHRvIGluamVjdCBhIGRlbGF5IGludG8gcGFja2V0IHJlY2VwdGlvbiwgYWxsb3dpbmcgYW5cbiAgNDU6XHRcdCAgZXh0ZW5kZWQgUlRUIHRpbWUgdG8gYmUgbW9kZWxsZWQuICBUaGUgZGVsYXkgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmdcbiAgNDY6XHRcdCAgL3Byb2Mvc3lzL25ldC9yeHJwYy9yeHJwY19pbmplY3RfcnhfZGVsYXksIHNldHRpbmcgYSBudW1iZXIgb2ZcbiAgNDc6XHRcdCAgbWlsbGlzZWNvbmRzIHVwIHRvIDAuNXMgKG5vdGUgdGhhdCB0aGUgZ3JhbnVsYXJpdHkgaXMgYWN0dWFsbHkgaW5cbiAgNDg6XHRcdCAgamlmZmllcykuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIEFGX1JYUlBDX0RFQlVHXG4gIDUxOlx0XHRib29sIFwmIzM0O1J4UlBDIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIFNheSBZIGhlcmUgdG8gbWFrZSBydW50aW1lIGNvbnRyb2xsYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXBwZWFyLlxuICA1NDpcdFxuICA1NTpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cbiAgNTY6XHRcbiAgNTc6XHRcbiAgNTg6XHRjb25maWcgUlhLQURcbiAgNTk6XHRcdGJvb2wgXCYjMzQ7UnhSUEMgS2VyYmVyb3Mgc2VjdXJpdHlcJiMzNDtcbiAgNjA6XHRcdGhlbHBcbiAgNjE6XHRcdCAgUHJvdmlkZSBrZXJiZXJvcyA0IGFuZCBBRlMga2FzZXJ2ZXIgc2VjdXJpdHkgaGFuZGxpbmcgZm9yIEFGX1JYUlBDXG4gIDYyOlx0XHQgIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUga2V5IHJldGVudGlvbiBzZXJ2aWNlLlxuICA2MzpcdFxuICA2NDpcdFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgUlhHS1xuICA2NzpcdFx0Ym9vbCBcJiMzNDtSeFJQQyBHU1NBUEkgc2VjdXJpdHlcJiMzNDtcbiAgNjg6XHRcdHNlbGVjdCBDUllQVE9fS1JCNVxuICA2OTpcdFx0c2VsZWN0IENSWVBUT19NQU5BR0VSXG4gIDcwOlx0XHRzZWxlY3QgQ1JZUFRPX0tSQjVFTkNcbiAgNzE6XHRcdHNlbGVjdCBDUllQVE9fQVVUSEVOQ1xuICA3MjpcdFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxuICA3MzpcdFx0c2VsZWN0IENSWVBUT19IQVNIX0lORk9cbiAgNzQ6XHRcdHNlbGVjdCBDUllQVE9fSE1BQ1xuICA3NTpcdFx0c2VsZWN0IENSWVBUT19DTUFDXG4gIDc2Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTFcbiAgNzc6XHRcdHNlbGVjdCBDUllQVE9fU0hBMjU2XG4gIDc4Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTUxMlxuICA3OTpcdFx0c2VsZWN0IENSWVBUT19DQkNcbiAgODA6XHRcdHNlbGVjdCBDUllQVE9fQ1RTXG4gIDgxOlx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICA4MjpcdFx0c2VsZWN0IENSWVBUT19DQU1FTExJQVxuICA4MzpcdFx0aGVscFxuICA4NDpcdFx0ICBQcm92aWRlIHRoZSBHU1NBUEktYmFzZWQgUnhHSyBzZWN1cml0eSBjbGFzcyBmb3IgQUZTLiAgS2V5cyBhcmUgYWRkZWRcbiAgODU6XHRcdCAgd2l0aCBhZGRfa2V5KCkuXG4gIDg2Olx0XG4gIDg3Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LlxuICA4ODpcdFxuICA4OTpcdGNvbmZpZyBSWFBFUkZcbiAgOTA6XHRcdHRyaXN0YXRlIFwmIzM0O1J4UlBDIHRlc3Qgc2VydmljZVwmIzM0O1xuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0ICBQcm92aWRlIGFuIHJ4cGVyZiBzZXJ2aWNlIHRlc3Rlci4gIFRoaXMgbGlzdGVucyBvbiBVRFAgcG9ydCA3MDA5IGZvclxuICA5MzpcdFx0ICBpbmNvbWluZyBjYWxscyBmcm9tIHRoZSByeHBlcmYgcHJvZ3JhbSAoYW4gZXhhbXBsZSBvZiB3aGljaCBjYW4gYmVcbiAgOTQ6XHRcdCAgZm91bmQgaW4gT3BlbkFGUykuXG4gIDk1Olx0XG4gIDk2Olx0Y29uZmlnIEFGX1JYUlBDX0tVTklUX1RFU1RcbiAgOTc6XHRcdHRyaXN0YXRlIFwmIzM0O1J4UlBDIGNyeXB0byBLVW5pdCB0ZXN0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgOTg6XHRcdGRlcGVuZHMgb24gS1VOSVQgXHUwMDI2XHUwMDI2IFJYS0FEXG4gIDk5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuIDEwMDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyZWFkdGggb2YgaXRzIGltcGFjdCBiZWZvcmUgSSBkaWcgaW4uIFRoZSBpbml0aWFsIGluZGljYXRvcnMgYXJlIHBvaW50aW5nIHRvIGEgZmV3IGtleSBhcmVhcyB0aGF0IGFyZSBnb2luZyB0byBkZW1hbmQgbXkgYXR0ZW50aW9uOgoKKiAgICoqYEFGX1JYUlBDYDoqKiBUaGlzIGlzIHRoZSBjb3JlIFJ4UlBDIHByb3RvY29sLCBhbmQgdGhlIHBhdGNoIGhhcyBsYW5kZWQgaW4gc2V2ZXJhbCBmaWxlcyB3aXRoaW4gaXRzIGltcGxlbWVudGF0aW9uOiBgc2VuZG1zZy5jYCwgYGNhbGxfc3RhdGUuY2AsIGBjb25uX29iamVjdC5jYCwgYGtleS5jYCwgYW5kIGByZWN2bXNnLmNgLiBUaGF0JiMzOTtzIGEgbG90IG9mIHRoZSBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aG9zZSBtZXNzYWdlIGludGVyYWN0aW9ucywgY2FsbCBzdGF0ZSBtYW5hZ2VtZW50LCBjb25uZWN0aW9uIG9iamVjdHMgYW5kIGtleSBoYW5kbGluZywgYW5kIHRoZSByZWNlaXZlIHNpZGUgYXJlIGJlaW5nIGFmZmVjdGVkLgoKKiAgICoqYEFGU19GU2A6KiogVGhlIGBmcy9hZnMvYCBkaXJlY3RvcnkgaXMgYW5vdGhlciBjcml0aWNhbCBzaWduYWwuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoJiMzOTtzIHRvdWNoIHRvIGBjbV9zZWN1cml0eS5jYCwgYGludGVybmFsLmhgLCBhbmQgYHJ4cnBjLmNgIG1heSByZWxhdGUgdG8gdGhlIEFGUyBmaWxlc3l0ZW0mIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUlBDIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gc2VlIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZSB1bmRlcmx5aW5nIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gb3IgdGhlIGludGVyYWN0aW9ucyB3aXRoIEFGUyBjbGllbnQgdG9vbHMuCgoqICAgKipgUlhHS2A6KiogVGhlIGBSWEdLYCBmaWxlcyB3aXRoaW4gYG5ldC9yeHJwYy9gIGFyZSBhIHNpZ25hbCBhcyB3ZWxsLiBJdCBsb29rcyBsaWtlIGByeGdrLmNgLCB0aGUga2V5aW5nIGltcGxlbWVudGF0aW9ucyBhcmUgZ2V0dGluZyBhbiB1cGRhdGUuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgIGJlY2F1c2UgaXQgbWF5IGludm9sdmUgaG93IHRoZSBSUEMgYW5kIFJYR0sgd29yayB3aXRoIGFuIG91dHNpZGUgYXBwbGljYXRpb24gbGF5ZXIuCgoqICAgKipgUlhQRVJGYDoqKiBUaGUgYHJ4cGVyZi5jYCBmaWxlIGlzIGdvb2QgYXMgd2VsbC4gSXQgbWF5IGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9uIFJYUlBDLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yaWVzLCBuYW1lbHkgYG5ldC9yeHJwYy9gIGFuZCBgZnMvYWZzL2AsIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3J4cnBjL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBMaW51eCBrZXJuZWwgUnhSUENcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0FGX1JYUlBDKSAmIzQzOz0gcnhycGMub1xuICAgNzpcdFxuICAgODpcdHJ4cnBjLXkgOj0gXFxcbiAgIDk6XHRcdGFmX3J4cnBjLm8gXFxcbiAgMTA6XHRcdGNhbGxfYWNjZXB0Lm8gXFxcbiAgMTE6XHRcdGNhbGxfZXZlbnQubyBcXFxuICAxMjpcdFx0Y2FsbF9vYmplY3QubyBcXFxuICAxMzpcdFx0Y2FsbF9zdGF0ZS5vIFxcXG4gIDE0Olx0XHRjb25uX2NsaWVudC5vIFxcXG4gIDE1Olx0XHRjb25uX2V2ZW50Lm8gXFxcbiAgMTY6XHRcdGNvbm5fb2JqZWN0Lm8gXFxcbiAgMTc6XHRcdGNvbm5fc2VydmljZS5vIFxcXG4gIDE4Olx0XHRpbnB1dC5vIFxcXG4gIDE5Olx0XHRpbnB1dF9yYWNrLm8gXFxcbiAgMjA6XHRcdGluc2VjdXJlLm8gXFxcbiAgMjE6XHRcdGlvX3RocmVhZC5vIFxcXG4gIDIyOlx0XHRrZXkubyBcXFxuICAyMzpcdFx0bG9jYWxfZXZlbnQubyBcXFxuICAyNDpcdFx0bG9jYWxfb2JqZWN0Lm8gXFxcbiAgMjU6XHRcdG1pc2MubyBcXFxuICAyNjpcdFx0bmV0X25zLm8gXFxcbiAgMjc6XHRcdG9vYi5vIFxcXG4gIDI4Olx0XHRvdXRwdXQubyBcXFxuICAyOTpcdFx0cGVlcl9ldmVudC5vIFxcXG4gIDMwOlx0XHRwZWVyX29iamVjdC5vIFxcXG4gIDMxOlx0XHRyZWN2bXNnLm8gXFxcbiAgMzI6XHRcdHJ0dC5vIFxcXG4gIDMzOlx0XHRzZWN1cml0eS5vIFxcXG4gIDM0Olx0XHRzZW5kbXNnLm8gXFxcbiAgMzU6XHRcdHNlcnZlcl9rZXkubyBcXFxuICAzNjpcdFx0c2tidWZmLm8gXFxcbiAgMzc6XHRcdHR4YnVmLm8gXFxcbiAgMzg6XHRcdHV0aWxzLm9cbiAgMzk6XHRcbiAgNDA6XHRyeHJwYy0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgQmFjayBpbnRvIHRoZSBgbmV0L3J4cnBjL01ha2VmaWxlYCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYWRkcmVzc2VkIHRoYXQgaW5pdGlhbCBpc3N1ZSwgYnV0IHRoZXJlJiMzOTtzIGFsd2F5cyBtb3JlIGx1cmtpbmcuIFRpbWUgdG8gZ2V0IGJhY2sgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBuZXQvcnhycGMvTWFrZWZpbGVgLiBXZSBjYW4mIzM5O3QganVzdCBmaXggb25lIHRoaW5nIGFuZCBjYWxsIGl0IGEgZGF5LCBub3QgaW4gYSBjb21wbGV4IHN5c3RlbSBsaWtlIHRoaXMuIEl0JiMzOTtzIHRpbWUgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhlIHJlc3Qgb2YgaXQuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgc3BvdHRpbmcgb2J2aW91cyBlcnJvcnM7IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZCBmbGFncywgdGhlIGxpbmtpbmcgcHJvY2Vzcy4uLiBldmVyeXRoaW5nLiBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBjYXVzZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgd2UgY2FuIGltcGxlbWVudD8gQW55IHJlZHVuZGFuY2llcyB3ZSBjYW4gZWxpbWluYXRlPyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFyZWFzIHdoZXJlIGZ1dHVyZSBjaGFuZ2VzIGNvdWxkIGludHJvZHVjZSByZWdyZXNzaW9ucywgb3Igb3Bwb3J0dW5pdGllcyB0byBpbXByb3ZlIGJ1aWxkIHBlcmZvcm1hbmNlLiBJdCYjMzk7cyBhIGNvbXByZWhlbnNpdmUgYXVkaXQsIGVuc3VyaW5nIHRoaXMgY3JpdGljYWwgcGllY2Ugb2Ygb3VyIGluZnJhc3RydWN0dXJlIGlzIGFzIHJvYnVzdCBhbmQgZWZmaWNpZW50IGFzIHBvc3NpYmxlLiBUaGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMsIGFuZCBJIGludGVuZCB0byBmaW5kIGhpbS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcnhycGMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQxOlx0cnhycGMtJChDT05GSUdfUlhLQUQpICYjNDM7PSByeGthZC5vIGZjcnlwdC5vXG4gIDQyOlx0cnhycGMtJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsLm9cbiAgNDM6XHRyeHJwYy0kKENPTkZJR19SWEdLKSAmIzQzOz0gXFxcbiAgNDQ6XHRcdHJ4Z2subyBcXFxuICA0NTpcdFx0cnhna19hcHAubyBcXFxuICA0NjpcdFx0cnhna19rZGYub1xuICA0NzpcdFxuICA0ODpcdG9iai0kKENPTkZJR19SWFBFUkYpICYjNDM7PSByeHBlcmYub1xuICA0OTpcdG9iai0kKENPTkZJR19LVU5JVCkgJiM0Mzs9IHRlc3RzL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDExNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQ6CgoqKkluaXRpYWwgQ2hlY2twb2ludDogRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gTGFuZHNjYXBlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgcHJvYmxlbSYjMzk7cyBsaWtlbHkgZmlsZXN5c3RlbS1yZWxhdGVkLCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBmcy9hZnMvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBBRlMtc3BlY2lmaWMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGxpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBBRlMgaXMgYmVpbmcgYnVpbHQsIGxpbmtlZCwgYW5kIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGBNYWtlZmlsZWAgd2lsbCByZXZlYWwgdGhlIGtleSBjb21wb25lbnRzOiBvYmplY3QgZmlsZXMsIGxpYnJhcmllcywgaW5jbHVkZSBwYXRocywgYW55IHNwZWNpYWwgZmxhZ3Mgb3IgZGVmaW5lcyBzcGVjaWZpYyB0byB0aGUgQUZTIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZXNlIHdpbGwgZ2V0IG1lIG9uZSBzdGVwIGNsb3NlciB0byBpc29sYXRpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYnVpbGQgc3RyYXRlZ3kuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBtaXNjb25maWd1cmF0aW9ucywgbWlzc2luZyBkZXBlbmRlbmNpZXMsIG9yIGNvbmZsaWN0aW5nIGZsYWdzIHRoYXQgbWlnaHQgYmUgY29udHJpYnV0aW5nIHRvIHRoZSBwcm9ibGVtIEkmIzM5O20gdHJ5aW5nIHRvIHNvbHZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgUmVkIEhhdCBMaW51eCBBRlMgY2xpZW50LlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRrYWZzLXkgOj0gXFxcbiAgIDc6XHRcdGFkZHJfbGlzdC5vIFxcXG4gICA4Olx0XHRhZGRyX3ByZWZzLm8gXFxcbiAgIDk6XHRcdGNhbGxiYWNrLm8gXFxcbiAgMTA6XHRcdGNlbGwubyBcXFxuICAxMTpcdFx0Y21fc2VjdXJpdHkubyBcXFxuICAxMjpcdFx0Y21zZXJ2aWNlLm8gXFxcbiAgMTM6XHRcdGRpci5vIFxcXG4gIDE0Olx0XHRkaXJfZWRpdC5vIFxcXG4gIDE1Olx0XHRkaXJfc2VhcmNoLm8gXFxcbiAgMTY6XHRcdGRpcl9zaWxseS5vIFxcXG4gIDE3Olx0XHRkeW5yb290Lm8gXFxcbiAgMTg6XHRcdGZpbGUubyBcXFxuICAxOTpcdFx0ZmxvY2subyBcXFxuICAyMDpcdFx0ZnNjbGllbnQubyBcXFxuICAyMTpcdFx0ZnNfb3BlcmF0aW9uLm8gXFxcbiAgMjI6XHRcdGZzX3Byb2JlLm8gXFxcbiAgMjM6XHRcdGlub2RlLm8gXFxcbiAgMjQ6XHRcdG1haW4ubyBcXFxuICAyNTpcdFx0bWlzYy5vIFxcXG4gIDI2Olx0XHRtbnRwdC5vIFxcXG4gIDI3Olx0XHRyb3RhdGUubyBcXFxuICAyODpcdFx0cnhycGMubyBcXFxuICAyOTpcdFx0c2VjdXJpdHkubyBcXFxuICAzMDpcdFx0c2VydmVyLm8gXFxcbiAgMzE6XHRcdHNlcnZlcl9saXN0Lm8gXFxcbiAgMzI6XHRcdHN1cGVyLm8gXFxcbiAgMzM6XHRcdHN5bWxpbmsubyBcXFxuICAzNDpcdFx0dmFsaWRhdGlvbi5vIFxcXG4gIDM1Olx0XHR2bGNsaWVudC5vIFxcXG4gIDM2Olx0XHR2bF9hbGlhcy5vIFxcXG4gIDM3Olx0XHR2bF9saXN0Lm8gXFxcbiAgMzg6XHRcdHZsX3Byb2JlLm8gXFxcbiAgMzk6XHRcdHZsX3JvdGF0ZS5vIFxcXG4gIDQwOlx0XHR2b2x1bWUubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc5OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGBmcy9hZnMvTWFrZWZpbGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlIGBmcy9hZnMvTWFrZWZpbGVgIGZpbGUsIHNwZWNpZmljYWxseSBhZnRlciBsaW5lIDQwLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW4gdGhlcmUgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhhdCBzZWN0aW9uLiBJdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIGEgcGFydGljdWxhciBidWlsZCB0YXJnZXQsIGRlcGVuZGVuY3kgZGVjbGFyYXRpb24sIG9yIHBlcmhhcHMgc29tZSBjb25maWd1cmF0aW9uIGxvZ2ljLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsYXRpb24gcHJvY2VzcywgbGlua2VyIGZsYWdzLCBvciBtYXliZSBldmVuIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvZiBzb3VyY2UgZmlsZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCB3aGF0IGV4YWN0bHkgdGhlIGtlcm5lbCBpcyBkb2luZyB3aXRoIEFGUyBhdCB0aGF0IHBvaW50LCBsaWtlIHdoZXJlIGl0IGlzIGNvbXBpbGluZyBpdCBpbiBvciBwZXJoYXBzIHdoaWNoIHBhcnQgb2YgQUZTIGlzIGJlaW5nIGJ1aWx0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQxOlx0XHR3cml0ZS5vIFxcXG4gIDQyOlx0XHR4YXR0ci5vIFxcXG4gIDQzOlx0XHR5ZnNjbGllbnQub1xuICA0NDpcdFxuICA0NTpcdGthZnMtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICA0NjpcdG9iai0kKENPTkZJR19BRlNfRlMpICA6PSBrYWZzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMDkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyYCBhbmQgYGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZWAuIFRoZXkmIzM5O3JlIGNsZWFybHkgcmVsYXRlZCwgYW5kIEkgd2FudCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhleSBmdW5jdGlvbi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogKipXaGVyZSBhcmUgdGhlc2UgdHdvIGZ1bmN0aW9ucyBkZWZpbmVkLCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIHBhcmFtZXRlcnMgdWx0aW1hdGVseSBjb250cm9sIHRoZWlyIGJlaGF2aW9yIG9yIGluY2x1c2lvbj8qKiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgc291cmNlIGZpbGVzIGFuZCBhbnkgcmVsZXZhbnQgYCNpZmRlZmAgYmxvY2tzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZsYWdzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBidWlsdCBpbnRvIHRoZSBmaW5hbCBleGVjdXRhYmxlLiBUaGlzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGNyeXB0b2dyYXBoaWMgY29uZmlndXJhdGlvbiBhbmQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBkaWZmZXJlbnQgZW5jcnlwdGlvbiB0eXBlcyBpbiBLZXJiZXJvcy4gSXQmIzM5O3MgdGltZSB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbnMgYW5kIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgc28gSSBjYW4gZm9ybSBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIHBpZWNlcyBmaXQgaW50byB0aGUgYnJvYWRlciBzZWN1cml0eSBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2NyeXB0by9rcmI1LnJzdD0xMDI9VGhlIGVuY29kaW5nIHR5cGUgaXMgbG9va2VkIHVwIGJ5IG51bWJlciB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOjpcbkRvY3VtZW50YXRpb24vY3J5cHRvL2tyYjUucnN0LTEwMy1cbkRvY3VtZW50YXRpb24vY3J5cHRvL2tyYjUucnN0OjEwNDpcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh1MzIgZW5jdHlwZSk7XG5Eb2N1bWVudGF0aW9uL2NyeXB0by9rcmI1LnJzdC0xMDUtXG4tLVxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYz0xOT1zdGF0aWMgY29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY29uc3Qga3JiNV9zdXBwb3J0ZWRfZW5jdHlwZXNbXSA9IHtcbi0tXG5jcnlwdG8va3JiNS9rcmI1X2FwaS5jLTI4LS8qKlxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYzoyOTogKiBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUgLSBGaW5kIHRoZSBoYW5kbGVyIGZvciBhIEtlcmJlcm9zNSBlbmNyeXB0aW9uIHR5cGVcbmNyeXB0by9rcmI1L2tyYjVfYXBpLmMtMzAtICogQGVuY3R5cGU6IFRoZSBzdGFuZGFyZCBLZXJiZXJvcyBlbmNyeXB0aW9uIHR5cGUgbnVtYmVyXG4tLVxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy0zNC0gKi9cbmNyeXB0by9rcmI1L2tyYjVfYXBpLmM6MzU6Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHUzMiBlbmN0eXBlKVxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy0zNi17XG4tLVxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy00Ny19XG5jcnlwdG8va3JiNS9rcmI1X2FwaS5jOjQ4OkVYUE9SVF9TWU1CT0woY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKTtcbmNyeXB0by9rcmI1L2tyYjVfYXBpLmMtNDktXG4tLVxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYz0xMTg9c3RhdGljIGludCBrcmI1X3Rlc3Rfb25lX3ByZihjb25zdCBzdHJ1Y3Qga3JiNV9wcmZfdGVzdCAqdGVzdClcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMTE5LXtcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmM6MTIwOlx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh0ZXN0LVx1MDAzZWV0eXBlKTtcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMTIxLVx0c3RydWN0IGtyYjVfYnVmZmVyIGtleSA9IHt9LCBvY3RldCA9IHt9LCByZXN1bHQgPSB7fSwgcHJmID0ge307XG4tLVxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYz0yMTA9c3RhdGljIGludCBrcmI1X3Rlc3Rfb25lX2tleShjb25zdCBzdHJ1Y3Qga3JiNV9rZXlfdGVzdCAqdGVzdClcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMjExLXtcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmM6MjEyOlx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh0ZXN0LVx1MDAzZWV0eXBlKTtcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMjEzLVx0c3RydWN0IGtyYjVfYnVmZmVyIGJhc2Vfa2V5ID0ge307XG4tLVxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYz0yNDE9c3RhdGljIGludCBrcmI1X3Rlc3Rfb25lX2VuYyhjb25zdCBzdHJ1Y3Qga3JiNV9lbmNfdGVzdCAqdGVzdCwgdm9pZCAqYnVmKVxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYy0yNDIte1xuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYzoyNDM6XHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICprcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHRlc3QtXHUwMDNlZXR5cGUpO1xuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYy0yNDQtXHRzdHJ1Y3QgY3J5cHRvX2FlYWQgKmNpID0gTlVMTDtcbi0tXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jPTM4MD1zdGF0aWMgaW50IGtyYjVfdGVzdF9vbmVfbWljKGNvbnN0IHN0cnVjdCBrcmI1X21pY190ZXN0ICp0ZXN0LCB2b2lkICpidWYpXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jLTM4MS17XG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jOjM4MjpcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodGVzdC1cdTAwM2VldHlwZSk7XG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jLTM4My1cdHN0cnVjdCBjcnlwdG9fc2hhc2ggKmNpID0gTlVMTDtcbi0tXG5mcy9hZnMvY21fc2VjdXJpdHkuYz0xMjE9aW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldClcbi0tXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0xNDItXHRyZXQgPSAtRU5PUEtHO1xuZnMvYWZzL2NtX3NlY3VyaXR5LmM6MTQzOlx0a3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShLUkI1X0VOQ1RZUEVfQUVTMTI4X0NUU19ITUFDX1NIQTFfOTYpO1xuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMTQ0LVx0aWYgKCFrcmI1KVxuLS1cbmZzL2Fmcy9jbV9zZWN1cml0eS5jPTE4MD1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4tLVxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjA1LVxuZnMvYWZzL2NtX3NlY3VyaXR5LmM6MjA2Olx0Y29ubl9rcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGVuY3R5cGUpO1xuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMjA3LVx0aWYgKCFjb25uX2tyYjUpXG4tLVxuaW5jbHVkZS9jcnlwdG8va3JiNS5oPTg3PXN0cnVjdCBrcmI1X2VuY3R5cGUge1xuLS1cbmluY2x1ZGUvY3J5cHRvL2tyYjUuaC0xMTYtICovXG5pbmNsdWRlL2NyeXB0by9rcmI1Lmg6MTE3OmNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh1MzIgZW5jdHlwZSk7XG5pbmNsdWRlL2NyeXB0by9rcmI1LmgtMTE4LXNpemVfdCBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIoY29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNSxcbi0tXG5uZXQvY2VwaC9jcnlwdG8uYz00MT1zdGF0aWMgaW50IHNldF9rcmI1X3RmbXMoc3RydWN0IGNlcGhfY3J5cHRvX2tleSAqa2V5LCBjb25zdCB1MzIgKmtleV91c2FnZXMsXG4tLVxubmV0L2NlcGgvY3J5cHRvLmMtNTEtXG5uZXQvY2VwaC9jcnlwdG8uYzo1MjpcdGtleS1cdTAwM2VrcmI1X3R5cGUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoXG5uZXQvY2VwaC9jcnlwdG8uYy01My1cdFx0XHQgICAgIEtSQjVfRU5DVFlQRV9BRVMyNTZfQ1RTX0hNQUNfU0hBMzg0XzE5Mik7XG4tLVxubmV0L3J4cnBjL2tleS5jPTE2NT1zdGF0aWMgaW50IHJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhnayhzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwLFxuLS1cbm5ldC9yeHJwYy9rZXkuYy0yMzItXG5uZXQvcnhycGMva2V5LmM6MjMzOlx0aWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodG9rZW4tXHUwMDNlcnhnay1cdTAwM2VlbmN0eXBlKSkge1xubmV0L3J4cnBjL2tleS5jLTIzNC1cdFx0cmV0ID0gLUVOT1BLRztcbi0tXG5uZXQvcnhycGMvcnhnay5jPTIwPXN0YXRpYyBpbnQgcnhna19wcmVwYXJzZV9zZXJ2ZXJfa2V5KHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXG4tLVxubmV0L3J4cnBjL3J4Z2suYy0zNS1cbm5ldC9yeHJwYy9yeGdrLmM6MzY6XHRrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGVuY3R5cGUpO1xubmV0L3J4cnBjL3J4Z2suYy0zNy1cdGlmICgha3JiNSlcbi0tXG5uZXQvcnhycGMvcnhna19rZGYuYz0yMDU9c3RydWN0IHJ4Z2tfY29udGV4dCAqcnhna19nZW5lcmF0ZV90cmFuc3BvcnRfa2V5KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuLS1cbm5ldC9yeHJwYy9yeGdrX2tkZi5jLTIyMi1cbm5ldC9yeHJwYy9yeGdrX2tkZi5jOjIyMzpcdGdrLVx1MDAzZWtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoa2V5LVx1MDAzZWVuY3R5cGUpO1xubmV0L3J4cnBjL3J4Z2tfa2RmLmMtMjI0LVx0aWYgKCFnay1cdTAwM2VrcmI1KVxuLS1cbm5ldC9yeHJwYy9yeGdrX2tkZi5jPTI2OD1pbnQgcnhna19zZXRfdXBfdG9rZW5fY2lwaGVyKGNvbnN0IHN0cnVjdCBrcmI1X2J1ZmZlciAqc2VydmVyX2tleSxcbi0tXG5uZXQvcnhycGMvcnhna19rZGYuYy0yNzYtXG5uZXQvcnhycGMvcnhna19rZGYuYzoyNzc6XHRrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGVuY3R5cGUpO1xubmV0L3J4cnBjL3J4Z2tfa2RmLmMtMjc4LVx0aWYgKCFrcmI1KVxuLS1cbm5ldC9yeHJwYy9yeHBlcmYuYz01ODk9c3RhdGljIGludCByeHBlcmZfYWRkX3lmc19yeGdrX2tleShzdHJ1Y3Qga2V5ICprZXlyaW5nLCB1MzIgZW5jdHlwZSlcbm5ldC9yeHJwYy9yeHBlcmYuYy01OTAte1xubmV0L3J4cnBjL3J4cGVyZi5jOjU5MTpcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XG5uZXQvcnhycGMvcnhwZXJmLmMtNTkyLVx0a2V5X3JlZl90IGtyZWY7XG4tLVxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmM9NDY9c3RhdGljIHZvaWQgZ3NzX2tyYjVfcHJlcGFyZV9lbmN0eXBlX3ByaW9yaXR5X2xpc3Qodm9pZClcbi0tXG5uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYy01NS1cdGZvciAodG90YWwgPSAwLCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShnc3Nfa3JiNV9lbmN0eXBlcyk7IGkmIzQzOyYjNDM7KSB7XG5uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYzo1NjpcdFx0aWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZ3NzX2tyYjVfZW5jdHlwZXNbaV0pKVxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMtNTctXHRcdFx0Y29udGludWU7XG4tLVxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmM9MTIyPWdzc19pbXBvcnRfdjJfY29udGV4dChjb25zdCB2b2lkICpwLCBjb25zdCB2b2lkICplbmQsIHN0cnVjdCBrcmI1X2N0eCAqY3R4LFxuLS1cbm5ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jLTE0Ni1cdFx0Z290byBvdXRfZXJyO1xubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmM6MTQ3Olx0Y3R4LVx1MDAzZWtyYjVlID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGN0eC1cdTAwM2VlbmN0eXBlKTtcbm5ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jLTE0OC1cdGlmICghY3R4LVx1MDAzZWtyYjVlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjkwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIFNjb3BlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbiBzeW1ib2xzOiBgQ09ORklHX0FGX1JYUlBDYCwgYENPTkZJR19BRlNfRlNgLCBgQ09ORklHX1JYR0tgLCBhbmQgYENPTkZJR19SWFBFUkZgLiBUaGUgaW1tZWRpYXRlIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGBDUllQVE9fS1JCNWAuIEl0IHNlZW1zIGJvdGggYFJYR0tgIGFuZCBgQUZTX0ZTYCBkZXBlbmQgb24gYW5kIHNlbGVjdCBgQ1JZUFRPX0tSQjVgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLgoKTm93LCBmb2N1c2luZyBvbiB0aGUgY29yZSBkZXBlbmRlbmNpZXMgb2YgYEFGX1JYUlBDYCBhbmQgYEFGU19GU2AsIEkgc2VlIHRoYXQgYEFGX1JYUlBDYCByZXF1aXJlcyBgSU5FVGAuIGBBRlNfRlNgIGlzIGRlcGVuZGVudCBvbiBgSU5FVGAgYW5kIGFsc28gc2VsZWN0cyBgQUZfUlhSUENgLCBgRE5TX1JFU09MVkVSYCwgYE5FVEZTX1NVUFBPUlRgLCBhbmQsIGltcG9ydGFudGx5LCBgQ1JZUFRPX0tSQjVgLiBUaGlzIGlzIHVzZWZ1bCBjb250ZXh0LgoKTmV4dCwgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBjb25maWd1cmF0aW9ucyBtYW5pZmVzdCBpbiB0aGUgY29kZWJhc2UuIEkmIzM5O20gZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIHRyeWluZyB0byBpZGVudGlmeSB0aGVpciByb2xlczoKCjEuICBgZnMvYWZzL2NtX3NlY3VyaXR5LmNgOiBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIC0gU2VjdXJpdHksIGxpa2VseSBBRlMtc3BlY2lmaWMuCjIuICBgZnMvYWZzL2ludGVybmFsLmhgOiBgYWZzX21ha2Vfb3BfY2FsbGAgLSBBRlMsIGludGVybmFsIGZ1bmN0aW9uIGNhbGwuCjMuICBgZnMvYWZzL3J4cnBjLmNgOiBgYWZzX21ha2VfY2FsbGAsIGBhZnNfc2VuZF9lbXB0eV9yZXBseWAsIGBhZnNfc2VuZF9zaW1wbGVfcmVwbHlgIC0gUlhSUEMvQUZTIGludGVyYWN0aW9uLgo0LiAgYG5ldC9yeHJwYy9jYWxsX3N0YXRlLmNgOiBgcnhycGNfbm90aWZ5X3NvY2tldGAsIGByeHJwY19zZXRfY2FsbF9jb21wbGV0aW9uYCAtIFJYUlBDIGNhbGwgbWFuYWdlbWVudC4KNS4gIGBuZXQvcnhycGMvY29ubl9vYmplY3QuY2A6IGByeHJwY19wb2tlX2Nvbm5gIC0gUlhSUEMgY29ubmVjdGlvbiBtYWludGVuYW5jZS4KNi4gIGBuZXQvcnhycGMva2V5LmNgOiBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYCAtIFJYUlBDL1lGUy9SeEdLIGtleSBwYXJzaW5nLgo3LiAgYG5ldC9yeHJwYy9yZWN2bXNnLmNgOiBgcnhycGNfcmVxdWV1ZV9jYWxsYCwgYHJ4cnBjX3JlY3Ztc2dgIC0gUlhSUEMgbWVzc2FnZSBoYW5kbGluZy4KOC4gIGBuZXQvcnhycGMvcnhnay5jYDogYHJ4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5YCAtIFJYR0sgc2VjdXJpdHkgaW5pdGlhbGl6YXRpb24uCjkuICBgbmV0L3J4cnBjL3J4cGVyZi5jYDogYHJ4cGVyZl9wcm9jZXNzX2NhbGxgIC0gUlhQRVJGIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuCjEwLiBgbmV0L3J4cnBjL3NlbmRtc2cuY2A6IGByeHJwY19zZW5kX2RhdGFgLCBgcnhycGNfZG9fc2VuZG1zZ2AsIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCAtIFJYUlBDIG1lc3NhZ2Ugc2VuZGluZy4KCk5vdywgSSYjMzk7bSBjaGVja2luZyB0aGUgbW9zdCB1c2VmdWwgc3ltYm9scywgdGhlIG9uZXMgSSBjYWxsICYjMzQ7Z29vZCBGb2N1c1N5bWJvbHMmIzM0Oy4gSSYjMzk7dmUgY29tcGlsZWQgYSBsaXN0IG9mIHN5bWJvbHMgYmFzZWQgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IHdlcmUgY2hhbmdlZCBhbmQgbWFya2VkIHRoZW0gZm9yIGNsb3NlciBpbnNwZWN0aW9uOgotIGByeHJwY19zZW5kX2RhdGFgCi0gYHJ4cnBjX2RvX3NlbmRtc2dgCi0gYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgCi0gYHJ4cnBjX3JlY3Ztc2dgCi0gYHJ4cnBjX25vdGlmeV9zb2NrZXRgCi0gYHJ4cnBjX3Bva2VfY29ubmAKLSBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYAotIGByeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eWAKLSBgYWZzX21ha2VfY2FsbGAKLSBgYWZzX3NlbmRfc2ltcGxlX3JlcGx5YAotIGBhZnNfc2VuZF9lbXB0eV9yZXBseWAKLSBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gCi0gYHJ4cGVyZl9wcm9jZXNzX2NhbGxgCgpUaGUgY3J1Y2lhbCB0ZXN0IG5vdyBpcyB1YmlxdWl0eS4gQXJlIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMgKmV2ZXJ5d2hlcmUqIGluIHRoZSBrZXJuZWwsIG9yIGFyZSB0aGV5IHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBzdWJzeXN0ZW0/IEkgc2VlIHRoYXQgYWxsIG9mIHRoZW0gYXJlIHJlbGF0ZWQgdG8gUnhSUEMsIEFGUywgUnhHSywgb3IgUnhQZXJmLiBUaGlzIG1lYW5zIHRoZXkgYXJlIGxvY2FsaXplZC4KClRvIGJlIHRob3JvdWdoLCBJIGhhdmUgdG8gZW5zdXJlIGFsbCByZXF1aXJlZCBjb25maWdzIGFyZSBwcmVzZW50OiBgQUZfUlhSUENgLCBgQUZTX0ZTYCwgYFJYR0tgLCBhbmQgYFJYUEVSRmAgYXJlIGVzc2VudGlhbCwgZ2l2ZW4gd2hhdCBJJiMzOTt2ZSBmb3VuZC4KCkZpbmFsbHksIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlIHRvIHNlZSB3aGF0IGd1YXJkcyBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYC4gSXQgc2VlbXMsIGZyb20gbG9va2luZyBhdCBgbmV0L3J4cnBjL2tleS5jYCwgdGhhdCBgI2lmZGVmIENPTkZJR19SWEdLYCBtYXkgYmUgcHJlc2VudCwgb3IgaXQgbWF5IGFsd2F5cyBiZSBjb21waWxlZCBpbi4gSXQgZGVwZW5kcyBvbiBob3cgaXQgaXMgZ3VhcmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3J4cnBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcnhycGMva2V5LmM9MTM3PXN0YXRpYyB0aW1lNjRfdCByeHJwY19zNjRfdG9fdGltZTY0KHM2NCB0aW1lX2luXzEwMG5zKVxuLS1cbm5ldC9yeHJwYy9rZXkuYy0xNjQtICovXG5uZXQvcnhycGMva2V5LmM6MTY1OnN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG5uZXQvcnhycGMva2V5LmMtMTY2LVx0XHRcdFx0ICAgICAgIHNpemVfdCBkYXRhbGVuLFxuLS1cbm5ldC9yeHJwYy9rZXkuYz0zMDA9c3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHIoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbi0tXG5uZXQvcnhycGMva2V5LmMtMzk1LVx0XHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1lGU19SWEdLOlxubmV0L3J4cnBjL2tleS5jOjM5NjpcdFx0XHRyZXQyID0gcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHByZXAsIGRhdGFsZW4sIHRva2VuLCB0b2tsZW4pO1xubmV0L3J4cnBjL2tleS5jLTM5Ny1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MDAKCQkJCQkJCW91dHB1dDogMjYzCgkJCQkJCQl0aG91Z2h0czogNDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZz10cnVlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gbG9va2luZyBhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbnMsIEkgc2VlIHRoYXQgYGtleS5jYCwgYHJ4Z2suY2AsIGByeHBlcmYuY2AsIGFuZCB0aGUgZW50aXJlIGBhZnMvYCBkaXJlY3RvcnkgYXJlIGNvbXBpbGVkIHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnM6IGBDT05GSUdfQUZfUlhSUENgLCBgQ09ORklHX1JYR0tgLCBgQ09ORklHX1JYUEVSRmAsIGFuZCBgQ09ORklHX0FGU19GU2AsIHJlc3BlY3RpdmVseS4gTmF0dXJhbGx5LCBJIHdhbnQgdG8gdmVyaWZ5IHdoaWNoIGNvbmZpZ3MgYXJlIGF0IHBsYXkgaGVyZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBBRl9SWFJQQ2AsIGBBRlNfRlNgLCBgUlhHS2AsIGFuZCBgUlhQRVJGYC4gVGhlIHViaXF1aXRvdXMgYElORVRgIGRlcGVuZGVuY3kgaXMgaW1wbGljaXRseSB0aGVyZSwgYXMgYEFGX1JYUlBDYCBhbmQgYEFGU19GU2AgcmVseSBvbiBpdC4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYFJYR0tgIGlzIG5lc3RlZCB1bmRlciBgQUZfUlhSUENgLCBhbmQgYFJYUEVSRmAgaGFzIGl0cyBvd24gY29uZmlndXJhdGlvbiBlbnRyeSBpbiB0aGUgYG5ldC9yeHJwYy9LY29uZmlnYCBmaWxlLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogc2hvdWxkIGBXb3J0aEZ1enppbmdgIGJlIHNldCB0byB0cnVlPyBBYnNvbHV0ZWx5LCB5ZXMuIFRoZSBwYXRjaCBzZXJpZXMgZGl2ZXMgZGVlcCBpbnRvIGNvcmUgUnhSUEMgc2VuZC9yZWNlaXZlL2NvbXBsZXRpb24gbG9naWMsIHdoaWNoIGluY2x1ZGVzIFJ4R0sgc2VjdXJpdHkgY29udGV4dCBoYW5kbGluZywgY29ubmVjdGlvbiBwb2tpbmcsIGtleSBwYXJzaW5nIGZvciBSeEdLLCBhbmQgQUZTIGNsaWVudCBzZW5kL3JlcGx5IHBhdGhzLgoKSGVyZSYjMzk7cyB0aGUgcmF0aW9uYWxlOiB0aGUgbW9kaWZpY2F0aW9ucyBpbXBhY3Qga2V5IGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyBsaWtlIGByeHJwY19zZW5kX2RhdGFgLCBub3RpZmljYXRpb24gcm91dGluZXMgbGlrZSBgcnhycGNfbm90aWZ5X3NvY2tldGAgYW5kIGByeHJwY19yZXF1ZXVlX2NhbGxgLCB0aGUgcGFyc2luZyBvZiBrZXlzIHdpdGhpbiBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYCwgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHRocm91Z2ggYHJ4cnBjX3Bva2VfY29ubmAsIGFuZCwgY3J1Y2lhbGx5LCBBRlMgY2xpZW50IGNhbGxzIHZpYSBgYWZzX21ha2VfY2FsbGAgYW5kIGBhZnNfc2VuZF9zaW1wbGVfcmVwbHlgLgoKVGhlIGtleSBoZXJlIGlzIHRoYXQgYWxsIHRoZXNlIG1vZGlmaWVkIHBhdGhzIGFyZSBkaXJlY3RseSBleHBvc2VkIGFuZCBlYXNpbHkgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZXRob2RzLiBXZSBjYW4gZ2V0IHRvIHRoZW0gdGhyb3VnaCBBRl9SWFJQQyBzb2NrZXQgb3BlcmF0aW9ucywgdGhlIGBhZGRfa2V5YCBzeXNjYWxsLCBhbmQgc3RhbmRhcmQgQUZTIGZpbGVzeXN0ZW0gaW50ZXJhY3Rpb25zIHdpdGhpbiBhIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgbGV2ZWwgb2YgdXNlci1zcGFjZSBhY2Nlc3NpYmlsaXR5IG1ha2VzIHRoaXMgY29kZSBhbiBleGNlbGxlbnQgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaHVzLCBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYCBhbmQgaW52b2tlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRl9SWFJQQyYjMzQ7LAogICAgJiMzNDtBRlNfRlMmIzM0OywKICAgICYjMzQ7UlhHSyYjMzQ7LAogICAgJiMzNDtSWFBFUkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyeHJwY19zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7cnhycGNfZG9fc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyeHJwY19rZXJuZWxfc2VuZF9kYXRhJiMzNDssCiAgICAmIzM0O3J4cnBjX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7cnhycGNfbm90aWZ5X3NvY2tldCYjMzQ7LAogICAgJiMzNDtyeHJwY19wb2tlX2Nvbm4mIzM0OywKICAgICYjMzQ7cnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrJiMzNDssCiAgICAmIzM0O3J4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5JiMzNDssCiAgICAmIzM0O2Fmc19tYWtlX2NhbGwmIzM0OywKICAgICYjMzQ7YWZzX3NlbmRfc2ltcGxlX3JlcGx5JiMzNDssCiAgICAmIzM0O2Fmc19zZW5kX2VtcHR5X3JlcGx5JiMzNDssCiAgICAmIzM0O2Fmc19jcmVhdGVfeWZzX2NtX3Rva2VuJiMzNDssCiAgICAmIzM0O3J4cGVyZl9wcm9jZXNzX2NhbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgc29ja2V0IGRhdGEgc2VuZGluZyBhbmQgY29tcGxldGlvbiBub3RpZmljYXRpb24gbWVjaGFuaXNtcywgY29ubmVjdGlvbiByZWZlcmVuY2UgY291bnRpbmcsIGtleSBwYXlsb2FkIHBhcnNpbmcsIGFuZCBpbi1rZXJuZWwgQUZTL3J4cGVyZiBzZW5kIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29yZSBuZXR3b3JraW5nIGFuZCBmaWxlc3lzdGVtIHN0YXRlIG1hY2hpbmVzIGFuZCBlcnJvci1oYW5kbGluZyBwYXRocyB0aGF0IGFyZSBmdWxseSByZWFjaGFibGUgdmlhIEFGX1JYUlBDIHNvY2tldHMsIGtleXMgc3lzY2FsbHMsIGFuZCBBRlMgb3BlcmF0aW9ucyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGX1JYUlBDJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtSWEdLJiMzNDssCiAgICAmIzM0O1JYUEVSRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J4cnBjX3NlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtyeHJwY19kb19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3J4cnBjX2tlcm5lbF9zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7cnhycGNfcmVjdm1zZyYjMzQ7LAogICAgJiMzNDtyeHJwY19ub3RpZnlfc29ja2V0JiMzNDssCiAgICAmIzM0O3J4cnBjX3Bva2VfY29ubiYjMzQ7LAogICAgJiMzNDtyeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2smIzM0OywKICAgICYjMzQ7cnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHkmIzM0OywKICAgICYjMzQ7YWZzX21ha2VfY2FsbCYjMzQ7LAogICAgJiMzNDthZnNfc2VuZF9zaW1wbGVfcmVwbHkmIzM0OywKICAgICYjMzQ7YWZzX3NlbmRfZW1wdHlfcmVwbHkmIzM0OywKICAgICYjMzQ7YWZzX2NyZWF0ZV95ZnNfY21fdG9rZW4mIzM0OywKICAgICYjMzQ7cnhwZXJmX3Byb2Nlc3NfY2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBzb2NrZXQgZGF0YSBzZW5kaW5nIGFuZCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLCBjb25uZWN0aW9uIHJlZmVyZW5jZSBjb3VudGluZywga2V5IHBheWxvYWQgcGFyc2luZywgYW5kIGluLWtlcm5lbCBBRlMvcnhwZXJmIHNlbmQgcGF0aHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZXMgYW5kIGVycm9yLWhhbmRsaW5nIHBhdGhzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQUZfUlhSUEMgc29ja2V0cywga2V5cyBzeXNjYWxscywgYW5kIEFGUyBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQUZfUlhSUEMgYW5kIEFGUyBuZXR3b3JraW5nIGNvZGUgdG8gc3VwcG9ydCBzaG9ydCB3cml0ZXMgaW4gcnhycGNfa2VybmVsX3NlbmRfZGF0YSwgbG9vcCB1bnRpbCBmdWxsIG1lc3NhZ2UgY29uc3VtcHRpb24gaW4gQUZTL3J4cGVyZiBjYWxsZXJzLCBzaW1wbGlmeSBsb2NraW5nIGFyb3VuZCByeHJwY19zZW5kX2RhdGEsIGZpeCB0aGUgdG9rc2l6ZSBjYWxjdWxhdGlvbiBmb3IgWUZTIENNIHRva2VucywgYWRkIGVuY3J5cHRpb24gdHlwZSB2YWxpZGF0aW9uIGZvciBZRlMga2V5cywgYW5kIGNsZWFuIHVwIHNvY2tldCBub3RpZmljYXRpb24gYW5kIGNvbm5lY3Rpb24gcmVmY291bnRpbmcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcbi0gVGhlIHRva2VuIGJ1ZmZlciBpbiBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgemVyb2luZyBhbGwgYnl0ZXM7IHRoZSBmaXggbWVyZWx5IGFjY291bnRzIGZvciB0aGUgNC1ieXRlIGBsZXZlbGAgZmllbGQgaW4gYHRva3NpemVgLlxuLSBJbiBgcnhycGNfc2VuZF9kYXRhYCwgZGF0YSB0cmFuc2ZlciBjb250aW51ZXMgdG8gdXNlIGBjb3B5X2Zyb21faXRlcl9mdWxsYCB3aXRoIGJvdW5kZWQgY29weSBzaXplcyAoYG1pbjNgKSwgYW5kIGVycm9yLXJld2luZCBsb2dpYyB1cGRhdGVzIGJ5dGUgY291bnRlcnMgYXBwcm9wcmlhdGVseS5cbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxuLSBObyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nL3N0cnVjdCBmaWVsZHMgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZC5cblxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZDNhZmYyMzM3NjkwODE2OTNlZGE4ODliNThhYTMyMDNhNjI4OTJlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxNDo0OToyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0CmluZGV4IDg5MjZkYWI4ZTJlNjAuLjdkZjZhZmY3NjQ0YzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdApAQCAtODc5LDE0ICYjNDM7ODc5LDIxIEBAIFRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czoKICAgICAgZXhjbHVzaXZlbHkgdG8gaW4ta2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzLiAgbXNnLm1zZ19mbGFncyBtYXkgYmUgZ2l2ZW4KICAgICAgTVNHX01PUkUgaWYgdGhlcmUgd2lsbCBiZSBzdWJzZXF1ZW50IGRhdGEgc2VuZHMgZm9yIHRoaXMgY2FsbC4KIAotICAgICBUaGUgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzCi0gICAgIG90aGVyIHRoYW4gTVNHX01PUkUuICBsZW4gaXMgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIHRvIHRyYW5zbWl0LgomIzQzOyAgICAgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzCiYjNDM7ICAgICBvdGhlciB0aGFuIE1TR19NT1JFLiAgbGVuIGlzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBhZGQgdG8gdGhlCiYjNDM7ICAgICB0cmFuc21pc3Npb24uICBUaGUgbGFzdC1wYWNrZXQgZmxhZyB3aWxsIG9ubHkgYmUgc2V0IG9uIHRoZSBvdXRnb2luZwomIzQzOyAgICAgcGFja2V0IGlmIE1TR19NT1JFIGlzIG5vdCBzZXQgYW5kIGxlbiBhbW91bnQgb2YgYnl0ZXMgYXJlIGJ1ZmZlcmVkLgogCiAgICAgIG5vdGlmeV9lbmRfcnggY2FuIGJlIE5VTEwgb3IgaXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGJlCiAgICAgIGNhbGxlZCB3aGVuIHRoZSBjYWxsIGNoYW5nZXMgc3RhdGUgdG8gZW5kIHRoZSBUeCBwaGFzZS4gIFRoaXMgZnVuY3Rpb24gaXMKICAgICAgY2FsbGVkIHdpdGggYSBzcGlubG9jayBoZWxkIHRvIHByZXZlbnQgdGhlIGxhc3QgREFUQSBwYWNrZXQgZnJvbSBiZWluZwogICAgICB0cmFuc21pdHRlZCB1bnRpbCB0aGUgZnVuY3Rpb24gcmV0dXJucy4KIAomIzQzOyAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIG9yIGFuIGVycm9yLiAgSXQgd2lsbAomIzQzOyAgICAgcmV0dXJuIHplcm8gb25seSBpZiBsZW4gaXMgMCBvciBpZiBtc2ctJmd0O21zZ19pdGVyIGlzIGVtcHR5LiAgSXQgbWF5IGFsc28KJiM0MzsgICAgIG1ha2UgYSBzaG9ydCB3cml0ZSwgYnVmZmVyaW5nIGxlc3MgdGhhbiB0aGUgYW1vdW50IG9mIGRhdGEgcHJvdmlkZWQgb3IgdGhlCiYjNDM7ICAgICBsZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZSBjYWxsZWQgYWdhaW4uCiYjNDM7CiAgKCMpIFJlY2VpdmUgZGF0YSBmcm9tIGEgY2FsbDo6CiAKIAlpbnQgcnhycGNfa2VybmVsX3JlY3ZfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLApkaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuYwppbmRleCAxMDMxNjhjNzBkZDRkLi41ZWVlZWY3NjFjZjMxIDEwMDY0NAotLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvY21fc2VjdXJpdHkuYwpAQCAtMjM1LDcgJiM0MzsyMzUsNyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsCiAJICoJc3RydWN0IFJYR0tfQXV0aE5hbWUJaWRlbnRpdGllcyZsdDsmZ3Q7OwogCSAqIH07CiAJICovCi0JdG9rc2l6ZSA9IGtleXNpemUgJiM0MzsgOCAmIzQzOyA0ICYjNDM7IDQgJiM0MzsgOCAmIzQzOyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7CiYjNDM7CXRva3NpemUgPSBrZXlzaXplICYjNDM7IDQgJiM0MzsgOCAmIzQzOyA0ICYjNDM7IDQgJiM0MzsgOCAmIzQzOyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7CiAKIAlvZmZzZXQgPSAwOwogCWVuY3NpemUgPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIodG9rZW5fa3JiNSwgS1JCNV9FTkNSWVBUX01PREUsIHRva3NpemUsICZhbXA7b2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggMjkwODczYmFjODliMy4uNjVhMDg2NmNkOGI4NSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmgKQEAgLTE0MTYsMjIgJiM0MzsxNDE2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KQogCQkgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsCi0JCQkJICAgIGdmcF90IGdmcCkKLXsKLQlzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC0mZ3Q7ZXN0YXRlLSZndDthZGRyZXNzZXM7Ci0KLQlvcC0mZ3Q7Y2FsbAk9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpOwotCW9wLSZndDt0eXBlCT0gY2FsbC0mZ3Q7dHlwZTsKLQljYWxsLSZndDtvcAk9IG9wOwotCWNhbGwtJmd0O2tleQk9IG9wLSZndDtrZXk7Ci0JY2FsbC0mZ3Q7aW50cgk9ICEob3AtJmd0O2ZsYWdzICZhbXA7IEFGU19PUEVSQVRJT05fVU5JTlRSKTsKLQljYWxsLSZndDtwZWVyCT0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LSZndDthZGRyc1tvcC0mZ3Q7YWRkcl9pbmRleF0ucGVlcik7Ci0JY2FsbC0mZ3Q7c2VydmljZV9pZCA9IG9wLSZndDtzZXJ2ZXItJmd0O3NlcnZpY2VfaWQ7Ci0JYWZzX21ha2VfY2FsbChjYWxsLCBnZnApOwotCWFmc19wdXRfY2FsbChjYWxsKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAljYWxsLSZndDtpb3ZfbGVuID0gc2l6ZTsKQEAgLTE3NjMsNiAmIzQzOzE3NDcsMjMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKkFGU19WTk9ERV9UT19JKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKQogCXJldHVybiAmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLAomIzQzOwkJCQkgICAgZ2ZwX3QgZ2ZwKQomIzQzO3sKJiM0MzsJc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtJmd0O2VzdGF0ZS0mZ3Q7YWRkcmVzc2VzOwomIzQzOwomIzQzOwlvcC0mZ3Q7Y2FsbAk9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpOwomIzQzOwlvcC0mZ3Q7dHlwZQk9IGNhbGwtJmd0O3R5cGU7CiYjNDM7CWNhbGwtJmd0O29wCT0gb3A7CiYjNDM7CWNhbGwtJmd0O3NlcnZlcgk9IGFmc191c2Vfc2VydmVyKG9wLSZndDtzZXJ2ZXIsIGZhbHNlLCBhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsKTsKJiM0MzsJY2FsbC0mZ3Q7a2V5CT0gb3AtJmd0O2tleTsKJiM0MzsJY2FsbC0mZ3Q7aW50cgk9ICEob3AtJmd0O2ZsYWdzICZhbXA7IEFGU19PUEVSQVRJT05fVU5JTlRSKTsKJiM0MzsJY2FsbC0mZ3Q7cGVlcgk9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC0mZ3Q7YWRkcnNbb3AtJmd0O2FkZHJfaW5kZXhdLnBlZXIpOwomIzQzOwljYWxsLSZndDtzZXJ2aWNlX2lkID0gb3AtJmd0O3NlcnZlci0mZ3Q7c2VydmljZV9pZDsKJiM0MzsJYWZzX21ha2VfY2FsbChjYWxsLCBnZnApOwomIzQzOwlhZnNfcHV0X2NhbGwoY2FsbCk7CiYjNDM7fQomIzQzOwogLyoKICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb24KICAqIG51bWJlciBkZXJpdmVkIGZyb20gdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLiAgSXQgZG9lc24mIzM5O3QgbWF0dGVyIGlmCmRpZmYgLS1naXQgYS9mcy9hZnMvcnhycGMuYyBiL2ZzL2Fmcy9yeHJwYy5jCmluZGV4IGQ4MjkxNjY1N2EzZGQuLjFmNWI2YWE2ODk0MzMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9yeHJwYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9yeHJwYy5jCkBAIC00MTIsMjYgJiM0Mzs0MTIsMzIgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCW1zZy5tc2dfY29udHJvbGxlbgk9IDA7CiAJbXNnLm1zZ19mbGFncwkJPSBNU0dfV0FJVEFMTCB8IChjYWxsLSZndDt3cml0ZV9pdGVyID8gTVNHX01PUkUgOiAwKTsKIAotCXJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsIHJ4Y2FsbCwKLQkJCQkgICAgICZhbXA7bXNnLCBjYWxsLSZndDtyZXF1ZXN0X3NpemUsCi0JCQkJICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJZ290byBlcnJvcl9kb19hYm9ydDsKJiM0MzsJZG8gewomIzQzOwkJcmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLCAmYW1wO21zZywKJiM0MzsJCQkJCSAgICAgbXNnX2RhdGFfbGVmdCgmYW1wO21zZyksCiYjNDM7CQkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJvcl9kb19hYm9ydDsKJiM0MzsJfSB3aGlsZSAobXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKIAogCWlmIChjYWxsLSZndDt3cml0ZV9pdGVyKSB7CiAJCW1zZy5tc2dfaXRlciA9ICpjYWxsLSZndDt3cml0ZV9pdGVyOwogCQltc2cubXNnX2ZsYWdzICZhbXA7PSB+TVNHX01PUkU7CiAJCXRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgJmFtcDttc2cpOwogCi0JCXJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC0mZ3Q7bmV0LSZndDtzb2NrZXQsCi0JCQkJCSAgICAgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywKLQkJCQkJICAgICBpb3ZfaXRlcl9jb3VudCgmYW1wO21zZy5tc2dfaXRlciksCi0JCQkJCSAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7CiYjNDM7CQlkbyB7CiYjNDM7CQkJcmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwKJiM0MzsJCQkJCQkgICAgIGNhbGwtJmd0O3J4Y2FsbCwgJmFtcDttc2csCiYjNDM7CQkJCQkJICAgICBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQkJCXRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgJmFtcDttc2csIHJldCk7CiYjNDM7CQkJCWdvdG8gZXJyb3JfZG9fYWJvcnQ7CiYjNDM7CQkJfQomIzQzOwkJfSB3aGlsZSAobXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKIAkJKmNhbGwtJmd0O3dyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7CiAKLQkJdHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCAmYW1wO21zZywgcmV0KTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycm9yX2RvX2Fib3J0OwomIzQzOwkJdHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCAmYW1wO21zZywgMCk7CiAJfQogCiAJLyogTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQsIHdlIG1heSBoYXZlIHJlY2VpdmVkIHRoZSByZXBseSBvciBhbiBhYm9ydApAQCAtNDQzLDEwICYjNDM7NDQ5LDggQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKQogCXJldHVybjsKIAogZXJyb3JfZG9fYWJvcnQ6Ci0JaWYgKHJldCAhPSAtRUNPTk5BQk9SVEVEKQotCQlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLAotCQkJCQlSWF9VU0VSX0FCT1JULCByZXQsCi0JCQkJCWFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpOwomIzQzOwlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLSZndDtuZXQtJmd0O3NvY2tldCwgcnhjYWxsLAomIzQzOwkJCQlSWF9VU0VSX0FCT1JULCByZXQsIGFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IpOwogCWlmIChjYWxsLSZndDthc3luYykgewogCQlhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQpOwogCQlyZXR1cm47CkBAIC04NTksNiAmIzQzOzg2Myw3IEBAIHZvaWQgYWZzX3NlbmRfZW1wdHlfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsKQogewogCXN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjYWxsLSZndDtuZXQ7CiAJc3RydWN0IG1zZ2hkciBtc2c7CiYjNDM7CWludCByZXQ7CiAKIAlfZW50ZXIoJiMzNDsmIzM0Oyk7CiAKQEAgLTg3MSwyMiAmIzQzOzg3NiwxMyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbCkKIAltc2cubXNnX2NvbnRyb2xsZW4JPSAwOwogCW1zZy5tc2dfZmxhZ3MJCT0gMDsKIAotCXN3aXRjaCAocnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywgMCwKLQkJCQkgICAgICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpKSB7Ci0JY2FzZSAwOgotCQlfbGVhdmUoJiMzNDsgW3JlcGxpZWRdJiMzNDspOwomIzQzOwlyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsICZhbXA7bXNnLCAwLAomIzQzOwkJCQkgICAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSAvKiBTaG91bGRuJiMzOTt0IGJ1ZmZlciBtb3JlIHRoYW4gMCBieXRlcy4gKi8KIAkJcmV0dXJuOwogCi0JY2FzZSAtRU5PTUVNOgotCQlfZGVidWcoJiMzNDtvb20mIzM0Oyk7Ci0JCXJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsCi0JCQkJCVJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sCi0JCQkJCWFmc19hYm9ydF9vb20pOwotCQlmYWxsdGhyb3VnaDsKLQlkZWZhdWx0OgotCQlfbGVhdmUoJiMzNDsgW2Vycm9yXSYjMzQ7KTsKLQkJcmV0dXJuOwotCX0KJiM0MzsJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJUlhHRU5fU1NfTUFSU0hBTCwgcmV0LCBhZnNfYWJvcnRfc2VuZF9lcnJvcik7CiB9CiAKIC8qCkBAIC05MTIsMjAgJiM0Mzs5MDgsMjEgQEAgdm9pZCBhZnNfc2VuZF9zaW1wbGVfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiAJbXNnLm1zZ19jb250cm9sbGVuCT0gMDsKIAltc2cubXNnX2ZsYWdzCQk9IDA7CiAKLQluID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLCAmYW1wO21zZywgbGVuLAotCQkJCSAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJZG8gewomIzQzOwkJbiA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LSZndDtzb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJCSAgICZhbXA7bXNnLCBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCSAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJfSB3aGlsZSAobiAmZ3Q7PSAwICZhbXA7JmFtcDsgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKJiM0MzsKIAlpZiAobiAmZ3Q7PSAwKSB7CiAJCS8qIFN1Y2Nlc3MgKi8KIAkJX2xlYXZlKCYjMzQ7IFtyZXBsaWVkXSYjMzQ7KTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChuID09IC1FTk9NRU0pIHsKLQkJX2RlYnVnKCYjMzQ7b29tJiMzNDspOwotCQlyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtJmd0O3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAotCQkJCQlSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLAotCQkJCQlhZnNfYWJvcnRfb29tKTsKLQl9CiYjNDM7CiYjNDM7CXJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC0mZ3Q7c29ja2V0LCBjYWxsLSZndDtyeGNhbGwsCiYjNDM7CQkJCVJYR0VOX1NTX01BUlNIQUwsIG4sIGFmc19hYm9ydF9zZW5kX2Vycm9yKTsKIAlfbGVhdmUoJiMzNDsgW2Vycm9yXSYjMzQ7KTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaAppbmRleCAxYjNjNDhiNTU5MWRmLi4wNGIwYmI2ODJiODEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaApAQCAtMTQ4LDYgJiM0MzsxNDgsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24gewogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsCSYjMzQ7VU5VIGlzb3J0JiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VwZGF0ZSwJCSYjMzQ7VVBEQVRFICAgJiMzNDspIFwKIAlFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9ieV91dWlkLAkmIzM0O1VTRSB1dWlkICYjMzQ7KSBcCiYjNDM7CUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwsCQkmIzM0O1VTRSBjYWxsICYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY21fY2FsbCwJJiMzNDtVU0UgY20tY2wmIzM0OykgXAogCUVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLAkmIzM0O1VTRSBnY2FwcyYjMzQ7KSBcCiAJRU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYiwJJiMzNDtVU0UgZ3Z1cGMmIzM0OykgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmgKaW5kZXggNzA0YTEwZGU2NjcwMC4uNTJmODcxOGNmNzI1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oCkBAIC0yMCwxNiAmIzQzOzIwLDE2IEBACiAJLyogQUZTIGVycm9ycyAqLwkJCQkJCVwKIAlFTShhZnNfYWJvcnRfZ2VuZXJhbF9lcnJvciwJCSYjMzQ7YWZzLWVycm9yJiMzNDspCQlcCiAJRU0oYWZzX2Fib3J0X2ludGVycnVwdGVkLAkJJiMzNDthZnMtaW50ciYjMzQ7KQkJXAotCUVNKGFmc19hYm9ydF9vb20sCQkJJiMzNDthZnMtb29tJiMzNDspCQlcCiAJRU0oYWZzX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsCQkmIzM0O2Fmcy1vcC1ub3RzdXBwJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfcHJvYmV1dWlkX25lZ2F0aXZlLAkmIzM0O2Fmcy1wcm9iZXV1aWQtbmVnJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yLAkJJiMzNDthZnMtc2VuZC1kYXRhJiMzNDspCVwKJiM0MzsJRU0oYWZzX2Fib3J0X3NlbmRfZXJyb3IsCQkmIzM0O2Fmcy1zZW5kLWVycm9yJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfdW5tYXJzaGFsX2Vycm9yLAkJJiMzNDthZnMtdW5tYXJzaGFsJiMzNDspCVwKIAlFTShhZnNfYWJvcnRfdW5zdXBwb3J0ZWRfc2VjX2NsYXNzLAkmIzM0O2Fmcy11bnN1cC1zZWMtY2xhc3MmIzM0OykJXAogCS8qIHJ4cGVyZiBlcnJvcnMgKi8JCQkJCQlcCiAJRU0ocnhwZXJmX2Fib3J0X2dlbmVyYWxfZXJyb3IsCQkmIzM0O3J4cGVyZi1lcnJvciYjMzQ7KQkJXAotCUVNKHJ4cGVyZl9hYm9ydF9vb20sCQkJJiMzNDtyeHBlcmYtb29tJiMzNDspCQlcCiAJRU0ocnhwZXJmX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsCSYjMzQ7cnhwZXJmLW9wLW5vdHN1cHAmIzM0OykJXAomIzQzOwlFTShyeHBlcmZfYWJvcnRfc2VuZF9lcnJvciwJCSYjMzQ7cnhwZXJmLXNlbmQtZXJyb3ImIzM0OykJXAogCUVNKHJ4cGVyZl9hYm9ydF91bm1hcnNoYWxfZXJyb3IsCSYjMzQ7cnhwZXJmLXVubWFyc2hhbCYjMzQ7KQlcCiAJLyogUnhLQUQgc2VjdXJpdHkgZXJyb3JzICovCQkJCQlcCiAJRU0ocnhrYWRfYWJvcnRfMV9zaG9ydF9jaGVjaywJCSYjMzQ7cnhrYWQxLXNob3J0LWNoZWNrJiMzNDspCVwKQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEAKIAlFTShyeHJwY19lcHJvdG9fd3Jvbmdfc2VjdXJpdHksCQkmIzM0O3dyb25nLXNlYyYjMzQ7KQkJXAogCUVNKHJ4cnBjX3JlY3Ztc2dfZXhjZXNzX2RhdGEsCQkmIzM0O3JlY3Ztc2ctZXhjZXNzJiMzNDspCVwKIAlFTShyeHJwY19yZWN2bXNnX3Nob3J0X2RhdGEsCQkmIzM0O3JlY3Ztc2ctc2hvcnQmIzM0OykJXAomIzQzOwlFTShyeHJwY19zZW5kbXNnX3R4X2Vycm9yLAkJJiMzNDt0eC1lcnJvciYjMzQ7KQkJXAogCUVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLAkJJiMzNDtzZW5kbXNnLWxhdGUmIzM0OykKIAogI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFwKQEAgLTM0Miw2ICYjNDM7MzQzLDcgQEAKIAlFTShyeHJwY19jYWxsX3NlZV9kaXN0cmlidXRlX2Vycm9yLAkmIzM0O1NFRSBkaXN0LWVyciYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfaW5wdXQsCQkmIzM0O1NFRSBpbnB1dCAgICYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkLAkmIzM0O1NFRSBuZnktcmxzZCYjMzQ7KSBcCiYjNDM7CUVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkLAkmIzM0O1NFRSBuZnktc2tpcCYjMzQ7KSBcCiAJRU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZywJCSYjMzQ7U0VFIHJlY3Ztc2cgJiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWUsCSYjMzQ7U0VFIHJlY3YtcnF1JiMzNDspIFwKIAlFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsICYjMzQ7U0VFIHJlY3YtcnFGJiMzNDspIFwKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oIGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKaW5kZXggODY1ZjA1ZmUzN2FiOS4uY2IzNmE3MDlmNTQwZSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL2FyLWludGVybmFsLmgKQEAgLTY0Miw2ICYjNDM7NjQyLDcgQEAgZW51bSByeHJwY19jYWxsX2ZsYWcgewogCVJYUlBDX0NBTExfVFhfTEFTVCwJCS8qIExhc3QgcGFja2V0IGluIFR4IGJ1ZmZlciAoYXQgcnh0eF90b3ApICovCiAJUlhSUENfQ0FMTF9UWF9BTExfQUNLRUQsCS8qIExhc3QgcGFja2V0IGhhcyBiZWVuIGhhcmQtYWNrZWQgKi8KIAlSWFJQQ19DQUxMX1RYX05PX01PUkUsCQkvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovCiYjNDM7CVJYUlBDX0NBTExfVFhfRVJST1IsCQkvKiBUZXJtaW5hbCBlcnJvcjsgY2FsbCBuZWVkcyBhYm9ydCAqLwogCVJYUlBDX0NBTExfU0VORF9QSU5HLAkJLyogQSBwaW5nIHdpbGwgbmVlZCB0byBiZSBzZW50ICovCiAJUlhSUENfQ0FMTF9SRVRSQU5TX1RJTUVPVVQsCS8qIFJldHJhbnNtaXNzaW9uIGR1ZSB0byB0aW1lb3V0IG9jY3VycmVkICovCiAJUlhSUENfQ0FMTF9CRUdBTl9SWF9USU1FUiwJLyogV2UgYmVnYW4gdGhlIGV4cGVjdF9yeF9ieSB0aW1lciAqLwpAQCAtMTEwOSw2ICYjNDM7MTExMCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByeHJwY19pc19jbGllbnRfY2FsbChjb25zdCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIC8qCiAgKiBjYWxsX3N0YXRlLmMKICAqLwomIzQzO3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCk7CiBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsCiAJCQkgICAgICAgZW51bSByeHJwY19jYWxsX2NvbXBsZXRpb24gY29tcGwsCiAJCQkgICAgICAgdTMyIGFib3J0X2NvZGUsCkBAIC0xNDQxLDcgJiM0MzsxNDQzLDYgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyByeHJwY19sb2NhbF9zZXFfb3BzOwogLyoKICAqIHJlY3Ztc2cuYwogICovCi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKik7CiBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtc2doZHIgKiwgc2l6ZV90LCBpbnQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmMKaW5kZXggNmFmYjU0MzczZWJiZi4uMzY0ODEwYzY1Mjc2NiAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jCkBAIC03LDYgJiM0Mzs3LDYwIEBACiAKICNpbmNsdWRlICYjMzQ7YXItaW50ZXJuYWwuaCYjMzQ7CiAKJiM0MzsvKgomIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBfX3J4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnhycGNfc29jayAqcng7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KFJYUlBDX0NBTExfUkVMRUFTRUQsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsKJiM0MzsJcnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC0mZ3Q7c29ja2V0KTsKJiM0MzsJc2sgPSAmYW1wO3J4LSZndDtzazsKJiM0MzsJaWYgKHJ4ICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICZsdDsgUlhSUENfQ0xPU0UpIHsKJiM0MzsJCWlmIChjYWxsLSZndDtub3RpZnlfcngpIHsKJiM0MzsJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrLCBmbGFncyk7CiYjNDM7CQkJY2FsbC0mZ3Q7bm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLSZndDt1c2VyX2NhbGxfSUQpOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjYWxsLSZndDtub3RpZnlfbG9jaywgZmxhZ3MpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2ssIGZsYWdzKTsKJiM0MzsJCQlpZiAobGlzdF9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaykpIHsKJiM0MzsJCQkJcnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7CiYjNDM7CQkJCWxpc3RfYWRkX3RhaWwoJmFtcDtjYWxsLSZndDtyZWN2bXNnX2xpbmssICZhbXA7cngtJmd0O3JlY3Ztc2dfcSk7CiYjNDM7CQkJfQomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKJiM0MzsJCQkJX2RlYnVnKCYjMzQ7Y2FsbCAlcHMmIzM0Oywgc2stJmd0O3NrX2RhdGFfcmVhZHkpOwomIzQzOwkJCQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiYjNDM7ewomIzQzOwlpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSkgewomIzQzOwkJcnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CV9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogVHJhbnNpdGlvbiBhIGNhbGwgdG8gdGhlIGNvbXBsZXRlIHN0YXRlLgogICovCkBAIC0yNSw3ICYjNDM7NzksNyBAQCBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsCiAJcnhycGNfc2V0X2NhbGxfc3RhdGUoY2FsbCwgUlhSUENfQ0FMTF9DT01QTEVURSk7CiAJdHJhY2VfcnhycGNfY2FsbF9jb21wbGV0ZShjYWxsKTsKIAl3YWtlX3VwKCZhbXA7Y2FsbC0mZ3Q7d2FpdHEpOwotCXJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7CiYjNDM7CV9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmMgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuYwppbmRleCAwZWNlNzE3ZGIwZjg1Li4xYmU1MGUwYzljZWU1IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvY29ubl9vYmplY3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuYwpAQCAtMzQsNyAmIzQzOzM0LDEwIEBAIHZvaWQgcnhycGNfcG9rZV9jb25uKHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLCBlbnVtIHJ4cnBjX2Nvbm5fdHJhY2Ugd2h5KQogCXNwaW5fbG9ja19pcnEoJmFtcDtsb2NhbC0mZ3Q7bG9jayk7CiAJYnVzeSA9ICFsaXN0X2VtcHR5KCZhbXA7Y29ubi0mZ3Q7YXR0ZW5kX2xpbmspOwogCWlmICghYnVzeSkgewotCQlyeHJwY19nZXRfY29ubmVjdGlvbihjb25uLCB3aHkpOwomIzQzOwkJaWYgKCFyeHJwY19nZXRfY29ubmVjdGlvbl9tYXliZShjb25uLCB3aHkpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bG9jYWwtJmd0O2xvY2spOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAkJbGlzdF9hZGRfdGFpbCgmYW1wO2Nvbm4tJmd0O2F0dGVuZF9saW5rLCAmYW1wO2xvY2FsLSZndDtjb25uX2F0dGVuZF9xKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bG9jYWwtJmd0O2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2tleS5jIGIvbmV0L3J4cnBjL2tleS5jCmluZGV4IGEwYWE3OGQ4OTI4OTcuLjMwZDZkYjA1MmMyMTYgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMva2V5LmMKQEAgLTE3Miw2ICYjNDM7MTcyLDcgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCwKIAljb25zdCBfX2JlMzIgKnRpY2tldCwgKmtleTsKIAlzNjQgdG1wOwogCXNpemVfdCByYXdfa2V5bGVuLCByYXdfdGt0bGVuLCBrZXlsZW4sIHRrdGxlbjsKJiM0MzsJaW50IHJldCA9IC1FS0VZUkVKRUNURUQ7CiAKIAlfZW50ZXIoJiMzNDsseyV4LCV4LCV4LCV4fSwleCYjMzQ7LAogCSAgICAgICBudG9obCh4ZHJbMF0pLCBudG9obCh4ZHJbMV0pLCBudG9obCh4ZHJbMl0pLCBudG9obCh4ZHJbM10pLApAQCAtMjI5LDYgJiM0MzsyMzAsMTEgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCwKIAl0b2tlbi0mZ3Q7cnhnay0mZ3Q7a2V5LmRhdGEJPSB0b2tlbi0mZ3Q7cnhnay0mZ3Q7X2tleTsKIAl0b2tlbi0mZ3Q7cnhnay0mZ3Q7dGlja2V0LmxlbiA9IHJhd190a3RsZW47CiAKJiM0MzsJaWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodG9rZW4tJmd0O3J4Z2stJmd0O2VuY3R5cGUpKSB7CiYjNDM7CQlyZXQgPSAtRU5PUEtHOwomIzQzOwkJZ290byByZWplY3RfdG9rZW47CiYjNDM7CX0KJiM0MzsKIAlpZiAodG9rZW4tJmd0O3J4Z2stJmd0O2VuZHRpbWUgIT0gMCkgewogCQlleHBpcnkgPSByeHJwY19zNjRfdG9fdGltZTY0KHRva2VuLSZndDtyeGdrLSZndDtlbmR0aW1lKTsKIAkJaWYgKGV4cGlyeSAmbHQ7IDApCkBAIC0yODAsNyAmIzQzOzI4Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsCiAJa2ZyZWUodG9rZW4tJmd0O3J4Z2spOwogCWtmcmVlKHRva2VuKTsKIHJlamVjdDoKLQlyZXR1cm4gLUVLRVlSRUpFQ1RFRDsKJiM0MzsJcmV0dXJuIHJldDsKIGV4cGlyZWQ6CiAJa2ZyZWUodG9rZW4tJmd0O3J4Z2spOwogCWtmcmVlKHRva2VuKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jCmluZGV4IGVmY2JhNGIyZTc0ZjAuLjI4YjIxNDhiNTY5MzYgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9yZWN2bXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3JlY3Ztc2cuYwpAQCAtMTcsMTMgJiM0MzsxNywxMiBAQAogI2luY2x1ZGUgJiMzNDthci1pbnRlcm5hbC5oJiMzNDsKIAogLyoKLSAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXIKLSAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS4KJiM0MzsgKiBSZXF1ZXVlIGEgY2FsbCBmb3IgcmVjdm1zZygpIHRvIHBpY2sgdXAuCiAgKi8KLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKJiM0MztzdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiB7Ci0Jc3RydWN0IHJ4cnBjX3NvY2sgKnJ4OwotCXN0cnVjdCBzb2NrICpzazsKJiM0MzsJc3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay0mZ3Q7c2spOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3J4LSZndDtzazsKIAogCV9lbnRlcigmIzM0OyVkJiMzNDssIGNhbGwtJmd0O2RlYnVnX2lkKTsKIApAQCAtMzIsMzEgJiM0MzszMSwxOCBAQCB2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpCiAJCXJldHVybjsKIAl9CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLSZndDtzb2NrZXQpOwotCXNrID0gJmFtcDtyeC0mZ3Q7c2s7Ci0JaWYgKHJ4ICZhbXA7JmFtcDsgc2stJmd0O3NrX3N0YXRlICZsdDsgUlhSUENfQ0xPU0UpIHsKLQkJaWYgKGNhbGwtJmd0O25vdGlmeV9yeCkgewotCQkJc3Bpbl9sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKLQkJCWNhbGwtJmd0O25vdGlmeV9yeChzaywgY2FsbCwgY2FsbC0mZ3Q7dXNlcl9jYWxsX0lEKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2NhbGwtJmd0O25vdGlmeV9sb2NrKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fbG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKLQkJCWlmIChsaXN0X2VtcHR5KCZhbXA7Y2FsbC0mZ3Q7cmVjdm1zZ19saW5rKSkgewotCQkJCXJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpOwotCQkJCWxpc3RfYWRkX3RhaWwoJmFtcDtjYWxsLSZndDtyZWN2bXNnX2xpbmssICZhbXA7cngtJmd0O3JlY3Ztc2dfcSk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycSgmYW1wO3J4LSZndDtyZWN2bXNnX2xvY2spOwomIzQzOwlpZiAobGlzdF9lbXB0eSgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaykpIHsKJiM0MzsJCXJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO2NhbGwtJmd0O3JlY3Ztc2dfbGluaywgJmFtcDtyeC0mZ3Q7cmVjdm1zZ19xKTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19pcnEoJmFtcDtyeC0mZ3Q7cmVjdm1zZ19sb2NrKTsKIAotCQkJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKLQkJCQlfZGVidWcoJiMzNDtjYWxsICVwcyYjMzQ7LCBzay0mZ3Q7c2tfZGF0YV9yZWFkeSk7Ci0JCQkJc2stJmd0O3NrX2RhdGFfcmVhZHkoc2spOwotCQkJfQotCQl9CiYjNDM7CWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7CiYjNDM7CQlfZGVidWcoJiMzNDtjYWxsICVwcyYjMzQ7LCBzay0mZ3Q7c2tfZGF0YV9yZWFkeSk7CiYjNDM7CQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiAJfQogCi0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJX2xlYXZlKCYjMzQ7JiMzNDspOwogfQogCkBAIC01NjEsNyAmIzQzOzU0Nyw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIAogCWlmICghKGZsYWdzICZhbXA7IE1TR19QRUVLKSAmYW1wOyZhbXA7CiAJICAgICFza2JfcXVldWVfZW1wdHkoJmFtcDtjYWxsLSZndDtyZWN2bXNnX3F1ZXVlKSkKLQkJcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTsKJiM0MzsJCXJ4cnBjX3JlcXVldWVfY2FsbChzb2NrLCBjYWxsKTsKIAlnb3RvIG5vdF95ZXRfY29tcGxldGU7CiAKIGNhbGxfZmFpbGVkOgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmMKaW5kZXggNzdhNjdhY2UxZDI0OC4uYjQ5MjIxZjU3ZjY3NyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3J4Z2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcnhycGMvcnhnay5jCkBAIC0yNTEsOCAmIzQzOzI1MSwxMCBAQCBzdGF0aWMgaW50IHJ4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLAogCQkJCQkgR0ZQX05PRlMpOwogCWlmIChJU19FUlIoZ2spKQogCQlyZXR1cm4gUFRSX0VSUihnayk7CiYjNDM7CXdyaXRlX2xvY2soJmFtcDtjb25uLSZndDtzZWN1cml0eV91c2VfbG9jayk7CiAJY29ubi0mZ3Q7cnhnay5lbmN0eXBlID0gZ2stJmd0O2tyYjUtJmd0O2V0eXBlOwogCWNvbm4tJmd0O3J4Z2sua2V5c1tnay0mZ3Q7a2V5X251bWJlciAmYW1wOyAzXSA9IGdrOwomIzQzOwl3cml0ZV91bmxvY2soJmFtcDtjb25uLSZndDtzZWN1cml0eV91c2VfbG9jayk7CiAKIAlzd2l0Y2ggKGNvbm4tJmd0O3NlY3VyaXR5X2xldmVsKSB7CiAJY2FzZSBSWFJQQ19TRUNVUklUWV9QTEFJTjoKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeHBlcmYuYyBiL25ldC9yeHJwYy9yeHBlcmYuYwppbmRleCBiOGRmNmQyMjMxNGQ2Li5lYmQ1NDIyMmM2NGVmIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvcnhwZXJmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3J4cGVyZi5jCkBAIC01MzgsMTUgJiM0Mzs1MzgsMTggQEAgc3RhdGljIGludCByeHBlcmZfcHJvY2Vzc19jYWxsKHN0cnVjdCByeHBlcmZfY2FsbCAqY2FsbCkKIAlpb3ZbMF0uaW92X2xlbgk9IGxlbjsKIAlpb3ZfaXRlcl9rdmVjKCZhbXA7bXNnLm1zZ19pdGVyLCBXUklURSwgaW92LCAxLCBsZW4pOwogCW1zZy5tc2dfZmxhZ3MgPSAwOwotCW4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwgJmFtcDttc2csIGxlbiwKLQkJCQkgICByeHBlcmZfbm90aWZ5X2VuZF9yZXBseV90eCk7CiYjNDM7CWRvIHsKJiM0MzsJCW4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtJmd0O3J4Y2FsbCwKJiM0MzsJCQkJCSAgICZhbXA7bXNnLCBtc2dfZGF0YV9sZWZ0KCZhbXA7bXNnKSwKJiM0MzsJCQkJCSAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTsKJiM0MzsJfSB3aGlsZSAobiAmZ3Q7PSAwICZhbXA7JmFtcDsgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwKTsKJiM0MzsKIAlpZiAobiAmZ3Q7PSAwKQogCQlyZXR1cm4gMDsgLyogU3VjY2VzcyAqLwogCi0JaWYgKG4gPT0gLUVOT01FTSkKLQkJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwocnhwZXJmX3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAotCQkJCQlSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLAotCQkJCQlyeHBlcmZfYWJvcnRfb29tKTsKJiM0MzsJcnhycGNfa2VybmVsX2Fib3J0X2NhbGwocnhwZXJmX3NvY2tldCwgY2FsbC0mZ3Q7cnhjYWxsLAomIzQzOwkJCQlSWEdFTl9TU19NQVJTSEFMLCBuLAomIzQzOwkJCQlyeHBlcmZfYWJvcnRfc2VuZF9lcnJvcik7CiAJcmV0dXJuIG47CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZW5kbXNnLmMgYi9uZXQvcnhycGMvc2VuZG1zZy5jCmluZGV4IGVkMmM5YTUxMDA1YWQuLjhiYjMyN2RjMjgzM2UgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3J4cnBjL3NlbmRtc2cuYwpAQCAtMzIwLDggJiM0MzszMjAsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX2FsbG9jX3R4cXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCkKIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAkJCSAgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAotCQkJICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsCi0JCQkgICBib29sICpfZHJvcHBlZF9sb2NrKQomIzQzOwkJCSAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KQomIzQzOwlfX3JlbGVhc2VzKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCkKIHsKIAlzdHJ1Y3QgcnhycGNfdHhidWYgKnR4YjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3J4LSZndDtzazsKQEAgLTMzMCwyOSAmIzQzOzMzMCwzNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJYm9vbCBtb3JlID0gbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX01PUkU7CiAJaW50IHJldCwgY29waWVkID0gMDsKIAotCWlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSB7Ci0JCXRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtJmd0O2RlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCwKLQkJCQkgIGNhbGwtJmd0O2NpZCwgY2FsbC0mZ3Q7Y2FsbF9pZCwgY2FsbC0mZ3Q7cnhfY29uc3VtZWQsCi0JCQkJICAwLCAtRVBST1RPKTsKLQkJcmV0dXJuIC1FUFJPVE87Ci0JfQotCiAJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwogCiAJcmV0ID0gcnhycGNfd2FpdF90b19iZV9jb25uZWN0ZWQoY2FsbCwgJmFtcDt0aW1lbyk7CiAJaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAlpZiAoY2FsbC0mZ3Q7Y29ubi0mZ3Q7c3RhdGUgPT0gUlhSUENfQ09OTl9DTElFTlRfVU5TRUNVUkVEKSB7CiAJCXJldCA9IHJ4cnBjX2luaXRfY2xpZW50X2Nvbm5fc2VjdXJpdHkoY2FsbC0mZ3Q7Y29ubik7CiAJCWlmIChyZXQgJmx0OyAwKQotCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJLyogdGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqLwogCXNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spOwogCiByZWxvYWQ6CiYjNDM7CWlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsICZhbXA7Y2FsbC0mZ3Q7ZmxhZ3MpKSkgewomIzQzOwkJdHJhY2VfcnhycGNfYWJvcnQoY2FsbC0mZ3Q7ZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLAomIzQzOwkJCQkgIGNhbGwtJmd0O2NpZCwgY2FsbC0mZ3Q7Y2FsbF9pZCwgY2FsbC0mZ3Q7cnhfY29uc3VtZWQsCiYjNDM7CQkJCSAgMCwgLUVQUk9UTyk7CiYjNDM7CQlyZXQgPSAtRVBST1RPOwomIzQzOwkJZ290byBtYXliZV9lcnJvcjsKJiM0MzsJfQomIzQzOwlpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgJmFtcDtjYWxsLSZndDtmbGFncykpKSB7CiYjNDM7CQl0cmFjZV9yeHJwY19hYm9ydChjYWxsLSZndDtkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvciwKJiM0MzsJCQkJICBjYWxsLSZndDtjaWQsIGNhbGwtJmd0O2NhbGxfaWQsIGNhbGwtJmd0O3J4X2NvbnN1bWVkLAomIzQzOwkJCQkgIDAsIC1FSU8pOwomIzQzOwkJcmV0ID0gLUVJTzsKJiM0MzsJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CX0KJiM0MzsKIAl0eGIgPSBjYWxsLSZndDt0eF9wZW5kaW5nOwogCWNhbGwtJmd0O3R4X3BlbmRpbmcgPSBOVUxMOwogCWlmICh0eGIpCkBAIC0zNzksOSAmIzQzOzM4Nyw5IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAogCXJldCA9IC1FTVNHU0laRTsKIAlpZiAoY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICE9IC0xKSB7Ci0JCWlmIChsZW4gLSBjb3BpZWQgJmd0OyBjYWxsLSZndDt0eF90b3RhbF9sZW4pCiYjNDM7CQlpZiAobGVuICZndDsgY2FsbC0mZ3Q7dHhfdG90YWxfbGVuKQogCQkJZ290byBtYXliZV9lcnJvcjsKLQkJaWYgKCFtb3JlICZhbXA7JmFtcDsgbGVuIC0gY29waWVkICE9IGNhbGwtJmd0O3R4X3RvdGFsX2xlbikKJiM0MzsJCWlmICghbW9yZSAmYW1wOyZhbXA7IGxlbiAhPSBjYWxsLSZndDt0eF90b3RhbF9sZW4pCiAJCQlnb3RvIG1heWJlX2Vycm9yOwogCX0KIApAQCAtNDA1LDcgJiM0Mzs0MTMsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJCQkgKiB0aGUgc2VjdXJpdHkgaGVhZGVyIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBwYWRkZWQKIAkJCSAqIHJlZ2lvbiAoZW5jIGJsb2Nrc2l6ZSksIGJ1dCB0aGUgdHJhaWxlciBpcyBub3QuCiAJCQkgKi8KLQkJCXJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbXNnX2RhdGFfbGVmdChtc2cpOwomIzQzOwkJCXJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbGVuOwogCQkJdHhiID0gY2FsbC0mZ3Q7Y29ubi0mZ3Q7c2VjdXJpdHktJmd0O2FsbG9jX3R4YnVmKGNhbGwsIHJlbWFpbiwgc2stJmd0O3NrX2FsbG9jYXRpb24pOwogCQkJaWYgKCF0eGIpIHsKIAkJCQlyZXQgPSAtRU5PTUVNOwpAQCAtNDE2LDggJiM0Mzs0MjQsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsCiAJCV9kZWJ1ZygmIzM0O2FwcGVuZCYjMzQ7KTsKIAogCQkvKiBhcHBlbmQgbmV4dCBzZWdtZW50IG9mIGRhdGEgdG8gdGhlIGN1cnJlbnQgYnVmZmVyICovCi0JCWlmIChtc2dfZGF0YV9sZWZ0KG1zZykgJmd0OyAwKSB7Ci0JCQlzaXplX3QgY29weSA9IHVtaW4odHhiLSZndDtzcGFjZSwgbXNnX2RhdGFfbGVmdChtc2cpKTsKJiM0MzsJCWlmIChsZW4gJmd0OyAwKSB7CiYjNDM7CQkJc2l6ZV90IGNvcHkgPSBtaW4zKHR4Yi0mZ3Q7c3BhY2UsIGxlbiwgbXNnX2RhdGFfbGVmdChtc2cpKTsKIAogCQkJX2RlYnVnKCYjMzQ7YWRkICV6dSYjMzQ7LCBjb3B5KTsKIAkJCWlmICghY29weV9mcm9tX2l0ZXJfZnVsbCh0eGItJmd0O2RhdGEgJiM0MzsgdHhiLSZndDtvZmZzZXQsCkBAIC00MjgsNiAmIzQzOzQzNiw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAkJCXR4Yi0mZ3Q7bGVuICYjNDM7PSBjb3B5OwogCQkJdHhiLSZndDtvZmZzZXQgJiM0Mzs9IGNvcHk7CiAJCQljb3BpZWQgJiM0Mzs9IGNvcHk7CiYjNDM7CQkJbGVuIC09IGNvcHk7CiAJCQlpZiAoY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICE9IC0xKQogCQkJCWNhbGwtJmd0O3R4X3RvdGFsX2xlbiAtPSBjb3B5OwogCQl9CkBAIC00MzksNjIgJiM0Mzs0NDgsMTAwIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCwKIAogCQkvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCYjMzk7cyBub3cgZnVsbCAqLwogCQlpZiAoIXR4Yi0mZ3Q7c3BhY2UgfHwKLQkJICAgIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCAmYW1wOyZhbXA7ICFtb3JlKSkgewotCQkJaWYgKG1zZ19kYXRhX2xlZnQobXNnKSA9PSAwICZhbXA7JmFtcDsgIW1vcmUpCi0JCQkJdHhiLSZndDtmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDsKLQomIzQzOwkJICAgIChsZW4gPT0gMCAmYW1wOyZhbXA7ICFtb3JlKSkgewomIzQzOwkJCS8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZAomIzQzOwkJCSAqIGhhdmUgY29ycnVwdGVkIHRoZSB0eGJ1ZiBjb250ZW50IHdpdGggYSBwYXJ0aWFsCiYjNDM7CQkJICogZW5jcnlwdC4gIEFzc3VtZSB0aGF0IEVOT01FTSBpcyByZXRyeWFibGUsIGJ1dAomIzQzOwkJCSAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC4KJiM0MzsJCQkgKi8KIAkJCXJldCA9IGNhbGwtJmd0O3NlY3VyaXR5LSZndDtzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7Ci0JCQlpZiAocmV0ICZsdDsgMCkKLQkJCQlnb3RvIG91dDsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJCQkvKiBBc3N1bWUgdGhhdCBFTk9NRU0gaGVyZSBtZWFucyB0aGF0IHRoZQomIzQzOwkJCQkgKiBlbmNyeXB0aW9uIGhhc24mIzM5O3QgaGFwcGVuZWQgeWV0LiAgVGhlIGRhdGEgaXMKJiM0MzsJCQkJICogYWxpZ25lZCB0byBhdm9pZCB0aGUgbmVlZCBmb3Igc2xvdyBidWZmZXJpbmcKJiM0MzsJCQkJICogaW4gdGhlIGNyeXB0byB3YWxrLgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJaWYgKHJldCA9PSAtRU5PTUVNKQomIzQzOwkJCQkJZ290byBtYXliZV9lcnJvcl9yZXdpbmQ7CiYjNDM7CQkJCXNldF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgJmFtcDtjYWxsLSZndDtmbGFncyk7CiYjNDM7CQkJCWdvdG8gb3V0X3R4YjsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJaWYgKGxlbiA9PSAwICZhbXA7JmFtcDsgIW1vcmUpCiYjNDM7CQkJCXR4Yi0mZ3Q7ZmxhZ3MgfD0gUlhSUENfTEFTVF9QQUNLRVQ7CiAJCQlyeHJwY19xdWV1ZV9wYWNrZXQocngsIGNhbGwsIHR4Yiwgbm90aWZ5X2VuZF90eCk7CiAJCQl0eGIgPSBOVUxMOwogCQl9Ci0JfSB3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpICZndDsgMCk7CiYjNDM7CX0gd2hpbGUgKGxlbiAmZ3Q7IDAgJmFtcDsmYW1wOyBtc2dfZGF0YV9sZWZ0KG1zZykgJmd0OyAwKTsKIAogc3VjY2VzczoKIAlyZXQgPSBjb3BpZWQ7Ci0JaWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgJmFtcDsmYW1wOwotCSAgICBjYWxsLSZndDtlcnJvciAmbHQ7IDApCi0JCXJldCA9IGNhbGwtJmd0O2Vycm9yOwotb3V0OgomIzQzO291dF90eGI6CiAJY2FsbC0mZ3Q7dHhfcGVuZGluZyA9IHR4YjsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtjYWxsLSZndDt1c2VyX211dGV4KTsKIAlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCByZXQpOwogCXJldHVybiByZXQ7CiAKIGNhbGxfdGVybWluYXRlZDoKIAlyeHJwY19wdXRfdHhidWYodHhiLCByeHJwY190eGJ1Zl9wdXRfc2VuZF9hYm9ydGVkKTsKLQlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCBjYWxsLSZndDtlcnJvcik7Ci0JcmV0dXJuIGNhbGwtJmd0O2Vycm9yOwotCiYjNDM7CWNhbGwtJmd0O3R4X3BlbmRpbmcgPSBOVUxMOwomIzQzOwlyZXQgPSBjYWxsLSZndDtlcnJvcjsKJiM0MzsJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzO21heWJlX2Vycm9yX3Jld2luZDoKJiM0MzsJLyogSWYgd2UgZ290IGEgcmV0cnlhYmxlIGVycm9yIGFmdGVyIGNvcHlpbmcgYWxsIHRoZSBzdXBwbGllZCBkYXRhIGludG8KJiM0MzsJICogdGhlIGxhc3QgcGFja2V0LCB3ZSBuZWVkIHRvIHJld2luZCBhcyBtdWNoIGFzIHdlIGNhbiBzbyB0aGUgY2FsbGVyCiYjNDM7CSAqIGtub3dzIHRoZXkgbmVlZCB0byByZXRyeSB0aGUgc2VuZG1zZy4KJiM0MzsJICovCiYjNDM7CWlmIChjb3BpZWQgJmFtcDsmYW1wOyAhbW9yZSAmYW1wOyZhbXA7ICFsZW4pIHsKJiM0MzsJCXVuc2lnbmVkIGludCByZXdpbmRfYnkgPSB1bWluKGNvcGllZCwgdHhiLSZndDtsZW4pOwomIzQzOwomIzQzOwkJdHhiLSZndDtzcGFjZSAgJiM0Mzs9IHJld2luZF9ieTsKJiM0MzsJCXR4Yi0mZ3Q7bGVuICAgIC09IHJld2luZF9ieTsKJiM0MzsJCXR4Yi0mZ3Q7b2Zmc2V0IC09IHJld2luZF9ieTsKJiM0MzsJCWNvcGllZCAgICAgIC09IHJld2luZF9ieTsKJiM0MzsJCWlmIChjYWxsLSZndDt0eF90b3RhbF9sZW4gIT0gLTEpCiYjNDM7CQkJY2FsbC0mZ3Q7dHhfdG90YWxfbGVuICYjNDM7PSByZXdpbmRfYnk7CiYjNDM7CQlpb3ZfaXRlcl9yZXZlcnQoJmFtcDttc2ctJmd0O21zZ19pdGVyLCByZXdpbmRfYnkpOwomIzQzOwl9CiBtYXliZV9lcnJvcjoKLQlpZiAoY29waWVkKQomIzQzOwlpZiAoY29waWVkKSB7CiYjNDM7CQlpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY2FsbC0mZ3Q7ZXJyb3IgJmx0OyAwKSB7CiYjNDM7CQkJcmV0ID0gY2FsbC0mZ3Q7ZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfdHhiOwomIzQzOwkJfQogCQlnb3RvIHN1Y2Nlc3M7Ci0JZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZ290byBvdXRfdHhiOwogCiBlZmF1bHQ6CiAJcmV0ID0gLUVGQVVMVDsKLQlnb3RvIG91dDsKJiM0MzsJZ290byBvdXRfdHhiOwogCiB3YWl0X2Zvcl9zcGFjZToKIAlyZXQgPSAtRUFHQUlOOwogCWlmIChtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpCiAJCWdvdG8gbWF5YmVfZXJyb3I7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7Ci0JKl9kcm9wcGVkX2xvY2sgPSB0cnVlOwomIzQzOwogCXJldCA9IHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvdyhyeCwgY2FsbCwgJmFtcDt0aW1lbywKIAkJCQkgICAgICAgbXNnLSZndDttc2dfZmxhZ3MgJmFtcDsgTVNHX1dBSVRBTEwpOwogCWlmIChyZXQgJmx0OyAwKQotCQlnb3RvIG1heWJlX2Vycm9yOwomIzQzOwkJZ290byBvdXRfbm9sb2NrOwogCWlmIChjYWxsLSZndDtpbnRlcnJ1cHRpYmlsaXR5ID09IFJYUlBDX0lOVEVSUlVQVElCTEUpIHsKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpICZsdDsgMCkgewogCQkJcmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTsKLQkJCWdvdG8gbWF5YmVfZXJyb3I7CiYjNDM7CQkJZ290byBvdXRfbm9sb2NrOwogCQl9CiAJfSBlbHNlIHsKIAkJbXV0ZXhfbG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogCX0KLQkqX2Ryb3BwZWRfbG9jayA9IGZhbHNlOwogCWdvdG8gcmVsb2FkOwomIzQzO291dF9ub2xvY2s6CiYjNDM7CV9sZWF2ZSgmIzM0OyA9ICVkIFtpbnRyXSYjMzQ7LCByZXQpOwomIzQzOwlyZXR1cm4gY29waWVkID86IHJldDsKIH0KIAogLyoKQEAgLTY2MCw3ICYjNDM7NzA3LDYgQEAgcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLAogaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGw7Ci0JYm9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJc3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zIHAgPSB7CkBAIC03NjksMTYgJiM0Mzs4MTUsMTUgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgUlhSUENfQ01EX1NFTkRfREFUQToKLQkJcmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCwgJmFtcDtkcm9wcGVkX2xvY2spOwotCQlicmVhazsKJiM0MzsJCXJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwpOwomIzQzOwkJZ290byBlcnJvcl9wdXQ7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQogCiBvdXRfcHV0X3VubG9jazoKLQlpZiAoIWRyb3BwZWRfbG9jaykKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2NhbGwtJmd0O3VzZXJfbXV0ZXgpOwogZXJyb3JfcHV0OgogCXJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpOwogCV9sZWF2ZSgmIzM0OyA9ICVkJiMzNDssIHJldCk7CkBAIC04MDAsMTUgJiM0Mzs4NDUsMjEgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiAgKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHNlbmQgZGF0YSBvbiBhIGNhbGwuICBUaGUgY2FsbCBtdXN0IGJlIGluIGFuIHN0YXRlCiAgKiBhcHByb3ByaWF0ZSB0byBzZW5kaW5nIGRhdGEuICBObyBjb250cm9sIGRhdGEgc2hvdWxkIGJlIHN1cHBsaWVkIGluIEBtc2csCiAgKiBub3Igc2hvdWxkIGFuIGFkZHJlc3MgYmUgc3VwcGxpZWQuICBNU0dfTU9SRSBzaG91bGQgYmUgZmxhZ2dlZCBpZiB0aGVyZSYjMzk7cwotICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZS4KJiM0MzsgKiBtb3JlIGRhdGEgdG8gY29tZSwgb3RoZXJ3aXNlIHRoaXMgZGF0YSB3aWxsIGVuZCB0aGUgdHJhbnNtaXNzaW9uIHBoYXNlIGlmCiYjNDM7ICogYWxsIHRoZSBkYXRhIGlzIGJ1ZmZlcmVkLgomIzQzOyAqCiYjNDM7ICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBhIHNob3J0IHNlbmQsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJlCiYjNDM7ICogY2FsbGVkIGFnYWluIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBkYXRhIG9yIHRvIHBpY2sgdXAgYW4gZXJyb3IgdGhhdAomIzQzOyAqIGNhdXNlZCB0aGUgc2hvcnQgc2VuZC4KICAqCi0gKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGJ1ZmZlcmVkIChjb3VsZCBiZSAlMCBpZiBAbGVuIGlzIDAgb3IKJiM0MzsgKiBtc2dfaXRlciBob2xkcyAwIGJ5dGVzKSBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKiBvdGhlcndpc2UuCiAgKi8KIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQkJICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpCiB7Ci0JYm9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJX2VudGVyKCYjMzQ7eyVkfSwmIzM0OywgY2FsbC0mZ3Q7ZGVidWdfaWQpOwpAQCAtODE5LDEyICYjNDM7ODcwLDEwIEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLAogCW11dGV4X2xvY2soJmFtcDtjYWxsLSZndDt1c2VyX211dGV4KTsKIAogCXJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLSZndDtzayksIGNhbGwsIG1zZywgbGVuLAotCQkJICAgICAgbm90aWZ5X2VuZF90eCwgJmFtcDtkcm9wcGVkX2xvY2spOwomIzQzOwkJCSAgICAgIG5vdGlmeV9lbmRfdHgpOwogCWlmIChyZXQgPT0gLUVTSFVURE9XTikKIAkJcmV0ID0gY2FsbC0mZ3Q7ZXJyb3I7CiAKLQlpZiAoIWRyb3BwZWRfbG9jaykKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7Y2FsbC0mZ3Q7dXNlcl9tdXRleCk7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXMgZm9yIEtNU0FOIFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicmVhayBkb3duIGVhY2ggY2hhbmdlIHN5c3RlbWF0aWNhbGx5IGFuZCBzY3J1dGluaXplIGl0IGZvciBwb3RlbnRpYWwgS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSByaXNrcy4gSSBuZWVkIHRvIGJlIHRob3JvdWdoOyBzbG9wcHkgYW5hbHlzaXMgaGVyZSBjb3VsZCBsZWFkIHRvIGhhcmQtdG8tZGVidWcgaXNzdWVzLgoKRmlyc3QsIEkmIzM5O2xsIGdvIHRocm91Z2ggdGhlIHBhdGNoIGZpbGUgYnkgZmlsZSwgbm90aW5nIHRoZSBjaGFuZ2VzLiBTbywgaXQgbG9va3MgbGlrZToKCjEuICBEb2N1bWVudGF0aW9uIGdvdCBhbiB1cGRhdGUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYC4gVGhhdCYjMzk7cyBtb3N0bHkgY29zbWV0aWMsIGJ1dCBJJiMzOTtsbCBtYWtlIGEgbm90ZSBqdXN0IGluIGNhc2UgZG9jdW1lbnRhdGlvbiBpcyBjcml0aWNhbC4KMi4gIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAgaW4gYGZzL2Fmcy9jbV9zZWN1cml0eS5jYCBoYXMgYSBmaXhlZC1zaXplIGNhbGN1bGF0aW9uIGZvciBgdG9rc2l6ZWAuIE9rYXksIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGNhbGN1bGF0aW9uIGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5kZXJmbG93cy4gVGhlIGNoYW5nZSB0byBhZGQgNCBieXRlcyBjb3VsZCBiZSBzaWduaWZpY2FudC4KMy4gIFNvbWUgcmVmYWN0b3Jpbmcgd2l0aCBgYWZzX21ha2Vfb3BfY2FsbGAgYW5kIHNlcnZlciBoYW5kbGluZyBpbiBgZnMvYWZzL2ludGVybmFsLmhgLiBNb3ZpbmcgdGhhdCBhbmQgYWRkaW5nIGEgc2VydmVyIHVzZSBpcyBhIGRlZmluaXRlIGFyZWEgdG8gc2NydXRpbml6ZSBmb3IgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4KNC4gIFRoZXJlJiMzOTtzIGEgbG9vcCB1c2luZyBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAgaW4gYGZzL2Fmcy9yeHJwYy5jYCwgc28gaXQgd2lsbCBub3cga2VlcCBsb29waW5nIHVudGlsIGFsbCBkYXRhIGlzIHNlbnQuIEkgd2lsbCBuZWVkIHRvIGVuc3VyZSB0aGUgbG9vcCBjb25kaXRpb25zIGFuZCBkYXRhIGhhbmRsaW5nIGFyZSByb2J1c3QgYW5kIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBhcnRpYWwgd3JpdGVzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyB0aGUgaXRlcmF0aXZlIHByb2Nlc3MuCjUuICBBZGRlZCBzb21lIHRyYWNlIGV2ZW50cyBmb3IgQUZTIGFuZCBSeFJQQywgd2hpY2ggd29uJiMzOTt0IHBvc2UgS01TQU4gcmlza3MgZGlyZWN0bHkuIEJ1dCwgYW55IGV4dHJhIHRyYWNlIGV2ZW50IHNob3VsZCBzdGlsbCBiZSBjaGVja2VkIGluIGNvbnRleHQgb2Ygb3RoZXIgY2hhbmdlcy4KNi4gIFNvbWUgaW50ZXJuYWwgUnhSUEMgZnVuY3Rpb25zLCBsaWtlIGBfX3J4cnBjX25vdGlmeV9zb2NrZXRgIGFuZCBgcnhycGNfbm90aWZ5X3NvY2tldGAsIGFyZSBzZXBhcmF0ZWQuIEludGVybmFsIHJlZmFjdG9yaW5nIGNhbiBiZSBkYW5nZXJvdXMgaWYgbm90IGRvbmUgY29ycmVjdGx5LCBzbyBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBjYWxsaW5nIGNvbnRleHRzLgo3LiAgQSBuZXcgZnVuY3Rpb24gYHJ4cnBjX2dldF9jb25uZWN0aW9uX21heWJlYCBpcyBhZGRlZDsgSSYjMzk7bGwgY2hlY2sgaXRzIHVzYWdlIGFuZCBpbml0aWFsaXphdGlvbi4KOC4gIFRoZXJlJiMzOTtzIGEgY2hlY2sgZm9yIGBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGVgIGluIFJ4UlBDIGtleSBoYW5kbGluZy4gU2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzIGFyZSBhbHdheXMgd29ydGggZXh0cmEgc2NydXRpbnkuCjkuICBgcnhycGNfcmVxdWV1ZV9jYWxsYCByZXBsYWNlcyBgcnhycGNfbm90aWZ5X3NvY2tldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgaWYgaXQgaW1wYWN0cyBhbnkgZGF0YSBmbG93IG9yIGVycm9yIGhhbmRsaW5nLgoxMC4gTG9ja2luZyBhZGRlZCBpbiBgcnhnay5jYCDigJMgbG9ja2luZyBpcyBhbHdheXMgZ29vZCBidXQgY2FuIGJlIHByb2JsZW1hdGljLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGNvcnJlY3QgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucy4KMTEuIFJ4UGVyZiBhbHNvIGxvb3BzIG9uIGRhdGEgc2VuZDsgc2FtZSBjb25zaWRlcmF0aW9ucyBhcyBhYm92ZS4KMTIuICBTaWduaWZpY2FudCBjaGFuZ2VzIGluIGBuZXQvcnhycGMvc2VuZG1zZy5jYDoKICAgICogICBMb2NraW5nIGhhbmRsaW5nIHdpdGhpbiBgcnhycGNfc2VuZF9kYXRhYCBpcyBjbGVhbmVkIHVwLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgbG9jay91bmxvY2sgb3BlcmF0aW9ucyBhcmUgY29ycmVjdCBhbmQgdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGxlYWQgdG8gYW55IGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuCiAgICAqICAgU2hvcnQgc2VuZHMsIHJldHVybmluZyBieXRlIGNvdW50IOKAkyBhIGNoYW5nZSBpbiBmdW5jdGlvbiBzZW1hbnRpY3MsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBsb29wIEkgbm90ZWQgYmVmb3JlLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgYnl0ZSBjb3VudCBpcyBjb3JyZWN0IGFuZCB0aGF0IGVycm9yIGhhbmRsaW5nIGlzIHNvdW5kLiBgaW92X2l0ZXJfcmV2ZXJ0YCBpbiBgbWF5YmVfZXJyb3JfcmV3aW5kYCBuZWVkcyBhIGhhcmQgbG9vay4KICAgICogICBUaGUgc2lnbmF0dXJlIGFuZCBzZW1hbnRpY3Mgb2YgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIGhhdmUgYmVlbiBtb2RpZmllZCwgd2l0aCBhIHJldHVybiB2YWx1ZSBjaGFuZ2UuIFRoZSBjYWxsZXJzIG5vdyBsb29wLiBUaGlzIGlzIGNyaXRpY2FsLCBhcyB0aGlzIGFsdGVycyBkYXRhIGZsb3csIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGl0cyBuZXcgdXNhZ2UgdGhyb3VnaG91dCB0aGUga2VybmVsIHRvIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIGRhdGEuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIHB1dCBvbiBteSBLTVNBTiBoYXQuIEkmIzM5O2xsIG5lZWQgdG8gYW5zd2VyIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucyBhcyBJIHNjcnV0aW5pemUgZWFjaCBmaWxlOgoKMS4gICoqRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyoqIEkgbmVlZCB0byBsb29rIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIHNrYiBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMuIEkmIzM5O2xsIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGRhdGEgYmVpbmcgc2VudCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgemVyb2VkIG91dC4KMi4gICoqRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIEkgbmVlZCB0byBjYXJlZnVsbHkgY2hlY2sgYW55IGBpZmAgc3RhdGVtZW50cyBvciBvdGhlciBjb25kaXRpb25hbCBzdHJ1Y3R1cmVzIHRvIGVuc3VyZSB0aGF0IHRoZSB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgY29uZGl0aW9ucyBhcmUgYWx3YXlzIGluaXRpYWxpemVkIGJlZm9yZSB0aGV5IGFyZSB1c2VkLgozLiAgKipEb2VzIHRoaXMgcGF0Y2ggYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzPyoqIEkgd2lsbCBiZSBvbiB0aGUgbG9va291dCBmb3IgYW55IGNhc2VzIHdoZXJlIG5ldyBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9jbV9zZWN1cml0eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjA6XHRcdCAqXHRhZnNfaW50MzJcdGtpbmQ7XG4gMjIxOlx0XHQgKlx0b3BhcXVlXHRcdGRhdGFcdTAwM2NBVVRIREFUQU1BWFx1MDAzZTtcbiAyMjI6XHRcdCAqXHRvcGFxdWVcdFx0ZGlzcGxheVx1MDAzY0FVVEhQUklOVEFCTEVNQVhcdTAwM2U7XG4gMjIzOlx0XHQgKiB9O1xuIDIyNDpcdFx0ICovXG4gMjI1Olx0XHR1dWlkc2l6ZSA9IHNpemVvZihzZXJ2ZXItXHUwMDNldXVpZCk7XG4gMjI2Olx0XHRhdXRoc2l6ZSA9IDQgJiM0MzsgeGRyX2xlbl9vYmplY3QodXVpZHNpemUpICYjNDM7IHhkcl9sZW5fb2JqZWN0KDApO1xuIDIyNzpcdFxuIDIyODpcdFx0Lyogc3RydWN0IFJYR0tfVG9rZW4ge1xuIDIyOTpcdFx0ICpcdHJ4Z2tfa2V5XHRcdEswO1xuIDIzMDpcdFx0ICpcdFJYR0tfTGV2ZWxcdFx0bGV2ZWw7XG4gMjMxOlx0XHQgKlx0cnhna1RpbWVcdFx0c3RhcnR0aW1lO1xuIDIzMjpcdFx0ICpcdGFmc19pbnQzMlx0XHRsaWZldGltZTtcbiAyMzM6XHRcdCAqXHRhZnNfaW50MzJcdFx0Ynl0ZWxpZmU7XG4gMjM0Olx0XHQgKlx0cnhna1RpbWVcdFx0ZXhwaXJhdGlvbnRpbWU7XG4gMjM1Olx0XHQgKlx0c3RydWN0IFJYR0tfQXV0aE5hbWVcdGlkZW50aXRpZXNcdTAwM2NcdTAwM2U7XG4gMjM2Olx0XHQgKiB9O1xuIDIzNzpcdFx0ICovXG4gMjM4Olx0XHR0b2tzaXplID0ga2V5c2l6ZSAmIzQzOyA0ICYjNDM7IDggJiM0MzsgNCAmIzQzOyA0ICYjNDM7IDggJiM0MzsgeGRyX2xlbl9vYmplY3QoYXV0aHNpemUpO1xuIDIzOTpcdFxuIDI0MDpcdFx0b2Zmc2V0ID0gMDtcbiAyNDE6XHRcdGVuY3NpemUgPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIodG9rZW5fa3JiNSwgS1JCNV9FTkNSWVBUX01PREUsIHRva3NpemUsIFx1MDAyNm9mZnNldCk7XG4gMjQyOlx0XG4gMjQzOlx0XHQvKiBzdHJ1Y3QgUlhHS19Ub2tlbkNvbnRhaW5lciB7XG4gMjQ0Olx0XHQgKlx0YWZzX2ludDMyXHRrdm5vO1xuIDI0NTpcdFx0ICpcdGFmc19pbnQzMlx0ZW5jdHlwZTtcbiAyNDY6XHRcdCAqXHRvcGFxdWVcdFx0ZW5jcnlwdGVkX3Rva2VuXHUwMDNjXHUwMDNlO1xuIDI0NzpcdFx0ICogfTtcbiAyNDg6XHRcdCAqL1xuIDI0OTpcdFx0Y29udHNpemUgPSA0ICYjNDM7IDQgJiM0MzsgeGRyX2xlbl9vYmplY3QoZW5jc2l6ZSk7XG4gMjUwOlx0XG4gMjUxOlx0XHQvKiBzdHJ1Y3QgWUZTQXBwRGF0YSB7XG4gMjUyOlx0XHQgKlx0b3ByX3V1aWRcdGluaXRpYXRvclV1aWQ7XG4gMjUzOlx0XHQgKlx0b3ByX3V1aWRcdGFjY2VwdG9yVXVpZDtcbiAyNTQ6XHRcdCAqXHRDYXBhYmlsaXRpZXNcdGNhcHM7XG4gMjU1Olx0XHQgKlx0YWZzX2ludDMyXHRlbmN0eXBlO1xuIDI1NjpcdFx0ICpcdG9wYXF1ZVx0XHRjYWxsYmFja0tleVx1MDAzY1x1MDAzZTtcbiAyNTc6XHRcdCAqXHRvcGFxdWVcdFx0Y2FsbGJhY2tUb2tlblx1MDAzY1x1MDAzZTtcbiAyNTg6XHRcdCAqIH07XG4gMjU5Olx0XHQgKi9cbiAyNjA6XHRcdGFkYXRhc2l6ZSA9IDE2ICYjNDM7IDE2ICYjNDM7XG4gMjYxOlx0XHRcdHhkcl9sZW5fb2JqZWN0KHNpemVvZihjYXBzKSkgJiM0MztcbiAyNjI6XHRcdFx0NCAmIzQzO1xuIDI2MzpcdFx0XHR4ZHJfbGVuX29iamVjdChjb25uX2tyYjUtXHUwMDNla2V5X2xlbikgJiM0MztcbiAyNjQ6XHRcdFx0eGRyX2xlbl9vYmplY3QoY29udHNpemUpO1xuIDI2NTpcdFxuIDI2NjpcdFx0cmV0ID0gLUVOT01FTTtcbiAyNjc6XHRcdGFwcGRhdGEgPSBremFsbG9jKGFkYXRhc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gMjY4Olx0XHRpZiAoIWFwcGRhdGEpXG4gMjY5Olx0XHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRva2VuIENyZWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgYFJYR0tfVG9rZW5gIHN0cnVjdCBkZWZpbml0aW9uLCBJIHNlZSBhIGZldyB0aGluZ3MgdGhhdCBpbW1lZGlhdGVseSBqdW1wIG91dC4gSSByZW1lbWJlciBmcm9tIG15IHByaW9yIGV4cGVyaWVuY2UgdGhhdCB0aGUgc3RydWN0IGNvbW1lbnQgaXRzZWxmIGlzIGtleS4gU3BlY2lmaWNhbGx5LCB0aGUgc3RydWN0IGhhcyBgSzBgLCBgbGV2ZWxgLCBgc3RhcnR0aW1lYCwgYGxpZmV0aW1lYCwgYGJ5dGVsaWZlYCwgYGV4cGlyYXRpb250aW1lYCwgYW5kIHRoZW4gYGlkZW50aXRpZXNgLCB3aGljaCBpcyBhIHZhcmlhYmxlLWxlbmd0aCBhcnJheSBiYXNlZCBvbiBgYXV0aHNpemVgLgoKSSBzZWUgdGhhdCB0aGVyZSB3YXMgYSBwcmV2aW91cyBlcnJvciBpbiBjYWxjdWxhdGluZyBgdG9rc2l6ZWAuIFRoZSBjb21tZW50IHNheXMgdGhlIGlzc3VlIHdhcyB0aGF0IHRoZSBzaXplIGNhbGN1bGF0aW9uIHdhcyBtaXNzaW5nIDQgYnl0ZXMgZm9yIHRoZSBgUlhHS19MZXZlbCBsZXZlbGAgZmllbGQuIFNvLCB0aGUgb2xkIGB0b2tzaXplYCBhbGxvY2F0aW9uIHdvdWxkIGhhdmUgYmVlbiBpbnN1ZmZpY2llbnQuIFRoZSBhZGRpdGlvbiBvZiBgJiM0MzsgNGAgdG8gdGhlIGNhbGN1bGF0aW9uIG5vdyBjb3JyZWN0cyB0aGlzIGJ5IGluY2x1ZGluZyB0aGUgc2l6ZSBvZiBgUlhHS19MZXZlbCBsZXZlbGAsIGVuc3VyaW5nIHdlIGFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlIGVudGlyZSB0b2tlbiBzdHJ1Y3R1cmUuIFRoZSB0b2tlbiBhbGxvY2F0aW9uIHNpemUgc2VlbXMgZ29vZCBub3cuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBgdG9rYCB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlIHRva2VuIGl0c2VsZiwgaXMgYWxsb2NhdGVkIGFuZCBob3cgaXRzIGZpZWxkcyBhcmUgcG9wdWxhdGVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9jbV9zZWN1cml0eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdHhkciA9IGFwcGRhdGE7XG4gMjcxOlx0XG4gMjcyOlx0XHRtZW1jcHkoeGRyLCBcdTAwMjZuZXQtXHUwMDNldXVpZCwgMTYpO1x0XHQvKiBhcHBkYXRhLmluaXRpYXRvclV1aWQgKi9cbiAyNzM6XHRcdHhkciAmIzQzOz0gMTYgLyA0O1xuIDI3NDpcdFx0bWVtY3B5KHhkciwgXHUwMDI2c2VydmVyLVx1MDAzZXV1aWQsIDE2KTtcdFx0LyogYXBwZGF0YS5hY2NlcHRvclV1aWQgKi9cbiAyNzU6XHRcdHhkciAmIzQzOz0gMTYgLyA0O1xuIDI3NjpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubChBUlJBWV9TSVpFKGNhcHMpKTtcdC8qIGFwcGRhdGEuY2Fwcy5sZW4gKi9cbiAyNzc6XHRcdG1lbWNweSh4ZHIsIFx1MDAyNmNhcHMsIHNpemVvZihjYXBzKSk7XHQvKiBhcHBkYXRhLmNhcHMgKi9cbiAyNzg6XHRcdHhkciAmIzQzOz0gQVJSQVlfU0laRShjYXBzKTtcbiAyNzk6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwoY29ubl9rcmI1LVx1MDAzZWV0eXBlKTtcdC8qIGFwcGRhdGEuZW5jdHlwZSAqL1xuIDI4MDpcdFxuIDI4MTpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubChjb25uX2tyYjUtXHUwMDNla2V5X2xlbik7XHQvKiBhcHBkYXRhLmNhbGxiYWNrS2V5LmxlbiAqL1xuIDI4MjpcdFx0SzAgPSB4ZHI7XG4gMjgzOlx0XHRnZXRfcmFuZG9tX2J5dGVzKEswLCBjb25uX2tyYjUtXHUwMDNla2V5X2xlbik7IC8qIGFwcGRhdGEuY2FsbGJhY2tLZXkuZGF0YSAqL1xuIDI4NDpcdFx0eGRyICYjNDM7PSB4ZHJfcm91bmRfdXAoY29ubl9rcmI1LVx1MDAzZWtleV9sZW4pIC8gNDtcbiAyODU6XHRcbiAyODY6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwoY29udHNpemUpO1x0XHQvKiBhcHBkYXRhLmNhbGxiYWNrVG9rZW4ubGVuICovXG4gMjg3Olx0XHQqeGRyJiM0MzsmIzQzOyA9IGh0b25sKDEpO1x0XHRcdC8qIGNvbnQua3ZubyAqL1xuIDI4ODpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCh0b2tlbl9rcmI1LVx1MDAzZWV0eXBlKTtcdC8qIGNvbnQuZW5jdHlwZSAqL1xuIDI4OTpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubChlbmNzaXplKTtcdFx0LyogY29udC5lbmNyeXB0ZWRfdG9rZW4ubGVuICovXG4gMjkwOlx0XG4gMjkxOlx0XHRlbmNiYXNlID0geGRyO1xuIDI5MjpcdFx0eGRyICYjNDM7PSBvZmZzZXQgLyA0O1xuIDI5MzpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubChjb25uX2tyYjUtXHUwMDNlZXR5cGUpO1x0LyogdG9rZW4uSzAuZW5jdHlwZSAqL1xuIDI5NDpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubChjb25uX2tyYjUtXHUwMDNla2V5X2xlbik7XHQvKiB0b2tlbi5LMC5rZXkubGVuICovXG4gMjk1Olx0XHRtZW1jcHkoeGRyLCBLMCwgY29ubl9rcmI1LVx1MDAzZWtleV9sZW4pO1x0LyogdG9rZW4uSzAua2V5LmRhdGEgKi9cbiAyOTY6XHRcdHhkciAmIzQzOz0geGRyX3JvdW5kX3VwKGNvbm5fa3JiNS1cdTAwM2VrZXlfbGVuKSAvIDQ7XG4gMjk3Olx0XG4gMjk4Olx0XHQqeGRyJiM0MzsmIzQzOyA9IGh0b25sKFJYUlBDX1NFQ1VSSVRZX0VOQ1JZUFQpO1x0LyogdG9rZW4ubGV2ZWwgKi9cbiAyOTk6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwoMCk7XHRcdFx0LyogdG9rZW4uc3RhcnR0aW1lICovXG4gMzAwOlx0XHQqeGRyJiM0MzsmIzQzOyA9IGh0b25sKDApO1x0XHRcdC8qIFwmIzM0OyAqL1xuIDMwMTpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCgwKTtcdFx0XHQvKiB0b2tlbi5saWZldGltZSAqL1xuIDMwMjpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCgwKTtcdFx0XHQvKiB0b2tlbi5ieXRlbGlmZSAqL1xuIDMwMzpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCgwKTtcdFx0XHQvKiB0b2tlbi5leHBpcmF0aW9udGltZSAqL1xuIDMwNDpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCgwKTtcdFx0XHQvKiBcJiMzNDsgKi9cbiAzMDU6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwoMSk7XHRcdFx0LyogdG9rZW4uaWRlbnRpdGllcy5jb3VudCAqL1xuIDMwNjpcdFx0KnhkciYjNDM7JiM0MzsgPSBodG9ubCgwKTtcdFx0XHQvKiB0b2tlbi5pZGVudGl0aWVzWzBdLmtpbmQgKi9cbiAzMDc6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwodXVpZHNpemUpO1x0XHQvKiB0b2tlbi5pZGVudGl0aWVzWzBdLmRhdGEubGVuICovXG4gMzA4Olx0XHRtZW1jcHkoeGRyLCBcdTAwMjZzZXJ2ZXItXHUwMDNldXVpZCwgdXVpZHNpemUpO1xuIDMwOTpcdFx0eGRyICYjNDM7PSB4ZHJfcm91bmRfdXAodXVpZHNpemUpIC8gNDtcbiAzMTA6XHRcdCp4ZHImIzQzOyYjNDM7ID0gaHRvbmwoMCk7XHRcdFx0LyogdG9rZW4uaWRlbnRpdGllc1swXS5kaXNwbGF5LmxlbiAqL1xuIDMxMTpcdFxuIDMxMjpcdFx0eGRyID0gZW5jYmFzZSAmIzQzOyB4ZHJfcm91bmRfdXAoZW5jc2l6ZSk7XG4gMzEzOlx0XG4gMzE0Olx0XHRpZiAoKHVuc2lnbmVkIGxvbmcpeGRyIC0gKHVuc2lnbmVkIGxvbmcpYXBwZGF0YSAhPSBhZGF0YXNpemUpXG4gMzE1Olx0XHRcdHByX2VycihcJiMzNDtBcHBkYXRhIHNpemUgaW5jb3JyZWN0ICVseCAhPSAlenhcXG5cJiMzNDssXG4gMzE2Olx0XHRcdCAgICAgICAodW5zaWduZWQgbG9uZyl4ZHIgLSAodW5zaWduZWQgbG9uZylhcHBkYXRhLCBhZGF0YXNpemUpO1xuIDMxNzpcdFxuIDMxODpcdFx0YWVhZCA9IGNyeXB0b19rcmI1X3ByZXBhcmVfZW5jcnlwdGlvbih0b2tlbl9rcmI1LCB0b2tlbl9rZXksIFJYR0tfU0VSVkVSX0VOQ19UT0tFTixcbiAzMTk6XHRcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTkzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVmZmVyIFNpemUgQ2FsY3VsYXRpb24gRml4KioKCk9rYXksIHNvIHRoZSBmaXggaXMgaW4gZm9yIGEgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24gZXJyb3IgcmVsYXRlZCB0byBgdG9rc2l6ZWAuIFRoZSBtZW1vcnkgd2FzIGluaXRpYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLCBtZWFuaW5nIGV2ZXJ5dGhpbmcgc3RhcnRlZCBvdXQgemVyb2VkLiBUaGUgYnVnIHdhcyBpbiBmYWlsaW5nIHRvIGFjY291bnQgZm9yIHRoZSA0LWJ5dGUgYGxldmVsYCBmaWVsZCB0aGF0IGdldHMgd3JpdHRlbiBsYXRlciwgYXMgZXZpZGVuY2VkIGJ5IHRoZSBgaHRvbmwoUlhSUENfU0VDVVJJVFlfRU5DUllQVClgIGNhbGwgb24gbGluZSAyOTguIEVzc2VudGlhbGx5LCB3ZSB3ZXJlIHVuZGVyLWFsbG9jYXRpbmcsIGV2ZW4gdGhvdWdoIHRoZSBjb25zZXF1ZW5jZXMgd2VyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBkdWUgdG8gdGhlIHplcm8gaW5pdGlhbGl6YXRpb24uIEl0IGxvb2tzIGxpa2UgaXQgd2FzIG9ubHkgZml4aW5nIGEgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24sIG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uLCBidXQgaXQgaXMgaW1wb3J0YW50IHRvIGNoZWNrIGhvdyB0aGUgYnVmZmVyIHdpbGwgYmUgdXNlZC4KCk5vdywgbGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBUaW1lIHRvIHRob3JvdWdobHkgYW5hbHl6ZSBgbmV0L3J4cnBjL3NlbmRtc2cuY2AgYW5kIHJlbGF0ZWQgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBmdXJ0aGVyIGlzc3VlcyBsdXJraW5nLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L3J4cnBjL3NlbmRtc2cuY2AgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yeHJwYy9zZW5kbXNnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0ICAgIHN0YXRlICE9IFJYUlBDX0NBTExfU0VSVkVSX1NFTkRfUkVQTFkpIHtcbiAzODE6XHRcdFx0LyogUmVxdWVzdCBwaGFzZSBjb21wbGV0ZSBmb3IgdGhpcyBjbGllbnQgY2FsbCAqL1xuIDM4MjpcdFx0XHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVx1MDAzZWRlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcbiAzODM6XHRcdFx0XHRcdCAgY2FsbC1cdTAwM2VjaWQsIGNhbGwtXHUwMDNlY2FsbF9pZCwgY2FsbC1cdTAwM2VyeF9jb25zdW1lZCxcbiAzODQ6XHRcdFx0XHRcdCAgMCwgLUVQUk9UTyk7XG4gMzg1Olx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4gMzg2Olx0XHR9XG4gMzg3Olx0XG4gMzg4Olx0XHRyZXQgPSAtRU1TR1NJWkU7XG4gMzg5Olx0XHRpZiAoY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4gIT0gLTEpIHtcbiAzOTA6XHRcdFx0aWYgKGxlbiBcdTAwM2UgY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4gMzkxOlx0XHRcdFx0Z290byBtYXliZV9lcnJvcjtcbiAzOTI6XHRcdFx0aWYgKCFtb3JlIFx1MDAyNlx1MDAyNiBsZW4gIT0gY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4gMzkzOlx0XHRcdFx0Z290byBtYXliZV9lcnJvcjtcbiAzOTQ6XHRcdH1cbiAzOTU6XHRcbiAzOTY6XHRcdGRvIHtcbiAzOTc6XHRcdFx0aWYgKCF0eGIpIHtcbiAzOTg6XHRcdFx0XHRzaXplX3QgcmVtYWluO1xuIDM5OTpcdFxuIDQwMDpcdFx0XHRcdF9kZWJ1ZyhcJiMzNDthbGxvY1wmIzM0Oyk7XG4gNDAxOlx0XG4gNDAyOlx0XHRcdFx0aWYgKCFyeHJwY19jaGVja190eF9zcGFjZShjYWxsLCBOVUxMKSlcbiA0MDM6XHRcdFx0XHRcdGdvdG8gd2FpdF9mb3Jfc3BhY2U7XG4gNDA0Olx0XG4gNDA1Olx0XHRcdFx0LyogU2VlIGlmIHdlIG5lZWQgdG8gYmVnaW4vZXh0ZW5kIHRoZSBUeCBxdWV1ZS4gKi9cbiA0MDY6XHRcdFx0XHRpZiAoIWNhbGwtXHUwMDNlc2VuZF9xdWV1ZSB8fCAhKChjYWxsLVx1MDAzZXNlbmRfdG9wICYjNDM7IDEpIFx1MDAyNiBSWFJQQ19UWFFfTUFTSykpIHtcbiA0MDc6XHRcdFx0XHRcdHJldCA9IHJ4cnBjX2FsbG9jX3R4cXVldWUoc2ssIGNhbGwpO1xuIDQwODpcdFx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA0MDk6XHRcdFx0XHRcdFx0Z290byBtYXliZV9lcnJvcjtcbiA0MTA6XHRcdFx0XHR9XG4gNDExOlx0XG4gNDEyOlx0XHRcdFx0LyogV29yayBvdXQgdGhlIG1heGltdW0gc2l6ZSBvZiBhIHBhY2tldC4gIEFzc3VtZSB0aGF0XG4gNDEzOlx0XHRcdFx0ICogdGhlIHNlY3VyaXR5IGhlYWRlciBpcyBnb2luZyB0byBiZSBpbiB0aGUgcGFkZGVkXG4gNDE0Olx0XHRcdFx0ICogcmVnaW9uIChlbmMgYmxvY2tzaXplKSwgYnV0IHRoZSB0cmFpbGVyIGlzIG5vdC5cbiA0MTU6XHRcdFx0XHQgKi9cbiA0MTY6XHRcdFx0XHRyZW1haW4gPSBtb3JlID8gSU5UX01BWCA6IGxlbjtcbiA0MTc6XHRcdFx0XHR0eGIgPSBjYWxsLVx1MDAzZWNvbm4tXHUwMDNlc2VjdXJpdHktXHUwMDNlYWxsb2NfdHhidWYoY2FsbCwgcmVtYWluLCBzay1cdTAwM2Vza19hbGxvY2F0aW9uKTtcbiA0MTg6XHRcdFx0XHRpZiAoIXR4Yikge1xuIDQxOTpcdFx0XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA0MjA6XHRcdFx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4gNDIxOlx0XHRcdFx0fVxuIDQyMjpcdFx0XHR9XG4gNDIzOlx0XG4gNDI0Olx0XHRcdF9kZWJ1ZyhcJiMzNDthcHBlbmRcJiMzNDspO1xuIDQyNTpcdFxuIDQyNjpcdFx0XHQvKiBhcHBlbmQgbmV4dCBzZWdtZW50IG9mIGRhdGEgdG8gdGhlIGN1cnJlbnQgYnVmZmVyICovXG4gNDI3Olx0XHRcdGlmIChsZW4gXHUwMDNlIDApIHtcbiA0Mjg6XHRcdFx0XHRzaXplX3QgY29weSA9IG1pbjModHhiLVx1MDAzZXNwYWNlLCBsZW4sIG1zZ19kYXRhX2xlZnQobXNnKSk7XG4gNDI5Olx0XG4gNDMwOlx0XHRcdFx0X2RlYnVnKFwmIzM0O2FkZCAlenVcJiMzNDssIGNvcHkpO1xuIDQzMTpcdFx0XHRcdGlmICghY29weV9mcm9tX2l0ZXJfZnVsbCh0eGItXHUwMDNlZGF0YSAmIzQzOyB0eGItXHUwMDNlb2Zmc2V0LFxuIDQzMjpcdFx0XHRcdFx0XHRcdCBjb3B5LCBcdTAwMjZtc2ctXHUwMDNlbXNnX2l0ZXIpKVxuIDQzMzpcdFx0XHRcdFx0Z290byBlZmF1bHQ7XG4gNDM0Olx0XHRcdFx0X2RlYnVnKFwmIzM0O2FkZGVkXCYjMzQ7KTtcbiA0MzU6XHRcdFx0XHR0eGItXHUwMDNlc3BhY2UgLT0gY29weTtcbiA0MzY6XHRcdFx0XHR0eGItXHUwMDNlbGVuICYjNDM7PSBjb3B5O1xuIDQzNzpcdFx0XHRcdHR4Yi1cdTAwM2VvZmZzZXQgJiM0Mzs9IGNvcHk7XG4gNDM4Olx0XHRcdFx0Y29waWVkICYjNDM7PSBjb3B5O1xuIDQzOTpcdFx0XHRcdGxlbiAtPSBjb3B5O1xuIDQ0MDpcdFx0XHRcdGlmIChjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSlcbiA0NDE6XHRcdFx0XHRcdGNhbGwtXHUwMDNldHhfdG90YWxfbGVuIC09IGNvcHk7XG4gNDQyOlx0XHRcdH1cbiA0NDM6XHRcbiA0NDQ6XHRcdFx0LyogY2hlY2sgZm9yIHRoZSBmYXIgc2lkZSBhYm9ydGluZyB0aGUgY2FsbCBvciBhIG5ldHdvcmsgZXJyb3JcbiA0NDU6XHRcdFx0ICogb2NjdXJyaW5nICovXG4gNDQ2Olx0XHRcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpKVxuIDQ0NzpcdFx0XHRcdGdvdG8gY2FsbF90ZXJtaW5hdGVkO1xuIDQ0ODpcdFxuIDQ0OTpcdFx0XHQvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCYjMzk7cyBub3cgZnVsbCAqL1xuIDQ1MDpcdFx0XHRpZiAoIXR4Yi1cdTAwM2VzcGFjZSB8fFxuIDQ1MTpcdFx0XHQgICAgKGxlbiA9PSAwIFx1MDAyNlx1MDAyNiAhbW9yZSkpIHtcbiA0NTI6XHRcdFx0XHQvKiBEbyBhbnkgcmVxdWlyZWQgY3J5cHRvLiAgSWYgdGhpcyBmYWlscywgaXQgY291bGRcbiA0NTM6XHRcdFx0XHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxuIDQ1NDpcdFx0XHRcdCAqIGVuY3J5cHQuICBBc3N1bWUgdGhhdCBFTk9NRU0gaXMgcmV0cnlhYmxlLCBidXRcbiA0NTU6XHRcdFx0XHQgKiBldmVyeXRoaW5nIGVsc2UgaXMgdGVybWluYWwuXG4gNDU2Olx0XHRcdFx0ICovXG4gNDU3Olx0XHRcdFx0cmV0ID0gY2FsbC1cdTAwM2VzZWN1cml0eS1cdTAwM2VzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7XG4gNDU4Olx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuIDQ1OTpcdFx0XHRcdFx0LyogQXNzdW1lIHRoYXQgRU5PTUVNIGhlcmUgbWVhbnMgdGhhdCB0aGVcbiA0NjA6XHRcdFx0XHRcdCAqIGVuY3J5cHRpb24gaGFzbiYjMzk7dCBoYXBwZW5lZCB5ZXQuICBUaGUgZGF0YSBpc1xuIDQ2MTpcdFx0XHRcdFx0ICogYWxpZ25lZCB0byBhdm9pZCB0aGUgbmVlZCBmb3Igc2xvdyBidWZmZXJpbmdcbiA0NjI6XHRcdFx0XHRcdCAqIGluIHRoZSBjcnlwdG8gd2Fsay5cbiA0NjM6XHRcdFx0XHRcdCAqL1xuIDQ2NDpcdFx0XHRcdFx0aWYgKHJldCA9PSAtRU5PTUVNKVxuIDQ2NTpcdFx0XHRcdFx0XHRnb3RvIG1heWJlX2Vycm9yX3Jld2luZDtcbiA0NjY6XHRcdFx0XHRcdHNldF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncyk7XG4gNDY3Olx0XHRcdFx0XHRnb3RvIG91dF90eGI7XG4gNDY4Olx0XHRcdFx0fVxuIDQ2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMwOQoJCQkJCQkJb3V0cHV0OiAzMjgKCQkJCQkJCXRob3VnaHRzOiAxNzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFJ4UlBDIFBhdGNoIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIFJ4UlBDIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBgTmVlZHNLTVNBTj10cnVlYCBmbGFnLiBNeSBmb2N1cyBpcyBvbiBpZGVudGlmeWluZyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgdGhpcyBhcmVhLgoKRmlyc3QsIEkgZXhhbWluZWQgYGFsbG9jX3R4YnVmYCBhbmQgYHNlY3VyZV9wYWNrZXRgIHdpdGhpbiBgcnhycGNgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBjb3B5X2Zyb21faXRlcl9mdWxsYCBjYWxsLCBjb3B5aW5nIGRhdGEgaW50byB0aGUgdHJhbnNtaXQgYnVmZmVyIChgdHhiYCkuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCB0aGUgYHR4Yi0mZ3Q7bGVuYCBpcyAqb25seSogaW5jcmVtZW50ZWQgYnkgdGhlIGNvcGllZCBhbW91bnQgYW5kIHRoYXQgdGhlIGByeHJwY19xdWV1ZV9wYWNrZXRgIGZ1bmN0aW9uIGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIGFtb3VudCBjb3BpZWQuIEFsc28sIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCBub3cgcmV0dXJucyB0aGUgKm51bWJlciBvZiBieXRlcyBidWZmZXJlZCogd2hpY2ggaW5kaWNhdGVzIHN1Y2Nlc3MgLSBub3QgemVybyAtIHNvIHRoZXJlIGlzIG5vIGNvbmNlcm4gdGhlcmUuCgpOZXh0LCBJIGxvb2tlZCBhdCBob3cgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIGlzIHVzZWQgaW4gc2V2ZXJhbCBgZnMvYWZzL3J4cnBjLmNgIGZ1bmN0aW9uczogYGFmc19tYWtlX2NhbGxgLCBgYWZzX3NlbmRfZW1wdHlfcmVwbHlgLCBgYWZzX3NlbmRfc2ltcGxlX3JlcGx5YCwgYW5kIGByeHBlcmZfcHJvY2Vzc19jYWxsYC4gRWFjaCB1c2VzIGEgYGRvLi4ud2hpbGVgIGxvb3AgdGhhdCBjYWxscyBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAgcmVwZWF0ZWRseSB1bnRpbCBhbGwgdGhlIG1lc3NhZ2UgZGF0YSBpcyBzZW50LiBUaGUgbG9vcCBjb25kaXRpb25zIChgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwYCBvciBgbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbXNnX2RhdGFfbGVmdCgmYW1wO21zZykgJmd0OyAwYCkgYXBwZWFyIHNvdW5kOyBpZiBhIG5lZ2F0aXZlIHJldHVybiBjb2RlIGlzIHJldHVybmVkLCB0aGUgbG9vcCBpcyBleGl0ZWQuIGByZXRgIGFuZCBgbmAgYXJlIGFzc2lnbmVkIGJlZm9yZSB1c2UgYW5kIHRoZWlyIHVzYWdlIGlzIGNoZWNrZWQuCgpOb3csIHRoZSByZWFsIGxpdG11cyB0ZXN0OiB0aGUgZm91ciBLTVNBTiBjcml0ZXJpYS4KCjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlOioqIEkmIzM5O20gbWV0aWN1bG91c2x5IGxvb2tpbmcgZm9yIGFueSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGwsIG9yIEJQRiBjaGFuZ2VzLiBUaGUgcGF0Y2ggaGFzIGByeHJwY19yZXF1ZXVlX2NhbGxgLCBgX19yeHJwY19ub3RpZnlfc29ja2V0YCwgYHJ4cnBjX25vdGlmeV9zb2NrZXRgIGluIGByZWN2bXNnLmNgIGFuZCBgY2FsbF9zdGF0ZS5jYCBidXQgdGhlc2UgYXBwZWFyIHRvIGJlIGludGVybmFsIG5vdGlmaWNhdGlvbnMsIG5vdCBkaXJlY3QgdXNlci1mYWNpbmcgY29waWVzLiBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYCBpbiBga2V5LmNgIHJldHVybnMgYHJldGAgd2hpY2ggaXMgYXNzaWduZWQgd2l0aCBgLUVLRVlSRUpFQ1RFRGAgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgY2hlY2tlZC4gVGhlIGB0b2tzaXplYCBjYWxjdWxhdGlvbiBmaXggaW4gYGNtX3NlY3VyaXR5LmNgIGlzIGltcG9ydGFudCB0byBjb25maXJtIHRoZXJlIGFyZSBubyBidWZmZXIgb3ZlcmZsb3dzIG9yIHNpbWlsYXIgYnVncy4KMi4gICoqQ29uZGl0aW9uYWwgTG9naWMvQnJhbmNoaW5nOioqIEkmIzM5O20gaW5zcGVjdGluZyBhbGwgdmFyaWFibGVzIHVzZWQgaW4gY29uZGl0aW9uYWwgc3RhdGVtZW50cyB0byBlbnN1cmUgdGhleSYjMzk7cmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIGNvZGUgdXNlcyBgcmV0YCBhbmQgYG5gIHdoaWNoIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGluIGFsbCBpbnN0YW5jZXMsIGFzIHdlbGwgYXMgYHJld2luZF9ieWAgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgYnkgYHVtaW4oY29waWVkLCB0eGItJmd0O2xlbilgLgozLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBJJiMzOTttIGNoZWNraW5nIGZvciBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgZXhhbXBsZXMgb2YgdGhpcyBoZXJlLgo0LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBUaGUgYHNlbmRtc2cuY2AgY2hhbmdlcyBtZXRpY3Vsb3VzbHkgdHJhY2sgYGxlbmAgYW5kIGBtc2dfZGF0YV9sZWZ0KG1zZylgLiBUaGUgY29kZSBpcyBjYXJlZnVsIHdpdGggYG1pbjModHhiLSZndDtzcGFjZSwgbGVuLCBtc2dfZGF0YV9sZWZ0KG1zZykpYCBhbmQgZGF0YSBpcyBjb3BpZWQgZGlyZWN0bHkgZnJvbSBgbXNnX2l0ZXJgLiBObyB1bmluaXRpYWxpemVkIGJ5dGVzIGFyZSBiZWluZyBhY2Nlc3NlZCBvciB0cmFuc21pdHRlZC4KCkkmIzM5O3ZlIGNhcmVmdWxseSBkb3VibGUtY2hlY2tlZCAqYWxsKiB0aGUgZGlmZiBodW5rcy4gSSByZXZpZXdlZCB0aGUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RgKSBhbmQgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzIGxpa2UgZml4ZXMgdG8gYHRva3NpemVgIGNhbGN1bGF0aW9uIChgZnMvYWZzL2NtX3NlY3VyaXR5LmNgKSwgaW5saW5lIGZ1bmN0aW9uIG1vdmVzIChgZnMvYWZzL2ludGVybmFsLmhgKSwgdGhlIGxvb3BzIHdpdGggYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIGluIGBmcy9hZnMvcnhycGMuY2AsIHRyYWNlIGV2ZW50cywgZGVjbGFyYXRpb25zIGFuZCBmbGFnIGVudW1zIChgbmV0L3J4cnBjL2FyLWludGVybmFsLmhgKSwgc29ja2V0IG5vdGlmaWNhdGlvbiBsb2dpYyBjbGVhbnVwLCBudWxsL3JlZiBjaGVja3MsICBgY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlYCB2YWxpZGF0aW9uLCBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgbG9ja2luZy4KCkJhc2VkIG9uIHRoaXMgY29tcHJlaGVuc2l2ZSByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSAqbm8qIGRpcmVjdCByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBrZXJuZWwgcHJvdGVjdGlvbnMgKEtBU0FOLCBMT0NLREVQLCBldGMuKSBzaG91bGQgY2F0Y2ggYW55IG90aGVyIHBvdGVudGlhbCBpc3N1ZXMuIFRoZXJlZm9yZSwgSSYjMzk7bSByZWNvbW1lbmRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhhdCwgYWxvbmcgd2l0aCB0aGlzIGRldGFpbGVkIHJlYXNvbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBRl9SWFJQQyBhbmQgQUZTIG5ldHdvcmtpbmcgY29kZSB0byBzdXBwb3J0IHNob3J0IHdyaXRlcyBpbiByeHJwY19rZXJuZWxfc2VuZF9kYXRhLCBsb29wIHVudGlsIGZ1bGwgbWVzc2FnZSBjb25zdW1wdGlvbiBpbiBBRlMvcnhwZXJmIGNhbGxlcnMsIHNpbXBsaWZ5IGxvY2tpbmcgYXJvdW5kIHJ4cnBjX3NlbmRfZGF0YSwgZml4IHRoZSB0b2tzaXplIGNhbGN1bGF0aW9uIGZvciBZRlMgQ00gdG9rZW5zLCBhZGQgZW5jcnlwdGlvbiB0eXBlIHZhbGlkYXRpb24gZm9yIFlGUyBrZXlzLCBhbmQgY2xlYW4gdXAgc29ja2V0IG5vdGlmaWNhdGlvbiBhbmQgY29ubmVjdGlvbiByZWZjb3VudGluZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBrZXJuZWwtdG8tdXNlciBpbmZvIGxlYWtzOlxuLSBUaGUgdG9rZW4gYnVmZmVyIGluIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCB6ZXJvaW5nIGFsbCBieXRlczsgdGhlIGZpeCBtZXJlbHkgYWNjb3VudHMgZm9yIHRoZSA0LWJ5dGUgYGxldmVsYCBmaWVsZCBpbiBgdG9rc2l6ZWAuXG4tIEluIGByeHJwY19zZW5kX2RhdGFgLCBkYXRhIHRyYW5zZmVyIGNvbnRpbnVlcyB0byB1c2UgYGNvcHlfZnJvbV9pdGVyX2Z1bGxgIHdpdGggYm91bmRlZCBjb3B5IHNpemVzIChgbWluM2ApLCBhbmQgZXJyb3ItcmV3aW5kIGxvZ2ljIHVwZGF0ZXMgYnl0ZSBjb3VudGVycyBhcHByb3ByaWF0ZWx5LlxuLSBMb2NhbCB2YXJpYWJsZXMgYWNyb3NzIG1vZGlmaWVkIGZ1bmN0aW9ucyAoYHJldGAsIGBuYCwgYHJld2luZF9ieWAsIGV0Yy4pIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG9yIGFzc2lnbmVkIGJlZm9yZSB1c2UuXG4tIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlICh2aWEgYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBldGMuKSBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLlxuXG5BbnkgY29uY3VycmVuY3ksIHJlZmNvdW50aW5nLCBvciBib3VuZHMgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UgYXJlIGZ1bGx5IGRldGVjdGFibGUgYnkgc3RhbmRhcmQgZGVidWcgYnVpbGRzIChLQVNBTiwgTE9DS0RFUCkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQUZfUlhSUEMgYW5kIEFGUyBuZXR3b3JraW5nIGNvZGUgdG8gc3VwcG9ydCBzaG9ydCB3cml0ZXMgaW4gcnhycGNfa2VybmVsX3NlbmRfZGF0YSwgbG9vcCB1bnRpbCBmdWxsIG1lc3NhZ2UgY29uc3VtcHRpb24gaW4gQUZTL3J4cGVyZiBjYWxsZXJzLCBzaW1wbGlmeSBsb2NraW5nIGFyb3VuZCByeHJwY19zZW5kX2RhdGEsIGZpeCB0aGUgdG9rc2l6ZSBjYWxjdWxhdGlvbiBmb3IgWUZTIENNIHRva2VucywgYWRkIGVuY3J5cHRpb24gdHlwZSB2YWxpZGF0aW9uIGZvciBZRlMga2V5cywgYW5kIGNsZWFuIHVwIHNvY2tldCBub3RpZmljYXRpb24gYW5kIGNvbm5lY3Rpb24gcmVmY291bnRpbmcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcbi0gVGhlIHRva2VuIGJ1ZmZlciBpbiBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgemVyb2luZyBhbGwgYnl0ZXM7IHRoZSBmaXggbWVyZWx5IGFjY291bnRzIGZvciB0aGUgNC1ieXRlIGBsZXZlbGAgZmllbGQgaW4gYHRva3NpemVgLlxuLSBJbiBgcnhycGNfc2VuZF9kYXRhYCwgZGF0YSB0cmFuc2ZlciBjb250aW51ZXMgdG8gdXNlIGBjb3B5X2Zyb21faXRlcl9mdWxsYCB3aXRoIGJvdW5kZWQgY29weSBzaXplcyAoYG1pbjNgKSwgYW5kIGVycm9yLXJld2luZCBsb2dpYyB1cGRhdGVzIGJ5dGUgY291bnRlcnMgYXBwcm9wcmlhdGVseS5cbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxuLSBObyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGBjb3B5X3RvX3VzZXJgLCBpb2N0bCwgbmV0bGluaywgZXRjLikgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nL3N0cnVjdCBmaWVsZHMgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZC5cblxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjIzLjI2NTIyMjcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg5MjQyOTQzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZfUlhSUENcIixcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiUlhHS1wiLFxuICAgIFwiUlhQRVJGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnhycGNfc2VuZF9kYXRhXCIsXG4gICAgXCJyeHJwY19kb19zZW5kbXNnXCIsXG4gICAgXCJyeHJwY19rZXJuZWxfc2VuZF9kYXRhXCIsXG4gICAgXCJyeHJwY19yZWN2bXNnXCIsXG4gICAgXCJyeHJwY19ub3RpZnlfc29ja2V0XCIsXG4gICAgXCJyeHJwY19wb2tlX2Nvbm5cIixcbiAgICBcInJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhna1wiLFxuICAgIFwicnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHlcIixcbiAgICBcImFmc19tYWtlX2NhbGxcIixcbiAgICBcImFmc19zZW5kX3NpbXBsZV9yZXBseVwiLFxuICAgIFwiYWZzX3NlbmRfZW1wdHlfcmVwbHlcIixcbiAgICBcImFmc19jcmVhdGVfeWZzX2NtX3Rva2VuXCIsXG4gICAgXCJyeHBlcmZfcHJvY2Vzc19jYWxsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEFGX1JYUlBDIGFuZCBBRlMgbmV0d29ya2luZyBjb2RlIHRvIHN1cHBvcnQgc2hvcnQgd3JpdGVzIGluIHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEsIGxvb3AgdW50aWwgZnVsbCBtZXNzYWdlIGNvbnN1bXB0aW9uIGluIEFGUy9yeHBlcmYgY2FsbGVycywgc2ltcGxpZnkgbG9ja2luZyBhcm91bmQgcnhycGNfc2VuZF9kYXRhLCBmaXggdGhlIHRva3NpemUgY2FsY3VsYXRpb24gZm9yIFlGUyBDTSB0b2tlbnMsIGFkZCBlbmNyeXB0aW9uIHR5cGUgdmFsaWRhdGlvbiBmb3IgWUZTIGtleXMsIGFuZCBjbGVhbiB1cCBzb2NrZXQgbm90aWZpY2F0aW9uIGFuZCBjb25uZWN0aW9uIHJlZmNvdW50aW5nLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcXG4tIFRoZSB0b2tlbiBidWZmZXIgaW4gYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHplcm9pbmcgYWxsIGJ5dGVzOyB0aGUgZml4IG1lcmVseSBhY2NvdW50cyBmb3IgdGhlIDQtYnl0ZSBgbGV2ZWxgIGZpZWxkIGluIGB0b2tzaXplYC5cXG4tIEluIGByeHJwY19zZW5kX2RhdGFgLCBkYXRhIHRyYW5zZmVyIGNvbnRpbnVlcyB0byB1c2UgYGNvcHlfZnJvbV9pdGVyX2Z1bGxgIHdpdGggYm91bmRlZCBjb3B5IHNpemVzIChgbWluM2ApLCBhbmQgZXJyb3ItcmV3aW5kIGxvZ2ljIHVwZGF0ZXMgYnl0ZSBjb3VudGVycyBhcHByb3ByaWF0ZWx5Llxcbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxcbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuXFxuXFxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUnhSUEMgc29ja2V0IGRhdGEgc2VuZGluZyBhbmQgY29tcGxldGlvbiBub3RpZmljYXRpb24gbWVjaGFuaXNtcywgY29ubmVjdGlvbiByZWZlcmVuY2UgY291bnRpbmcsIGtleSBwYXlsb2FkIHBhcnNpbmcsIGFuZCBpbi1rZXJuZWwgQUZTL3J4cGVyZiBzZW5kIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29yZSBuZXR3b3JraW5nIGFuZCBmaWxlc3lzdGVtIHN0YXRlIG1hY2hpbmVzIGFuZCBlcnJvci1oYW5kbGluZyBwYXRocyB0aGF0IGFyZSBmdWxseSByZWFjaGFibGUgdmlhIEFGX1JYUlBDIHNvY2tldHMsIGtleXMgc3lzY2FsbHMsIGFuZCBBRlMgb3BlcmF0aW9ucyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjIzLjI2NTIyNjk3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ1NjY1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZDNhZmYyMzM3NjkwODE2OTNlZGE4ODliNThhYTMyMDNhNjI4OTJlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NDk6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RcXG5pbmRleCA4OTI2ZGFiOGUyZTYwLi43ZGY2YWZmNzY0NGMwIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0XFxuQEAgLTg3OSwxNCArODc5LDIxIEBAIFRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czpcXG4gICAgICBleGNsdXNpdmVseSB0byBpbi1rZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMuICBtc2cubXNnX2ZsYWdzIG1heSBiZSBnaXZlblxcbiAgICAgIE1TR19NT1JFIGlmIHRoZXJlIHdpbGwgYmUgc3Vic2VxdWVudCBkYXRhIHNlbmRzIGZvciB0aGlzIGNhbGwuXFxuIFxcbi0gICAgIFRoZSBtc2cgbXVzdCBub3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGNvbnRyb2wgZGF0YSBvciBhbnkgZmxhZ3NcXG4tICAgICBvdGhlciB0aGFuIE1TR19NT1JFLiAgbGVuIGlzIHRoZSB0b3RhbCBhbW91bnQgb2YgZGF0YSB0byB0cmFuc21pdC5cXG4rICAgICBtc2cgbXVzdCBub3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGNvbnRyb2wgZGF0YSBvciBhbnkgZmxhZ3NcXG4rICAgICBvdGhlciB0aGFuIE1TR19NT1JFLiAgbGVuIGlzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBhZGQgdG8gdGhlXFxuKyAgICAgdHJhbnNtaXNzaW9uLiAgVGhlIGxhc3QtcGFja2V0IGZsYWcgd2lsbCBvbmx5IGJlIHNldCBvbiB0aGUgb3V0Z29pbmdcXG4rICAgICBwYWNrZXQgaWYgTVNHX01PUkUgaXMgbm90IHNldCBhbmQgbGVuIGFtb3VudCBvZiBieXRlcyBhcmUgYnVmZmVyZWQuXFxuIFxcbiAgICAgIG5vdGlmeV9lbmRfcnggY2FuIGJlIE5VTEwgb3IgaXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGZ1bmN0aW9uIHRvIGJlXFxuICAgICAgY2FsbGVkIHdoZW4gdGhlIGNhbGwgY2hhbmdlcyBzdGF0ZSB0byBlbmQgdGhlIFR4IHBoYXNlLiAgVGhpcyBmdW5jdGlvbiBpc1xcbiAgICAgIGNhbGxlZCB3aXRoIGEgc3BpbmxvY2sgaGVsZCB0byBwcmV2ZW50IHRoZSBsYXN0IERBVEEgcGFja2V0IGZyb20gYmVpbmdcXG4gICAgICB0cmFuc21pdHRlZCB1bnRpbCB0aGUgZnVuY3Rpb24gcmV0dXJucy5cXG4gXFxuKyAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIG9yIGFuIGVycm9yLiAgSXQgd2lsbFxcbisgICAgIHJldHVybiB6ZXJvIG9ubHkgaWYgbGVuIGlzIDAgb3IgaWYgbXNnLVxcdTAwM2Vtc2dfaXRlciBpcyBlbXB0eS4gIEl0IG1heSBhbHNvXFxuKyAgICAgbWFrZSBhIHNob3J0IHdyaXRlLCBidWZmZXJpbmcgbGVzcyB0aGFuIHRoZSBhbW91bnQgb2YgZGF0YSBwcm92aWRlZCBvciB0aGVcXG4rICAgICBsZW4gc3BlY2lmaWVkLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZSBjYWxsZWQgYWdhaW4uXFxuK1xcbiAgKCMpIFJlY2VpdmUgZGF0YSBmcm9tIGEgY2FsbDo6XFxuIFxcbiBcXHRpbnQgcnhycGNfa2VybmVsX3JlY3ZfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbmRpZmYgLS1naXQgYS9mcy9hZnMvY21fc2VjdXJpdHkuYyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXFxuaW5kZXggMTAzMTY4YzcwZGQ0ZC4uNWVlZWVmNzYxY2YzMSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuY1xcbisrKyBiL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXFxuQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuIFxcdCAqXFx0c3RydWN0IFJYR0tfQXV0aE5hbWVcXHRpZGVudGl0aWVzXFx1MDAzY1xcdTAwM2U7XFxuIFxcdCAqIH07XFxuIFxcdCAqL1xcbi1cXHR0b2tzaXplID0ga2V5c2l6ZSArIDggKyA0ICsgNCArIDggKyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XFxuK1xcdHRva3NpemUgPSBrZXlzaXplICsgNCArIDggKyA0ICsgNCArIDggKyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XFxuIFxcbiBcXHRvZmZzZXQgPSAwO1xcbiBcXHRlbmNzaXplID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKHRva2VuX2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLCB0b2tzaXplLCBcXHUwMDI2b2Zmc2V0KTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjY1YTA4NjZjZDhiODUgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9hZnMvaW50ZXJuYWwuaFxcbkBAIC0xNDE2LDIyICsxNDE2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KVxcbiBcXHRcXHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXFxuLVxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuLXtcXG4tXFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXFx1MDAzZWVzdGF0ZS1cXHUwMDNlYWRkcmVzc2VzO1xcbi1cXG4tXFx0b3AtXFx1MDAzZWNhbGxcXHQ9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpO1xcbi1cXHRvcC1cXHUwMDNldHlwZVxcdD0gY2FsbC1cXHUwMDNldHlwZTtcXG4tXFx0Y2FsbC1cXHUwMDNlb3BcXHQ9IG9wO1xcbi1cXHRjYWxsLVxcdTAwM2VrZXlcXHQ9IG9wLVxcdTAwM2VrZXk7XFxuLVxcdGNhbGwtXFx1MDAzZWludHJcXHQ9ICEob3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xcbi1cXHRjYWxsLVxcdTAwM2VwZWVyXFx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXFx1MDAzZWFkZHJzW29wLVxcdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcXG4tXFx0Y2FsbC1cXHUwMDNlc2VydmljZV9pZCA9IG9wLVxcdTAwM2VzZXJ2ZXItXFx1MDAzZXNlcnZpY2VfaWQ7XFxuLVxcdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcXG4tXFx0YWZzX3B1dF9jYWxsKGNhbGwpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2V4dHJhY3RfYmVnaW4oc3RydWN0IGFmc19jYWxsICpjYWxsLCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxcbiB7XFxuIFxcdGNhbGwtXFx1MDAzZWlvdl9sZW4gPSBzaXplO1xcbkBAIC0xNzYzLDYgKzE3NDcsMjMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKkFGU19WTk9ERV9UT19JKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlKVxcbiBcXHRyZXR1cm4gXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXFxuK1xcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXFx1MDAzZWVzdGF0ZS1cXHUwMDNlYWRkcmVzc2VzO1xcbitcXG4rXFx0b3AtXFx1MDAzZWNhbGxcXHQ9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpO1xcbitcXHRvcC1cXHUwMDNldHlwZVxcdD0gY2FsbC1cXHUwMDNldHlwZTtcXG4rXFx0Y2FsbC1cXHUwMDNlb3BcXHQ9IG9wO1xcbitcXHRjYWxsLVxcdTAwM2VzZXJ2ZXJcXHQ9IGFmc191c2Vfc2VydmVyKG9wLVxcdTAwM2VzZXJ2ZXIsIGZhbHNlLCBhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsKTtcXG4rXFx0Y2FsbC1cXHUwMDNla2V5XFx0PSBvcC1cXHUwMDNla2V5O1xcbitcXHRjYWxsLVxcdTAwM2VpbnRyXFx0PSAhKG9wLVxcdTAwM2VmbGFncyBcXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcXG4rXFx0Y2FsbC1cXHUwMDNlcGVlclxcdD0gcnhycGNfa2VybmVsX2dldF9wZWVyKGFsaXN0LVxcdTAwM2VhZGRyc1tvcC1cXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XFxuK1xcdGNhbGwtXFx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cXHUwMDNlc2VydmVyLVxcdTAwM2VzZXJ2aWNlX2lkO1xcbitcXHRhZnNfbWFrZV9jYWxsKGNhbGwsIGdmcCk7XFxuK1xcdGFmc19wdXRfY2FsbChjYWxsKTtcXG4rfVxcbitcXG4gLypcXG4gICogTm90ZSB0aGF0IGEgZGVudHJ5IGdvdCBjaGFuZ2VkLiAgV2UgbmVlZCB0byBzZXQgZF9mc2RhdGEgdG8gdGhlIGRhdGEgdmVyc2lvblxcbiAgKiBudW1iZXIgZGVyaXZlZCBmcm9tIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmXFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9yeHJwYy5jIGIvZnMvYWZzL3J4cnBjLmNcXG5pbmRleCBkODI5MTY2NTdhM2RkLi4xZjViNmFhNjg5NDMzIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9yeHJwYy5jXFxuKysrIGIvZnMvYWZzL3J4cnBjLmNcXG5AQCAtNDEyLDI2ICs0MTIsMzIgQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxcbiBcXHRtc2cubXNnX2NvbnRyb2xsZW5cXHQ9IDA7XFxuIFxcdG1zZy5tc2dfZmxhZ3NcXHRcXHQ9IE1TR19XQUlUQUxMIHwgKGNhbGwtXFx1MDAzZXdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xcbiBcXG4tXFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZXNvY2tldCwgcnhjYWxsLFxcbi1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZtc2csIGNhbGwtXFx1MDAzZXJlcXVlc3Rfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XFxuK1xcdGRvIHtcXG4rXFx0XFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVxcdTAwM2VuZXQtXFx1MDAzZXNvY2tldCwgcnhjYWxsLCBcXHUwMDI2bXNnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG1zZ19kYXRhX2xlZnQoXFx1MDAyNm1zZyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yX2RvX2Fib3J0O1xcbitcXHR9IHdoaWxlIChtc2dfZGF0YV9sZWZ0KFxcdTAwMjZtc2cpIFxcdTAwM2UgMCk7XFxuIFxcbiBcXHRpZiAoY2FsbC1cXHUwMDNld3JpdGVfaXRlcikge1xcbiBcXHRcXHRtc2cubXNnX2l0ZXIgPSAqY2FsbC1cXHUwMDNld3JpdGVfaXRlcjtcXG4gXFx0XFx0bXNnLm1zZ19mbGFncyBcXHUwMDI2PSB+TVNHX01PUkU7XFxuIFxcdFxcdHRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgXFx1MDAyNm1zZyk7XFxuIFxcbi1cXHRcXHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXFx1MDAzZW5ldC1cXHUwMDNlc29ja2V0LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIGNhbGwtXFx1MDAzZXJ4Y2FsbCwgXFx1MDAyNm1zZyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBpb3ZfaXRlcl9jb3VudChcXHUwMDI2bXNnLm1zZ19pdGVyKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXFx1MDAzZW5ldC1cXHUwMDNlc29ja2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGNhbGwtXFx1MDAzZXJ4Y2FsbCwgXFx1MDAyNm1zZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBtc2dfZGF0YV9sZWZ0KFxcdTAwMjZtc2cpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRcXHR0cmFjZV9hZnNfc2VudF9kYXRhKGNhbGwsIFxcdTAwMjZtc2csIHJldCk7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fSB3aGlsZSAobXNnX2RhdGFfbGVmdChcXHUwMDI2bXNnKSBcXHUwMDNlIDApO1xcbiBcXHRcXHQqY2FsbC1cXHUwMDNld3JpdGVfaXRlciA9IG1zZy5tc2dfaXRlcjtcXG4gXFxuLVxcdFxcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXFx1MDAyNm1zZywgcmV0KTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XFxuK1xcdFxcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXFx1MDAyNm1zZywgMCk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCB3ZSBtYXkgaGF2ZSByZWNlaXZlZCB0aGUgcmVwbHkgb3IgYW4gYWJvcnRcXG5AQCAtNDQzLDEwICs0NDksOCBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXFxuIFxcdHJldHVybjtcXG4gXFxuIGVycm9yX2RvX2Fib3J0Olxcbi1cXHRpZiAocmV0ICE9IC1FQ09OTkFCT1JURUQpXFxuLVxcdFxcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKGNhbGwtXFx1MDAzZW5ldC1cXHUwMDNlc29ja2V0LCByeGNhbGwsXFxuLVxcdFxcdFxcdFxcdFxcdFJYX1VTRVJfQUJPUlQsIHJldCxcXG4tXFx0XFx0XFx0XFx0XFx0YWZzX2Fib3J0X3NlbmRfZGF0YV9lcnJvcik7XFxuK1xcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKGNhbGwtXFx1MDAzZW5ldC1cXHUwMDNlc29ja2V0LCByeGNhbGwsXFxuK1xcdFxcdFxcdFxcdFJYX1VTRVJfQUJPUlQsIHJldCwgYWZzX2Fib3J0X3NlbmRfZGF0YV9lcnJvcik7XFxuIFxcdGlmIChjYWxsLVxcdTAwM2Vhc3luYykge1xcbiBcXHRcXHRhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQpO1xcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTg1OSw2ICs4NjMsNyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4ge1xcbiBcXHRzdHJ1Y3QgYWZzX25ldCAqbmV0ID0gY2FsbC1cXHUwMDNlbmV0O1xcbiBcXHRzdHJ1Y3QgbXNnaGRyIG1zZztcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdF9lbnRlcihcXFwiXFxcIik7XFxuIFxcbkBAIC04NzEsMjIgKzg3NiwxMyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcXG4gXFx0bXNnLm1zZ19jb250cm9sbGVuXFx0PSAwO1xcbiBcXHRtc2cubXNnX2ZsYWdzXFx0XFx0PSAwO1xcbiBcXG4tXFx0c3dpdGNoIChyeHJwY19rZXJuZWxfc2VuZF9kYXRhKG5ldC1cXHUwMDNlc29ja2V0LCBjYWxsLVxcdTAwM2VyeGNhbGwsIFxcdTAwMjZtc2csIDAsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCkpIHtcXG4tXFx0Y2FzZSAwOlxcbi1cXHRcXHRfbGVhdmUoXFxcIiBbcmVwbGllZF1cXFwiKTtcXG4rXFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXFx1MDAzZXNvY2tldCwgY2FsbC1cXHUwMDNlcnhjYWxsLCBcXHUwMDI2bXNnLCAwLFxcbitcXHRcXHRcXHRcXHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwKSAvKiBTaG91bGRuJ3QgYnVmZmVyIG1vcmUgdGhhbiAwIGJ5dGVzLiAqL1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRjYXNlIC1FTk9NRU06XFxuLVxcdFxcdF9kZWJ1ZyhcXFwib29tXFxcIik7XFxuLVxcdFxcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cXHUwMDNlc29ja2V0LCBjYWxsLVxcdTAwM2VyeGNhbGwsXFxuLVxcdFxcdFxcdFxcdFxcdFJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sXFxuLVxcdFxcdFxcdFxcdFxcdGFmc19hYm9ydF9vb20pO1xcbi1cXHRcXHRmYWxsdGhyb3VnaDtcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0X2xlYXZlKFxcXCIgW2Vycm9yXVxcXCIpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFx0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVxcdTAwM2Vzb2NrZXQsIGNhbGwtXFx1MDAzZXJ4Y2FsbCxcXG4rXFx0XFx0XFx0XFx0UlhHRU5fU1NfTUFSU0hBTCwgcmV0LCBhZnNfYWJvcnRfc2VuZF9lcnJvcik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTkxMiwyMCArOTA4LDIxIEBAIHZvaWQgYWZzX3NlbmRfc2ltcGxlX3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKVxcbiBcXHRtc2cubXNnX2NvbnRyb2xsZW5cXHQ9IDA7XFxuIFxcdG1zZy5tc2dfZmxhZ3NcXHRcXHQ9IDA7XFxuIFxcbi1cXHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXFx1MDAzZXNvY2tldCwgY2FsbC1cXHUwMDNlcnhjYWxsLCBcXHUwMDI2bXNnLCBsZW4sXFxuLVxcdFxcdFxcdFxcdCAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXFx1MDAzZXNvY2tldCwgY2FsbC1cXHUwMDNlcnhjYWxsLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bXNnLCBtc2dfZGF0YV9sZWZ0KFxcdTAwMjZtc2cpLFxcbitcXHRcXHRcXHRcXHRcXHQgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCk7XFxuK1xcdH0gd2hpbGUgKG4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBtc2dfZGF0YV9sZWZ0KFxcdTAwMjZtc2cpIFxcdTAwM2UgMCk7XFxuK1xcbiBcXHRpZiAobiBcXHUwMDNlPSAwKSB7XFxuIFxcdFxcdC8qIFN1Y2Nlc3MgKi9cXG4gXFx0XFx0X2xlYXZlKFxcXCIgW3JlcGxpZWRdXFxcIik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG4gPT0gLUVOT01FTSkge1xcbi1cXHRcXHRfZGVidWcoXFxcIm9vbVxcXCIpO1xcbi1cXHRcXHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtXFx1MDAzZXNvY2tldCwgY2FsbC1cXHUwMDNlcnhjYWxsLFxcbi1cXHRcXHRcXHRcXHRcXHRSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLFxcbi1cXHRcXHRcXHRcXHRcXHRhZnNfYWJvcnRfb29tKTtcXG4tXFx0fVxcbitcXG4rXFx0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVxcdTAwM2Vzb2NrZXQsIGNhbGwtXFx1MDAzZXJ4Y2FsbCxcXG4rXFx0XFx0XFx0XFx0UlhHRU5fU1NfTUFSU0hBTCwgbiwgYWZzX2Fib3J0X3NlbmRfZXJyb3IpO1xcbiBcXHRfbGVhdmUoXFxcIiBbZXJyb3JdXFxcIik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcXG5pbmRleCAxYjNjNDhiNTU5MWRmLi4wNGIwYmI2ODJiODEwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcXG5AQCAtMTQ4LDYgKzE0OCw3IEBAIGVudW0geWZzX2NtX29wZXJhdGlvbiB7XFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsXFx0XFxcIlVOVSBpc29ydFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXFx0XFx0XFxcIlVQREFURSAgIFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfYnlfdXVpZCxcXHRcXFwiVVNFIHV1aWQgXFxcIikgXFxcXFxcbitcXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9jYWxsLFxcdFxcdFxcXCJVU0UgY2FsbCBcXFwiKSBcXFxcXFxuIFxcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NtX2NhbGwsXFx0XFxcIlVTRSBjbS1jbFxcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2V0X2NhcHMsXFx0XFxcIlVTRSBnY2Fwc1xcXCIpIFxcXFxcXG4gXFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcXHRcXFwiVVNFIGd2dXBjXFxcIikgXFxcXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxcbmluZGV4IDcwNGExMGRlNjY3MDAuLjUyZjg3MThjZjcyNTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcXG5AQCAtMjAsMTYgKzIwLDE2IEBAXFxuIFxcdC8qIEFGUyBlcnJvcnMgKi9cXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdEVNKGFmc19hYm9ydF9nZW5lcmFsX2Vycm9yLFxcdFxcdFxcXCJhZnMtZXJyb3JcXFwiKVxcdFxcdFxcXFxcXG4gXFx0RU0oYWZzX2Fib3J0X2ludGVycnVwdGVkLFxcdFxcdFxcXCJhZnMtaW50clxcXCIpXFx0XFx0XFxcXFxcbi1cXHRFTShhZnNfYWJvcnRfb29tLFxcdFxcdFxcdFxcXCJhZnMtb29tXFxcIilcXHRcXHRcXFxcXFxuIFxcdEVNKGFmc19hYm9ydF9vcF9ub3Rfc3VwcG9ydGVkLFxcdFxcdFxcXCJhZnMtb3Atbm90c3VwcFxcXCIpXFx0XFxcXFxcbiBcXHRFTShhZnNfYWJvcnRfcHJvYmV1dWlkX25lZ2F0aXZlLFxcdFxcXCJhZnMtcHJvYmV1dWlkLW5lZ1xcXCIpXFx0XFxcXFxcbiBcXHRFTShhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yLFxcdFxcdFxcXCJhZnMtc2VuZC1kYXRhXFxcIilcXHRcXFxcXFxuK1xcdEVNKGFmc19hYm9ydF9zZW5kX2Vycm9yLFxcdFxcdFxcXCJhZnMtc2VuZC1lcnJvclxcXCIpXFx0XFxcXFxcbiBcXHRFTShhZnNfYWJvcnRfdW5tYXJzaGFsX2Vycm9yLFxcdFxcdFxcXCJhZnMtdW5tYXJzaGFsXFxcIilcXHRcXFxcXFxuIFxcdEVNKGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MsXFx0XFxcImFmcy11bnN1cC1zZWMtY2xhc3NcXFwiKVxcdFxcXFxcXG4gXFx0LyogcnhwZXJmIGVycm9ycyAqL1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0RU0ocnhwZXJmX2Fib3J0X2dlbmVyYWxfZXJyb3IsXFx0XFx0XFxcInJ4cGVyZi1lcnJvclxcXCIpXFx0XFx0XFxcXFxcbi1cXHRFTShyeHBlcmZfYWJvcnRfb29tLFxcdFxcdFxcdFxcXCJyeHBlcmYtb29tXFxcIilcXHRcXHRcXFxcXFxuIFxcdEVNKHJ4cGVyZl9hYm9ydF9vcF9ub3Rfc3VwcG9ydGVkLFxcdFxcXCJyeHBlcmYtb3Atbm90c3VwcFxcXCIpXFx0XFxcXFxcbitcXHRFTShyeHBlcmZfYWJvcnRfc2VuZF9lcnJvcixcXHRcXHRcXFwicnhwZXJmLXNlbmQtZXJyb3JcXFwiKVxcdFxcXFxcXG4gXFx0RU0ocnhwZXJmX2Fib3J0X3VubWFyc2hhbF9lcnJvcixcXHRcXFwicnhwZXJmLXVubWFyc2hhbFxcXCIpXFx0XFxcXFxcbiBcXHQvKiBSeEtBRCBzZWN1cml0eSBlcnJvcnMgKi9cXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdEVNKHJ4a2FkX2Fib3J0XzFfc2hvcnRfY2hlY2ssXFx0XFx0XFxcInJ4a2FkMS1zaG9ydC1jaGVja1xcXCIpXFx0XFxcXFxcbkBAIC0xNDgsNiArMTQ4LDcgQEBcXG4gXFx0RU0ocnhycGNfZXByb3RvX3dyb25nX3NlY3VyaXR5LFxcdFxcdFxcXCJ3cm9uZy1zZWNcXFwiKVxcdFxcdFxcXFxcXG4gXFx0RU0ocnhycGNfcmVjdm1zZ19leGNlc3NfZGF0YSxcXHRcXHRcXFwicmVjdm1zZy1leGNlc3NcXFwiKVxcdFxcXFxcXG4gXFx0RU0ocnhycGNfcmVjdm1zZ19zaG9ydF9kYXRhLFxcdFxcdFxcXCJyZWN2bXNnLXNob3J0XFxcIilcXHRcXFxcXFxuK1xcdEVNKHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXFx0XFx0XFxcInR4LWVycm9yXFxcIilcXHRcXHRcXFxcXFxuIFxcdEVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFxcdFxcdFxcXCJzZW5kbXNnLWxhdGVcXFwiKVxcbiBcXG4gI2RlZmluZSByeHJwY19jYWxsX3Bva2VfdHJhY2VzIFxcXFxcXG5AQCAtMzQyLDYgKzM0Myw3IEBAXFxuIFxcdEVNKHJ4cnBjX2NhbGxfc2VlX2Rpc3RyaWJ1dGVfZXJyb3IsXFx0XFxcIlNFRSBkaXN0LWVyclxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY2FsbF9zZWVfaW5wdXQsXFx0XFx0XFxcIlNFRSBpbnB1dCAgIFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkLFxcdFxcXCJTRUUgbmZ5LXJsc2RcXFwiKSBcXFxcXFxuK1xcdEVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkLFxcdFxcXCJTRUUgbmZ5LXNraXBcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2csXFx0XFx0XFxcIlNFRSByZWN2bXNnIFxcXCIpIFxcXFxcXG4gXFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZ19yZXF1ZXVlLFxcdFxcXCJTRUUgcmVjdi1ycXVcXFwiKSBcXFxcXFxuIFxcdEVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2dfcmVxdWV1ZV9maXJzdCwgXFxcIlNFRSByZWN2LXJxRlxcXCIpIFxcXFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmggYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxcbmluZGV4IDg2NWYwNWZlMzdhYjkuLmNiMzZhNzA5ZjU0MGUgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcXG4rKysgYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxcbkBAIC02NDIsNiArNjQyLDcgQEAgZW51bSByeHJwY19jYWxsX2ZsYWcge1xcbiBcXHRSWFJQQ19DQUxMX1RYX0xBU1QsXFx0XFx0LyogTGFzdCBwYWNrZXQgaW4gVHggYnVmZmVyIChhdCByeHR4X3RvcCkgKi9cXG4gXFx0UlhSUENfQ0FMTF9UWF9BTExfQUNLRUQsXFx0LyogTGFzdCBwYWNrZXQgaGFzIGJlZW4gaGFyZC1hY2tlZCAqL1xcbiBcXHRSWFJQQ19DQUxMX1RYX05PX01PUkUsXFx0XFx0LyogTm8gbW9yZSBkYXRhIHRvIHRyYW5zbWl0IChNU0dfTU9SRSBkZWFzc2VydGVkKSAqL1xcbitcXHRSWFJQQ19DQUxMX1RYX0VSUk9SLFxcdFxcdC8qIFRlcm1pbmFsIGVycm9yOyBjYWxsIG5lZWRzIGFib3J0ICovXFxuIFxcdFJYUlBDX0NBTExfU0VORF9QSU5HLFxcdFxcdC8qIEEgcGluZyB3aWxsIG5lZWQgdG8gYmUgc2VudCAqL1xcbiBcXHRSWFJQQ19DQUxMX1JFVFJBTlNfVElNRU9VVCxcXHQvKiBSZXRyYW5zbWlzc2lvbiBkdWUgdG8gdGltZW91dCBvY2N1cnJlZCAqL1xcbiBcXHRSWFJQQ19DQUxMX0JFR0FOX1JYX1RJTUVSLFxcdC8qIFdlIGJlZ2FuIHRoZSBleHBlY3RfcnhfYnkgdGltZXIgKi9cXG5AQCAtMTEwOSw2ICsxMTEwLDcgQEAgc3RhdGljIGlubGluZSBib29sIHJ4cnBjX2lzX2NsaWVudF9jYWxsKGNvbnN0IHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbiAvKlxcbiAgKiBjYWxsX3N0YXRlLmNcXG4gICovXFxuK3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCk7XFxuIGJvb2wgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4gXFx0XFx0XFx0ICAgICAgIGVudW0gcnhycGNfY2FsbF9jb21wbGV0aW9uIGNvbXBsLFxcbiBcXHRcXHRcXHQgICAgICAgdTMyIGFib3J0X2NvZGUsXFxuQEAgLTE0NDEsNyArMTQ0Myw2IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcnhycGNfbG9jYWxfc2VxX29wcztcXG4gLypcXG4gICogcmVjdm1zZy5jXFxuICAqL1xcbi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKik7XFxuIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1zZ2hkciAqLCBzaXplX3QsIGludCk7XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jIGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xcbmluZGV4IDZhZmI1NDM3M2ViYmYuLjM2NDgxMGM2NTI3NjYgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xcbisrKyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcXG5AQCAtNyw2ICs3LDYwIEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwiYXItaW50ZXJuYWwuaFxcXCJcXG4gXFxuKy8qXFxuKyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9fcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4re1xcbitcXHRzdHJ1Y3QgcnhycGNfc29jayAqcng7XFxuK1xcdHN0cnVjdCBzb2NrICpzaztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1JFTEVBU0VELCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdHJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9yZWxlYXNlZCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXG4rXFx0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cXHUwMDNlc29ja2V0KTtcXG4rXFx0c2sgPSBcXHUwMDI2cngtXFx1MDAzZXNrO1xcbitcXHRpZiAocnggXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlIFxcdTAwM2MgUlhSUENfQ0xPU0UpIHtcXG4rXFx0XFx0aWYgKGNhbGwtXFx1MDAzZW5vdGlmeV9yeCkge1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y2FsbC1cXHUwMDNlbm90aWZ5X2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0XFx0Y2FsbC1cXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVxcdTAwM2V1c2VyX2NhbGxfSUQpO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjYWxsLVxcdTAwM2Vub3RpZnlfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19saW5rKSkge1xcbitcXHRcXHRcXHRcXHRyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTtcXG4rXFx0XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19saW5rLCBcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcXG4rXFx0XFx0XFx0XFx0X2RlYnVnKFxcXCJjYWxsICVwc1xcXCIsIHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KTtcXG4rXFx0XFx0XFx0XFx0c2stXFx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS5cXG4rICovXFxuK3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcXG4re1xcbitcXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSkge1xcbitcXHRcXHRyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBUcmFuc2l0aW9uIGEgY2FsbCB0byB0aGUgY29tcGxldGUgc3RhdGUuXFxuICAqL1xcbkBAIC0yNSw3ICs3OSw3IEBAIGJvb2wgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcXG4gXFx0cnhycGNfc2V0X2NhbGxfc3RhdGUoY2FsbCwgUlhSUENfQ0FMTF9DT01QTEVURSk7XFxuIFxcdHRyYWNlX3J4cnBjX2NhbGxfY29tcGxldGUoY2FsbCk7XFxuIFxcdHdha2VfdXAoXFx1MDAyNmNhbGwtXFx1MDAzZXdhaXRxKTtcXG4tXFx0cnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcXG4rXFx0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmMgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuY1xcbmluZGV4IDBlY2U3MTdkYjBmODUuLjFiZTUwZTBjOWNlZTUgMTAwNjQ0XFxuLS0tIGEvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcXG4rKysgYi9uZXQvcnhycGMvY29ubl9vYmplY3QuY1xcbkBAIC0zNCw3ICszNCwxMCBAQCB2b2lkIHJ4cnBjX3Bva2VfY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgZW51bSByeHJwY19jb25uX3RyYWNlIHdoeSlcXG4gXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2bG9jYWwtXFx1MDAzZWxvY2spO1xcbiBcXHRidXN5ID0gIWxpc3RfZW1wdHkoXFx1MDAyNmNvbm4tXFx1MDAzZWF0dGVuZF9saW5rKTtcXG4gXFx0aWYgKCFidXN5KSB7XFxuLVxcdFxcdHJ4cnBjX2dldF9jb25uZWN0aW9uKGNvbm4sIHdoeSk7XFxuK1xcdFxcdGlmICghcnhycGNfZ2V0X2Nvbm5lY3Rpb25fbWF5YmUoY29ubiwgd2h5KSkge1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmxvY2FsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuIFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmNvbm4tXFx1MDAzZWF0dGVuZF9saW5rLCBcXHUwMDI2bG9jYWwtXFx1MDAzZWNvbm5fYXR0ZW5kX3EpO1xcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bG9jYWwtXFx1MDAzZWxvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmNcXG5pbmRleCBhMGFhNzhkODkyODk3Li4zMGQ2ZGIwNTJjMjE2IDEwMDY0NFxcbi0tLSBhL25ldC9yeHJwYy9rZXkuY1xcbisrKyBiL25ldC9yeHJwYy9rZXkuY1xcbkBAIC0xNzIsNiArMTcyLDcgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCxcXG4gXFx0Y29uc3QgX19iZTMyICp0aWNrZXQsICprZXk7XFxuIFxcdHM2NCB0bXA7XFxuIFxcdHNpemVfdCByYXdfa2V5bGVuLCByYXdfdGt0bGVuLCBrZXlsZW4sIHRrdGxlbjtcXG4rXFx0aW50IHJldCA9IC1FS0VZUkVKRUNURUQ7XFxuIFxcbiBcXHRfZW50ZXIoXFxcIix7JXgsJXgsJXgsJXh9LCV4XFxcIixcXG4gXFx0ICAgICAgIG50b2hsKHhkclswXSksIG50b2hsKHhkclsxXSksIG50b2hsKHhkclsyXSksIG50b2hsKHhkclszXSksXFxuQEAgLTIyOSw2ICsyMzAsMTEgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCxcXG4gXFx0dG9rZW4tXFx1MDAzZXJ4Z2stXFx1MDAzZWtleS5kYXRhXFx0PSB0b2tlbi1cXHUwMDNlcnhnay1cXHUwMDNlX2tleTtcXG4gXFx0dG9rZW4tXFx1MDAzZXJ4Z2stXFx1MDAzZXRpY2tldC5sZW4gPSByYXdfdGt0bGVuO1xcbiBcXG4rXFx0aWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodG9rZW4tXFx1MDAzZXJ4Z2stXFx1MDAzZWVuY3R5cGUpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9QS0c7XFxuK1xcdFxcdGdvdG8gcmVqZWN0X3Rva2VuO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAodG9rZW4tXFx1MDAzZXJ4Z2stXFx1MDAzZWVuZHRpbWUgIT0gMCkge1xcbiBcXHRcXHRleHBpcnkgPSByeHJwY19zNjRfdG9fdGltZTY0KHRva2VuLVxcdTAwM2VyeGdrLVxcdTAwM2VlbmR0aW1lKTtcXG4gXFx0XFx0aWYgKGV4cGlyeSBcXHUwMDNjIDApXFxuQEAgLTI4MCw3ICsyODYsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhnayhzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwLFxcbiBcXHRrZnJlZSh0b2tlbi1cXHUwMDNlcnhnayk7XFxuIFxcdGtmcmVlKHRva2VuKTtcXG4gcmVqZWN0Olxcbi1cXHRyZXR1cm4gLUVLRVlSRUpFQ1RFRDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gZXhwaXJlZDpcXG4gXFx0a2ZyZWUodG9rZW4tXFx1MDAzZXJ4Z2spO1xcbiBcXHRrZnJlZSh0b2tlbik7XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jXFxuaW5kZXggZWZjYmE0YjJlNzRmMC4uMjhiMjE0OGI1NjkzNiAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXFxuKysrIGIvbmV0L3J4cnBjL3JlY3Ztc2cuY1xcbkBAIC0xNywxMyArMTcsMTIgQEBcXG4gI2luY2x1ZGUgXFxcImFyLWludGVybmFsLmhcXFwiXFxuIFxcbiAvKlxcbi0gKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuICBGdXJ0aGVyXFxuLSAqIG5vdGlmaWNhdGlvbnMgYXJlIHN1cHByZXNzZWQgYnkgcHV0dGluZyByZWN2bXNnX2xpbmsgb24gYSBkdW1teSBxdWV1ZS5cXG4rICogUmVxdWV1ZSBhIGNhbGwgZm9yIHJlY3Ztc2coKSB0byBwaWNrIHVwLlxcbiAgKi9cXG4tdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbitzdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXFxuIHtcXG4tXFx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xcbi1cXHRzdHJ1Y3Qgc29jayAqc2s7XFxuK1xcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXFx1MDAzZXNrKTtcXG4rXFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNnJ4LVxcdTAwM2VzaztcXG4gXFxuIFxcdF9lbnRlcihcXFwiJWRcXFwiLCBjYWxsLVxcdTAwM2VkZWJ1Z19pZCk7XFxuIFxcbkBAIC0zMiwzMSArMzEsMTggQEAgdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFxuLVxcdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXFx1MDAzZXNvY2tldCk7XFxuLVxcdHNrID0gXFx1MDAyNnJ4LVxcdTAwM2VzaztcXG4tXFx0aWYgKHJ4IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSBcXHUwMDNjIFJYUlBDX0NMT1NFKSB7XFxuLVxcdFxcdGlmIChjYWxsLVxcdTAwM2Vub3RpZnlfcngpIHtcXG4tXFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Y2FsbC1cXHUwMDNlbm90aWZ5X2xvY2spO1xcbi1cXHRcXHRcXHRjYWxsLVxcdTAwM2Vub3RpZnlfcngoc2ssIGNhbGwsIGNhbGwtXFx1MDAzZXVzZXJfY2FsbF9JRCk7XFxuLVxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2Y2FsbC1cXHUwMDNlbm90aWZ5X2xvY2spO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19sb2NrKTtcXG4tXFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluaykpIHtcXG4tXFx0XFx0XFx0XFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XFxuLVxcdFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmNhbGwtXFx1MDAzZXJlY3Ztc2dfbGluaywgXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX3EpO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfbG9jayk7XFxuK1xcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnJ4LVxcdTAwM2VyZWN2bXNnX2xvY2spO1xcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19saW5rKSkge1xcbitcXHRcXHRyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTtcXG4rXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19saW5rLCBcXHUwMDI2cngtXFx1MDAzZXJlY3Ztc2dfcSk7XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZyeC1cXHUwMDNlcmVjdm1zZ19sb2NrKTtcXG4gXFxuLVxcdFxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XFxuLVxcdFxcdFxcdFxcdF9kZWJ1ZyhcXFwiY2FsbCAlcHNcXFwiLCBzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSk7XFxuLVxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuK1xcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XFxuK1xcdFxcdF9kZWJ1ZyhcXFwiY2FsbCAlcHNcXFwiLCBzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSk7XFxuK1xcdFxcdHNrLVxcdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdF9sZWF2ZShcXFwiXFxcIik7XFxuIH1cXG4gXFxuQEAgLTU2MSw3ICs1NDcsNyBAQCBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcbiBcXHRpZiAoIShmbGFncyBcXHUwMDI2IE1TR19QRUVLKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2Y2FsbC1cXHUwMDNlcmVjdm1zZ19xdWV1ZSkpXFxuLVxcdFxcdHJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XFxuK1xcdFxcdHJ4cnBjX3JlcXVldWVfY2FsbChzb2NrLCBjYWxsKTtcXG4gXFx0Z290byBub3RfeWV0X2NvbXBsZXRlO1xcbiBcXG4gY2FsbF9mYWlsZWQ6XFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeGdrLmMgYi9uZXQvcnhycGMvcnhnay5jXFxuaW5kZXggNzdhNjdhY2UxZDI0OC4uYjQ5MjIxZjU3ZjY3NyAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvcnhnay5jXFxuKysrIGIvbmV0L3J4cnBjL3J4Z2suY1xcbkBAIC0yNTEsOCArMjUxLDEwIEBAIHN0YXRpYyBpbnQgcnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuIFxcdFxcdFxcdFxcdFxcdCBHRlBfTk9GUyk7XFxuIFxcdGlmIChJU19FUlIoZ2spKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihnayk7XFxuK1xcdHdyaXRlX2xvY2soXFx1MDAyNmNvbm4tXFx1MDAzZXNlY3VyaXR5X3VzZV9sb2NrKTtcXG4gXFx0Y29ubi1cXHUwMDNlcnhnay5lbmN0eXBlID0gZ2stXFx1MDAzZWtyYjUtXFx1MDAzZWV0eXBlO1xcbiBcXHRjb25uLVxcdTAwM2VyeGdrLmtleXNbZ2stXFx1MDAzZWtleV9udW1iZXIgXFx1MDAyNiAzXSA9IGdrO1xcbitcXHR3cml0ZV91bmxvY2soXFx1MDAyNmNvbm4tXFx1MDAzZXNlY3VyaXR5X3VzZV9sb2NrKTtcXG4gXFxuIFxcdHN3aXRjaCAoY29ubi1cXHUwMDNlc2VjdXJpdHlfbGV2ZWwpIHtcXG4gXFx0Y2FzZSBSWFJQQ19TRUNVUklUWV9QTEFJTjpcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4cGVyZi5jIGIvbmV0L3J4cnBjL3J4cGVyZi5jXFxuaW5kZXggYjhkZjZkMjIzMTRkNi4uZWJkNTQyMjJjNjRlZiAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvcnhwZXJmLmNcXG4rKysgYi9uZXQvcnhycGMvcnhwZXJmLmNcXG5AQCAtNTM4LDE1ICs1MzgsMTggQEAgc3RhdGljIGludCByeHBlcmZfcHJvY2Vzc19jYWxsKHN0cnVjdCByeHBlcmZfY2FsbCAqY2FsbClcXG4gXFx0aW92WzBdLmlvdl9sZW5cXHQ9IGxlbjtcXG4gXFx0aW92X2l0ZXJfa3ZlYyhcXHUwMDI2bXNnLm1zZ19pdGVyLCBXUklURSwgaW92LCAxLCBsZW4pO1xcbiBcXHRtc2cubXNnX2ZsYWdzID0gMDtcXG4tXFx0biA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEocnhwZXJmX3NvY2tldCwgY2FsbC1cXHUwMDNlcnhjYWxsLCBcXHUwMDI2bXNnLCBsZW4sXFxuLVxcdFxcdFxcdFxcdCAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShyeHBlcmZfc29ja2V0LCBjYWxsLVxcdTAwM2VyeGNhbGwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtc2csIG1zZ19kYXRhX2xlZnQoXFx1MDAyNm1zZyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTtcXG4rXFx0fSB3aGlsZSAobiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG1zZ19kYXRhX2xlZnQoXFx1MDAyNm1zZykgXFx1MDAzZSAwKTtcXG4rXFxuIFxcdGlmIChuIFxcdTAwM2U9IDApXFxuIFxcdFxcdHJldHVybiAwOyAvKiBTdWNjZXNzICovXFxuIFxcbi1cXHRpZiAobiA9PSAtRU5PTUVNKVxcbi1cXHRcXHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChyeHBlcmZfc29ja2V0LCBjYWxsLVxcdTAwM2VyeGNhbGwsXFxuLVxcdFxcdFxcdFxcdFxcdFJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sXFxuLVxcdFxcdFxcdFxcdFxcdHJ4cGVyZl9hYm9ydF9vb20pO1xcbitcXHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChyeHBlcmZfc29ja2V0LCBjYWxsLVxcdTAwM2VyeGNhbGwsXFxuK1xcdFxcdFxcdFxcdFJYR0VOX1NTX01BUlNIQUwsIG4sXFxuK1xcdFxcdFxcdFxcdHJ4cGVyZl9hYm9ydF9zZW5kX2Vycm9yKTtcXG4gXFx0cmV0dXJuIG47XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9zZW5kbXNnLmMgYi9uZXQvcnhycGMvc2VuZG1zZy5jXFxuaW5kZXggZWQyYzlhNTEwMDVhZC4uOGJiMzI3ZGMyODMzZSAxMDA2NDRcXG4tLS0gYS9uZXQvcnhycGMvc2VuZG1zZy5jXFxuKysrIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xcbkBAIC0zMjAsOCArMzIwLDggQEAgc3RhdGljIGludCByeHJwY19hbGxvY190eHF1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXFxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4tXFx0XFx0XFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsXFxuLVxcdFxcdFxcdCAgIGJvb2wgKl9kcm9wcGVkX2xvY2spXFxuK1xcdFxcdFxcdCAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KVxcbitcXHRfX3JlbGVhc2VzKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KVxcbiB7XFxuIFxcdHN0cnVjdCByeHJwY190eGJ1ZiAqdHhiO1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2cngtXFx1MDAzZXNrO1xcbkBAIC0zMzAsMjkgKzMzMCwzNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdGJvb2wgbW9yZSA9IG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX01PUkU7XFxuIFxcdGludCByZXQsIGNvcGllZCA9IDA7XFxuIFxcbi1cXHRpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9OT19NT1JFLCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXFx1MDAzZWRlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcXG4tXFx0XFx0XFx0XFx0ICBjYWxsLVxcdTAwM2VjaWQsIGNhbGwtXFx1MDAzZWNhbGxfaWQsIGNhbGwtXFx1MDAzZXJ4X2NvbnN1bWVkLFxcbi1cXHRcXHRcXHRcXHQgIDAsIC1FUFJPVE8pO1xcbi1cXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4tXFx0fVxcbi1cXG4gXFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuIFxcbiBcXHRyZXQgPSByeHJwY193YWl0X3RvX2JlX2Nvbm5lY3RlZChjYWxsLCBcXHUwMDI2dGltZW8pO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0aWYgKGNhbGwtXFx1MDAzZWNvbm4tXFx1MDAzZXN0YXRlID09IFJYUlBDX0NPTk5fQ0xJRU5UX1VOU0VDVVJFRCkge1xcbiBcXHRcXHRyZXQgPSByeHJwY19pbml0X2NsaWVudF9jb25uX3NlY3VyaXR5KGNhbGwtXFx1MDAzZWNvbm4pO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiB0aGlzIHNob3VsZCBiZSBpbiBwb2xsICovXFxuIFxcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spO1xcbiBcXG4gcmVsb2FkOlxcbitcXHRpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9OT19NT1JFLCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpKSkge1xcbitcXHRcXHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVxcdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXFxuK1xcdFxcdFxcdFxcdCAgY2FsbC1cXHUwMDNlY2lkLCBjYWxsLVxcdTAwM2VjYWxsX2lkLCBjYWxsLVxcdTAwM2VyeF9jb25zdW1lZCxcXG4rXFx0XFx0XFx0XFx0ICAwLCAtRVBST1RPKTtcXG4rXFx0XFx0cmV0ID0gLUVQUk9UTztcXG4rXFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4rXFx0fVxcbitcXHRpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgXFx1MDAyNmNhbGwtXFx1MDAzZWZsYWdzKSkpIHtcXG4rXFx0XFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cXHUwMDNlZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXFxuK1xcdFxcdFxcdFxcdCAgY2FsbC1cXHUwMDNlY2lkLCBjYWxsLVxcdTAwM2VjYWxsX2lkLCBjYWxsLVxcdTAwM2VyeF9jb25zdW1lZCxcXG4rXFx0XFx0XFx0XFx0ICAwLCAtRUlPKTtcXG4rXFx0XFx0cmV0ID0gLUVJTztcXG4rXFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4rXFx0fVxcbitcXG4gXFx0dHhiID0gY2FsbC1cXHUwMDNldHhfcGVuZGluZztcXG4gXFx0Y2FsbC1cXHUwMDNldHhfcGVuZGluZyA9IE5VTEw7XFxuIFxcdGlmICh0eGIpXFxuQEAgLTM3OSw5ICszODcsOSBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcbiBcXHRyZXQgPSAtRU1TR1NJWkU7XFxuIFxcdGlmIChjYWxsLVxcdTAwM2V0eF90b3RhbF9sZW4gIT0gLTEpIHtcXG4tXFx0XFx0aWYgKGxlbiAtIGNvcGllZCBcXHUwMDNlIGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbilcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNlIGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbilcXG4gXFx0XFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4tXFx0XFx0aWYgKCFtb3JlIFxcdTAwMjZcXHUwMDI2IGxlbiAtIGNvcGllZCAhPSBjYWxsLVxcdTAwM2V0eF90b3RhbF9sZW4pXFxuK1xcdFxcdGlmICghbW9yZSBcXHUwMDI2XFx1MDAyNiBsZW4gIT0gY2FsbC1cXHUwMDNldHhfdG90YWxfbGVuKVxcbiBcXHRcXHRcXHRnb3RvIG1heWJlX2Vycm9yO1xcbiBcXHR9XFxuIFxcbkBAIC00MDUsNyArNDEzLDcgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxcbiBcXHRcXHRcXHQgKiB0aGUgc2VjdXJpdHkgaGVhZGVyIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBwYWRkZWRcXG4gXFx0XFx0XFx0ICogcmVnaW9uIChlbmMgYmxvY2tzaXplKSwgYnV0IHRoZSB0cmFpbGVyIGlzIG5vdC5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdHJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbXNnX2RhdGFfbGVmdChtc2cpO1xcbitcXHRcXHRcXHRyZW1haW4gPSBtb3JlID8gSU5UX01BWCA6IGxlbjtcXG4gXFx0XFx0XFx0dHhiID0gY2FsbC1cXHUwMDNlY29ubi1cXHUwMDNlc2VjdXJpdHktXFx1MDAzZWFsbG9jX3R4YnVmKGNhbGwsIHJlbWFpbiwgc2stXFx1MDAzZXNrX2FsbG9jYXRpb24pO1xcbiBcXHRcXHRcXHRpZiAoIXR4Yikge1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbkBAIC00MTYsOCArNDI0LDggQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxcbiBcXHRcXHRfZGVidWcoXFxcImFwcGVuZFxcXCIpO1xcbiBcXG4gXFx0XFx0LyogYXBwZW5kIG5leHQgc2VnbWVudCBvZiBkYXRhIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciAqL1xcbi1cXHRcXHRpZiAobXNnX2RhdGFfbGVmdChtc2cpIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRzaXplX3QgY29weSA9IHVtaW4odHhiLVxcdTAwM2VzcGFjZSwgbXNnX2RhdGFfbGVmdChtc2cpKTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0c2l6ZV90IGNvcHkgPSBtaW4zKHR4Yi1cXHUwMDNlc3BhY2UsIGxlbiwgbXNnX2RhdGFfbGVmdChtc2cpKTtcXG4gXFxuIFxcdFxcdFxcdF9kZWJ1ZyhcXFwiYWRkICV6dVxcXCIsIGNvcHkpO1xcbiBcXHRcXHRcXHRpZiAoIWNvcHlfZnJvbV9pdGVyX2Z1bGwodHhiLVxcdTAwM2VkYXRhICsgdHhiLVxcdTAwM2VvZmZzZXQsXFxuQEAgLTQyOCw2ICs0MzYsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXFxuIFxcdFxcdFxcdHR4Yi1cXHUwMDNlbGVuICs9IGNvcHk7XFxuIFxcdFxcdFxcdHR4Yi1cXHUwMDNlb2Zmc2V0ICs9IGNvcHk7XFxuIFxcdFxcdFxcdGNvcGllZCArPSBjb3B5O1xcbitcXHRcXHRcXHRsZW4gLT0gY29weTtcXG4gXFx0XFx0XFx0aWYgKGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSlcXG4gXFx0XFx0XFx0XFx0Y2FsbC1cXHUwMDNldHhfdG90YWxfbGVuIC09IGNvcHk7XFxuIFxcdFxcdH1cXG5AQCAtNDM5LDYyICs0NDgsMTAwIEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcXG4gXFxuIFxcdFxcdC8qIGFkZCB0aGUgcGFja2V0IHRvIHRoZSBzZW5kIHF1ZXVlIGlmIGl0J3Mgbm93IGZ1bGwgKi9cXG4gXFx0XFx0aWYgKCF0eGItXFx1MDAzZXNwYWNlIHx8XFxuLVxcdFxcdCAgICAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXFx1MDAyNlxcdTAwMjYgIW1vcmUpKSB7XFxuLVxcdFxcdFxcdGlmIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCBcXHUwMDI2XFx1MDAyNiAhbW9yZSlcXG4tXFx0XFx0XFx0XFx0dHhiLVxcdTAwM2VmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDtcXG4tXFxuK1xcdFxcdCAgICAobGVuID09IDAgXFx1MDAyNlxcdTAwMjYgIW1vcmUpKSB7XFxuK1xcdFxcdFxcdC8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZFxcbitcXHRcXHRcXHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxcbitcXHRcXHRcXHQgKiBlbmNyeXB0LiAgQXNzdW1lIHRoYXQgRU5PTUVNIGlzIHJldHJ5YWJsZSwgYnV0XFxuK1xcdFxcdFxcdCAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC5cXG4rXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdHJldCA9IGNhbGwtXFx1MDAzZXNlY3VyaXR5LVxcdTAwM2VzZWN1cmVfcGFja2V0KGNhbGwsIHR4Yik7XFxuLVxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0LyogQXNzdW1lIHRoYXQgRU5PTUVNIGhlcmUgbWVhbnMgdGhhdCB0aGVcXG4rXFx0XFx0XFx0XFx0ICogZW5jcnlwdGlvbiBoYXNuJ3QgaGFwcGVuZWQgeWV0LiAgVGhlIGRhdGEgaXNcXG4rXFx0XFx0XFx0XFx0ICogYWxpZ25lZCB0byBhdm9pZCB0aGUgbmVlZCBmb3Igc2xvdyBidWZmZXJpbmdcXG4rXFx0XFx0XFx0XFx0ICogaW4gdGhlIGNyeXB0byB3YWxrLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PTUVNKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIG1heWJlX2Vycm9yX3Jld2luZDtcXG4rXFx0XFx0XFx0XFx0c2V0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcXHUwMDI2Y2FsbC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRcXHRcXHRnb3RvIG91dF90eGI7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGlmIChsZW4gPT0gMCBcXHUwMDI2XFx1MDAyNiAhbW9yZSlcXG4rXFx0XFx0XFx0XFx0dHhiLVxcdTAwM2VmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDtcXG4gXFx0XFx0XFx0cnhycGNfcXVldWVfcGFja2V0KHJ4LCBjYWxsLCB0eGIsIG5vdGlmeV9lbmRfdHgpO1xcbiBcXHRcXHRcXHR0eGIgPSBOVUxMO1xcbiBcXHRcXHR9XFxuLVxcdH0gd2hpbGUgKG1zZ19kYXRhX2xlZnQobXNnKSBcXHUwMDNlIDApO1xcbitcXHR9IHdoaWxlIChsZW4gXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IG1zZ19kYXRhX2xlZnQobXNnKSBcXHUwMDNlIDApO1xcbiBcXG4gc3VjY2VzczpcXG4gXFx0cmV0ID0gY29waWVkO1xcbi1cXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgY2FsbC1cXHUwMDNlZXJyb3IgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXQgPSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4tb3V0OlxcbitvdXRfdHhiOlxcbiBcXHRjYWxsLVxcdTAwM2V0eF9wZW5kaW5nID0gdHhiO1xcbitvdXRfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmNhbGwtXFx1MDAzZXVzZXJfbXV0ZXgpO1xcbiBcXHRfbGVhdmUoXFxcIiA9ICVkXFxcIiwgcmV0KTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gXFxuIGNhbGxfdGVybWluYXRlZDpcXG4gXFx0cnhycGNfcHV0X3R4YnVmKHR4YiwgcnhycGNfdHhidWZfcHV0X3NlbmRfYWJvcnRlZCk7XFxuLVxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCBjYWxsLVxcdTAwM2VlcnJvcik7XFxuLVxcdHJldHVybiBjYWxsLVxcdTAwM2VlcnJvcjtcXG4tXFxuK1xcdGNhbGwtXFx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xcbitcXHRyZXQgPSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4rXFx0Z290byBvdXRfdW5sb2NrO1xcbitcXG4rbWF5YmVfZXJyb3JfcmV3aW5kOlxcbitcXHQvKiBJZiB3ZSBnb3QgYSByZXRyeWFibGUgZXJyb3IgYWZ0ZXIgY29weWluZyBhbGwgdGhlIHN1cHBsaWVkIGRhdGEgaW50b1xcbitcXHQgKiB0aGUgbGFzdCBwYWNrZXQsIHdlIG5lZWQgdG8gcmV3aW5kIGFzIG11Y2ggYXMgd2UgY2FuIHNvIHRoZSBjYWxsZXJcXG4rXFx0ICoga25vd3MgdGhleSBuZWVkIHRvIHJldHJ5IHRoZSBzZW5kbXNnLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNvcGllZCBcXHUwMDI2XFx1MDAyNiAhbW9yZSBcXHUwMDI2XFx1MDAyNiAhbGVuKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCByZXdpbmRfYnkgPSB1bWluKGNvcGllZCwgdHhiLVxcdTAwM2VsZW4pO1xcbitcXG4rXFx0XFx0dHhiLVxcdTAwM2VzcGFjZSAgKz0gcmV3aW5kX2J5O1xcbitcXHRcXHR0eGItXFx1MDAzZWxlbiAgICAtPSByZXdpbmRfYnk7XFxuK1xcdFxcdHR4Yi1cXHUwMDNlb2Zmc2V0IC09IHJld2luZF9ieTtcXG4rXFx0XFx0Y29waWVkICAgICAgLT0gcmV3aW5kX2J5O1xcbitcXHRcXHRpZiAoY2FsbC1cXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxcbitcXHRcXHRcXHRjYWxsLVxcdTAwM2V0eF90b3RhbF9sZW4gKz0gcmV3aW5kX2J5O1xcbitcXHRcXHRpb3ZfaXRlcl9yZXZlcnQoXFx1MDAyNm1zZy1cXHUwMDNlbXNnX2l0ZXIsIHJld2luZF9ieSk7XFxuK1xcdH1cXG4gbWF5YmVfZXJyb3I6XFxuLVxcdGlmIChjb3BpZWQpXFxuK1xcdGlmIChjb3BpZWQpIHtcXG4rXFx0XFx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGNhbGwtXFx1MDAzZWVycm9yIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRyZXQgPSBjYWxsLVxcdTAwM2VlcnJvcjtcXG4rXFx0XFx0XFx0Z290byBvdXRfdHhiO1xcbitcXHRcXHR9XFxuIFxcdFxcdGdvdG8gc3VjY2VzcztcXG4tXFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0Z290byBvdXRfdHhiO1xcbiBcXG4gZWZhdWx0OlxcbiBcXHRyZXQgPSAtRUZBVUxUO1xcbi1cXHRnb3RvIG91dDtcXG4rXFx0Z290byBvdXRfdHhiO1xcbiBcXG4gd2FpdF9mb3Jfc3BhY2U6XFxuIFxcdHJldCA9IC1FQUdBSU47XFxuIFxcdGlmIChtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVClcXG4gXFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KTtcXG4tXFx0Kl9kcm9wcGVkX2xvY2sgPSB0cnVlO1xcbitcXG4gXFx0cmV0ID0gcnhycGNfd2FpdF9mb3JfdHhfd2luZG93KHJ4LCBjYWxsLCBcXHUwMDI2dGltZW8sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19XQUlUQUxMKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gbWF5YmVfZXJyb3I7XFxuK1xcdFxcdGdvdG8gb3V0X25vbG9jaztcXG4gXFx0aWYgKGNhbGwtXFx1MDAzZWludGVycnVwdGliaWxpdHkgPT0gUlhSUENfSU5URVJSVVBUSUJMRSkge1xcbiBcXHRcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0cmV0ID0gc29ja19pbnRyX2Vycm5vKHRpbWVvKTtcXG4tXFx0XFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4rXFx0XFx0XFx0Z290byBvdXRfbm9sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNhbGwtXFx1MDAzZXVzZXJfbXV0ZXgpO1xcbiBcXHR9XFxuLVxcdCpfZHJvcHBlZF9sb2NrID0gZmFsc2U7XFxuIFxcdGdvdG8gcmVsb2FkO1xcbitvdXRfbm9sb2NrOlxcbitcXHRfbGVhdmUoXFxcIiA9ICVkIFtpbnRyXVxcXCIsIHJldCk7XFxuK1xcdHJldHVybiBjb3BpZWQgPzogcmV0O1xcbiB9XFxuIFxcbiAvKlxcbkBAIC02NjAsNyArNzA3LDYgQEAgcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLFxcbiBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbDtcXG4tXFx0Ym9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHN0cnVjdCByeHJwY19zZW5kX3BhcmFtcyBwID0ge1xcbkBAIC03NjksMTYgKzgxNSwxNSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gXFx0XFx0cmV0ID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgUlhSUENfQ01EX1NFTkRfREFUQTpcXG4tXFx0XFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCwgXFx1MDAyNmRyb3BwZWRfbG9jayk7XFxuLVxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMKTtcXG4rXFx0XFx0Z290byBlcnJvcl9wdXQ7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbiBvdXRfcHV0X3VubG9jazpcXG4tXFx0aWYgKCFkcm9wcGVkX2xvY2spXFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y2FsbC1cXHUwMDNldXNlcl9tdXRleCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Y2FsbC1cXHUwMDNldXNlcl9tdXRleCk7XFxuIGVycm9yX3B1dDpcXG4gXFx0cnhycGNfcHV0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9wdXRfc2VuZG1zZyk7XFxuIFxcdF9sZWF2ZShcXFwiID0gJWRcXFwiLCByZXQpO1xcbkBAIC04MDAsMTUgKzg0NSwyMSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4gICogQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byBzZW5kIGRhdGEgb24gYSBjYWxsLiAgVGhlIGNhbGwgbXVzdCBiZSBpbiBhbiBzdGF0ZVxcbiAgKiBhcHByb3ByaWF0ZSB0byBzZW5kaW5nIGRhdGEuICBObyBjb250cm9sIGRhdGEgc2hvdWxkIGJlIHN1cHBsaWVkIGluIEBtc2csXFxuICAqIG5vciBzaG91bGQgYW4gYWRkcmVzcyBiZSBzdXBwbGllZC4gIE1TR19NT1JFIHNob3VsZCBiZSBmbGFnZ2VkIGlmIHRoZXJlJ3NcXG4tICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZS5cXG4rICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZSBpZlxcbisgKiBhbGwgdGhlIGRhdGEgaXMgYnVmZmVyZWQuXFxuKyAqXFxuKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYSBzaG9ydCBzZW5kLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZVxcbisgKiBjYWxsZWQgYWdhaW4gZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgb3IgdG8gcGljayB1cCBhbiBlcnJvciB0aGF0XFxuKyAqIGNhdXNlZCB0aGUgc2hvcnQgc2VuZC5cXG4gICpcXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgYnl0ZXMgYnVmZmVyZWQgKGNvdWxkIGJlICUwIGlmIEBsZW4gaXMgMCBvclxcbisgKiBtc2dfaXRlciBob2xkcyAwIGJ5dGVzKSBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGVcXG4rICogb3RoZXJ3aXNlLlxcbiAgKi9cXG4gaW50IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpXFxuIHtcXG4tXFx0Ym9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdF9lbnRlcihcXFwieyVkfSxcXFwiLCBjYWxsLVxcdTAwM2VkZWJ1Z19pZCk7XFxuQEAgLTgxOSwxMiArODcwLDEwIEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KTtcXG4gXFxuIFxcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLVxcdTAwM2VzayksIGNhbGwsIG1zZywgbGVuLFxcbi1cXHRcXHRcXHQgICAgICBub3RpZnlfZW5kX3R4LCBcXHUwMDI2ZHJvcHBlZF9sb2NrKTtcXG4rXFx0XFx0XFx0ICAgICAgbm90aWZ5X2VuZF90eCk7XFxuIFxcdGlmIChyZXQgPT0gLUVTSFVURE9XTilcXG4gXFx0XFx0cmV0ID0gY2FsbC1cXHUwMDNlZXJyb3I7XFxuIFxcbi1cXHRpZiAoIWRyb3BwZWRfbG9jaylcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjYWxsLVxcdTAwM2V1c2VyX211dGV4KTtcXG4gXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDk6MjMuODUwMzcxMjUxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NDE5MDI2OTgwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJSWEdLXCIsXG4gICAgXCJSWFBFUkZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyeHJwY19zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX2RvX3NlbmRtc2dcIixcbiAgICBcInJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX3JlY3Ztc2dcIixcbiAgICBcInJ4cnBjX25vdGlmeV9zb2NrZXRcIixcbiAgICBcInJ4cnBjX3Bva2VfY29ublwiLFxuICAgIFwicnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrXCIsXG4gICAgXCJyeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eVwiLFxuICAgIFwiYWZzX21ha2VfY2FsbFwiLFxuICAgIFwiYWZzX3NlbmRfc2ltcGxlX3JlcGx5XCIsXG4gICAgXCJhZnNfc2VuZF9lbXB0eV9yZXBseVwiLFxuICAgIFwiYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5cIixcbiAgICBcInJ4cGVyZl9wcm9jZXNzX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBzb2NrZXQgZGF0YSBzZW5kaW5nIGFuZCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLCBjb25uZWN0aW9uIHJlZmVyZW5jZSBjb3VudGluZywga2V5IHBheWxvYWQgcGFyc2luZywgYW5kIGluLWtlcm5lbCBBRlMvcnhwZXJmIHNlbmQgcGF0aHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZXMgYW5kIGVycm9yLWhhbmRsaW5nIHBhdGhzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQUZfUlhSUEMgc29ja2V0cywga2V5cyBzeXNjYWxscywgYW5kIEFGUyBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZDNhZmYyMzM3NjkwODE2OTNlZGE4ODliNThhYTMyMDNhNjI4OTJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNDo0OToyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0XG5pbmRleCA4OTI2ZGFiOGUyZTYwLi43ZGY2YWZmNzY0NGMwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdFxuQEAgLTg3OSwxNCArODc5LDIxIEBAIFRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgYXMgZm9sbG93czpcbiAgICAgIGV4Y2x1c2l2ZWx5IHRvIGluLWtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Nlcy4gIG1zZy5tc2dfZmxhZ3MgbWF5IGJlIGdpdmVuXG4gICAgICBNU0dfTU9SRSBpZiB0aGVyZSB3aWxsIGJlIHN1YnNlcXVlbnQgZGF0YSBzZW5kcyBmb3IgdGhpcyBjYWxsLlxuIFxuLSAgICAgVGhlIG1zZyBtdXN0IG5vdCBzcGVjaWZ5IGEgZGVzdGluYXRpb24gYWRkcmVzcywgY29udHJvbCBkYXRhIG9yIGFueSBmbGFnc1xuLSAgICAgb3RoZXIgdGhhbiBNU0dfTU9SRS4gIGxlbiBpcyB0aGUgdG90YWwgYW1vdW50IG9mIGRhdGEgdG8gdHJhbnNtaXQuXG4rICAgICBtc2cgbXVzdCBub3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGNvbnRyb2wgZGF0YSBvciBhbnkgZmxhZ3NcbisgICAgIG90aGVyIHRoYW4gTVNHX01PUkUuICBsZW4gaXMgdGhlIGFtb3VudCBvZiBkYXRhIHRvIGFkZCB0byB0aGVcbisgICAgIHRyYW5zbWlzc2lvbi4gIFRoZSBsYXN0LXBhY2tldCBmbGFnIHdpbGwgb25seSBiZSBzZXQgb24gdGhlIG91dGdvaW5nXG4rICAgICBwYWNrZXQgaWYgTVNHX01PUkUgaXMgbm90IHNldCBhbmQgbGVuIGFtb3VudCBvZiBieXRlcyBhcmUgYnVmZmVyZWQuXG4gXG4gICAgICBub3RpZnlfZW5kX3J4IGNhbiBiZSBOVUxMIG9yIGl0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBmdW5jdGlvbiB0byBiZVxuICAgICAgY2FsbGVkIHdoZW4gdGhlIGNhbGwgY2hhbmdlcyBzdGF0ZSB0byBlbmQgdGhlIFR4IHBoYXNlLiAgVGhpcyBmdW5jdGlvbiBpc1xuICAgICAgY2FsbGVkIHdpdGggYSBzcGlubG9jayBoZWxkIHRvIHByZXZlbnQgdGhlIGxhc3QgREFUQSBwYWNrZXQgZnJvbSBiZWluZ1xuICAgICAgdHJhbnNtaXR0ZWQgdW50aWwgdGhlIGZ1bmN0aW9uIHJldHVybnMuXG4gXG4rICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50IG9mIGRhdGEgYnVmZmVyZWQgb3IgYW4gZXJyb3IuICBJdCB3aWxsXG4rICAgICByZXR1cm4gemVybyBvbmx5IGlmIGxlbiBpcyAwIG9yIGlmIG1zZy1cdTAwM2Vtc2dfaXRlciBpcyBlbXB0eS4gIEl0IG1heSBhbHNvXG4rICAgICBtYWtlIGEgc2hvcnQgd3JpdGUsIGJ1ZmZlcmluZyBsZXNzIHRoYW4gdGhlIGFtb3VudCBvZiBkYXRhIHByb3ZpZGVkIG9yIHRoZVxuKyAgICAgbGVuIHNwZWNpZmllZCwgaW4gd2hpY2ggY2FzZSBpdCBzaG91bGQgYmUgY2FsbGVkIGFnYWluLlxuK1xuICAoIykgUmVjZWl2ZSBkYXRhIGZyb20gYSBjYWxsOjpcbiBcbiBcdGludCByeHJwY19rZXJuZWxfcmVjdl9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2NtX3NlY3VyaXR5LmMgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuaW5kZXggMTAzMTY4YzcwZGQ0ZC4uNWVlZWVmNzYxY2YzMSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jXG4rKysgYi9mcy9hZnMvY21fc2VjdXJpdHkuY1xuQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXG4gXHQgKlx0c3RydWN0IFJYR0tfQXV0aE5hbWVcdGlkZW50aXRpZXNcdTAwM2NcdTAwM2U7XG4gXHQgKiB9O1xuIFx0ICovXG4tXHR0b2tzaXplID0ga2V5c2l6ZSArIDggKyA0ICsgNCArIDggKyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XG4rXHR0b2tzaXplID0ga2V5c2l6ZSArIDQgKyA4ICsgNCArIDQgKyA4ICsgeGRyX2xlbl9vYmplY3QoYXV0aHNpemUpO1xuIFxuIFx0b2Zmc2V0ID0gMDtcbiBcdGVuY3NpemUgPSBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIodG9rZW5fa3JiNSwgS1JCNV9FTkNSWVBUX01PREUsIHRva3NpemUsIFx1MDAyNm9mZnNldCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxuaW5kZXggMjkwODczYmFjODliMy4uNjVhMDg2NmNkOGI4NSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXG4rKysgYi9mcy9hZnMvaW50ZXJuYWwuaFxuQEAgLTE0MTYsMjIgKzE0MTYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX3NlZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZW51bSBhZnNfY2FsbF90cmFjZSB3aHkpXG4gXHRcdCAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgYWZzX21ha2Vfb3BfY2FsbChzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3AsIHN0cnVjdCBhZnNfY2FsbCAqY2FsbCxcbi1cdFx0XHRcdCAgICBnZnBfdCBnZnApXG4te1xuLVx0c3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0ID0gb3AtXHUwMDNlZXN0YXRlLVx1MDAzZWFkZHJlc3Nlcztcbi1cbi1cdG9wLVx1MDAzZWNhbGxcdD0gYWZzX2dldF9jYWxsKGNhbGwsIGFmc19jYWxsX3RyYWNlX2dldCk7XG4tXHRvcC1cdTAwM2V0eXBlXHQ9IGNhbGwtXHUwMDNldHlwZTtcbi1cdGNhbGwtXHUwMDNlb3BcdD0gb3A7XG4tXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG4tXHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuLVx0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbi1cdGNhbGwtXHUwMDNlc2VydmljZV9pZCA9IG9wLVx1MDAzZXNlcnZlci1cdTAwM2VzZXJ2aWNlX2lkO1xuLVx0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuLVx0YWZzX3B1dF9jYWxsKGNhbGwpO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2V4dHJhY3RfYmVnaW4oc3RydWN0IGFmc19jYWxsICpjYWxsLCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxuIHtcbiBcdGNhbGwtXHUwMDNlaW92X2xlbiA9IHNpemU7XG5AQCAtMTc2Myw2ICsxNzQ3LDIzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpBRlNfVk5PREVfVE9fSShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSlcbiBcdHJldHVybiBcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4rXHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLVx1MDAzZWVzdGF0ZS1cdTAwM2VhZGRyZXNzZXM7XG4rXG4rXHRvcC1cdTAwM2VjYWxsXHQ9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpO1xuK1x0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4rXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuK1x0Y2FsbC1cdTAwM2VzZXJ2ZXJcdD0gYWZzX3VzZV9zZXJ2ZXIob3AtXHUwMDNlc2VydmVyLCBmYWxzZSwgYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCk7XG4rXHRjYWxsLVx1MDAzZWtleVx0PSBvcC1cdTAwM2VrZXk7XG4rXHRjYWxsLVx1MDAzZWludHJcdD0gIShvcC1cdTAwM2VmbGFncyBcdTAwMjYgQUZTX09QRVJBVElPTl9VTklOVFIpO1xuK1x0Y2FsbC1cdTAwM2VwZWVyXHQ9IHJ4cnBjX2tlcm5lbF9nZXRfcGVlcihhbGlzdC1cdTAwM2VhZGRyc1tvcC1cdTAwM2VhZGRyX2luZGV4XS5wZWVyKTtcbitcdGNhbGwtXHUwMDNlc2VydmljZV9pZCA9IG9wLVx1MDAzZXNlcnZlci1cdTAwM2VzZXJ2aWNlX2lkO1xuK1x0YWZzX21ha2VfY2FsbChjYWxsLCBnZnApO1xuK1x0YWZzX3B1dF9jYWxsKGNhbGwpO1xuK31cbitcbiAvKlxuICAqIE5vdGUgdGhhdCBhIGRlbnRyeSBnb3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8gc2V0IGRfZnNkYXRhIHRvIHRoZSBkYXRhIHZlcnNpb25cbiAgKiBudW1iZXIgZGVyaXZlZCBmcm9tIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuY1xuaW5kZXggZDgyOTE2NjU3YTNkZC4uMWY1YjZhYTY4OTQzMyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9yeHJwYy5jXG4rKysgYi9mcy9hZnMvcnhycGMuY1xuQEAgLTQxMiwyNiArNDEyLDMyIEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdG1zZy5tc2dfY29udHJvbGxlblx0PSAwO1xuIFx0bXNnLm1zZ19mbGFnc1x0XHQ9IE1TR19XQUlUQUxMIHwgKGNhbGwtXHUwMDNld3JpdGVfaXRlciA/IE1TR19NT1JFIDogMCk7XG4gXG4tXHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLFxuLVx0XHRcdFx0ICAgICBcdTAwMjZtc2csIGNhbGwtXHUwMDNlcmVxdWVzdF9zaXplLFxuLVx0XHRcdFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XG4rXHRkbyB7XG4rXHRcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCByeGNhbGwsIFx1MDAyNm1zZyxcbitcdFx0XHRcdFx0ICAgICBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZyksXG4rXHRcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbitcdH0gd2hpbGUgKG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMCk7XG4gXG4gXHRpZiAoY2FsbC1cdTAwM2V3cml0ZV9pdGVyKSB7XG4gXHRcdG1zZy5tc2dfaXRlciA9ICpjYWxsLVx1MDAzZXdyaXRlX2l0ZXI7XG4gXHRcdG1zZy5tc2dfZmxhZ3MgXHUwMDI2PSB+TVNHX01PUkU7XG4gXHRcdHRyYWNlX2Fmc19zZW5kX2RhdGEoY2FsbCwgXHUwMDI2bXNnKTtcbiBcbi1cdFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsXG4tXHRcdFx0XHRcdCAgICAgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZyxcbi1cdFx0XHRcdFx0ICAgICBpb3ZfaXRlcl9jb3VudChcdTAwMjZtc2cubXNnX2l0ZXIpLFxuLVx0XHRcdFx0XHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xuK1x0XHRkbyB7XG4rXHRcdFx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsXG4rXHRcdFx0XHRcdFx0ICAgICBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLFxuK1x0XHRcdFx0XHRcdCAgICAgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuK1x0XHRcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIHJldCk7XG4rXHRcdFx0XHRnb3RvIGVycm9yX2RvX2Fib3J0O1xuK1x0XHRcdH1cbitcdFx0fSB3aGlsZSAobXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpIFx1MDAzZSAwKTtcbiBcdFx0KmNhbGwtXHUwMDNld3JpdGVfaXRlciA9IG1zZy5tc2dfaXRlcjtcbiBcbi1cdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIHJldCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbitcdFx0dHJhY2VfYWZzX3NlbnRfZGF0YShjYWxsLCBcdTAwMjZtc2csIDApO1xuIFx0fVxuIFxuIFx0LyogTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQsIHdlIG1heSBoYXZlIHJlY2VpdmVkIHRoZSByZXBseSBvciBhbiBhYm9ydFxuQEAgLTQ0MywxMCArNDQ5LDggQEAgdm9pZCBhZnNfbWFrZV9jYWxsKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgZ2ZwX3QgZ2ZwKVxuIFx0cmV0dXJuO1xuIFxuIGVycm9yX2RvX2Fib3J0OlxuLVx0aWYgKHJldCAhPSAtRUNPTk5BQk9SVEVEKVxuLVx0XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIHJ4Y2FsbCxcbi1cdFx0XHRcdFx0UlhfVVNFUl9BQk9SVCwgcmV0LFxuLVx0XHRcdFx0XHRhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yKTtcbitcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLFxuK1x0XHRcdFx0UlhfVVNFUl9BQk9SVCwgcmV0LCBhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yKTtcbiBcdGlmIChjYWxsLVx1MDAzZWFzeW5jKSB7XG4gXHRcdGFmc19zZWVfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9hc3luY19hYm9ydCk7XG4gXHRcdHJldHVybjtcbkBAIC04NTksNiArODYzLDcgQEAgdm9pZCBhZnNfc2VuZF9lbXB0eV9yZXBseShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXG4ge1xuIFx0c3RydWN0IGFmc19uZXQgKm5ldCA9IGNhbGwtXHUwMDNlbmV0O1xuIFx0c3RydWN0IG1zZ2hkciBtc2c7XG4rXHRpbnQgcmV0O1xuIFxuIFx0X2VudGVyKFwiXCIpO1xuIFxuQEAgLTg3MSwyMiArODc2LDEzIEBAIHZvaWQgYWZzX3NlbmRfZW1wdHlfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIFx0bXNnLm1zZ19jb250cm9sbGVuXHQ9IDA7XG4gXHRtc2cubXNnX2ZsYWdzXHRcdD0gMDtcbiBcbi1cdHN3aXRjaCAocnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCAwLFxuLVx0XHRcdFx0ICAgICAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KSkge1xuLVx0Y2FzZSAwOlxuLVx0XHRfbGVhdmUoXCIgW3JlcGxpZWRdXCIpO1xuK1x0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCAwLFxuK1x0XHRcdFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCkgLyogU2hvdWxkbid0IGJ1ZmZlciBtb3JlIHRoYW4gMCBieXRlcy4gKi9cbiBcdFx0cmV0dXJuO1xuIFxuLVx0Y2FzZSAtRU5PTUVNOlxuLVx0XHRfZGVidWcoXCJvb21cIik7XG4tXHRcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuLVx0XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLFxuLVx0XHRcdFx0XHRhZnNfYWJvcnRfb29tKTtcbi1cdFx0ZmFsbHRocm91Z2g7XG4tXHRkZWZhdWx0OlxuLVx0XHRfbGVhdmUoXCIgW2Vycm9yXVwiKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuK1x0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsXG4rXHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCByZXQsIGFmc19hYm9ydF9zZW5kX2Vycm9yKTtcbiB9XG4gXG4gLypcbkBAIC05MTIsMjAgKzkwOCwyMSBAQCB2b2lkIGFmc19zZW5kX3NpbXBsZV9yZXBseShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilcbiBcdG1zZy5tc2dfY29udHJvbGxlblx0PSAwO1xuIFx0bXNnLm1zZ19mbGFnc1x0XHQ9IDA7XG4gXG4tXHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCBsZW4sXG4tXHRcdFx0XHQgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCk7XG4rXHRkbyB7XG4rXHRcdG4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZtc2csIG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSxcbitcdFx0XHRcdFx0ICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuK1x0fSB3aGlsZSAobiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMCk7XG4rXG4gXHRpZiAobiBcdTAwM2U9IDApIHtcbiBcdFx0LyogU3VjY2VzcyAqL1xuIFx0XHRfbGVhdmUoXCIgW3JlcGxpZWRdXCIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobiA9PSAtRU5PTUVNKSB7XG4tXHRcdF9kZWJ1ZyhcIm9vbVwiKTtcbi1cdFx0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsXG4tXHRcdFx0XHRcdFJYR0VOX1NTX01BUlNIQUwsIC1FTk9NRU0sXG4tXHRcdFx0XHRcdGFmc19hYm9ydF9vb20pO1xuLVx0fVxuK1xuK1x0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsXG4rXHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCBuLCBhZnNfYWJvcnRfc2VuZF9lcnJvcik7XG4gXHRfbGVhdmUoXCIgW2Vycm9yXVwiKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuaW5kZXggMWIzYzQ4YjU1OTFkZi4uMDRiMGJiNjgyYjgxMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuQEAgLTE0OCw2ICsxNDgsNyBAQCBlbnVtIHlmc19jbV9vcGVyYXRpb24ge1xuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91bnVzZV9zbGlzdF9pc29ydCxcdFwiVU5VIGlzb3J0XCIpIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VwZGF0ZSxcdFx0XCJVUERBVEUgICBcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2J5X3V1aWQsXHRcIlVTRSB1dWlkIFwiKSBcXFxuK1x0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfY2FsbCxcdFx0XCJVU0UgY2FsbCBcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NtX2NhbGwsXHRcIlVTRSBjbS1jbFwiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2V0X2NhcHMsXHRcIlVTRSBnY2Fwc1wiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91c2VfZ2l2ZV91cF9jYixcdFwiVVNFIGd2dXBjXCIpIFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmhcbmluZGV4IDcwNGExMGRlNjY3MDAuLjUyZjg3MThjZjcyNTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oXG5AQCAtMjAsMTYgKzIwLDE2IEBAXG4gXHQvKiBBRlMgZXJyb3JzICovXHRcdFx0XHRcdFx0XFxcbiBcdEVNKGFmc19hYm9ydF9nZW5lcmFsX2Vycm9yLFx0XHRcImFmcy1lcnJvclwiKVx0XHRcXFxuIFx0RU0oYWZzX2Fib3J0X2ludGVycnVwdGVkLFx0XHRcImFmcy1pbnRyXCIpXHRcdFxcXG4tXHRFTShhZnNfYWJvcnRfb29tLFx0XHRcdFwiYWZzLW9vbVwiKVx0XHRcXFxuIFx0RU0oYWZzX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsXHRcdFwiYWZzLW9wLW5vdHN1cHBcIilcdFxcXG4gXHRFTShhZnNfYWJvcnRfcHJvYmV1dWlkX25lZ2F0aXZlLFx0XCJhZnMtcHJvYmV1dWlkLW5lZ1wiKVx0XFxcbiBcdEVNKGFmc19hYm9ydF9zZW5kX2RhdGFfZXJyb3IsXHRcdFwiYWZzLXNlbmQtZGF0YVwiKVx0XFxcbitcdEVNKGFmc19hYm9ydF9zZW5kX2Vycm9yLFx0XHRcImFmcy1zZW5kLWVycm9yXCIpXHRcXFxuIFx0RU0oYWZzX2Fib3J0X3VubWFyc2hhbF9lcnJvcixcdFx0XCJhZnMtdW5tYXJzaGFsXCIpXHRcXFxuIFx0RU0oYWZzX2Fib3J0X3Vuc3VwcG9ydGVkX3NlY19jbGFzcyxcdFwiYWZzLXVuc3VwLXNlYy1jbGFzc1wiKVx0XFxcbiBcdC8qIHJ4cGVyZiBlcnJvcnMgKi9cdFx0XHRcdFx0XHRcXFxuIFx0RU0ocnhwZXJmX2Fib3J0X2dlbmVyYWxfZXJyb3IsXHRcdFwicnhwZXJmLWVycm9yXCIpXHRcdFxcXG4tXHRFTShyeHBlcmZfYWJvcnRfb29tLFx0XHRcdFwicnhwZXJmLW9vbVwiKVx0XHRcXFxuIFx0RU0ocnhwZXJmX2Fib3J0X29wX25vdF9zdXBwb3J0ZWQsXHRcInJ4cGVyZi1vcC1ub3RzdXBwXCIpXHRcXFxuK1x0RU0ocnhwZXJmX2Fib3J0X3NlbmRfZXJyb3IsXHRcdFwicnhwZXJmLXNlbmQtZXJyb3JcIilcdFxcXG4gXHRFTShyeHBlcmZfYWJvcnRfdW5tYXJzaGFsX2Vycm9yLFx0XCJyeHBlcmYtdW5tYXJzaGFsXCIpXHRcXFxuIFx0LyogUnhLQUQgc2VjdXJpdHkgZXJyb3JzICovXHRcdFx0XHRcdFxcXG4gXHRFTShyeGthZF9hYm9ydF8xX3Nob3J0X2NoZWNrLFx0XHRcInJ4a2FkMS1zaG9ydC1jaGVja1wiKVx0XFxcbkBAIC0xNDgsNiArMTQ4LDcgQEBcbiBcdEVNKHJ4cnBjX2Vwcm90b193cm9uZ19zZWN1cml0eSxcdFx0XCJ3cm9uZy1zZWNcIilcdFx0XFxcbiBcdEVNKHJ4cnBjX3JlY3Ztc2dfZXhjZXNzX2RhdGEsXHRcdFwicmVjdm1zZy1leGNlc3NcIilcdFxcXG4gXHRFTShyeHJwY19yZWN2bXNnX3Nob3J0X2RhdGEsXHRcdFwicmVjdm1zZy1zaG9ydFwiKVx0XFxcbitcdEVNKHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXHRcdFwidHgtZXJyb3JcIilcdFx0XFxcbiBcdEVfKHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFx0XHRcInNlbmRtc2ctbGF0ZVwiKVxuIFxuICNkZWZpbmUgcnhycGNfY2FsbF9wb2tlX3RyYWNlcyBcXFxuQEAgLTM0Miw2ICszNDMsNyBAQFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfZGlzdHJpYnV0ZV9lcnJvcixcdFwiU0VFIGRpc3QtZXJyXCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9pbnB1dCxcdFx0XCJTRUUgaW5wdXQgICBcIikgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9yZWxlYXNlZCxcdFwiU0VFIG5meS1ybHNkXCIpIFxcXG4rXHRFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCxcdFwiU0VFIG5meS1za2lwXCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnLFx0XHRcIlNFRSByZWN2bXNnIFwiKSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZ19yZXF1ZXVlLFx0XCJTRUUgcmVjdi1ycXVcIikgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2dfcmVxdWV1ZV9maXJzdCwgXCJTRUUgcmVjdi1ycUZcIikgXFxcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItaW50ZXJuYWwuaCBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5pbmRleCA4NjVmMDVmZTM3YWI5Li5jYjM2YTcwOWY1NDBlIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmhcbisrKyBiL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG5AQCAtNjQyLDYgKzY0Miw3IEBAIGVudW0gcnhycGNfY2FsbF9mbGFnIHtcbiBcdFJYUlBDX0NBTExfVFhfTEFTVCxcdFx0LyogTGFzdCBwYWNrZXQgaW4gVHggYnVmZmVyIChhdCByeHR4X3RvcCkgKi9cbiBcdFJYUlBDX0NBTExfVFhfQUxMX0FDS0VELFx0LyogTGFzdCBwYWNrZXQgaGFzIGJlZW4gaGFyZC1hY2tlZCAqL1xuIFx0UlhSUENfQ0FMTF9UWF9OT19NT1JFLFx0XHQvKiBObyBtb3JlIGRhdGEgdG8gdHJhbnNtaXQgKE1TR19NT1JFIGRlYXNzZXJ0ZWQpICovXG4rXHRSWFJQQ19DQUxMX1RYX0VSUk9SLFx0XHQvKiBUZXJtaW5hbCBlcnJvcjsgY2FsbCBuZWVkcyBhYm9ydCAqL1xuIFx0UlhSUENfQ0FMTF9TRU5EX1BJTkcsXHRcdC8qIEEgcGluZyB3aWxsIG5lZWQgdG8gYmUgc2VudCAqL1xuIFx0UlhSUENfQ0FMTF9SRVRSQU5TX1RJTUVPVVQsXHQvKiBSZXRyYW5zbWlzc2lvbiBkdWUgdG8gdGltZW91dCBvY2N1cnJlZCAqL1xuIFx0UlhSUENfQ0FMTF9CRUdBTl9SWF9USU1FUixcdC8qIFdlIGJlZ2FuIHRoZSBleHBlY3RfcnhfYnkgdGltZXIgKi9cbkBAIC0xMTA5LDYgKzExMTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnhycGNfaXNfY2xpZW50X2NhbGwoY29uc3Qgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gLypcbiAgKiBjYWxsX3N0YXRlLmNcbiAgKi9cbit2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpO1xuIGJvb2wgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICAgICAgZW51bSByeHJwY19jYWxsX2NvbXBsZXRpb24gY29tcGwsXG4gXHRcdFx0ICAgICAgIHUzMiBhYm9ydF9jb2RlLFxuQEAgLTE0NDEsNyArMTQ0Myw2IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcnhycGNfbG9jYWxfc2VxX29wcztcbiAvKlxuICAqIHJlY3Ztc2cuY1xuICAqL1xuLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqKTtcbiBpbnQgcnhycGNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtc2doZHIgKiwgc2l6ZV90LCBpbnQpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuYyBiL25ldC9yeHJwYy9jYWxsX3N0YXRlLmNcbmluZGV4IDZhZmI1NDM3M2ViYmYuLjM2NDgxMGM2NTI3NjYgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jXG4rKysgYi9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jXG5AQCAtNyw2ICs3LDYwIEBAXG4gXG4gI2luY2x1ZGUgXCJhci1pbnRlcm5hbC5oXCJcbiBcbisvKlxuKyAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS5cbisgKi9cbitzdGF0aWMgdm9pZCBfX3J4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4re1xuK1x0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xuK1x0c3RydWN0IHNvY2sgKnNrO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdGlmICh0ZXN0X2JpdChSWFJQQ19DQUxMX1JFTEVBU0VELCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVx1MDAzZXNvY2tldCk7XG4rXHRzayA9IFx1MDAyNnJ4LVx1MDAzZXNrO1xuK1x0aWYgKHJ4IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSBcdTAwM2MgUlhSUENfQ0xPU0UpIHtcbitcdFx0aWYgKGNhbGwtXHUwMDNlbm90aWZ5X3J4KSB7XG4rXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y2FsbC1cdTAwM2Vub3RpZnlfbG9jaywgZmxhZ3MpO1xuK1x0XHRcdGNhbGwtXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVx1MDAzZXVzZXJfY2FsbF9JRCk7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrLCBmbGFncyk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrLCBmbGFncyk7XG4rXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmspKSB7XG4rXHRcdFx0XHRyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTtcbitcdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4rXHRcdFx0fVxuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrLCBmbGFncyk7XG4rXG4rXHRcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcbitcdFx0XHRcdF9kZWJ1ZyhcImNhbGwgJXBzXCIsIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuK1x0XHRcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rXG4rLypcbisgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuXG4rICovXG4rdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuK3tcbitcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpKSB7XG4rXHRcdHJ4cnBjX3NlZV9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfc2VlX25vdGlmeV9za2lwcGVkKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuK31cbitcbiAvKlxuICAqIFRyYW5zaXRpb24gYSBjYWxsIHRvIHRoZSBjb21wbGV0ZSBzdGF0ZS5cbiAgKi9cbkBAIC0yNSw3ICs3OSw3IEBAIGJvb2wgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbihzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdHJ4cnBjX3NldF9jYWxsX3N0YXRlKGNhbGwsIFJYUlBDX0NBTExfQ09NUExFVEUpO1xuIFx0dHJhY2VfcnhycGNfY2FsbF9jb21wbGV0ZShjYWxsKTtcbiBcdHdha2VfdXAoXHUwMDI2Y2FsbC1cdTAwM2V3YWl0cSk7XG4tXHRyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuK1x0X19yeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jb25uX29iamVjdC5jIGIvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcbmluZGV4IDBlY2U3MTdkYjBmODUuLjFiZTUwZTBjOWNlZTUgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvY29ubl9vYmplY3QuY1xuKysrIGIvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcbkBAIC0zNCw3ICszNCwxMCBAQCB2b2lkIHJ4cnBjX3Bva2VfY29ubihzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiwgZW51bSByeHJwY19jb25uX3RyYWNlIHdoeSlcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2bG9jYWwtXHUwMDNlbG9jayk7XG4gXHRidXN5ID0gIWxpc3RfZW1wdHkoXHUwMDI2Y29ubi1cdTAwM2VhdHRlbmRfbGluayk7XG4gXHRpZiAoIWJ1c3kpIHtcbi1cdFx0cnhycGNfZ2V0X2Nvbm5lY3Rpb24oY29ubiwgd2h5KTtcbitcdFx0aWYgKCFyeHJwY19nZXRfY29ubmVjdGlvbl9tYXliZShjb25uLCB3aHkpKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZWxvY2spO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuIFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNvbm4tXHUwMDNlYXR0ZW5kX2xpbmssIFx1MDAyNmxvY2FsLVx1MDAzZWNvbm5fYXR0ZW5kX3EpO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9rZXkuYyBiL25ldC9yeHJwYy9rZXkuY1xuaW5kZXggYTBhYTc4ZDg5Mjg5Ny4uMzBkNmRiMDUyYzIxNiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9rZXkuY1xuKysrIGIvbmV0L3J4cnBjL2tleS5jXG5AQCAtMTcyLDYgKzE3Miw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG4gXHRjb25zdCBfX2JlMzIgKnRpY2tldCwgKmtleTtcbiBcdHM2NCB0bXA7XG4gXHRzaXplX3QgcmF3X2tleWxlbiwgcmF3X3RrdGxlbiwga2V5bGVuLCB0a3RsZW47XG4rXHRpbnQgcmV0ID0gLUVLRVlSRUpFQ1RFRDtcbiBcbiBcdF9lbnRlcihcIix7JXgsJXgsJXgsJXh9LCV4XCIsXG4gXHQgICAgICAgbnRvaGwoeGRyWzBdKSwgbnRvaGwoeGRyWzFdKSwgbnRvaGwoeGRyWzJdKSwgbnRvaGwoeGRyWzNdKSxcbkBAIC0yMjksNiArMjMwLDExIEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG4gXHR0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWtleS5kYXRhXHQ9IHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNlX2tleTtcbiBcdHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNldGlja2V0LmxlbiA9IHJhd190a3RsZW47XG4gXG4rXHRpZiAoIWNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWVuY3R5cGUpKSB7XG4rXHRcdHJldCA9IC1FTk9QS0c7XG4rXHRcdGdvdG8gcmVqZWN0X3Rva2VuO1xuK1x0fVxuK1xuIFx0aWYgKHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNlZW5kdGltZSAhPSAwKSB7XG4gXHRcdGV4cGlyeSA9IHJ4cnBjX3M2NF90b190aW1lNjQodG9rZW4tXHUwMDNlcnhnay1cdTAwM2VlbmR0aW1lKTtcbiBcdFx0aWYgKGV4cGlyeSBcdTAwM2MgMClcbkBAIC0yODAsNyArMjg2LDcgQEAgc3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCxcbiBcdGtmcmVlKHRva2VuLVx1MDAzZXJ4Z2spO1xuIFx0a2ZyZWUodG9rZW4pO1xuIHJlamVjdDpcbi1cdHJldHVybiAtRUtFWVJFSkVDVEVEO1xuK1x0cmV0dXJuIHJldDtcbiBleHBpcmVkOlxuIFx0a2ZyZWUodG9rZW4tXHUwMDNlcnhnayk7XG4gXHRrZnJlZSh0b2tlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3JlY3Ztc2cuYyBiL25ldC9yeHJwYy9yZWN2bXNnLmNcbmluZGV4IGVmY2JhNGIyZTc0ZjAuLjI4YjIxNDhiNTY5MzYgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcmVjdm1zZy5jXG4rKysgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5AQCAtMTcsMTMgKzE3LDEyIEBAXG4gI2luY2x1ZGUgXCJhci1pbnRlcm5hbC5oXCJcbiBcbiAvKlxuLSAqIFBvc3QgYSBjYWxsIGZvciBhdHRlbnRpb24gYnkgdGhlIHNvY2tldCBvciBrZXJuZWwgc2VydmljZS4gIEZ1cnRoZXJcbi0gKiBub3RpZmljYXRpb25zIGFyZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgcmVjdm1zZ19saW5rIG9uIGEgZHVtbXkgcXVldWUuXG4rICogUmVxdWV1ZSBhIGNhbGwgZm9yIHJlY3Ztc2coKSB0byBwaWNrIHVwLlxuICAqL1xuLXZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbitzdGF0aWMgdm9pZCByeHJwY19yZXF1ZXVlX2NhbGwoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4ge1xuLVx0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4O1xuLVx0c3RydWN0IHNvY2sgKnNrO1xuK1x0c3RydWN0IHJ4cnBjX3NvY2sgKnJ4ID0gcnhycGNfc2soc29jay1cdTAwM2Vzayk7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbiBcbiBcdF9lbnRlcihcIiVkXCIsIGNhbGwtXHUwMDNlZGVidWdfaWQpO1xuIFxuQEAgLTMyLDMxICszMSwxOCBAQCB2b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cbi1cdHJ4ID0gcmN1X2RlcmVmZXJlbmNlKGNhbGwtXHUwMDNlc29ja2V0KTtcbi1cdHNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4tXHRpZiAocnggXHUwMDI2XHUwMDI2IHNrLVx1MDAzZXNrX3N0YXRlIFx1MDAzYyBSWFJQQ19DTE9TRSkge1xuLVx0XHRpZiAoY2FsbC1cdTAwM2Vub3RpZnlfcngpIHtcbi1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHRcdGNhbGwtXHUwMDNlbm90aWZ5X3J4KHNrLCBjYWxsLCBjYWxsLVx1MDAzZXVzZXJfY2FsbF9JRCk7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2spO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbi1cdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbi1cdFx0XHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuLVx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaywgXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19xKTtcbi1cdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfbGluaykpIHtcbitcdFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cngtXHUwMDNlcmVjdm1zZ19sb2NrKTtcbiBcbi1cdFx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuLVx0XHRcdFx0X2RlYnVnKFwiY2FsbCAlcHNcIiwgc2stXHUwMDNlc2tfZGF0YV9yZWFkeSk7XG4tXHRcdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbi1cdFx0XHR9XG4tXHRcdH1cbitcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4rXHRcdF9kZWJ1ZyhcImNhbGwgJXBzXCIsIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuK1x0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0X2xlYXZlKFwiXCIpO1xuIH1cbiBcbkBAIC01NjEsNyArNTQ3LDcgQEAgaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIFxuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE1TR19QRUVLKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19xdWV1ZSkpXG4tXHRcdHJ4cnBjX25vdGlmeV9zb2NrZXQoY2FsbCk7XG4rXHRcdHJ4cnBjX3JlcXVldWVfY2FsbChzb2NrLCBjYWxsKTtcbiBcdGdvdG8gbm90X3lldF9jb21wbGV0ZTtcbiBcbiBjYWxsX2ZhaWxlZDpcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvcnhnay5jIGIvbmV0L3J4cnBjL3J4Z2suY1xuaW5kZXggNzdhNjdhY2UxZDI0OC4uYjQ5MjIxZjU3ZjY3NyAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeGdrLmNcbisrKyBiL25ldC9yeHJwYy9yeGdrLmNcbkBAIC0yNTEsOCArMjUxLDEwIEBAIHN0YXRpYyBpbnQgcnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXG4gXHRcdFx0XHRcdCBHRlBfTk9GUyk7XG4gXHRpZiAoSVNfRVJSKGdrKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZ2spO1xuK1x0d3JpdGVfbG9jayhcdTAwMjZjb25uLVx1MDAzZXNlY3VyaXR5X3VzZV9sb2NrKTtcbiBcdGNvbm4tXHUwMDNlcnhnay5lbmN0eXBlID0gZ2stXHUwMDNla3JiNS1cdTAwM2VldHlwZTtcbiBcdGNvbm4tXHUwMDNlcnhnay5rZXlzW2drLVx1MDAzZWtleV9udW1iZXIgXHUwMDI2IDNdID0gZ2s7XG4rXHR3cml0ZV91bmxvY2soXHUwMDI2Y29ubi1cdTAwM2VzZWN1cml0eV91c2VfbG9jayk7XG4gXG4gXHRzd2l0Y2ggKGNvbm4tXHUwMDNlc2VjdXJpdHlfbGV2ZWwpIHtcbiBcdGNhc2UgUlhSUENfU0VDVVJJVFlfUExBSU46XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4cGVyZi5jIGIvbmV0L3J4cnBjL3J4cGVyZi5jXG5pbmRleCBiOGRmNmQyMjMxNGQ2Li5lYmQ1NDIyMmM2NGVmIDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3J4cGVyZi5jXG4rKysgYi9uZXQvcnhycGMvcnhwZXJmLmNcbkBAIC01MzgsMTUgKzUzOCwxOCBAQCBzdGF0aWMgaW50IHJ4cGVyZl9wcm9jZXNzX2NhbGwoc3RydWN0IHJ4cGVyZl9jYWxsICpjYWxsKVxuIFx0aW92WzBdLmlvdl9sZW5cdD0gbGVuO1xuIFx0aW92X2l0ZXJfa3ZlYyhcdTAwMjZtc2cubXNnX2l0ZXIsIFdSSVRFLCBpb3YsIDEsIGxlbik7XG4gXHRtc2cubXNnX2ZsYWdzID0gMDtcbi1cdG4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLCBcdTAwMjZtc2csIGxlbixcbi1cdFx0XHRcdCAgIHJ4cGVyZl9ub3RpZnlfZW5kX3JlcGx5X3R4KTtcbitcdGRvIHtcbitcdFx0biA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEocnhwZXJmX3NvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNm1zZywgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuK1x0XHRcdFx0XHQgICByeHBlcmZfbm90aWZ5X2VuZF9yZXBseV90eCk7XG4rXHR9IHdoaWxlIChuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpIFx1MDAzZSAwKTtcbitcbiBcdGlmIChuIFx1MDAzZT0gMClcbiBcdFx0cmV0dXJuIDA7IC8qIFN1Y2Nlc3MgKi9cbiBcbi1cdGlmIChuID09IC1FTk9NRU0pXG4tXHRcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuLVx0XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLFxuLVx0XHRcdFx0XHRyeHBlcmZfYWJvcnRfb29tKTtcbitcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuK1x0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgbixcbitcdFx0XHRcdHJ4cGVyZl9hYm9ydF9zZW5kX2Vycm9yKTtcbiBcdHJldHVybiBuO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvc2VuZG1zZy5jIGIvbmV0L3J4cnBjL3NlbmRtc2cuY1xuaW5kZXggZWQyYzlhNTEwMDVhZC4uOGJiMzI3ZGMyODMzZSAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9zZW5kbXNnLmNcbisrKyBiL25ldC9yeHJwYy9zZW5kbXNnLmNcbkBAIC0zMjAsOCArMzIwLDggQEAgc3RhdGljIGludCByeHJwY19hbGxvY190eHF1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4gc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0XHRcdCAgIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbi1cdFx0XHQgICByeHJwY19ub3RpZnlfZW5kX3R4X3Qgbm90aWZ5X2VuZF90eCxcbi1cdFx0XHQgICBib29sICpfZHJvcHBlZF9sb2NrKVxuK1x0XHRcdCAgIHJ4cnBjX25vdGlmeV9lbmRfdHhfdCBub3RpZnlfZW5kX3R4KVxuK1x0X19yZWxlYXNlcyhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpXG4ge1xuIFx0c3RydWN0IHJ4cnBjX3R4YnVmICp0eGI7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbkBAIC0zMzAsMjkgKzMzMCwzNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRib29sIG1vcmUgPSBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfTU9SRTtcbiBcdGludCByZXQsIGNvcGllZCA9IDA7XG4gXG4tXHRpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9OT19NT1JFLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkge1xuLVx0XHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVx1MDAzZWRlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcbi1cdFx0XHRcdCAgY2FsbC1cdTAwM2VjaWQsIGNhbGwtXHUwMDNlY2FsbF9pZCwgY2FsbC1cdTAwM2VyeF9jb25zdW1lZCxcbi1cdFx0XHRcdCAgMCwgLUVQUk9UTyk7XG4tXHRcdHJldHVybiAtRVBST1RPO1xuLVx0fVxuLVxuIFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIFxuIFx0cmV0ID0gcnhycGNfd2FpdF90b19iZV9jb25uZWN0ZWQoY2FsbCwgXHUwMDI2dGltZW8pO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0aWYgKGNhbGwtXHUwMDNlY29ubi1cdTAwM2VzdGF0ZSA9PSBSWFJQQ19DT05OX0NMSUVOVF9VTlNFQ1VSRUQpIHtcbiBcdFx0cmV0ID0gcnhycGNfaW5pdF9jbGllbnRfY29ubl9zZWN1cml0eShjYWxsLVx1MDAzZWNvbm4pO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0LyogdGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqL1xuIFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19OT1NQQUNFLCBzayk7XG4gXG4gcmVsb2FkOlxuK1x0aWYgKHVubGlrZWx5KHRlc3RfYml0KFJYUlBDX0NBTExfVFhfTk9fTU9SRSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpKSB7XG4rXHRcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfbGF0ZV9zZW5kLFxuK1x0XHRcdFx0ICBjYWxsLVx1MDAzZWNpZCwgY2FsbC1cdTAwM2VjYWxsX2lkLCBjYWxsLVx1MDAzZXJ4X2NvbnN1bWVkLFxuK1x0XHRcdFx0ICAwLCAtRVBST1RPKTtcbitcdFx0cmV0ID0gLUVQUk9UTztcbitcdFx0Z290byBtYXliZV9lcnJvcjtcbitcdH1cbitcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKSkpIHtcbitcdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ190eF9lcnJvcixcbitcdFx0XHRcdCAgY2FsbC1cdTAwM2VjaWQsIGNhbGwtXHUwMDNlY2FsbF9pZCwgY2FsbC1cdTAwM2VyeF9jb25zdW1lZCxcbitcdFx0XHRcdCAgMCwgLUVJTyk7XG4rXHRcdHJldCA9IC1FSU87XG4rXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHR9XG4rXG4gXHR0eGIgPSBjYWxsLVx1MDAzZXR4X3BlbmRpbmc7XG4gXHRjYWxsLVx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xuIFx0aWYgKHR4YilcbkBAIC0zNzksOSArMzg3LDkgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFxuIFx0cmV0ID0gLUVNU0dTSVpFO1xuIFx0aWYgKGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKSB7XG4tXHRcdGlmIChsZW4gLSBjb3BpZWQgXHUwMDNlIGNhbGwtXHUwMDNldHhfdG90YWxfbGVuKVxuK1x0XHRpZiAobGVuIFx1MDAzZSBjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbilcbiBcdFx0XHRnb3RvIG1heWJlX2Vycm9yO1xuLVx0XHRpZiAoIW1vcmUgXHUwMDI2XHUwMDI2IGxlbiAtIGNvcGllZCAhPSBjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbilcbitcdFx0aWYgKCFtb3JlIFx1MDAyNlx1MDAyNiBsZW4gIT0gY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4gXHRcdFx0Z290byBtYXliZV9lcnJvcjtcbiBcdH1cbiBcbkBAIC00MDUsNyArNDEzLDcgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0XHRcdCAqIHRoZSBzZWN1cml0eSBoZWFkZXIgaXMgZ29pbmcgdG8gYmUgaW4gdGhlIHBhZGRlZFxuIFx0XHRcdCAqIHJlZ2lvbiAoZW5jIGJsb2Nrc2l6ZSksIGJ1dCB0aGUgdHJhaWxlciBpcyBub3QuXG4gXHRcdFx0ICovXG4tXHRcdFx0cmVtYWluID0gbW9yZSA/IElOVF9NQVggOiBtc2dfZGF0YV9sZWZ0KG1zZyk7XG4rXHRcdFx0cmVtYWluID0gbW9yZSA/IElOVF9NQVggOiBsZW47XG4gXHRcdFx0dHhiID0gY2FsbC1cdTAwM2Vjb25uLVx1MDAzZXNlY3VyaXR5LVx1MDAzZWFsbG9jX3R4YnVmKGNhbGwsIHJlbWFpbiwgc2stXHUwMDNlc2tfYWxsb2NhdGlvbik7XG4gXHRcdFx0aWYgKCF0eGIpIHtcbiBcdFx0XHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNDE2LDggKzQyNCw4IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0X2RlYnVnKFwiYXBwZW5kXCIpO1xuIFxuIFx0XHQvKiBhcHBlbmQgbmV4dCBzZWdtZW50IG9mIGRhdGEgdG8gdGhlIGN1cnJlbnQgYnVmZmVyICovXG4tXHRcdGlmIChtc2dfZGF0YV9sZWZ0KG1zZykgXHUwMDNlIDApIHtcbi1cdFx0XHRzaXplX3QgY29weSA9IHVtaW4odHhiLVx1MDAzZXNwYWNlLCBtc2dfZGF0YV9sZWZ0KG1zZykpO1xuK1x0XHRpZiAobGVuIFx1MDAzZSAwKSB7XG4rXHRcdFx0c2l6ZV90IGNvcHkgPSBtaW4zKHR4Yi1cdTAwM2VzcGFjZSwgbGVuLCBtc2dfZGF0YV9sZWZ0KG1zZykpO1xuIFxuIFx0XHRcdF9kZWJ1ZyhcImFkZCAlenVcIiwgY29weSk7XG4gXHRcdFx0aWYgKCFjb3B5X2Zyb21faXRlcl9mdWxsKHR4Yi1cdTAwM2VkYXRhICsgdHhiLVx1MDAzZW9mZnNldCxcbkBAIC00MjgsNiArNDM2LDcgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0XHRcdHR4Yi1cdTAwM2VsZW4gKz0gY29weTtcbiBcdFx0XHR0eGItXHUwMDNlb2Zmc2V0ICs9IGNvcHk7XG4gXHRcdFx0Y29waWVkICs9IGNvcHk7XG4rXHRcdFx0bGVuIC09IGNvcHk7XG4gXHRcdFx0aWYgKGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxuIFx0XHRcdFx0Y2FsbC1cdTAwM2V0eF90b3RhbF9sZW4gLT0gY29weTtcbiBcdFx0fVxuQEAgLTQzOSw2MiArNDQ4LDEwMCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXG4gXHRcdC8qIGFkZCB0aGUgcGFja2V0IHRvIHRoZSBzZW5kIHF1ZXVlIGlmIGl0J3Mgbm93IGZ1bGwgKi9cbiBcdFx0aWYgKCF0eGItXHUwMDNlc3BhY2UgfHxcbi1cdFx0ICAgIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCBcdTAwMjZcdTAwMjYgIW1vcmUpKSB7XG4tXHRcdFx0aWYgKG1zZ19kYXRhX2xlZnQobXNnKSA9PSAwIFx1MDAyNlx1MDAyNiAhbW9yZSlcbi1cdFx0XHRcdHR4Yi1cdTAwM2VmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDtcbi1cbitcdFx0ICAgIChsZW4gPT0gMCBcdTAwMjZcdTAwMjYgIW1vcmUpKSB7XG4rXHRcdFx0LyogRG8gYW55IHJlcXVpcmVkIGNyeXB0by4gIElmIHRoaXMgZmFpbHMsIGl0IGNvdWxkXG4rXHRcdFx0ICogaGF2ZSBjb3JydXB0ZWQgdGhlIHR4YnVmIGNvbnRlbnQgd2l0aCBhIHBhcnRpYWxcbitcdFx0XHQgKiBlbmNyeXB0LiAgQXNzdW1lIHRoYXQgRU5PTUVNIGlzIHJldHJ5YWJsZSwgYnV0XG4rXHRcdFx0ICogZXZlcnl0aGluZyBlbHNlIGlzIHRlcm1pbmFsLlxuK1x0XHRcdCAqL1xuIFx0XHRcdHJldCA9IGNhbGwtXHUwMDNlc2VjdXJpdHktXHUwMDNlc2VjdXJlX3BhY2tldChjYWxsLCB0eGIpO1xuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdFx0XHQvKiBBc3N1bWUgdGhhdCBFTk9NRU0gaGVyZSBtZWFucyB0aGF0IHRoZVxuK1x0XHRcdFx0ICogZW5jcnlwdGlvbiBoYXNuJ3QgaGFwcGVuZWQgeWV0LiAgVGhlIGRhdGEgaXNcbitcdFx0XHRcdCAqIGFsaWduZWQgdG8gYXZvaWQgdGhlIG5lZWQgZm9yIHNsb3cgYnVmZmVyaW5nXG4rXHRcdFx0XHQgKiBpbiB0aGUgY3J5cHRvIHdhbGsuXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdGlmIChyZXQgPT0gLUVOT01FTSlcbitcdFx0XHRcdFx0Z290byBtYXliZV9lcnJvcl9yZXdpbmQ7XG4rXHRcdFx0XHRzZXRfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpO1xuK1x0XHRcdFx0Z290byBvdXRfdHhiO1xuK1x0XHRcdH1cbitcbitcdFx0XHRpZiAobGVuID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKVxuK1x0XHRcdFx0dHhiLVx1MDAzZWZsYWdzIHw9IFJYUlBDX0xBU1RfUEFDS0VUO1xuIFx0XHRcdHJ4cnBjX3F1ZXVlX3BhY2tldChyeCwgY2FsbCwgdHhiLCBub3RpZnlfZW5kX3R4KTtcbiBcdFx0XHR0eGIgPSBOVUxMO1xuIFx0XHR9XG4tXHR9IHdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykgXHUwMDNlIDApO1xuK1x0fSB3aGlsZSAobGVuIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBtc2dfZGF0YV9sZWZ0KG1zZykgXHUwMDNlIDApO1xuIFxuIHN1Y2Nlc3M6XG4gXHRyZXQgPSBjb3BpZWQ7XG4tXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKVxuLVx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuLW91dDpcbitvdXRfdHhiOlxuIFx0Y2FsbC1cdTAwM2V0eF9wZW5kaW5nID0gdHhiO1xuK291dF91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIFxuIGNhbGxfdGVybWluYXRlZDpcbiBcdHJ4cnBjX3B1dF90eGJ1Zih0eGIsIHJ4cnBjX3R4YnVmX3B1dF9zZW5kX2Fib3J0ZWQpO1xuLVx0X2xlYXZlKFwiID0gJWRcIiwgY2FsbC1cdTAwM2VlcnJvcik7XG4tXHRyZXR1cm4gY2FsbC1cdTAwM2VlcnJvcjtcbi1cbitcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IE5VTEw7XG4rXHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuK1x0Z290byBvdXRfdW5sb2NrO1xuK1xuK21heWJlX2Vycm9yX3Jld2luZDpcbitcdC8qIElmIHdlIGdvdCBhIHJldHJ5YWJsZSBlcnJvciBhZnRlciBjb3B5aW5nIGFsbCB0aGUgc3VwcGxpZWQgZGF0YSBpbnRvXG4rXHQgKiB0aGUgbGFzdCBwYWNrZXQsIHdlIG5lZWQgdG8gcmV3aW5kIGFzIG11Y2ggYXMgd2UgY2FuIHNvIHRoZSBjYWxsZXJcbitcdCAqIGtub3dzIHRoZXkgbmVlZCB0byByZXRyeSB0aGUgc2VuZG1zZy5cbitcdCAqL1xuK1x0aWYgKGNvcGllZCBcdTAwMjZcdTAwMjYgIW1vcmUgXHUwMDI2XHUwMDI2ICFsZW4pIHtcbitcdFx0dW5zaWduZWQgaW50IHJld2luZF9ieSA9IHVtaW4oY29waWVkLCB0eGItXHUwMDNlbGVuKTtcbitcbitcdFx0dHhiLVx1MDAzZXNwYWNlICArPSByZXdpbmRfYnk7XG4rXHRcdHR4Yi1cdTAwM2VsZW4gICAgLT0gcmV3aW5kX2J5O1xuK1x0XHR0eGItXHUwMDNlb2Zmc2V0IC09IHJld2luZF9ieTtcbitcdFx0Y29waWVkICAgICAgLT0gcmV3aW5kX2J5O1xuK1x0XHRpZiAoY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4gIT0gLTEpXG4rXHRcdFx0Y2FsbC1cdTAwM2V0eF90b3RhbF9sZW4gKz0gcmV3aW5kX2J5O1xuK1x0XHRpb3ZfaXRlcl9yZXZlcnQoXHUwMDI2bXNnLVx1MDAzZW1zZ19pdGVyLCByZXdpbmRfYnkpO1xuK1x0fVxuIG1heWJlX2Vycm9yOlxuLVx0aWYgKGNvcGllZClcbitcdGlmIChjb3BpZWQpIHtcbitcdFx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBjYWxsLVx1MDAzZWVycm9yIFx1MDAzYyAwKSB7XG4rXHRcdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbitcdFx0XHRnb3RvIG91dF90eGI7XG4rXHRcdH1cbiBcdFx0Z290byBzdWNjZXNzO1xuLVx0Z290byBvdXQ7XG4rXHR9XG4rXHRnb3RvIG91dF90eGI7XG4gXG4gZWZhdWx0OlxuIFx0cmV0ID0gLUVGQVVMVDtcbi1cdGdvdG8gb3V0O1xuK1x0Z290byBvdXRfdHhiO1xuIFxuIHdhaXRfZm9yX3NwYWNlOlxuIFx0cmV0ID0gLUVBR0FJTjtcbiBcdGlmIChtc2ctXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpXG4gXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbi1cdCpfZHJvcHBlZF9sb2NrID0gdHJ1ZTtcbitcbiBcdHJldCA9IHJ4cnBjX3dhaXRfZm9yX3R4X3dpbmRvdyhyeCwgY2FsbCwgXHUwMDI2dGltZW8sXG4gXHRcdFx0XHQgICAgICAgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1dBSVRBTEwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Z290byBtYXliZV9lcnJvcjtcbitcdFx0Z290byBvdXRfbm9sb2NrO1xuIFx0aWYgKGNhbGwtXHUwMDNlaW50ZXJydXB0aWJpbGl0eSA9PSBSWFJQQ19JTlRFUlJVUFRJQkxFKSB7XG4gXHRcdGlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KSBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XG4tXHRcdFx0Z290byBtYXliZV9lcnJvcjtcbitcdFx0XHRnb3RvIG91dF9ub2xvY2s7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdH1cbi1cdCpfZHJvcHBlZF9sb2NrID0gZmFsc2U7XG4gXHRnb3RvIHJlbG9hZDtcbitvdXRfbm9sb2NrOlxuK1x0X2xlYXZlKFwiID0gJWQgW2ludHJdXCIsIHJldCk7XG4rXHRyZXR1cm4gY29waWVkID86IHJldDtcbiB9XG4gXG4gLypcbkBAIC02NjAsNyArNzA3LDYgQEAgcnhycGNfbmV3X2NsaWVudF9jYWxsX2Zvcl9zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLFxuIGludCByeHJwY19kb19zZW5kbXNnKHN0cnVjdCByeHJwY19zb2NrICpyeCwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCByeHJwY19jYWxsICpjYWxsO1xuLVx0Ym9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTtcbiBcdGludCByZXQ7XG4gXG4gXHRzdHJ1Y3QgcnhycGNfc2VuZF9wYXJhbXMgcCA9IHtcbkBAIC03NjksMTYgKzgxNSwxNSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiBcdFx0cmV0ID0gMDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJYUlBDX0NNRF9TRU5EX0RBVEE6XG4tXHRcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeCwgY2FsbCwgbXNnLCBsZW4sIE5VTEwsIFx1MDAyNmRyb3BwZWRfbG9jayk7XG4tXHRcdGJyZWFrO1xuK1x0XHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMKTtcbitcdFx0Z290byBlcnJvcl9wdXQ7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFx0XHRicmVhaztcbiBcdH1cbiBcbiBvdXRfcHV0X3VubG9jazpcbi1cdGlmICghZHJvcHBlZF9sb2NrKVxuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIGVycm9yX3B1dDpcbiBcdHJ4cnBjX3B1dF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfcHV0X3NlbmRtc2cpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbkBAIC04MDAsMTUgKzg0NSwyMSBAQCBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiAgKiBBbGxvdyBhIGtlcm5lbCBzZXJ2aWNlIHRvIHNlbmQgZGF0YSBvbiBhIGNhbGwuICBUaGUgY2FsbCBtdXN0IGJlIGluIGFuIHN0YXRlXG4gICogYXBwcm9wcmlhdGUgdG8gc2VuZGluZyBkYXRhLiAgTm8gY29udHJvbCBkYXRhIHNob3VsZCBiZSBzdXBwbGllZCBpbiBAbXNnLFxuICAqIG5vciBzaG91bGQgYW4gYWRkcmVzcyBiZSBzdXBwbGllZC4gIE1TR19NT1JFIHNob3VsZCBiZSBmbGFnZ2VkIGlmIHRoZXJlJ3Ncbi0gKiBtb3JlIGRhdGEgdG8gY29tZSwgb3RoZXJ3aXNlIHRoaXMgZGF0YSB3aWxsIGVuZCB0aGUgdHJhbnNtaXNzaW9uIHBoYXNlLlxuKyAqIG1vcmUgZGF0YSB0byBjb21lLCBvdGhlcndpc2UgdGhpcyBkYXRhIHdpbGwgZW5kIHRoZSB0cmFuc21pc3Npb24gcGhhc2UgaWZcbisgKiBhbGwgdGhlIGRhdGEgaXMgYnVmZmVyZWQuXG4rICpcbisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIGEgc2hvcnQgc2VuZCwgaW4gd2hpY2ggY2FzZSBpdCBzaG91bGQgYmVcbisgKiBjYWxsZWQgYWdhaW4gZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgb3IgdG8gcGljayB1cCBhbiBlcnJvciB0aGF0XG4rICogY2F1c2VkIHRoZSBzaG9ydCBzZW5kLlxuICAqXG4tICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBidWZmZXJlZCAoY291bGQgYmUgJTAgaWYgQGxlbiBpcyAwIG9yXG4rICogbXNnX2l0ZXIgaG9sZHMgMCBieXRlcykgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICogb3RoZXJ3aXNlLlxuICAqL1xuIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0XHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0XHQgICByeHJwY19ub3RpZnlfZW5kX3R4X3Qgbm90aWZ5X2VuZF90eClcbiB7XG4tXHRib29sIGRyb3BwZWRfbG9jayA9IGZhbHNlO1xuIFx0aW50IHJldDtcbiBcbiBcdF9lbnRlcihcInslZH0sXCIsIGNhbGwtXHUwMDNlZGVidWdfaWQpO1xuQEAgLTgxOSwxMiArODcwLDEwIEBAIGludCByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsLFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFxuIFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spLCBjYWxsLCBtc2csIGxlbixcbi1cdFx0XHQgICAgICBub3RpZnlfZW5kX3R4LCBcdTAwMjZkcm9wcGVkX2xvY2spO1xuK1x0XHRcdCAgICAgIG5vdGlmeV9lbmRfdHgpO1xuIFx0aWYgKHJldCA9PSAtRVNIVVRET1dOKVxuIFx0XHRyZXQgPSBjYWxsLVx1MDAzZWVycm9yO1xuIFxuLVx0aWYgKCFkcm9wcGVkX2xvY2spXG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZjYWxsLVx1MDAzZXVzZXJfbXV0ZXgpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDk6MjMuODUwMzcyNzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzQxMzMxODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IFJYUlBDIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyBmdXp6LXdvcnRoeSwgd2hhdCB0aGUgaWRlYWwgY29uZmlndXJhdGlvbiBsb29rcyBsaWtlLCBhbmQgd2hhdCBzeW1ib2xzIHdlIHNob3VsZCB0YXJnZXQuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgd2UgaGF2ZTpcblxuMS4gIERvY3VtZW50YXRpb24gdXBkYXRlcywgbm90IHRlcnJpYmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBidXQgZ29vZCB0byBrbm93IHRoZXkncmUgdGhlcmUuXG4yLiAgQSBidWZmZXIgc2l6ZSBmaXggaW4gYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYC4gVGhhdCdzIGEgY2xhc3NpYyB0YXJnZXQsIHNvIHdlJ2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgZm9yIGNvdmVyYWdlLlxuMy4gIFNvbWUgc2VydmVyIGFzc2lnbm1lbnQgdXBkYXRlcyBpbiBgYWZzX21ha2Vfb3BfY2FsbGAuXG40LiAgU2lnbmlmaWNhbnQgY2hhbmdlcyBpbiB0aGUgUlhSUEMgY29kZTogYGFmc19tYWtlX2NhbGxgLCBgYWZzX3NlbmRfZW1wdHlfcmVwbHlgLCBhbmQgYGFmc19zZW5kX3NpbXBsZV9yZXBseWAgYWxsIGhhdmUgbmV3IGxvb3BzIGFyb3VuZCBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAgd2l0aCB1cGRhdGVkIGVycm9yIGhhbmRsaW5nLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBidWdzIGxpZSwgZXNwZWNpYWxseSBhcm91bmQgZXJyb3IgY29uZGl0aW9ucy5cbjUuICBUcmFjZXBvaW50IGFkZGl0aW9ucy4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcgYnV0IG5vdCBkaXJlY3RseSBmdXp6LXJlbGV2YW50LlxuNi4gIERlY2xhcmF0aW9ucyBhbmQgZmxhZ3MgaW4gYGFyLWludGVybmFsLmhgLCBpbmNsdWRpbmcgYFJYUlBDX0NBTExfVFhfRVJST1JgLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldyBlcnJvciBmbGFncy5cbjcuICBVcGRhdGVzIHRvIGNhbGwgc3RhdGUgbWFuYWdlbWVudCBpbiBgY2FsbF9zdGF0ZS5jYC5cbjguICBBIGNvbm5lY3Rpb24gcG9raW5nIG9wZXJhdGlvbiB1c2luZyBgcnhycGNfZ2V0X2Nvbm5lY3Rpb25fbWF5YmVgLlxuOS4gIENyeXB0byB2YWxpZGF0aW9uIGluIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgLCBub3cgdmFsaWRhdGluZyB0aGUgY3J5cHRvIGVuY3R5cGUuIFRoaXMgaXMgaW50cmlndWluZywgbWlnaHQgbGVhZCB0byBzb21lIGludGVyZXN0aW5nIGNyeXB0by1yZWxhdGVkIGJ1Z3MuXG4xMC4gUmVxdWV1ZSBhbmQgcmVjZWl2ZSBtZXNzYWdlIGhhbmRsaW5nLlxuMTEuIFNlY3VyaXR5IGxvY2tpbmcgaW4gYHJ4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5YC5cbjEyLiBMb29waW5nIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCBpbiBgcnhwZXJmX3Byb2Nlc3NfY2FsbGAuXG4xMy4gVGhlIGJpZyBvbmU6IGBzZW5kbXNnLmNgLiBNYWpvciByZXdyaXRlIG9mIHNlbmQgbG9naWMsIGZvY3VzaW5nIG9uIGVycm9yIGhhbmRsaW5nLCBsZW5ndGggY2hlY2tzLCBhbmQgbG9ja2luZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgcHJpbWUgdGFyZ2V0LiBUaGUgdXNlIG9mIGBSWFJQQ19DQUxMX1RYX0VSUk9SYCwgYG1zZ19kYXRhX2xlZnRgLCBgY29weV9mcm9tX2l0ZXJfZnVsbGAsIGBtaW4zYCwgYW5kIGByeHJwY193YWl0X2Zvcl90eF93aW5kb3dgIGFsbCBpbmRpY2F0ZSBjb21wbGV4IGxvZ2ljLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gd2UgcmVhY2ggdGhlc2UgY2hhbmdlcyBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gVGhhbmtmdWxseSwgQUZcXF9SWFJQQyBpcyBhIG5ldHdvcmsgc29ja2V0IGZhbWlseSwgYW5kIEFGUyBpcyBhbiBpbi1rZXJuZWwgZmlsZXN5c3RlbS4gU3l6a2FsbGVyIHJlZ3VsYXJseSBmdXp6ZXogQUZcXF9SWFJQQywgYW5kIHdlIGhhdmUgaW4ta2VybmVsIGZpbGVzeXN0ZW1zIHRoYXQgbWFrZSB1c2Ugb2YgdGhlIHByb3RvY29sLiBXZSBjYW4gYWNjZXNzIEFGXFxfUlhSUEMgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscywgYW5kIGtleSByaW5nIG9wZXJhdGlvbnMgYXJlIGFsc28gYWNjZXNzaWJsZS4gVGhpcyBpcyAqKmhlYXZpbHkqKiByZWFjaGFibGUgY29kZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW1zIHN1YnN5c3RlbXMsIG1ha2luZyBgV29ydGhGdXp6aW5nYCBhIHJlc291bmRpbmcgYHRydWVgLlxuXG5Ob3csIEknbGwgdXNlIGBncmVwcGVyYCB0byBkZXRlcm1pbmUgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciBBRlxcX1JYUlBDLCBBRlMsIFJYR0ssIGFuZCBjcnlwdG9cXF9rcmI1IChqdXN0IGluIGNhc2UgdGhleSdyZSByZWxldmFudCkuIExldCdzIG5haWwgZG93biB0aG9zZSBjb25maWd1cmF0aW9ucyBzbyB3ZSBjYW4gb3B0aW1pemUgb3VyIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEzNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjMxLjE5MTcwNzk4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ3NzE2ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIChBRl9SWFJQQ3xBRlNfRlN8UlhHSylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMvS2NvbmZpZy01LVxcbm5ldC9yeHJwYy9LY29uZmlnOjY6Y29uZmlnIEFGX1JYUlBDXFxubmV0L3J4cnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWc9MjU9aWYgQUZfUlhSUENcXG5uZXQvcnhycGMvS2NvbmZpZy0yNi1cXG5uZXQvcnhycGMvS2NvbmZpZzoyNzpjb25maWcgQUZfUlhSUENfSVBWNlxcbm5ldC9yeHJwYy9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgUnhSUENcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy0zMy1cXG5uZXQvcnhycGMvS2NvbmZpZzozNDpjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1NcXG5uZXQvcnhycGMvS2NvbmZpZy0zNS1cXHRib29sIFxcXCJJbmplY3QgcGFja2V0IGxvc3MgaW50byBSeFJQQyBwYWNrZXQgc3RyZWFtXFxcIlxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctMzktXFxubmV0L3J4cnBjL0tjb25maWc6NDA6Y29uZmlnIEFGX1JYUlBDX0lOSkVDVF9SWF9ERUxBWVxcbm5ldC9yeHJwYy9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIkluamVjdCBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb25cXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy00OS1cXG5uZXQvcnhycGMvS2NvbmZpZzo1MDpjb25maWcgQUZfUlhSUENfREVCVUdcXG5uZXQvcnhycGMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJSeFJQQyBkeW5hbWljIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9yeHJwYy9LY29uZmlnPTU4PWNvbmZpZyBSWEtBRFxcbi0tXFxubmV0L3J4cnBjL0tjb25maWctNjUtXFxubmV0L3J4cnBjL0tjb25maWc6NjY6Y29uZmlnIFJYR0tcXG5uZXQvcnhycGMvS2NvbmZpZy02Ny1cXHRib29sIFxcXCJSeFJQQyBHU1NBUEkgc2VjdXJpdHlcXFwiXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZz04OT1jb25maWcgUlhQRVJGXFxuLS1cXG5uZXQvcnhycGMvS2NvbmZpZy05NS1cXG5uZXQvcnhycGMvS2NvbmZpZzo5Njpjb25maWcgQUZfUlhSUENfS1VOSVRfVEVTVFxcbm5ldC9yeHJwYy9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJSeFJQQyBjcnlwdG8gS1VuaXQgdGVzdFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTozMS40OTY0ODUyMDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE1NDk4OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZXNlIHN1YnN5c3RlbXMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgb3V0IHRoZSBgZnMvYWZzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBlbmFibGVkLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBvcHRpb25zIGludGVycmVsYXRlIHdpdGhpbiB0aGUgQUZTIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uLiBUaGVuLCBJIHNob3VsZCBoZWFkIG92ZXIgdG8gYG5ldC9yeHJwYy9LY29uZmlnYCBhbmQgcmVwZWF0IHRoZSBwcm9jZXNzIGZvciB0aGUgUnhSUEMgbmV0d29yayBwcm90b2NvbC4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIHR3byBhcmVhcywgaWYgdGhlcmUgYXJlIGFueSwgaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgYXBwcm9wcmlhdGVseSBjb25maWd1cmVkIGFuZCB0aGF0IHRoZSBvdmVyYWxsIGJ1aWxkIGlzIGNsZWFuLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBrZXJuZWwgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNDQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTozMy42MTE5ODczOTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9hZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEFGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgQUZfUlhSUENcXG4gICA2OlxcdFxcdHNlbGVjdCBETlNfUkVTT0xWRVJcXG4gICA3OlxcdFxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0tSQjVcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGdldCBhbiBleHBlcmltZW50YWwgQW5kcmV3IEZpbGUgU3lzdGVtXFxuICAxMTpcXHRcXHQgIGRyaXZlci4gSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdW5zZWN1cmVkIHJlYWQtb25seSBBRlMgYWNjZXNzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Fmcy5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBBRlNfREVCVUdcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIkFGUyBkeW5hbWljIGRlYnVnZ2luZ1xcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gQUZTX0ZTXFxuICAyMDpcXHRcXHRoZWxwXFxuICAyMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gbWFrZSBydW50aW1lIGNvbnRyb2xsYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXBwZWFyLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Fmcy5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBBRlNfRlNDQUNIRVxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiUHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG4gIDI5OlxcdFxcdGRlcGVuZHMgb24gQUZTX0ZTPW0gXFx1MDAyNlxcdTAwMjYgRlNDQUNIRSB8fCBBRlNfRlM9eSBcXHUwMDI2XFx1MDAyNiBGU0NBQ0hFPXlcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBBRlMgZGF0YSB0byBiZSBjYWNoZWQgbG9jYWxseSBvbiBkaXNrIHRocm91Z2hcXG4gIDMyOlxcdFxcdCAgdGhlIGdlbmVyaWMgZmlsZXN5c3RlbSBjYWNoZSBtYW5hZ2VyXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBBRlNfREVCVUdfQ1VSU09SXFxuICAzNTpcXHRcXHRib29sIFxcXCJBRlMgc2VydmVyIGN1cnNvciBkZWJ1Z2dpbmdcXFwiXFxuICAzNjpcXHRcXHRkZXBlbmRzIG9uIEFGU19GU1xcbiAgMzc6XFx0XFx0aGVscFxcbiAgMzg6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGNhdXNlIHRoZSBjb250ZW50cyBvZiBhIHNlcnZlciBjdXJzb3IgdG8gYmUgZHVtcGVkIHRvXFxuICAzOTpcXHRcXHQgIHRoZSBkbWVzZyBsb2cgaWYgdGhlIHNlcnZlciByb3RhdGlvbiBhbGdvcml0aG0gZmFpbHMgdG8gc3VjY2Vzc2Z1bGx5XFxuICA0MDpcXHRcXHQgIGNvbnRhY3QgYSBzZXJ2ZXIuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDk6MzMuNjEyMDczMTgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4NzM5NDUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgUlhSUEMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIFJYR0ssIFJYUEVSRiwgYW5kIEFGX1JYUlBDLiBJdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L3J4cnBjL0tjb25maWdgIGZpbGUuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGF0aW9uc2hpcHMgZGVmaW5lZCB0aGVyZSB0byBzZWUgd2hpY2ggZmVhdHVyZXMgYXJlIHJlcXVpcmVkIGZvciB0aGVzZSBwaWVjZXMgdG8gYmUgZW5hYmxlZCwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBidWlsZCBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUuIEhvcGVmdWxseSwgaXQncyBzdHJhaWdodGZvcndhcmQsIGFuZCBJIGNhbiBxdWlja2x5IG1hcCB0aGUgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0aGVyZSBtaWdodCBiZSBzb21lIGludGVycGxheSBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgY29tcG9uZW50cywgc28gSSBuZWVkIHRvIHNlZSBob3cgdGhleSdyZSBjb25uZWN0ZWQgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjM1Ljc5OTQ2OTkyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBSeFJQQyBzZXNzaW9uIHNvY2tldHNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEFGX1JYUlBDXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUnhSUEMgc2Vzc2lvbiBzb2NrZXRzXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9ERVMgaWYgUlhLQURcXG4gIDExOlxcdFxcdHNlbGVjdCBLRVlTXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgU2F5IFkgb3IgTSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUnhSUEMgc2Vzc2lvbiBzb2NrZXRzIChqdXN0XFxuICAxNTpcXHRcXHQgIHRoZSB0cmFuc3BvcnQgcGFydCwgbm90IHRoZSBwcmVzZW50YXRpb24gcGFydDogKHVuKW1hcnNoYWxsaW5nIGlzXFxuICAxNjpcXHRcXHQgIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uKS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0ICBUaGVzZSBhcmUgdXNlZCBmb3IgQUZTIGtlcm5lbCBmaWxlc3lzdGVtIGFuZCB1c2Vyc3BhY2UgdXRpbGl0aWVzLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIFRoaXMgbW9kdWxlIGF0IHRoZSBtb21lbnQgb25seSBzdXBwb3J0cyBjbGllbnQgb3BlcmF0aW9ucyBhbmQgaXNcXG4gIDIxOlxcdFxcdCAgY3VycmVudGx5IGluY29tcGxldGUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXFxuICAyNDpcXHRcXG4gIDI1OlxcdGlmIEFGX1JYUlBDXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBBRl9SWFJQQ19JUFY2XFxuICAyODpcXHRcXHRib29sIFxcXCJJUHY2IHN1cHBvcnQgZm9yIFJ4UlBDXFxcIlxcbiAgMjk6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgQUZfUlhSUEMgdG8gdXNlIElQVjYgVURQIGFzIHdlbGwgYXMgSVBWNCBVRFAgYXNcXG4gIDMyOlxcdFxcdCAgaXRzIG5ldHdvcmsgdHJhbnNwb3J0LlxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgQUZfUlhSUENfSU5KRUNUX0xPU1NcXG4gIDM1OlxcdFxcdGJvb2wgXFxcIkluamVjdCBwYWNrZXQgbG9zcyBpbnRvIFJ4UlBDIHBhY2tldCBzdHJlYW1cXFwiXFxuICAzNjpcXHRcXHRoZWxwXFxuICAzNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gaW5qZWN0IHBhY2tldCBsb3NzIGJ5IGRpc2NhcmRpbmcgc29tZSByZWNlaXZlZCBhbmQgc29tZVxcbiAgMzg6XFx0XFx0ICB0cmFuc21pdHRlZCBwYWNrZXRzLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRjb25maWcgQUZfUlhSUENfSU5KRUNUX1JYX0RFTEFZXFxuICA0MTpcXHRcXHRib29sIFxcXCJJbmplY3QgZGVsYXkgaW50byBwYWNrZXQgcmVjZXB0aW9uXFxcIlxcbiAgNDI6XFx0XFx0ZGVwZW5kcyBvbiBTWVNDVExcXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmplY3QgYSBkZWxheSBpbnRvIHBhY2tldCByZWNlcHRpb24sIGFsbG93aW5nIGFuXFxuICA0NTpcXHRcXHQgIGV4dGVuZGVkIFJUVCB0aW1lIHRvIGJlIG1vZGVsbGVkLiAgVGhlIGRlbGF5IGNhbiBiZSBjb25maWd1cmVkIHVzaW5nXFxuICA0NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvcnhycGMvcnhycGNfaW5qZWN0X3J4X2RlbGF5LCBzZXR0aW5nIGEgbnVtYmVyIG9mXFxuICA0NzpcXHRcXHQgIG1pbGxpc2Vjb25kcyB1cCB0byAwLjVzIChub3RlIHRoYXQgdGhlIGdyYW51bGFyaXR5IGlzIGFjdHVhbGx5IGluXFxuICA0ODpcXHRcXHQgIGppZmZpZXMpLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgQUZfUlhSUENfREVCVUdcXG4gIDUxOlxcdFxcdGJvb2wgXFxcIlJ4UlBDIGR5bmFtaWMgZGVidWdnaW5nXFxcIlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIG1ha2UgcnVudGltZSBjb250cm9sbGFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIGFwcGVhci5cXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdC5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFxuICA1ODpcXHRjb25maWcgUlhLQURcXG4gIDU5OlxcdFxcdGJvb2wgXFxcIlJ4UlBDIEtlcmJlcm9zIHNlY3VyaXR5XFxcIlxcbiAgNjA6XFx0XFx0aGVscFxcbiAgNjE6XFx0XFx0ICBQcm92aWRlIGtlcmJlcm9zIDQgYW5kIEFGUyBrYXNlcnZlciBzZWN1cml0eSBoYW5kbGluZyBmb3IgQUZfUlhSUENcXG4gIDYyOlxcdFxcdCAgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZSBrZXkgcmV0ZW50aW9uIHNlcnZpY2UuXFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3QuXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBSWEdLXFxuICA2NzpcXHRcXHRib29sIFxcXCJSeFJQQyBHU1NBUEkgc2VjdXJpdHlcXFwiXFxuICA2ODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0tSQjVcXG4gIDY5OlxcdFxcdHNlbGVjdCBDUllQVE9fTUFOQUdFUlxcbiAgNzA6XFx0XFx0c2VsZWN0IENSWVBUT19LUkI1RU5DXFxuICA3MTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcXG4gIDcyOlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gIDczOlxcdFxcdHNlbGVjdCBDUllQVE9fSEFTSF9JTkZPXFxuICA3NDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0hNQUNcXG4gIDc1OlxcdFxcdHNlbGVjdCBDUllQVE9fQ01BQ1xcbiAgNzY6XFx0XFx0c2VsZWN0IENSWVBUT19TSEExXFxuICA3NzpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NlxcbiAgNzg6XFx0XFx0c2VsZWN0IENSWVBUT19TSEE1MTJcXG4gIDc5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0JDXFxuICA4MDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0NUU1xcbiAgODE6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gIDgyOlxcdFxcdHNlbGVjdCBDUllQVE9fQ0FNRUxMSUFcXG4gIDgzOlxcdFxcdGhlbHBcXG4gIDg0OlxcdFxcdCAgUHJvdmlkZSB0aGUgR1NTQVBJLWJhc2VkIFJ4R0sgc2VjdXJpdHkgY2xhc3MgZm9yIEFGUy4gIEtleXMgYXJlIGFkZGVkXFxuICA4NTpcXHRcXHQgIHdpdGggYWRkX2tleSgpLlxcbiAgODY6XFx0XFxuICA4NzpcXHRcXHQgIFNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0LlxcbiAgODg6XFx0XFxuICA4OTpcXHRjb25maWcgUlhQRVJGXFxuICA5MDpcXHRcXHR0cmlzdGF0ZSBcXFwiUnhSUEMgdGVzdCBzZXJ2aWNlXFxcIlxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBQcm92aWRlIGFuIHJ4cGVyZiBzZXJ2aWNlIHRlc3Rlci4gIFRoaXMgbGlzdGVucyBvbiBVRFAgcG9ydCA3MDA5IGZvclxcbiAgOTM6XFx0XFx0ICBpbmNvbWluZyBjYWxscyBmcm9tIHRoZSByeHBlcmYgcHJvZ3JhbSAoYW4gZXhhbXBsZSBvZiB3aGljaCBjYW4gYmVcXG4gIDk0OlxcdFxcdCAgZm91bmQgaW4gT3BlbkFGUykuXFxuICA5NTpcXHRcXG4gIDk2OlxcdGNvbmZpZyBBRl9SWFJQQ19LVU5JVF9URVNUXFxuICA5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiUnhSUEMgY3J5cHRvIEtVbml0IHRlc3RcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDk4OlxcdFxcdGRlcGVuZHMgb24gS1VOSVQgXFx1MDAyNlxcdTAwMjYgUlhLQURcXG4gIDk5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuIDEwMDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjM1Ljc5OTU1OTA0OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NDI0OTY1NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNjb3BlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJyZWFkdGggb2YgaXRzIGltcGFjdCBiZWZvcmUgSSBkaWcgaW4uIFRoZSBpbml0aWFsIGluZGljYXRvcnMgYXJlIHBvaW50aW5nIHRvIGEgZmV3IGtleSBhcmVhcyB0aGF0IGFyZSBnb2luZyB0byBkZW1hbmQgbXkgYXR0ZW50aW9uOlxuXG4qICAgKipgQUZfUlhSUENgOioqIFRoaXMgaXMgdGhlIGNvcmUgUnhSUEMgcHJvdG9jb2wsIGFuZCB0aGUgcGF0Y2ggaGFzIGxhbmRlZCBpbiBzZXZlcmFsIGZpbGVzIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb246IGBzZW5kbXNnLmNgLCBgY2FsbF9zdGF0ZS5jYCwgYGNvbm5fb2JqZWN0LmNgLCBga2V5LmNgLCBhbmQgYHJlY3Ztc2cuY2AuIFRoYXQncyBhIGxvdCBvZiB0aGUgY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aG9zZSBtZXNzYWdlIGludGVyYWN0aW9ucywgY2FsbCBzdGF0ZSBtYW5hZ2VtZW50LCBjb25uZWN0aW9uIG9iamVjdHMgYW5kIGtleSBoYW5kbGluZywgYW5kIHRoZSByZWNlaXZlIHNpZGUgYXJlIGJlaW5nIGFmZmVjdGVkLlxuXG4qICAgKipgQUZTX0ZTYDoqKiBUaGUgYGZzL2Fmcy9gIGRpcmVjdG9yeSBpcyBhbm90aGVyIGNyaXRpY2FsIHNpZ25hbC4gSXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2gncyB0b3VjaCB0byBgY21fc2VjdXJpdHkuY2AsIGBpbnRlcm5hbC5oYCwgYW5kIGByeHJwYy5jYCBtYXkgcmVsYXRlIHRvIHRoZSBBRlMgZmlsZXN5dGVtJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUlBDIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gc2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21lIHVuZGVybHlpbmcgc2VjdXJpdHkgY29uZmlndXJhdGlvbiBvciB0aGUgaW50ZXJhY3Rpb25zIHdpdGggQUZTIGNsaWVudCB0b29scy5cblxuKiAgICoqYFJYR0tgOioqIFRoZSBgUlhHS2AgZmlsZXMgd2l0aGluIGBuZXQvcnhycGMvYCBhcmUgYSBzaWduYWwgYXMgd2VsbC4gSXQgbG9va3MgbGlrZSBgcnhnay5jYCwgdGhlIGtleWluZyBpbXBsZW1lbnRhdGlvbnMgYXJlIGdldHRpbmcgYW4gdXBkYXRlLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgIGJlY2F1c2UgaXQgbWF5IGludm9sdmUgaG93IHRoZSBSUEMgYW5kIFJYR0sgd29yayB3aXRoIGFuIG91dHNpZGUgYXBwbGljYXRpb24gbGF5ZXIuXG5cbiogICAqKmBSWFBFUkZgOioqIFRoZSBgcnhwZXJmLmNgIGZpbGUgaXMgZ29vZCBhcyB3ZWxsLiBJdCBtYXkgaGF2ZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb24gUlhSUEMuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yaWVzLCBuYW1lbHkgYG5ldC9yeHJwYy9gIGFuZCBgZnMvYWZzL2AsIHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjM5LjM0MjA1ODUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIExpbnV4IGtlcm5lbCBSeFJQQ1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfQUZfUlhSUEMpICs9IHJ4cnBjLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0cnhycGMteSA6PSBcXFxcXFxuICAgOTpcXHRcXHRhZl9yeHJwYy5vIFxcXFxcXG4gIDEwOlxcdFxcdGNhbGxfYWNjZXB0Lm8gXFxcXFxcbiAgMTE6XFx0XFx0Y2FsbF9ldmVudC5vIFxcXFxcXG4gIDEyOlxcdFxcdGNhbGxfb2JqZWN0Lm8gXFxcXFxcbiAgMTM6XFx0XFx0Y2FsbF9zdGF0ZS5vIFxcXFxcXG4gIDE0OlxcdFxcdGNvbm5fY2xpZW50Lm8gXFxcXFxcbiAgMTU6XFx0XFx0Y29ubl9ldmVudC5vIFxcXFxcXG4gIDE2OlxcdFxcdGNvbm5fb2JqZWN0Lm8gXFxcXFxcbiAgMTc6XFx0XFx0Y29ubl9zZXJ2aWNlLm8gXFxcXFxcbiAgMTg6XFx0XFx0aW5wdXQubyBcXFxcXFxuICAxOTpcXHRcXHRpbnB1dF9yYWNrLm8gXFxcXFxcbiAgMjA6XFx0XFx0aW5zZWN1cmUubyBcXFxcXFxuICAyMTpcXHRcXHRpb190aHJlYWQubyBcXFxcXFxuICAyMjpcXHRcXHRrZXkubyBcXFxcXFxuICAyMzpcXHRcXHRsb2NhbF9ldmVudC5vIFxcXFxcXG4gIDI0OlxcdFxcdGxvY2FsX29iamVjdC5vIFxcXFxcXG4gIDI1OlxcdFxcdG1pc2MubyBcXFxcXFxuICAyNjpcXHRcXHRuZXRfbnMubyBcXFxcXFxuICAyNzpcXHRcXHRvb2IubyBcXFxcXFxuICAyODpcXHRcXHRvdXRwdXQubyBcXFxcXFxuICAyOTpcXHRcXHRwZWVyX2V2ZW50Lm8gXFxcXFxcbiAgMzA6XFx0XFx0cGVlcl9vYmplY3QubyBcXFxcXFxuICAzMTpcXHRcXHRyZWN2bXNnLm8gXFxcXFxcbiAgMzI6XFx0XFx0cnR0Lm8gXFxcXFxcbiAgMzM6XFx0XFx0c2VjdXJpdHkubyBcXFxcXFxuICAzNDpcXHRcXHRzZW5kbXNnLm8gXFxcXFxcbiAgMzU6XFx0XFx0c2VydmVyX2tleS5vIFxcXFxcXG4gIDM2OlxcdFxcdHNrYnVmZi5vIFxcXFxcXG4gIDM3OlxcdFxcdHR4YnVmLm8gXFxcXFxcbiAgMzg6XFx0XFx0dXRpbHMub1xcbiAgMzk6XFx0XFxuICA0MDpcXHRyeHJwYy0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDk6MzkuMzQyMTI3MDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA3MzQ2MTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgQmFjayBpbnRvIHRoZSBgbmV0L3J4cnBjL01ha2VmaWxlYCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGFkZHJlc3NlZCB0aGF0IGluaXRpYWwgaXNzdWUsIGJ1dCB0aGVyZSdzIGFsd2F5cyBtb3JlIGx1cmtpbmcuIFRpbWUgdG8gZ2V0IGJhY2sgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGBuZXQvcnhycGMvTWFrZWZpbGVgLiBXZSBjYW4ndCBqdXN0IGZpeCBvbmUgdGhpbmcgYW5kIGNhbGwgaXQgYSBkYXksIG5vdCBpbiBhIGNvbXBsZXggc3lzdGVtIGxpa2UgdGhpcy4gSXQncyB0aW1lIHRvIHRob3JvdWdobHkgcmV2aWV3IHRoZSByZXN0IG9mIGl0LiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgc3BvdHRpbmcgb2J2aW91cyBlcnJvcnM7IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZCBmbGFncywgdGhlIGxpbmtpbmcgcHJvY2Vzcy4uLiBldmVyeXRoaW5nLiBBcmUgdGhlcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBjYXVzZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgd2UgY2FuIGltcGxlbWVudD8gQW55IHJlZHVuZGFuY2llcyB3ZSBjYW4gZWxpbWluYXRlPyBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYXJlYXMgd2hlcmUgZnV0dXJlIGNoYW5nZXMgY291bGQgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLCBvciBvcHBvcnR1bml0aWVzIHRvIGltcHJvdmUgYnVpbGQgcGVyZm9ybWFuY2UuIEl0J3MgYSBjb21wcmVoZW5zaXZlIGF1ZGl0LCBlbnN1cmluZyB0aGlzIGNyaXRpY2FsIHBpZWNlIG9mIG91ciBpbmZyYXN0cnVjdHVyZSBpcyBhcyByb2J1c3QgYW5kIGVmZmljaWVudCBhcyBwb3NzaWJsZS4gVGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLCBhbmQgSSBpbnRlbmQgdG8gZmluZCBoaW0uIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjQ0LjQxNTU5MTk5OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvcnhycGMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogNDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDE6XFx0cnhycGMtJChDT05GSUdfUlhLQUQpICs9IHJ4a2FkLm8gZmNyeXB0Lm9cXG4gIDQyOlxcdHJ4cnBjLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsLm9cXG4gIDQzOlxcdHJ4cnBjLSQoQ09ORklHX1JYR0spICs9IFxcXFxcXG4gIDQ0OlxcdFxcdHJ4Z2subyBcXFxcXFxuICA0NTpcXHRcXHRyeGdrX2FwcC5vIFxcXFxcXG4gIDQ2OlxcdFxcdHJ4Z2tfa2RmLm9cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0b2JqLSQoQ09ORklHX1JYUEVSRikgKz0gcnhwZXJmLm9cXG4gIDQ5OlxcdG9iai0kKENPTkZJR19LVU5JVCkgKz0gdGVzdHMvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjQ5OjQ0LjQxNTY0ODIyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTg2OTg4NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50OlxuXG4qKkluaXRpYWwgQ2hlY2twb2ludDogRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJ3MgbGlrZWx5IGZpbGVzeXN0ZW0tcmVsYXRlZCwgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZnMvYWZzL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBBRlMtc3BlY2lmaWMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGxpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBBRlMgaXMgYmVpbmcgYnVpbHQsIGxpbmtlZCwgYW5kIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGBNYWtlZmlsZWAgd2lsbCByZXZlYWwgdGhlIGtleSBjb21wb25lbnRzOiBvYmplY3QgZmlsZXMsIGxpYnJhcmllcywgaW5jbHVkZSBwYXRocywgYW55IHNwZWNpYWwgZmxhZ3Mgb3IgZGVmaW5lcyBzcGVjaWZpYyB0byB0aGUgQUZTIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZXNlIHdpbGwgZ2V0IG1lIG9uZSBzdGVwIGNsb3NlciB0byBpc29sYXRpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYnVpbGQgc3RyYXRlZ3kuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBtaXNjb25maWd1cmF0aW9ucywgbWlzc2luZyBkZXBlbmRlbmNpZXMsIG9yIGNvbmZsaWN0aW5nIGZsYWdzIHRoYXQgbWlnaHQgYmUgY29udHJpYnV0aW5nIHRvIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTE0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTo0OC4wMDI2Mzk1MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9hZnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBSZWQgSGF0IExpbnV4IEFGUyBjbGllbnQuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGthZnMteSA6PSBcXFxcXFxuICAgNzpcXHRcXHRhZGRyX2xpc3QubyBcXFxcXFxuICAgODpcXHRcXHRhZGRyX3ByZWZzLm8gXFxcXFxcbiAgIDk6XFx0XFx0Y2FsbGJhY2subyBcXFxcXFxuICAxMDpcXHRcXHRjZWxsLm8gXFxcXFxcbiAgMTE6XFx0XFx0Y21fc2VjdXJpdHkubyBcXFxcXFxuICAxMjpcXHRcXHRjbXNlcnZpY2UubyBcXFxcXFxuICAxMzpcXHRcXHRkaXIubyBcXFxcXFxuICAxNDpcXHRcXHRkaXJfZWRpdC5vIFxcXFxcXG4gIDE1OlxcdFxcdGRpcl9zZWFyY2gubyBcXFxcXFxuICAxNjpcXHRcXHRkaXJfc2lsbHkubyBcXFxcXFxuICAxNzpcXHRcXHRkeW5yb290Lm8gXFxcXFxcbiAgMTg6XFx0XFx0ZmlsZS5vIFxcXFxcXG4gIDE5OlxcdFxcdGZsb2NrLm8gXFxcXFxcbiAgMjA6XFx0XFx0ZnNjbGllbnQubyBcXFxcXFxuICAyMTpcXHRcXHRmc19vcGVyYXRpb24ubyBcXFxcXFxuICAyMjpcXHRcXHRmc19wcm9iZS5vIFxcXFxcXG4gIDIzOlxcdFxcdGlub2RlLm8gXFxcXFxcbiAgMjQ6XFx0XFx0bWFpbi5vIFxcXFxcXG4gIDI1OlxcdFxcdG1pc2MubyBcXFxcXFxuICAyNjpcXHRcXHRtbnRwdC5vIFxcXFxcXG4gIDI3OlxcdFxcdHJvdGF0ZS5vIFxcXFxcXG4gIDI4OlxcdFxcdHJ4cnBjLm8gXFxcXFxcbiAgMjk6XFx0XFx0c2VjdXJpdHkubyBcXFxcXFxuICAzMDpcXHRcXHRzZXJ2ZXIubyBcXFxcXFxuICAzMTpcXHRcXHRzZXJ2ZXJfbGlzdC5vIFxcXFxcXG4gIDMyOlxcdFxcdHN1cGVyLm8gXFxcXFxcbiAgMzM6XFx0XFx0c3ltbGluay5vIFxcXFxcXG4gIDM0OlxcdFxcdHZhbGlkYXRpb24ubyBcXFxcXFxuICAzNTpcXHRcXHR2bGNsaWVudC5vIFxcXFxcXG4gIDM2OlxcdFxcdHZsX2FsaWFzLm8gXFxcXFxcbiAgMzc6XFx0XFx0dmxfbGlzdC5vIFxcXFxcXG4gIDM4OlxcdFxcdHZsX3Byb2JlLm8gXFxcXFxcbiAgMzk6XFx0XFx0dmxfcm90YXRlLm8gXFxcXFxcbiAgNDA6XFx0XFx0dm9sdW1lLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTo0OC4wMDI3MjgxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjY5ODk4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIGBmcy9hZnMvTWFrZWZpbGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIGluIHRoZSBgZnMvYWZzL01ha2VmaWxlYCBmaWxlLCBzcGVjaWZpY2FsbHkgYWZ0ZXIgbGluZSA0MC4gSSdtIGdvaW5nIHRvIGp1bXAgaW4gdGhlcmUgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhhdCBzZWN0aW9uLiBJdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIGJ1aWxkIHRhcmdldCwgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbiwgb3IgcGVyaGFwcyBzb21lIGNvbmZpZ3VyYXRpb24gbG9naWMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGxpbmtlciBmbGFncywgb3IgbWF5YmUgZXZlbiBjb25kaXRpb25hbCBpbmNsdXNpb24gb2Ygc291cmNlIGZpbGVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCB3aGF0IGV4YWN0bHkgdGhlIGtlcm5lbCBpcyBkb2luZyB3aXRoIEFGUyBhdCB0aGF0IHBvaW50LCBsaWtlIHdoZXJlIGl0IGlzIGNvbXBpbGluZyBpdCBpbiBvciBwZXJoYXBzIHdoaWNoIHBhcnQgb2YgQUZTIGlzIGJlaW5nIGJ1aWx0LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTo1MC44Njk3MjE2NDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQxOlxcdFxcdHdyaXRlLm8gXFxcXFxcbiAgNDI6XFx0XFx0eGF0dHIubyBcXFxcXFxuICA0MzpcXHRcXHR5ZnNjbGllbnQub1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRrYWZzLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgNDY6XFx0b2JqLSQoQ09ORklHX0FGU19GUykgIDo9IGthZnMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTo1MC44Njk3ODg3NTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgwNDcyMDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXJgIGFuZCBgY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlYC4gVGhleSdyZSBjbGVhcmx5IHJlbGF0ZWQsIGFuZCBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZXkgZnVuY3Rpb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6ICoqV2hlcmUgYXJlIHRoZXNlIHR3byBmdW5jdGlvbnMgZGVmaW5lZCwgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBwYXJhbWV0ZXJzIHVsdGltYXRlbHkgY29udHJvbCB0aGVpciBiZWhhdmlvciBvciBpbmNsdXNpb24/KiogSSBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIHNvdXJjZSBmaWxlcyBhbmQgYW55IHJlbGV2YW50IGAjaWZkZWZgIGJsb2NrcyBvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyB0aGF0IGRldGVybWluZSB3aGV0aGVyIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYnVpbHQgaW50byB0aGUgZmluYWwgZXhlY3V0YWJsZS4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBjcnlwdG9ncmFwaGljIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZGlmZmVyZW50IGVuY3J5cHRpb24gdHlwZXMgaW4gS2VyYmVyb3MuIEl0J3MgdGltZSB0byB0cmFjZSB0aGUgZGVmaW5pdGlvbnMgYW5kIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgc28gSSBjYW4gZm9ybSBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIHBpZWNlcyBmaXQgaW50byB0aGUgYnJvYWRlciBzZWN1cml0eSBsYW5kc2NhcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTA5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo0OTo1Mi42NzQ1MTMxNjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDUxNTUyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vY3J5cHRvL2tyYjUucnN0PTEwMj1UaGUgZW5jb2RpbmcgdHlwZSBpcyBsb29rZWQgdXAgYnkgbnVtYmVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246OlxcbkRvY3VtZW50YXRpb24vY3J5cHRvL2tyYjUucnN0LTEwMy1cXG5Eb2N1bWVudGF0aW9uL2NyeXB0by9rcmI1LnJzdDoxMDQ6XFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHUzMiBlbmN0eXBlKTtcXG5Eb2N1bWVudGF0aW9uL2NyeXB0by9rcmI1LnJzdC0xMDUtXFxuLS1cXG5jcnlwdG8va3JiNS9rcmI1X2FwaS5jPTE5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICpjb25zdCBrcmI1X3N1cHBvcnRlZF9lbmN0eXBlc1tdID0ge1xcbi0tXFxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy0yOC0vKipcXG5jcnlwdG8va3JiNS9rcmI1X2FwaS5jOjI5OiAqIGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSAtIEZpbmQgdGhlIGhhbmRsZXIgZm9yIGEgS2VyYmVyb3M1IGVuY3J5cHRpb24gdHlwZVxcbmNyeXB0by9rcmI1L2tyYjVfYXBpLmMtMzAtICogQGVuY3R5cGU6IFRoZSBzdGFuZGFyZCBLZXJiZXJvcyBlbmNyeXB0aW9uIHR5cGUgbnVtYmVyXFxuLS1cXG5jcnlwdG8va3JiNS9rcmI1X2FwaS5jLTM0LSAqL1xcbmNyeXB0by9rcmI1L2tyYjVfYXBpLmM6MzU6Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHUzMiBlbmN0eXBlKVxcbmNyeXB0by9rcmI1L2tyYjVfYXBpLmMtMzYte1xcbi0tXFxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy00Ny19XFxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYzo0ODpFWFBPUlRfU1lNQk9MKGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSk7XFxuY3J5cHRvL2tyYjUva3JiNV9hcGkuYy00OS1cXG4tLVxcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmM9MTE4PXN0YXRpYyBpbnQga3JiNV90ZXN0X29uZV9wcmYoY29uc3Qgc3RydWN0IGtyYjVfcHJmX3Rlc3QgKnRlc3QpXFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYy0xMTkte1xcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmM6MTIwOlxcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodGVzdC1cXHUwMDNlZXR5cGUpO1xcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMTIxLVxcdHN0cnVjdCBrcmI1X2J1ZmZlciBrZXkgPSB7fSwgb2N0ZXQgPSB7fSwgcmVzdWx0ID0ge30sIHByZiA9IHt9O1xcbi0tXFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYz0yMTA9c3RhdGljIGludCBrcmI1X3Rlc3Rfb25lX2tleShjb25zdCBzdHJ1Y3Qga3JiNV9rZXlfdGVzdCAqdGVzdClcXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jLTIxMS17XFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYzoyMTI6XFx0Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh0ZXN0LVxcdTAwM2VldHlwZSk7XFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYy0yMTMtXFx0c3RydWN0IGtyYjVfYnVmZmVyIGJhc2Vfa2V5ID0ge307XFxuLS1cXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jPTI0MT1zdGF0aWMgaW50IGtyYjVfdGVzdF9vbmVfZW5jKGNvbnN0IHN0cnVjdCBrcmI1X2VuY190ZXN0ICp0ZXN0LCB2b2lkICpidWYpXFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYy0yNDIte1xcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmM6MjQzOlxcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodGVzdC1cXHUwMDNlZXR5cGUpO1xcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMjQ0LVxcdHN0cnVjdCBjcnlwdG9fYWVhZCAqY2kgPSBOVUxMO1xcbi0tXFxuY3J5cHRvL2tyYjUvc2VsZnRlc3QuYz0zODA9c3RhdGljIGludCBrcmI1X3Rlc3Rfb25lX21pYyhjb25zdCBzdHJ1Y3Qga3JiNV9taWNfdGVzdCAqdGVzdCwgdm9pZCAqYnVmKVxcbmNyeXB0by9rcmI1L3NlbGZ0ZXN0LmMtMzgxLXtcXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jOjM4MjpcXHRjb25zdCBzdHJ1Y3Qga3JiNV9lbmN0eXBlICprcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHRlc3QtXFx1MDAzZWV0eXBlKTtcXG5jcnlwdG8va3JiNS9zZWxmdGVzdC5jLTM4My1cXHRzdHJ1Y3QgY3J5cHRvX3NoYXNoICpjaSA9IE5VTEw7XFxuLS1cXG5mcy9hZnMvY21fc2VjdXJpdHkuYz0xMjE9aW50IGFmc19jcmVhdGVfdG9rZW5fa2V5KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2tldClcXG4tLVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jLTE0Mi1cXHRyZXQgPSAtRU5PUEtHO1xcbmZzL2Fmcy9jbV9zZWN1cml0eS5jOjE0MzpcXHRrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKEtSQjVfRU5DVFlQRV9BRVMxMjhfQ1RTX0hNQUNfU0hBMV85Nik7XFxuZnMvYWZzL2NtX3NlY3VyaXR5LmMtMTQ0LVxcdGlmICgha3JiNSlcXG4tLVxcbmZzL2Fmcy9jbV9zZWN1cml0eS5jPTE4MD1zdGF0aWMgaW50IGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuKHN0cnVjdCBza19idWZmICpjaGFsbGVuZ2UsXFxuLS1cXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0yMDUtXFxuZnMvYWZzL2NtX3NlY3VyaXR5LmM6MjA2OlxcdGNvbm5fa3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShlbmN0eXBlKTtcXG5mcy9hZnMvY21fc2VjdXJpdHkuYy0yMDctXFx0aWYgKCFjb25uX2tyYjUpXFxuLS1cXG5pbmNsdWRlL2NyeXB0by9rcmI1Lmg9ODc9c3RydWN0IGtyYjVfZW5jdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2NyeXB0by9rcmI1LmgtMTE2LSAqL1xcbmluY2x1ZGUvY3J5cHRvL2tyYjUuaDoxMTc6Y29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKHUzMiBlbmN0eXBlKTtcXG5pbmNsdWRlL2NyeXB0by9rcmI1LmgtMTE4LXNpemVfdCBjcnlwdG9fa3JiNV9ob3dfbXVjaF9idWZmZXIoY29uc3Qgc3RydWN0IGtyYjVfZW5jdHlwZSAqa3JiNSxcXG4tLVxcbm5ldC9jZXBoL2NyeXB0by5jPTQxPXN0YXRpYyBpbnQgc2V0X2tyYjVfdGZtcyhzdHJ1Y3QgY2VwaF9jcnlwdG9fa2V5ICprZXksIGNvbnN0IHUzMiAqa2V5X3VzYWdlcyxcXG4tLVxcbm5ldC9jZXBoL2NyeXB0by5jLTUxLVxcbm5ldC9jZXBoL2NyeXB0by5jOjUyOlxcdGtleS1cXHUwMDNla3JiNV90eXBlID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKFxcbm5ldC9jZXBoL2NyeXB0by5jLTUzLVxcdFxcdFxcdCAgICAgS1JCNV9FTkNUWVBFX0FFUzI1Nl9DVFNfSE1BQ19TSEEzODRfMTkyKTtcXG4tLVxcbm5ldC9yeHJwYy9rZXkuYz0xNjU9c3RhdGljIGludCByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2soc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCxcXG4tLVxcbm5ldC9yeHJwYy9rZXkuYy0yMzItXFxubmV0L3J4cnBjL2tleS5jOjIzMzpcXHRpZiAoIWNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZSh0b2tlbi1cXHUwMDNlcnhnay1cXHUwMDNlZW5jdHlwZSkpIHtcXG5uZXQvcnhycGMva2V5LmMtMjM0LVxcdFxcdHJldCA9IC1FTk9QS0c7XFxuLS1cXG5uZXQvcnhycGMvcnhnay5jPTIwPXN0YXRpYyBpbnQgcnhna19wcmVwYXJzZV9zZXJ2ZXJfa2V5KHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuLS1cXG5uZXQvcnhycGMvcnhnay5jLTM1LVxcbm5ldC9yeHJwYy9yeGdrLmM6MzY6XFx0a3JiNSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShlbmN0eXBlKTtcXG5uZXQvcnhycGMvcnhnay5jLTM3LVxcdGlmICgha3JiNSlcXG4tLVxcbm5ldC9yeHJwYy9yeGdrX2tkZi5jPTIwNT1zdHJ1Y3Qgcnhna19jb250ZXh0ICpyeGdrX2dlbmVyYXRlX3RyYW5zcG9ydF9rZXkoc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sXFxuLS1cXG5uZXQvcnhycGMvcnhna19rZGYuYy0yMjItXFxubmV0L3J4cnBjL3J4Z2tfa2RmLmM6MjIzOlxcdGdrLVxcdTAwM2VrcmI1ID0gY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlKGtleS1cXHUwMDNlZW5jdHlwZSk7XFxubmV0L3J4cnBjL3J4Z2tfa2RmLmMtMjI0LVxcdGlmICghZ2stXFx1MDAzZWtyYjUpXFxuLS1cXG5uZXQvcnhycGMvcnhna19rZGYuYz0yNjg9aW50IHJ4Z2tfc2V0X3VwX3Rva2VuX2NpcGhlcihjb25zdCBzdHJ1Y3Qga3JiNV9idWZmZXIgKnNlcnZlcl9rZXksXFxuLS1cXG5uZXQvcnhycGMvcnhna19rZGYuYy0yNzYtXFxubmV0L3J4cnBjL3J4Z2tfa2RmLmM6Mjc3OlxcdGtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XFxubmV0L3J4cnBjL3J4Z2tfa2RmLmMtMjc4LVxcdGlmICgha3JiNSlcXG4tLVxcbm5ldC9yeHJwYy9yeHBlcmYuYz01ODk9c3RhdGljIGludCByeHBlcmZfYWRkX3lmc19yeGdrX2tleShzdHJ1Y3Qga2V5ICprZXlyaW5nLCB1MzIgZW5jdHlwZSlcXG5uZXQvcnhycGMvcnhwZXJmLmMtNTkwLXtcXG5uZXQvcnhycGMvcnhwZXJmLmM6NTkxOlxcdGNvbnN0IHN0cnVjdCBrcmI1X2VuY3R5cGUgKmtyYjUgPSBjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZW5jdHlwZSk7XFxubmV0L3J4cnBjL3J4cGVyZi5jLTU5Mi1cXHRrZXlfcmVmX3Qga3JlZjtcXG4tLVxcbm5ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jPTQ2PXN0YXRpYyB2b2lkIGdzc19rcmI1X3ByZXBhcmVfZW5jdHlwZV9wcmlvcml0eV9saXN0KHZvaWQpXFxuLS1cXG5uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYy01NS1cXHRmb3IgKHRvdGFsID0gMCwgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGdzc19rcmI1X2VuY3R5cGVzKTsgaSsrKSB7XFxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmM6NTY6XFx0XFx0aWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUoZ3NzX2tyYjVfZW5jdHlwZXNbaV0pKVxcbm5ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jLTU3LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmM9MTIyPWdzc19pbXBvcnRfdjJfY29udGV4dChjb25zdCB2b2lkICpwLCBjb25zdCB2b2lkICplbmQsIHN0cnVjdCBrcmI1X2N0eCAqY3R4LFxcbi0tXFxubmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMtMTQ2LVxcdFxcdGdvdG8gb3V0X2VycjtcXG5uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYzoxNDc6XFx0Y3R4LVxcdTAwM2VrcmI1ZSA9IGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZShjdHgtXFx1MDAzZWVuY3R5cGUpO1xcbm5ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jLTE0OC1cXHRpZiAoIWN0eC1cXHUwMDNla3JiNWUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NDk6NTUuMzE5Njc2NDMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyMTM1NTQyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gU2NvcGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIHN5bWJvbHM6IGBDT05GSUdfQUZfUlhSUENgLCBgQ09ORklHX0FGU19GU2AsIGBDT05GSUdfUlhHS2AsIGFuZCBgQ09ORklHX1JYUEVSRmAuIFRoZSBpbW1lZGlhdGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcywgcGFydGljdWxhcmx5IGNvbmNlcm5pbmcgYENSWVBUT19LUkI1YC4gSXQgc2VlbXMgYm90aCBgUlhHS2AgYW5kIGBBRlNfRlNgIGRlcGVuZCBvbiBhbmQgc2VsZWN0IGBDUllQVE9fS1JCNWAsIHdoaWNoIGlzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgZGVwZW5kZW5jaWVzIG9mIGBBRl9SWFJQQ2AgYW5kIGBBRlNfRlNgLCBJIHNlZSB0aGF0IGBBRl9SWFJQQ2AgcmVxdWlyZXMgYElORVRgLiBgQUZTX0ZTYCBpcyBkZXBlbmRlbnQgb24gYElORVRgIGFuZCBhbHNvIHNlbGVjdHMgYEFGX1JYUlBDYCwgYEROU19SRVNPTFZFUmAsIGBORVRGU19TVVBQT1JUYCwgYW5kLCBpbXBvcnRhbnRseSwgYENSWVBUT19LUkI1YC4gVGhpcyBpcyB1c2VmdWwgY29udGV4dC5cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGVzZSBjb25maWd1cmF0aW9ucyBtYW5pZmVzdCBpbiB0aGUgY29kZWJhc2UuIEknbSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucywgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZWlyIHJvbGVzOlxuXG4xLiAgYGZzL2Fmcy9jbV9zZWN1cml0eS5jYDogYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCAtIFNlY3VyaXR5LCBsaWtlbHkgQUZTLXNwZWNpZmljLlxuMi4gIGBmcy9hZnMvaW50ZXJuYWwuaGA6IGBhZnNfbWFrZV9vcF9jYWxsYCAtIEFGUywgaW50ZXJuYWwgZnVuY3Rpb24gY2FsbC5cbjMuICBgZnMvYWZzL3J4cnBjLmNgOiBgYWZzX21ha2VfY2FsbGAsIGBhZnNfc2VuZF9lbXB0eV9yZXBseWAsIGBhZnNfc2VuZF9zaW1wbGVfcmVwbHlgIC0gUlhSUEMvQUZTIGludGVyYWN0aW9uLlxuNC4gIGBuZXQvcnhycGMvY2FsbF9zdGF0ZS5jYDogYHJ4cnBjX25vdGlmeV9zb2NrZXRgLCBgcnhycGNfc2V0X2NhbGxfY29tcGxldGlvbmAgLSBSWFJQQyBjYWxsIG1hbmFnZW1lbnQuXG41LiAgYG5ldC9yeHJwYy9jb25uX29iamVjdC5jYDogYHJ4cnBjX3Bva2VfY29ubmAgLSBSWFJQQyBjb25uZWN0aW9uIG1haW50ZW5hbmNlLlxuNi4gIGBuZXQvcnhycGMva2V5LmNgOiBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYCAtIFJYUlBDL1lGUy9SeEdLIGtleSBwYXJzaW5nLlxuNy4gIGBuZXQvcnhycGMvcmVjdm1zZy5jYDogYHJ4cnBjX3JlcXVldWVfY2FsbGAsIGByeHJwY19yZWN2bXNnYCAtIFJYUlBDIG1lc3NhZ2UgaGFuZGxpbmcuXG44LiAgYG5ldC9yeHJwYy9yeGdrLmNgOiBgcnhna19pbml0X2Nvbm5lY3Rpb25fc2VjdXJpdHlgIC0gUlhHSyBzZWN1cml0eSBpbml0aWFsaXphdGlvbi5cbjkuICBgbmV0L3J4cnBjL3J4cGVyZi5jYDogYHJ4cGVyZl9wcm9jZXNzX2NhbGxgIC0gUlhQRVJGIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcuXG4xMC4gYG5ldC9yeHJwYy9zZW5kbXNnLmNgOiBgcnhycGNfc2VuZF9kYXRhYCwgYHJ4cnBjX2RvX3NlbmRtc2dgLCBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAgLSBSWFJQQyBtZXNzYWdlIHNlbmRpbmcuXG5cbk5vdywgSSdtIGNoZWNraW5nIHRoZSBtb3N0IHVzZWZ1bCBzeW1ib2xzLCB0aGUgb25lcyBJIGNhbGwgXCJnb29kIEZvY3VzU3ltYm9sc1wiLiBJJ3ZlIGNvbXBpbGVkIGEgbGlzdCBvZiBzeW1ib2xzIGJhc2VkIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGNoYW5nZWQgYW5kIG1hcmtlZCB0aGVtIGZvciBjbG9zZXIgaW5zcGVjdGlvbjpcbi0gYHJ4cnBjX3NlbmRfZGF0YWBcbi0gYHJ4cnBjX2RvX3NlbmRtc2dgXG4tIGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYFxuLSBgcnhycGNfcmVjdm1zZ2Bcbi0gYHJ4cnBjX25vdGlmeV9zb2NrZXRgXG4tIGByeHJwY19wb2tlX2Nvbm5gXG4tIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgXG4tIGByeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eWBcbi0gYGFmc19tYWtlX2NhbGxgXG4tIGBhZnNfc2VuZF9zaW1wbGVfcmVwbHlgXG4tIGBhZnNfc2VuZF9lbXB0eV9yZXBseWBcbi0gYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYFxuLSBgcnhwZXJmX3Byb2Nlc3NfY2FsbGBcblxuVGhlIGNydWNpYWwgdGVzdCBub3cgaXMgdWJpcXVpdHkuIEFyZSBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zICpldmVyeXdoZXJlKiBpbiB0aGUga2VybmVsLCBvciBhcmUgdGhleSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgc3Vic3lzdGVtPyBJIHNlZSB0aGF0IGFsbCBvZiB0aGVtIGFyZSByZWxhdGVkIHRvIFJ4UlBDLCBBRlMsIFJ4R0ssIG9yIFJ4UGVyZi4gVGhpcyBtZWFucyB0aGV5IGFyZSBsb2NhbGl6ZWQuXG5cblRvIGJlIHRob3JvdWdoLCBJIGhhdmUgdG8gZW5zdXJlIGFsbCByZXF1aXJlZCBjb25maWdzIGFyZSBwcmVzZW50OiBgQUZfUlhSUENgLCBgQUZTX0ZTYCwgYFJYR0tgLCBhbmQgYFJYUEVSRmAgYXJlIGVzc2VudGlhbCwgZ2l2ZW4gd2hhdCBJJ3ZlIGZvdW5kLlxuXG5GaW5hbGx5LCBJJ20gZG91YmxlLWNoZWNraW5nIHRoZSBjb2RlIHRvIHNlZSB3aGF0IGd1YXJkcyBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYC4gSXQgc2VlbXMsIGZyb20gbG9va2luZyBhdCBgbmV0L3J4cnBjL2tleS5jYCwgdGhhdCBgI2lmZGVmIENPTkZJR19SWEdLYCBtYXkgYmUgcHJlc2VudCwgb3IgaXQgbWF5IGFsd2F5cyBiZSBjb21waWxlZCBpbi4gSXQgZGVwZW5kcyBvbiBob3cgaXQgaXMgZ3VhcmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2OTAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MDIuNTMzMjMyODY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzcwMTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3J4cnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcnhycGMva2V5LmM9MTM3PXN0YXRpYyB0aW1lNjRfdCByeHJwY19zNjRfdG9fdGltZTY0KHM2NCB0aW1lX2luXzEwMG5zKVxcbi0tXFxubmV0L3J4cnBjL2tleS5jLTE2NC0gKi9cXG5uZXQvcnhycGMva2V5LmM6MTY1OnN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXFxubmV0L3J4cnBjL2tleS5jLTE2Ni1cXHRcXHRcXHRcXHQgICAgICAgc2l6ZV90IGRhdGFsZW4sXFxuLS1cXG5uZXQvcnhycGMva2V5LmM9MzAwPXN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuLS1cXG5uZXQvcnhycGMva2V5LmMtMzk1LVxcdFxcdGNhc2UgUlhSUENfU0VDVVJJVFlfWUZTX1JYR0s6XFxubmV0L3J4cnBjL2tleS5jOjM5NjpcXHRcXHRcXHRyZXQyID0gcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHByZXAsIGRhdGFsZW4sIHRva2VuLCB0b2tsZW4pO1xcbm5ldC9yeHJwYy9rZXkuYy0zOTctXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjUwOjAyLjYyNjk0MjI2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjkyNDcyMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZz10cnVlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGxvb2tpbmcgYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCBJIHNlZSB0aGF0IGBrZXkuY2AsIGByeGdrLmNgLCBgcnhwZXJmLmNgLCBhbmQgdGhlIGVudGlyZSBgYWZzL2AgZGlyZWN0b3J5IGFyZSBjb21waWxlZCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zOiBgQ09ORklHX0FGX1JYUlBDYCwgYENPTkZJR19SWEdLYCwgYENPTkZJR19SWFBFUkZgLCBhbmQgYENPTkZJR19BRlNfRlNgLCByZXNwZWN0aXZlbHkuIE5hdHVyYWxseSwgSSB3YW50IHRvIHZlcmlmeSB3aGljaCBjb25maWdzIGFyZSBhdCBwbGF5IGhlcmUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBBRl9SWFJQQ2AsIGBBRlNfRlNgLCBgUlhHS2AsIGFuZCBgUlhQRVJGYC4gVGhlIHViaXF1aXRvdXMgYElORVRgIGRlcGVuZGVuY3kgaXMgaW1wbGljaXRseSB0aGVyZSwgYXMgYEFGX1JYUlBDYCBhbmQgYEFGU19GU2AgcmVseSBvbiBpdC4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYFJYR0tgIGlzIG5lc3RlZCB1bmRlciBgQUZfUlhSUENgLCBhbmQgYFJYUEVSRmAgaGFzIGl0cyBvd24gY29uZmlndXJhdGlvbiBlbnRyeSBpbiB0aGUgYG5ldC9yeHJwYy9LY29uZmlnYCBmaWxlLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBzaG91bGQgYFdvcnRoRnV6emluZ2AgYmUgc2V0IHRvIHRydWU/IEFic29sdXRlbHksIHllcy4gVGhlIHBhdGNoIHNlcmllcyBkaXZlcyBkZWVwIGludG8gY29yZSBSeFJQQyBzZW5kL3JlY2VpdmUvY29tcGxldGlvbiBsb2dpYywgd2hpY2ggaW5jbHVkZXMgUnhHSyBzZWN1cml0eSBjb250ZXh0IGhhbmRsaW5nLCBjb25uZWN0aW9uIHBva2luZywga2V5IHBhcnNpbmcgZm9yIFJ4R0ssIGFuZCBBRlMgY2xpZW50IHNlbmQvcmVwbHkgcGF0aHMuXG5cbkhlcmUncyB0aGUgcmF0aW9uYWxlOiB0aGUgbW9kaWZpY2F0aW9ucyBpbXBhY3Qga2V5IGRhdGEgdHJhbnNtaXNzaW9uIGZ1bmN0aW9ucyBsaWtlIGByeHJwY19zZW5kX2RhdGFgLCBub3RpZmljYXRpb24gcm91dGluZXMgbGlrZSBgcnhycGNfbm90aWZ5X3NvY2tldGAgYW5kIGByeHJwY19yZXF1ZXVlX2NhbGxgLCB0aGUgcGFyc2luZyBvZiBrZXlzIHdpdGhpbiBgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrYCwgY29ubmVjdGlvbiBtYW5hZ2VtZW50IHRocm91Z2ggYHJ4cnBjX3Bva2VfY29ubmAsIGFuZCwgY3J1Y2lhbGx5LCBBRlMgY2xpZW50IGNhbGxzIHZpYSBgYWZzX21ha2VfY2FsbGAgYW5kIGBhZnNfc2VuZF9zaW1wbGVfcmVwbHlgLlxuXG5UaGUga2V5IGhlcmUgaXMgdGhhdCBhbGwgdGhlc2UgbW9kaWZpZWQgcGF0aHMgYXJlIGRpcmVjdGx5IGV4cG9zZWQgYW5kIGVhc2lseSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG1ldGhvZHMuIFdlIGNhbiBnZXQgdG8gdGhlbSB0aHJvdWdoIEFGX1JYUlBDIHNvY2tldCBvcGVyYXRpb25zLCB0aGUgYGFkZF9rZXlgIHN5c2NhbGwsIGFuZCBzdGFuZGFyZCBBRlMgZmlsZXN5c3RlbSBpbnRlcmFjdGlvbnMgd2l0aGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBsZXZlbCBvZiB1c2VyLXNwYWNlIGFjY2Vzc2liaWxpdHkgbWFrZXMgdGhpcyBjb2RlIGFuIGV4Y2VsbGVudCB0YXJnZXQgZm9yIGZ1enppbmcuIFRodXMsIEknbGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAgYW5kIGludm9rZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTgwMCwiT3V0cHV0VG9rZW5zIjoyNjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MDcuOTE5NDIwNDE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMjE2NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJSWEdLXCIsXG4gICAgXCJSWFBFUkZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyeHJwY19zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX2RvX3NlbmRtc2dcIixcbiAgICBcInJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX3JlY3Ztc2dcIixcbiAgICBcInJ4cnBjX25vdGlmeV9zb2NrZXRcIixcbiAgICBcInJ4cnBjX3Bva2VfY29ublwiLFxuICAgIFwicnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrXCIsXG4gICAgXCJyeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eVwiLFxuICAgIFwiYWZzX21ha2VfY2FsbFwiLFxuICAgIFwiYWZzX3NlbmRfc2ltcGxlX3JlcGx5XCIsXG4gICAgXCJhZnNfc2VuZF9lbXB0eV9yZXBseVwiLFxuICAgIFwiYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5cIixcbiAgICBcInJ4cGVyZl9wcm9jZXNzX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBzb2NrZXQgZGF0YSBzZW5kaW5nIGFuZCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLCBjb25uZWN0aW9uIHJlZmVyZW5jZSBjb3VudGluZywga2V5IHBheWxvYWQgcGFyc2luZywgYW5kIGluLWtlcm5lbCBBRlMvcnhwZXJmIHNlbmQgcGF0aHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZXMgYW5kIGVycm9yLWhhbmRsaW5nIHBhdGhzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQUZfUlhSUEMgc29ja2V0cywga2V5cyBzeXNjYWxscywgYW5kIEFGUyBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRl9SWFJQQ1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJSWEdLXCIsXG4gICAgXCJSWFBFUkZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyeHJwY19zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX2RvX3NlbmRtc2dcIixcbiAgICBcInJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFcIixcbiAgICBcInJ4cnBjX3JlY3Ztc2dcIixcbiAgICBcInJ4cnBjX25vdGlmeV9zb2NrZXRcIixcbiAgICBcInJ4cnBjX3Bva2VfY29ublwiLFxuICAgIFwicnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrXCIsXG4gICAgXCJyeGdrX2luaXRfY29ubmVjdGlvbl9zZWN1cml0eVwiLFxuICAgIFwiYWZzX21ha2VfY2FsbFwiLFxuICAgIFwiYWZzX3NlbmRfc2ltcGxlX3JlcGx5XCIsXG4gICAgXCJhZnNfc2VuZF9lbXB0eV9yZXBseVwiLFxuICAgIFwiYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5cIixcbiAgICBcInJ4cGVyZl9wcm9jZXNzX2NhbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBSeFJQQyBzb2NrZXQgZGF0YSBzZW5kaW5nIGFuZCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLCBjb25uZWN0aW9uIHJlZmVyZW5jZSBjb3VudGluZywga2V5IHBheWxvYWQgcGFyc2luZywgYW5kIGluLWtlcm5lbCBBRlMvcnhwZXJmIHNlbmQgcGF0aHMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGZpbGVzeXN0ZW0gc3RhdGUgbWFjaGluZXMgYW5kIGVycm9yLWhhbmRsaW5nIHBhdGhzIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSB2aWEgQUZfUlhSUEMgc29ja2V0cywga2V5cyBzeXNjYWxscywgYW5kIEFGUyBvcGVyYXRpb25zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MDguMDQwNjQ1MDg2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE0ODg1NTExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjUwOjA4LjA0MTI2MDQzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0MTQ4MjMyNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEFGX1JYUlBDIGFuZCBBRlMgbmV0d29ya2luZyBjb2RlIHRvIHN1cHBvcnQgc2hvcnQgd3JpdGVzIGluIHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEsIGxvb3AgdW50aWwgZnVsbCBtZXNzYWdlIGNvbnN1bXB0aW9uIGluIEFGUy9yeHBlcmYgY2FsbGVycywgc2ltcGxpZnkgbG9ja2luZyBhcm91bmQgcnhycGNfc2VuZF9kYXRhLCBmaXggdGhlIHRva3NpemUgY2FsY3VsYXRpb24gZm9yIFlGUyBDTSB0b2tlbnMsIGFkZCBlbmNyeXB0aW9uIHR5cGUgdmFsaWRhdGlvbiBmb3IgWUZTIGtleXMsIGFuZCBjbGVhbiB1cCBzb2NrZXQgbm90aWZpY2F0aW9uIGFuZCBjb25uZWN0aW9uIHJlZmNvdW50aW5nLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcXG4tIFRoZSB0b2tlbiBidWZmZXIgaW4gYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHplcm9pbmcgYWxsIGJ5dGVzOyB0aGUgZml4IG1lcmVseSBhY2NvdW50cyBmb3IgdGhlIDQtYnl0ZSBgbGV2ZWxgIGZpZWxkIGluIGB0b2tzaXplYC5cXG4tIEluIGByeHJwY19zZW5kX2RhdGFgLCBkYXRhIHRyYW5zZmVyIGNvbnRpbnVlcyB0byB1c2UgYGNvcHlfZnJvbV9pdGVyX2Z1bGxgIHdpdGggYm91bmRlZCBjb3B5IHNpemVzIChgbWluM2ApLCBhbmQgZXJyb3ItcmV3aW5kIGxvZ2ljIHVwZGF0ZXMgYnl0ZSBjb3VudGVycyBhcHByb3ByaWF0ZWx5Llxcbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxcbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuXFxuXFxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2QzYWZmMjMzNzY5MDgxNjkzZWRhODg5YjU4YWEzMjAzYTYyODkyZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTQ6NDk6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnJzdFxuaW5kZXggODkyNmRhYjhlMmU2MC4uN2RmNmFmZjc2NDRjMCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RcbkBAIC04NzksMTQgKzg3OSwyMSBAQCBUaGUga2VybmVsIGludGVyZmFjZSBmdW5jdGlvbnMgYXJlIGFzIGZvbGxvd3M6XG4gICAgICBleGNsdXNpdmVseSB0byBpbi1rZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMuICBtc2cubXNnX2ZsYWdzIG1heSBiZSBnaXZlblxuICAgICAgTVNHX01PUkUgaWYgdGhlcmUgd2lsbCBiZSBzdWJzZXF1ZW50IGRhdGEgc2VuZHMgZm9yIHRoaXMgY2FsbC5cbiBcbi0gICAgIFRoZSBtc2cgbXVzdCBub3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGNvbnRyb2wgZGF0YSBvciBhbnkgZmxhZ3Ncbi0gICAgIG90aGVyIHRoYW4gTVNHX01PUkUuICBsZW4gaXMgdGhlIHRvdGFsIGFtb3VudCBvZiBkYXRhIHRvIHRyYW5zbWl0LlxuKyAgICAgbXNnIG11c3Qgbm90IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBhZGRyZXNzLCBjb250cm9sIGRhdGEgb3IgYW55IGZsYWdzXG4rICAgICBvdGhlciB0aGFuIE1TR19NT1JFLiAgbGVuIGlzIHRoZSBhbW91bnQgb2YgZGF0YSB0byBhZGQgdG8gdGhlXG4rICAgICB0cmFuc21pc3Npb24uICBUaGUgbGFzdC1wYWNrZXQgZmxhZyB3aWxsIG9ubHkgYmUgc2V0IG9uIHRoZSBvdXRnb2luZ1xuKyAgICAgcGFja2V0IGlmIE1TR19NT1JFIGlzIG5vdCBzZXQgYW5kIGxlbiBhbW91bnQgb2YgYnl0ZXMgYXJlIGJ1ZmZlcmVkLlxuIFxuICAgICAgbm90aWZ5X2VuZF9yeCBjYW4gYmUgTlVMTCBvciBpdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZnVuY3Rpb24gdG8gYmVcbiAgICAgIGNhbGxlZCB3aGVuIHRoZSBjYWxsIGNoYW5nZXMgc3RhdGUgdG8gZW5kIHRoZSBUeCBwaGFzZS4gIFRoaXMgZnVuY3Rpb24gaXNcbiAgICAgIGNhbGxlZCB3aXRoIGEgc3BpbmxvY2sgaGVsZCB0byBwcmV2ZW50IHRoZSBsYXN0IERBVEEgcGFja2V0IGZyb20gYmVpbmdcbiAgICAgIHRyYW5zbWl0dGVkIHVudGlsIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxuIFxuKyAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIG9yIGFuIGVycm9yLiAgSXQgd2lsbFxuKyAgICAgcmV0dXJuIHplcm8gb25seSBpZiBsZW4gaXMgMCBvciBpZiBtc2ctXHUwMDNlbXNnX2l0ZXIgaXMgZW1wdHkuICBJdCBtYXkgYWxzb1xuKyAgICAgbWFrZSBhIHNob3J0IHdyaXRlLCBidWZmZXJpbmcgbGVzcyB0aGFuIHRoZSBhbW91bnQgb2YgZGF0YSBwcm92aWRlZCBvciB0aGVcbisgICAgIGxlbiBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJlIGNhbGxlZCBhZ2Fpbi5cbitcbiAgKCMpIFJlY2VpdmUgZGF0YSBmcm9tIGEgY2FsbDo6XG4gXG4gXHRpbnQgcnhycGNfa2VybmVsX3JlY3ZfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jbV9zZWN1cml0eS5jIGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbmluZGV4IDEwMzE2OGM3MGRkNGQuLjVlZWVlZjc2MWNmMzEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvY21fc2VjdXJpdHkuY1xuKysrIGIvZnMvYWZzL2NtX3NlY3VyaXR5LmNcbkBAIC0yMzUsNyArMjM1LDcgQEAgc3RhdGljIGludCBhZnNfY3JlYXRlX3lmc19jbV90b2tlbihzdHJ1Y3Qgc2tfYnVmZiAqY2hhbGxlbmdlLFxuIFx0ICpcdHN0cnVjdCBSWEdLX0F1dGhOYW1lXHRpZGVudGl0aWVzXHUwMDNjXHUwMDNlO1xuIFx0ICogfTtcbiBcdCAqL1xuLVx0dG9rc2l6ZSA9IGtleXNpemUgKyA4ICsgNCArIDQgKyA4ICsgeGRyX2xlbl9vYmplY3QoYXV0aHNpemUpO1xuK1x0dG9rc2l6ZSA9IGtleXNpemUgKyA0ICsgOCArIDQgKyA0ICsgOCArIHhkcl9sZW5fb2JqZWN0KGF1dGhzaXplKTtcbiBcbiBcdG9mZnNldCA9IDA7XG4gXHRlbmNzaXplID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKHRva2VuX2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLCB0b2tzaXplLCBcdTAwMjZvZmZzZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjY1YTA4NjZjZDhiODUgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xNDE2LDIyICsxNDE2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGFmc19zZWVfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGVudW0gYWZzX2NhbGxfdHJhY2Ugd2h5KVxuIFx0XHQgICAgICAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGFmc19tYWtlX29wX2NhbGwoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLCBzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsXG4tXHRcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuLXtcbi1cdHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCA9IG9wLVx1MDAzZWVzdGF0ZS1cdTAwM2VhZGRyZXNzZXM7XG4tXG4tXHRvcC1cdTAwM2VjYWxsXHQ9IGFmc19nZXRfY2FsbChjYWxsLCBhZnNfY2FsbF90cmFjZV9nZXQpO1xuLVx0b3AtXHUwMDNldHlwZVx0PSBjYWxsLVx1MDAzZXR5cGU7XG4tXHRjYWxsLVx1MDAzZW9wXHQ9IG9wO1xuLVx0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuLVx0Y2FsbC1cdTAwM2VpbnRyXHQ9ICEob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcbi1cdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4tXHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbi1cdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcbi1cdGFmc19wdXRfY2FsbChjYWxsKTtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIGFmc19leHRyYWN0X2JlZ2luKHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbiB7XG4gXHRjYWxsLVx1MDAzZWlvdl9sZW4gPSBzaXplO1xuQEAgLTE3NjMsNiArMTc0NywyMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqQUZTX1ZOT0RFX1RPX0koc3RydWN0IGFmc192bm9kZSAqdm5vZGUpXG4gXHRyZXR1cm4gXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfbWFrZV9vcF9jYWxsKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCwgc3RydWN0IGFmc19jYWxsICpjYWxsLFxuK1x0XHRcdFx0ICAgIGdmcF90IGdmcClcbit7XG4rXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWxpc3QgPSBvcC1cdTAwM2Vlc3RhdGUtXHUwMDNlYWRkcmVzc2VzO1xuK1xuK1x0b3AtXHUwMDNlY2FsbFx0PSBhZnNfZ2V0X2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfZ2V0KTtcbitcdG9wLVx1MDAzZXR5cGVcdD0gY2FsbC1cdTAwM2V0eXBlO1xuK1x0Y2FsbC1cdTAwM2VvcFx0PSBvcDtcbitcdGNhbGwtXHUwMDNlc2VydmVyXHQ9IGFmc191c2Vfc2VydmVyKG9wLVx1MDAzZXNlcnZlciwgZmFsc2UsIGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwpO1xuK1x0Y2FsbC1cdTAwM2VrZXlcdD0gb3AtXHUwMDNla2V5O1xuK1x0Y2FsbC1cdTAwM2VpbnRyXHQ9ICEob3AtXHUwMDNlZmxhZ3MgXHUwMDI2IEFGU19PUEVSQVRJT05fVU5JTlRSKTtcbitcdGNhbGwtXHUwMDNlcGVlclx0PSByeHJwY19rZXJuZWxfZ2V0X3BlZXIoYWxpc3QtXHUwMDNlYWRkcnNbb3AtXHUwMDNlYWRkcl9pbmRleF0ucGVlcik7XG4rXHRjYWxsLVx1MDAzZXNlcnZpY2VfaWQgPSBvcC1cdTAwM2VzZXJ2ZXItXHUwMDNlc2VydmljZV9pZDtcbitcdGFmc19tYWtlX2NhbGwoY2FsbCwgZ2ZwKTtcbitcdGFmc19wdXRfY2FsbChjYWxsKTtcbit9XG4rXG4gLypcbiAgKiBOb3RlIHRoYXQgYSBkZW50cnkgZ290IGNoYW5nZWQuICBXZSBuZWVkIHRvIHNldCBkX2ZzZGF0YSB0byB0aGUgZGF0YSB2ZXJzaW9uXG4gICogbnVtYmVyIGRlcml2ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uICBJdCBkb2Vzbid0IG1hdHRlciBpZlxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9yeHJwYy5jIGIvZnMvYWZzL3J4cnBjLmNcbmluZGV4IGQ4MjkxNjY1N2EzZGQuLjFmNWI2YWE2ODk0MzMgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvcnhycGMuY1xuKysrIGIvZnMvYWZzL3J4cnBjLmNcbkBAIC00MTIsMjYgKzQxMiwzMiBAQCB2b2lkIGFmc19tYWtlX2NhbGwoc3RydWN0IGFmc19jYWxsICpjYWxsLCBnZnBfdCBnZnApXG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbiBcdG1zZy5tc2dfZmxhZ3NcdFx0PSBNU0dfV0FJVEFMTCB8IChjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPyBNU0dfTU9SRSA6IDApO1xuIFxuLVx0cmV0ID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIHJ4Y2FsbCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2bXNnLCBjYWxsLVx1MDAzZXJlcXVlc3Rfc2l6ZSxcbi1cdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVxdWVzdF90eCk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycm9yX2RvX2Fib3J0O1xuK1x0ZG8ge1xuK1x0XHRyZXQgPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKGNhbGwtXHUwMDNlbmV0LVx1MDAzZXNvY2tldCwgcnhjYWxsLCBcdTAwMjZtc2csXG4rXHRcdFx0XHRcdCAgICAgbXNnX2RhdGFfbGVmdChcdTAwMjZtc2cpLFxuK1x0XHRcdFx0XHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XG4rXHR9IHdoaWxlIChtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZykgXHUwMDNlIDApO1xuIFxuIFx0aWYgKGNhbGwtXHUwMDNld3JpdGVfaXRlcikge1xuIFx0XHRtc2cubXNnX2l0ZXIgPSAqY2FsbC1cdTAwM2V3cml0ZV9pdGVyO1xuIFx0XHRtc2cubXNnX2ZsYWdzIFx1MDAyNj0gfk1TR19NT1JFO1xuIFx0XHR0cmFjZV9hZnNfc2VuZF9kYXRhKGNhbGwsIFx1MDAyNm1zZyk7XG4gXG4tXHRcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LFxuLVx0XHRcdFx0XHQgICAgIGNhbGwtXHUwMDNlcnhjYWxsLCBcdTAwMjZtc2csXG4tXHRcdFx0XHRcdCAgICAgaW92X2l0ZXJfY291bnQoXHUwMDI2bXNnLm1zZ19pdGVyKSxcbi1cdFx0XHRcdFx0ICAgICBhZnNfbm90aWZ5X2VuZF9yZXF1ZXN0X3R4KTtcbitcdFx0ZG8ge1xuK1x0XHRcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LFxuK1x0XHRcdFx0XHRcdCAgICAgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZyxcbitcdFx0XHRcdFx0XHQgICAgIG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSxcbitcdFx0XHRcdFx0XHQgICAgIGFmc19ub3RpZnlfZW5kX3JlcXVlc3RfdHgpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXHUwMDI2bXNnLCByZXQpO1xuK1x0XHRcdFx0Z290byBlcnJvcl9kb19hYm9ydDtcbitcdFx0XHR9XG4rXHRcdH0gd2hpbGUgKG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMCk7XG4gXHRcdCpjYWxsLVx1MDAzZXdyaXRlX2l0ZXIgPSBtc2cubXNnX2l0ZXI7XG4gXG4tXHRcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXHUwMDI2bXNnLCByZXQpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyb3JfZG9fYWJvcnQ7XG4rXHRcdHRyYWNlX2Fmc19zZW50X2RhdGEoY2FsbCwgXHUwMDI2bXNnLCAwKTtcbiBcdH1cbiBcbiBcdC8qIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCB3ZSBtYXkgaGF2ZSByZWNlaXZlZCB0aGUgcmVwbHkgb3IgYW4gYWJvcnRcbkBAIC00NDMsMTAgKzQ0OSw4IEBAIHZvaWQgYWZzX21ha2VfY2FsbChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwsIGdmcF90IGdmcClcbiBcdHJldHVybjtcbiBcbiBlcnJvcl9kb19hYm9ydDpcbi1cdGlmIChyZXQgIT0gLUVDT05OQUJPUlRFRClcbi1cdFx0cnhycGNfa2VybmVsX2Fib3J0X2NhbGwoY2FsbC1cdTAwM2VuZXQtXHUwMDNlc29ja2V0LCByeGNhbGwsXG4tXHRcdFx0XHRcdFJYX1VTRVJfQUJPUlQsIHJldCxcbi1cdFx0XHRcdFx0YWZzX2Fib3J0X3NlbmRfZGF0YV9lcnJvcik7XG4rXHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChjYWxsLVx1MDAzZW5ldC1cdTAwM2Vzb2NrZXQsIHJ4Y2FsbCxcbitcdFx0XHRcdFJYX1VTRVJfQUJPUlQsIHJldCwgYWZzX2Fib3J0X3NlbmRfZGF0YV9lcnJvcik7XG4gXHRpZiAoY2FsbC1cdTAwM2Vhc3luYykge1xuIFx0XHRhZnNfc2VlX2NhbGwoY2FsbCwgYWZzX2NhbGxfdHJhY2VfYXN5bmNfYWJvcnQpO1xuIFx0XHRyZXR1cm47XG5AQCAtODU5LDYgKzg2Myw3IEBAIHZvaWQgYWZzX3NlbmRfZW1wdHlfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuIHtcbiBcdHN0cnVjdCBhZnNfbmV0ICpuZXQgPSBjYWxsLVx1MDAzZW5ldDtcbiBcdHN0cnVjdCBtc2doZHIgbXNnO1xuK1x0aW50IHJldDtcbiBcbiBcdF9lbnRlcihcIlwiKTtcbiBcbkBAIC04NzEsMjIgKzg3NiwxMyBAQCB2b2lkIGFmc19zZW5kX2VtcHR5X3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbClcbiBcdG1zZy5tc2dfY29udHJvbGxlblx0PSAwO1xuIFx0bXNnLm1zZ19mbGFnc1x0XHQ9IDA7XG4gXG4tXHRzd2l0Y2ggKHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZywgMCxcbi1cdFx0XHRcdCAgICAgICBhZnNfbm90aWZ5X2VuZF9yZXBseV90eCkpIHtcbi1cdGNhc2UgMDpcbi1cdFx0X2xlYXZlKFwiIFtyZXBsaWVkXVwiKTtcbitcdHJldCA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZywgMCxcbitcdFx0XHRcdCAgICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDApIC8qIFNob3VsZG4ndCBidWZmZXIgbW9yZSB0aGFuIDAgYnl0ZXMuICovXG4gXHRcdHJldHVybjtcbiBcbi1cdGNhc2UgLUVOT01FTTpcbi1cdFx0X2RlYnVnKFwib29tXCIpO1xuLVx0XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbi1cdFx0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgLUVOT01FTSxcbi1cdFx0XHRcdFx0YWZzX2Fib3J0X29vbSk7XG4tXHRcdGZhbGx0aHJvdWdoO1xuLVx0ZGVmYXVsdDpcbi1cdFx0X2xlYXZlKFwiIFtlcnJvcl1cIik7XG4tXHRcdHJldHVybjtcbi1cdH1cbitcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuK1x0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgcmV0LCBhZnNfYWJvcnRfc2VuZF9lcnJvcik7XG4gfVxuIFxuIC8qXG5AQCAtOTEyLDIwICs5MDgsMjEgQEAgdm9pZCBhZnNfc2VuZF9zaW1wbGVfcmVwbHkoc3RydWN0IGFmc19jYWxsICpjYWxsLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pXG4gXHRtc2cubXNnX2NvbnRyb2xsZW5cdD0gMDtcbiBcdG1zZy5tc2dfZmxhZ3NcdFx0PSAwO1xuIFxuLVx0biA9IHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEobmV0LVx1MDAzZXNvY2tldCwgY2FsbC1cdTAwM2VyeGNhbGwsIFx1MDAyNm1zZywgbGVuLFxuLVx0XHRcdFx0ICAgYWZzX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuK1x0ZG8ge1xuK1x0XHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShuZXQtXHUwMDNlc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbitcdFx0XHRcdFx0ICAgXHUwMDI2bXNnLCBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZyksXG4rXHRcdFx0XHRcdCAgIGFmc19ub3RpZnlfZW5kX3JlcGx5X3R4KTtcbitcdH0gd2hpbGUgKG4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZykgXHUwMDNlIDApO1xuK1xuIFx0aWYgKG4gXHUwMDNlPSAwKSB7XG4gXHRcdC8qIFN1Y2Nlc3MgKi9cbiBcdFx0X2xlYXZlKFwiIFtyZXBsaWVkXVwiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWYgKG4gPT0gLUVOT01FTSkge1xuLVx0XHRfZGVidWcoXCJvb21cIik7XG4tXHRcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuLVx0XHRcdFx0XHRSWEdFTl9TU19NQVJTSEFMLCAtRU5PTUVNLFxuLVx0XHRcdFx0XHRhZnNfYWJvcnRfb29tKTtcbi1cdH1cbitcbitcdHJ4cnBjX2tlcm5lbF9hYm9ydF9jYWxsKG5ldC1cdTAwM2Vzb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuK1x0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgbiwgYWZzX2Fib3J0X3NlbmRfZXJyb3IpO1xuIFx0X2xlYXZlKFwiIFtlcnJvcl1cIik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Fmcy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbmluZGV4IDFiM2M0OGI1NTkxZGYuLjA0YjBiYjY4MmI4MTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9hZnMuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYWZzLmhcbkBAIC0xNDgsNiArMTQ4LDcgQEAgZW51bSB5ZnNfY21fb3BlcmF0aW9uIHtcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdW51c2Vfc2xpc3RfaXNvcnQsXHRcIlVOVSBpc29ydFwiKSBcXFxuIFx0RU0oYWZzX3NlcnZlcl90cmFjZV91cGRhdGUsXHRcdFwiVVBEQVRFICAgXCIpIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9ieV91dWlkLFx0XCJVU0UgdXVpZCBcIikgXFxcbitcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2NhbGwsXHRcdFwiVVNFIGNhbGwgXCIpIFxcXG4gXHRFTShhZnNfc2VydmVyX3RyYWNlX3VzZV9jbV9jYWxsLFx0XCJVU0UgY20tY2xcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dldF9jYXBzLFx0XCJVU0UgZ2NhcHNcIikgXFxcbiBcdEVNKGFmc19zZXJ2ZXJfdHJhY2VfdXNlX2dpdmVfdXBfY2IsXHRcIlVTRSBndnVwY1wiKSBcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3J4cnBjLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9yeHJwYy5oXG5pbmRleCA3MDRhMTBkZTY2NzAwLi41MmY4NzE4Y2Y3MjUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvcnhycGMuaFxuQEAgLTIwLDE2ICsyMCwxNiBAQFxuIFx0LyogQUZTIGVycm9ycyAqL1x0XHRcdFx0XHRcdFxcXG4gXHRFTShhZnNfYWJvcnRfZ2VuZXJhbF9lcnJvcixcdFx0XCJhZnMtZXJyb3JcIilcdFx0XFxcbiBcdEVNKGFmc19hYm9ydF9pbnRlcnJ1cHRlZCxcdFx0XCJhZnMtaW50clwiKVx0XHRcXFxuLVx0RU0oYWZzX2Fib3J0X29vbSxcdFx0XHRcImFmcy1vb21cIilcdFx0XFxcbiBcdEVNKGFmc19hYm9ydF9vcF9ub3Rfc3VwcG9ydGVkLFx0XHRcImFmcy1vcC1ub3RzdXBwXCIpXHRcXFxuIFx0RU0oYWZzX2Fib3J0X3Byb2JldXVpZF9uZWdhdGl2ZSxcdFwiYWZzLXByb2JldXVpZC1uZWdcIilcdFxcXG4gXHRFTShhZnNfYWJvcnRfc2VuZF9kYXRhX2Vycm9yLFx0XHRcImFmcy1zZW5kLWRhdGFcIilcdFxcXG4rXHRFTShhZnNfYWJvcnRfc2VuZF9lcnJvcixcdFx0XCJhZnMtc2VuZC1lcnJvclwiKVx0XFxcbiBcdEVNKGFmc19hYm9ydF91bm1hcnNoYWxfZXJyb3IsXHRcdFwiYWZzLXVubWFyc2hhbFwiKVx0XFxcbiBcdEVNKGFmc19hYm9ydF91bnN1cHBvcnRlZF9zZWNfY2xhc3MsXHRcImFmcy11bnN1cC1zZWMtY2xhc3NcIilcdFxcXG4gXHQvKiByeHBlcmYgZXJyb3JzICovXHRcdFx0XHRcdFx0XFxcbiBcdEVNKHJ4cGVyZl9hYm9ydF9nZW5lcmFsX2Vycm9yLFx0XHRcInJ4cGVyZi1lcnJvclwiKVx0XHRcXFxuLVx0RU0ocnhwZXJmX2Fib3J0X29vbSxcdFx0XHRcInJ4cGVyZi1vb21cIilcdFx0XFxcbiBcdEVNKHJ4cGVyZl9hYm9ydF9vcF9ub3Rfc3VwcG9ydGVkLFx0XCJyeHBlcmYtb3Atbm90c3VwcFwiKVx0XFxcbitcdEVNKHJ4cGVyZl9hYm9ydF9zZW5kX2Vycm9yLFx0XHRcInJ4cGVyZi1zZW5kLWVycm9yXCIpXHRcXFxuIFx0RU0ocnhwZXJmX2Fib3J0X3VubWFyc2hhbF9lcnJvcixcdFwicnhwZXJmLXVubWFyc2hhbFwiKVx0XFxcbiBcdC8qIFJ4S0FEIHNlY3VyaXR5IGVycm9ycyAqL1x0XHRcdFx0XHRcXFxuIFx0RU0ocnhrYWRfYWJvcnRfMV9zaG9ydF9jaGVjayxcdFx0XCJyeGthZDEtc2hvcnQtY2hlY2tcIilcdFxcXG5AQCAtMTQ4LDYgKzE0OCw3IEBAXG4gXHRFTShyeHJwY19lcHJvdG9fd3Jvbmdfc2VjdXJpdHksXHRcdFwid3Jvbmctc2VjXCIpXHRcdFxcXG4gXHRFTShyeHJwY19yZWN2bXNnX2V4Y2Vzc19kYXRhLFx0XHRcInJlY3Ztc2ctZXhjZXNzXCIpXHRcXFxuIFx0RU0ocnhycGNfcmVjdm1zZ19zaG9ydF9kYXRhLFx0XHRcInJlY3Ztc2ctc2hvcnRcIilcdFxcXG4rXHRFTShyeHJwY19zZW5kbXNnX3R4X2Vycm9yLFx0XHRcInR4LWVycm9yXCIpXHRcdFxcXG4gXHRFXyhyeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcdFx0XCJzZW5kbXNnLWxhdGVcIilcbiBcbiAjZGVmaW5lIHJ4cnBjX2NhbGxfcG9rZV90cmFjZXMgXFxcbkBAIC0zNDIsNiArMzQzLDcgQEBcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX2Rpc3RyaWJ1dGVfZXJyb3IsXHRcIlNFRSBkaXN0LWVyclwiKSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfaW5wdXQsXHRcdFwiU0VFIGlucHV0ICAgXCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9ub3RpZnlfcmVsZWFzZWQsXHRcIlNFRSBuZnktcmxzZFwiKSBcXFxuK1x0RU0ocnhycGNfY2FsbF9zZWVfbm90aWZ5X3NraXBwZWQsXHRcIlNFRSBuZnktc2tpcFwiKSBcXFxuIFx0RU0ocnhycGNfY2FsbF9zZWVfcmVjdm1zZyxcdFx0XCJTRUUgcmVjdm1zZyBcIikgXFxcbiBcdEVNKHJ4cnBjX2NhbGxfc2VlX3JlY3Ztc2dfcmVxdWV1ZSxcdFwiU0VFIHJlY3YtcnF1XCIpIFxcXG4gXHRFTShyeHJwY19jYWxsX3NlZV9yZWN2bXNnX3JlcXVldWVfZmlyc3QsIFwiU0VFIHJlY3YtcnFGXCIpIFxcXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWludGVybmFsLmggYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuaW5kZXggODY1ZjA1ZmUzN2FiOS4uY2IzNmE3MDlmNTQwZSAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9hci1pbnRlcm5hbC5oXG4rKysgYi9uZXQvcnhycGMvYXItaW50ZXJuYWwuaFxuQEAgLTY0Miw2ICs2NDIsNyBAQCBlbnVtIHJ4cnBjX2NhbGxfZmxhZyB7XG4gXHRSWFJQQ19DQUxMX1RYX0xBU1QsXHRcdC8qIExhc3QgcGFja2V0IGluIFR4IGJ1ZmZlciAoYXQgcnh0eF90b3ApICovXG4gXHRSWFJQQ19DQUxMX1RYX0FMTF9BQ0tFRCxcdC8qIExhc3QgcGFja2V0IGhhcyBiZWVuIGhhcmQtYWNrZWQgKi9cbiBcdFJYUlBDX0NBTExfVFhfTk9fTU9SRSxcdFx0LyogTm8gbW9yZSBkYXRhIHRvIHRyYW5zbWl0IChNU0dfTU9SRSBkZWFzc2VydGVkKSAqL1xuK1x0UlhSUENfQ0FMTF9UWF9FUlJPUixcdFx0LyogVGVybWluYWwgZXJyb3I7IGNhbGwgbmVlZHMgYWJvcnQgKi9cbiBcdFJYUlBDX0NBTExfU0VORF9QSU5HLFx0XHQvKiBBIHBpbmcgd2lsbCBuZWVkIHRvIGJlIHNlbnQgKi9cbiBcdFJYUlBDX0NBTExfUkVUUkFOU19USU1FT1VULFx0LyogUmV0cmFuc21pc3Npb24gZHVlIHRvIHRpbWVvdXQgb2NjdXJyZWQgKi9cbiBcdFJYUlBDX0NBTExfQkVHQU5fUlhfVElNRVIsXHQvKiBXZSBiZWdhbiB0aGUgZXhwZWN0X3J4X2J5IHRpbWVyICovXG5AQCAtMTEwOSw2ICsxMTEwLDcgQEAgc3RhdGljIGlubGluZSBib29sIHJ4cnBjX2lzX2NsaWVudF9jYWxsKGNvbnN0IHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIC8qXG4gICogY2FsbF9zdGF0ZS5jXG4gICovXG4rdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKTtcbiBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRcdFx0ICAgICAgIGVudW0gcnhycGNfY2FsbF9jb21wbGV0aW9uIGNvbXBsLFxuIFx0XHRcdCAgICAgICB1MzIgYWJvcnRfY29kZSxcbkBAIC0xNDQxLDcgKzE0NDMsNiBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHJ4cnBjX2xvY2FsX3NlcV9vcHM7XG4gLypcbiAgKiByZWN2bXNnLmNcbiAgKi9cbi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKik7XG4gaW50IHJ4cnBjX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICosIHNpemVfdCwgaW50KTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9jYWxsX3N0YXRlLmMgYi9uZXQvcnhycGMvY2FsbF9zdGF0ZS5jXG5pbmRleCA2YWZiNTQzNzNlYmJmLi4zNjQ4MTBjNjUyNzY2IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xuKysrIGIvbmV0L3J4cnBjL2NhbGxfc3RhdGUuY1xuQEAgLTcsNiArNyw2MCBAQFxuIFxuICNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4gXG4rLypcbisgKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuXG4rICovXG4rc3RhdGljIHZvaWQgX19yeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuK3tcbitcdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbitcdHN0cnVjdCBzb2NrICpzaztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRpZiAodGVzdF9iaXQoUlhSUENfQ0FMTF9SRUxFQVNFRCwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpIHtcbitcdFx0cnhycGNfc2VlX2NhbGwoY2FsbCwgcnhycGNfY2FsbF9zZWVfbm90aWZ5X3JlbGVhc2VkKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1xuK1x0cnggPSByY3VfZGVyZWZlcmVuY2UoY2FsbC1cdTAwM2Vzb2NrZXQpO1xuK1x0c2sgPSBcdTAwMjZyeC1cdTAwM2VzaztcbitcdGlmIChyeCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgXHUwMDNjIFJYUlBDX0NMT1NFKSB7XG4rXHRcdGlmIChjYWxsLVx1MDAzZW5vdGlmeV9yeCkge1xuK1x0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNhbGwtXHUwMDNlbm90aWZ5X2xvY2ssIGZsYWdzKTtcbitcdFx0XHRjYWxsLVx1MDAzZW5vdGlmeV9yeChzaywgY2FsbCwgY2FsbC1cdTAwM2V1c2VyX2NhbGxfSUQpO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y2FsbC1cdTAwM2Vub3RpZnlfbG9jaywgZmxhZ3MpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jaywgZmxhZ3MpO1xuK1x0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rKSkge1xuK1x0XHRcdFx0cnhycGNfZ2V0X2NhbGwoY2FsbCwgcnhycGNfY2FsbF9nZXRfbm90aWZ5X3NvY2tldCk7XG4rXHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpO1xuK1x0XHRcdH1cbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jaywgZmxhZ3MpO1xuK1xuK1x0XHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7XG4rXHRcdFx0XHRfZGVidWcoXCJjYWxsICVwc1wiLCBzay1cdTAwM2Vza19kYXRhX3JlYWR5KTtcbitcdFx0XHRcdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rfVxuK1xuKy8qXG4rICogUG9zdCBhIGNhbGwgZm9yIGF0dGVudGlvbiBieSB0aGUgc29ja2V0IG9yIGtlcm5lbCBzZXJ2aWNlLlxuKyAqL1xuK3ZvaWQgcnhycGNfbm90aWZ5X3NvY2tldChzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbClcbit7XG4rXHRpZiAocnhycGNfY2FsbF9pc19jb21wbGV0ZShjYWxsKSkge1xuK1x0XHRyeHJwY19zZWVfY2FsbChjYWxsLCByeHJwY19jYWxsX3NlZV9ub3RpZnlfc2tpcHBlZCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdF9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcbit9XG4rXG4gLypcbiAgKiBUcmFuc2l0aW9uIGEgY2FsbCB0byB0aGUgY29tcGxldGUgc3RhdGUuXG4gICovXG5AQCAtMjUsNyArNzksNyBAQCBib29sIHJ4cnBjX3NldF9jYWxsX2NvbXBsZXRpb24oc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwsXG4gXHRyeHJwY19zZXRfY2FsbF9zdGF0ZShjYWxsLCBSWFJQQ19DQUxMX0NPTVBMRVRFKTtcbiBcdHRyYWNlX3J4cnBjX2NhbGxfY29tcGxldGUoY2FsbCk7XG4gXHR3YWtlX3VwKFx1MDAyNmNhbGwtXHUwMDNld2FpdHEpO1xuLVx0cnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcbitcdF9fcnhycGNfbm90aWZ5X3NvY2tldChjYWxsKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMvY29ubl9vYmplY3QuYyBiL25ldC9yeHJwYy9jb25uX29iamVjdC5jXG5pbmRleCAwZWNlNzE3ZGIwZjg1Li4xYmU1MGUwYzljZWU1IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL2Nvbm5fb2JqZWN0LmNcbisrKyBiL25ldC9yeHJwYy9jb25uX29iamVjdC5jXG5AQCAtMzQsNyArMzQsMTAgQEAgdm9pZCByeHJwY19wb2tlX2Nvbm4oc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4sIGVudW0gcnhycGNfY29ubl90cmFjZSB3aHkpXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmxvY2FsLVx1MDAzZWxvY2spO1xuIFx0YnVzeSA9ICFsaXN0X2VtcHR5KFx1MDAyNmNvbm4tXHUwMDNlYXR0ZW5kX2xpbmspO1xuIFx0aWYgKCFidXN5KSB7XG4tXHRcdHJ4cnBjX2dldF9jb25uZWN0aW9uKGNvbm4sIHdoeSk7XG4rXHRcdGlmICghcnhycGNfZ2V0X2Nvbm5lY3Rpb25fbWF5YmUoY29ubiwgd2h5KSkge1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZsb2NhbC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZjb25uLVx1MDAzZWF0dGVuZF9saW5rLCBcdTAwMjZsb2NhbC1cdTAwM2Vjb25uX2F0dGVuZF9xKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZsb2NhbC1cdTAwM2Vsb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvcnhycGMva2V5LmMgYi9uZXQvcnhycGMva2V5LmNcbmluZGV4IGEwYWE3OGQ4OTI4OTcuLjMwZDZkYjA1MmMyMTYgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMva2V5LmNcbisrKyBiL25ldC9yeHJwYy9rZXkuY1xuQEAgLTE3Miw2ICsxNzIsNyBAQCBzdGF0aWMgaW50IHJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhnayhzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwLFxuIFx0Y29uc3QgX19iZTMyICp0aWNrZXQsICprZXk7XG4gXHRzNjQgdG1wO1xuIFx0c2l6ZV90IHJhd19rZXlsZW4sIHJhd190a3RsZW4sIGtleWxlbiwgdGt0bGVuO1xuK1x0aW50IHJldCA9IC1FS0VZUkVKRUNURUQ7XG4gXG4gXHRfZW50ZXIoXCIseyV4LCV4LCV4LCV4fSwleFwiLFxuIFx0ICAgICAgIG50b2hsKHhkclswXSksIG50b2hsKHhkclsxXSksIG50b2hsKHhkclsyXSksIG50b2hsKHhkclszXSksXG5AQCAtMjI5LDYgKzIzMCwxMSBAQCBzdGF0aWMgaW50IHJ4cnBjX3ByZXBhcnNlX3hkcl95ZnNfcnhnayhzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwLFxuIFx0dG9rZW4tXHUwMDNlcnhnay1cdTAwM2VrZXkuZGF0YVx0PSB0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZV9rZXk7XG4gXHR0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZXRpY2tldC5sZW4gPSByYXdfdGt0bGVuO1xuIFxuK1x0aWYgKCFjcnlwdG9fa3JiNV9maW5kX2VuY3R5cGUodG9rZW4tXHUwMDNlcnhnay1cdTAwM2VlbmN0eXBlKSkge1xuK1x0XHRyZXQgPSAtRU5PUEtHO1xuK1x0XHRnb3RvIHJlamVjdF90b2tlbjtcbitcdH1cbitcbiBcdGlmICh0b2tlbi1cdTAwM2VyeGdrLVx1MDAzZWVuZHRpbWUgIT0gMCkge1xuIFx0XHRleHBpcnkgPSByeHJwY19zNjRfdG9fdGltZTY0KHRva2VuLVx1MDAzZXJ4Z2stXHUwMDNlZW5kdGltZSk7XG4gXHRcdGlmIChleHBpcnkgXHUwMDNjIDApXG5AQCAtMjgwLDcgKzI4Niw3IEBAIHN0YXRpYyBpbnQgcnhycGNfcHJlcGFyc2VfeGRyX3lmc19yeGdrKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXAsXG4gXHRrZnJlZSh0b2tlbi1cdTAwM2VyeGdrKTtcbiBcdGtmcmVlKHRva2VuKTtcbiByZWplY3Q6XG4tXHRyZXR1cm4gLUVLRVlSRUpFQ1RFRDtcbitcdHJldHVybiByZXQ7XG4gZXhwaXJlZDpcbiBcdGtmcmVlKHRva2VuLVx1MDAzZXJ4Z2spO1xuIFx0a2ZyZWUodG9rZW4pO1xuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yZWN2bXNnLmMgYi9uZXQvcnhycGMvcmVjdm1zZy5jXG5pbmRleCBlZmNiYTRiMmU3NGYwLi4yOGIyMTQ4YjU2OTM2IDEwMDY0NFxuLS0tIGEvbmV0L3J4cnBjL3JlY3Ztc2cuY1xuKysrIGIvbmV0L3J4cnBjL3JlY3Ztc2cuY1xuQEAgLTE3LDEzICsxNywxMiBAQFxuICNpbmNsdWRlIFwiYXItaW50ZXJuYWwuaFwiXG4gXG4gLypcbi0gKiBQb3N0IGEgY2FsbCBmb3IgYXR0ZW50aW9uIGJ5IHRoZSBzb2NrZXQgb3Iga2VybmVsIHNlcnZpY2UuICBGdXJ0aGVyXG4tICogbm90aWZpY2F0aW9ucyBhcmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nIHJlY3Ztc2dfbGluayBvbiBhIGR1bW15IHF1ZXVlLlxuKyAqIFJlcXVldWUgYSBjYWxsIGZvciByZWN2bXNnKCkgdG8gcGljayB1cC5cbiAgKi9cbi12b2lkIHJ4cnBjX25vdGlmeV9zb2NrZXQoc3RydWN0IHJ4cnBjX2NhbGwgKmNhbGwpXG4rc3RhdGljIHZvaWQgcnhycGNfcmVxdWV1ZV9jYWxsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIHtcbi1cdHN0cnVjdCByeHJwY19zb2NrICpyeDtcbi1cdHN0cnVjdCBzb2NrICpzaztcbitcdHN0cnVjdCByeHJwY19zb2NrICpyeCA9IHJ4cnBjX3NrKHNvY2stXHUwMDNlc2spO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG4gXG4gXHRfZW50ZXIoXCIlZFwiLCBjYWxsLVx1MDAzZWRlYnVnX2lkKTtcbiBcbkBAIC0zMiwzMSArMzEsMTggQEAgdm9pZCByeHJwY19ub3RpZnlfc29ja2V0KHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXG4tXHRyeCA9IHJjdV9kZXJlZmVyZW5jZShjYWxsLVx1MDAzZXNvY2tldCk7XG4tXHRzayA9IFx1MDAyNnJ4LVx1MDAzZXNrO1xuLVx0aWYgKHJ4IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSBcdTAwM2MgUlhSUENfQ0xPU0UpIHtcbi1cdFx0aWYgKGNhbGwtXHUwMDNlbm90aWZ5X3J4KSB7XG4tXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrKTtcbi1cdFx0XHRjYWxsLVx1MDAzZW5vdGlmeV9yeChzaywgY2FsbCwgY2FsbC1cdTAwM2V1c2VyX2NhbGxfSUQpO1xuLVx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZjYWxsLVx1MDAzZW5vdGlmeV9sb2NrKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4tXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmspKSB7XG4tXHRcdFx0XHRyeHJwY19nZXRfY2FsbChjYWxsLCByeHJwY19jYWxsX2dldF9ub3RpZnlfc29ja2V0KTtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmssIFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfcSk7XG4tXHRcdFx0fVxuLVx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuK1x0c3Bpbl9sb2NrX2lycShcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX2xvY2spO1xuK1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2Y2FsbC1cdTAwM2VyZWN2bXNnX2xpbmspKSB7XG4rXHRcdHJ4cnBjX2dldF9jYWxsKGNhbGwsIHJ4cnBjX2NhbGxfZ2V0X25vdGlmeV9zb2NrZXQpO1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmNhbGwtXHUwMDNlcmVjdm1zZ19saW5rLCBcdTAwMjZyeC1cdTAwM2VyZWN2bXNnX3EpO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnJ4LVx1MDAzZXJlY3Ztc2dfbG9jayk7XG4gXG4tXHRcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHtcbi1cdFx0XHRcdF9kZWJ1ZyhcImNhbGwgJXBzXCIsIHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkpO1xuLVx0XHRcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4tXHRcdFx0fVxuLVx0XHR9XG4rXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkge1xuK1x0XHRfZGVidWcoXCJjYWxsICVwc1wiLCBzay1cdTAwM2Vza19kYXRhX3JlYWR5KTtcbitcdFx0c2stXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XG4gXHR9XG4gXG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdF9sZWF2ZShcIlwiKTtcbiB9XG4gXG5AQCAtNTYxLDcgKzU0Nyw3IEBAIGludCByeHJwY19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBNU0dfUEVFSykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZjYWxsLVx1MDAzZXJlY3Ztc2dfcXVldWUpKVxuLVx0XHRyeHJwY19ub3RpZnlfc29ja2V0KGNhbGwpO1xuK1x0XHRyeHJwY19yZXF1ZXVlX2NhbGwoc29jaywgY2FsbCk7XG4gXHRnb3RvIG5vdF95ZXRfY29tcGxldGU7XG4gXG4gY2FsbF9mYWlsZWQ6XG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3J4Z2suYyBiL25ldC9yeHJwYy9yeGdrLmNcbmluZGV4IDc3YTY3YWNlMWQyNDguLmI0OTIyMWY1N2Y2NzcgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvcnhnay5jXG4rKysgYi9uZXQvcnhycGMvcnhnay5jXG5AQCAtMjUxLDggKzI1MSwxMCBAQCBzdGF0aWMgaW50IHJ4Z2tfaW5pdF9jb25uZWN0aW9uX3NlY3VyaXR5KHN0cnVjdCByeHJwY19jb25uZWN0aW9uICpjb25uLFxuIFx0XHRcdFx0XHQgR0ZQX05PRlMpO1xuIFx0aWYgKElTX0VSUihnaykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGdrKTtcbitcdHdyaXRlX2xvY2soXHUwMDI2Y29ubi1cdTAwM2VzZWN1cml0eV91c2VfbG9jayk7XG4gXHRjb25uLVx1MDAzZXJ4Z2suZW5jdHlwZSA9IGdrLVx1MDAzZWtyYjUtXHUwMDNlZXR5cGU7XG4gXHRjb25uLVx1MDAzZXJ4Z2sua2V5c1tnay1cdTAwM2VrZXlfbnVtYmVyIFx1MDAyNiAzXSA9IGdrO1xuK1x0d3JpdGVfdW5sb2NrKFx1MDAyNmNvbm4tXHUwMDNlc2VjdXJpdHlfdXNlX2xvY2spO1xuIFxuIFx0c3dpdGNoIChjb25uLVx1MDAzZXNlY3VyaXR5X2xldmVsKSB7XG4gXHRjYXNlIFJYUlBDX1NFQ1VSSVRZX1BMQUlOOlxuZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9yeHBlcmYuYyBiL25ldC9yeHJwYy9yeHBlcmYuY1xuaW5kZXggYjhkZjZkMjIzMTRkNi4uZWJkNTQyMjJjNjRlZiAxMDA2NDRcbi0tLSBhL25ldC9yeHJwYy9yeHBlcmYuY1xuKysrIGIvbmV0L3J4cnBjL3J4cGVyZi5jXG5AQCAtNTM4LDE1ICs1MzgsMTggQEAgc3RhdGljIGludCByeHBlcmZfcHJvY2Vzc19jYWxsKHN0cnVjdCByeHBlcmZfY2FsbCAqY2FsbClcbiBcdGlvdlswXS5pb3ZfbGVuXHQ9IGxlbjtcbiBcdGlvdl9pdGVyX2t2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBXUklURSwgaW92LCAxLCBsZW4pO1xuIFx0bXNnLm1zZ19mbGFncyA9IDA7XG4tXHRuID0gcnhycGNfa2VybmVsX3NlbmRfZGF0YShyeHBlcmZfc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCwgXHUwMDI2bXNnLCBsZW4sXG4tXHRcdFx0XHQgICByeHBlcmZfbm90aWZ5X2VuZF9yZXBseV90eCk7XG4rXHRkbyB7XG4rXHRcdG4gPSByeHJwY19rZXJuZWxfc2VuZF9kYXRhKHJ4cGVyZl9zb2NrZXQsIGNhbGwtXHUwMDNlcnhjYWxsLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZtc2csIG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSxcbitcdFx0XHRcdFx0ICAgcnhwZXJmX25vdGlmeV9lbmRfcmVwbHlfdHgpO1xuK1x0fSB3aGlsZSAobiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMCk7XG4rXG4gXHRpZiAobiBcdTAwM2U9IDApXG4gXHRcdHJldHVybiAwOyAvKiBTdWNjZXNzICovXG4gXG4tXHRpZiAobiA9PSAtRU5PTUVNKVxuLVx0XHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChyeHBlcmZfc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbi1cdFx0XHRcdFx0UlhHRU5fU1NfTUFSU0hBTCwgLUVOT01FTSxcbi1cdFx0XHRcdFx0cnhwZXJmX2Fib3J0X29vbSk7XG4rXHRyeHJwY19rZXJuZWxfYWJvcnRfY2FsbChyeHBlcmZfc29ja2V0LCBjYWxsLVx1MDAzZXJ4Y2FsbCxcbitcdFx0XHRcdFJYR0VOX1NTX01BUlNIQUwsIG4sXG4rXHRcdFx0XHRyeHBlcmZfYWJvcnRfc2VuZF9lcnJvcik7XG4gXHRyZXR1cm4gbjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3NlbmRtc2cuYyBiL25ldC9yeHJwYy9zZW5kbXNnLmNcbmluZGV4IGVkMmM5YTUxMDA1YWQuLjhiYjMyN2RjMjgzM2UgMTAwNjQ0XG4tLS0gYS9uZXQvcnhycGMvc2VuZG1zZy5jXG4rKysgYi9uZXQvcnhycGMvc2VuZG1zZy5jXG5AQCAtMzIwLDggKzMyMCw4IEBAIHN0YXRpYyBpbnQgcnhycGNfYWxsb2NfdHhxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByeHJwY19jYWxsICpjYWxsKVxuIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHQgICBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgsXG4tXHRcdFx0ICAgYm9vbCAqX2Ryb3BwZWRfbG9jaylcbitcdFx0XHQgICByeHJwY19ub3RpZnlfZW5kX3R4X3Qgbm90aWZ5X2VuZF90eClcbitcdF9fcmVsZWFzZXMoXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KVxuIHtcbiBcdHN0cnVjdCByeHJwY190eGJ1ZiAqdHhiO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gXHUwMDI2cngtXHUwMDNlc2s7XG5AQCAtMzMwLDI5ICszMzAsMzcgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFx0Ym9vbCBtb3JlID0gbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX01PUkU7XG4gXHRpbnQgcmV0LCBjb3BpZWQgPSAwO1xuIFxuLVx0aWYgKHRlc3RfYml0KFJYUlBDX0NBTExfVFhfTk9fTU9SRSwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpIHtcbi1cdFx0dHJhY2VfcnhycGNfYWJvcnQoY2FsbC1cdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXG4tXHRcdFx0XHQgIGNhbGwtXHUwMDNlY2lkLCBjYWxsLVx1MDAzZWNhbGxfaWQsIGNhbGwtXHUwMDNlcnhfY29uc3VtZWQsXG4tXHRcdFx0XHQgIDAsIC1FUFJPVE8pO1xuLVx0XHRyZXR1cm4gLUVQUk9UTztcbi1cdH1cbi1cbiBcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcbiBcdHJldCA9IHJ4cnBjX3dhaXRfdG9fYmVfY29ubmVjdGVkKGNhbGwsIFx1MDAyNnRpbWVvKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGlmIChjYWxsLVx1MDAzZWNvbm4tXHUwMDNlc3RhdGUgPT0gUlhSUENfQ09OTl9DTElFTlRfVU5TRUNVUkVEKSB7XG4gXHRcdHJldCA9IHJ4cnBjX2luaXRfY2xpZW50X2Nvbm5fc2VjdXJpdHkoY2FsbC1cdTAwM2Vjb25uKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbiBcdC8qIHRoaXMgc2hvdWxkIGJlIGluIHBvbGwgKi9cbiBcdHNrX2NsZWFyX2JpdChTT0NLV1FfQVNZTkNfTk9TUEFDRSwgc2spO1xuIFxuIHJlbG9hZDpcbitcdGlmICh1bmxpa2VseSh0ZXN0X2JpdChSWFJQQ19DQUxMX1RYX05PX01PUkUsIFx1MDAyNmNhbGwtXHUwMDNlZmxhZ3MpKSkge1xuK1x0XHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVx1MDAzZWRlYnVnX2lkLCByeHJwY19zZW5kbXNnX2xhdGVfc2VuZCxcbitcdFx0XHRcdCAgY2FsbC1cdTAwM2VjaWQsIGNhbGwtXHUwMDNlY2FsbF9pZCwgY2FsbC1cdTAwM2VyeF9jb25zdW1lZCxcbitcdFx0XHRcdCAgMCwgLUVQUk9UTyk7XG4rXHRcdHJldCA9IC1FUFJPVE87XG4rXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHR9XG4rXHRpZiAodW5saWtlbHkodGVzdF9iaXQoUlhSUENfQ0FMTF9UWF9FUlJPUiwgXHUwMDI2Y2FsbC1cdTAwM2VmbGFncykpKSB7XG4rXHRcdHRyYWNlX3J4cnBjX2Fib3J0KGNhbGwtXHUwMDNlZGVidWdfaWQsIHJ4cnBjX3NlbmRtc2dfdHhfZXJyb3IsXG4rXHRcdFx0XHQgIGNhbGwtXHUwMDNlY2lkLCBjYWxsLVx1MDAzZWNhbGxfaWQsIGNhbGwtXHUwMDNlcnhfY29uc3VtZWQsXG4rXHRcdFx0XHQgIDAsIC1FSU8pO1xuK1x0XHRyZXQgPSAtRUlPO1xuK1x0XHRnb3RvIG1heWJlX2Vycm9yO1xuK1x0fVxuK1xuIFx0dHhiID0gY2FsbC1cdTAwM2V0eF9wZW5kaW5nO1xuIFx0Y2FsbC1cdTAwM2V0eF9wZW5kaW5nID0gTlVMTDtcbiBcdGlmICh0eGIpXG5AQCAtMzc5LDkgKzM4Nyw5IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcbiBcdHJldCA9IC1FTVNHU0laRTtcbiBcdGlmIChjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSkge1xuLVx0XHRpZiAobGVuIC0gY29waWVkIFx1MDAzZSBjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbilcbitcdFx0aWYgKGxlbiBcdTAwM2UgY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4gXHRcdFx0Z290byBtYXliZV9lcnJvcjtcbi1cdFx0aWYgKCFtb3JlIFx1MDAyNlx1MDAyNiBsZW4gLSBjb3BpZWQgIT0gY2FsbC1cdTAwM2V0eF90b3RhbF9sZW4pXG4rXHRcdGlmICghbW9yZSBcdTAwMjZcdTAwMjYgbGVuICE9IGNhbGwtXHUwMDNldHhfdG90YWxfbGVuKVxuIFx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4gXHR9XG4gXG5AQCAtNDA1LDcgKzQxMyw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHQgKiB0aGUgc2VjdXJpdHkgaGVhZGVyIGlzIGdvaW5nIHRvIGJlIGluIHRoZSBwYWRkZWRcbiBcdFx0XHQgKiByZWdpb24gKGVuYyBibG9ja3NpemUpLCBidXQgdGhlIHRyYWlsZXIgaXMgbm90LlxuIFx0XHRcdCAqL1xuLVx0XHRcdHJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbXNnX2RhdGFfbGVmdChtc2cpO1xuK1x0XHRcdHJlbWFpbiA9IG1vcmUgPyBJTlRfTUFYIDogbGVuO1xuIFx0XHRcdHR4YiA9IGNhbGwtXHUwMDNlY29ubi1cdTAwM2VzZWN1cml0eS1cdTAwM2VhbGxvY190eGJ1ZihjYWxsLCByZW1haW4sIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24pO1xuIFx0XHRcdGlmICghdHhiKSB7XG4gXHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuQEAgLTQxNiw4ICs0MjQsOCBAQCBzdGF0aWMgaW50IHJ4cnBjX3NlbmRfZGF0YShzdHJ1Y3QgcnhycGNfc29jayAqcngsXG4gXHRcdF9kZWJ1ZyhcImFwcGVuZFwiKTtcbiBcbiBcdFx0LyogYXBwZW5kIG5leHQgc2VnbWVudCBvZiBkYXRhIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciAqL1xuLVx0XHRpZiAobXNnX2RhdGFfbGVmdChtc2cpIFx1MDAzZSAwKSB7XG4tXHRcdFx0c2l6ZV90IGNvcHkgPSB1bWluKHR4Yi1cdTAwM2VzcGFjZSwgbXNnX2RhdGFfbGVmdChtc2cpKTtcbitcdFx0aWYgKGxlbiBcdTAwM2UgMCkge1xuK1x0XHRcdHNpemVfdCBjb3B5ID0gbWluMyh0eGItXHUwMDNlc3BhY2UsIGxlbiwgbXNnX2RhdGFfbGVmdChtc2cpKTtcbiBcbiBcdFx0XHRfZGVidWcoXCJhZGQgJXp1XCIsIGNvcHkpO1xuIFx0XHRcdGlmICghY29weV9mcm9tX2l0ZXJfZnVsbCh0eGItXHUwMDNlZGF0YSArIHR4Yi1cdTAwM2VvZmZzZXQsXG5AQCAtNDI4LDYgKzQzNiw3IEBAIHN0YXRpYyBpbnQgcnhycGNfc2VuZF9kYXRhKHN0cnVjdCByeHJwY19zb2NrICpyeCxcbiBcdFx0XHR0eGItXHUwMDNlbGVuICs9IGNvcHk7XG4gXHRcdFx0dHhiLVx1MDAzZW9mZnNldCArPSBjb3B5O1xuIFx0XHRcdGNvcGllZCArPSBjb3B5O1xuK1x0XHRcdGxlbiAtPSBjb3B5O1xuIFx0XHRcdGlmIChjYWxsLVx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSlcbiBcdFx0XHRcdGNhbGwtXHUwMDNldHhfdG90YWxfbGVuIC09IGNvcHk7XG4gXHRcdH1cbkBAIC00MzksNjIgKzQ0OCwxMDAgQEAgc3RhdGljIGludCByeHJwY19zZW5kX2RhdGEoc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LFxuIFxuIFx0XHQvKiBhZGQgdGhlIHBhY2tldCB0byB0aGUgc2VuZCBxdWV1ZSBpZiBpdCdzIG5vdyBmdWxsICovXG4gXHRcdGlmICghdHhiLVx1MDAzZXNwYWNlIHx8XG4tXHRcdCAgICAobXNnX2RhdGFfbGVmdChtc2cpID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKSkge1xuLVx0XHRcdGlmIChtc2dfZGF0YV9sZWZ0KG1zZykgPT0gMCBcdTAwMjZcdTAwMjYgIW1vcmUpXG4tXHRcdFx0XHR0eGItXHUwMDNlZmxhZ3MgfD0gUlhSUENfTEFTVF9QQUNLRVQ7XG4tXG4rXHRcdCAgICAobGVuID09IDAgXHUwMDI2XHUwMDI2ICFtb3JlKSkge1xuK1x0XHRcdC8qIERvIGFueSByZXF1aXJlZCBjcnlwdG8uICBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZFxuK1x0XHRcdCAqIGhhdmUgY29ycnVwdGVkIHRoZSB0eGJ1ZiBjb250ZW50IHdpdGggYSBwYXJ0aWFsXG4rXHRcdFx0ICogZW5jcnlwdC4gIEFzc3VtZSB0aGF0IEVOT01FTSBpcyByZXRyeWFibGUsIGJ1dFxuK1x0XHRcdCAqIGV2ZXJ5dGhpbmcgZWxzZSBpcyB0ZXJtaW5hbC5cbitcdFx0XHQgKi9cbiBcdFx0XHRyZXQgPSBjYWxsLVx1MDAzZXNlY3VyaXR5LVx1MDAzZXNlY3VyZV9wYWNrZXQoY2FsbCwgdHhiKTtcbi1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuK1x0XHRcdFx0LyogQXNzdW1lIHRoYXQgRU5PTUVNIGhlcmUgbWVhbnMgdGhhdCB0aGVcbitcdFx0XHRcdCAqIGVuY3J5cHRpb24gaGFzbid0IGhhcHBlbmVkIHlldC4gIFRoZSBkYXRhIGlzXG4rXHRcdFx0XHQgKiBhbGlnbmVkIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBzbG93IGJ1ZmZlcmluZ1xuK1x0XHRcdFx0ICogaW4gdGhlIGNyeXB0byB3YWxrLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRpZiAocmV0ID09IC1FTk9NRU0pXG4rXHRcdFx0XHRcdGdvdG8gbWF5YmVfZXJyb3JfcmV3aW5kO1xuK1x0XHRcdFx0c2V0X2JpdChSWFJQQ19DQUxMX1RYX0VSUk9SLCBcdTAwMjZjYWxsLVx1MDAzZWZsYWdzKTtcbitcdFx0XHRcdGdvdG8gb3V0X3R4YjtcbitcdFx0XHR9XG4rXG4rXHRcdFx0aWYgKGxlbiA9PSAwIFx1MDAyNlx1MDAyNiAhbW9yZSlcbitcdFx0XHRcdHR4Yi1cdTAwM2VmbGFncyB8PSBSWFJQQ19MQVNUX1BBQ0tFVDtcbiBcdFx0XHRyeHJwY19xdWV1ZV9wYWNrZXQocngsIGNhbGwsIHR4Yiwgbm90aWZ5X2VuZF90eCk7XG4gXHRcdFx0dHhiID0gTlVMTDtcbiBcdFx0fVxuLVx0fSB3aGlsZSAobXNnX2RhdGFfbGVmdChtc2cpIFx1MDAzZSAwKTtcbitcdH0gd2hpbGUgKGxlbiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgbXNnX2RhdGFfbGVmdChtc2cpIFx1MDAzZSAwKTtcbiBcbiBzdWNjZXNzOlxuIFx0cmV0ID0gY29waWVkO1xuLVx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgY2FsbC1cdTAwM2VlcnJvciBcdTAwM2MgMClcbi1cdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbi1vdXQ6XG4rb3V0X3R4YjpcbiBcdGNhbGwtXHUwMDNldHhfcGVuZGluZyA9IHR4YjtcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gXHRfbGVhdmUoXCIgPSAlZFwiLCByZXQpO1xuIFx0cmV0dXJuIHJldDtcbiBcbiBjYWxsX3Rlcm1pbmF0ZWQ6XG4gXHRyeHJwY19wdXRfdHhidWYodHhiLCByeHJwY190eGJ1Zl9wdXRfc2VuZF9hYm9ydGVkKTtcbi1cdF9sZWF2ZShcIiA9ICVkXCIsIGNhbGwtXHUwMDNlZXJyb3IpO1xuLVx0cmV0dXJuIGNhbGwtXHUwMDNlZXJyb3I7XG4tXG4rXHRjYWxsLVx1MDAzZXR4X3BlbmRpbmcgPSBOVUxMO1xuK1x0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbitcdGdvdG8gb3V0X3VubG9jaztcbitcbittYXliZV9lcnJvcl9yZXdpbmQ6XG4rXHQvKiBJZiB3ZSBnb3QgYSByZXRyeWFibGUgZXJyb3IgYWZ0ZXIgY29weWluZyBhbGwgdGhlIHN1cHBsaWVkIGRhdGEgaW50b1xuK1x0ICogdGhlIGxhc3QgcGFja2V0LCB3ZSBuZWVkIHRvIHJld2luZCBhcyBtdWNoIGFzIHdlIGNhbiBzbyB0aGUgY2FsbGVyXG4rXHQgKiBrbm93cyB0aGV5IG5lZWQgdG8gcmV0cnkgdGhlIHNlbmRtc2cuXG4rXHQgKi9cbitcdGlmIChjb3BpZWQgXHUwMDI2XHUwMDI2ICFtb3JlIFx1MDAyNlx1MDAyNiAhbGVuKSB7XG4rXHRcdHVuc2lnbmVkIGludCByZXdpbmRfYnkgPSB1bWluKGNvcGllZCwgdHhiLVx1MDAzZWxlbik7XG4rXG4rXHRcdHR4Yi1cdTAwM2VzcGFjZSAgKz0gcmV3aW5kX2J5O1xuK1x0XHR0eGItXHUwMDNlbGVuICAgIC09IHJld2luZF9ieTtcbitcdFx0dHhiLVx1MDAzZW9mZnNldCAtPSByZXdpbmRfYnk7XG4rXHRcdGNvcGllZCAgICAgIC09IHJld2luZF9ieTtcbitcdFx0aWYgKGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICE9IC0xKVxuK1x0XHRcdGNhbGwtXHUwMDNldHhfdG90YWxfbGVuICs9IHJld2luZF9ieTtcbitcdFx0aW92X2l0ZXJfcmV2ZXJ0KFx1MDAyNm1zZy1cdTAwM2Vtc2dfaXRlciwgcmV3aW5kX2J5KTtcbitcdH1cbiBtYXliZV9lcnJvcjpcbi1cdGlmIChjb3BpZWQpXG4rXHRpZiAoY29waWVkKSB7XG4rXHRcdGlmIChyeHJwY19jYWxsX2lzX2NvbXBsZXRlKGNhbGwpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY2FsbC1cdTAwM2VlcnJvciBcdTAwM2MgMCkge1xuK1x0XHRcdHJldCA9IGNhbGwtXHUwMDNlZXJyb3I7XG4rXHRcdFx0Z290byBvdXRfdHhiO1xuK1x0XHR9XG4gXHRcdGdvdG8gc3VjY2Vzcztcbi1cdGdvdG8gb3V0O1xuK1x0fVxuK1x0Z290byBvdXRfdHhiO1xuIFxuIGVmYXVsdDpcbiBcdHJldCA9IC1FRkFVTFQ7XG4tXHRnb3RvIG91dDtcbitcdGdvdG8gb3V0X3R4YjtcbiBcbiB3YWl0X2Zvcl9zcGFjZTpcbiBcdHJldCA9IC1FQUdBSU47XG4gXHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKVxuIFx0XHRnb3RvIG1heWJlX2Vycm9yO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4tXHQqX2Ryb3BwZWRfbG9jayA9IHRydWU7XG4rXG4gXHRyZXQgPSByeHJwY193YWl0X2Zvcl90eF93aW5kb3cocngsIGNhbGwsIFx1MDAyNnRpbWVvLFxuIFx0XHRcdFx0ICAgICAgIG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19XQUlUQUxMKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHRcdGdvdG8gb3V0X25vbG9jaztcbiBcdGlmIChjYWxsLVx1MDAzZWludGVycnVwdGliaWxpdHkgPT0gUlhSUENfSU5URVJSVVBUSUJMRSkge1xuIFx0XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCkgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuLVx0XHRcdGdvdG8gbWF5YmVfZXJyb3I7XG4rXHRcdFx0Z290byBvdXRfbm9sb2NrO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHRtdXRleF9sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4gXHR9XG4tXHQqX2Ryb3BwZWRfbG9jayA9IGZhbHNlO1xuIFx0Z290byByZWxvYWQ7XG4rb3V0X25vbG9jazpcbitcdF9sZWF2ZShcIiA9ICVkIFtpbnRyXVwiLCByZXQpO1xuK1x0cmV0dXJuIGNvcGllZCA/OiByZXQ7XG4gfVxuIFxuIC8qXG5AQCAtNjYwLDcgKzcwNyw2IEBAIHJ4cnBjX25ld19jbGllbnRfY2FsbF9mb3Jfc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZyxcbiBpbnQgcnhycGNfZG9fc2VuZG1zZyhzdHJ1Y3QgcnhycGNfc29jayAqcngsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbDtcbi1cdGJvb2wgZHJvcHBlZF9sb2NrID0gZmFsc2U7XG4gXHRpbnQgcmV0O1xuIFxuIFx0c3RydWN0IHJ4cnBjX3NlbmRfcGFyYW1zIHAgPSB7XG5AQCAtNzY5LDE2ICs4MTUsMTUgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gXHRcdHJldCA9IDA7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBSWFJQQ19DTURfU0VORF9EQVRBOlxuLVx0XHRyZXQgPSByeHJwY19zZW5kX2RhdGEocngsIGNhbGwsIG1zZywgbGVuLCBOVUxMLCBcdTAwMjZkcm9wcGVkX2xvY2spO1xuLVx0XHRicmVhaztcbitcdFx0cmV0ID0gcnhycGNfc2VuZF9kYXRhKHJ4LCBjYWxsLCBtc2csIGxlbiwgTlVMTCk7XG4rXHRcdGdvdG8gZXJyb3JfcHV0O1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4gb3V0X3B1dF91bmxvY2s6XG4tXHRpZiAoIWRyb3BwZWRfbG9jaylcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNhbGwtXHUwMDNldXNlcl9tdXRleCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBlcnJvcl9wdXQ6XG4gXHRyeHJwY19wdXRfY2FsbChjYWxsLCByeHJwY19jYWxsX3B1dF9zZW5kbXNnKTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG5AQCAtODAwLDE1ICs4NDUsMjEgQEAgaW50IHJ4cnBjX2RvX3NlbmRtc2coc3RydWN0IHJ4cnBjX3NvY2sgKnJ4LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4gICogQWxsb3cgYSBrZXJuZWwgc2VydmljZSB0byBzZW5kIGRhdGEgb24gYSBjYWxsLiAgVGhlIGNhbGwgbXVzdCBiZSBpbiBhbiBzdGF0ZVxuICAqIGFwcHJvcHJpYXRlIHRvIHNlbmRpbmcgZGF0YS4gIE5vIGNvbnRyb2wgZGF0YSBzaG91bGQgYmUgc3VwcGxpZWQgaW4gQG1zZyxcbiAgKiBub3Igc2hvdWxkIGFuIGFkZHJlc3MgYmUgc3VwcGxpZWQuICBNU0dfTU9SRSBzaG91bGQgYmUgZmxhZ2dlZCBpZiB0aGVyZSdzXG4tICogbW9yZSBkYXRhIHRvIGNvbWUsIG90aGVyd2lzZSB0aGlzIGRhdGEgd2lsbCBlbmQgdGhlIHRyYW5zbWlzc2lvbiBwaGFzZS5cbisgKiBtb3JlIGRhdGEgdG8gY29tZSwgb3RoZXJ3aXNlIHRoaXMgZGF0YSB3aWxsIGVuZCB0aGUgdHJhbnNtaXNzaW9uIHBoYXNlIGlmXG4rICogYWxsIHRoZSBkYXRhIGlzIGJ1ZmZlcmVkLlxuKyAqXG4rICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBhIHNob3J0IHNlbmQsIGluIHdoaWNoIGNhc2UgaXQgc2hvdWxkIGJlXG4rICogY2FsbGVkIGFnYWluIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBkYXRhIG9yIHRvIHBpY2sgdXAgYW4gZXJyb3IgdGhhdFxuKyAqIGNhdXNlZCB0aGUgc2hvcnQgc2VuZC5cbiAgKlxuLSAqIFJldHVybjogJTAgaWYgc3VjY2Vzc2Z1bCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgYnl0ZXMgYnVmZmVyZWQgKGNvdWxkIGJlICUwIGlmIEBsZW4gaXMgMCBvclxuKyAqIG1zZ19pdGVyIGhvbGRzIDAgYnl0ZXMpIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqIG90aGVyd2lzZS5cbiAgKi9cbiBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0ICAgcnhycGNfbm90aWZ5X2VuZF90eF90IG5vdGlmeV9lbmRfdHgpXG4ge1xuLVx0Ym9vbCBkcm9wcGVkX2xvY2sgPSBmYWxzZTtcbiBcdGludCByZXQ7XG4gXG4gXHRfZW50ZXIoXCJ7JWR9LFwiLCBjYWxsLVx1MDAzZWRlYnVnX2lkKTtcbkBAIC04MTksMTIgKzg3MCwxMCBAQCBpbnQgcnhycGNfa2VybmVsX3NlbmRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcnhycGNfY2FsbCAqY2FsbCxcbiBcdG11dGV4X2xvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcbiBcdHJldCA9IHJ4cnBjX3NlbmRfZGF0YShyeHJwY19zayhzb2NrLVx1MDAzZXNrKSwgY2FsbCwgbXNnLCBsZW4sXG4tXHRcdFx0ICAgICAgbm90aWZ5X2VuZF90eCwgXHUwMDI2ZHJvcHBlZF9sb2NrKTtcbitcdFx0XHQgICAgICBub3RpZnlfZW5kX3R4KTtcbiBcdGlmIChyZXQgPT0gLUVTSFVURE9XTilcbiBcdFx0cmV0ID0gY2FsbC1cdTAwM2VlcnJvcjtcbiBcbi1cdGlmICghZHJvcHBlZF9sb2NrKVxuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2Y2FsbC1cdTAwM2V1c2VyX211dGV4KTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE0OjUwOjA4LjA0MTI2MTI4NloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjk2OTAxNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGRvd24gZWFjaCBjaGFuZ2Ugc3lzdGVtYXRpY2FsbHkgYW5kIHNjcnV0aW5pemUgaXQgZm9yIHBvdGVudGlhbCBLZXJuZWwgTWVtb3J5IFNhbml0aXplciAoS01TQU4pIHJpc2tzLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2g7IHNsb3BweSBhbmFseXNpcyBoZXJlIGNvdWxkIGxlYWQgdG8gaGFyZC10by1kZWJ1ZyBpc3N1ZXMuXG5cbkZpcnN0LCBJJ2xsIGdvIHRocm91Z2ggdGhlIHBhdGNoIGZpbGUgYnkgZmlsZSwgbm90aW5nIHRoZSBjaGFuZ2VzLiBTbywgaXQgbG9va3MgbGlrZTpcblxuMS4gIERvY3VtZW50YXRpb24gZ290IGFuIHVwZGF0ZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgLiBUaGF0J3MgbW9zdGx5IGNvc21ldGljLCBidXQgSSdsbCBtYWtlIGEgbm90ZSBqdXN0IGluIGNhc2UgZG9jdW1lbnRhdGlvbiBpcyBjcml0aWNhbC5cbjIuICBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIGluIGBmcy9hZnMvY21fc2VjdXJpdHkuY2AgaGFzIGEgZml4ZWQtc2l6ZSBjYWxjdWxhdGlvbiBmb3IgYHRva3NpemVgLiBPa2F5LCB0aGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGNhbGN1bGF0aW9uIGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzLiBUaGUgY2hhbmdlIHRvIGFkZCA0IGJ5dGVzIGNvdWxkIGJlIHNpZ25pZmljYW50LlxuMy4gIFNvbWUgcmVmYWN0b3Jpbmcgd2l0aCBgYWZzX21ha2Vfb3BfY2FsbGAgYW5kIHNlcnZlciBoYW5kbGluZyBpbiBgZnMvYWZzL2ludGVybmFsLmhgLiBNb3ZpbmcgdGhhdCBhbmQgYWRkaW5nIGEgc2VydmVyIHVzZSBpcyBhIGRlZmluaXRlIGFyZWEgdG8gc2NydXRpbml6ZSBmb3IgcG90ZW50aWFsIHJhY2VzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cbjQuICBUaGVyZSdzIGEgbG9vcCB1c2luZyBgcnhycGNfa2VybmVsX3NlbmRfZGF0YWAgaW4gYGZzL2Fmcy9yeHJwYy5jYCwgc28gaXQgd2lsbCBub3cga2VlcCBsb29waW5nIHVudGlsIGFsbCBkYXRhIGlzIHNlbnQuIEkgd2lsbCBuZWVkIHRvIGVuc3VyZSB0aGUgbG9vcCBjb25kaXRpb25zIGFuZCBkYXRhIGhhbmRsaW5nIGFyZSByb2J1c3QgYW5kIHRoYXQgdGhlcmUgYXJlbid0IGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcGFydGlhbCB3cml0ZXMgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZHVyaW5nIHRoZSBpdGVyYXRpdmUgcHJvY2Vzcy5cbjUuICBBZGRlZCBzb21lIHRyYWNlIGV2ZW50cyBmb3IgQUZTIGFuZCBSeFJQQywgd2hpY2ggd29uJ3QgcG9zZSBLTVNBTiByaXNrcyBkaXJlY3RseS4gQnV0LCBhbnkgZXh0cmEgdHJhY2UgZXZlbnQgc2hvdWxkIHN0aWxsIGJlIGNoZWNrZWQgaW4gY29udGV4dCBvZiBvdGhlciBjaGFuZ2VzLlxuNi4gIFNvbWUgaW50ZXJuYWwgUnhSUEMgZnVuY3Rpb25zLCBsaWtlIGBfX3J4cnBjX25vdGlmeV9zb2NrZXRgIGFuZCBgcnhycGNfbm90aWZ5X3NvY2tldGAsIGFyZSBzZXBhcmF0ZWQuIEludGVybmFsIHJlZmFjdG9yaW5nIGNhbiBiZSBkYW5nZXJvdXMgaWYgbm90IGRvbmUgY29ycmVjdGx5LCBzbyBJJ2xsIG5lZWQgdG8gZXhhbWluZSBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGNhbGxpbmcgY29udGV4dHMuXG43LiAgQSBuZXcgZnVuY3Rpb24gYHJ4cnBjX2dldF9jb25uZWN0aW9uX21heWJlYCBpcyBhZGRlZDsgSSdsbCBjaGVjayBpdHMgdXNhZ2UgYW5kIGluaXRpYWxpemF0aW9uLlxuOC4gIFRoZXJlJ3MgYSBjaGVjayBmb3IgYGNyeXB0b19rcmI1X2ZpbmRfZW5jdHlwZWAgaW4gUnhSUEMga2V5IGhhbmRsaW5nLiBTZWN1cml0eS1yZWxhdGVkIGNoYW5nZXMgYXJlIGFsd2F5cyB3b3J0aCBleHRyYSBzY3J1dGlueS5cbjkuICBgcnhycGNfcmVxdWV1ZV9jYWxsYCByZXBsYWNlcyBgcnhycGNfbm90aWZ5X3NvY2tldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBhbmQgaWYgaXQgaW1wYWN0cyBhbnkgZGF0YSBmbG93IG9yIGVycm9yIGhhbmRsaW5nLlxuMTAuIExvY2tpbmcgYWRkZWQgaW4gYHJ4Z2suY2Ag4oCTIGxvY2tpbmcgaXMgYWx3YXlzIGdvb2QgYnV0IGNhbiBiZSBwcm9ibGVtYXRpYy4gSSBuZWVkIHRvIGVuc3VyZSBpdCdzIGNvcnJlY3QgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucy5cbjExLiBSeFBlcmYgYWxzbyBsb29wcyBvbiBkYXRhIHNlbmQ7IHNhbWUgY29uc2lkZXJhdGlvbnMgYXMgYWJvdmUuXG4xMi4gIFNpZ25pZmljYW50IGNoYW5nZXMgaW4gYG5ldC9yeHJwYy9zZW5kbXNnLmNgOlxuICAgICogICBMb2NraW5nIGhhbmRsaW5nIHdpdGhpbiBgcnhycGNfc2VuZF9kYXRhYCBpcyBjbGVhbmVkIHVwLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZSBsb2NrL3VubG9jayBvcGVyYXRpb25zIGFyZSBjb3JyZWN0IGFuZCB0aGF0IHRoaXMgZG9lc24ndCBsZWFkIHRvIGFueSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlxuICAgICogICBTaG9ydCBzZW5kcywgcmV0dXJuaW5nIGJ5dGUgY291bnQg4oCTIGEgY2hhbmdlIGluIGZ1bmN0aW9uIHNlbWFudGljcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGxvb3AgSSBub3RlZCBiZWZvcmUuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLCBhbmQgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBieXRlIGNvdW50IGlzIGNvcnJlY3QgYW5kIHRoYXQgZXJyb3IgaGFuZGxpbmcgaXMgc291bmQuIGBpb3ZfaXRlcl9yZXZlcnRgIGluIGBtYXliZV9lcnJvcl9yZXdpbmRgIG5lZWRzIGEgaGFyZCBsb29rLlxuICAgICogICBUaGUgc2lnbmF0dXJlIGFuZCBzZW1hbnRpY3Mgb2YgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIGhhdmUgYmVlbiBtb2RpZmllZCwgd2l0aCBhIHJldHVybiB2YWx1ZSBjaGFuZ2UuIFRoZSBjYWxsZXJzIG5vdyBsb29wLiBUaGlzIGlzIGNyaXRpY2FsLCBhcyB0aGlzIGFsdGVycyBkYXRhIGZsb3csIGFuZCBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIG5ldyB1c2FnZSB0aHJvdWdob3V0IHRoZSBrZXJuZWwgdG8gY2hlY2sgZm9yIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIHB1dCBvbiBteSBLTVNBTiBoYXQuIEknbGwgbmVlZCB0byBhbnN3ZXIgYSBzZXJpZXMgb2YgcXVlc3Rpb25zIGFzIEkgc2NydXRpbml6ZSBlYWNoIGZpbGU6XG5cbjEuICAqKkRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8qKiBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGluc3RhbmNlcyBvZiBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiBJJ2xsIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGRhdGEgYmVpbmcgc2VudCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgemVyb2VkIG91dC5cbjIuICAqKkRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGNoZWNrIGFueSBgaWZgIHN0YXRlbWVudHMgb3Igb3RoZXIgY29uZGl0aW9uYWwgc3RydWN0dXJlcyB0byBlbnN1cmUgdGhhdCB0aGUgdmFyaWFibGVzIHVzZWQgaW4gdGhlIGNvbmRpdGlvbnMgYXJlIGFsd2F5cyBpbml0aWFsaXplZCBiZWZvcmUgdGhleSBhcmUgdXNlZC5cbjMuICAqKkRvZXMgdGhpcyBwYXRjaCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHM/KiogSSB3aWxsIGJlIG9uIHRoZSBsb29rb3V0IGZvciBhbnkgY2FzZXMgd2hlcmUgbmV3IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZFxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1MDoxNS4zMzgxNjU5NThaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL2NtX3NlY3VyaXR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjIwOlxcdFxcdCAqXFx0YWZzX2ludDMyXFx0a2luZDtcXG4gMjIxOlxcdFxcdCAqXFx0b3BhcXVlXFx0XFx0ZGF0YVxcdTAwM2NBVVRIREFUQU1BWFxcdTAwM2U7XFxuIDIyMjpcXHRcXHQgKlxcdG9wYXF1ZVxcdFxcdGRpc3BsYXlcXHUwMDNjQVVUSFBSSU5UQUJMRU1BWFxcdTAwM2U7XFxuIDIyMzpcXHRcXHQgKiB9O1xcbiAyMjQ6XFx0XFx0ICovXFxuIDIyNTpcXHRcXHR1dWlkc2l6ZSA9IHNpemVvZihzZXJ2ZXItXFx1MDAzZXV1aWQpO1xcbiAyMjY6XFx0XFx0YXV0aHNpemUgPSA0ICsgeGRyX2xlbl9vYmplY3QodXVpZHNpemUpICsgeGRyX2xlbl9vYmplY3QoMCk7XFxuIDIyNzpcXHRcXG4gMjI4OlxcdFxcdC8qIHN0cnVjdCBSWEdLX1Rva2VuIHtcXG4gMjI5OlxcdFxcdCAqXFx0cnhna19rZXlcXHRcXHRLMDtcXG4gMjMwOlxcdFxcdCAqXFx0UlhHS19MZXZlbFxcdFxcdGxldmVsO1xcbiAyMzE6XFx0XFx0ICpcXHRyeGdrVGltZVxcdFxcdHN0YXJ0dGltZTtcXG4gMjMyOlxcdFxcdCAqXFx0YWZzX2ludDMyXFx0XFx0bGlmZXRpbWU7XFxuIDIzMzpcXHRcXHQgKlxcdGFmc19pbnQzMlxcdFxcdGJ5dGVsaWZlO1xcbiAyMzQ6XFx0XFx0ICpcXHRyeGdrVGltZVxcdFxcdGV4cGlyYXRpb250aW1lO1xcbiAyMzU6XFx0XFx0ICpcXHRzdHJ1Y3QgUlhHS19BdXRoTmFtZVxcdGlkZW50aXRpZXNcXHUwMDNjXFx1MDAzZTtcXG4gMjM2OlxcdFxcdCAqIH07XFxuIDIzNzpcXHRcXHQgKi9cXG4gMjM4OlxcdFxcdHRva3NpemUgPSBrZXlzaXplICsgNCArIDggKyA0ICsgNCArIDggKyB4ZHJfbGVuX29iamVjdChhdXRoc2l6ZSk7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdG9mZnNldCA9IDA7XFxuIDI0MTpcXHRcXHRlbmNzaXplID0gY3J5cHRvX2tyYjVfaG93X211Y2hfYnVmZmVyKHRva2VuX2tyYjUsIEtSQjVfRU5DUllQVF9NT0RFLCB0b2tzaXplLCBcXHUwMDI2b2Zmc2V0KTtcXG4gMjQyOlxcdFxcbiAyNDM6XFx0XFx0Lyogc3RydWN0IFJYR0tfVG9rZW5Db250YWluZXIge1xcbiAyNDQ6XFx0XFx0ICpcXHRhZnNfaW50MzJcXHRrdm5vO1xcbiAyNDU6XFx0XFx0ICpcXHRhZnNfaW50MzJcXHRlbmN0eXBlO1xcbiAyNDY6XFx0XFx0ICpcXHRvcGFxdWVcXHRcXHRlbmNyeXB0ZWRfdG9rZW5cXHUwMDNjXFx1MDAzZTtcXG4gMjQ3OlxcdFxcdCAqIH07XFxuIDI0ODpcXHRcXHQgKi9cXG4gMjQ5OlxcdFxcdGNvbnRzaXplID0gNCArIDQgKyB4ZHJfbGVuX29iamVjdChlbmNzaXplKTtcXG4gMjUwOlxcdFxcbiAyNTE6XFx0XFx0Lyogc3RydWN0IFlGU0FwcERhdGEge1xcbiAyNTI6XFx0XFx0ICpcXHRvcHJfdXVpZFxcdGluaXRpYXRvclV1aWQ7XFxuIDI1MzpcXHRcXHQgKlxcdG9wcl91dWlkXFx0YWNjZXB0b3JVdWlkO1xcbiAyNTQ6XFx0XFx0ICpcXHRDYXBhYmlsaXRpZXNcXHRjYXBzO1xcbiAyNTU6XFx0XFx0ICpcXHRhZnNfaW50MzJcXHRlbmN0eXBlO1xcbiAyNTY6XFx0XFx0ICpcXHRvcGFxdWVcXHRcXHRjYWxsYmFja0tleVxcdTAwM2NcXHUwMDNlO1xcbiAyNTc6XFx0XFx0ICpcXHRvcGFxdWVcXHRcXHRjYWxsYmFja1Rva2VuXFx1MDAzY1xcdTAwM2U7XFxuIDI1ODpcXHRcXHQgKiB9O1xcbiAyNTk6XFx0XFx0ICovXFxuIDI2MDpcXHRcXHRhZGF0YXNpemUgPSAxNiArIDE2ICtcXG4gMjYxOlxcdFxcdFxcdHhkcl9sZW5fb2JqZWN0KHNpemVvZihjYXBzKSkgK1xcbiAyNjI6XFx0XFx0XFx0NCArXFxuIDI2MzpcXHRcXHRcXHR4ZHJfbGVuX29iamVjdChjb25uX2tyYjUtXFx1MDAzZWtleV9sZW4pICtcXG4gMjY0OlxcdFxcdFxcdHhkcl9sZW5fb2JqZWN0KGNvbnRzaXplKTtcXG4gMjY1OlxcdFxcbiAyNjY6XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMjY3OlxcdFxcdGFwcGRhdGEgPSBremFsbG9jKGFkYXRhc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDI2ODpcXHRcXHRpZiAoIWFwcGRhdGEpXFxuIDI2OTpcXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MTUuMzM4MjQwODE4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNzkzMjUwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUb2tlbiBDcmVhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgYWZzX2NyZWF0ZV95ZnNfY21fdG9rZW5gIGZ1bmN0aW9uLiBMb29raW5nIGF0IHRoZSBgUlhHS19Ub2tlbmAgc3RydWN0IGRlZmluaXRpb24sIEkgc2VlIGEgZmV3IHRoaW5ncyB0aGF0IGltbWVkaWF0ZWx5IGp1bXAgb3V0LiBJIHJlbWVtYmVyIGZyb20gbXkgcHJpb3IgZXhwZXJpZW5jZSB0aGF0IHRoZSBzdHJ1Y3QgY29tbWVudCBpdHNlbGYgaXMga2V5LiBTcGVjaWZpY2FsbHksIHRoZSBzdHJ1Y3QgaGFzIGBLMGAsIGBsZXZlbGAsIGBzdGFydHRpbWVgLCBgbGlmZXRpbWVgLCBgYnl0ZWxpZmVgLCBgZXhwaXJhdGlvbnRpbWVgLCBhbmQgdGhlbiBgaWRlbnRpdGllc2AsIHdoaWNoIGlzIGEgdmFyaWFibGUtbGVuZ3RoIGFycmF5IGJhc2VkIG9uIGBhdXRoc2l6ZWAuXG5cbkkgc2VlIHRoYXQgdGhlcmUgd2FzIGEgcHJldmlvdXMgZXJyb3IgaW4gY2FsY3VsYXRpbmcgYHRva3NpemVgLiBUaGUgY29tbWVudCBzYXlzIHRoZSBpc3N1ZSB3YXMgdGhhdCB0aGUgc2l6ZSBjYWxjdWxhdGlvbiB3YXMgbWlzc2luZyA0IGJ5dGVzIGZvciB0aGUgYFJYR0tfTGV2ZWwgbGV2ZWxgIGZpZWxkLiBTbywgdGhlIG9sZCBgdG9rc2l6ZWAgYWxsb2NhdGlvbiB3b3VsZCBoYXZlIGJlZW4gaW5zdWZmaWNpZW50LiBUaGUgYWRkaXRpb24gb2YgYCsgNGAgdG8gdGhlIGNhbGN1bGF0aW9uIG5vdyBjb3JyZWN0cyB0aGlzIGJ5IGluY2x1ZGluZyB0aGUgc2l6ZSBvZiBgUlhHS19MZXZlbCBsZXZlbGAsIGVuc3VyaW5nIHdlIGFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgdGhlIGVudGlyZSB0b2tlbiBzdHJ1Y3R1cmUuIFRoZSB0b2tlbiBhbGxvY2F0aW9uIHNpemUgc2VlbXMgZ29vZCBub3cuIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlIGB0b2tgIHZhcmlhYmxlLCB3aGljaCBpcyB0aGUgdG9rZW4gaXRzZWxmLCBpcyBhbGxvY2F0ZWQgYW5kIGhvdyBpdHMgZmllbGRzIGFyZSBwb3B1bGF0ZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDA5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MTguNDE3NTY5OTE5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9jbV9zZWN1cml0eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHR4ZHIgPSBhcHBkYXRhO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRtZW1jcHkoeGRyLCBcXHUwMDI2bmV0LVxcdTAwM2V1dWlkLCAxNik7XFx0XFx0LyogYXBwZGF0YS5pbml0aWF0b3JVdWlkICovXFxuIDI3MzpcXHRcXHR4ZHIgKz0gMTYgLyA0O1xcbiAyNzQ6XFx0XFx0bWVtY3B5KHhkciwgXFx1MDAyNnNlcnZlci1cXHUwMDNldXVpZCwgMTYpO1xcdFxcdC8qIGFwcGRhdGEuYWNjZXB0b3JVdWlkICovXFxuIDI3NTpcXHRcXHR4ZHIgKz0gMTYgLyA0O1xcbiAyNzY6XFx0XFx0KnhkcisrID0gaHRvbmwoQVJSQVlfU0laRShjYXBzKSk7XFx0LyogYXBwZGF0YS5jYXBzLmxlbiAqL1xcbiAyNzc6XFx0XFx0bWVtY3B5KHhkciwgXFx1MDAyNmNhcHMsIHNpemVvZihjYXBzKSk7XFx0LyogYXBwZGF0YS5jYXBzICovXFxuIDI3ODpcXHRcXHR4ZHIgKz0gQVJSQVlfU0laRShjYXBzKTtcXG4gMjc5OlxcdFxcdCp4ZHIrKyA9IGh0b25sKGNvbm5fa3JiNS1cXHUwMDNlZXR5cGUpO1xcdC8qIGFwcGRhdGEuZW5jdHlwZSAqL1xcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHQqeGRyKysgPSBodG9ubChjb25uX2tyYjUtXFx1MDAzZWtleV9sZW4pO1xcdC8qIGFwcGRhdGEuY2FsbGJhY2tLZXkubGVuICovXFxuIDI4MjpcXHRcXHRLMCA9IHhkcjtcXG4gMjgzOlxcdFxcdGdldF9yYW5kb21fYnl0ZXMoSzAsIGNvbm5fa3JiNS1cXHUwMDNla2V5X2xlbik7IC8qIGFwcGRhdGEuY2FsbGJhY2tLZXkuZGF0YSAqL1xcbiAyODQ6XFx0XFx0eGRyICs9IHhkcl9yb3VuZF91cChjb25uX2tyYjUtXFx1MDAzZWtleV9sZW4pIC8gNDtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0KnhkcisrID0gaHRvbmwoY29udHNpemUpO1xcdFxcdC8qIGFwcGRhdGEuY2FsbGJhY2tUb2tlbi5sZW4gKi9cXG4gMjg3OlxcdFxcdCp4ZHIrKyA9IGh0b25sKDEpO1xcdFxcdFxcdC8qIGNvbnQua3ZubyAqL1xcbiAyODg6XFx0XFx0KnhkcisrID0gaHRvbmwodG9rZW5fa3JiNS1cXHUwMDNlZXR5cGUpO1xcdC8qIGNvbnQuZW5jdHlwZSAqL1xcbiAyODk6XFx0XFx0KnhkcisrID0gaHRvbmwoZW5jc2l6ZSk7XFx0XFx0LyogY29udC5lbmNyeXB0ZWRfdG9rZW4ubGVuICovXFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdGVuY2Jhc2UgPSB4ZHI7XFxuIDI5MjpcXHRcXHR4ZHIgKz0gb2Zmc2V0IC8gNDtcXG4gMjkzOlxcdFxcdCp4ZHIrKyA9IGh0b25sKGNvbm5fa3JiNS1cXHUwMDNlZXR5cGUpO1xcdC8qIHRva2VuLkswLmVuY3R5cGUgKi9cXG4gMjk0OlxcdFxcdCp4ZHIrKyA9IGh0b25sKGNvbm5fa3JiNS1cXHUwMDNla2V5X2xlbik7XFx0LyogdG9rZW4uSzAua2V5LmxlbiAqL1xcbiAyOTU6XFx0XFx0bWVtY3B5KHhkciwgSzAsIGNvbm5fa3JiNS1cXHUwMDNla2V5X2xlbik7XFx0LyogdG9rZW4uSzAua2V5LmRhdGEgKi9cXG4gMjk2OlxcdFxcdHhkciArPSB4ZHJfcm91bmRfdXAoY29ubl9rcmI1LVxcdTAwM2VrZXlfbGVuKSAvIDQ7XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdCp4ZHIrKyA9IGh0b25sKFJYUlBDX1NFQ1VSSVRZX0VOQ1JZUFQpO1xcdC8qIHRva2VuLmxldmVsICovXFxuIDI5OTpcXHRcXHQqeGRyKysgPSBodG9ubCgwKTtcXHRcXHRcXHQvKiB0b2tlbi5zdGFydHRpbWUgKi9cXG4gMzAwOlxcdFxcdCp4ZHIrKyA9IGh0b25sKDApO1xcdFxcdFxcdC8qIFxcXCIgKi9cXG4gMzAxOlxcdFxcdCp4ZHIrKyA9IGh0b25sKDApO1xcdFxcdFxcdC8qIHRva2VuLmxpZmV0aW1lICovXFxuIDMwMjpcXHRcXHQqeGRyKysgPSBodG9ubCgwKTtcXHRcXHRcXHQvKiB0b2tlbi5ieXRlbGlmZSAqL1xcbiAzMDM6XFx0XFx0KnhkcisrID0gaHRvbmwoMCk7XFx0XFx0XFx0LyogdG9rZW4uZXhwaXJhdGlvbnRpbWUgKi9cXG4gMzA0OlxcdFxcdCp4ZHIrKyA9IGh0b25sKDApO1xcdFxcdFxcdC8qIFxcXCIgKi9cXG4gMzA1OlxcdFxcdCp4ZHIrKyA9IGh0b25sKDEpO1xcdFxcdFxcdC8qIHRva2VuLmlkZW50aXRpZXMuY291bnQgKi9cXG4gMzA2OlxcdFxcdCp4ZHIrKyA9IGh0b25sKDApO1xcdFxcdFxcdC8qIHRva2VuLmlkZW50aXRpZXNbMF0ua2luZCAqL1xcbiAzMDc6XFx0XFx0KnhkcisrID0gaHRvbmwodXVpZHNpemUpO1xcdFxcdC8qIHRva2VuLmlkZW50aXRpZXNbMF0uZGF0YS5sZW4gKi9cXG4gMzA4OlxcdFxcdG1lbWNweSh4ZHIsIFxcdTAwMjZzZXJ2ZXItXFx1MDAzZXV1aWQsIHV1aWRzaXplKTtcXG4gMzA5OlxcdFxcdHhkciArPSB4ZHJfcm91bmRfdXAodXVpZHNpemUpIC8gNDtcXG4gMzEwOlxcdFxcdCp4ZHIrKyA9IGh0b25sKDApO1xcdFxcdFxcdC8qIHRva2VuLmlkZW50aXRpZXNbMF0uZGlzcGxheS5sZW4gKi9cXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0eGRyID0gZW5jYmFzZSArIHhkcl9yb3VuZF91cChlbmNzaXplKTtcXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0aWYgKCh1bnNpZ25lZCBsb25nKXhkciAtICh1bnNpZ25lZCBsb25nKWFwcGRhdGEgIT0gYWRhdGFzaXplKVxcbiAzMTU6XFx0XFx0XFx0cHJfZXJyKFxcXCJBcHBkYXRhIHNpemUgaW5jb3JyZWN0ICVseCAhPSAlenhcXFxcblxcXCIsXFxuIDMxNjpcXHRcXHRcXHQgICAgICAgKHVuc2lnbmVkIGxvbmcpeGRyIC0gKHVuc2lnbmVkIGxvbmcpYXBwZGF0YSwgYWRhdGFzaXplKTtcXG4gMzE3OlxcdFxcbiAzMTg6XFx0XFx0YWVhZCA9IGNyeXB0b19rcmI1X3ByZXBhcmVfZW5jcnlwdGlvbih0b2tlbl9rcmI1LCB0b2tlbl9rZXksIFJYR0tfU0VSVkVSX0VOQ19UT0tFTixcXG4gMzE5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1MDoxOC40MTc2NjI3NjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2MjAzODg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZmZlciBTaXplIENhbGN1bGF0aW9uIEZpeCoqXG5cbk9rYXksIHNvIHRoZSBmaXggaXMgaW4gZm9yIGEgYnVmZmVyIHNpemUgY2FsY3VsYXRpb24gZXJyb3IgcmVsYXRlZCB0byBgdG9rc2l6ZWAuIFRoZSBtZW1vcnkgd2FzIGluaXRpYWxseSBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLCBtZWFuaW5nIGV2ZXJ5dGhpbmcgc3RhcnRlZCBvdXQgemVyb2VkLiBUaGUgYnVnIHdhcyBpbiBmYWlsaW5nIHRvIGFjY291bnQgZm9yIHRoZSA0LWJ5dGUgYGxldmVsYCBmaWVsZCB0aGF0IGdldHMgd3JpdHRlbiBsYXRlciwgYXMgZXZpZGVuY2VkIGJ5IHRoZSBgaHRvbmwoUlhSUENfU0VDVVJJVFlfRU5DUllQVClgIGNhbGwgb24gbGluZSAyOTguIEVzc2VudGlhbGx5LCB3ZSB3ZXJlIHVuZGVyLWFsbG9jYXRpbmcsIGV2ZW4gdGhvdWdoIHRoZSBjb25zZXF1ZW5jZXMgd2VyZW4ndCBpbW1lZGlhdGVseSBvYnZpb3VzIGR1ZSB0byB0aGUgemVybyBpbml0aWFsaXphdGlvbi4gSXQgbG9va3MgbGlrZSBpdCB3YXMgb25seSBmaXhpbmcgYSBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbiwgbm90IGEgbWVtb3J5IGNvcnJ1cHRpb24sIGJ1dCBpdCBpcyBpbXBvcnRhbnQgdG8gY2hlY2sgaG93IHRoZSBidWZmZXIgd2lsbCBiZSB1c2VkLlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBUaW1lIHRvIHRob3JvdWdobHkgYW5hbHl6ZSBgbmV0L3J4cnBjL3NlbmRtc2cuY2AgYW5kIHJlbGF0ZWQgZmlsZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGZ1cnRoZXIgaXNzdWVzIGx1cmtpbmcuIExldCdzIHN0YXJ0IHdpdGggYG5ldC9yeHJwYy9zZW5kbXNnLmNgIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1OTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNDo1MDoyMS4yNzk3MDU0NzNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yeHJwYy9zZW5kbXNnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdFxcdCAgICBzdGF0ZSAhPSBSWFJQQ19DQUxMX1NFUlZFUl9TRU5EX1JFUExZKSB7XFxuIDM4MTpcXHRcXHRcXHQvKiBSZXF1ZXN0IHBoYXNlIGNvbXBsZXRlIGZvciB0aGlzIGNsaWVudCBjYWxsICovXFxuIDM4MjpcXHRcXHRcXHR0cmFjZV9yeHJwY19hYm9ydChjYWxsLVxcdTAwM2VkZWJ1Z19pZCwgcnhycGNfc2VuZG1zZ19sYXRlX3NlbmQsXFxuIDM4MzpcXHRcXHRcXHRcXHRcXHQgIGNhbGwtXFx1MDAzZWNpZCwgY2FsbC1cXHUwMDNlY2FsbF9pZCwgY2FsbC1cXHUwMDNlcnhfY29uc3VtZWQsXFxuIDM4NDpcXHRcXHRcXHRcXHRcXHQgIDAsIC1FUFJPVE8pO1xcbiAzODU6XFx0XFx0XFx0Z290byBtYXliZV9lcnJvcjtcXG4gMzg2OlxcdFxcdH1cXG4gMzg3OlxcdFxcbiAzODg6XFx0XFx0cmV0ID0gLUVNU0dTSVpFO1xcbiAzODk6XFx0XFx0aWYgKGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbiAhPSAtMSkge1xcbiAzOTA6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNlIGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbilcXG4gMzkxOlxcdFxcdFxcdFxcdGdvdG8gbWF5YmVfZXJyb3I7XFxuIDM5MjpcXHRcXHRcXHRpZiAoIW1vcmUgXFx1MDAyNlxcdTAwMjYgbGVuICE9IGNhbGwtXFx1MDAzZXR4X3RvdGFsX2xlbilcXG4gMzkzOlxcdFxcdFxcdFxcdGdvdG8gbWF5YmVfZXJyb3I7XFxuIDM5NDpcXHRcXHR9XFxuIDM5NTpcXHRcXG4gMzk2OlxcdFxcdGRvIHtcXG4gMzk3OlxcdFxcdFxcdGlmICghdHhiKSB7XFxuIDM5ODpcXHRcXHRcXHRcXHRzaXplX3QgcmVtYWluO1xcbiAzOTk6XFx0XFxuIDQwMDpcXHRcXHRcXHRcXHRfZGVidWcoXFxcImFsbG9jXFxcIik7XFxuIDQwMTpcXHRcXG4gNDAyOlxcdFxcdFxcdFxcdGlmICghcnhycGNfY2hlY2tfdHhfc3BhY2UoY2FsbCwgTlVMTCkpXFxuIDQwMzpcXHRcXHRcXHRcXHRcXHRnb3RvIHdhaXRfZm9yX3NwYWNlO1xcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRcXHRcXHQvKiBTZWUgaWYgd2UgbmVlZCB0byBiZWdpbi9leHRlbmQgdGhlIFR4IHF1ZXVlLiAqL1xcbiA0MDY6XFx0XFx0XFx0XFx0aWYgKCFjYWxsLVxcdTAwM2VzZW5kX3F1ZXVlIHx8ICEoKGNhbGwtXFx1MDAzZXNlbmRfdG9wICsgMSkgXFx1MDAyNiBSWFJQQ19UWFFfTUFTSykpIHtcXG4gNDA3OlxcdFxcdFxcdFxcdFxcdHJldCA9IHJ4cnBjX2FsbG9jX3R4cXVldWUoc2ssIGNhbGwpO1xcbiA0MDg6XFx0XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDQwOTpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG1heWJlX2Vycm9yO1xcbiA0MTA6XFx0XFx0XFx0XFx0fVxcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRcXHRcXHQvKiBXb3JrIG91dCB0aGUgbWF4aW11bSBzaXplIG9mIGEgcGFja2V0LiAgQXNzdW1lIHRoYXRcXG4gNDEzOlxcdFxcdFxcdFxcdCAqIHRoZSBzZWN1cml0eSBoZWFkZXIgaXMgZ29pbmcgdG8gYmUgaW4gdGhlIHBhZGRlZFxcbiA0MTQ6XFx0XFx0XFx0XFx0ICogcmVnaW9uIChlbmMgYmxvY2tzaXplKSwgYnV0IHRoZSB0cmFpbGVyIGlzIG5vdC5cXG4gNDE1OlxcdFxcdFxcdFxcdCAqL1xcbiA0MTY6XFx0XFx0XFx0XFx0cmVtYWluID0gbW9yZSA/IElOVF9NQVggOiBsZW47XFxuIDQxNzpcXHRcXHRcXHRcXHR0eGIgPSBjYWxsLVxcdTAwM2Vjb25uLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNlYWxsb2NfdHhidWYoY2FsbCwgcmVtYWluLCBzay1cXHUwMDNlc2tfYWxsb2NhdGlvbik7XFxuIDQxODpcXHRcXHRcXHRcXHRpZiAoIXR4Yikge1xcbiA0MTk6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNDIwOlxcdFxcdFxcdFxcdFxcdGdvdG8gbWF5YmVfZXJyb3I7XFxuIDQyMTpcXHRcXHRcXHRcXHR9XFxuIDQyMjpcXHRcXHRcXHR9XFxuIDQyMzpcXHRcXG4gNDI0OlxcdFxcdFxcdF9kZWJ1ZyhcXFwiYXBwZW5kXFxcIik7XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdFxcdC8qIGFwcGVuZCBuZXh0IHNlZ21lbnQgb2YgZGF0YSB0byB0aGUgY3VycmVudCBidWZmZXIgKi9cXG4gNDI3OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzZSAwKSB7XFxuIDQyODpcXHRcXHRcXHRcXHRzaXplX3QgY29weSA9IG1pbjModHhiLVxcdTAwM2VzcGFjZSwgbGVuLCBtc2dfZGF0YV9sZWZ0KG1zZykpO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRcXHRcXHRfZGVidWcoXFxcImFkZCAlenVcXFwiLCBjb3B5KTtcXG4gNDMxOlxcdFxcdFxcdFxcdGlmICghY29weV9mcm9tX2l0ZXJfZnVsbCh0eGItXFx1MDAzZWRhdGEgKyB0eGItXFx1MDAzZW9mZnNldCxcXG4gNDMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBjb3B5LCBcXHUwMDI2bXNnLVxcdTAwM2Vtc2dfaXRlcikpXFxuIDQzMzpcXHRcXHRcXHRcXHRcXHRnb3RvIGVmYXVsdDtcXG4gNDM0OlxcdFxcdFxcdFxcdF9kZWJ1ZyhcXFwiYWRkZWRcXFwiKTtcXG4gNDM1OlxcdFxcdFxcdFxcdHR4Yi1cXHUwMDNlc3BhY2UgLT0gY29weTtcXG4gNDM2OlxcdFxcdFxcdFxcdHR4Yi1cXHUwMDNlbGVuICs9IGNvcHk7XFxuIDQzNzpcXHRcXHRcXHRcXHR0eGItXFx1MDAzZW9mZnNldCArPSBjb3B5O1xcbiA0Mzg6XFx0XFx0XFx0XFx0Y29waWVkICs9IGNvcHk7XFxuIDQzOTpcXHRcXHRcXHRcXHRsZW4gLT0gY29weTtcXG4gNDQwOlxcdFxcdFxcdFxcdGlmIChjYWxsLVxcdTAwM2V0eF90b3RhbF9sZW4gIT0gLTEpXFxuIDQ0MTpcXHRcXHRcXHRcXHRcXHRjYWxsLVxcdTAwM2V0eF90b3RhbF9sZW4gLT0gY29weTtcXG4gNDQyOlxcdFxcdFxcdH1cXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0XFx0LyogY2hlY2sgZm9yIHRoZSBmYXIgc2lkZSBhYm9ydGluZyB0aGUgY2FsbCBvciBhIG5ldHdvcmsgZXJyb3JcXG4gNDQ1OlxcdFxcdFxcdCAqIG9jY3VycmluZyAqL1xcbiA0NDY6XFx0XFx0XFx0aWYgKHJ4cnBjX2NhbGxfaXNfY29tcGxldGUoY2FsbCkpXFxuIDQ0NzpcXHRcXHRcXHRcXHRnb3RvIGNhbGxfdGVybWluYXRlZDtcXG4gNDQ4OlxcdFxcbiA0NDk6XFx0XFx0XFx0LyogYWRkIHRoZSBwYWNrZXQgdG8gdGhlIHNlbmQgcXVldWUgaWYgaXQncyBub3cgZnVsbCAqL1xcbiA0NTA6XFx0XFx0XFx0aWYgKCF0eGItXFx1MDAzZXNwYWNlIHx8XFxuIDQ1MTpcXHRcXHRcXHQgICAgKGxlbiA9PSAwIFxcdTAwMjZcXHUwMDI2ICFtb3JlKSkge1xcbiA0NTI6XFx0XFx0XFx0XFx0LyogRG8gYW55IHJlcXVpcmVkIGNyeXB0by4gIElmIHRoaXMgZmFpbHMsIGl0IGNvdWxkXFxuIDQ1MzpcXHRcXHRcXHRcXHQgKiBoYXZlIGNvcnJ1cHRlZCB0aGUgdHhidWYgY29udGVudCB3aXRoIGEgcGFydGlhbFxcbiA0NTQ6XFx0XFx0XFx0XFx0ICogZW5jcnlwdC4gIEFzc3VtZSB0aGF0IEVOT01FTSBpcyByZXRyeWFibGUsIGJ1dFxcbiA0NTU6XFx0XFx0XFx0XFx0ICogZXZlcnl0aGluZyBlbHNlIGlzIHRlcm1pbmFsLlxcbiA0NTY6XFx0XFx0XFx0XFx0ICovXFxuIDQ1NzpcXHRcXHRcXHRcXHRyZXQgPSBjYWxsLVxcdTAwM2VzZWN1cml0eS1cXHUwMDNlc2VjdXJlX3BhY2tldChjYWxsLCB0eGIpO1xcbiA0NTg6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gNDU5OlxcdFxcdFxcdFxcdFxcdC8qIEFzc3VtZSB0aGF0IEVOT01FTSBoZXJlIG1lYW5zIHRoYXQgdGhlXFxuIDQ2MDpcXHRcXHRcXHRcXHRcXHQgKiBlbmNyeXB0aW9uIGhhc24ndCBoYXBwZW5lZCB5ZXQuICBUaGUgZGF0YSBpc1xcbiA0NjE6XFx0XFx0XFx0XFx0XFx0ICogYWxpZ25lZCB0byBhdm9pZCB0aGUgbmVlZCBmb3Igc2xvdyBidWZmZXJpbmdcXG4gNDYyOlxcdFxcdFxcdFxcdFxcdCAqIGluIHRoZSBjcnlwdG8gd2Fsay5cXG4gNDYzOlxcdFxcdFxcdFxcdFxcdCAqL1xcbiA0NjQ6XFx0XFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PTUVNKVxcbiA0NjU6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBtYXliZV9lcnJvcl9yZXdpbmQ7XFxuIDQ2NjpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KFJYUlBDX0NBTExfVFhfRVJST1IsIFxcdTAwMjZjYWxsLVxcdTAwM2VmbGFncyk7XFxuIDQ2NzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF90eGI7XFxuIDQ2ODpcXHRcXHRcXHRcXHR9XFxuIDQ2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MjEuMjc5ODYyNTkzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTA5NTg5NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFJ4UlBDIFBhdGNoIFJldmlldyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBSeFJQQyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgYE5lZWRzS01TQU49dHJ1ZWAgZmxhZy4gTXkgZm9jdXMgaXMgb24gaWRlbnRpZnlpbmcgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBnaXZlbiB0aGUgY3JpdGljYWwgbmF0dXJlIG9mIHRoaXMgYXJlYS5cblxuRmlyc3QsIEkgZXhhbWluZWQgYGFsbG9jX3R4YnVmYCBhbmQgYHNlY3VyZV9wYWNrZXRgIHdpdGhpbiBgcnhycGNgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBjb3B5X2Zyb21faXRlcl9mdWxsYCBjYWxsLCBjb3B5aW5nIGRhdGEgaW50byB0aGUgdHJhbnNtaXQgYnVmZmVyIChgdHhiYCkuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCB0aGUgYHR4Yi1cdTAwM2VsZW5gIGlzICpvbmx5KiBpbmNyZW1lbnRlZCBieSB0aGUgY29waWVkIGFtb3VudCBhbmQgdGhhdCB0aGUgYHJ4cnBjX3F1ZXVlX3BhY2tldGAgZnVuY3Rpb24gYWNjdXJhdGVseSByZWZsZWN0cyB0aGUgYW1vdW50IGNvcGllZC4gQWxzbywgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIG5vdyByZXR1cm5zIHRoZSAqbnVtYmVyIG9mIGJ5dGVzIGJ1ZmZlcmVkKiB3aGljaCBpbmRpY2F0ZXMgc3VjY2VzcyAtIG5vdCB6ZXJvIC0gc28gdGhlcmUgaXMgbm8gY29uY2VybiB0aGVyZS5cblxuTmV4dCwgSSBsb29rZWQgYXQgaG93IGByeHJwY19rZXJuZWxfc2VuZF9kYXRhYCBpcyB1c2VkIGluIHNldmVyYWwgYGZzL2Fmcy9yeHJwYy5jYCBmdW5jdGlvbnM6IGBhZnNfbWFrZV9jYWxsYCwgYGFmc19zZW5kX2VtcHR5X3JlcGx5YCwgYGFmc19zZW5kX3NpbXBsZV9yZXBseWAsIGFuZCBgcnhwZXJmX3Byb2Nlc3NfY2FsbGAuIEVhY2ggdXNlcyBhIGBkby4uLndoaWxlYCBsb29wIHRoYXQgY2FsbHMgYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIHJlcGVhdGVkbHkgdW50aWwgYWxsIHRoZSBtZXNzYWdlIGRhdGEgaXMgc2VudC4gVGhlIGxvb3AgY29uZGl0aW9ucyAoYG1zZ19kYXRhX2xlZnQoXHUwMDI2bXNnKSBcdTAwM2UgMGAgb3IgYG4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBtc2dfZGF0YV9sZWZ0KFx1MDAyNm1zZykgXHUwMDNlIDBgKSBhcHBlYXIgc291bmQ7IGlmIGEgbmVnYXRpdmUgcmV0dXJuIGNvZGUgaXMgcmV0dXJuZWQsIHRoZSBsb29wIGlzIGV4aXRlZC4gYHJldGAgYW5kIGBuYCBhcmUgYXNzaWduZWQgYmVmb3JlIHVzZSBhbmQgdGhlaXIgdXNhZ2UgaXMgY2hlY2tlZC5cblxuTm93LCB0aGUgcmVhbCBsaXRtdXMgdGVzdDogdGhlIGZvdXIgS01TQU4gY3JpdGVyaWEuXG5cbjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlOioqIEknbSBtZXRpY3Vsb3VzbHkgbG9va2luZyBmb3IgYW55IGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgb3IgQlBGIGNoYW5nZXMuIFRoZSBwYXRjaCBoYXMgYHJ4cnBjX3JlcXVldWVfY2FsbGAsIGBfX3J4cnBjX25vdGlmeV9zb2NrZXRgLCBgcnhycGNfbm90aWZ5X3NvY2tldGAgaW4gYHJlY3Ztc2cuY2AgYW5kIGBjYWxsX3N0YXRlLmNgIGJ1dCB0aGVzZSBhcHBlYXIgdG8gYmUgaW50ZXJuYWwgbm90aWZpY2F0aW9ucywgbm90IGRpcmVjdCB1c2VyLWZhY2luZyBjb3BpZXMuIGByeHJwY19wcmVwYXJzZV94ZHJfeWZzX3J4Z2tgIGluIGBrZXkuY2AgcmV0dXJucyBgcmV0YCB3aGljaCBpcyBhc3NpZ25lZCB3aXRoIGAtRUtFWVJFSkVDVEVEYCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyBjaGVja2VkLiBUaGUgYHRva3NpemVgIGNhbGN1bGF0aW9uIGZpeCBpbiBgY21fc2VjdXJpdHkuY2AgaXMgaW1wb3J0YW50IHRvIGNvbmZpcm0gdGhlcmUgYXJlIG5vIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igc2ltaWxhciBidWdzLlxuMi4gICoqQ29uZGl0aW9uYWwgTG9naWMvQnJhbmNoaW5nOioqIEknbSBpbnNwZWN0aW5nIGFsbCB2YXJpYWJsZXMgdXNlZCBpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRvIGVuc3VyZSB0aGV5J3JlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjb2RlIHVzZXMgYHJldGAgYW5kIGBuYCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBpbiBhbGwgaW5zdGFuY2VzLCBhcyB3ZWxsIGFzIGByZXdpbmRfYnlgIHdoaWNoIGlzIGluaXRpYWxpemVkIGJ5IGB1bWluKGNvcGllZCwgdHhiLVx1MDAzZWxlbilgLlxuMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogSSdtIGNoZWNraW5nIGZvciBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBleGFtcGxlcyBvZiB0aGlzIGhlcmUuXG40LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBUaGUgYHNlbmRtc2cuY2AgY2hhbmdlcyBtZXRpY3Vsb3VzbHkgdHJhY2sgYGxlbmAgYW5kIGBtc2dfZGF0YV9sZWZ0KG1zZylgLiBUaGUgY29kZSBpcyBjYXJlZnVsIHdpdGggYG1pbjModHhiLVx1MDAzZXNwYWNlLCBsZW4sIG1zZ19kYXRhX2xlZnQobXNnKSlgIGFuZCBkYXRhIGlzIGNvcGllZCBkaXJlY3RseSBmcm9tIGBtc2dfaXRlcmAuIE5vIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYXJlIGJlaW5nIGFjY2Vzc2VkIG9yIHRyYW5zbWl0dGVkLlxuXG5JJ3ZlIGNhcmVmdWxseSBkb3VibGUtY2hlY2tlZCAqYWxsKiB0aGUgZGlmZiBodW5rcy4gSSByZXZpZXdlZCB0aGUgZG9jdW1lbnRhdGlvbiAoYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy5yc3RgKSBhbmQgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzIGxpa2UgZml4ZXMgdG8gYHRva3NpemVgIGNhbGN1bGF0aW9uIChgZnMvYWZzL2NtX3NlY3VyaXR5LmNgKSwgaW5saW5lIGZ1bmN0aW9uIG1vdmVzIChgZnMvYWZzL2ludGVybmFsLmhgKSwgdGhlIGxvb3BzIHdpdGggYHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGFgIGluIGBmcy9hZnMvcnhycGMuY2AsIHRyYWNlIGV2ZW50cywgZGVjbGFyYXRpb25zIGFuZCBmbGFnIGVudW1zIChgbmV0L3J4cnBjL2FyLWludGVybmFsLmhgKSwgc29ja2V0IG5vdGlmaWNhdGlvbiBsb2dpYyBjbGVhbnVwLCBudWxsL3JlZiBjaGVja3MsICBgY3J5cHRvX2tyYjVfZmluZF9lbmN0eXBlYCB2YWxpZGF0aW9uLCBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgbG9ja2luZy5cblxuQmFzZWQgb24gdGhpcyBjb21wcmVoZW5zaXZlIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGVyZSBhcmUgKm5vKiBkaXJlY3Qgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQga2VybmVsIHByb3RlY3Rpb25zIChLQVNBTiwgTE9DS0RFUCwgZXRjLikgc2hvdWxkIGNhdGNoIGFueSBvdGhlciBwb3RlbnRpYWwgaXNzdWVzLiBUaGVyZWZvcmUsIEknbSByZWNvbW1lbmRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGF0LCBhbG9uZyB3aXRoIHRoaXMgZGV0YWlsZWQgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMwOSwiT3V0cHV0VG9rZW5zIjozMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTQ6NTA6MzIuMTg5NDU2NjAyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEFGX1JYUlBDIGFuZCBBRlMgbmV0d29ya2luZyBjb2RlIHRvIHN1cHBvcnQgc2hvcnQgd3JpdGVzIGluIHJ4cnBjX2tlcm5lbF9zZW5kX2RhdGEsIGxvb3AgdW50aWwgZnVsbCBtZXNzYWdlIGNvbnN1bXB0aW9uIGluIEFGUy9yeHBlcmYgY2FsbGVycywgc2ltcGxpZnkgbG9ja2luZyBhcm91bmQgcnhycGNfc2VuZF9kYXRhLCBmaXggdGhlIHRva3NpemUgY2FsY3VsYXRpb24gZm9yIFlGUyBDTSB0b2tlbnMsIGFkZCBlbmNyeXB0aW9uIHR5cGUgdmFsaWRhdGlvbiBmb3IgWUZTIGtleXMsIGFuZCBjbGVhbiB1cCBzb2NrZXQgbm90aWZpY2F0aW9uIGFuZCBjb25uZWN0aW9uIHJlZmNvdW50aW5nLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrczpcXG4tIFRoZSB0b2tlbiBidWZmZXIgaW4gYGFmc19jcmVhdGVfeWZzX2NtX3Rva2VuYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIHplcm9pbmcgYWxsIGJ5dGVzOyB0aGUgZml4IG1lcmVseSBhY2NvdW50cyBmb3IgdGhlIDQtYnl0ZSBgbGV2ZWxgIGZpZWxkIGluIGB0b2tzaXplYC5cXG4tIEluIGByeHJwY19zZW5kX2RhdGFgLCBkYXRhIHRyYW5zZmVyIGNvbnRpbnVlcyB0byB1c2UgYGNvcHlfZnJvbV9pdGVyX2Z1bGxgIHdpdGggYm91bmRlZCBjb3B5IHNpemVzIChgbWluM2ApLCBhbmQgZXJyb3ItcmV3aW5kIGxvZ2ljIHVwZGF0ZXMgYnl0ZSBjb3VudGVycyBhcHByb3ByaWF0ZWx5Llxcbi0gTG9jYWwgdmFyaWFibGVzIGFjcm9zcyBtb2RpZmllZCBmdW5jdGlvbnMgKGByZXRgLCBgbmAsIGByZXdpbmRfYnlgLCBldGMuKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciBhc3NpZ25lZCBiZWZvcmUgdXNlLlxcbi0gTm8ga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBgY29weV90b191c2VyYCwgaW9jdGwsIG5ldGxpbmssIGV0Yy4pIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9zdHJ1Y3QgZmllbGRzIGFyZSBpbnRyb2R1Y2VkIG9yIGFsdGVyZWQuXFxuXFxuQW55IGNvbmN1cnJlbmN5LCByZWZjb3VudGluZywgb3IgYm91bmRzIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IHN0YW5kYXJkIGRlYnVnIGJ1aWxkcyAoS0FTQU4sIExPQ0tERVApLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBRl9SWFJQQyBhbmQgQUZTIG5ldHdvcmtpbmcgY29kZSB0byBzdXBwb3J0IHNob3J0IHdyaXRlcyBpbiByeHJwY19rZXJuZWxfc2VuZF9kYXRhLCBsb29wIHVudGlsIGZ1bGwgbWVzc2FnZSBjb25zdW1wdGlvbiBpbiBBRlMvcnhwZXJmIGNhbGxlcnMsIHNpbXBsaWZ5IGxvY2tpbmcgYXJvdW5kIHJ4cnBjX3NlbmRfZGF0YSwgZml4IHRoZSB0b2tzaXplIGNhbGN1bGF0aW9uIGZvciBZRlMgQ00gdG9rZW5zLCBhZGQgZW5jcnlwdGlvbiB0eXBlIHZhbGlkYXRpb24gZm9yIFlGUyBrZXlzLCBhbmQgY2xlYW4gdXAgc29ja2V0IG5vdGlmaWNhdGlvbiBhbmQgY29ubmVjdGlvbiByZWZjb3VudGluZy5cXG5cXG5Ob25lIG9mIHRoZXNlIGNoYW5nZXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3M6XFxuLSBUaGUgdG9rZW4gYnVmZmVyIGluIGBhZnNfY3JlYXRlX3lmc19jbV90b2tlbmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCB6ZXJvaW5nIGFsbCBieXRlczsgdGhlIGZpeCBtZXJlbHkgYWNjb3VudHMgZm9yIHRoZSA0LWJ5dGUgYGxldmVsYCBmaWVsZCBpbiBgdG9rc2l6ZWAuXFxuLSBJbiBgcnhycGNfc2VuZF9kYXRhYCwgZGF0YSB0cmFuc2ZlciBjb250aW51ZXMgdG8gdXNlIGBjb3B5X2Zyb21faXRlcl9mdWxsYCB3aXRoIGJvdW5kZWQgY29weSBzaXplcyAoYG1pbjNgKSwgYW5kIGVycm9yLXJld2luZCBsb2dpYyB1cGRhdGVzIGJ5dGUgY291bnRlcnMgYXBwcm9wcmlhdGVseS5cXG4tIExvY2FsIHZhcmlhYmxlcyBhY3Jvc3MgbW9kaWZpZWQgZnVuY3Rpb25zIChgcmV0YCwgYG5gLCBgcmV3aW5kX2J5YCwgZXRjLikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb3IgYXNzaWduZWQgYmVmb3JlIHVzZS5cXG4tIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlICh2aWEgYGNvcHlfdG9fdXNlcmAsIGlvY3RsLCBuZXRsaW5rLCBldGMuKSBvciB1bmluaXRpYWxpemVkIHBhZGRpbmcvc3RydWN0IGZpZWxkcyBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLlxcblxcbkFueSBjb25jdXJyZW5jeSwgcmVmY291bnRpbmcsIG9yIGJvdW5kcyBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBhcmUgZnVsbHkgZGV0ZWN0YWJsZSBieSBzdGFuZGFyZCBkZWJ1ZyBidWlsZHMgKEtBU0FOLCBMT0NLREVQKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vvlb[1] Phase: Succeeded StartedAt: 2026-09-07 14:50:44 +0000 UTC FinishedAt: 2026-09-07 14:50:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 14:50:44 +0000 UTC FinishedAt: 2026-09-07 14:50:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2] Phase: Running StartedAt: 2026-09-07 14:50:44 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-09-07 14:50:44 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 14:50:44 +0000 UTC FinishedAt: 2026-09-07 14:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 14:50:44 +0000 UTC FinishedAt: 2026-09-07 14:50:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-convert-artifact-164247830/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 14:50:54 +0000 UTC FinishedAt: 2026-09-07 15:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 14:50:54 +0000 UTC FinishedAt: 2026-09-07 15:06:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ec6c1c8e-e76b-4588-8a1f-a267d0a870f6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-convert-artifact-164247830/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "68f0f839-b5eb-4581-ac79-f28379f9fe52", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-build-action-849701036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 14:50:54 +0000 UTC FinishedAt: 2026-09-07 15:06:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ec6c1c8e-e76b-4588-8a1f-a267d0a870f6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-convert-artifact-164247830/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "68f0f839-b5eb-4581-ac79-f28379f9fe52", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-build-action-849701036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 15:06:51 +0000 UTC FinishedAt: 2026-09-07 15:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 15:06:51 +0000 UTC FinishedAt: 2026-09-07 15:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 15:06:51 +0000 UTC FinishedAt: 2026-09-07 15:07:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 15:06:51 +0000 UTC FinishedAt: 2026-09-07 15:06:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-convert-artifact-3254466729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 15:07:01 +0000 UTC FinishedAt: 2026-09-07 15:09:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 15:07:01 +0000 UTC FinishedAt: 2026-09-07 15:08:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*68f0f839-b5eb-4581-ac79-f28379f9fe52,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-build-action-849701036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 15:09:01 +0000 UTC FinishedAt: 2026-09-07 15:09:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 15:09:01 +0000 UTC FinishedAt: 2026-09-07 15:09:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 15:09:01 +0000 UTC FinishedAt: 2026-09-07 15:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 15:09:01 +0000 UTC FinishedAt: 2026-09-07 15:25:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ec6c1c8e-e76b-4588-8a1f-a267d0a870f6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-convert-artifact-3254466729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5ee6f38e-dcc2-468e-8c32-36a59d0e01fd", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-build-action-815955333/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 15:09:01 +0000 UTC FinishedAt: 2026-09-07 15:24:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ec6c1c8e-e76b-4588-8a1f-a267d0a870f6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-convert-artifact-3254466729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "5ee6f38e-dcc2-468e-8c32-36a59d0e01fd", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-build-action-815955333/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 15:25:00 +0000 UTC FinishedAt: 2026-09-07 15:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 15:25:00 +0000 UTC FinishedAt: 2026-09-07 15:25:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 15:25:00 +0000 UTC FinishedAt: 2026-09-07 15:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 15:25:00 +0000 UTC FinishedAt: 2026-09-07 15:26:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5ee6f38e-dcc2-468e-8c32-36a59d0e01fd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-build-action-815955333/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Running StartedAt: 2026-09-07 15:27:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Running StartedAt: 2026-09-07 15:27:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*68f0f839-b5eb-4581-ac79-f28379f9fe52,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5ee6f38e-dcc2-468e-8c32-36a59d0e01fd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-build-action-849701036/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2vvlb/series-workflow2vvlb-build-action-815955333/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Running StartedAt: 2026-09-07 15:27:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Pending StartedAt: 2026-09-07 15:27:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 15:27:01 +0000 UTC FinishedAt: 2026-09-07 15:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 15:27:01 +0000 UTC FinishedAt: 2026-09-07 15:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2vvlb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs","net"],"focus_symbols":["rxrpc_send_data","rxrpc_do_sendmsg","rxrpc_kernel_send_data","rxrpc_recvmsg","rxrpc_notify_socket","rxrpc_poke_conn","rxrpc_preparse_xdr_yfs_rxgk","rxgk_init_connection_security","afs_make_call","afs_send_simple_reply","afs_send_empty_reply","afs_create_yfs_cm_token","rxperf_process_call"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["AF_RXRPC","AFS_FS","RXGK","RXPERF"],"series_id":"88a5cb11-a6ed-4bc5-9fd8-009791e242ce","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 15:27:01 +0000 UTC FinishedAt: 2026-09-07 15:27:01 +0000 UTC Input: nil Output: nil