Name: series-workflowl5nq4 Phase: Succeeded StartedAt: 2026-08-05 12:17:55 +0000 UTC FinishedAt: 2026-08-05 16:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[0] Phase: Succeeded StartedAt: 2026-08-05 12:17:55 +0000 UTC FinishedAt: 2026-08-05 12:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 12:17:55 +0000 UTC FinishedAt: 2026-08-05 12:21:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8ba098e6b6ff0db8edf28528d1552be261af30d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8ba098e6b6ff0db8edf28528d1552be261af30d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "abd45107-7f42-404f-9def-e50bce1ea092" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "update_userdata", "send_ext_msg_udp", "userdatum_value_store", "userdatum_drop", "netconsole_write_ext" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXBkYXRlX3VzZXJkYXRhJiMzNDssCiAgICAmIzM0O3NlbmRfZXh0X21zZ191ZHAmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX3ZhbHVlX3N0b3JlJiMzNDssCiAgICAmIzM0O3VzZXJkYXR1bV9kcm9wJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfd3JpdGVfZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBgdXNlcmRhdGFgIHBheWxvYWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyLiBJdCBtb2RpZmllcyBob3cgdXNlcmRhdGEgaXMgdXBkYXRlZCB2aWEgY29uZmlnZnMgYW5kIGhvdyBpdCBpcyByZWFkIGR1cmluZyBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jKSB0aGF0IHByZXZlbnRzIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgUkNVIGltcGxlbWVudGF0aW9uIGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgY3Jhc2hlcyB1bmRlciBjb25jdXJyZW50IGNvbmZpZ2ZzIHVwZGF0ZXMgYW5kIGNvbnNvbGUgd3JpdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWZmMTEwY2ZhMWU0YWE2NDlkYWFmMjViMGNiYTRjOWQ0MTgzYjRlN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTI6MTk6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5pbmRleCA4NjIwMDFkMDlhYTg0Li4xNDA5MmZiMTVmNmQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC0xMzUsMTMgJiM0MzsxMzUsMjcgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuIFx0U1RBVEVfREVBQ1RJVkFURUQsXG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXG4mIzQzOyAqIEByY3U6XHRVc2VkIHRvIGZyZWUgdGhlIHBheWxvYWQgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuXG4mIzQzOyAqIEBsZW5ndGg6XHRMZW5ndGggb2YgQGRhdGEsIGV4Y2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3IuXG4mIzQzOyAqIEBkYXRhOlx0Rm9ybWF0dGVkIFwmIzM0OyBrZXk9dmFsdWVcXG5cJiMzNDsgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEltbXV0YWJsZSBvbmNlIHB1Ymxpc2hlZCwgc28gdGhlIHRyYW5zbWl0IHBhdGggbmV2ZXIgb2JzZXJ2ZXMgQGRhdGEgYW5kXG4mIzQzOyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XG4mIzQzO1x0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbiYjNDM7XHRzaXplX3RcdFx0XHRsZW5ndGg7XG4mIzQzO1x0Y2hhclx0XHRcdGRhdGFbXTtcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuXG4gICogQGxpc3Q6XHRMaW5rcyB0aGlzIHRhcmdldCBpbnRvIHRoZSB0YXJnZXRfbGlzdC5cbiAgKiBAZ3JvdXA6XHRMaW5rcyB1cyBpbnRvIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0gaGllcmFyY2h5LlxuICAqIEB1c2VyZGF0YV9ncm91cDpcdExpbmtzIHRvIHRoZSB1c2VyZGF0YSBjb25maWdmcyBoaWVyYXJjaHlcbi0gKiBAdXNlcmRhdGE6XHRcdENhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmRcbi0gKiBAdXNlcmRhdGFfbGVuZ3RoOlx0U3RyaW5nIGxlbmd0aCBvZiB1c2VyZGF0YS5cbiYjNDM7ICogQHVzZXJkYXRhOlx0XHRDYWNoZWQsIGZvcm1hdHRlZCB1c2VyZGF0YSBwYXlsb2FkLiBSQ1UgcHJvdGVjdGVkLlxuICAqIEBzeXNkYXRhOlx0XHRDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kXG4gICogQHN5c2RhdGFfZmllbGRzOlx0U3lzZGF0YSBmZWF0dXJlcyBlbmFibGVkLlxuICAqIEBtc2djb3VudGVyOlx0TWVzc2FnZSBzZW50IGNvdW50ZXIuXG5AQCAtMTc2LDggJiM0MzsxOTAsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3RydWN0IGNvbmZpZ19ncm91cFx0Z3JvdXA7XG4gXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXHR1c2VyZGF0YV9ncm91cDtcbi1cdGNoYXJcdFx0XHQqdXNlcmRhdGE7XG4tXHRzaXplX3RcdFx0XHR1c2VyZGF0YV9sZW5ndGg7XG4mIzQzO1x0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgX19yY3UgKnVzZXJkYXRhO1xuIFx0Y2hhclx0XHRcdHN5c2RhdGFbTUFYX0VYVFJBREFUQV9FTlRSWV9MRU4gKiBNQVhfU1lTREFUQV9JVEVNU107XG4gXG4gXHQvKiBiaXQtd2lzZSB3aXRoIHN5c2RhdGFfZmVhdHVyZSBiaXRzICovXG5AQCAtMTA1OSwxMiAmIzQzOzEwNzIsMTEgQEAgc3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFxuIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpuZXcgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpvbGQ7XG4gXHRzdHJ1Y3QgdXNlcmRhdHVtICp1ZG1faXRlbTtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuLVx0Y2hhciAqb2xkX2J1ZiA9IE5VTEw7XG4tXHRjaGFyICpuZXdfYnVmID0gTlVMTDtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgb2Zmc2V0ID0gMDtcbiBcdGludCBsZW47XG4gXG5AQCAtMTA3Niw4ICYjNDM7MTA4OCw4IEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXG4gXHQvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyICovXG4gXHRpZiAobGVuKSB7XG4tXHRcdG5ld19idWYgPSBrbWFsbG9jKGxlbiAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbi1cdFx0aWYgKCFuZXdfYnVmKVxuJiM0MztcdFx0bmV3ID0ga21hbGxvY19mbGV4KCpuZXcsIGRhdGEsIGxlbiAmIzQzOyAxKTtcbiYjNDM7XHRcdGlmICghbmV3KVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuQEAgLTEwODcsMjIgJiM0MzsxMDk5LDIxIEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHVkbV9pdGVtID0gdG9fdXNlcmRhdHVtKGl0ZW0pO1xuIFx0XHQvKiBTa2lwIHVzZXJkYXRhIHdpdGggbm8gdmFsdWUgc2V0ICovXG4gXHRcdGlmICh1ZG1faXRlbS1cdTAwM2V2YWx1ZVswXSkge1xuLVx0XHRcdG9mZnNldCAmIzQzOz0gc2NucHJpbnRmKFx1MDAyNm5ld19idWZbb2Zmc2V0XSwgbGVuICYjNDM7IDEgLSBvZmZzZXQsXG4mIzQzO1x0XHRcdG9mZnNldCAmIzQzOz0gc2NucHJpbnRmKFx1MDAyNm5ldy1cdTAwM2VkYXRhW29mZnNldF0sXG4mIzQzO1x0XHRcdFx0XHQgICAgbGVuICYjNDM7IDEgLSBvZmZzZXQsXG4gXHRcdFx0XHRcdCAgICBcJiMzNDsgJXM9JXNcXG5cJiMzNDssIGl0ZW0tXHUwMDNlY2lfbmFtZSxcbiBcdFx0XHRcdFx0ICAgIHVkbV9pdGVtLVx1MDAzZXZhbHVlKTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0V0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pO1xuJiM0MztcdGlmIChuZXcpXG4mIzQzO1x0XHRuZXctXHUwMDNlbGVuZ3RoID0gb2Zmc2V0O1xuIFxuLVx0LyogU3dpdGNoIHRvIG5ldyBidWZmZXIgYW5kIGZyZWUgb2xkIGJ1ZmZlciAqL1xuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuLVx0b2xkX2J1ZiA9IG50LVx1MDAzZXVzZXJkYXRhO1xuLVx0bnQtXHUwMDNldXNlcmRhdGEgPSBuZXdfYnVmO1xuLVx0bnQtXHUwMDNldXNlcmRhdGFfbGVuZ3RoID0gb2Zmc2V0O1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XG4tXG4tXHRrZnJlZShvbGRfYnVmKTtcbiYjNDM7XHQvKiBXcml0ZXJzIGFyZSBzZXJpYWxpemVkIGJ5IGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleC4gKi9cbiYjNDM7XHRvbGQgPSByY3VfcmVwbGFjZV9wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhLCBuZXcsXG4mIzQzO1x0XHRcdFx0ICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZHluYW1pY19uZXRjb25zb2xlX211dGV4KSk7XG4mIzQzO1x0a2ZyZWVfcmN1KG9sZCwgcmN1KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMzkyLDcgJiM0MzsxNDAzLDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGtmcmVlKG50LVx1MDAzZXVzZXJkYXRhKTtcbiYjNDM7XHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtXHUwMDNldXNlcmRhdGEpKTtcbiBcdGtmcmVlKG50KTtcbiB9XG4gXG5AQCAtMTkyNiwxNCAmIzQzOzE5MzcsMTMgQEAgc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0XHRcdCAgICAgIGludCBtc2dfbGVuLFxuLVx0XHRcdFx0ICAgICAgaW50IHJlbGVhc2VfbGVuKVxuJiM0MztcdFx0XHRcdCAgICAgIGludCByZWxlYXNlX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXG4ge1xuLVx0Y29uc3QgY2hhciAqdXNlcmRhdGEgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqc3lzZGF0YSA9IE5VTEw7XG4gXHRjb25zdCBjaGFyICpyZWxlYXNlO1xuIFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHR1c2VyZGF0YSA9IG50LVx1MDAzZXVzZXJkYXRhO1xuIFx0c3lzZGF0YSA9IG50LVx1MDAzZXN5c2RhdGE7XG4gI2VuZGlmXG4gXG5AQCAtMTk1MCw3ICYjNDM7MTk2MCw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGlmICh1c2VyZGF0YSlcbiBcdFx0bXNnX2xlbiAmIzQzOz0gc2NucHJpbnRmKFx1MDAyNm50LVx1MDAzZWJ1Zlttc2dfbGVuXSxcbiBcdFx0XHRcdCAgICAgc2l6ZW9mKG50LVx1MDAzZWJ1ZikgLSBtc2dfbGVuLCBcJiMzNDslc1wmIzM0Oyxcbi1cdFx0XHRcdCAgICAgdXNlcmRhdGEpO1xuJiM0MztcdFx0XHRcdCAgICAgdXNlcmRhdGEtXHUwMDNlZGF0YSk7XG4gXG4gXHRpZiAoc3lzZGF0YSlcbiBcdFx0bXNnX2xlbiAmIzQzOz0gc2NucHJpbnRmKFx1MDAyNm50LVx1MDAzZWJ1Zlttc2dfbGVuXSxcbkBAIC0xOTcwLDcgJiM0MzsxOTgwLDggQEAgc3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxuLVx0XHRcdFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuKVxuJiM0MztcdFx0XHRcdCBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbiBcdGNvbnN0IGNoYXIgKnVzZXJkYXRhX3B0ciA9IE5VTEw7XG4gXHRjb25zdCBjaGFyICpzeXNkYXRhX3B0ciA9IE5VTEw7XG5AQCAtMTk4MSwxMiAmIzQzOzE5OTIsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xuIFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHR1c2VyZGF0YV9wdHIgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGFfcHRyID0gbnQtXHUwMDNlc3lzZGF0YTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbiAjZW5kaWZcbi1cdGlmIChXQVJOX09OX09OQ0UoIXVzZXJkYXRhX3B0ciBcdTAwMjZcdTAwMjYgdXNlcmRhdGFfbGVuICE9IDApKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0aWYgKHVzZXJkYXRhKSB7XG4mIzQzO1x0XHR1c2VyZGF0YV9wdHIgPSB1c2VyZGF0YS1cdTAwM2VkYXRhO1xuJiM0MztcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuJiM0MztcdH1cbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXN5c2RhdGFfcHRyIFx1MDAyNlx1MDAyNiBzeXNkYXRhX2xlbiAhPSAwKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTIwNjMsNyAmIzQzOzIwNzQsOCBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHRjb25zdCBjaGFyICptc2csXG4gXHRcdFx0XHRpbnQgbXNnX2xlbixcbiBcdFx0XHRcdGludCByZWxlYXNlX2xlbixcbi1cdFx0XHRcdGludCBzeXNkYXRhX2xlbilcbiYjNDM7XHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbiBcdGludCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbjtcbiBcdGNvbnN0IGNoYXIgKm1zZ2JvZHk7XG5AQCAtMjA5Miw3ICYjNDM7MjEwNCw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdCAqIHdpbGwgYmUgcmVwbGFjZWRcbiBcdCAqL1xuIFx0c2VuZF9mcmFnbWVudGVkX2JvZHkobnQsIG1zZ2JvZHksIGhlYWRlcl9sZW4sIG1zZ2JvZHlfbGVuLFxuLVx0XHRcdCAgICAgc3lzZGF0YV9sZW4pO1xuJiM0MztcdFx0XHQgICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gfVxuIFxuIC8qKlxuQEAgLTIxMDcsMjUgJiM0MzsyMTE5LDMzIEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSA9IE5VTEw7XG4gXHRpbnQgdXNlcmRhdGFfbGVuID0gMDtcbiBcdGludCByZWxlYXNlX2xlbiA9IDA7XG4gXHRpbnQgc3lzZGF0YV9sZW4gPSAwO1xuIFx0aW50IGxlbjtcbiBcbiYjNDM7XHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4gXHRzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpO1xuLVx0dXNlcmRhdGFfbGVuID0gbnQtXHUwMDNldXNlcmRhdGFfbGVuZ3RoO1xuJiM0MztcdHVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LVx1MDAzZXVzZXJkYXRhKTtcbiYjNDM7XHRpZiAodXNlcmRhdGEpXG4mIzQzO1x0XHR1c2VyZGF0YV9sZW4gPSB1c2VyZGF0YS1cdTAwM2VsZW5ndGg7XG4gI2VuZGlmXG4gXHRpZiAobnQtXHUwMDNlcmVsZWFzZSlcbiBcdFx0cmVsZWFzZV9sZW4gPSBzdHJsZW4oaW5pdF91dHNuYW1lKCktXHUwMDNlcmVsZWFzZSkgJiM0MzsgMTtcbiBcbiBcdGxlbiA9IHdjdHh0LVx1MDAzZWxlbiAmIzQzOyByZWxlYXNlX2xlbiAmIzQzOyBzeXNkYXRhX2xlbiAmIzQzOyB1c2VyZGF0YV9sZW47XG4gXHRpZiAobGVuIFx1MDAzYz0gTUFYX1BSSU5UX0NIVU5LKVxuLVx0XHRyZXR1cm4gc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtXHUwMDNlb3V0YnVmLFxuLVx0XHRcdFx0XHRcdCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuKTtcbiYjNDM7XHRcdHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVx1MDAzZW91dGJ1Ziwgd2N0eHQtXHUwMDNlbGVuLFxuJiM0MztcdFx0XHRcdFx0ICByZWxlYXNlX2xlbiwgdXNlcmRhdGEpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LVx1MDAzZW91dGJ1Ziwgd2N0eHQtXHUwMDNlbGVuLCByZWxlYXNlX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTtcbiBcbi1cdHJldHVybiBzZW5kX21zZ19mcmFnbWVudGVkKG50LCB3Y3R4dC1cdTAwM2VvdXRidWYsIHdjdHh0LVx1MDAzZWxlbiwgcmVsZWFzZV9sZW4sXG4tXHRcdFx0XHQgICBzeXNkYXRhX2xlbik7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5AQCAtMjM1Nyw3ICYjNDM7MjM3Nyw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSk7XG4gXHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuJiM0MztcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC1cdTAwM2V1c2VyZGF0YSkpO1xuICNlbmRpZlxuIFx0a2ZyZWUobnQpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuaW5kZXggYjU2YzcwYjdlMjc0Mi4uZjA2NzRjMDAxN2ZjNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbkBAIC0xMyw2ICYjNDM7MTMsNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRuZXRjb25zX3Jlc3VtZS5zaCBcXFxuIFx0bmV0Y29uc19zeXNkYXRhLnNoIFxcXG4gXHRuZXRjb25zX3RvcnR1cmUuc2ggXFxcbiYjNDM7XHRuZXRjb25zX3VzZXJkYXRhLnNoIFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xuIFxuIGluY2x1ZGUgLi4vLi4vLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTEzOTAzZjRjZTFjNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXG5AQCAtMCwwICYjNDM7MSwyMjkgQEBcbiYjNDM7IyEvdXNyL2Jpbi9lbnYgYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjIEV4ZXJjaXNlIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuXG4mIzQzOyNcbiYjNDM7IyBUaGUgZmlyc3QgcGFydCBjaGVja3MgdGhhdCB0aGUgcGF5bG9hZCB0aGUgdGFyZ2V0IHRyYW5zbWl0cyBmb2xsb3dzIHdoYXRcbiYjNDM7IyBjb25maWdmcyBzYXlzOiBhIHZhbHVlIHNob3dzIHVwIGluIHRoZSBuZXh0IG1lc3NhZ2UsIGFuIHVwZGF0ZSByZXBsYWNlcyB0aGVcbiYjNDM7IyBwcmV2aW91cyBvbmUsIGNsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnksIGFuZCBzbyBkb2VzIHJlbW92aW5nIHRoZVxuJiM0MzsjIGtleS5cbiYjNDM7I1xuJiM0MzsjIFRoZSBzZWNvbmQgcGFydCByZXdyaXRlcyB2YWx1ZXMsIGNyZWF0ZXMgYW5kIGRlbGV0ZXMga2V5cywgYW5kIGNsZWFycyB0aGVcbiYjNDM7IyBwYXlsb2FkIGVudGlyZWx5IHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBrZWVwc1xuJiM0MzsjIHBpY2tpbmcgdXAgcGF5bG9hZHMgdGhhdCBhcmUgYmVpbmcgcmVwbGFjZWQgdW5kZXJuZWF0aCBpdC4gSXQgcnVucyB0d2ljZSxcbiYjNDM7IyBvbmNlIHdpdGggYSBwYXlsb2FkIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYSBzaW5nbGUgcGFja2V0IGFuZCBvbmNlIGxhcmdlXG4mIzQzOyMgZW5vdWdoIHRvIGJlIGZyYWdtZW50ZWQuXG4mIzQzOyNcbiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuJiM0MztcbiYjNDM7c2V0IC1ldW8gcGlwZWZhaWxcbiYjNDM7XG4mIzQzO1NDUklQVERJUj0kKGRpcm5hbWUgXCYjMzQ7JChyZWFkbGluayAtZSBcJiMzNDske0JBU0hfU09VUkNFWzBdfVwmIzM0OylcJiMzNDspXG4mIzQzO1xuJiM0Mztzb3VyY2UgXCYjMzQ7JHtTQ1JJUFRESVJ9XCYjMzQ7Ly4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaFxuJiM0MztcbiYjNDM7IyBOdW1iZXIgb2YgdGltZXMgZWFjaCB0b3J0dXJlIHdvcmtlciBsb29wc1xuJiM0MztJVEVSQVRJT05TPSR7MTotMjAwfVxuJiM0MztcbiYjNDM7IyBLZXlzIG93bmVkIGJ5IGVhY2ggdG9ydHVyZSB3b3JrZXIuIFdvcmtlcnMgZG8gbm90IHNoYXJlIGtleXMsIHNvIGEgZmFpbGluZ1xuJiM0MzsjIGNvbmZpZ2ZzIG9wZXJhdGlvbiBtZWFucyBhIHJlYWwgcHJvYmxlbSBhbmQgbm90IGEgbG9zdCByYWNlLlxuJiM0MztDSFVSTl9LRVk9XCYjMzQ7Y2h1cm5rZXlcJiMzNDtcbiYjNDM7VFJBTlNJRU5UX0tFWT1cJiMzNDt0cmFuc2llbnRrZXlcJiMzNDtcbiYjNDM7IyBOdW1iZXIgb2Yga2V5cyB1c2VkIHRvIHB1c2ggYSBtZXNzYWdlIHBhc3QgTUFYX1BSSU5UX0NIVU5LXG4mIzQzO0JVTEtfS0VZUz04XG4mIzQzO1xuJiM0MztVU0VSREFUQV9ESVI9XCYjMzQ7JHtORVRDT05TX1BBVEh9L3VzZXJkYXRhXCYjMzQ7XG4mIzQzOyMgVmFsdWVzIGFyZSBjYXBwZWQgYXQgTUFYX0VYVFJBREFUQV9WQUxVRV9MRU4oMjAwKSBieXRlcywgc28gJHtCVUxLX0tFWVN9XG4mIzQzOyMgZW50cmllcyBvZiB0aGlzIHNpemUgYXJlIGVub3VnaCB0byBmb3JjZSBmcmFnbWVudGF0aW9uXG4mIzQzO0xPTkdfVkFMVUU9JChwcmludGYgLS0gJiMzOTt2JS4wcyYjMzk7IHsxLi4xOTB9KVxuJiM0MztcbiYjNDM7ZnVuY3Rpb24gd3JpdGVfa2V5KCkge1xuJiM0MztcdGxvY2FsIEtFWT1cJiMzNDskezF9XCYjMzQ7XG4mIzQzO1x0bG9jYWwgVkFMVUU9XCYjMzQ7JHsyfVwmIzM0O1xuJiM0MztcbiYjNDM7XHRta2RpciAtcCBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtLRVl9XCYjMzQ7XG4mIzQzO1x0ZWNobyBcJiMzNDske1ZBTFVFfVwmIzM0OyBcdTAwM2UgXCYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7S0VZfS92YWx1ZVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIFNlbmQgYSBzaW5nbGUgbWVzc2FnZSBhbmQgY2FwdHVyZSBpdCBvbiB0aGUgZGVzdGluYXRpb24gaW50ZXJmYWNlXG4mIzQzO2Z1bmN0aW9uIHNlbmRfYW5kX2NhcHR1cmUoKSB7XG4mIzQzO1x0cm0gLWYgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDtcbiYjNDM7XG4mIzQzO1x0bGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDI2XG4mIzQzO1x0d2FpdF9mb3JfcG9ydCBcJiMzNDske05BTUVTUEFDRX1cJiMzNDsgXCYjMzQ7JHtQT1JUfVwmIzM0OyBcJiMzNDske0lQX1ZFUlNJT059XCYjMzQ7XG4mIzQzO1x0ZWNobyBcJiMzNDske01TR306ICR7VEFSR0VUfVwmIzM0OyBcdTAwM2UgL2Rldi9rbXNnXG4mIzQzO1x0YnVzeXdhaXQgXCYjMzQ7JHtCVVNZV0FJVF9USU1FT1VUfVwmIzM0OyB0ZXN0IC1zIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7IHx8IHRydWVcbiYjNDM7XHRwa2lsbF9zb2NhdFxuJiM0MztcdHZhbGlkYXRlX21zZyBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztmdW5jdGlvbiBleHBlY3RfaW5fbXNnKCkge1xuJiM0MztcdGxvY2FsIFdBTlRFRD1cJiMzNDskezF9XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmICEgZ3JlcCAtcSAtLSBcJiMzNDske1dBTlRFRH1cJiMzNDsgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogJiMzOTske1dBTlRFRH0mIzM5OyBub3QgZm91bmQgaW4gJHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0Y2F0IFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7IFx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGV4aXQgXCYjMzQ7JHtrc2Z0X2ZhaWx9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZnVuY3Rpb24gZXhwZWN0X25vdF9pbl9tc2coKSB7XG4mIzQzO1x0bG9jYWwgVU5XQU5URUQ9XCYjMzQ7JHsxfVwmIzM0O1xuJiM0MztcbiYjNDM7XHRpZiBncmVwIC1xIC0tIFwmIzM0OyR7VU5XQU5URUR9XCYjMzQ7IFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6ICYjMzk7JHtVTldBTlRFRH0mIzM5OyBmb3VuZCBpbiAke09VVFBVVF9GSUxFfVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRjYXQgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZXhpdCBcJiMzNDske2tzZnRfZmFpbH1cJiMzNDtcbiYjNDM7XHRmaVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIEV2ZXJ5IHdyaXRlIHB1Ymxpc2hlcyBhIG5ldyBwYXlsb2FkIGFuZCBmcmVlcyB0aGUgcHJldmlvdXMgb25lLiBBbiBlbXB0eVxuJiM0MzsjIHZhbHVlIGlzIHNraXBwZWQgd2hlbiB0aGUgcGF5bG9hZCBpcyBmb3JtYXR0ZWQsIHNvIHRoaXMgYWxzbyBkcml2ZXMgdGhlXG4mIzQzOyMgdGFyZ2V0IHRocm91Z2ggaGF2aW5nIG5vIHBheWxvYWQgYXQgYWxsLlxuJiM0MztmdW5jdGlvbiBjaHVybl92YWx1ZSgpIHtcbiYjNDM7XHRsb2NhbCBpXG4mIzQzO1xuJiM0MztcdGZvciBpIGluICQoc2VxIFwmIzM0OyR7SVRFUkFUSU9OU31cJiMzNDspXG4mIzQzO1x0ZG9cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7dmFsdWUke2l9XCYjMzQ7IFx1MDAzZSBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXCYjMzQ7XG4mIzQzO1x0XHRlY2hvIFx1MDAzZSBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIENyZWF0ZSBhbmQgZGVsZXRlIGEga2V5IHVuZGVybmVhdGggdGhlIHNlbmRlclxuJiM0MztmdW5jdGlvbiBjaHVybl9rZXkoKSB7XG4mIzQzO1x0bG9jYWwgaVxuJiM0MztcbiYjNDM7XHRmb3IgaSBpbiAkKHNlcSBcJiMzNDske0lURVJBVElPTlN9XCYjMzQ7KVxuJiM0MztcdGRvXG4mIzQzO1x0XHRta2RpciBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVwmIzM0O1xuJiM0MztcdFx0ZWNobyBcJiMzNDt0cmFuc2llbnQke2l9XCYjMzQ7IFx1MDAzZSBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfS92YWx1ZVwmIzM0O1xuJiM0MztcdFx0cm1kaXIgXCYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX1cJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgS2VlcCB0aGUgdHJhbnNtaXQgcGF0aCBidXN5IHdoaWxlIHRoZSBwYXlsb2FkIGlzIGJlaW5nIHJlcGxhY2VkXG4mIzQzO2Z1bmN0aW9uIHNlbmRfbWVzc2FnZXMoKSB7XG4mIzQzO1x0bG9jYWwgaVxuJiM0MztcbiYjNDM7XHRmb3IgaSBpbiAkKHNlcSBcJiMzNDske0lURVJBVElPTlN9XCYjMzQ7KVxuJiM0MztcdGRvXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyR7TVNHfTogJHtUQVJHRVR9ICR7aX1cJiMzNDsgXHUwMDNlIC9kZXYva21zZ1xuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBSdW4gdGhlIHdvcmtlcnMgY29uY3VycmVudGx5IGFuZCBmYWlsIGlmIGFueSBvZiB0aGVtIGhpdHMgYW4gZXJyb3JcbiYjNDM7ZnVuY3Rpb24gcnVuX3dvcmtlcnMoKSB7XG4mIzQzO1x0bG9jYWwgUElEUz0oKVxuJiM0MztcdGxvY2FsIFdPUktFUlxuJiM0MztcdGxvY2FsIFJFVD0wXG4mIzQzO1x0bG9jYWwgUElEXG4mIzQzO1xuJiM0MztcdGZvciBXT1JLRVIgaW4gXCYjMzQ7JEBcJiMzNDtcbiYjNDM7XHRkb1xuJiM0MztcdFx0XCYjMzQ7JHtXT1JLRVJ9XCYjMzQ7IFx1MDAyNlxuJiM0MztcdFx0UElEUyYjNDM7PShcJiMzNDskIVwmIzM0OylcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdCMgUmVhcCBldmVyeSB3b3JrZXIgYmVmb3JlIHJlcG9ydGluZyBhIGZhaWx1cmUsIG90aGVyd2lzZSBhIHN1cnZpdmluZ1xuJiM0MztcdCMgd29ya2VyIGtlZXBzIHdyaXRpbmcgdG8gY29uZmlnZnMgd2hpbGUgdGhlIGV4aXQgdHJhcCBjbGVhbnMgaXQgdXAuXG4mIzQzO1x0Zm9yIFBJRCBpbiBcJiMzNDske1BJRFNbQF19XCYjMzQ7XG4mIzQzO1x0ZG9cbiYjNDM7XHRcdHdhaXQgXCYjMzQ7JHtQSUR9XCYjMzQ7IHx8IFJFVD0xXG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRpZiBbWyBcJiMzNDske1JFVH1cJiMzNDsgLW5lIDAgXV1cbiYjNDM7XHR0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IHVzZXJkYXRhIHRvcnR1cmUgd29ya2VyIGZhaWxlZFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IFwmIzM0OyR7a3NmdF9mYWlsfVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO2Z1bmN0aW9uIGNyZWF0ZV9idWxrX2tleXMoKSB7XG4mIzQzO1x0bG9jYWwgaVxuJiM0MztcbiYjNDM7XHRmb3IgaSBpbiAkKHNlcSBcJiMzNDske0JVTEtfS0VZU31cJiMzNDspXG4mIzQzO1x0ZG9cbiYjNDM7XHRcdHdyaXRlX2tleSBcJiMzNDtidWxrJHtpfVwmIzM0OyBcJiMzNDske0xPTkdfVkFMVUV9XCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztmdW5jdGlvbiBkZWxldGVfYnVsa19rZXlzKCkge1xuJiM0MztcdGxvY2FsIGlcbiYjNDM7XG4mIzQzO1x0Zm9yIGkgaW4gJChzZXEgXCYjMzQ7JHtCVUxLX0tFWVN9XCYjMzQ7KVxuJiM0MztcdGRvXG4mIzQzO1x0XHRybWRpciBcJiMzNDske1VTRVJEQVRBX0RJUn0vYnVsayR7aX1cJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PSAjXG4mIzQzOyMgU3RhcnQgaGVyZSAjXG4mIzQzOyMgPT09PT09PT09PSAjXG4mIzQzO1xuJiM0Mzttb2Rwcm9iZSBuZXRkZXZzaW0gMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuJiM0Mzttb2Rwcm9iZSBuZXRjb25zb2xlIDJcdTAwM2UgL2Rldi9udWxsIHx8IHRydWVcbiYjNDM7XG4mIzQzO0lQX1ZFUlNJT049XCYjMzQ7aXB2NFwmIzM0O1xuJiM0MzsjIFRoZSBjb250ZW50IG9mIGttc2cgd2lsbCBiZSBzYXZlZCB0byB0aGUgZm9sbG93aW5nIGZpbGVcbiYjNDM7T1VUUFVUX0ZJTEU9XCYjMzQ7L3RtcC8ke1RBUkdFVH1cJiMzNDtcbiYjNDM7XG4mIzQzOyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxuJiM0MztjaGVja19mb3JfZGVwZW5kZW5jaWVzXG4mIzQzOyMgU2V0IGN1cnJlbnQgbG9nbGV2ZWwgdG8gS0VSTl9JTkZPKDYpLCBhbmQgZGVmYXVsdCB0byBLRVJOX05PVElDRSg1KVxuJiM0MztlY2hvIFwmIzM0OzYgNVwmIzM0OyBcdTAwM2UgL3Byb2Mvc3lzL2tlcm5lbC9wcmludGtcbiYjNDM7IyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdFxuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MzsjIENyZWF0ZSBvbmUgbmFtZXNwYWNlIGFuZCB0d28gaW50ZXJmYWNlc1xuJiM0MztzZXRfbmV0d29yayBcJiMzNDske0lQX1ZFUlNJT059XCYjMzQ7XG4mIzQzOyMgQ3JlYXRlIGEgZHluYW1pYyB0YXJnZXQgZm9yIG5ldGNvbnNvbGVcbiYjNDM7Y3JlYXRlX2R5bmFtaWNfdGFyZ2V0XG4mIzQzO1xuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsjIFRFU1QgIzFcbiYjNDM7IyBBIHZhbHVlIHdyaXR0ZW4gdG8gY29uZmlnZnMgcmVhY2hlcyB0aGUgZGVzdGluYXRpb25cbiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7d3JpdGVfa2V5IFwmIzM0OyR7VVNFUkRBVEFfS0VZfVwmIzM0OyBcJiMzNDtmaXJzdFwmIzM0O1xuJiM0MztzZW5kX2FuZF9jYXB0dXJlXG4mIzQzO2V4cGVjdF9pbl9tc2cgXCYjMzQ7JHtVU0VSREFUQV9LRVl9PWZpcnN0XCYjMzQ7XG4mIzQzO1xuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsjIFRFU1QgIzJcbiYjNDM7IyBVcGRhdGluZyB0aGUgdmFsdWUgcmVwbGFjZXMgdGhlIHByZXZpb3VzIHBheWxvYWRcbiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7d3JpdGVfa2V5IFwmIzM0OyR7VVNFUkRBVEFfS0VZfVwmIzM0OyBcJiMzNDtzZWNvbmRcJiMzNDtcbiYjNDM7c2VuZF9hbmRfY2FwdHVyZVxuJiM0MztleHBlY3RfaW5fbXNnIFwmIzM0OyR7VVNFUkRBVEFfS0VZfT1zZWNvbmRcJiMzNDtcbiYjNDM7ZXhwZWN0X25vdF9pbl9tc2cgXCYjMzQ7JHtVU0VSREFUQV9LRVl9PWZpcnN0XCYjMzQ7XG4mIzQzO1xuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsjIFRFU1QgIzNcbiYjNDM7IyBDbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO2VjaG8gXHUwMDNlIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX0vdmFsdWVcJiMzNDtcbiYjNDM7c2VuZF9hbmRfY2FwdHVyZVxuJiM0MztleHBlY3Rfbm90X2luX21zZyBcJiMzNDske1VTRVJEQVRBX0tFWX09XCYjMzQ7XG4mIzQzO1xuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsjIFRFU1QgIzRcbiYjNDM7IyBSZW1vdmluZyB0aGUga2V5IGRyb3BzIHRoZSBlbnRyeVxuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0Mzt3cml0ZV9rZXkgXCYjMzQ7JHtVU0VSREFUQV9LRVl9XCYjMzQ7IFwmIzM0O3RoaXJkXCYjMzQ7XG4mIzQzO3JtZGlyIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX1cJiMzNDtcbiYjNDM7c2VuZF9hbmRfY2FwdHVyZVxuJiM0MztleHBlY3Rfbm90X2luX21zZyBcJiMzNDske1VTRVJEQVRBX0tFWX09XCYjMzQ7XG4mIzQzO3JtIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7XG4mIzQzO1xuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsjIFRFU1QgIzVcbiYjNDM7IyBUb3J0dXJlIHRoZSBwYXlsb2FkIHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LFxuJiM0MzsjIGZpcnN0IHVuZnJhZ21lbnRlZCBhbmQgdGhlbiBmcmFnbWVudGVkXG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO3dyaXRlX2tleSBcJiMzNDske0NIVVJOX0tFWX1cJiMzNDsgXCYjMzQ7JHtVU0VSREFUQV9WQUxVRX1cJiMzNDtcbiYjNDM7cnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXNcbiYjNDM7XG4mIzQzO2NyZWF0ZV9idWxrX2tleXNcbiYjNDM7cnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXNcbiYjNDM7ZGVsZXRlX2J1bGtfa2V5c1xuJiM0MztcbiYjNDM7ZXhpdCBcJiMzNDske2tzZnRfcGFzc31cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1cGRhdGVfdXNlcmRhdGEmIzM0OywKICAgICYjMzQ7c2VuZF9leHRfbXNnX3VkcCYjMzQ7LAogICAgJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX2Ryb3AmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV93cml0ZV9leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIGB1c2VyZGF0YWAgcGF5bG9hZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEl0IG1vZGlmaWVzIGhvdyB1c2VyZGF0YSBpcyB1cGRhdGVkIHZpYSBjb25maWdmcyBhbmQgaG93IGl0IGlzIHJlYWQgZHVyaW5nIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMpIHRoYXQgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24gaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBjcmFzaGVzIHVuZGVyIGNvbmN1cnJlbnQgY29uZmlnZnMgdXBkYXRlcyBhbmQgY29uc29sZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZmYxMTBjZmExZTRhYTY0OWRhYWYyNWIwY2JhNGM5ZDQxODNiNGU3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAxMjoxOTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwppbmRleCA4NjIwMDFkMDlhYTg0Li4xNDA5MmZiMTVmNmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCkBAIC0xMzUsMTMgJiM0MzsxMzUsMjcgQEAgZW51bSB0YXJnZXRfc3RhdGUgewogCVNUQVRFX0RFQUNUSVZBVEVELAogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuCiYjNDM7ICogQHJjdToJVXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgomIzQzOyAqIEBsZW5ndGg6CUxlbmd0aCBvZiBAZGF0YSwgZXhjbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvci4KJiM0MzsgKiBAZGF0YToJRm9ybWF0dGVkICYjMzQ7IGtleT12YWx1ZVxuJiMzNDsgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuCiYjNDM7ICoKJiM0MzsgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZAomIzQzOyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuCiYjNDM7ICovCiYjNDM7c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgewomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKJiM0MzsJc2l6ZV90CQkJbGVuZ3RoOwomIzQzOwljaGFyCQkJZGF0YVtdOwomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LgogICogQGxpc3Q6CUxpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LgogICogQGdyb3VwOglMaW5rcyB1cyBpbnRvIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0gaGllcmFyY2h5LgogICogQHVzZXJkYXRhX2dyb3VwOglMaW5rcyB0byB0aGUgdXNlcmRhdGEgY29uZmlnZnMgaGllcmFyY2h5Ci0gKiBAdXNlcmRhdGE6CQlDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kCi0gKiBAdXNlcmRhdGFfbGVuZ3RoOglTdHJpbmcgbGVuZ3RoIG9mIHVzZXJkYXRhLgomIzQzOyAqIEB1c2VyZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQuIFJDVSBwcm90ZWN0ZWQuCiAgKiBAc3lzZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmQKICAqIEBzeXNkYXRhX2ZpZWxkczoJU3lzZGF0YSBmZWF0dXJlcyBlbmFibGVkLgogICogQG1zZ2NvdW50ZXI6CU1lc3NhZ2Ugc2VudCBjb3VudGVyLgpAQCAtMTc2LDggJiM0MzsxOTAsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgewogI2lmZGVmCUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwCWdyb3VwOwogCXN0cnVjdCBjb25maWdfZ3JvdXAJdXNlcmRhdGFfZ3JvdXA7Ci0JY2hhcgkJCSp1c2VyZGF0YTsKLQlzaXplX3QJCQl1c2VyZGF0YV9sZW5ndGg7CiYjNDM7CXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIF9fcmN1ICp1c2VyZGF0YTsKIAljaGFyCQkJc3lzZGF0YVtNQVhfRVhUUkFEQVRBX0VOVFJZX0xFTiAqIE1BWF9TWVNEQVRBX0lURU1TXTsKIAogCS8qIGJpdC13aXNlIHdpdGggc3lzZGF0YV9mZWF0dXJlIGJpdHMgKi8KQEAgLTEwNTksMTIgJiM0MzsxMDcyLDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAogc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKJiM0MzsJc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm5ldyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpvbGQ7CiAJc3RydWN0IHVzZXJkYXR1bSAqdWRtX2l0ZW07CiAJc3RydWN0IGNvbmZpZ19pdGVtICppdGVtOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwotCWNoYXIgKm9sZF9idWYgPSBOVUxMOwotCWNoYXIgKm5ld19idWYgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9mZnNldCA9IDA7CiAJaW50IGxlbjsKIApAQCAtMTA3Niw4ICYjNDM7MTA4OCw4IEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAKIAkvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyICovCiAJaWYgKGxlbikgewotCQluZXdfYnVmID0ga21hbGxvYyhsZW4gJiM0MzsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmV3X2J1ZikKJiM0MzsJCW5ldyA9IGttYWxsb2NfZmxleCgqbmV3LCBkYXRhLCBsZW4gJiM0MzsgMSk7CiYjNDM7CQlpZiAoIW5ldykKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTA4NywyMiAmIzQzOzEwOTksMjEgQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAkJdWRtX2l0ZW0gPSB0b191c2VyZGF0dW0oaXRlbSk7CiAJCS8qIFNraXAgdXNlcmRhdGEgd2l0aCBubyB2YWx1ZSBzZXQgKi8KIAkJaWYgKHVkbV9pdGVtLSZndDt2YWx1ZVswXSkgewotCQkJb2Zmc2V0ICYjNDM7PSBzY25wcmludGYoJmFtcDtuZXdfYnVmW29mZnNldF0sIGxlbiAmIzQzOyAxIC0gb2Zmc2V0LAomIzQzOwkJCW9mZnNldCAmIzQzOz0gc2NucHJpbnRmKCZhbXA7bmV3LSZndDtkYXRhW29mZnNldF0sCiYjNDM7CQkJCQkgICAgbGVuICYjNDM7IDEgLSBvZmZzZXQsCiAJCQkJCSAgICAmIzM0OyAlcz0lc1xuJiMzNDssIGl0ZW0tJmd0O2NpX25hbWUsCiAJCQkJCSAgICB1ZG1faXRlbS0mZ3Q7dmFsdWUpOwogCQl9CiAJfQogCiAJV0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pOwomIzQzOwlpZiAobmV3KQomIzQzOwkJbmV3LSZndDtsZW5ndGggPSBvZmZzZXQ7CiAKLQkvKiBTd2l0Y2ggdG8gbmV3IGJ1ZmZlciBhbmQgZnJlZSBvbGQgYnVmZmVyICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7Ci0Jb2xkX2J1ZiA9IG50LSZndDt1c2VyZGF0YTsKLQludC0mZ3Q7dXNlcmRhdGEgPSBuZXdfYnVmOwotCW50LSZndDt1c2VyZGF0YV9sZW5ndGggPSBvZmZzZXQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3RhcmdldF9saXN0X2xvY2ssIGZsYWdzKTsKLQotCWtmcmVlKG9sZF9idWYpOwomIzQzOwkvKiBXcml0ZXJzIGFyZSBzZXJpYWxpemVkIGJ5IGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleC4gKi8KJiM0MzsJb2xkID0gcmN1X3JlcGxhY2VfcG9pbnRlcihudC0mZ3Q7dXNlcmRhdGEsIG5ldywKJiM0MzsJCQkJICBsb2NrZGVwX2lzX2hlbGQoJmFtcDtkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpKTsKJiM0MzsJa2ZyZWVfcmN1KG9sZCwgcmN1KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM5Miw3ICYjNDM7MTQwMyw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlrZnJlZShudC0mZ3Q7dXNlcmRhdGEpOwomIzQzOwlrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtJmd0O3VzZXJkYXRhKSk7CiAJa2ZyZWUobnQpOwogfQogCkBAIC0xOTI2LDE0ICYjNDM7MTkzNywxMyBAQCBzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pCiBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJCQkJICAgICAgY29uc3QgY2hhciAqbXNnLAogCQkJCSAgICAgIGludCBtc2dfbGVuLAotCQkJCSAgICAgIGludCByZWxlYXNlX2xlbikKJiM0MzsJCQkJICAgICAgaW50IHJlbGVhc2VfbGVuLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpCiB7Ci0JY29uc3QgY2hhciAqdXNlcmRhdGEgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnJlbGVhc2U7CiAKICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDCi0JdXNlcmRhdGEgPSBudC0mZ3Q7dXNlcmRhdGE7CiAJc3lzZGF0YSA9IG50LSZndDtzeXNkYXRhOwogI2VuZGlmCiAKQEAgLTE5NTAsNyAmIzQzOzE5NjAsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJaWYgKHVzZXJkYXRhKQogCQltc2dfbGVuICYjNDM7PSBzY25wcmludGYoJmFtcDtudC0mZ3Q7YnVmW21zZ19sZW5dLAogCQkJCSAgICAgc2l6ZW9mKG50LSZndDtidWYpIC0gbXNnX2xlbiwgJiMzNDslcyYjMzQ7LAotCQkJCSAgICAgdXNlcmRhdGEpOwomIzQzOwkJCQkgICAgIHVzZXJkYXRhLSZndDtkYXRhKTsKIAogCWlmIChzeXNkYXRhKQogCQltc2dfbGVuICYjNDM7PSBzY25wcmludGYoJmFtcDtudC0mZ3Q7YnVmW21zZ19sZW5dLApAQCAtMTk3MCw3ICYjNDM7MTk4MCw4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZF9yZWxlYXNlKGNoYXIgKmJ1ZikKIAogc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQkgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLAotCQkJCSBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbikKJiM0MzsJCQkJIGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuLAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKQogewogCWNvbnN0IGNoYXIgKnVzZXJkYXRhX3B0ciA9IE5VTEw7CiAJY29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMOwpAQCAtMTk4MSwxMiAmIzQzOzE5OTIsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAlpbnQgdXNlcmRhdGFfbGVuID0gMDsKIAogI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKLQl1c2VyZGF0YV9wdHIgPSBudC0mZ3Q7dXNlcmRhdGE7CiAJc3lzZGF0YV9wdHIgPSBudC0mZ3Q7c3lzZGF0YTsKLQl1c2VyZGF0YV9sZW4gPSBudC0mZ3Q7dXNlcmRhdGFfbGVuZ3RoOwogI2VuZGlmCi0JaWYgKFdBUk5fT05fT05DRSghdXNlcmRhdGFfcHRyICZhbXA7JmFtcDsgdXNlcmRhdGFfbGVuICE9IDApKQotCQlyZXR1cm47CiYjNDM7CWlmICh1c2VyZGF0YSkgewomIzQzOwkJdXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtJmd0O2RhdGE7CiYjNDM7CQl1c2VyZGF0YV9sZW4gPSB1c2VyZGF0YS0mZ3Q7bGVuZ3RoOwomIzQzOwl9CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFzeXNkYXRhX3B0ciAmYW1wOyZhbXA7IHN5c2RhdGFfbGVuICE9IDApKQogCQlyZXR1cm47CkBAIC0yMDYzLDcgJiM0MzsyMDc0LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCQkJCWNvbnN0IGNoYXIgKm1zZywKIAkJCQlpbnQgbXNnX2xlbiwKIAkJCQlpbnQgcmVsZWFzZV9sZW4sCi0JCQkJaW50IHN5c2RhdGFfbGVuKQomIzQzOwkJCQlpbnQgc3lzZGF0YV9sZW4sCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSkKIHsKIAlpbnQgaGVhZGVyX2xlbiwgbXNnYm9keV9sZW47CiAJY29uc3QgY2hhciAqbXNnYm9keTsKQEAgLTIwOTIsNyAmIzQzOzIxMDQsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJICogd2lsbCBiZSByZXBsYWNlZAogCSAqLwogCXNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbiwKLQkJCSAgICAgc3lzZGF0YV9sZW4pOwomIzQzOwkJCSAgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTsKIH0KIAogLyoqCkBAIC0yMTA3LDI1ICYjNDM7MjExOSwzMyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiBzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJCQkgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCkKIHsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhID0gTlVMTDsKIAlpbnQgdXNlcmRhdGFfbGVuID0gMDsKIAlpbnQgcmVsZWFzZV9sZW4gPSAwOwogCWludCBzeXNkYXRhX2xlbiA9IDA7CiAJaW50IGxlbjsKIAomIzQzOwkvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi8KJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwogI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKIAlzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpOwotCXVzZXJkYXRhX2xlbiA9IG50LSZndDt1c2VyZGF0YV9sZW5ndGg7CiYjNDM7CXVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LSZndDt1c2VyZGF0YSk7CiYjNDM7CWlmICh1c2VyZGF0YSkKJiM0MzsJCXVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLSZndDtsZW5ndGg7CiAjZW5kaWYKIAlpZiAobnQtJmd0O3JlbGVhc2UpCiAJCXJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLSZndDtyZWxlYXNlKSAmIzQzOyAxOwogCiAJbGVuID0gd2N0eHQtJmd0O2xlbiAmIzQzOyByZWxlYXNlX2xlbiAmIzQzOyBzeXNkYXRhX2xlbiAmIzQzOyB1c2VyZGF0YV9sZW47CiAJaWYgKGxlbiAmbHQ7PSBNQVhfUFJJTlRfQ0hVTkspCi0JCXJldHVybiBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKG50LCB3Y3R4dC0mZ3Q7b3V0YnVmLAotCQkJCQkJIHdjdHh0LSZndDtsZW4sIHJlbGVhc2VfbGVuKTsKJiM0MzsJCXNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LSZndDtvdXRidWYsIHdjdHh0LSZndDtsZW4sCiYjNDM7CQkJCQkgIHJlbGVhc2VfbGVuLCB1c2VyZGF0YSk7CiYjNDM7CWVsc2UKJiM0MzsJCXNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LSZndDtvdXRidWYsIHdjdHh0LSZndDtsZW4sIHJlbGVhc2VfbGVuLAomIzQzOwkJCQkgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTsKIAotCXJldHVybiBzZW5kX21zZ19mcmFnbWVudGVkKG50LCB3Y3R4dC0mZ3Q7b3V0YnVmLCB3Y3R4dC0mZ3Q7bGVuLCByZWxlYXNlX2xlbiwKLQkJCQkgICBzeXNkYXRhX2xlbik7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLApAQCAtMjM1Nyw3ICYjNDM7MjM3Nyw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO250LSZndDtyZXN1bWVfd3EpOwogCW5ldHBvbGxfY2xlYW51cCgmYW1wO250LSZndDtucCk7CiAjaWZkZWYJQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwotCWtmcmVlKG50LSZndDt1c2VyZGF0YSk7CiYjNDM7CWtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC0mZ3Q7dXNlcmRhdGEpKTsKICNlbmRpZgogCWtmcmVlKG50KTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlCmluZGV4IGI1NmM3MGI3ZTI3NDIuLmYwNjc0YzAwMTdmYzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZQpAQCAtMTMsNiAmIzQzOzEzLDcgQEAgVEVTVF9QUk9HUyA6PSBcCiAJbmV0Y29uc19yZXN1bWUuc2ggXAogCW5ldGNvbnNfc3lzZGF0YS5zaCBcCiAJbmV0Y29uc190b3J0dXJlLnNoIFwKJiM0MzsJbmV0Y29uc191c2VyZGF0YS5zaCBcCiAjIGVuZCBvZiBURVNUX1BST0dTCiAKIGluY2x1ZGUgLi4vLi4vLi4vbGliLm1rCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTEzOTAzZjRjZTFjNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaApAQCAtMCwwICYjNDM7MSwyMjkgQEAKJiM0MzsjIS91c3IvYmluL2VudiBiYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyMgRXhlcmNpc2UgdGhlIG5ldGNvbnNvbGUgdXNlcmRhdGEgcGF5bG9hZC4KJiM0MzsjCiYjNDM7IyBUaGUgZmlyc3QgcGFydCBjaGVja3MgdGhhdCB0aGUgcGF5bG9hZCB0aGUgdGFyZ2V0IHRyYW5zbWl0cyBmb2xsb3dzIHdoYXQKJiM0MzsjIGNvbmZpZ2ZzIHNheXM6IGEgdmFsdWUgc2hvd3MgdXAgaW4gdGhlIG5leHQgbWVzc2FnZSwgYW4gdXBkYXRlIHJlcGxhY2VzIHRoZQomIzQzOyMgcHJldmlvdXMgb25lLCBjbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5LCBhbmQgc28gZG9lcyByZW1vdmluZyB0aGUKJiM0MzsjIGtleS4KJiM0MzsjCiYjNDM7IyBUaGUgc2Vjb25kIHBhcnQgcmV3cml0ZXMgdmFsdWVzLCBjcmVhdGVzIGFuZCBkZWxldGVzIGtleXMsIGFuZCBjbGVhcnMgdGhlCiYjNDM7IyBwYXlsb2FkIGVudGlyZWx5IHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBrZWVwcwomIzQzOyMgcGlja2luZyB1cCBwYXlsb2FkcyB0aGF0IGFyZSBiZWluZyByZXBsYWNlZCB1bmRlcm5lYXRoIGl0LiBJdCBydW5zIHR3aWNlLAomIzQzOyMgb25jZSB3aXRoIGEgcGF5bG9hZCBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGEgc2luZ2xlIHBhY2tldCBhbmQgb25jZSBsYXJnZQomIzQzOyMgZW5vdWdoIHRvIGJlIGZyYWdtZW50ZWQuCiYjNDM7IwomIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOwomIzQzO3NldCAtZXVvIHBpcGVmYWlsCiYjNDM7CiYjNDM7U0NSSVBURElSPSQoZGlybmFtZSAmIzM0OyQocmVhZGxpbmsgLWUgJiMzNDske0JBU0hfU09VUkNFWzBdfSYjMzQ7KSYjMzQ7KQomIzQzOwomIzQzO3NvdXJjZSAmIzM0OyR7U0NSSVBURElSfSYjMzQ7Ly4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaAomIzQzOwomIzQzOyMgTnVtYmVyIG9mIHRpbWVzIGVhY2ggdG9ydHVyZSB3b3JrZXIgbG9vcHMKJiM0MztJVEVSQVRJT05TPSR7MTotMjAwfQomIzQzOwomIzQzOyMgS2V5cyBvd25lZCBieSBlYWNoIHRvcnR1cmUgd29ya2VyLiBXb3JrZXJzIGRvIG5vdCBzaGFyZSBrZXlzLCBzbyBhIGZhaWxpbmcKJiM0MzsjIGNvbmZpZ2ZzIG9wZXJhdGlvbiBtZWFucyBhIHJlYWwgcHJvYmxlbSBhbmQgbm90IGEgbG9zdCByYWNlLgomIzQzO0NIVVJOX0tFWT0mIzM0O2NodXJua2V5JiMzNDsKJiM0MztUUkFOU0lFTlRfS0VZPSYjMzQ7dHJhbnNpZW50a2V5JiMzNDsKJiM0MzsjIE51bWJlciBvZiBrZXlzIHVzZWQgdG8gcHVzaCBhIG1lc3NhZ2UgcGFzdCBNQVhfUFJJTlRfQ0hVTksKJiM0MztCVUxLX0tFWVM9OAomIzQzOwomIzQzO1VTRVJEQVRBX0RJUj0mIzM0OyR7TkVUQ09OU19QQVRIfS91c2VyZGF0YSYjMzQ7CiYjNDM7IyBWYWx1ZXMgYXJlIGNhcHBlZCBhdCBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTigyMDApIGJ5dGVzLCBzbyAke0JVTEtfS0VZU30KJiM0MzsjIGVudHJpZXMgb2YgdGhpcyBzaXplIGFyZSBlbm91Z2ggdG8gZm9yY2UgZnJhZ21lbnRhdGlvbgomIzQzO0xPTkdfVkFMVUU9JChwcmludGYgLS0gJiMzOTt2JS4wcyYjMzk7IHsxLi4xOTB9KQomIzQzOwomIzQzO2Z1bmN0aW9uIHdyaXRlX2tleSgpIHsKJiM0MzsJbG9jYWwgS0VZPSYjMzQ7JHsxfSYjMzQ7CiYjNDM7CWxvY2FsIFZBTFVFPSYjMzQ7JHsyfSYjMzQ7CiYjNDM7CiYjNDM7CW1rZGlyIC1wICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7S0VZfSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDske1ZBTFVFfSYjMzQ7ICZndDsgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtLRVl9L3ZhbHVlJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7IyBTZW5kIGEgc2luZ2xlIG1lc3NhZ2UgYW5kIGNhcHR1cmUgaXQgb24gdGhlIGRlc3RpbmF0aW9uIGludGVyZmFjZQomIzQzO2Z1bmN0aW9uIHNlbmRfYW5kX2NhcHR1cmUoKSB7CiYjNDM7CXJtIC1mICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzOwlsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmFtcDsKJiM0MzsJd2FpdF9mb3JfcG9ydCAmIzM0OyR7TkFNRVNQQUNFfSYjMzQ7ICYjMzQ7JHtQT1JUfSYjMzQ7ICYjMzQ7JHtJUF9WRVJTSU9OfSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDske01TR306ICR7VEFSR0VUfSYjMzQ7ICZndDsgL2Rldi9rbXNnCiYjNDM7CWJ1c3l3YWl0ICYjMzQ7JHtCVVNZV0FJVF9USU1FT1VUfSYjMzQ7IHRlc3QgLXMgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7IHx8IHRydWUKJiM0MzsJcGtpbGxfc29jYXQKJiM0MzsJdmFsaWRhdGVfbXNnICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBleHBlY3RfaW5fbXNnKCkgewomIzQzOwlsb2NhbCBXQU5URUQ9JiMzNDskezF9JiMzNDsKJiM0MzsKJiM0MzsJaWYgISBncmVwIC1xIC0tICYjMzQ7JHtXQU5URUR9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJiMzOTske1dBTlRFRH0mIzM5OyBub3QgZm91bmQgaW4gJHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQljYXQgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBleHBlY3Rfbm90X2luX21zZygpIHsKJiM0MzsJbG9jYWwgVU5XQU5URUQ9JiMzNDskezF9JiMzNDsKJiM0MzsKJiM0MzsJaWYgZ3JlcCAtcSAtLSAmIzM0OyR7VU5XQU5URUR9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJiMzOTske1VOV0FOVEVEfSYjMzk7IGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJY2F0ICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBFdmVyeSB3cml0ZSBwdWJsaXNoZXMgYSBuZXcgcGF5bG9hZCBhbmQgZnJlZXMgdGhlIHByZXZpb3VzIG9uZS4gQW4gZW1wdHkKJiM0MzsjIHZhbHVlIGlzIHNraXBwZWQgd2hlbiB0aGUgcGF5bG9hZCBpcyBmb3JtYXR0ZWQsIHNvIHRoaXMgYWxzbyBkcml2ZXMgdGhlCiYjNDM7IyB0YXJnZXQgdGhyb3VnaCBoYXZpbmcgbm8gcGF5bG9hZCBhdCBhbGwuCiYjNDM7ZnVuY3Rpb24gY2h1cm5fdmFsdWUoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0lURVJBVElPTlN9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQllY2hvICYjMzQ7dmFsdWUke2l9JiMzNDsgJmd0OyAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWUmIzM0OwomIzQzOwkJZWNobyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZSYjMzQ7CiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7IyBDcmVhdGUgYW5kIGRlbGV0ZSBhIGtleSB1bmRlcm5lYXRoIHRoZSBzZW5kZXIKJiM0MztmdW5jdGlvbiBjaHVybl9rZXkoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0lURVJBVElPTlN9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQlta2RpciAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9JiMzNDsKJiM0MzsJCWVjaG8gJiMzNDt0cmFuc2llbnQke2l9JiMzNDsgJmd0OyAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9L3ZhbHVlJiMzNDsKJiM0MzsJCXJtZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzOyMgS2VlcCB0aGUgdHJhbnNtaXQgcGF0aCBidXN5IHdoaWxlIHRoZSBwYXlsb2FkIGlzIGJlaW5nIHJlcGxhY2VkCiYjNDM7ZnVuY3Rpb24gc2VuZF9tZXNzYWdlcygpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7SVRFUkFUSU9OU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCWVjaG8gJiMzNDske01TR306ICR7VEFSR0VUfSAke2l9JiMzNDsgJmd0OyAvZGV2L2ttc2cKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MzsjIFJ1biB0aGUgd29ya2VycyBjb25jdXJyZW50bHkgYW5kIGZhaWwgaWYgYW55IG9mIHRoZW0gaGl0cyBhbiBlcnJvcgomIzQzO2Z1bmN0aW9uIHJ1bl93b3JrZXJzKCkgewomIzQzOwlsb2NhbCBQSURTPSgpCiYjNDM7CWxvY2FsIFdPUktFUgomIzQzOwlsb2NhbCBSRVQ9MAomIzQzOwlsb2NhbCBQSUQKJiM0MzsKJiM0MzsJZm9yIFdPUktFUiBpbiAmIzM0OyRAJiMzNDsKJiM0MzsJZG8KJiM0MzsJCSYjMzQ7JHtXT1JLRVJ9JiMzNDsgJmFtcDsKJiM0MzsJCVBJRFMmIzQzOz0oJiMzNDskISYjMzQ7KQomIzQzOwlkb25lCiYjNDM7CiYjNDM7CSMgUmVhcCBldmVyeSB3b3JrZXIgYmVmb3JlIHJlcG9ydGluZyBhIGZhaWx1cmUsIG90aGVyd2lzZSBhIHN1cnZpdmluZwomIzQzOwkjIHdvcmtlciBrZWVwcyB3cml0aW5nIHRvIGNvbmZpZ2ZzIHdoaWxlIHRoZSBleGl0IHRyYXAgY2xlYW5zIGl0IHVwLgomIzQzOwlmb3IgUElEIGluICYjMzQ7JHtQSURTW0BdfSYjMzQ7CiYjNDM7CWRvCiYjNDM7CQl3YWl0ICYjMzQ7JHtQSUR9JiMzNDsgfHwgUkVUPTEKJiM0MzsJZG9uZQomIzQzOwomIzQzOwlpZiBbWyAmIzM0OyR7UkVUfSYjMzQ7IC1uZSAwIF1dCiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiB1c2VyZGF0YSB0b3J0dXJlIHdvcmtlciBmYWlsZWQmIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZnVuY3Rpb24gY3JlYXRlX2J1bGtfa2V5cygpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7QlVMS19LRVlTfSYjMzQ7KQomIzQzOwlkbwomIzQzOwkJd3JpdGVfa2V5ICYjMzQ7YnVsayR7aX0mIzM0OyAmIzM0OyR7TE9OR19WQUxVRX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO2Z1bmN0aW9uIGRlbGV0ZV9idWxrX2tleXMoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0JVTEtfS0VZU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCXJtZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9L2J1bGske2l9JiMzNDsKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MzsjID09PT09PT09PT0gIwomIzQzOyMgU3RhcnQgaGVyZSAjCiYjNDM7IyA9PT09PT09PT09ICMKJiM0MzsKJiM0Mzttb2Rwcm9iZSBuZXRkZXZzaW0gMiZndDsgL2Rldi9udWxsIHx8IHRydWUKJiM0Mzttb2Rwcm9iZSBuZXRjb25zb2xlIDImZ3Q7IC9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7CiYjNDM7SVBfVkVSU0lPTj0mIzM0O2lwdjQmIzM0OwomIzQzOyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZQomIzQzO09VVFBVVF9GSUxFPSYjMzQ7L3RtcC8ke1RBUkdFVH0mIzM0OwomIzQzOwomIzQzOyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZAomIzQzO2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXMKJiM0MzsjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSkKJiM0MztlY2hvICYjMzQ7NiA1JiMzNDsgJmd0OyAvcHJvYy9zeXMva2VybmVsL3ByaW50awomIzQzOyMgUmVtb3ZlIHRoZSBuYW1lc3BhY2UsIGludGVyZmFjZXMgYW5kIG5ldGNvbnNvbGUgdGFyZ2V0IG9uIGV4aXQKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzCiYjNDM7c2V0X25ldHdvcmsgJiMzNDske0lQX1ZFUlNJT059JiMzNDsKJiM0MzsjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlCiYjNDM7Y3JlYXRlX2R5bmFtaWNfdGFyZ2V0CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzEKJiM0MzsjIEEgdmFsdWUgd3JpdHRlbiB0byBjb25maWdmcyByZWFjaGVzIHRoZSBkZXN0aW5hdGlvbgomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7d3JpdGVfa2V5ICYjMzQ7JHtVU0VSREFUQV9LRVl9JiMzNDsgJiMzNDtmaXJzdCYjMzQ7CiYjNDM7c2VuZF9hbmRfY2FwdHVyZQomIzQzO2V4cGVjdF9pbl9tc2cgJiMzNDske1VTRVJEQVRBX0tFWX09Zmlyc3QmIzM0OwomIzQzOwomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7IyBURVNUICMyCiYjNDM7IyBVcGRhdGluZyB0aGUgdmFsdWUgcmVwbGFjZXMgdGhlIHByZXZpb3VzIHBheWxvYWQKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO3dyaXRlX2tleSAmIzM0OyR7VVNFUkRBVEFfS0VZfSYjMzQ7ICYjMzQ7c2Vjb25kJiMzNDsKJiM0MztzZW5kX2FuZF9jYXB0dXJlCiYjNDM7ZXhwZWN0X2luX21zZyAmIzM0OyR7VVNFUkRBVEFfS0VZfT1zZWNvbmQmIzM0OwomIzQzO2V4cGVjdF9ub3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PWZpcnN0JiMzNDsKJiM0MzsKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyMgVEVTVCAjMwomIzQzOyMgQ2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeQomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ZWNobyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfS92YWx1ZSYjMzQ7CiYjNDM7c2VuZF9hbmRfY2FwdHVyZQomIzQzO2V4cGVjdF9ub3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PSYjMzQ7CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzQKJiM0MzsjIFJlbW92aW5nIHRoZSBrZXkgZHJvcHMgdGhlIGVudHJ5CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0Mzt3cml0ZV9rZXkgJiMzNDske1VTRVJEQVRBX0tFWX0mIzM0OyAmIzM0O3RoaXJkJiMzNDsKJiM0MztybWRpciAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX0mIzM0OwomIzQzO3NlbmRfYW5kX2NhcHR1cmUKJiM0MztleHBlY3Rfbm90X2luX21zZyAmIzM0OyR7VVNFUkRBVEFfS0VZfT0mIzM0OwomIzQzO3JtICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7IyBURVNUICM1CiYjNDM7IyBUb3J0dXJlIHRoZSBwYXlsb2FkIHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LAomIzQzOyMgZmlyc3QgdW5mcmFnbWVudGVkIGFuZCB0aGVuIGZyYWdtZW50ZWQKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO3dyaXRlX2tleSAmIzM0OyR7Q0hVUk5fS0VZfSYjMzQ7ICYjMzQ7JHtVU0VSREFUQV9WQUxVRX0mIzM0OwomIzQzO3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzCiYjNDM7CiYjNDM7Y3JlYXRlX2J1bGtfa2V5cwomIzQzO3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzCiYjNDM7ZGVsZXRlX2J1bGtfa2V5cwomIzQzOwomIzQzO2V4aXQgJiMzNDske2tzZnRfcGFzc30mIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGBuZXRjb25zb2xlYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBvdmVyaGF1bGluZyBob3cgdGhlIGB1c2VyZGF0YWAgaXMgaGFuZGxlZCwgYW5kIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCB0b3VjaGVzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIExvb2tzIGxpa2UgdGhleSYjMzk7cmUgZGl0Y2hpbmcgdGhlIG9sZCBgY2hhciAqdXNlcmRhdGFgIGFuZCBgc2l6ZV90IHVzZXJkYXRhX2xlbmd0aGAgZm9yIGEgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCB0aGF0JiMzOTtzIFJDVS1wcm90ZWN0ZWQuIFNtYXJ0LiBUaGlzIGlzIGEgc29saWQgbW92ZSB0byBlbGltaW5hdGUgdGhvc2UgbmFzdHkgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZSB2dWxuZXJhYmlsaXRpZXMg4oCTIGRlZmluaXRlbHkgYSB3b3J0aHdoaWxlIGltcHJvdmVtZW50LgoKVGhlIHVwZGF0ZSBhbmQgcmVhZCBvcGVyYXRpb25zIGFyZSBub3cgdXNpbmcgYHJjdV9yZXBsYWNlX3BvaW50ZXIoKWAgYW5kIGBrZnJlZV9yY3UoKWAsIGFuZCBhbGwgdGhlIHNlbmQgZnVuY3Rpb25zIChgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbigpYCwgZXRjLikgYXJlIHRha2luZyBgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhYCBhbmQgYXBwcm9wcmlhdGVseSB3cmFwcGluZyB0aGUgcGF5bG9hZCBhY2Nlc3Mgd2l0aCBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYC4gVGhpcyBpcyB0ZXh0Ym9vayBSQ1UgaW1wbGVtZW50YXRpb24uCgpHaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0LWRvLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcm9idXN0IGJlZm9yZSBpdCBnb2VzIGxpdmUuCgpUaW1lIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgY29uZmlnIHRvIHJlcHJvZHVjZSB0aGlzIGFuZCBnZXQgdG8gdGVzdGluZy4gSSBrbm93IGBDT05GSUdfTkVUQ09OU09MRWAgaXMgcmVxdWlyZWQsIGFuZCBJIHN1c3BlY3QgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIHdpbGwgYWxzbyBiZSBuZWVkZWQuIExldCBtZSBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZTogTkVUQ09OU09MRSBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIE5FVENPTlNPTEUuIEJlZm9yZSBJIHN0YXJ0IGFueSB0cm91Ymxlc2hvb3Rpbmcgb3IgZGVlcGVyIGFuYWx5c2lzLCB1bmRlcnN0YW5kaW5nIHdoYXQgTkVUQ09OU09MRSByZWxpZXMgb24gaXMgYWJzb2x1dGVseSBjcnVjaWFsLiBJIG5lZWQgdG8ga25vdyB0aGUgcG90ZW50aWFsIGNob2tlIHBvaW50cywgdGhlIG90aGVyIGNvbXBvbmVudHMgd2hvc2UgZmFpbHVyZSB3b3VsZCB0YWtlIE5FVENPTlNPTEUgZG93biB3aXRoIHRoZW0uIEEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBkZXBlbmRlbmNpZXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgYW55IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBub3QganVzdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIHRyYW5zaXRpdmUgb25lcyDigJMgdGhvc2UgY29tcG9uZW50cyBORVRDT05TT0xFIHJlbGllcyBvbiwgd2hpY2ggaW4gdHVybiByZWx5IG9uICpvdGhlciogdGhpbmdzLiBUaGlzIGlzIHRoZSBmaXJzdCwgZXNzZW50aWFsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTY9bWVudWNvbmZpZyBORVRERVZJQ0VTXG5kcml2ZXJzL25ldC9LY29uZmlnLTctXHRkZWZhdWx0IHkgaWYgVU1MXG5kcml2ZXJzL25ldC9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIE5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy05LVx0Ym9vbCBcJiMzNDtOZXR3b3JrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00MT1jb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWc6NDQ6XHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cbmRyaXZlcnMvbmV0L0tjb25maWctNDUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz03ND1jb25maWcgV0lSRUdVQVJEXG5kcml2ZXJzL25ldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7V2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo3NjpcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTc3LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz05Mj1jb25maWcgV0lSRUdVQVJEX0RFQlVHXG5kcml2ZXJzL25ldC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgY2hlY2tzIGFuZCB2ZXJib3NlIG1lc3NhZ2VzXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjk0Olx0ZGVwZW5kcyBvbiBXSVJFR1VBUkRcbmRyaXZlcnMvbmV0L0tjb25maWctOTUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0xMDM9Y29uZmlnIE9WUE5cbmRyaXZlcnMvbmV0L0tjb25maWctMTA0LVx0dHJpc3RhdGUgXCYjMzQ7T3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoxMDU6XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMDYtXHRzZWxlY3QgRFNUX0NBQ0hFXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0xMzY9Y29uZmlnIE5FVF9GQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0xMzctXHRib29sIFwmIzM0O0ZpYnJlIENoYW5uZWwgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MTM4Olx0ZGVwZW5kcyBvbiBTQ1NJIFx1MDAyNlx1MDAyNiBQQ0lcbmRyaXZlcnMvbmV0L0tjb25maWctMTM5LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MTQ5PWNvbmZpZyBJRkJcbmRyaXZlcnMvbmV0L0tjb25maWctMTUwLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZXJtZWRpYXRlIEZ1bmN0aW9uYWwgQmxvY2sgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoxNTE6XHRkZXBlbmRzIG9uIE5FVF9BQ1RfTUlSUkVEIHx8IE5GVF9GV0RfTkVUREVWXG5kcml2ZXJzL25ldC9LY29uZmlnLTE1Mi1cdHNlbGVjdCBORVRfUkVESVJFQ1Rcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTE3OT1jb25maWcgTUFDVlRBUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xODAtXHR0cmlzdGF0ZSBcJiMzNDtNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjE4MTpcdGRlcGVuZHMgb24gTUFDVkxBTlxuZHJpdmVycy9uZXQvS2NvbmZpZzoxODI6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMTgzLVx0c2VsZWN0IFRBUFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MTkzPWNvbmZpZyBJUFZMQU5fTDNTXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5NDpcdGRlcGVuZHMgb24gTkVURklMVEVSXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5NTpcdGRlcGVuZHMgb24gSVBWTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnLTE5Ni1cdGRlZl9ib29sIHlcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTE5OT1jb25maWcgSVBWTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQLVZMQU4gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyMDE6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjAyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcbmRyaXZlcnMvbmV0L0tjb25maWctMjE3LVx0dHJpc3RhdGUgXCYjMzQ7SVAtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjIxODpcdGRlcGVuZHMgb24gSVBWTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnOjIxOTpcdGRlcGVuZHMgb24gSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMjAtXHRzZWxlY3QgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyMzI6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjMzLVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNDU9Y29uZmlnIEdFTkVWRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDYtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyNDc6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjQ4LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcbmRyaXZlcnMvbmV0L0tjb25maWctMjYxLVx0dHJpc3RhdGUgXCYjMzQ7QmFyZSBVRFAgRW5jYXBzdWxhdGlvblwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyNjI6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjYzLVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNzI9Y29uZmlnIEdUUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzMtXHR0cmlzdGF0ZSBcJiMzNDtHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjI3NDpcdGRlcGVuZHMgb24gSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzUtXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTI4OT1jb25maWcgUEZDUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yOTAtXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgRm9yd2FyZGluZyBDb250cm9sIFByb3RvY29sIChQRkNQKVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyOTE6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjkyLVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zMDI9Y29uZmlnIEFNVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDMtXHR0cmlzdGF0ZSBcJiMzNDtBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZyAoQU1UKVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozMDQ6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElQX01VTFRJQ0FTVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDUtXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTMyNz1jb25maWcgTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjMyOTpcdGRlcGVuZHMgb24gUFJJTlRLXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTMzND1jb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNjpcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTIFx1MDAyNlx1MDAyNiBcXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzctXHRcdFx0IShORVRDT05TT0xFPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNDU9Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cdGJvb2wgXCYjMzQ7U2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ3Olx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0OC1cdGRlZmF1bHQgblxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzU1PWNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXHRib29sIFwmIzM0O1ByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NzpcdGRlcGVuZHMgb24gTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcbmRyaXZlcnMvbmV0L0tjb25maWctMzU4LVx0ZGVmYXVsdCBuXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNzM9Y29uZmlnIE5UQl9ORVRERVZcbmRyaXZlcnMvbmV0L0tjb25maWctMzc0LVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBFdGhlcm5ldCBvdmVyIE5UQiBUcmFuc3BvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzc1Olx0ZGVwZW5kcyBvbiBOVEJfVFJBTlNQT1JUXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3Ni1cbmRyaXZlcnMvbmV0L0tjb25maWc9Mzc3PWNvbmZpZyBSSU9ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzc4LVx0dHJpc3RhdGUgXCYjMzQ7UmFwaWRJTyBFdGhlcm5ldCBvdmVyIG1lc3NhZ2luZyBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozNzk6XHRkZXBlbmRzIG9uIFJBUElESU9cbmRyaXZlcnMvbmV0L0tjb25maWctMzgwLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zODE9Y29uZmlnIFJJT05FVF9UWF9TSVpFXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4Mi1cdGludCBcJiMzNDtOdW1iZXIgb2Ygb3V0Ym91bmQgcXVldWUgZW50cmllc1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozODM6XHRkZXBlbmRzIG9uIFJJT05FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zODQtXHRkZWZhdWx0IFwmIzM0OzEyOFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zODctXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIGluYm91bmQgcXVldWUgZW50cmllc1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozODg6XHRkZXBlbmRzIG9uIFJJT05FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zODktXHRkZWZhdWx0IFwmIzM0OzEyOFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzkxPWNvbmZpZyBUVU5cbmRyaXZlcnMvbmV0L0tjb25maWctMzkyLVx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MzpcdGRlcGVuZHMgb24gSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTQtXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ0Mz1jb25maWcgVklSVElPX05FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDQtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0aW8gbmV0d29yayBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDQ1Olx0ZGVwZW5kcyBvbiBWSVJUSU9cbmRyaXZlcnMvbmV0L0tjb25maWctNDQ2LVx0c2VsZWN0IE5FVF9GQUlMT1ZFUlxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDYzPWNvbmZpZyBORVRLSVRcbmRyaXZlcnMvbmV0L0tjb25maWctNDY0LVx0Ym9vbCBcJiMzNDtCUEYtcHJvZ3JhbW1hYmxlIG5ldHdvcmsgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ2NTpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmRyaXZlcnMvbmV0L0tjb25maWctNDY2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDcyPWNvbmZpZyBORVRfVlJGXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ3My1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgUm91dGluZyBhbmQgRm9yd2FyZGluZyAoTGl0ZSlcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc0Olx0ZGVwZW5kcyBvbiBJUF9NVUxUSVBMRV9UQUJMRVNcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc1Olx0ZGVwZW5kcyBvbiBORVRfTDNfTUFTVEVSX0RFVlxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NzY6XHRkZXBlbmRzIG9uIElQVjZfTVVMVElQTEVfVEFCTEVTIHx8IElQVjY9blxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00ODE9Y29uZmlnIFZTT0NLTU9OXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ4Mi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgdnNvY2sgbW9uaXRvcmluZyBkZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDgzOlx0ZGVwZW5kcyBvbiBWSE9TVF9WU09DS1xuZHJpdmVycy9uZXQvS2NvbmZpZy00ODQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00ODk9Y29uZmlnIE1ISV9ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctNDkwLVx0dHJpc3RhdGUgXCYjMzQ7TUhJIG5ldHdvcmsgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ5MTpcdGRlcGVuZHMgb24gTUhJX0JVU1xuZHJpdmVycy9uZXQvS2NvbmZpZy00OTItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01NDQ9Y29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkRcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ1LVx0dHJpc3RhdGUgXCYjMzQ7WGVuIG5ldHdvcmsgZGV2aWNlIGZyb250ZW5kIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo1NDY6XHRkZXBlbmRzIG9uIFhFTlxuZHJpdmVycy9uZXQvS2NvbmZpZy01NDctXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTYyPWNvbmZpZyBYRU5fTkVUREVWX0JBQ0tFTkRcbmRyaXZlcnMvbmV0L0tjb25maWctNTYzLVx0dHJpc3RhdGUgXCYjMzQ7WGVuIGJhY2tlbmQgbmV0d29yayBkZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NTY0Olx0ZGVwZW5kcyBvbiBYRU5fQkFDS0VORFxuZHJpdmVycy9uZXQvS2NvbmZpZy01NjUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01ODQ9Y29uZmlnIFZNWE5FVDNcbmRyaXZlcnMvbmV0L0tjb25maWctNTg1LVx0dHJpc3RhdGUgXCYjMzQ7Vk13YXJlIFZNWE5FVDMgZXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjU4NjpcdGRlcGVuZHMgb24gUENJIFx1MDAyNlx1MDAyNiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnOjU4NzpcdGRlcGVuZHMgb24gUEFHRV9TSVpFX0xFU1NfVEhBTl82NEtCXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OC1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTU5ND1jb25maWcgRlVKSVRTVV9FU1xuZHJpdmVycy9uZXQvS2NvbmZpZy01OTUtXHR0cmlzdGF0ZSBcJiMzNDtGVUpJVFNVIEV4dGVuZGVkIFNvY2tldCBOZXR3b3JrIERldmljZSBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NTk2Olx0ZGVwZW5kcyBvbiBBQ1BJXG5kcml2ZXJzL25ldC9LY29uZmlnLTU5Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDY6XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNzpcdGRlcGVuZHMgb24gSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDg6XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwOTpcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cbmRyaXZlcnMvbmV0L0tjb25maWctNjEwLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGNvbnNvbGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBORVRDT05TT0xFYCBoZXJlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRmlyc3Qgb2ZmLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgTkVUQ09OU09MRWAgcmVsaWVzIG9uIGBQUklOVEtgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgbG9nZ2luZyBwdXJwb3Nlcy4gTm93LCBgTkVUQ09OU09MRV9EWU5BTUlDYCBicmluZ3MgaW4gYSBtb3JlIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGF0IG9uZSBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRDT05TT0xFYCBpdHNlbGYsIHBsdXMgYFNZU0ZTYCBhbmQgYENPTkZJR0ZTX0ZTYC4gUmlnaHQsIHNvIHRvIGdldCB0aGUgZnVuY3Rpb25hbGl0eSB3ZSBuZWVkLCBJJiMzOTttIHRoaW5raW5nIHdlIHNob3VsZCBlbmFibGUgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kLCBiZWNhdXNlIG9mIHRoZSBsYXR0ZXImIzM5O3MgZGVwZW5kZW5jeSwgYWxzbyBgQ09ORklHRlNfRlNgLiBUaGF0IGNvdmVycyB0aGUgYmFzaWMgc2V0dXAsIGluY2x1ZGluZyB0aGUgZHluYW1pYyBhc3BlY3QuCgpOb3cgdG8gZ2V0IGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGFjdHVhbCBjaGFuZ2VzLCBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGNvcmUgc3ltYm9scyBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhpcyBwYXRjaC4gTGV0IG1lIHNlZS4uLiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYHVwZGF0ZV91c2VyZGF0YWAsIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCwgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgLCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAsIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX3VkcGAsIGFuZCBgZnJlZV9wYXJhbV90YXJnZXRgLiAKCk9rYXksIGl0IHNlZW1zIHRoYXQgYHVwZGF0ZV91c2VyZGF0YWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSB0aGF0IGlzIGNhbGxlZCBhbmQgaG93IHRoZSBjaGFuZ2VzIGFyZSBpbXBsZW1lbnRlZCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cGRhdGVfdXNlcmRhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwNTQ9c3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDcyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNzM6c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDc0LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTEyMT1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMzQtXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMzU6XHQvKiBTbmFwc2hvdCBmb3Igcm9sbGJhY2sgaWYgdXBkYXRlX3VzZXJkYXRhKCkgZmFpbHMgYmVsb3cgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTM2LVx0c3Ryc2NweShvbGRfdmFsdWUsIHVkbS1cdTAwM2V2YWx1ZSwgc2l6ZW9mKG9sZF92YWx1ZSkpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTQyLVx0bnQgPSB1c2VyZGF0YV90b190YXJnZXQodWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNDM6XHRyZXQgPSB1cGRhdGVfdXNlcmRhdGEobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNDQtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzMzc9c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM0NS1cdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM0NjpcdHVwZGF0ZV91c2VyZGF0YShudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM0Ny1cdGNvbmZpZ19pdGVtX3B1dChpdGVtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB1cGRhdGVfdXNlcmRhdGFgLiBBaCwgeWVzLCB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIGJvdGggYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAuIE5vdywgdGhvc2UgcmluZyBhIGJlbGwuLi4gcmlnaHQsIHRob3NlIGFyZSBjb25maWdmcyBjYWxsYmFja3MuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZXNlIGNvbmZpZ2ZzIGNhbGxiYWNrcyBhbmQgdW5kZXJzdGFuZCBob3cgYHVwZGF0ZV91c2VyZGF0YWAgaXMgdXNlZCB3aXRoaW4gdGhlaXIgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb25maWdmcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwNzM9c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEyMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTIxOnN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIyLVx0XHRcdFx0ICAgICBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUaGUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgQ29udW5kcnVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBleGFjdGx5IGlzIHRoaXMgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYmVpbmcgbGV2ZXJhZ2VkPyYjMzQ7IFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBnZW5lcmljIHZhcmlhYmxlIG5hbWU7IGl0IHN1Z2dlc3RzIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgdGllZCB0byB1c2VyIGRhdGEgYW5kIGl0cyBwZXJzaXN0ZW50IHZhbHVlcy4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBiZWluZyB1c2VkICpzb21ld2hlcmUqLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgaXRzIGludGVyYWN0aW9ucy4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMga2V5IHRvIGl0cyBkZXNpZ24sIGludGVyYWN0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucy4gVGhlIG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSBhIHNlYXJjaCBhbmQgdHJhY2UgYWxsIGluc3RhbmNlcyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGl0IG9wZXJhdGVzIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmRhdHVtX3ZhbHVlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDczPXN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTEyMTpzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEyMi1cdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqTG9jYXRpbmcgdGhlIFRhcmdldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIFRpbWUgdG8gbG9jYXRlIHRoYXQgc3BlY2lmaWMgdmFyaWFibGUgb3IgbW9kdWxlLCB0aGUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAuIEkga25vdyBpdCYjMzk7cyBpbiB0aGlzIGZpbGUgc29tZXdoZXJlLCBhbmQgSSBuZWVkIHRvIGZpbmQgYWxsIGluc3RhbmNlcy4gU28sIEkgbmVlZCB0byBzdGFydCB3aXRoIGEgYnJvYWQsIHRob3JvdWdoIHNlYXJjaC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIHVzZSBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIGZ1bmN0aW9uIHRvIHNjb3VyIHRoZSBlbnRpcmUgZG9jdW1lbnQuIFRoaXMgY291bGQgYmUgYSBjcnVjaWFsIHBhcnQgb2Ygd2hhdGV2ZXIgcHJvY2VzcyBJJiMzOTttIHdvcmtpbmcgb24gcmlnaHQgbm93LiBHb3QgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJkYXR1bV92YWx1ZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTA3Mz1zdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMjE6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjItXHRcdFx0XHQgICAgIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnVzZWQgRGVmaW5pdGlvbiBDaGVjayoqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIHRoaXMgdmFyaWFibGUvZnVuY3Rpb24vd2hhdGV2ZXIgaXMgKmRlZmluZWQqIGJ1dCBub3QgYWN0dWFsbHkgKnVzZWQqPyBUaGF0JiMzOTtzIGEgY2xhc3NpYyByZWQgZmxhZy4gQ291bGQgYmUgZGVhZCBjb2RlLCBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgY29uZnVzaW9uLCBvciBldmVuIGEgc3VidGxlIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbiBpZiBpdCYjMzk7cyB1bmludGVudGlvbmFsbHkgaW50ZXJhY3Rpbmcgd2l0aCBzb21ldGhpbmcgZWxzZS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBMZXQmIzM5O3MgaW1tZWRpYXRlbHkganVtcCB0byB0aGF0IHNlY3Rpb24gb2YgdGhlIGZpbGUuIExpbmUgMTEyMSBpcyB0aGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0byB1bmRlcnN0YW5kIHdoeSBpdCYjMzk7cyB0aGVyZS4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgbmVlZHMgaW52ZXN0aWdhdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHRcbjExMjE6XHRzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4xMTIyOlx0XHRcdFx0XHQgICAgIHNpemVfdCBjb3VudClcbjExMjM6XHR7XG4xMTI0Olx0XHRzdHJ1Y3QgdXNlcmRhdHVtICp1ZG0gPSB0b191c2VyZGF0dW0oaXRlbSk7XG4xMTI1Olx0XHRjaGFyIG9sZF92YWx1ZVtNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTl07XG4xMTI2Olx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuMTEyNzpcdFx0c3RydWN0IHVzZXJkYXRhICp1ZDtcbjExMjg6XHRcdHNzaXplX3QgcmV0O1xuMTEyOTpcdFxuMTEzMDpcdFx0aWYgKGNvdW50IFx1MDAzZT0gTUFYX0VYVFJBREFUQV9WQUxVRV9MRU4pXG4xMTMxOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4xMTMyOlx0XG4xMTMzOlx0XHRtdXRleF9sb2NrKFx1MDAyNm5ldGNvbnNvbGVfc3Vic3lzLnN1X211dGV4KTtcbjExMzQ6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4xMTM1Olx0XHQvKiBTbmFwc2hvdCBmb3Igcm9sbGJhY2sgaWYgdXBkYXRlX3VzZXJkYXRhKCkgZmFpbHMgYmVsb3cgKi9cbjExMzY6XHRcdHN0cnNjcHkob2xkX3ZhbHVlLCB1ZG0tXHUwMDNldmFsdWUsIHNpemVvZihvbGRfdmFsdWUpKTtcbjExMzc6XHRcdC8qIGNvdW50IGlzIGJvdW5kZWQgYWJvdmUsIHNvIHN0cnNjcHkoKSBjYW5ub3QgdHJ1bmNhdGUgaGVyZSAqL1xuMTEzODpcdFx0c3Ryc2NweSh1ZG0tXHUwMDNldmFsdWUsIGJ1Ziwgc2l6ZW9mKHVkbS1cdTAwM2V2YWx1ZSkpO1xuMTEzOTpcdFx0dHJpbV9uZXdsaW5lKHVkbS1cdTAwM2V2YWx1ZSwgc2l6ZW9mKHVkbS1cdTAwM2V2YWx1ZSkpO1xuMTE0MDpcdFxuMTE0MTpcdFx0dWQgPSB0b191c2VyZGF0YShpdGVtLVx1MDAzZWNpX3BhcmVudCk7XG4xMTQyOlx0XHRudCA9IHVzZXJkYXRhX3RvX3RhcmdldCh1ZCk7XG4xMTQzOlx0XHRyZXQgPSB1cGRhdGVfdXNlcmRhdGEobnQpO1xuMTE0NDpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTE0NTpcdFx0XHQvKiBSZXN0b3JlIHRoZSBwcmV2aW91cyB2YWx1ZSBzbyBpdCBtYXRjaGVzIHRoZSBsaXZlIHBheWxvYWQgKi9cbjExNDY6XHRcdFx0c3Ryc2NweSh1ZG0tXHUwMDNldmFsdWUsIG9sZF92YWx1ZSwgc2l6ZW9mKHVkbS1cdTAwM2V2YWx1ZSkpO1xuMTE0NzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMTQ4Olx0XHR9XG4xMTQ5Olx0XHRyZXQgPSBjb3VudDtcbjExNTA6XHRvdXRfdW5sb2NrOlxuMTE1MTpcdFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpO1xuMTE1MjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldGNvbnNvbGVfc3Vic3lzLnN1X211dGV4KTtcbjExNTM6XHRcdHJldHVybiByZXQ7XG4xMTU0Olx0fVxuMTE1NTpcdFxuMTE1NjpcdC8qIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlIC0gRGlzYWJsZSBzeXNkYXRhIGZlYXR1cmUgYW5kIGNsZWFuIHN5c2RhdGFcbjExNTc6XHQgKiBAbnQ6IHRhcmdldCB0aGF0IGlzIGRpc2FibGluZyB0aGUgZmVhdHVyZVxuMTE1ODpcdCAqIEBmZWF0dXJlOiBmZWF0dXJlIGJlaW5nIGRpc2FibGVkXG4xMTU5Olx0ICovXG4xMTYwOlx0c3RhdGljIHZvaWQgZGlzYWJsZV9zeXNkYXRhX2ZlYXR1cmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbjExNjE6XHRcdFx0XHRcdCAgICBlbnVtIHN5c2RhdGFfZmVhdHVyZSBmZWF0dXJlKVxuMTE2MjpcdHtcbjExNjM6XHRcdG50LVx1MDAzZXN5c2RhdGFfZmllbGRzIFx1MDAyNj0gfmZlYXR1cmU7XG4xMTY0Olx0XHRudC1cdTAwM2VzeXNkYXRhWzBdID0gMDtcbjExNjU6XHR9XG4xMTY2Olx0XG4xMTY3Olx0c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbjExNjg6XHRcdFx0XHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4xMTY5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgQ29udW5kcnVtKioKClJpZ2h0LCBhIGZsaWNrZXIgb2YgbWVtb3J5IOKAkyB0aGF0IGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgLiBJdCYjMzk7cyBuYWdnaW5nIGF0IG1lLCBzdWdnZXN0aW5nIGl0JiMzOTtzIGxpa2VseSAqaW52b2x2ZWQqIGluIGEgbWFjcm8gZGVmaW5pdGlvbi4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCBpc24mIzM5O3QgYmVpbmcgdXNlZCBkaXJlY3RseS4gVGhhdCBzdWdnZXN0cyBJIHNob3VsZCB0cnkgdG8gdHJhY2UgaXRzIHVzYWdlLiBJIHNob3VsZCBicm9hZGVuIG15IHNlYXJjaC4gUmF0aGVyIHRoYW4gZ2V0IGxvc3QgaW4gdGhlIGZ1bmN0aW9uIGNhbGxzLCBJIHNob3VsZCBsb29rIG1vcmUgYnJvYWRseSBmb3IgdXNlcyBvZiB0aGUgc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2ggdGVybXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBicm9hZGVyIHNjb3BlIHNlYXJjaCBmb3IgYHVzZXJkYXR1bV92YWx1ZWAuIEkmIzM5O2xsIGFsc28gdHJ5IGEgYnJvYWRlciBzY29wZSBzZWFyY2ggZm9yIGBDT05GSUdGU19BVFRSYC4gSXQmIzM5O3MgYSBodW5jaCwgYnV0IHNvbWV0aGluZyBsaWtlIHRoYXQgZmVlbHMgcmlnaHQuIEkmIzM5O20gYmV0dGluZyB0aGF0IG9uZSBvZiB0aGVzZSB3aWxsIGxlYWQgbWUgdG8gdGhlIG1hY3JvIGRlZmluaXRpb24gdGhhdCYjMzk7cyB1c2luZyB0aGUgc3RvcmFnZSBpbiBhbiBpbmRpcmVjdCB3YXkuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcCBhbmQgc2VlIHdoYXQgY29tZXMgYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHRlNfQVRUUi4qdXNlcmRhdHVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjU1PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjg3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyODg6Q09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI4OS1DT05GSUdGU19BVFRSKHN5c2RhdGFfLCBjcHVfbnJfZW5hYmxlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJiMzOTtzIERhdGEgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgQ09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSlgIG1hY3JvLCBhbmQgaXQgY2xlYXJseSBleHBhbmRzIHRvIGNyZWF0ZSB0d28gZnVuY3Rpb25zOiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV92YWx1ZV9zaG93YC4gTXkgYnJhaW4gaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGVudHJ5IHBvaW50cywgd2hpY2ggYXJlIHRodXMgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAuIEkgYWxzbyBzZWUgdGhhdCBgc2VuZF9leHRfbXNnX3VkcGAgYW5kIGBzZW5kX21zZ191ZHBgIGFyZSBrZXkgcGxheWVycyBoZXJlLgoKSG1tLCB3YWl0IGEgc2Vjb25kLiAgSSBrbm93IHRoYXQgYHNlbmRfZXh0X21zZ191ZHBgIGFuZCBgc2VuZF9tc2dfdWRwYCBhcmUgaW52b2tlZCBieSBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgIHJlc3BlY3RpdmVseSwgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgY2FsbGVkIGJ5IGBuZXRjb25zb2xlX3dyaXRlYC4gVGhhdCYjMzk7cyBhIGdvb2QgY29ubmVjdGlvbiB0byBtYWtlLiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGBuZXRjb25zb2xlX3dyaXRlYC4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBhIGNvbnNvbGUgd3JpdGUgY2FsbGJhY2suCgpIb2xkIG9uLi4uIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIGBzZW5kX2V4dF9tc2dfdWRwYCBpcyBhY3R1YWxseSBjYWxsZWQgYnkgdGhlIGBuZXRjb25zb2xlX2V4dF93cml0ZWAgZnVuY3Rpb24uIFRoaXMgbWFrZXMgdGhlIGNvbm5lY3Rpb25zIG11Y2ggbW9yZSBjbGVhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VuZF9leHRfbXNnX3VkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA3Mz1zdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMTAtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjExMTogKiBzZW5kX2V4dF9tc2dfdWRwIC0gc2VuZCBleHRlbmRlZCBsb2cgbWVzc2FnZSB0byB0YXJnZXRcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTEyLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE4LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMTk6c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMjAtXHRcdFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNzI9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTEtXHRcdGlmIChleHRlbmRlZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTkyOlx0XHRcdHNlbmRfZXh0X21zZ191ZHAobnQsIHdjdHh0KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTkzLVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIEtlcm5lbCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBkYXRhIGdldHMgaW50byBhbmQgb3V0IG9mIHRoZSBrZXJuZWwmIzM5O3MgdmFyaW91cyBzdWJzeXN0ZW1zLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgbmV0Y29uc29sZV93cml0ZWAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHdyaXRpbmcgdG8gdGhlIGNvbnNvbGUuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCBoYW5kbGluZyB0aGUgaW5pdGlhbCBjYWxsIHRvIGdldCBkYXRhIG9udG8gdGhlIHNjcmVlbiBvciBpbnRvIGEgbG9nLCBiYXNlZCBvbiBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAuCgpOb3csIEkgc2VlIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFzIGFub3RoZXIgZW50cnkgcG9pbnQsIHRoaXMgdGltZSBmb3IgY29uZmlnZnMuIFJpZ2h0LCB0aGlzIHdvdWxkIGJlIGhvdyB1c2VyLXByb3ZpZGVkIGRhdGEgaXMgYWN0dWFsbHkgc3RvcmVkIHdpdGhpbiB0aGUgY29uZmlnZnMgc3RydWN0dXJlcyDigJMgdGhlIG1haW4gbWVjaGFuaXNtIHRvIGhhbmRsZSBjb25maWd1cmF0aW9uIGlucHV0LiBUaGF0IGltcGxpZXMgaXQmIzM5O3MgdGhlIGludGVyZmFjZSB1c2VkIHRvIHdyaXRlIGNvbmZpZ3VyYXRpb24gZGF0YS4KCkFoLCBhbmQgSSBzZWUgYHVzZXJkYXR1bV9kcm9wYCBhbHNvIG1lbnRpb25lZCBhcyBhbiBlbnRyeSBwb2ludC4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGltcG9ydGFudCBlbnRyeSBwb2ludCB0aGF0IGlzIHVzZWQgdG8gcmVtb3ZlIG9yIGNsZWFudXAgdGhpcyB1c2VyIGRhdGEuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgdG8gc2VlIGhvdyBldmVyeXRoaW5nIGlzIG1hbmFnZWQsIGZyb20gZ2V0dGluZyBkYXRhIGluLCB0byBzdG9yaW5nIGl0IGFuZCBmaW5hbGx5LCBjbGVhbmluZyBpdCB1cC4gVW5kZXJzdGFuZGluZyB0aGVzZSBlbnRyeSBwb2ludHMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGVzZSBjcml0aWNhbCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZGF0dW1fZHJvcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTMxND1zdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMzc6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTM1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjAtXHQubWFrZV9pdGVtXHRcdD0gdXNlcmRhdHVtX21ha2VfaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzYxOlx0LmRyb3BfaXRlbVx0XHQ9IHVzZXJkYXR1bV9kcm9wLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MDAKCQkJCQkJCW91dHB1dDogNjUKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhvdC1QYXRoIFN5bWJvbHMgaW4gTmV0Y29uc29sZSBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzIGZvciB0aGlzIG5ldGNvbnNvbGUgd29yay4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSBrZXkgb25lcyBzaG91bGQgYmUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAsIGB1c2VyZGF0dW1fZHJvcGAsIGFuZCBgbmV0Y29uc29sZV93cml0ZWAuIEJ1dCBob2xkIG9uLi4uIGlzbiYjMzk7dCBgbmV0Y29uc29sZV93cml0ZWAgYSBwcmV0dHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbj8gSXQmIzM5O3MgdGhlIGNvbnNvbGUgd3JpdGUgY2FsbGJhY2ssIGFuZCBpdCBjb3VsZCBiZSBoaXQgcmVhbGx5LCByZWFsbHkgb2Z0ZW4gaWYgdGhlcmUmIzM5O3MgYSBmbG9vZCBvZiBgcHJpbnRrc2AuIEhvd2V2ZXIsIHRoZSBvdGhlciB0d28sIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLCBhcmUgbXVjaCBtb3JlIGRpcmVjdGx5IHRpZWQgdG8gKnRoaXMqIHNwZWNpZmljIGZlYXR1cmUuCgpOb3csIEkgcmVhbGx5IHNob3VsZCBkb3VibGUtY2hlY2sgaG93IGZyZXF1ZW50bHkgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZC4gQWgsIHJpZ2h0LCBpdCBnZXRzIGZpcmVkIGZvciBldmVyeSBzaW5nbGUgYHByaW50a2Agd2hlbiBuZXRjb25zb2xlIGlzIGVuYWJsZWQsIHRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgZGlnZ2luZyBpbnRvIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGFuZCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgLiBUaG9zZSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4gSXMgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gZXhwb3NlZCBpbiB0aGUgbmV0Y29uc29sZSBjb2RlPyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgdGhlcmUuIEdvdHRhIGNvdmVyIG15IGJhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MD1fX3NldHVwKFwmIzM0O25ldGNvbnNvbGU9XCYjMzQ7LCBvcHRpb25fc2V0dXApO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04My0vKiBMaW5rZWQgbGlzdCBvZiBhbGwgY29uZmlndXJlZCB0YXJnZXRzICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUtLyogdGFyZ2V0X2NsZWFudXBfbGlzdCBpcyB1c2VkIHRvIHRyYWNrIHRhcmdldHMgdGhhdCBuZWVkIHRvIGJlIGNsZWFuZWQgb3V0c2lkZVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxLS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMtLyogVGhpcyBuZWVkcyB0byBiZSBhIG11dGV4IGJlY2F1c2UgbmV0cG9sbF9jbGVhbnVwIG1pZ2h0IHNsZWVwICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQ6c3RhdGljIERFRklORV9NVVRFWCh0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTU9c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXM7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OnN0YXRpYyBERUZJTkVfTVVURVgoZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTI2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqUmVnZXggU25hZnU6IFRpbWUgZm9yIHRoZSBGaWxlKioKClVnaCwgd2FpdCBhIHNlY29uZC4gVGhhdCByZWdleCBJIGp1c3QgY3JhZnRlZOKApiBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJiMzOTttIHN0YXJ0aW5nIHRvIGhhdmUgZG91YnRzLiBUaGUgZWRnZSBjYXNlcyBhcmUgc3RhcnRpbmcgdG8gc3dpbSB1cCBpbiBteSBtZW50YWwgbW9kZWwsIGFuZCBJIHN1c3BlY3QgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIGFzIHJvYnVzdCBhcyBJJiMzOTtkIGluaXRpYWxseSBob3BlZC4gQWxyaWdodCwgZm9yZ2V0IHRoZSByZWdleCBmb3Igbm93LiBJdCYjMzk7cyB0aW1lIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIGdldCBhIG1vcmUgZ3JvdW5kZWQgcGVyc3BlY3RpdmUuIExldCYjMzk7cyBqdXN0IGxvb2sgYXQgdGhlIHJhdyBkYXRhIGluIHRoZSBmaWxlIGl0c2VsZi4gVGhhdCYjMzk7cyBhbHdheXMgdGhlIGJlc3QgZmlyc3Qgc3RlcCB3aGVuIGEgcGF0dGVybiBtYXRjaGluZyBzdHJhdGVneSBmZWVscyBzaGFreS4gSSYjMzk7bGwgZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHRoaXMgd2F5LCBhbmQgSSBjYW4gYWx3YXlzIGdvIGJhY2sgYW5kIHJlZmluZSB0aGUgcmVnZXggYmFzZWQgb24gYWN0dWFsIG9ic2VydmF0aW9ucywgYnV0IEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MjAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01Mz1NT0RVTEVfSU1QT1JUX05TKFwmIzM0O05FVERFVl9JTlRFUk5BTFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY0OnN0YXRpYyBjaGFyIGNvbmZpZ1tNQVhfUEFSQU1fTEVOR1RIXTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NS1tb2R1bGVfcGFyYW1fc3RyaW5nKG5ldGNvbnNvbGUsIGNvbmZpZywgTUFYX1BBUkFNX0xFTkdUSCwgMCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjY9TU9EVUxFX1BBUk1fREVTQyhuZXRjb25zb2xlLCBcJiMzNDsgbmV0Y29uc29sZT1bc3JjLXBvcnRdQFtzcmMtaXBdL1tkZXZdLFt0Z3QtcG9ydF1AXHUwMDNjdGd0LWlwXHUwMDNlL1t0Z3QtbWFjYWRkcl1cJiMzNDspO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY4OnN0YXRpYyBib29sIG9vcHNfb25seTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02OS1tb2R1bGVfcGFyYW0ob29wc19vbmx5LCBib29sLCAwNjAwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03MD1NT0RVTEVfUEFSTV9ERVNDKG9vcHNfb25seSwgXCYjMzQ7T25seSBsb2cgb29wcyBtZXNzYWdlc1wmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc0LSNpZm5kZWZcdE1PRFVMRVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc1OnN0YXRpYyBpbnQgX19pbml0IG9wdGlvbl9zZXR1cChjaGFyICpvcHQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MD1fX3NldHVwKFwmIzM0O25ldGNvbnNvbGU9XCYjMzQ7LCBvcHRpb25fc2V0dXApO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04My0vKiBMaW5rZWQgbGlzdCBvZiBhbGwgY29uZmlndXJlZCB0YXJnZXRzICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUtLyogdGFyZ2V0X2NsZWFudXBfbGlzdCBpcyB1c2VkIHRvIHRyYWNrIHRhcmdldHMgdGhhdCBuZWVkIHRvIGJlIGNsZWFuZWQgb3V0c2lkZVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxLS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMtLyogVGhpcyBuZWVkcyB0byBiZSBhIG11dGV4IGJlY2F1c2UgbmV0cG9sbF9jbGVhbnVwIG1pZ2h0IHNsZWVwICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQ6c3RhdGljIERFRklORV9NVVRFWCh0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk2OnN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0Y29uc29sZV93cTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05Ny1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAxLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMjpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQsIG5ldGNvbnNvbGU7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAzLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODg9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTY6c3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTg6c3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTkte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjI1OnN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzU6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ3OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MjpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1OTpzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjQ6c3RhdGljIHZvaWQgX19leGl0IGR5bmFtaWNfbmV0Y29uc29sZV9leGl0KHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjcxLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9nZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjc2OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3Ny17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODA6c3RhdGljIHZvaWQgcG9wdWxhdGVfY29uZmlnZnNfaXRlbShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4MS1cdFx0XHRcdCAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4OTpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjkwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk1LS8qIENoZWNrIGlmIHRoZSB0YXJnZXQgd2FzIGJvdW5kIGJ5IG1hYyBhZGRyZXNzLiAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI5NjpzdGF0aWMgYm9vbCBib3VuZF9ieV9tYWMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzAxOnN0YXRpYyB2b2lkIG5ldGNvbnNfcmVsZWFzZV9kZXYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDgtLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzA5OnN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjEtLyogQ2hlY2tzIGlmIGEgZGVhY3RpdmF0ZWQgdGFyZ2V0IG1hdGNoZXMgYSBkZXZpY2UuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzIyOnN0YXRpYyBib29sIGRlYWN0aXZhdGVkX3RhcmdldF9tYXRjaChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMyMy1cdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzMy0vKiBQcm9jZXNzIHdvcmsgc2NoZWR1bGVkIGZvciB0YXJnZXQgcmVzdW1lLiAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMzNDpzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzNS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM5My0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozOTQ6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zOTUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MjAtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDIxOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDIyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDQ0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ0NTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0cG9sbCAqbnApXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDQ2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDY0LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ2NTpzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NjYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01MTQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTE1OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKnRvX3RhcmdldChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTE2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTI4LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjUyOTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHModm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01MzAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01MzktLyogR2V0IHJpZCBvZiBwb3NzaWJsZSB0cmFpbGluZyBuZXdsaW5lLCByZXR1cm5pbmcgdGhlIG5ldyBsZW5ndGggKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NDA6c3RhdGljIHZvaWQgdHJpbV9uZXdsaW5lKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTQxLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTU0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU1NTpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTU2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTU5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU2MDpzdGF0aWMgc3NpemVfdCBleHRlbmRlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2MS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2NC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NjU6c3RhdGljIHNzaXplX3QgcmVsZWFzZV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2Ni17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NzA6c3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzEte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTc1OnN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTgwOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTgxLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTg0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU4NTpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU4Ni17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU5NC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1OTU6c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTk2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjA0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjYwNTpzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MDYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjEzOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjE4OnN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYxOS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYzMy0vKiBjb25maWdmcyBoZWxwZXIgdG8gZGlzcGxheSBpZiBjcHVfbnIgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2MzQ6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYzNS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY0Ni0vKiBjb25maWdmcyBoZWxwZXIgdG8gZGlzcGxheSBpZiB0YXNrbmFtZSBzeXNkYXRhIGZlYXR1cmUgaXMgZW5hYmxlZCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY0NzpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3Rhc2tuYW1lX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjQ4LVx0XHRcdFx0XHQgICAgIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjU5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY2MDpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3JlbGVhc2VfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NjEtXHRcdFx0XHRcdCAgICBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3NS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NzY6c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9uZXRjb25zX2NvbnNvbGVzKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjc3LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjk5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjcwMDpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX21zZ2lkX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzAxLVx0XHRcdFx0XHQgIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzE5LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjcyMDpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MjEtXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODA4OnN0YXRpYyBzc2l6ZV90IHJlbGVhc2Vfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODA5LVx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODM1OnN0YXRpYyBzc2l6ZV90IGV4dGVuZGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzNi1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODYxOnN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg2Mi1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODg4OnN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODg5LVx0XHRzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwOS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MTA6c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxMS1cdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkzMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MzI6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMzLVx0XHRzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5NTc6c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1OC1cdCAgICAgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk4Ni0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5ODc6c3RhdGljIHNpemVfdCBjb3VudF91c2VyZGF0YV9lbnRyaWVzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTg4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTkxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk5MjpzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5My1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDE4PXN0cnVjdCB1c2VyZGF0dW0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDIyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMjM6c3RhdGljIHN0cnVjdCB1c2VyZGF0dW0gKnRvX3VzZXJkYXR1bShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAyNC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMjg9c3RydWN0IHVzZXJkYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAzMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDMyOnN0YXRpYyBzdHJ1Y3QgdXNlcmRhdGEgKnRvX3VzZXJkYXRhKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDMzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAzNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDM3OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKnVzZXJkYXRhX3RvX3RhcmdldChzdHJ1Y3QgdXNlcmRhdGEgKnVkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDQ0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNDU6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA0Ni17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTMtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1NDpzdGF0aWMgaW50IGNhbGNfdXNlcmRhdGFfbGVuKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1NS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNzItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA3MzpzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNzQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMjE6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjItXHRcdFx0XHQgICAgIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE1OS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTYwOnN0YXRpYyB2b2lkIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2MS1cdFx0XHRcdCAgICBlbnVtIHN5c2RhdGFfZmVhdHVyZSBmZWF0dXJlKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTY2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNjc6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTY4LVx0XHRcdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTk2OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTk3LVx0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMjU6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI2LVx0XHRcdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1NC0vKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNTU6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1Ni1cdFx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjkyPUNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIG1zZ2lkX2VuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyOTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI5NDpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdXNlcmRhdHVtX2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5NS1cdFx1MDAyNnVzZXJkYXR1bV9hdHRyX3ZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjk4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyOTk6c3RhdGljIHZvaWQgdXNlcmRhdHVtX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzAzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMDQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdXNlcmRhdHVtX29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzA1LVx0LnJlbGVhc2UgPSB1c2VyZGF0dW1fcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMwNy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzA4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0dW1fdHlwZSA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzA5LVx0LmN0X2l0ZW1fb3BzXHQ9IFx1MDAyNnVzZXJkYXR1bV9vcHMsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTMxNDpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMTUtXHRcdFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMzc6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM1MC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzUxOnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp1c2VyZGF0YV9hdHRyc1tdID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNTItXHRcdTAwMjZzeXNkYXRhX2F0dHJfY3B1X25yX2VuYWJsZWQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNTgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM1OTpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjAtXHQubWFrZV9pdGVtXHRcdD0gdXNlcmRhdHVtX21ha2VfaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzY0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjUtXHQuY3RfaXRlbV9vcHNcdD0gXHUwMDI2dXNlcmRhdHVtX29wcyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTM4MT1DT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzgyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzODM6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM4NC1cdFx1MDAyNmF0dHJfZW5hYmxlZCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQwMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDAyOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MDMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDA5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0MTA6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMS1cdC5yZWxlYXNlXHRcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDE0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MTUtXHQuY3RfYXR0cnNcdFx0PSBuZXRjb25zb2xlX3RhcmdldF9hdHRycyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxOS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDIwOnN0YXRpYyB2b2lkIGluaXRfdGFyZ2V0X2NvbmZpZ19ncm91cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MjEtXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MjgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQyOTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpmaW5kX2NtZGxpbmVfdGFyZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzMC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NDktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ1MDpzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDUxLVx0XHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0ODMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ4NDpzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0ODUtXHRcdFx0XHQgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1MzMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTUzNDpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1MzUtXHQubWFrZV9ncm91cFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTM4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1Mzk6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG5ldGNvbnNvbGVfc3Vic3lzX3R5cGUgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU0MC1cdC5jdF9ncm91cF9vcHNcdD0gXHUwMDI2bmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTQ0LS8qIFRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIHN1YnN5c3RlbSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NDU6c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU0Ni1cdC5zdV9ncm91cFx0PSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU1NDpzdGF0aWMgdm9pZCBwb3B1bGF0ZV9jb25maWdmc19pdGVtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1NS1cdFx0XHRcdCAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTYzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NjQ6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF9jcHVfbnIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTY1LVx0XHRcdFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTcyOnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfdGFza25hbWUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTczLVx0XHRcdFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTc5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODA6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF9yZWxlYXNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4MS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NzpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX21zZ2lkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4OC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1OTktICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYwMDpzdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MDEtXHRcdFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjI1LS8qIEhhbmRsZSBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugbm90aWZpY2F0aW9ucyAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MjY6c3RhdGljIGludCBuZXRjb25zb2xlX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyNy1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwMy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzA0OnN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwNS1cdC5ub3RpZmllcl9jYWxsICA9IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE5LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MjA6c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MjEte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3NDM6c3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NDQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzY3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3Njg6c3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NjktXHRcdFx0XHQgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc5Mi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzkzOnN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzk0LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgxMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODExOnN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODEyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyNC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODI1OnN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyNi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NTEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg1MjpzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NTMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODc0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzU6c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTE5LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5MjA6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MjEte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTM2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5Mzc6c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MzgtXHRcdFx0XHQgICAgICBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NzItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk3MzpzdGF0aWMgdm9pZCBhcHBlbmRfcmVsZWFzZShjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3NC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5ODAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk4MTpzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5ODItXHRcdFx0XHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDcyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNzM6c3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNzQtXHRcdFx0XHRjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMTgtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjExOTpzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyMC1cdFx0XHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1MC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTUxOnN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1Mi1cdFx0XHQgdW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3MS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTcyOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTk5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDA6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMS1cdFx0XHRcdCBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwNjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDctXHRcdFx0XHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxMjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV9sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpmbGFncylcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE0PV9fYWNxdWlyZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxOC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE5OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfZGV2aWNlX3VubG9jayhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjIwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMjE9X19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjY6c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzIwLS8qIEFsbG9jYXRlIG5ldyB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBzZXR1cCBuZXRwb2xsIGZvciBpdCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMjE6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMyMi1cdFx0XHRcdFx0XHQgICAgaW50IGNtZGxpbmVfY291bnQpXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NjQKCQkJCQkJCW91dHB1dDogNjUKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBvdmVyIHRoaXMgYG5ldGNvbnNvbGVgIGNvZGUsIGFuZCB0aGUgaW1tZWRpYXRlIHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgdGhlIGNydWNpYWwgYGluaXRfbW9kdWxlYCBhbmQgYGNsZWFudXBfbW9kdWxlYCBmdW5jdGlvbnMg4oCTIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMsIHJlYWxseSDigJMgYXJlIGFsbCBtYWNyby1nZW5lcmF0ZWQuIFN0YW5kYXJkIHN0dWZmLiBOb3RoaW5nIHVudXN1YWwgdGhlcmUuIEJ1dCBob2xkIG9uLi4uIHdhc24mIzM5O3QgdGhlcmUgYSBzdGF0aWMgZnVuY3Rpb24uLi4gaG1tLi4uIHllYWgsIGBuZXRjb25zb2xlX3dyaXRlYCBpcyBmbGFnZ2VkIGFzIHN0YXRpYy4KCkFscmlnaHQsIHRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZmxvYXRpbmcgYXJvdW5kIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBlbHNlIHdlIGNhbiB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MD1fX3NldHVwKFwmIzM0O25ldGNvbnNvbGU9XCYjMzQ7LCBvcHRpb25fc2V0dXApO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04My0vKiBMaW5rZWQgbGlzdCBvZiBhbGwgY29uZmlndXJlZCB0YXJnZXRzICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUtLyogdGFyZ2V0X2NsZWFudXBfbGlzdCBpcyB1c2VkIHRvIHRyYWNrIHRhcmdldHMgdGhhdCBuZWVkIHRvIGJlIGNsZWFuZWQgb3V0c2lkZVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxLS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMtLyogVGhpcyBuZWVkcyB0byBiZSBhIG11dGV4IGJlY2F1c2UgbmV0cG9sbF9jbGVhbnVwIG1pZ2h0IHNsZWVwICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQ6c3RhdGljIERFRklORV9NVVRFWCh0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTU9c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXM7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OnN0YXRpYyBERUZJTkVfTVVURVgoZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTg4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBNeSBSZWdleCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyByZWdleCBhbmQgaXQmIzM5O3MganVzdCBub3QgcXVpdGUgcmlnaHQuIEkgd2FzIHRyeWluZyB0byBmaW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBidXQgSSYjMzk7bSBjbGVhcmx5IG1pc3Npbmcgc29tZXRoaW5nLiBMZXQgbWUgdHJ5IGBncmVwIC1FICYjMzk7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlwoJiMzOTsgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gVGhhdCBzaG91bGQgY2F0Y2ggbW9zdCBvZiB0aGVtLi4uIGJ1dCB3YWl0LCBJIGtub3cgZnJvbSBtZW1vcnkgdGhhdCBtb3N0IGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IHByb2JhYmx5IGV4cGxhaW5zIHdoeSB0aGUgcmVzdWx0cyBhcmVuJiMzOTt0IHdoYXQgSSBleHBlY3QuIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayBgaW5pdF9uZXRjb25zb2xlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5pdF9uZXRjb25zb2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzk0PXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDAyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MDM6c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQwNC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0ODQ9c3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfbmV0Y29uc29sZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTE3LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MTg6bGF0ZV9pbml0Y2FsbChpbml0X25ldGNvbnNvbGUpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MTktbW9kdWxlX2V4aXQoY2xlYW51cF9uZXRjb25zb2xlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2ODAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRnVuY3Rpb24gRW50cnkgUG9pbnRzIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgc3RhdGljIGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgaGVyZS4gU2luY2UgdGhlIGluc3RydWN0aW9ucyBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBJJiMzOTtsbCBmaXJzdCBjaGVjayBpZiB0aGVyZSBhcmUgYW55LCBhbmQgaWYgbm90LCBmYWxsIGJhY2sgb24gdGhlIHN0YXRpYyBvbmVzLCBmb2N1c2luZyBvbiBtb2RpZmllZCBmdW5jdGlvbnMuCgpMb29raW5nIGF0IHRoZSBsaXN0IG9mIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnMsIEkgaGF2ZTogYHVwZGF0ZV91c2VyZGF0YWAsIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCwgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgLCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAsIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX3VkcGAsIGFuZCBgZnJlZV9wYXJhbV90YXJnZXRgLiBGb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucywgSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gbGlrZSBwb3RlbnRpYWwgQVBJIGVudHJ5cG9pbnRzIG9yIGhhdmUgYSBnb29kIGNoYW5jZSBvZiAqbm90KiBiZWluZyBpbmxpbmVkLgoKYHVwZGF0ZV91c2VyZGF0YWAsIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGFuZCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgIGFyZSB0aGUgZnJvbnQgcnVubmVycy4gYHNlbmRfZXh0X21zZ191ZHBgIGFuZCBgdXBkYXRlX3VzZXJkYXRhYCBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSBpbmxpbmVkIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIG1vcmUgc2lnbmlmaWNhbnQuCgpOb3csIEkmIzM5O20gbm90aW5nIHRoZSBjb25maWcgb3B0aW9ucy4gV2UgaGF2ZSBgTkVUQ09OU09MRWAsIGBORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR0ZTX0ZTYC4gSSBrbm93IGBDT05GSUdGU19GU2AgaXMgcHJldHR5IHN0YW5kYXJkLCBidXQgSSYjMzk7bGwgaW5jbHVkZSBpdCBqdXN0IHRvIGJlIHNhZmUuIEkgc2VlIHRoYXQgYE5FVENPTlNPTEVfRFlOQU1JQ2AgZGVwZW5kcyBvbiBgTkVUQ09OU09MRSAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgLiBMZXQmIzM5O3MgYXNzdW1lIHRoYXQgYFNZU0ZTYCBpcyBsaWtlbHkgaW1wbGllZC4gU28gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgYFsmIzM0O05FVENPTlNPTEUmIzM0OywgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywgJiMzNDtDT05GSUdGU19GUyYjMzQ7XWAuCgpJJiMzOTtsbCBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRDT05TT0xFYC4gU2VlbXMgaXQgZGVwZW5kcyBvbiBgUFJJTlRLYCwgd2hpY2ggaXMgc3RhbmRhcmQuCgpTbyBub3csIGZvciBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBiYXNlZCBvbiB0aGUgcHJldmlvdXMgZXZhbHVhdGlvbiwgSSYjMzk7bGwgZ28gd2l0aCBgWyYjMzQ7dXBkYXRlX3VzZXJkYXRhJiMzNDssICYjMzQ7c2VuZF9leHRfbXNnX3VkcCYjMzQ7LCAmIzM0O3NlbmRfbXNnX2ZyYWdtZW50ZWQmIzM0OywgJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywgJiMzNDt1c2VyZGF0dW1fZHJvcCYjMzQ7XWAuICBJJiMzOTtsbCB2ZXJpZnkgdGhhdCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCBhcmUgc3RhdGljLCBhcyBJIHN1c3BlY3QuCgpJIHNob3VsZCBhbHNvIG1ha2UgYSBub3RlIG9mIHRoZSBjb25zb2xlIHdyaXRlIGNhbGxiYWNrcywgaW4gY2FzZSB0aG9zZSB0dXJuIG91dCB0byBiZSBpbXBvcnRhbnQ6IGBuZXRjb25zb2xlX3dyaXRlYCwgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCwgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0Y29uc29sZV93cml0ZV9leHRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRjb25zb2xlX3dyaXRlX2V4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE3Mj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjAwOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfZXh0KHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDEtXHRcdFx0XHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzg1PXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM4Ny1cdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX0VYVEVOREVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM4ODpcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzg5Olx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzOTAtXHQuZGV2aWNlX2xvY2sgPSBuZXRjb25zb2xlX2RldmljZV9sb2NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE1MgoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiA1NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGNvbnNvbGUgUkNVIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGltcGxlbWVudGluZyBSZWFkLUNvcHktVXBkYXRlIChSQ1UpIHByb3RlY3Rpb24gZm9yIHRoZSBgdXNlcmRhdGFgIGZpZWxkIHdpdGhpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzIHJlbGF0ZWQgdG8gaG93IHRoZSBjb25maWd1cmF0aW9uIGRhdGEgaXMgbWFuYWdlZCBhbmQgYWNjZXNzZWQuCgpUaGUga2V5IGVudHJ5IHBvaW50cyBhcmUgY2xlYXI6IGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBhcmUgdGhlIHB1YmxpYyBmYWNlcyBmb3Igd3JpdGluZyB0byB0aGUgY29uc29sZSwgYW5kIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgIGFyZSB0aGUgY29uZmlnZnMgZW50cnkgcG9pbnRzIGZvciBtYW5hZ2luZyB0aGUgYHVzZXJkYXRhYC4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdDoKCiogICBgdXBkYXRlX3VzZXJkYXRhYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgdGhlIGBuZXRjb25zX3VzZXJkYXRhYCBzdHJ1Y3R1cmUgdXNpbmcgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLiBUaGlzIGlzIHdoZXJlIHRoZSBuZXcgZGF0YSBjb21lcyBpbiBhbmQgdGhlIG9sZCBkYXRhIGlzIGdyYWNlZnVsbHkgcmVsaW5xdWlzaGVkIHZpYSBSQ1Ugc2VtYW50aWNzLgoqICAgYHNlbmRfZXh0X21zZ191ZHBgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgcmVhZGluZyB0aGlzIHByb3RlY3RlZCBgdXNlcmRhdGFgLiBJIHNlZSBpdCB1c2luZyBgcmN1X3JlYWRfbG9jaygpYCwgYHJjdV9kZXJlZmVyZW5jZSgpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCB0byBzYWZlbHkgYWNjZXNzIHRoZSBkYXRhLiBUaGlzIGltcGxpZXMgYSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwgbWVhbmluZyB3ZSBjb3VsZCBwb3RlbnRpYWxseSBoYXZlIGhpZ2ggcmVhZCBwZXJmb3JtYW5jZSB3aGVuIHVwZGF0aW5nIHRoZSBjb25maWdzLgoqICAgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAgYXJlIHRoZSBjb25maWdmcyBob29rcyB0aGF0IHVsdGltYXRlbHkgKmNhbGwqIGB1cGRhdGVfdXNlcmRhdGFgIHRvIGhhbmRsZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoYXQgYHNlbmRfZXh0X21zZ191ZHBgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGFuZCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAgYXJlIGFsbCBtb2RpZmllZCB0byB0YWtlIGB1c2VyZGF0YWAgYXMgYW4gYXJndW1lbnQuIFRoZSBwYXRjaCBpcyBlbnN1cmluZyB0aGUgY3VycmVudCB1c2VyZGF0YSBpcyBwYXNzZWQgZG93biwgaW5zdGVhZCBvZiBzb21lIG90aGVyIGNvcHkgb2YgdGhlIHVzZXJkYXRhLgoKVGhlIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YCBmdW5jdGlvbnMgYXJlIGFsc28gbW9kaWZpZWQgdG8gYGtmcmVlKClgIHRoZSBvbGQgdXNlcmRhdGEgdXNpbmcgYHJjdV9hY2Nlc3NfcG9pbnRlcmAsIGluZGljYXRpbmcgdGhlIHJlbGVhc2UgcGFydCBvZiB0aGUgUkNVIGN5Y2xlLgoKVGhlcmVmb3JlLCBmb3IgbXkgdGVzdGluZyBhbmQgYW5hbHlzaXMsIG15IGluaXRpYWwgbGlzdCBvZiBmdW5jdGlvbnMgSSB3aWxsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaXM6CgoqICAgYHVwZGF0ZV91c2VyZGF0YWAgKGZvciBSQ1UgdXBkYXRlKQoqICAgYHNlbmRfZXh0X21zZ191ZHBgIChmb3IgUkNVIHJlYWQpCiogICBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCAoY29uZmlnZnMgdXBkYXRlKQoqICAgYHVzZXJkYXR1bV9kcm9wYCAoY29uZmlnZnMgdXBkYXRlKQoqICAgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCAoYmVjYXVzZSBJIHNlZSBpdCBhdCB0aGUgdG9wLCBhbmQgbGlrZWx5IGludGVyYWN0cyB3aXRoIGFsbCB0aGUgZnVuY3Rpb25zIGFib3ZlLCB3aXRoIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCkKCkdpdmVuIHRoaXMgY2hhbmdlIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24sIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGZ1enogdGhpcyBhcmVhIHdpdGggY29uY3VycmVudCB1cGRhdGVzIHRocm91Z2ggY29uZmlnZnMgYW5kIGNvbnNvbGUgd3JpdGVzIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3IgZGF0YSByYWNlcyBhcmUgaW50cm9kdWNlZC4gVGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdmVyaWZ5IGFyZSBgTkVUQ09OU09MRWAsIGBORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR0ZTX0ZTYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UgZm9yIHRoZSBjb3JlIGtlcm5lbCwgbGlrZWx5IGluY3JlYXNpbmcgaXRzIHN0YWJpbGl0eS4gVGltZSB0byBzZXQgdXAgdGhhdCBmdXp6aW5nIGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1cGRhdGVfdXNlcmRhdGEmIzM0OywKICAgICYjMzQ7c2VuZF9leHRfbXNnX3VkcCYjMzQ7LAogICAgJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX2Ryb3AmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV93cml0ZV9leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIGB1c2VyZGF0YWAgcGF5bG9hZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEl0IG1vZGlmaWVzIGhvdyB1c2VyZGF0YSBpcyB1cGRhdGVkIHZpYSBjb25maWdmcyBhbmQgaG93IGl0IGlzIHJlYWQgZHVyaW5nIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMpIHRoYXQgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24gaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBjcmFzaGVzIHVuZGVyIGNvbmN1cnJlbnQgY29uZmlnZnMgdXBkYXRlcyBhbmQgY29uc29sZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXBkYXRlX3VzZXJkYXRhJiMzNDssCiAgICAmIzM0O3NlbmRfZXh0X21zZ191ZHAmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX3ZhbHVlX3N0b3JlJiMzNDssCiAgICAmIzM0O3VzZXJkYXR1bV9kcm9wJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfd3JpdGVfZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBgdXNlcmRhdGFgIHBheWxvYWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyLiBJdCBtb2RpZmllcyBob3cgdXNlcmRhdGEgaXMgdXBkYXRlZCB2aWEgY29uZmlnZnMgYW5kIGhvdyBpdCBpcyByZWFkIGR1cmluZyBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jKSB0aGF0IHByZXZlbnRzIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgUkNVIGltcGxlbWVudGF0aW9uIGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgY3Jhc2hlcyB1bmRlciBjb25jdXJyZW50IGNvbmZpZ2ZzIHVwZGF0ZXMgYW5kIGNvbnNvbGUgd3JpdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MTk6MzUuNjMzNjYyNjUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY2MTgzMTM5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVwZGF0ZV91c2VyZGF0YVwiLFxuICAgIFwic2VuZF9leHRfbXNnX3VkcFwiLFxuICAgIFwidXNlcmRhdHVtX3ZhbHVlX3N0b3JlXCIsXG4gICAgXCJ1c2VyZGF0dW1fZHJvcFwiLFxuICAgIFwibmV0Y29uc29sZV93cml0ZV9leHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgYHVzZXJkYXRhYCBwYXlsb2FkIGluIHRoZSBuZXRjb25zb2xlIGRyaXZlci4gSXQgbW9kaWZpZXMgaG93IHVzZXJkYXRhIGlzIHVwZGF0ZWQgdmlhIGNvbmZpZ2ZzIGFuZCBob3cgaXQgaXMgcmVhZCBkdXJpbmcgbWVzc2FnZSB0cmFuc21pc3Npb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYykgdGhhdCBwcmV2ZW50cyB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcy4gSXQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgY3Jhc2hlcyB1bmRlciBjb25jdXJyZW50IGNvbmZpZ2ZzIHVwZGF0ZXMgYW5kIGNvbnNvbGUgd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoxOTozNS42MzM2Njk3NDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDk5MjM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFmZjExMGNmYTFlNGFhNjQ5ZGFhZjI1YjBjYmE0YzlkNDE4M2I0ZTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAxMjoxOTozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5pbmRleCA4NjIwMDFkMDlhYTg0Li4xNDA5MmZiMTVmNmQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbkBAIC0xMzUsMTMgKzEzNSwyNyBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XFxuIFxcdFNUQVRFX0RFQUNUSVZBVEVELFxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXFxuKyAqIEByY3U6XFx0VXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLlxcbisgKiBAbGVuZ3RoOlxcdExlbmd0aCBvZiBAZGF0YSwgZXhjbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvci5cXG4rICogQGRhdGE6XFx0Rm9ybWF0dGVkIFxcXCIga2V5PXZhbHVlXFxcXG5cXFwiIGVudHJpZXMsIE5VTCB0ZXJtaW5hdGVkLlxcbisgKlxcbisgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZFxcbisgKiBAbGVuZ3RoIGRpc2FncmVlaW5nLlxcbisgKi9cXG4rc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xcbitcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxuK1xcdHNpemVfdFxcdFxcdFxcdGxlbmd0aDtcXG4rXFx0Y2hhclxcdFxcdFxcdGRhdGFbXTtcXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cXG4gICogQGxpc3Q6XFx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXFxuICAqIEBncm91cDpcXHRMaW5rcyB1cyBpbnRvIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0gaGllcmFyY2h5LlxcbiAgKiBAdXNlcmRhdGFfZ3JvdXA6XFx0TGlua3MgdG8gdGhlIHVzZXJkYXRhIGNvbmZpZ2ZzIGhpZXJhcmNoeVxcbi0gKiBAdXNlcmRhdGE6XFx0XFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxcbi0gKiBAdXNlcmRhdGFfbGVuZ3RoOlxcdFN0cmluZyBsZW5ndGggb2YgdXNlcmRhdGEuXFxuKyAqIEB1c2VyZGF0YTpcXHRcXHRDYWNoZWQsIGZvcm1hdHRlZCB1c2VyZGF0YSBwYXlsb2FkLiBSQ1UgcHJvdGVjdGVkLlxcbiAgKiBAc3lzZGF0YTpcXHRcXHRDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kXFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcXHRTeXNkYXRhIGZlYXR1cmVzIGVuYWJsZWQuXFxuICAqIEBtc2djb3VudGVyOlxcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxcbkBAIC0xNzYsOCArMTkwLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4gI2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXFx0Z3JvdXA7XFxuIFxcdHN0cnVjdCBjb25maWdfZ3JvdXBcXHR1c2VyZGF0YV9ncm91cDtcXG4tXFx0Y2hhclxcdFxcdFxcdCp1c2VyZGF0YTtcXG4tXFx0c2l6ZV90XFx0XFx0XFx0dXNlcmRhdGFfbGVuZ3RoO1xcbitcXHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSBfX3JjdSAqdXNlcmRhdGE7XFxuIFxcdGNoYXJcXHRcXHRcXHRzeXNkYXRhW01BWF9FWFRSQURBVEFfRU5UUllfTEVOICogTUFYX1NZU0RBVEFfSVRFTVNdO1xcbiBcXG4gXFx0LyogYml0LXdpc2Ugd2l0aCBzeXNkYXRhX2ZlYXR1cmUgYml0cyAqL1xcbkBAIC0xMDU5LDEyICsxMDcyLDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFxuIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIHtcXG4rXFx0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm5ldyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpvbGQ7XFxuIFxcdHN0cnVjdCB1c2VyZGF0dW0gKnVkbV9pdGVtO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW07XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xcbi1cXHRjaGFyICpvbGRfYnVmID0gTlVMTDtcXG4tXFx0Y2hhciAqbmV3X2J1ZiA9IE5VTEw7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCBvZmZzZXQgPSAwO1xcbiBcXHRpbnQgbGVuO1xcbiBcXG5AQCAtMTA3Niw4ICsxMDg4LDggQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFxuIFxcdC8qIEFsbG9jYXRlIG5ldyBidWZmZXIgKi9cXG4gXFx0aWYgKGxlbikge1xcbi1cXHRcXHRuZXdfYnVmID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTtcXG4tXFx0XFx0aWYgKCFuZXdfYnVmKVxcbitcXHRcXHRuZXcgPSBrbWFsbG9jX2ZsZXgoKm5ldywgZGF0YSwgbGVuICsgMSk7XFxuK1xcdFxcdGlmICghbmV3KVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG5AQCAtMTA4NywyMiArMTA5OSwyMSBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXHRcXHR1ZG1faXRlbSA9IHRvX3VzZXJkYXR1bShpdGVtKTtcXG4gXFx0XFx0LyogU2tpcCB1c2VyZGF0YSB3aXRoIG5vIHZhbHVlIHNldCAqL1xcbiBcXHRcXHRpZiAodWRtX2l0ZW0tXFx1MDAzZXZhbHVlWzBdKSB7XFxuLVxcdFxcdFxcdG9mZnNldCArPSBzY25wcmludGYoXFx1MDAyNm5ld19idWZbb2Zmc2V0XSwgbGVuICsgMSAtIG9mZnNldCxcXG4rXFx0XFx0XFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcXHUwMDI2bmV3LVxcdTAwM2VkYXRhW29mZnNldF0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBsZW4gKyAxIC0gb2Zmc2V0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFxcIiAlcz0lc1xcXFxuXFxcIiwgaXRlbS1cXHUwMDNlY2lfbmFtZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHVkbV9pdGVtLVxcdTAwM2V2YWx1ZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pO1xcbitcXHRpZiAobmV3KVxcbitcXHRcXHRuZXctXFx1MDAzZWxlbmd0aCA9IG9mZnNldDtcXG4gXFxuLVxcdC8qIFN3aXRjaCB0byBuZXcgYnVmZmVyIGFuZCBmcmVlIG9sZCBidWZmZXIgKi9cXG4tXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcXG4tXFx0b2xkX2J1ZiA9IG50LVxcdTAwM2V1c2VyZGF0YTtcXG4tXFx0bnQtXFx1MDAzZXVzZXJkYXRhID0gbmV3X2J1ZjtcXG4tXFx0bnQtXFx1MDAzZXVzZXJkYXRhX2xlbmd0aCA9IG9mZnNldDtcXG4tXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xcbi1cXG4tXFx0a2ZyZWUob2xkX2J1Zik7XFxuK1xcdC8qIFdyaXRlcnMgYXJlIHNlcmlhbGl6ZWQgYnkgZHluYW1pY19uZXRjb25zb2xlX211dGV4LiAqL1xcbitcXHRvbGQgPSByY3VfcmVwbGFjZV9wb2ludGVyKG50LVxcdTAwM2V1c2VyZGF0YSwgbmV3LFxcbitcXHRcXHRcXHRcXHQgIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2ZHluYW1pY19uZXRjb25zb2xlX211dGV4KSk7XFxuK1xcdGtmcmVlX3JjdShvbGQsIHJjdSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xMzkyLDcgKzE0MDMsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbiBcXG4tXFx0a2ZyZWUobnQtXFx1MDAzZXVzZXJkYXRhKTtcXG4rXFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVxcdTAwM2V1c2VyZGF0YSkpO1xcbiBcXHRrZnJlZShudCk7XFxuIH1cXG4gXFxuQEAgLTE5MjYsMTQgKzE5MzcsMTMgQEAgc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm1zZyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgaW50IG1zZ19sZW4sXFxuLVxcdFxcdFxcdFxcdCAgICAgIGludCByZWxlYXNlX2xlbilcXG4rXFx0XFx0XFx0XFx0ICAgICAgaW50IHJlbGVhc2VfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXFxuIHtcXG4tXFx0Y29uc3QgY2hhciAqdXNlcmRhdGEgPSBOVUxMO1xcbiBcXHRjb25zdCBjaGFyICpzeXNkYXRhID0gTlVMTDtcXG4gXFx0Y29uc3QgY2hhciAqcmVsZWFzZTtcXG4gXFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuLVxcdHVzZXJkYXRhID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbiBcXHRzeXNkYXRhID0gbnQtXFx1MDAzZXN5c2RhdGE7XFxuICNlbmRpZlxcbiBcXG5AQCAtMTk1MCw3ICsxOTYwLDcgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHRpZiAodXNlcmRhdGEpXFxuIFxcdFxcdG1zZ19sZW4gKz0gc2NucHJpbnRmKFxcdTAwMjZudC1cXHUwMDNlYnVmW21zZ19sZW5dLFxcbiBcXHRcXHRcXHRcXHQgICAgIHNpemVvZihudC1cXHUwMDNlYnVmKSAtIG1zZ19sZW4sIFxcXCIlc1xcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgdXNlcmRhdGEpO1xcbitcXHRcXHRcXHRcXHQgICAgIHVzZXJkYXRhLVxcdTAwM2VkYXRhKTtcXG4gXFxuIFxcdGlmIChzeXNkYXRhKVxcbiBcXHRcXHRtc2dfbGVuICs9IHNjbnByaW50ZihcXHUwMDI2bnQtXFx1MDAzZWJ1Zlttc2dfbGVuXSxcXG5AQCAtMTk3MCw3ICsxOTgwLDggQEAgc3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKVxcbiBcXG4gc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm1zZ2JvZHlfcHRyLCBpbnQgaGVhZGVyX2xlbixcXG4tXFx0XFx0XFx0XFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuKVxcbitcXHRcXHRcXHRcXHQgaW50IG1zZ2JvZHlfbGVuLCBpbnQgc3lzZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqdXNlcmRhdGFfcHRyID0gTlVMTDtcXG4gXFx0Y29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMO1xcbkBAIC0xOTgxLDEyICsxOTkyLDEyIEBAIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xcbiBcXG4gI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG4tXFx0dXNlcmRhdGFfcHRyID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbiBcXHRzeXNkYXRhX3B0ciA9IG50LVxcdTAwM2VzeXNkYXRhO1xcbi1cXHR1c2VyZGF0YV9sZW4gPSBudC1cXHUwMDNldXNlcmRhdGFfbGVuZ3RoO1xcbiAjZW5kaWZcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghdXNlcmRhdGFfcHRyIFxcdTAwMjZcXHUwMDI2IHVzZXJkYXRhX2xlbiAhPSAwKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAodXNlcmRhdGEpIHtcXG4rXFx0XFx0dXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtXFx1MDAzZWRhdGE7XFxuK1xcdFxcdHVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLVxcdTAwM2VsZW5ndGg7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIXN5c2RhdGFfcHRyIFxcdTAwMjZcXHUwMDI2IHN5c2RhdGFfbGVuICE9IDApKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTIwNjMsNyArMjA3NCw4IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4gXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqbXNnLFxcbiBcXHRcXHRcXHRcXHRpbnQgbXNnX2xlbixcXG4gXFx0XFx0XFx0XFx0aW50IHJlbGVhc2VfbGVuLFxcbi1cXHRcXHRcXHRcXHRpbnQgc3lzZGF0YV9sZW4pXFxuK1xcdFxcdFxcdFxcdGludCBzeXNkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxcbiB7XFxuIFxcdGludCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbjtcXG4gXFx0Y29uc3QgY2hhciAqbXNnYm9keTtcXG5AQCAtMjA5Miw3ICsyMTA0LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHQgKiB3aWxsIGJlIHJlcGxhY2VkXFxuIFxcdCAqL1xcbiBcXHRzZW5kX2ZyYWdtZW50ZWRfYm9keShudCwgbXNnYm9keSwgaGVhZGVyX2xlbiwgbXNnYm9keV9sZW4sXFxuLVxcdFxcdFxcdCAgICAgc3lzZGF0YV9sZW4pO1xcbitcXHRcXHRcXHQgICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMTA3LDI1ICsyMTE5LDMzIEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4gc3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4ge1xcbitcXHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEgPSBOVUxMO1xcbiBcXHRpbnQgdXNlcmRhdGFfbGVuID0gMDtcXG4gXFx0aW50IHJlbGVhc2VfbGVuID0gMDtcXG4gXFx0aW50IHN5c2RhdGFfbGVuID0gMDtcXG4gXFx0aW50IGxlbjtcXG4gXFxuK1xcdC8qIEtlZXBzIHRoZSBwYXlsb2FkIHBpY2tlZCBiZWxvdyBhbGl2ZSB1bnRpbCB0aGUgbGFzdCBzZW5kX3VkcCgpLiAqL1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbiBcXHRzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpO1xcbi1cXHR1c2VyZGF0YV9sZW4gPSBudC1cXHUwMDNldXNlcmRhdGFfbGVuZ3RoO1xcbitcXHR1c2VyZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShudC1cXHUwMDNldXNlcmRhdGEpO1xcbitcXHRpZiAodXNlcmRhdGEpXFxuK1xcdFxcdHVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLVxcdTAwM2VsZW5ndGg7XFxuICNlbmRpZlxcbiBcXHRpZiAobnQtXFx1MDAzZXJlbGVhc2UpXFxuIFxcdFxcdHJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLVxcdTAwM2VyZWxlYXNlKSArIDE7XFxuIFxcbiBcXHRsZW4gPSB3Y3R4dC1cXHUwMDNlbGVuICsgcmVsZWFzZV9sZW4gKyBzeXNkYXRhX2xlbiArIHVzZXJkYXRhX2xlbjtcXG4gXFx0aWYgKGxlbiBcXHUwMDNjPSBNQVhfUFJJTlRfQ0hVTkspXFxuLVxcdFxcdHJldHVybiBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKG50LCB3Y3R4dC1cXHUwMDNlb3V0YnVmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgd2N0eHQtXFx1MDAzZWxlbiwgcmVsZWFzZV9sZW4pO1xcbitcXHRcXHRzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKG50LCB3Y3R4dC1cXHUwMDNlb3V0YnVmLCB3Y3R4dC1cXHUwMDNlbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgIHJlbGVhc2VfbGVuLCB1c2VyZGF0YSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0c2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXFx1MDAzZW91dGJ1Ziwgd2N0eHQtXFx1MDAzZWxlbiwgcmVsZWFzZV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpO1xcbiBcXG4tXFx0cmV0dXJuIHNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LVxcdTAwM2VvdXRidWYsIHdjdHh0LVxcdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxcbi1cXHRcXHRcXHRcXHQgICBzeXNkYXRhX2xlbik7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbkBAIC0yMzU3LDcgKzIzNzcsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZudC1cXHUwMDNlcmVzdW1lX3dxKTtcXG4gXFx0bmV0cG9sbF9jbGVhbnVwKFxcdTAwMjZudC1cXHUwMDNlbnApO1xcbiAjaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuLVxcdGtmcmVlKG50LVxcdTAwM2V1c2VyZGF0YSk7XFxuK1xcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC1cXHUwMDNldXNlcmRhdGEpKTtcXG4gI2VuZGlmXFxuIFxcdGtmcmVlKG50KTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxcbmluZGV4IGI1NmM3MGI3ZTI3NDIuLmYwNjc0YzAwMTdmYzQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcXG5AQCAtMTMsNiArMTMsNyBAQCBURVNUX1BST0dTIDo9IFxcXFxcXG4gXFx0bmV0Y29uc19yZXN1bWUuc2ggXFxcXFxcbiBcXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcXFxcbiBcXHRuZXRjb25zX3RvcnR1cmUuc2ggXFxcXFxcbitcXHRuZXRjb25zX3VzZXJkYXRhLnNoIFxcXFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xcbiBcXG4gaW5jbHVkZSAuLi8uLi8uLi9saWIubWtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMTM5MDNmNGNlMWM1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaFxcbkBAIC0wLDAgKzEsMjI5IEBAXFxuKyMhL3Vzci9iaW4vZW52IGJhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rIyBFeGVyY2lzZSB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLlxcbisjXFxuKyMgVGhlIGZpcnN0IHBhcnQgY2hlY2tzIHRoYXQgdGhlIHBheWxvYWQgdGhlIHRhcmdldCB0cmFuc21pdHMgZm9sbG93cyB3aGF0XFxuKyMgY29uZmlnZnMgc2F5czogYSB2YWx1ZSBzaG93cyB1cCBpbiB0aGUgbmV4dCBtZXNzYWdlLCBhbiB1cGRhdGUgcmVwbGFjZXMgdGhlXFxuKyMgcHJldmlvdXMgb25lLCBjbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5LCBhbmQgc28gZG9lcyByZW1vdmluZyB0aGVcXG4rIyBrZXkuXFxuKyNcXG4rIyBUaGUgc2Vjb25kIHBhcnQgcmV3cml0ZXMgdmFsdWVzLCBjcmVhdGVzIGFuZCBkZWxldGVzIGtleXMsIGFuZCBjbGVhcnMgdGhlXFxuKyMgcGF5bG9hZCBlbnRpcmVseSB3aGlsZSBtZXNzYWdlcyBhcmUgYmVpbmcgc2VudCwgc28gdGhlIHRyYW5zbWl0IHBhdGgga2VlcHNcXG4rIyBwaWNraW5nIHVwIHBheWxvYWRzIHRoYXQgYXJlIGJlaW5nIHJlcGxhY2VkIHVuZGVybmVhdGggaXQuIEl0IHJ1bnMgdHdpY2UsXFxuKyMgb25jZSB3aXRoIGEgcGF5bG9hZCBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGEgc2luZ2xlIHBhY2tldCBhbmQgb25jZSBsYXJnZVxcbisjIGVub3VnaCB0byBiZSBmcmFnbWVudGVkLlxcbisjXFxuKyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbitcXG4rc2V0IC1ldW8gcGlwZWZhaWxcXG4rXFxuK1NDUklQVERJUj0kKGRpcm5hbWUgXFxcIiQocmVhZGxpbmsgLWUgXFxcIiR7QkFTSF9TT1VSQ0VbMF19XFxcIilcXFwiKVxcbitcXG4rc291cmNlIFxcXCIke1NDUklQVERJUn1cXFwiLy4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaFxcbitcXG4rIyBOdW1iZXIgb2YgdGltZXMgZWFjaCB0b3J0dXJlIHdvcmtlciBsb29wc1xcbitJVEVSQVRJT05TPSR7MTotMjAwfVxcbitcXG4rIyBLZXlzIG93bmVkIGJ5IGVhY2ggdG9ydHVyZSB3b3JrZXIuIFdvcmtlcnMgZG8gbm90IHNoYXJlIGtleXMsIHNvIGEgZmFpbGluZ1xcbisjIGNvbmZpZ2ZzIG9wZXJhdGlvbiBtZWFucyBhIHJlYWwgcHJvYmxlbSBhbmQgbm90IGEgbG9zdCByYWNlLlxcbitDSFVSTl9LRVk9XFxcImNodXJua2V5XFxcIlxcbitUUkFOU0lFTlRfS0VZPVxcXCJ0cmFuc2llbnRrZXlcXFwiXFxuKyMgTnVtYmVyIG9mIGtleXMgdXNlZCB0byBwdXNoIGEgbWVzc2FnZSBwYXN0IE1BWF9QUklOVF9DSFVOS1xcbitCVUxLX0tFWVM9OFxcbitcXG4rVVNFUkRBVEFfRElSPVxcXCIke05FVENPTlNfUEFUSH0vdXNlcmRhdGFcXFwiXFxuKyMgVmFsdWVzIGFyZSBjYXBwZWQgYXQgTUFYX0VYVFJBREFUQV9WQUxVRV9MRU4oMjAwKSBieXRlcywgc28gJHtCVUxLX0tFWVN9XFxuKyMgZW50cmllcyBvZiB0aGlzIHNpemUgYXJlIGVub3VnaCB0byBmb3JjZSBmcmFnbWVudGF0aW9uXFxuK0xPTkdfVkFMVUU9JChwcmludGYgLS0gJ3YlLjBzJyB7MS4uMTkwfSlcXG4rXFxuK2Z1bmN0aW9uIHdyaXRlX2tleSgpIHtcXG4rXFx0bG9jYWwgS0VZPVxcXCIkezF9XFxcIlxcbitcXHRsb2NhbCBWQUxVRT1cXFwiJHsyfVxcXCJcXG4rXFxuK1xcdG1rZGlyIC1wIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtLRVl9XFxcIlxcbitcXHRlY2hvIFxcXCIke1ZBTFVFfVxcXCIgXFx1MDAzZSBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7S0VZfS92YWx1ZVxcXCJcXG4rfVxcbitcXG4rIyBTZW5kIGEgc2luZ2xlIG1lc3NhZ2UgYW5kIGNhcHR1cmUgaXQgb24gdGhlIGRlc3RpbmF0aW9uIGludGVyZmFjZVxcbitmdW5jdGlvbiBzZW5kX2FuZF9jYXB0dXJlKCkge1xcbitcXHRybSAtZiBcXFwiJHtPVVRQVVRfRklMRX1cXFwiXFxuK1xcbitcXHRsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byBcXFwiJHtPVVRQVVRfRklMRX1cXFwiIFxcdTAwMjZcXG4rXFx0d2FpdF9mb3JfcG9ydCBcXFwiJHtOQU1FU1BBQ0V9XFxcIiBcXFwiJHtQT1JUfVxcXCIgXFxcIiR7SVBfVkVSU0lPTn1cXFwiXFxuK1xcdGVjaG8gXFxcIiR7TVNHfTogJHtUQVJHRVR9XFxcIiBcXHUwMDNlIC9kZXYva21zZ1xcbitcXHRidXN5d2FpdCBcXFwiJHtCVVNZV0FJVF9USU1FT1VUfVxcXCIgdGVzdCAtcyBcXFwiJHtPVVRQVVRfRklMRX1cXFwiIHx8IHRydWVcXG4rXFx0cGtpbGxfc29jYXRcXG4rXFx0dmFsaWRhdGVfbXNnIFxcXCIke09VVFBVVF9GSUxFfVxcXCJcXG4rfVxcbitcXG4rZnVuY3Rpb24gZXhwZWN0X2luX21zZygpIHtcXG4rXFx0bG9jYWwgV0FOVEVEPVxcXCIkezF9XFxcIlxcbitcXG4rXFx0aWYgISBncmVwIC1xIC0tIFxcXCIke1dBTlRFRH1cXFwiIFxcXCIke09VVFBVVF9GSUxFfVxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJyR7V0FOVEVEfScgbm90IGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0Y2F0IFxcXCIke09VVFBVVF9GSUxFfVxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgXFxcIiR7a3NmdF9mYWlsfVxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rZnVuY3Rpb24gZXhwZWN0X25vdF9pbl9tc2coKSB7XFxuK1xcdGxvY2FsIFVOV0FOVEVEPVxcXCIkezF9XFxcIlxcbitcXG4rXFx0aWYgZ3JlcCAtcSAtLSBcXFwiJHtVTldBTlRFRH1cXFwiIFxcXCIke09VVFBVVF9GSUxFfVxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJyR7VU5XQU5URUR9JyBmb3VuZCBpbiAke09VVFBVVF9GSUxFfVxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGNhdCBcXFwiJHtPVVRQVVRfRklMRX1cXFwiIFxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRleGl0IFxcXCIke2tzZnRfZmFpbH1cXFwiXFxuK1xcdGZpXFxuK31cXG4rXFxuKyMgRXZlcnkgd3JpdGUgcHVibGlzaGVzIGEgbmV3IHBheWxvYWQgYW5kIGZyZWVzIHRoZSBwcmV2aW91cyBvbmUuIEFuIGVtcHR5XFxuKyMgdmFsdWUgaXMgc2tpcHBlZCB3aGVuIHRoZSBwYXlsb2FkIGlzIGZvcm1hdHRlZCwgc28gdGhpcyBhbHNvIGRyaXZlcyB0aGVcXG4rIyB0YXJnZXQgdGhyb3VnaCBoYXZpbmcgbm8gcGF5bG9hZCBhdCBhbGwuXFxuK2Z1bmN0aW9uIGNodXJuX3ZhbHVlKCkge1xcbitcXHRsb2NhbCBpXFxuK1xcbitcXHRmb3IgaSBpbiAkKHNlcSBcXFwiJHtJVEVSQVRJT05TfVxcXCIpXFxuK1xcdGRvXFxuK1xcdFxcdGVjaG8gXFxcInZhbHVlJHtpfVxcXCIgXFx1MDAzZSBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZVxcXCJcXG4rXFx0XFx0ZWNobyBcXHUwMDNlIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXFxcIlxcbitcXHRkb25lXFxuK31cXG4rXFxuKyMgQ3JlYXRlIGFuZCBkZWxldGUgYSBrZXkgdW5kZXJuZWF0aCB0aGUgc2VuZGVyXFxuK2Z1bmN0aW9uIGNodXJuX2tleSgpIHtcXG4rXFx0bG9jYWwgaVxcbitcXG4rXFx0Zm9yIGkgaW4gJChzZXEgXFxcIiR7SVRFUkFUSU9OU31cXFwiKVxcbitcXHRkb1xcbitcXHRcXHRta2RpciBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX1cXFwiXFxuK1xcdFxcdGVjaG8gXFxcInRyYW5zaWVudCR7aX1cXFwiIFxcdTAwM2UgXFxcIiR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9L3ZhbHVlXFxcIlxcbitcXHRcXHRybWRpciBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX1cXFwiXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rIyBLZWVwIHRoZSB0cmFuc21pdCBwYXRoIGJ1c3kgd2hpbGUgdGhlIHBheWxvYWQgaXMgYmVpbmcgcmVwbGFjZWRcXG4rZnVuY3Rpb24gc2VuZF9tZXNzYWdlcygpIHtcXG4rXFx0bG9jYWwgaVxcbitcXG4rXFx0Zm9yIGkgaW4gJChzZXEgXFxcIiR7SVRFUkFUSU9OU31cXFwiKVxcbitcXHRkb1xcbitcXHRcXHRlY2hvIFxcXCIke01TR306ICR7VEFSR0VUfSAke2l9XFxcIiBcXHUwMDNlIC9kZXYva21zZ1xcbitcXHRkb25lXFxuK31cXG4rXFxuKyMgUnVuIHRoZSB3b3JrZXJzIGNvbmN1cnJlbnRseSBhbmQgZmFpbCBpZiBhbnkgb2YgdGhlbSBoaXRzIGFuIGVycm9yXFxuK2Z1bmN0aW9uIHJ1bl93b3JrZXJzKCkge1xcbitcXHRsb2NhbCBQSURTPSgpXFxuK1xcdGxvY2FsIFdPUktFUlxcbitcXHRsb2NhbCBSRVQ9MFxcbitcXHRsb2NhbCBQSURcXG4rXFxuK1xcdGZvciBXT1JLRVIgaW4gXFxcIiRAXFxcIlxcbitcXHRkb1xcbitcXHRcXHRcXFwiJHtXT1JLRVJ9XFxcIiBcXHUwMDI2XFxuK1xcdFxcdFBJRFMrPShcXFwiJCFcXFwiKVxcbitcXHRkb25lXFxuK1xcbitcXHQjIFJlYXAgZXZlcnkgd29ya2VyIGJlZm9yZSByZXBvcnRpbmcgYSBmYWlsdXJlLCBvdGhlcndpc2UgYSBzdXJ2aXZpbmdcXG4rXFx0IyB3b3JrZXIga2VlcHMgd3JpdGluZyB0byBjb25maWdmcyB3aGlsZSB0aGUgZXhpdCB0cmFwIGNsZWFucyBpdCB1cC5cXG4rXFx0Zm9yIFBJRCBpbiBcXFwiJHtQSURTW0BdfVxcXCJcXG4rXFx0ZG9cXG4rXFx0XFx0d2FpdCBcXFwiJHtQSUR9XFxcIiB8fCBSRVQ9MVxcbitcXHRkb25lXFxuK1xcbitcXHRpZiBbWyBcXFwiJHtSRVR9XFxcIiAtbmUgMCBdXVxcbitcXHR0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IHVzZXJkYXRhIHRvcnR1cmUgd29ya2VyIGZhaWxlZFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgXFxcIiR7a3NmdF9mYWlsfVxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rZnVuY3Rpb24gY3JlYXRlX2J1bGtfa2V5cygpIHtcXG4rXFx0bG9jYWwgaVxcbitcXG4rXFx0Zm9yIGkgaW4gJChzZXEgXFxcIiR7QlVMS19LRVlTfVxcXCIpXFxuK1xcdGRvXFxuK1xcdFxcdHdyaXRlX2tleSBcXFwiYnVsayR7aX1cXFwiIFxcXCIke0xPTkdfVkFMVUV9XFxcIlxcbitcXHRkb25lXFxuK31cXG4rXFxuK2Z1bmN0aW9uIGRlbGV0ZV9idWxrX2tleXMoKSB7XFxuK1xcdGxvY2FsIGlcXG4rXFxuK1xcdGZvciBpIGluICQoc2VxIFxcXCIke0JVTEtfS0VZU31cXFwiKVxcbitcXHRkb1xcbitcXHRcXHRybWRpciBcXFwiJHtVU0VSREFUQV9ESVJ9L2J1bGske2l9XFxcIlxcbitcXHRkb25lXFxuK31cXG4rXFxuKyMgPT09PT09PT09PSAjXFxuKyMgU3RhcnQgaGVyZSAjXFxuKyMgPT09PT09PT09PSAjXFxuK1xcbittb2Rwcm9iZSBuZXRkZXZzaW0gMlxcdTAwM2UgL2Rldi9udWxsIHx8IHRydWVcXG4rbW9kcHJvYmUgbmV0Y29uc29sZSAyXFx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxcbitcXG4rSVBfVkVSU0lPTj1cXFwiaXB2NFxcXCJcXG4rIyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlXFxuK09VVFBVVF9GSUxFPVxcXCIvdG1wLyR7VEFSR0VUfVxcXCJcXG4rXFxuKyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxcbitjaGVja19mb3JfZGVwZW5kZW5jaWVzXFxuKyMgU2V0IGN1cnJlbnQgbG9nbGV2ZWwgdG8gS0VSTl9JTkZPKDYpLCBhbmQgZGVmYXVsdCB0byBLRVJOX05PVElDRSg1KVxcbitlY2hvIFxcXCI2IDVcXFwiIFxcdTAwM2UgL3Byb2Mvc3lzL2tlcm5lbC9wcmludGtcXG4rIyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdFxcbit0cmFwIGNsZWFudXAgRVhJVFxcbisjIENyZWF0ZSBvbmUgbmFtZXNwYWNlIGFuZCB0d28gaW50ZXJmYWNlc1xcbitzZXRfbmV0d29yayBcXFwiJHtJUF9WRVJTSU9OfVxcXCJcXG4rIyBDcmVhdGUgYSBkeW5hbWljIHRhcmdldCBmb3IgbmV0Y29uc29sZVxcbitjcmVhdGVfZHluYW1pY190YXJnZXRcXG4rXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyMgVEVTVCAjMVxcbisjIEEgdmFsdWUgd3JpdHRlbiB0byBjb25maWdmcyByZWFjaGVzIHRoZSBkZXN0aW5hdGlvblxcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbit3cml0ZV9rZXkgXFxcIiR7VVNFUkRBVEFfS0VZfVxcXCIgXFxcImZpcnN0XFxcIlxcbitzZW5kX2FuZF9jYXB0dXJlXFxuK2V4cGVjdF9pbl9tc2cgXFxcIiR7VVNFUkRBVEFfS0VZfT1maXJzdFxcXCJcXG4rXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyMgVEVTVCAjMlxcbisjIFVwZGF0aW5nIHRoZSB2YWx1ZSByZXBsYWNlcyB0aGUgcHJldmlvdXMgcGF5bG9hZFxcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbit3cml0ZV9rZXkgXFxcIiR7VVNFUkRBVEFfS0VZfVxcXCIgXFxcInNlY29uZFxcXCJcXG4rc2VuZF9hbmRfY2FwdHVyZVxcbitleHBlY3RfaW5fbXNnIFxcXCIke1VTRVJEQVRBX0tFWX09c2Vjb25kXFxcIlxcbitleHBlY3Rfbm90X2luX21zZyBcXFwiJHtVU0VSREFUQV9LRVl9PWZpcnN0XFxcIlxcbitcXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rIyBURVNUICMzXFxuKyMgQ2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeVxcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitlY2hvIFxcdTAwM2UgXFxcIiR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX0vdmFsdWVcXFwiXFxuK3NlbmRfYW5kX2NhcHR1cmVcXG4rZXhwZWN0X25vdF9pbl9tc2cgXFxcIiR7VVNFUkRBVEFfS0VZfT1cXFwiXFxuK1xcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbisjIFRFU1QgIzRcXG4rIyBSZW1vdmluZyB0aGUga2V5IGRyb3BzIHRoZSBlbnRyeVxcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbit3cml0ZV9rZXkgXFxcIiR7VVNFUkRBVEFfS0VZfVxcXCIgXFxcInRoaXJkXFxcIlxcbitybWRpciBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfVxcXCJcXG4rc2VuZF9hbmRfY2FwdHVyZVxcbitleHBlY3Rfbm90X2luX21zZyBcXFwiJHtVU0VSREFUQV9LRVl9PVxcXCJcXG4rcm0gXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIlxcbitcXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rIyBURVNUICM1XFxuKyMgVG9ydHVyZSB0aGUgcGF5bG9hZCB3aGlsZSBtZXNzYWdlcyBhcmUgYmVpbmcgc2VudCxcXG4rIyBmaXJzdCB1bmZyYWdtZW50ZWQgYW5kIHRoZW4gZnJhZ21lbnRlZFxcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbit3cml0ZV9rZXkgXFxcIiR7Q0hVUk5fS0VZfVxcXCIgXFxcIiR7VVNFUkRBVEFfVkFMVUV9XFxcIlxcbitydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xcbitcXG4rY3JlYXRlX2J1bGtfa2V5c1xcbitydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xcbitkZWxldGVfYnVsa19rZXlzXFxuK1xcbitleGl0IFxcXCIke2tzZnRfcGFzc31cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjE5OjM2LjE2NTcyOTU4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk2MDg2MjM0MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1cGRhdGVfdXNlcmRhdGFcIixcbiAgICBcInNlbmRfZXh0X21zZ191ZHBcIixcbiAgICBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICAgIFwidXNlcmRhdHVtX2Ryb3BcIixcbiAgICBcIm5ldGNvbnNvbGVfd3JpdGVfZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIGB1c2VyZGF0YWAgcGF5bG9hZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEl0IG1vZGlmaWVzIGhvdyB1c2VyZGF0YSBpcyB1cGRhdGVkIHZpYSBjb25maWdmcyBhbmQgaG93IGl0IGlzIHJlYWQgZHVyaW5nIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMpIHRoYXQgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24gaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIGNyYXNoZXMgdW5kZXIgY29uY3VycmVudCBjb25maWdmcyB1cGRhdGVzIGFuZCBjb25zb2xlIHdyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWZmMTEwY2ZhMWU0YWE2NDlkYWFmMjViMGNiYTRjOWQ0MTgzYjRlN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTI6MTk6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IDg2MjAwMWQwOWFhODQuLjE0MDkyZmIxNWY2ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTEzNSwxMyArMTM1LDI3IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiBcdFNUQVRFX0RFQUNUSVZBVEVELFxuIH07XG4gXG4rLyoqXG4rICogc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgLSBGb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZCBvZiBhIHRhcmdldC5cbisgKiBAcmN1Olx0VXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLlxuKyAqIEBsZW5ndGg6XHRMZW5ndGggb2YgQGRhdGEsIGV4Y2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3IuXG4rICogQGRhdGE6XHRGb3JtYXR0ZWQgXCIga2V5PXZhbHVlXFxuXCIgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuXG4rICpcbisgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZFxuKyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuXG4rICovXG4rc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuK1x0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbitcdHNpemVfdFx0XHRcdGxlbmd0aDtcbitcdGNoYXJcdFx0XHRkYXRhW107XG4rfTtcbitcbiAvKipcbiAgKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cbiAgKiBAbGlzdDpcdExpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LlxuICAqIEBncm91cDpcdExpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuXG4gICogQHVzZXJkYXRhX2dyb3VwOlx0TGlua3MgdG8gdGhlIHVzZXJkYXRhIGNvbmZpZ2ZzIGhpZXJhcmNoeVxuLSAqIEB1c2VyZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuLSAqIEB1c2VyZGF0YV9sZW5ndGg6XHRTdHJpbmcgbGVuZ3RoIG9mIHVzZXJkYXRhLlxuKyAqIEB1c2VyZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZC4gUkNVIHByb3RlY3RlZC5cbiAgKiBAc3lzZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cbiAgKiBAbXNnY291bnRlcjpcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxuQEAgLTE3Niw4ICsxOTAsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3RydWN0IGNvbmZpZ19ncm91cFx0Z3JvdXA7XG4gXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXHR1c2VyZGF0YV9ncm91cDtcbi1cdGNoYXJcdFx0XHQqdXNlcmRhdGE7XG4tXHRzaXplX3RcdFx0XHR1c2VyZGF0YV9sZW5ndGg7XG4rXHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSBfX3JjdSAqdXNlcmRhdGE7XG4gXHRjaGFyXHRcdFx0c3lzZGF0YVtNQVhfRVhUUkFEQVRBX0VOVFJZX0xFTiAqIE1BWF9TWVNEQVRBX0lURU1TXTtcbiBcbiBcdC8qIGJpdC13aXNlIHdpdGggc3lzZGF0YV9mZWF0dXJlIGJpdHMgKi9cbkBAIC0xMDU5LDEyICsxMDcyLDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcbiBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbitcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpuZXcgPSBOVUxMO1xuK1x0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm9sZDtcbiBcdHN0cnVjdCB1c2VyZGF0dW0gKnVkbV9pdGVtO1xuIFx0c3RydWN0IGNvbmZpZ19pdGVtICppdGVtO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XG4tXHRjaGFyICpvbGRfYnVmID0gTlVMTDtcbi1cdGNoYXIgKm5ld19idWYgPSBOVUxMO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBvZmZzZXQgPSAwO1xuIFx0aW50IGxlbjtcbiBcbkBAIC0xMDc2LDggKzEwODgsOCBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFxuIFx0LyogQWxsb2NhdGUgbmV3IGJ1ZmZlciAqL1xuIFx0aWYgKGxlbikge1xuLVx0XHRuZXdfYnVmID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTtcbi1cdFx0aWYgKCFuZXdfYnVmKVxuK1x0XHRuZXcgPSBrbWFsbG9jX2ZsZXgoKm5ldywgZGF0YSwgbGVuICsgMSk7XG4rXHRcdGlmICghbmV3KVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuQEAgLTEwODcsMjIgKzEwOTksMjEgQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdFx0dWRtX2l0ZW0gPSB0b191c2VyZGF0dW0oaXRlbSk7XG4gXHRcdC8qIFNraXAgdXNlcmRhdGEgd2l0aCBubyB2YWx1ZSBzZXQgKi9cbiBcdFx0aWYgKHVkbV9pdGVtLVx1MDAzZXZhbHVlWzBdKSB7XG4tXHRcdFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcdTAwMjZuZXdfYnVmW29mZnNldF0sIGxlbiArIDEgLSBvZmZzZXQsXG4rXHRcdFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcdTAwMjZuZXctXHUwMDNlZGF0YVtvZmZzZXRdLFxuK1x0XHRcdFx0XHQgICAgbGVuICsgMSAtIG9mZnNldCxcbiBcdFx0XHRcdFx0ICAgIFwiICVzPSVzXFxuXCIsIGl0ZW0tXHUwMDNlY2lfbmFtZSxcbiBcdFx0XHRcdFx0ICAgIHVkbV9pdGVtLVx1MDAzZXZhbHVlKTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0V0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pO1xuK1x0aWYgKG5ldylcbitcdFx0bmV3LVx1MDAzZWxlbmd0aCA9IG9mZnNldDtcbiBcbi1cdC8qIFN3aXRjaCB0byBuZXcgYnVmZmVyIGFuZCBmcmVlIG9sZCBidWZmZXIgKi9cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cdG9sZF9idWYgPSBudC1cdTAwM2V1c2VyZGF0YTtcbi1cdG50LVx1MDAzZXVzZXJkYXRhID0gbmV3X2J1Zjtcbi1cdG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aCA9IG9mZnNldDtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuLVxuLVx0a2ZyZWUob2xkX2J1Zik7XG4rXHQvKiBXcml0ZXJzIGFyZSBzZXJpYWxpemVkIGJ5IGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleC4gKi9cbitcdG9sZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIobnQtXHUwMDNldXNlcmRhdGEsIG5ldyxcbitcdFx0XHRcdCAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmR5bmFtaWNfbmV0Y29uc29sZV9tdXRleCkpO1xuK1x0a2ZyZWVfcmN1KG9sZCwgcmN1KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMzkyLDcgKzE0MDMsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuK1x0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhKSk7XG4gXHRrZnJlZShudCk7XG4gfVxuIFxuQEAgLTE5MjYsMTQgKzE5MzcsMTMgQEAgc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0XHRcdCAgICAgIGludCBtc2dfbGVuLFxuLVx0XHRcdFx0ICAgICAgaW50IHJlbGVhc2VfbGVuKVxuK1x0XHRcdFx0ICAgICAgaW50IHJlbGVhc2VfbGVuLFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbi1cdGNvbnN0IGNoYXIgKnVzZXJkYXRhID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqcmVsZWFzZTtcbiBcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0dXNlcmRhdGEgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGEgPSBudC1cdTAwM2VzeXNkYXRhO1xuICNlbmRpZlxuIFxuQEAgLTE5NTAsNyArMTk2MCw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGlmICh1c2VyZGF0YSlcbiBcdFx0bXNnX2xlbiArPSBzY25wcmludGYoXHUwMDI2bnQtXHUwMDNlYnVmW21zZ19sZW5dLFxuIFx0XHRcdFx0ICAgICBzaXplb2YobnQtXHUwMDNlYnVmKSAtIG1zZ19sZW4sIFwiJXNcIixcbi1cdFx0XHRcdCAgICAgdXNlcmRhdGEpO1xuK1x0XHRcdFx0ICAgICB1c2VyZGF0YS1cdTAwM2VkYXRhKTtcbiBcbiBcdGlmIChzeXNkYXRhKVxuIFx0XHRtc2dfbGVuICs9IHNjbnByaW50ZihcdTAwMjZudC1cdTAwM2VidWZbbXNnX2xlbl0sXG5AQCAtMTk3MCw3ICsxOTgwLDggQEAgc3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxuLVx0XHRcdFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuKVxuK1x0XHRcdFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcbiB7XG4gXHRjb25zdCBjaGFyICp1c2VyZGF0YV9wdHIgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMO1xuQEAgLTE5ODEsMTIgKzE5OTIsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xuIFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHR1c2VyZGF0YV9wdHIgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGFfcHRyID0gbnQtXHUwMDNlc3lzZGF0YTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbiAjZW5kaWZcbi1cdGlmIChXQVJOX09OX09OQ0UoIXVzZXJkYXRhX3B0ciBcdTAwMjZcdTAwMjYgdXNlcmRhdGFfbGVuICE9IDApKVxuLVx0XHRyZXR1cm47XG4rXHRpZiAodXNlcmRhdGEpIHtcbitcdFx0dXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtXHUwMDNlZGF0YTtcbitcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuK1x0fVxuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghc3lzZGF0YV9wdHIgXHUwMDI2XHUwMDI2IHN5c2RhdGFfbGVuICE9IDApKVxuIFx0XHRyZXR1cm47XG5AQCAtMjA2Myw3ICsyMDc0LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29uc3QgY2hhciAqbXNnLFxuIFx0XHRcdFx0aW50IG1zZ19sZW4sXG4gXHRcdFx0XHRpbnQgcmVsZWFzZV9sZW4sXG4tXHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4pXG4rXHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4sXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXG4ge1xuIFx0aW50IGhlYWRlcl9sZW4sIG1zZ2JvZHlfbGVuO1xuIFx0Y29uc3QgY2hhciAqbXNnYm9keTtcbkBAIC0yMDkyLDcgKzIxMDQsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHQgKiB3aWxsIGJlIHJlcGxhY2VkXG4gXHQgKi9cbiBcdHNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbixcbi1cdFx0XHQgICAgIHN5c2RhdGFfbGVuKTtcbitcdFx0XHQgICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gfVxuIFxuIC8qKlxuQEAgLTIxMDcsMjUgKzIxMTksMzMgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIHN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbiB7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEgPSBOVUxMO1xuIFx0aW50IHVzZXJkYXRhX2xlbiA9IDA7XG4gXHRpbnQgcmVsZWFzZV9sZW4gPSAwO1xuIFx0aW50IHN5c2RhdGFfbGVuID0gMDtcbiBcdGludCBsZW47XG4gXG4rXHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cbitcdHJjdV9yZWFkX2xvY2soKTtcbitcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbitcdHVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LVx1MDAzZXVzZXJkYXRhKTtcbitcdGlmICh1c2VyZGF0YSlcbitcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuICNlbmRpZlxuIFx0aWYgKG50LVx1MDAzZXJlbGVhc2UpXG4gXHRcdHJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpICsgMTtcbiBcbiBcdGxlbiA9IHdjdHh0LVx1MDAzZWxlbiArIHJlbGVhc2VfbGVuICsgc3lzZGF0YV9sZW4gKyB1c2VyZGF0YV9sZW47XG4gXHRpZiAobGVuIFx1MDAzYz0gTUFYX1BSSU5UX0NIVU5LKVxuLVx0XHRyZXR1cm4gc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtXHUwMDNlb3V0YnVmLFxuLVx0XHRcdFx0XHRcdCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuKTtcbitcdFx0c2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sXG4rXHRcdFx0XHRcdCAgcmVsZWFzZV9sZW4sIHVzZXJkYXRhKTtcbitcdGVsc2VcbitcdFx0c2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxuK1x0XHRcdFx0ICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gXG4tXHRyZXR1cm4gc2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxuLVx0XHRcdFx0ICAgc3lzZGF0YV9sZW4pO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5AQCAtMjM1Nyw3ICsyMzc3LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bnQtXHUwMDNlcmVzdW1lX3dxKTtcbiBcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG4rXHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtXHUwMDNldXNlcmRhdGEpKTtcbiAjZW5kaWZcbiBcdGtmcmVlKG50KTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbmluZGV4IGI1NmM3MGI3ZTI3NDIuLmYwNjc0YzAwMTdmYzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG5AQCAtMTMsNiArMTMsNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRuZXRjb25zX3Jlc3VtZS5zaCBcXFxuIFx0bmV0Y29uc19zeXNkYXRhLnNoIFxcXG4gXHRuZXRjb25zX3RvcnR1cmUuc2ggXFxcbitcdG5ldGNvbnNfdXNlcmRhdGEuc2ggXFxcbiAjIGVuZCBvZiBURVNUX1BST0dTXG4gXG4gaW5jbHVkZSAuLi8uLi8uLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMTM5MDNmNGNlMWM1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hcbkBAIC0wLDAgKzEsMjI5IEBAXG4rIyEvdXNyL2Jpbi9lbnYgYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjIEV4ZXJjaXNlIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuXG4rI1xuKyMgVGhlIGZpcnN0IHBhcnQgY2hlY2tzIHRoYXQgdGhlIHBheWxvYWQgdGhlIHRhcmdldCB0cmFuc21pdHMgZm9sbG93cyB3aGF0XG4rIyBjb25maWdmcyBzYXlzOiBhIHZhbHVlIHNob3dzIHVwIGluIHRoZSBuZXh0IG1lc3NhZ2UsIGFuIHVwZGF0ZSByZXBsYWNlcyB0aGVcbisjIHByZXZpb3VzIG9uZSwgY2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeSwgYW5kIHNvIGRvZXMgcmVtb3ZpbmcgdGhlXG4rIyBrZXkuXG4rI1xuKyMgVGhlIHNlY29uZCBwYXJ0IHJld3JpdGVzIHZhbHVlcywgY3JlYXRlcyBhbmQgZGVsZXRlcyBrZXlzLCBhbmQgY2xlYXJzIHRoZVxuKyMgcGF5bG9hZCBlbnRpcmVseSB3aGlsZSBtZXNzYWdlcyBhcmUgYmVpbmcgc2VudCwgc28gdGhlIHRyYW5zbWl0IHBhdGgga2VlcHNcbisjIHBpY2tpbmcgdXAgcGF5bG9hZHMgdGhhdCBhcmUgYmVpbmcgcmVwbGFjZWQgdW5kZXJuZWF0aCBpdC4gSXQgcnVucyB0d2ljZSxcbisjIG9uY2Ugd2l0aCBhIHBheWxvYWQgc21hbGwgZW5vdWdoIHRvIGZpdCBpbiBhIHNpbmdsZSBwYWNrZXQgYW5kIG9uY2UgbGFyZ2VcbisjIGVub3VnaCB0byBiZSBmcmFnbWVudGVkLlxuKyNcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rXG4rc2V0IC1ldW8gcGlwZWZhaWxcbitcbitTQ1JJUFRESVI9JChkaXJuYW1lIFwiJChyZWFkbGluayAtZSBcIiR7QkFTSF9TT1VSQ0VbMF19XCIpXCIpXG4rXG4rc291cmNlIFwiJHtTQ1JJUFRESVJ9XCIvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoXG4rXG4rIyBOdW1iZXIgb2YgdGltZXMgZWFjaCB0b3J0dXJlIHdvcmtlciBsb29wc1xuK0lURVJBVElPTlM9JHsxOi0yMDB9XG4rXG4rIyBLZXlzIG93bmVkIGJ5IGVhY2ggdG9ydHVyZSB3b3JrZXIuIFdvcmtlcnMgZG8gbm90IHNoYXJlIGtleXMsIHNvIGEgZmFpbGluZ1xuKyMgY29uZmlnZnMgb3BlcmF0aW9uIG1lYW5zIGEgcmVhbCBwcm9ibGVtIGFuZCBub3QgYSBsb3N0IHJhY2UuXG4rQ0hVUk5fS0VZPVwiY2h1cm5rZXlcIlxuK1RSQU5TSUVOVF9LRVk9XCJ0cmFuc2llbnRrZXlcIlxuKyMgTnVtYmVyIG9mIGtleXMgdXNlZCB0byBwdXNoIGEgbWVzc2FnZSBwYXN0IE1BWF9QUklOVF9DSFVOS1xuK0JVTEtfS0VZUz04XG4rXG4rVVNFUkRBVEFfRElSPVwiJHtORVRDT05TX1BBVEh9L3VzZXJkYXRhXCJcbisjIFZhbHVlcyBhcmUgY2FwcGVkIGF0IE1BWF9FWFRSQURBVEFfVkFMVUVfTEVOKDIwMCkgYnl0ZXMsIHNvICR7QlVMS19LRVlTfVxuKyMgZW50cmllcyBvZiB0aGlzIHNpemUgYXJlIGVub3VnaCB0byBmb3JjZSBmcmFnbWVudGF0aW9uXG4rTE9OR19WQUxVRT0kKHByaW50ZiAtLSAndiUuMHMnIHsxLi4xOTB9KVxuK1xuK2Z1bmN0aW9uIHdyaXRlX2tleSgpIHtcbitcdGxvY2FsIEtFWT1cIiR7MX1cIlxuK1x0bG9jYWwgVkFMVUU9XCIkezJ9XCJcbitcbitcdG1rZGlyIC1wIFwiJHtVU0VSREFUQV9ESVJ9LyR7S0VZfVwiXG4rXHRlY2hvIFwiJHtWQUxVRX1cIiBcdTAwM2UgXCIke1VTRVJEQVRBX0RJUn0vJHtLRVl9L3ZhbHVlXCJcbit9XG4rXG4rIyBTZW5kIGEgc2luZ2xlIG1lc3NhZ2UgYW5kIGNhcHR1cmUgaXQgb24gdGhlIGRlc3RpbmF0aW9uIGludGVyZmFjZVxuK2Z1bmN0aW9uIHNlbmRfYW5kX2NhcHR1cmUoKSB7XG4rXHRybSAtZiBcIiR7T1VUUFVUX0ZJTEV9XCJcbitcbitcdGxpc3Rlbl9wb3J0X2FuZF9zYXZlX3RvIFwiJHtPVVRQVVRfRklMRX1cIiBcdTAwMjZcbitcdHdhaXRfZm9yX3BvcnQgXCIke05BTUVTUEFDRX1cIiBcIiR7UE9SVH1cIiBcIiR7SVBfVkVSU0lPTn1cIlxuK1x0ZWNobyBcIiR7TVNHfTogJHtUQVJHRVR9XCIgXHUwMDNlIC9kZXYva21zZ1xuK1x0YnVzeXdhaXQgXCIke0JVU1lXQUlUX1RJTUVPVVR9XCIgdGVzdCAtcyBcIiR7T1VUUFVUX0ZJTEV9XCIgfHwgdHJ1ZVxuK1x0cGtpbGxfc29jYXRcbitcdHZhbGlkYXRlX21zZyBcIiR7T1VUUFVUX0ZJTEV9XCJcbit9XG4rXG4rZnVuY3Rpb24gZXhwZWN0X2luX21zZygpIHtcbitcdGxvY2FsIFdBTlRFRD1cIiR7MX1cIlxuK1xuK1x0aWYgISBncmVwIC1xIC0tIFwiJHtXQU5URUR9XCIgXCIke09VVFBVVF9GSUxFfVwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiAnJHtXQU5URUR9JyBub3QgZm91bmQgaW4gJHtPVVRQVVRfRklMRX1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGNhdCBcIiR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRleGl0IFwiJHtrc2Z0X2ZhaWx9XCJcbitcdGZpXG4rfVxuK1xuK2Z1bmN0aW9uIGV4cGVjdF9ub3RfaW5fbXNnKCkge1xuK1x0bG9jYWwgVU5XQU5URUQ9XCIkezF9XCJcbitcbitcdGlmIGdyZXAgLXEgLS0gXCIke1VOV0FOVEVEfVwiIFwiJHtPVVRQVVRfRklMRX1cIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogJyR7VU5XQU5URUR9JyBmb3VuZCBpbiAke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0Y2F0IFwiJHtPVVRQVVRfRklMRX1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgXCIke2tzZnRfZmFpbH1cIlxuK1x0Zmlcbit9XG4rXG4rIyBFdmVyeSB3cml0ZSBwdWJsaXNoZXMgYSBuZXcgcGF5bG9hZCBhbmQgZnJlZXMgdGhlIHByZXZpb3VzIG9uZS4gQW4gZW1wdHlcbisjIHZhbHVlIGlzIHNraXBwZWQgd2hlbiB0aGUgcGF5bG9hZCBpcyBmb3JtYXR0ZWQsIHNvIHRoaXMgYWxzbyBkcml2ZXMgdGhlXG4rIyB0YXJnZXQgdGhyb3VnaCBoYXZpbmcgbm8gcGF5bG9hZCBhdCBhbGwuXG4rZnVuY3Rpb24gY2h1cm5fdmFsdWUoKSB7XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSBcIiR7SVRFUkFUSU9OU31cIilcbitcdGRvXG4rXHRcdGVjaG8gXCJ2YWx1ZSR7aX1cIiBcdTAwM2UgXCIke1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXCJcbitcdFx0ZWNobyBcdTAwM2UgXCIke1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXCJcbitcdGRvbmVcbit9XG4rXG4rIyBDcmVhdGUgYW5kIGRlbGV0ZSBhIGtleSB1bmRlcm5lYXRoIHRoZSBzZW5kZXJcbitmdW5jdGlvbiBjaHVybl9rZXkoKSB7XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSBcIiR7SVRFUkFUSU9OU31cIilcbitcdGRvXG4rXHRcdG1rZGlyIFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX1cIlxuK1x0XHRlY2hvIFwidHJhbnNpZW50JHtpfVwiIFx1MDAzZSBcIiR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9L3ZhbHVlXCJcbitcdFx0cm1kaXIgXCIke1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVwiXG4rXHRkb25lXG4rfVxuK1xuKyMgS2VlcCB0aGUgdHJhbnNtaXQgcGF0aCBidXN5IHdoaWxlIHRoZSBwYXlsb2FkIGlzIGJlaW5nIHJlcGxhY2VkXG4rZnVuY3Rpb24gc2VuZF9tZXNzYWdlcygpIHtcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIFwiJHtJVEVSQVRJT05TfVwiKVxuK1x0ZG9cbitcdFx0ZWNobyBcIiR7TVNHfTogJHtUQVJHRVR9ICR7aX1cIiBcdTAwM2UgL2Rldi9rbXNnXG4rXHRkb25lXG4rfVxuK1xuKyMgUnVuIHRoZSB3b3JrZXJzIGNvbmN1cnJlbnRseSBhbmQgZmFpbCBpZiBhbnkgb2YgdGhlbSBoaXRzIGFuIGVycm9yXG4rZnVuY3Rpb24gcnVuX3dvcmtlcnMoKSB7XG4rXHRsb2NhbCBQSURTPSgpXG4rXHRsb2NhbCBXT1JLRVJcbitcdGxvY2FsIFJFVD0wXG4rXHRsb2NhbCBQSURcbitcbitcdGZvciBXT1JLRVIgaW4gXCIkQFwiXG4rXHRkb1xuK1x0XHRcIiR7V09SS0VSfVwiIFx1MDAyNlxuK1x0XHRQSURTKz0oXCIkIVwiKVxuK1x0ZG9uZVxuK1xuK1x0IyBSZWFwIGV2ZXJ5IHdvcmtlciBiZWZvcmUgcmVwb3J0aW5nIGEgZmFpbHVyZSwgb3RoZXJ3aXNlIGEgc3Vydml2aW5nXG4rXHQjIHdvcmtlciBrZWVwcyB3cml0aW5nIHRvIGNvbmZpZ2ZzIHdoaWxlIHRoZSBleGl0IHRyYXAgY2xlYW5zIGl0IHVwLlxuK1x0Zm9yIFBJRCBpbiBcIiR7UElEU1tAXX1cIlxuK1x0ZG9cbitcdFx0d2FpdCBcIiR7UElEfVwiIHx8IFJFVD0xXG4rXHRkb25lXG4rXG4rXHRpZiBbWyBcIiR7UkVUfVwiIC1uZSAwIF1dXG4rXHR0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiB1c2VyZGF0YSB0b3J0dXJlIHdvcmtlciBmYWlsZWRcIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgXCIke2tzZnRfZmFpbH1cIlxuK1x0Zmlcbit9XG4rXG4rZnVuY3Rpb24gY3JlYXRlX2J1bGtfa2V5cygpIHtcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIFwiJHtCVUxLX0tFWVN9XCIpXG4rXHRkb1xuK1x0XHR3cml0ZV9rZXkgXCJidWxrJHtpfVwiIFwiJHtMT05HX1ZBTFVFfVwiXG4rXHRkb25lXG4rfVxuK1xuK2Z1bmN0aW9uIGRlbGV0ZV9idWxrX2tleXMoKSB7XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSBcIiR7QlVMS19LRVlTfVwiKVxuK1x0ZG9cbitcdFx0cm1kaXIgXCIke1VTRVJEQVRBX0RJUn0vYnVsayR7aX1cIlxuK1x0ZG9uZVxuK31cbitcbisjID09PT09PT09PT0gI1xuKyMgU3RhcnQgaGVyZSAjXG4rIyA9PT09PT09PT09ICNcbitcbittb2Rwcm9iZSBuZXRkZXZzaW0gMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK21vZHByb2JlIG5ldGNvbnNvbGUgMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK1xuK0lQX1ZFUlNJT049XCJpcHY0XCJcbisjIFRoZSBjb250ZW50IG9mIGttc2cgd2lsbCBiZSBzYXZlZCB0byB0aGUgZm9sbG93aW5nIGZpbGVcbitPVVRQVVRfRklMRT1cIi90bXAvJHtUQVJHRVR9XCJcbitcbisjIENoZWNrIGZvciBiYXNpYyBzeXN0ZW0gZGVwZW5kZW5jeSBhbmQgZXhpdCBpZiBub3QgZm91bmRcbitjaGVja19mb3JfZGVwZW5kZW5jaWVzXG4rIyBTZXQgY3VycmVudCBsb2dsZXZlbCB0byBLRVJOX0lORk8oNiksIGFuZCBkZWZhdWx0IHRvIEtFUk5fTk9USUNFKDUpXG4rZWNobyBcIjYgNVwiIFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3ByaW50a1xuKyMgUmVtb3ZlIHRoZSBuYW1lc3BhY2UsIGludGVyZmFjZXMgYW5kIG5ldGNvbnNvbGUgdGFyZ2V0IG9uIGV4aXRcbit0cmFwIGNsZWFudXAgRVhJVFxuKyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzXG4rc2V0X25ldHdvcmsgXCIke0lQX1ZFUlNJT059XCJcbisjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlXG4rY3JlYXRlX2R5bmFtaWNfdGFyZ2V0XG4rXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisjIFRFU1QgIzFcbisjIEEgdmFsdWUgd3JpdHRlbiB0byBjb25maWdmcyByZWFjaGVzIHRoZSBkZXN0aW5hdGlvblxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rd3JpdGVfa2V5IFwiJHtVU0VSREFUQV9LRVl9XCIgXCJmaXJzdFwiXG4rc2VuZF9hbmRfY2FwdHVyZVxuK2V4cGVjdF9pbl9tc2cgXCIke1VTRVJEQVRBX0tFWX09Zmlyc3RcIlxuK1xuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rIyBURVNUICMyXG4rIyBVcGRhdGluZyB0aGUgdmFsdWUgcmVwbGFjZXMgdGhlIHByZXZpb3VzIHBheWxvYWRcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK3dyaXRlX2tleSBcIiR7VVNFUkRBVEFfS0VZfVwiIFwic2Vjb25kXCJcbitzZW5kX2FuZF9jYXB0dXJlXG4rZXhwZWN0X2luX21zZyBcIiR7VVNFUkRBVEFfS0VZfT1zZWNvbmRcIlxuK2V4cGVjdF9ub3RfaW5fbXNnIFwiJHtVU0VSREFUQV9LRVl9PWZpcnN0XCJcbitcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyMgVEVTVCAjM1xuKyMgQ2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeVxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rZWNobyBcdTAwM2UgXCIke1VTRVJEQVRBX0RJUn0vJHtVU0VSREFUQV9LRVl9L3ZhbHVlXCJcbitzZW5kX2FuZF9jYXB0dXJlXG4rZXhwZWN0X25vdF9pbl9tc2cgXCIke1VTRVJEQVRBX0tFWX09XCJcbitcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyMgVEVTVCAjNFxuKyMgUmVtb3ZpbmcgdGhlIGtleSBkcm9wcyB0aGUgZW50cnlcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK3dyaXRlX2tleSBcIiR7VVNFUkRBVEFfS0VZfVwiIFwidGhpcmRcIlxuK3JtZGlyIFwiJHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfVwiXG4rc2VuZF9hbmRfY2FwdHVyZVxuK2V4cGVjdF9ub3RfaW5fbXNnIFwiJHtVU0VSREFUQV9LRVl9PVwiXG4rcm0gXCIke09VVFBVVF9GSUxFfVwiXG4rXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisjIFRFU1QgIzVcbisjIFRvcnR1cmUgdGhlIHBheWxvYWQgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsXG4rIyBmaXJzdCB1bmZyYWdtZW50ZWQgYW5kIHRoZW4gZnJhZ21lbnRlZFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rd3JpdGVfa2V5IFwiJHtDSFVSTl9LRVl9XCIgXCIke1VTRVJEQVRBX1ZBTFVFfVwiXG4rcnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXNcbitcbitjcmVhdGVfYnVsa19rZXlzXG4rcnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXNcbitkZWxldGVfYnVsa19rZXlzXG4rXG4rZXhpdCBcIiR7a3NmdF9wYXNzfVwiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoxOTozNi4xNjU3MzE4NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTY4NjAwNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGBuZXRjb25zb2xlYC4gU3BlY2lmaWNhbGx5LCBpdCdzIG92ZXJoYXVsaW5nIGhvdyB0aGUgYHVzZXJkYXRhYCBpcyBoYW5kbGVkLCBhbmQgdGhhdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgdG91Y2hlcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBMb29rcyBsaWtlIHRoZXkncmUgZGl0Y2hpbmcgdGhlIG9sZCBgY2hhciAqdXNlcmRhdGFgIGFuZCBgc2l6ZV90IHVzZXJkYXRhX2xlbmd0aGAgZm9yIGEgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCB0aGF0J3MgUkNVLXByb3RlY3RlZC4gU21hcnQuIFRoaXMgaXMgYSBzb2xpZCBtb3ZlIHRvIGVsaW1pbmF0ZSB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlIHZ1bG5lcmFiaWxpdGllcyDigJMgZGVmaW5pdGVseSBhIHdvcnRod2hpbGUgaW1wcm92ZW1lbnQuXG5cblRoZSB1cGRhdGUgYW5kIHJlYWQgb3BlcmF0aW9ucyBhcmUgbm93IHVzaW5nIGByY3VfcmVwbGFjZV9wb2ludGVyKClgIGFuZCBga2ZyZWVfcmN1KClgLCBhbmQgYWxsIHRoZSBzZW5kIGZ1bmN0aW9ucyAoYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oKWAsIGV0Yy4pIGFyZSB0YWtpbmcgYGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YWAgYW5kIGFwcHJvcHJpYXRlbHkgd3JhcHBpbmcgdGhlIHBheWxvYWQgYWNjZXNzIHdpdGggYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAuIFRoaXMgaXMgdGV4dGJvb2sgUkNVIGltcGxlbWVudGF0aW9uLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0LWRvLiBJJ20gZ29pbmcgdG8gd2FudCB0byBtYWtlIHN1cmUgdGhpcyBpcyByb2J1c3QgYmVmb3JlIGl0IGdvZXMgbGl2ZS5cblxuVGltZSB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIGNvbmZpZyB0byByZXByb2R1Y2UgdGhpcyBhbmQgZ2V0IHRvIHRlc3RpbmcuIEkga25vdyBgQ09ORklHX05FVENPTlNPTEVgIGlzIHJlcXVpcmVkLCBhbmQgSSBzdXNwZWN0IGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCB3aWxsIGFsc28gYmUgbmVlZGVkLiBMZXQgbWUgZG91YmxlLWNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTEyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MTk6NDMuMTM0MzM1ODQ0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY5NjAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1Ni1cXHRib29sIFxcXCJQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MTk6NDMuMjM3MDM3MTI0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MzMzNDEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyB0aGUgTGFuZHNjYXBlOiBORVRDT05TT0xFIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBORVRDT05TT0xFLiBCZWZvcmUgSSBzdGFydCBhbnkgdHJvdWJsZXNob290aW5nIG9yIGRlZXBlciBhbmFseXNpcywgdW5kZXJzdGFuZGluZyB3aGF0IE5FVENPTlNPTEUgcmVsaWVzIG9uIGlzIGFic29sdXRlbHkgY3J1Y2lhbC4gSSBuZWVkIHRvIGtub3cgdGhlIHBvdGVudGlhbCBjaG9rZSBwb2ludHMsIHRoZSBvdGhlciBjb21wb25lbnRzIHdob3NlIGZhaWx1cmUgd291bGQgdGFrZSBORVRDT05TT0xFIGRvd24gd2l0aCB0aGVtLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbGwgbmVlZCB0byBpZGVudGlmeSBub3QganVzdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIHRyYW5zaXRpdmUgb25lcyDigJMgdGhvc2UgY29tcG9uZW50cyBORVRDT05TT0xFIHJlbGllcyBvbiwgd2hpY2ggaW4gdHVybiByZWx5IG9uICpvdGhlciogdGhpbmdzLiBUaGlzIGlzIHRoZSBmaXJzdCwgZXNzZW50aWFsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjE5OjQ2LjcwMDM3NDk0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzY5ODY0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTY9bWVudWNvbmZpZyBORVRERVZJQ0VTXFxuZHJpdmVycy9uZXQvS2NvbmZpZy03LVxcdGRlZmF1bHQgeSBpZiBVTUxcXG5kcml2ZXJzL25ldC9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTktXFx0Ym9vbCBcXFwiTmV0d29yayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDE9Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDpcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NzQ9Y29uZmlnIFdJUkVHVUFSRFxcbmRyaXZlcnMvbmV0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcIldpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWxcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo3NjpcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy03Ny1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9OTI9Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xcbmRyaXZlcnMvbmV0L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gV0lSRUdVQVJEXFxuZHJpdmVycy9uZXQvS2NvbmZpZy05NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTEwMz1jb25maWcgT1ZQTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTA1OlxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwNi1cXHRzZWxlY3QgRFNUX0NBQ0hFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTEzNj1jb25maWcgTkVUX0ZDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMzctXFx0Ym9vbCBcXFwiRmlicmUgQ2hhbm5lbCBkcml2ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjEzODpcXHRkZXBlbmRzIG9uIFNDU0kgXFx1MDAyNlxcdTAwMjYgUENJXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMzktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0xNDk9Y29uZmlnIElGQlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTUwLVxcdHRyaXN0YXRlIFxcXCJJbnRlcm1lZGlhdGUgRnVuY3Rpb25hbCBCbG9jayBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTUxOlxcdGRlcGVuZHMgb24gTkVUX0FDVF9NSVJSRUQgfHwgTkZUX0ZXRF9ORVRERVZcXG5kcml2ZXJzL25ldC9LY29uZmlnLTE1Mi1cXHRzZWxlY3QgTkVUX1JFRElSRUNUXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTE3OT1jb25maWcgTUFDVlRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgwLVxcdHRyaXN0YXRlIFxcXCJNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgxOlxcdGRlcGVuZHMgb24gTUFDVkxBTlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgyOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgzLVxcdHNlbGVjdCBUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MTkzPWNvbmZpZyBJUFZMQU5fTDNTXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoxOTQ6XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5NTpcXHRkZXBlbmRzIG9uIElQVkxBTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTk2LVxcdGRlZl9ib29sIHlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MTk5PWNvbmZpZyBJUFZMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVAtVkxBTiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjAxOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjAyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIxNy1cXHR0cmlzdGF0ZSBcXFwiSVAtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjE4OlxcdGRlcGVuZHMgb24gSVBWTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMTk6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMjAtXFx0c2VsZWN0IFRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMjpcXHRkZXBlbmRzIG9uIElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMy1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjQ1PWNvbmZpZyBHRU5FVkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0Ni1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIEVuY2Fwc3VsYXRpb25cXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNDc6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDgtXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTI2MD1jb25maWcgQkFSRVVEUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjYxLVxcdHRyaXN0YXRlIFxcXCJCYXJlIFVEUCBFbmNhcHN1bGF0aW9uXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjYyOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjYzLVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNzI9Y29uZmlnIEdUUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVxcdHRyaXN0YXRlIFxcXCJHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6Mjc0OlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjc1LVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yODk9Y29uZmlnIFBGQ1BcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI5MC1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IEZvcndhcmRpbmcgQ29udHJvbCBQcm90b2NvbCAoUEZDUClcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyOTE6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yOTItXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMwMj1jb25maWcgQU1UXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDMtXFx0dHJpc3RhdGUgXFxcIkF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzA0OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJUF9NVUxUSUNBU1RcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwNS1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzI3PWNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjk6XFx0ZGVwZW5kcyBvbiBQUklOVEtcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMzND1jb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM2OlxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzctXFx0XFx0XFx0IShORVRDT05TT0xFPXkgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlM9bSlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzQ1PWNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ2LVxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ3OlxcdGRlcGVuZHMgb24gTkVUQ09OU09MRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ4LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNTU9Y29uZmlnIE5FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXFx0Ym9vbCBcXFwiUHJlcGVuZCBrZXJuZWwgcmVsZWFzZSB2ZXJzaW9uIGluIHRoZSBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNTc6XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzU4LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNzM9Y29uZmlnIE5UQl9ORVRERVZcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3NC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBFdGhlcm5ldCBvdmVyIE5UQiBUcmFuc3BvcnRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNzU6XFx0ZGVwZW5kcyBvbiBOVEJfVFJBTlNQT1JUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNzc9Y29uZmlnIFJJT05FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMzc4LVxcdHRyaXN0YXRlIFxcXCJSYXBpZElPIEV0aGVybmV0IG92ZXIgbWVzc2FnaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzc5OlxcdGRlcGVuZHMgb24gUkFQSURJT1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzgwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzgxPWNvbmZpZyBSSU9ORVRfVFhfU0laRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzgyLVxcdGludCBcXFwiTnVtYmVyIG9mIG91dGJvdW5kIHF1ZXVlIGVudHJpZXNcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozODM6XFx0ZGVwZW5kcyBvbiBSSU9ORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4NC1cXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4Ny1cXHRpbnQgXFxcIk51bWJlciBvZiBpbmJvdW5kIHF1ZXVlIGVudHJpZXNcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozODg6XFx0ZGVwZW5kcyBvbiBSSU9ORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4OS1cXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTM5MT1jb25maWcgVFVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MzpcXHRkZXBlbmRzIG9uIElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5NC1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDQtXFx0dHJpc3RhdGUgXFxcIlZpcnRpbyBuZXR3b3JrIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0NTpcXHRkZXBlbmRzIG9uIFZJUlRJT1xcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ2LVxcdHNlbGVjdCBORVRfRkFJTE9WRVJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDYzPWNvbmZpZyBORVRLSVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2NC1cXHRib29sIFxcXCJCUEYtcHJvZ3JhbW1hYmxlIG5ldHdvcmsgZGV2aWNlXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDY1OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ3Mj1jb25maWcgTkVUX1ZSRlxcbmRyaXZlcnMvbmV0L0tjb25maWctNDczLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFJvdXRpbmcgYW5kIEZvcndhcmRpbmcgKExpdGUpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc0OlxcdGRlcGVuZHMgb24gSVBfTVVMVElQTEVfVEFCTEVTXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NzU6XFx0ZGVwZW5kcyBvbiBORVRfTDNfTUFTVEVSX0RFVlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc2OlxcdGRlcGVuZHMgb24gSVBWNl9NVUxUSVBMRV9UQUJMRVMgfHwgSVBWNj1uXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00ODE9Y29uZmlnIFZTT0NLTU9OXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00ODItXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgdnNvY2sgbW9uaXRvcmluZyBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0ODM6XFx0ZGVwZW5kcyBvbiBWSE9TVF9WU09DS1xcbmRyaXZlcnMvbmV0L0tjb25maWctNDg0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDg5PWNvbmZpZyBNSElfTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00OTAtXFx0dHJpc3RhdGUgXFxcIk1ISSBuZXR3b3JrIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ5MTpcXHRkZXBlbmRzIG9uIE1ISV9CVVNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ5Mi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTU0ND1jb25maWcgWEVOX05FVERFVl9GUk9OVEVORFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ1LVxcdHRyaXN0YXRlIFxcXCJYZW4gbmV0d29yayBkZXZpY2UgZnJvbnRlbmQgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ2OlxcdGRlcGVuZHMgb24gWEVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01NDctXFx0c2VsZWN0IFhFTl9YRU5CVVNfRlJPTlRFTkRcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTYyPWNvbmZpZyBYRU5fTkVUREVWX0JBQ0tFTkRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU2My1cXHR0cmlzdGF0ZSBcXFwiWGVuIGJhY2tlbmQgbmV0d29yayBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1NjQ6XFx0ZGVwZW5kcyBvbiBYRU5fQkFDS0VORFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTY1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01ODUtXFx0dHJpc3RhdGUgXFxcIlZNd2FyZSBWTVhORVQzIGV0aGVybmV0IGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjU4NjpcXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODc6XFx0ZGVwZW5kcyBvbiBQQUdFX1NJWkVfTEVTU19USEFOXzY0S0JcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OC1cXHRzZWxlY3QgUEFHRV9QT09MXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTU5ND1jb25maWcgRlVKSVRTVV9FU1xcbmRyaXZlcnMvbmV0L0tjb25maWctNTk1LVxcdHRyaXN0YXRlIFxcXCJGVUpJVFNVIEV4dGVuZGVkIFNvY2tldCBOZXR3b3JrIERldmljZSBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1OTY6XFx0ZGVwZW5kcyBvbiBBQ1BJXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01OTctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxcbmRyaXZlcnMvbmV0L0tjb25maWctNjA1LVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDY6XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA3OlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA4OlxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwOTpcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTAtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjE5OjQ2Ljc4NDA4MzE2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MTE5MzQyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGNvbnNvbGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGBORVRDT05TT0xFYCBoZXJlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRmlyc3Qgb2ZmLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBORVRDT05TT0xFYCByZWxpZXMgb24gYFBSSU5US2AsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBsb2dnaW5nIHB1cnBvc2VzLiBOb3csIGBORVRDT05TT0xFX0RZTkFNSUNgIGJyaW5ncyBpbiBhIG1vcmUgYWR2YW5jZWQgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgb25lIGhhcyBhIGRlcGVuZGVuY3kgb24gYE5FVENPTlNPTEVgIGl0c2VsZiwgcGx1cyBgU1lTRlNgIGFuZCBgQ09ORklHRlNfRlNgLiBSaWdodCwgc28gdG8gZ2V0IHRoZSBmdW5jdGlvbmFsaXR5IHdlIG5lZWQsIEknbSB0aGlua2luZyB3ZSBzaG91bGQgZW5hYmxlIGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCwgYmVjYXVzZSBvZiB0aGUgbGF0dGVyJ3MgZGVwZW5kZW5jeSwgYWxzbyBgQ09ORklHRlNfRlNgLiBUaGF0IGNvdmVycyB0aGUgYmFzaWMgc2V0dXAsIGluY2x1ZGluZyB0aGUgZHluYW1pYyBhc3BlY3QuXG5cbk5vdyB0byBnZXQgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGUgYWN0dWFsIGNoYW5nZXMsIEkgd2FudCB0byBpZGVudGlmeSB0aGUgY29yZSBzeW1ib2xzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGlzIHBhdGNoLiBMZXQgbWUgc2VlLi4uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgdXBkYXRlX3VzZXJkYXRhYCwgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYHNlbmRfZXh0X21zZ191ZHBgLCBgc2VuZF9tc2dfdWRwYCwgYW5kIGBmcmVlX3BhcmFtX3RhcmdldGAuIFxuXG5Pa2F5LCBpdCBzZWVtcyB0aGF0IGB1cGRhdGVfdXNlcmRhdGFgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSB0aGF0IGlzIGNhbGxlZCBhbmQgaG93IHRoZSBjaGFuZ2VzIGFyZSBpbXBsZW1lbnRlZCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MTk6NTIuMzk2MDIwODU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDY5MDc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1cGRhdGVfdXNlcmRhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDU0PXN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDcyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDczOnN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNzQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTExMjE9c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMzQtXFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTEzNTpcXHQvKiBTbmFwc2hvdCBmb3Igcm9sbGJhY2sgaWYgdXBkYXRlX3VzZXJkYXRhKCkgZmFpbHMgYmVsb3cgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEzNi1cXHRzdHJzY3B5KG9sZF92YWx1ZSwgdWRtLVxcdTAwM2V2YWx1ZSwgc2l6ZW9mKG9sZF92YWx1ZSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNDItXFx0bnQgPSB1c2VyZGF0YV90b190YXJnZXQodWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTQzOlxcdHJldCA9IHVwZGF0ZV91c2VyZGF0YShudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNDQtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzM3PXN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM0NS1cXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzQ2OlxcdHVwZGF0ZV91c2VyZGF0YShudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNDctXFx0Y29uZmlnX2l0ZW1fcHV0KGl0ZW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoxOTo1Mi41MTA3MTkyOTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIxNDc2Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIEknbSB0aGlua2luZyBhYm91dCBgdXBkYXRlX3VzZXJkYXRhYC4gQWgsIHllcywgdGhhdCdzIGNhbGxlZCBmcm9tIGJvdGggYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAuIE5vdywgdGhvc2UgcmluZyBhIGJlbGwuLi4gcmlnaHQsIHRob3NlIGFyZSBjb25maWdmcyBjYWxsYmFja3MuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZXNlIGNvbmZpZ2ZzIGNhbGxiYWNrcyBhbmQgdW5kZXJzdGFuZCBob3cgYHVwZGF0ZV91c2VyZGF0YWAgaXMgdXNlZCB3aXRoaW4gdGhlaXIgY29udGV4dC4gTGV0J3MgZGlnIGludG8gdGhlIGNvbmZpZ2ZzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTMwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MTk6NTUuODMyMTk3NzY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI1MDk3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcmRhdHVtX3ZhbHVlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTA3Mz1zdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMjE6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIyLVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoxOTo1Ni4wMzQ3MTUwMDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwNDY3MjkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUaGUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgQ29udW5kcnVtKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgZXhhY3RseSBpcyB0aGlzIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGJlaW5nIGxldmVyYWdlZD9cIiBUaGlzIGlzbid0IGp1c3QgYSBnZW5lcmljIHZhcmlhYmxlIG5hbWU7IGl0IHN1Z2dlc3RzIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgdGllZCB0byB1c2VyIGRhdGEgYW5kIGl0cyBwZXJzaXN0ZW50IHZhbHVlcy4gR2l2ZW4gdGhhdCBpdCdzIHByb2JhYmx5IGJlaW5nIHVzZWQgKnNvbWV3aGVyZSosIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgaW50ZXJhY3Rpb25zLiBVbmRlcnN0YW5kaW5nIGl0cyB1c2FnZSBpcyBrZXkgdG8gaXRzIGRlc2lnbiwgaW50ZXJhY3Rpb25zLCBhbmQgYW55IHBvdGVudGlhbCBtb2RpZmljYXRpb25zLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGluaXRpYXRlIGEgc2VhcmNoIGFuZCB0cmFjZSBhbGwgaW5zdGFuY2VzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgaXQgb3BlcmF0ZXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MjA6MDEuMTM5MzkwMjY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk3OTIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDczPXN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEyMC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTEyMTpzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjItXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjAxLjIxOTM3NTc3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk2NDUxMTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKkxvY2F0aW5nIHRoZSBUYXJnZXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gVGltZSB0byBsb2NhdGUgdGhhdCBzcGVjaWZpYyB2YXJpYWJsZSBvciBtb2R1bGUsIHRoZSBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSSBrbm93IGl0J3MgaW4gdGhpcyBmaWxlIHNvbWV3aGVyZSwgYW5kIEkgbmVlZCB0byBmaW5kIGFsbCBpbnN0YW5jZXMuIFNvLCBJIG5lZWQgdG8gc3RhcnQgd2l0aCBhIGJyb2FkLCB0aG9yb3VnaCBzZWFyY2guIEknbGwgbWFrZSBzdXJlIHRvIHVzZSBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIGZ1bmN0aW9uIHRvIHNjb3VyIHRoZSBlbnRpcmUgZG9jdW1lbnQuIFRoaXMgY291bGQgYmUgYSBjcnVjaWFsIHBhcnQgb2Ygd2hhdGV2ZXIgcHJvY2VzcyBJJ20gd29ya2luZyBvbiByaWdodCBub3cuIEdvdCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjA0LjcxNTgyOTkzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTI1NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwNzM9c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTIxOnN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEyMi1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MjA6MDQuODI1OTU5OTk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjY4NzAzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlVudXNlZCBEZWZpbml0aW9uIENoZWNrKipcblxuSG9sZCBvbiBhIHNlY29uZC4uLiB0aGlzIHZhcmlhYmxlL2Z1bmN0aW9uL3doYXRldmVyIGlzICpkZWZpbmVkKiBidXQgbm90IGFjdHVhbGx5ICp1c2VkKj8gVGhhdCdzIGEgY2xhc3NpYyByZWQgZmxhZy4gQ291bGQgYmUgZGVhZCBjb2RlLCBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgY29uZnVzaW9uLCBvciBldmVuIGEgc3VidGxlIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbiBpZiBpdCdzIHVuaW50ZW50aW9uYWxseSBpbnRlcmFjdGluZyB3aXRoIHNvbWV0aGluZyBlbHNlLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMuIExldCdzIGltbWVkaWF0ZWx5IGp1bXAgdG8gdGhhdCBzZWN0aW9uIG9mIHRoZSBmaWxlLiBMaW5lIDExMjEgaXMgdGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIHRoZXJlLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBuZWVkcyBpbnZlc3RpZ2F0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg2NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjA4Ljg5MjgzMjk3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFxuMTEyMTpcXHRzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuMTEyMjpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudClcXG4xMTIzOlxcdHtcXG4xMTI0OlxcdFxcdHN0cnVjdCB1c2VyZGF0dW0gKnVkbSA9IHRvX3VzZXJkYXR1bShpdGVtKTtcXG4xMTI1OlxcdFxcdGNoYXIgb2xkX3ZhbHVlW01BWF9FWFRSQURBVEFfVkFMVUVfTEVOXTtcXG4xMTI2OlxcdFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuMTEyNzpcXHRcXHRzdHJ1Y3QgdXNlcmRhdGEgKnVkO1xcbjExMjg6XFx0XFx0c3NpemVfdCByZXQ7XFxuMTEyOTpcXHRcXG4xMTMwOlxcdFxcdGlmIChjb3VudCBcXHUwMDNlPSBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTilcXG4xMTMxOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMTEzMjpcXHRcXG4xMTMzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm5ldGNvbnNvbGVfc3Vic3lzLnN1X211dGV4KTtcXG4xMTM0OlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuMTEzNTpcXHRcXHQvKiBTbmFwc2hvdCBmb3Igcm9sbGJhY2sgaWYgdXBkYXRlX3VzZXJkYXRhKCkgZmFpbHMgYmVsb3cgKi9cXG4xMTM2OlxcdFxcdHN0cnNjcHkob2xkX3ZhbHVlLCB1ZG0tXFx1MDAzZXZhbHVlLCBzaXplb2Yob2xkX3ZhbHVlKSk7XFxuMTEzNzpcXHRcXHQvKiBjb3VudCBpcyBib3VuZGVkIGFib3ZlLCBzbyBzdHJzY3B5KCkgY2Fubm90IHRydW5jYXRlIGhlcmUgKi9cXG4xMTM4OlxcdFxcdHN0cnNjcHkodWRtLVxcdTAwM2V2YWx1ZSwgYnVmLCBzaXplb2YodWRtLVxcdTAwM2V2YWx1ZSkpO1xcbjExMzk6XFx0XFx0dHJpbV9uZXdsaW5lKHVkbS1cXHUwMDNldmFsdWUsIHNpemVvZih1ZG0tXFx1MDAzZXZhbHVlKSk7XFxuMTE0MDpcXHRcXG4xMTQxOlxcdFxcdHVkID0gdG9fdXNlcmRhdGEoaXRlbS1cXHUwMDNlY2lfcGFyZW50KTtcXG4xMTQyOlxcdFxcdG50ID0gdXNlcmRhdGFfdG9fdGFyZ2V0KHVkKTtcXG4xMTQzOlxcdFxcdHJldCA9IHVwZGF0ZV91c2VyZGF0YShudCk7XFxuMTE0NDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjExNDU6XFx0XFx0XFx0LyogUmVzdG9yZSB0aGUgcHJldmlvdXMgdmFsdWUgc28gaXQgbWF0Y2hlcyB0aGUgbGl2ZSBwYXlsb2FkICovXFxuMTE0NjpcXHRcXHRcXHRzdHJzY3B5KHVkbS1cXHUwMDNldmFsdWUsIG9sZF92YWx1ZSwgc2l6ZW9mKHVkbS1cXHUwMDNldmFsdWUpKTtcXG4xMTQ3OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMTQ4OlxcdFxcdH1cXG4xMTQ5OlxcdFxcdHJldCA9IGNvdW50O1xcbjExNTA6XFx0b3V0X3VubG9jazpcXG4xMTUxOlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcXG4xMTUyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmV0Y29uc29sZV9zdWJzeXMuc3VfbXV0ZXgpO1xcbjExNTM6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTU0OlxcdH1cXG4xMTU1OlxcdFxcbjExNTY6XFx0LyogZGlzYWJsZV9zeXNkYXRhX2ZlYXR1cmUgLSBEaXNhYmxlIHN5c2RhdGEgZmVhdHVyZSBhbmQgY2xlYW4gc3lzZGF0YVxcbjExNTc6XFx0ICogQG50OiB0YXJnZXQgdGhhdCBpcyBkaXNhYmxpbmcgdGhlIGZlYXR1cmVcXG4xMTU4OlxcdCAqIEBmZWF0dXJlOiBmZWF0dXJlIGJlaW5nIGRpc2FibGVkXFxuMTE1OTpcXHQgKi9cXG4xMTYwOlxcdHN0YXRpYyB2b2lkIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuMTE2MTpcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBzeXNkYXRhX2ZlYXR1cmUgZmVhdHVyZSlcXG4xMTYyOlxcdHtcXG4xMTYzOlxcdFxcdG50LVxcdTAwM2VzeXNkYXRhX2ZpZWxkcyBcXHUwMDI2PSB+ZmVhdHVyZTtcXG4xMTY0OlxcdFxcdG50LVxcdTAwM2VzeXNkYXRhWzBdID0gMDtcXG4xMTY1OlxcdH1cXG4xMTY2OlxcdFxcbjExNjc6XFx0c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4xMTY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbjExNjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDowOC44OTMxMDU3OTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMzQ1OTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBDb251bmRydW0qKlxuXG5SaWdodCwgYSBmbGlja2VyIG9mIG1lbW9yeSDigJMgdGhhdCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSXQncyBuYWdnaW5nIGF0IG1lLCBzdWdnZXN0aW5nIGl0J3MgbGlrZWx5ICppbnZvbHZlZCogaW4gYSBtYWNybyBkZWZpbml0aW9uLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IGlzbid0IGJlaW5nIHVzZWQgZGlyZWN0bHkuIFRoYXQgc3VnZ2VzdHMgSSBzaG91bGQgdHJ5IHRvIHRyYWNlIGl0cyB1c2FnZS4gSSBzaG91bGQgYnJvYWRlbiBteSBzZWFyY2guIFJhdGhlciB0aGFuIGdldCBsb3N0IGluIHRoZSBmdW5jdGlvbiBjYWxscywgSSBzaG91bGQgbG9vayBtb3JlIGJyb2FkbHkgZm9yIHVzZXMgb2YgdGhlIHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2ggdGVybXMuIEknbGwgc3RhcnQgd2l0aCBhIGJyb2FkZXIgc2NvcGUgc2VhcmNoIGZvciBgdXNlcmRhdHVtX3ZhbHVlYC4gSSdsbCBhbHNvIHRyeSBhIGJyb2FkZXIgc2NvcGUgc2VhcmNoIGZvciBgQ09ORklHRlNfQVRUUmAuIEl0J3MgYSBodW5jaCwgYnV0IHNvbWV0aGluZyBsaWtlIHRoYXQgZmVlbHMgcmlnaHQuIEknbSBiZXR0aW5nIHRoYXQgb25lIG9mIHRoZXNlIHdpbGwgbGVhZCBtZSB0byB0aGUgbWFjcm8gZGVmaW5pdGlvbiB0aGF0J3MgdXNpbmcgdGhlIHN0b3JhZ2UgaW4gYW4gaW5kaXJlY3Qgd2F5LiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXAgYW5kIHNlZSB3aGF0IGNvbWVzIGJhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDoxMi44MTY1Njg3NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzYxMTkwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdGU19BVFRSLip1c2VyZGF0dW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjU1PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyODg6Q09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODktQ09ORklHRlNfQVRUUihzeXNkYXRhXywgY3B1X25yX2VuYWJsZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDoxMy4xMzQxODg3MTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcyNzIwNDA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSdzIERhdGEgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENPTkZJR0ZTX0FUVFIodXNlcmRhdHVtXywgdmFsdWUpYCBtYWNybywgYW5kIGl0IGNsZWFybHkgZXhwYW5kcyB0byBjcmVhdGUgdHdvIGZ1bmN0aW9uczogYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fdmFsdWVfc2hvd2AuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBlbnRyeSBwb2ludHMsIHdoaWNoIGFyZSB0aHVzIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLiBJIGFsc28gc2VlIHRoYXQgYHNlbmRfZXh0X21zZ191ZHBgIGFuZCBgc2VuZF9tc2dfdWRwYCBhcmUga2V5IHBsYXllcnMgaGVyZS5cblxuSG1tLCB3YWl0IGEgc2Vjb25kLiAgSSBrbm93IHRoYXQgYHNlbmRfZXh0X21zZ191ZHBgIGFuZCBgc2VuZF9tc2dfdWRwYCBhcmUgaW52b2tlZCBieSBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgIHJlc3BlY3RpdmVseSwgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgY2FsbGVkIGJ5IGBuZXRjb25zb2xlX3dyaXRlYC4gVGhhdCdzIGEgZ29vZCBjb25uZWN0aW9uIHRvIG1ha2UuIExldCdzIHNlZS4uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiBgbmV0Y29uc29sZV93cml0ZWAuIEFoLCByaWdodCwgaXQncyBhIGNvbnNvbGUgd3JpdGUgY2FsbGJhY2suXG5cbkhvbGQgb24uLi4gSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBgc2VuZF9leHRfbXNnX3VkcGAgaXMgYWN0dWFsbHkgY2FsbGVkIGJ5IHRoZSBgbmV0Y29uc29sZV9leHRfd3JpdGVgIGZ1bmN0aW9uLiBUaGlzIG1ha2VzIHRoZSBjb25uZWN0aW9ucyBtdWNoIG1vcmUgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjE4Ljg2MTM5NzA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ2Nzg4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZW5kX2V4dF9tc2dfdWRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA3Mz1zdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjExMC0vKipcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjExMTogKiBzZW5kX2V4dF9tc2dfdWRwIC0gc2VuZCBleHRlbmRlZCBsb2cgbWVzc2FnZSB0byB0YXJnZXRcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjExMi0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE4LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTE5OnN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTcyPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTEtXFx0XFx0aWYgKGV4dGVuZGVkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTkyOlxcdFxcdFxcdHNlbmRfZXh0X21zZ191ZHAobnQsIHdjdHh0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5My1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjE4LjkzMjg2OTk3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc3MzQyMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgS2VybmVsIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBkYXRhIGdldHMgaW50byBhbmQgb3V0IG9mIHRoZSBrZXJuZWwncyB2YXJpb3VzIHN1YnN5c3RlbXMuIExldCdzIHNlZS4uLiB0aGUgYG5ldGNvbnNvbGVfd3JpdGVgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB3cml0aW5nIHRvIHRoZSBjb25zb2xlLiBUaGF0IG1ha2VzIHNlbnNlLCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHRoZSBnYXRla2VlcGVyLCBoYW5kbGluZyB0aGUgaW5pdGlhbCBjYWxsIHRvIGdldCBkYXRhIG9udG8gdGhlIHNjcmVlbiBvciBpbnRvIGEgbG9nLCBiYXNlZCBvbiBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAuXG5cbk5vdywgSSBzZWUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYXMgYW5vdGhlciBlbnRyeSBwb2ludCwgdGhpcyB0aW1lIGZvciBjb25maWdmcy4gUmlnaHQsIHRoaXMgd291bGQgYmUgaG93IHVzZXItcHJvdmlkZWQgZGF0YSBpcyBhY3R1YWxseSBzdG9yZWQgd2l0aGluIHRoZSBjb25maWdmcyBzdHJ1Y3R1cmVzIOKAkyB0aGUgbWFpbiBtZWNoYW5pc20gdG8gaGFuZGxlIGNvbmZpZ3VyYXRpb24gaW5wdXQuIFRoYXQgaW1wbGllcyBpdCdzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byB3cml0ZSBjb25maWd1cmF0aW9uIGRhdGEuXG5cbkFoLCBhbmQgSSBzZWUgYHVzZXJkYXR1bV9kcm9wYCBhbHNvIG1lbnRpb25lZCBhcyBhbiBlbnRyeSBwb2ludC4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGltcG9ydGFudCBlbnRyeSBwb2ludCB0aGF0IGlzIHVzZWQgdG8gcmVtb3ZlIG9yIGNsZWFudXAgdGhpcyB1c2VyIGRhdGEuIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgbWFuYWdlZCwgZnJvbSBnZXR0aW5nIGRhdGEgaW4sIHRvIHN0b3JpbmcgaXQgYW5kIGZpbmFsbHksIGNsZWFuaW5nIGl0IHVwLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGVudHJ5IHBvaW50cyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZXNlIGNyaXRpY2FsIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MjA6MjMuNjEwMjE2ODA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTM4MDIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZGF0dW1fZHJvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzMTQ9c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzM3OnN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMzgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHVzZXJkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2MC1cXHQubWFrZV9pdGVtXFx0XFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzYxOlxcdC5kcm9wX2l0ZW1cXHRcXHQ9IHVzZXJkYXR1bV9kcm9wLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzYyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjIzLjY4OTYwMjAxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzMxNDAzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEhvdC1QYXRoIFN5bWJvbHMgaW4gTmV0Y29uc29sZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scyBmb3IgdGhpcyBuZXRjb25zb2xlIHdvcmsuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUga2V5IG9uZXMgc2hvdWxkIGJlIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgLCBgdXNlcmRhdHVtX2Ryb3BgLCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVgLiBCdXQgaG9sZCBvbi4uLiBpc24ndCBgbmV0Y29uc29sZV93cml0ZWAgYSBwcmV0dHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbj8gSXQncyB0aGUgY29uc29sZSB3cml0ZSBjYWxsYmFjaywgYW5kIGl0IGNvdWxkIGJlIGhpdCByZWFsbHksIHJlYWxseSBvZnRlbiBpZiB0aGVyZSdzIGEgZmxvb2Qgb2YgYHByaW50a3NgLiBIb3dldmVyLCB0aGUgb3RoZXIgdHdvLCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCwgYXJlIG11Y2ggbW9yZSBkaXJlY3RseSB0aWVkIHRvICp0aGlzKiBzcGVjaWZpYyBmZWF0dXJlLlxuXG5Ob3csIEkgcmVhbGx5IHNob3VsZCBkb3VibGUtY2hlY2sgaG93IGZyZXF1ZW50bHkgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZC4gQWgsIHJpZ2h0LCBpdCBnZXRzIGZpcmVkIGZvciBldmVyeSBzaW5nbGUgYHByaW50a2Agd2hlbiBuZXRjb25zb2xlIGlzIGVuYWJsZWQsIHRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgZGlnZ2luZyBpbnRvIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGFuZCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgLiBUaG9zZSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4gSXMgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gZXhwb3NlZCBpbiB0aGUgbmV0Y29uc29sZSBjb2RlPyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgdGhlcmUuIEdvdHRhIGNvdmVyIG15IGJhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYwMCwiT3V0cHV0VG9rZW5zIjo2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDoyOS41MjI3NDYyNTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTYxMDI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MD1fX3NldHVwKFxcXCJuZXRjb25zb2xlPVxcXCIsIG9wdGlvbl9zZXR1cCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODMtLyogTGlua2VkIGxpc3Qgb2YgYWxsIGNvbmZpZ3VyZWQgdGFyZ2V0cyAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NDpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9saXN0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUtLyogdGFyZ2V0X2NsZWFudXBfbGlzdCBpcyB1c2VkIHRvIHRyYWNrIHRhcmdldHMgdGhhdCBuZWVkIHRvIGJlIGNsZWFuZWQgb3V0c2lkZVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTEtLyogVGhpcyBuZWVkcyB0byBiZSBhIHNwaW5sb2NrIGJlY2F1c2Ugd3JpdGVfbXNnKCkgY2Fubm90IHNsZWVwICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkzLS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBtdXRleCBiZWNhdXNlIG5ldHBvbGxfY2xlYW51cCBtaWdodCBzbGVlcCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5NDpzdGF0aWMgREVGSU5FX01VVEVYKHRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1LVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNT1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OnN0YXRpYyBERUZJTkVfTVVURVgoZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDoyOS42MzQzNjEzODNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0OTM1NjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqUmVnZXggU25hZnU6IFRpbWUgZm9yIHRoZSBGaWxlKipcblxuVWdoLCB3YWl0IGEgc2Vjb25kLiBUaGF0IHJlZ2V4IEkganVzdCBjcmFmdGVk4oCmIHNvbWV0aGluZyBmZWVscyBvZmYuIEknbSBzdGFydGluZyB0byBoYXZlIGRvdWJ0cy4gVGhlIGVkZ2UgY2FzZXMgYXJlIHN0YXJ0aW5nIHRvIHN3aW0gdXAgaW4gbXkgbWVudGFsIG1vZGVsLCBhbmQgSSBzdXNwZWN0IGl0J3Mgbm90IGdvaW5nIHRvIGJlIGFzIHJvYnVzdCBhcyBJJ2QgaW5pdGlhbGx5IGhvcGVkLiBBbHJpZ2h0LCBmb3JnZXQgdGhlIHJlZ2V4IGZvciBub3cuIEl0J3MgdGltZSB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBnZXQgYSBtb3JlIGdyb3VuZGVkIHBlcnNwZWN0aXZlLiBMZXQncyBqdXN0IGxvb2sgYXQgdGhlIHJhdyBkYXRhIGluIHRoZSBmaWxlIGl0c2VsZi4gVGhhdCdzIGFsd2F5cyB0aGUgYmVzdCBmaXJzdCBzdGVwIHdoZW4gYSBwYXR0ZXJuIG1hdGNoaW5nIHN0cmF0ZWd5IGZlZWxzIHNoYWt5LiBJJ2xsIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSB0aGlzIHdheSwgYW5kIEkgY2FuIGFsd2F5cyBnbyBiYWNrIGFuZCByZWZpbmUgdGhlIHJlZ2V4IGJhc2VkIG9uIGFjdHVhbCBvYnNlcnZhdGlvbnMsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUyNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjMzLjg4MzcyMTA0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxMDQ5NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTIwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NTM9TU9EVUxFX0lNUE9SVF9OUyhcXFwiTkVUREVWX0lOVEVSTkFMXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY0OnN0YXRpYyBjaGFyIGNvbmZpZ1tNQVhfUEFSQU1fTEVOR1RIXTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjUtbW9kdWxlX3BhcmFtX3N0cmluZyhuZXRjb25zb2xlLCBjb25maWcsIE1BWF9QQVJBTV9MRU5HVEgsIDApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz02Nj1NT0RVTEVfUEFSTV9ERVNDKG5ldGNvbnNvbGUsIFxcXCIgbmV0Y29uc29sZT1bc3JjLXBvcnRdQFtzcmMtaXBdL1tkZXZdLFt0Z3QtcG9ydF1AXFx1MDAzY3RndC1pcFxcdTAwM2UvW3RndC1tYWNhZGRyXVxcXCIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Njg6c3RhdGljIGJvb2wgb29wc19vbmx5O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02OS1tb2R1bGVfcGFyYW0ob29wc19vbmx5LCBib29sLCAwNjAwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NzA9TU9EVUxFX1BBUk1fREVTQyhvb3BzX29ubHksIFxcXCJPbmx5IGxvZyBvb3BzIG1lc3NhZ2VzXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzQtI2lmbmRlZlxcdE1PRFVMRVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3NTpzdGF0aWMgaW50IF9faW5pdCBvcHRpb25fc2V0dXAoY2hhciAqb3B0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9ODA9X19zZXR1cChcXFwibmV0Y29uc29sZT1cXFwiLCBvcHRpb25fc2V0dXApO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzLS8qIExpbmtlZCBsaXN0IG9mIGFsbCBjb25maWd1cmVkIHRhcmdldHMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfbGlzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg1LS8qIHRhcmdldF9jbGVhbnVwX2xpc3QgaXMgdXNlZCB0byB0cmFjayB0YXJnZXRzIHRoYXQgbmVlZCB0byBiZSBjbGVhbmVkIG91dHNpZGVcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODk6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfY2xlYW51cF9saXN0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxLS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MjpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhcmdldF9saXN0X2xvY2spO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05My0vKiBUaGlzIG5lZWRzIHRvIGJlIGEgbXV0ZXggYmVjYXVzZSBuZXRwb2xsX2NsZWFudXAgbWlnaHQgc2xlZXAgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQ6c3RhdGljIERFRklORV9NVVRFWCh0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTY6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXRjb25zb2xlX3dxO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDEtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMjpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQsIG5ldGNvbnNvbGU7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODg9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OnN0YXRpYyBERUZJTkVfTVVURVgoZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTg6c3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNTpzdGF0aWMgdm9pZCBfX2V4aXQgZHluYW1pY19uZXRjb25zb2xlX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzQtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9nZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NzpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jayh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUyOnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1OTpzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY0OnN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjUte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcyOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X2dldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjc2OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzcte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjgwOnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgxLVxcdFxcdFxcdFxcdCAgIGludCBjbWRsaW5lX2NvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODk6c3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5NS0vKiBDaGVjayBpZiB0aGUgdGFyZ2V0IHdhcyBib3VuZCBieSBtYWMgYWRkcmVzcy4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjk2OnN0YXRpYyBib29sIGJvdW5kX2J5X21hYyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTcte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwMC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzAxOnN0YXRpYyB2b2lkIG5ldGNvbnNfcmVsZWFzZV9kZXYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDgtLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwOTpzdGF0aWMgdm9pZCByZXN1bWVfdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMxMC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzIxLS8qIENoZWNrcyBpZiBhIGRlYWN0aXZhdGVkIHRhcmdldCBtYXRjaGVzIGEgZGV2aWNlLiAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMjI6c3RhdGljIGJvb2wgZGVhY3RpdmF0ZWRfdGFyZ2V0X21hdGNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMyMy1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzMy0vKiBQcm9jZXNzIHdvcmsgc2NoZWR1bGVkIGZvciB0YXJnZXQgcmVzdW1lLiAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMzQ6c3RhdGljIHZvaWQgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zOTMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM5NDpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zOTUte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQyMC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDIxOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQyMi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDQ0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0NDU6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldHBvbGwgKm5wKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ2NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDY1OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NjYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTUxNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTE1OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKnRvX3RhcmdldChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTUxNi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTI4LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1Mjk6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTUzMC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTM5LS8qIEdldCByaWQgb2YgcG9zc2libGUgdHJhaWxpbmcgbmV3bGluZSwgcmV0dXJuaW5nIHRoZSBuZXcgbGVuZ3RoICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU0MDpzdGF0aWMgdm9pZCB0cmltX25ld2xpbmUoY2hhciAqcywgc2l6ZV90IG1heGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU1NTpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTU5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NjA6c3RhdGljIHNzaXplX3QgZXh0ZW5kZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NjQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU2NTpzdGF0aWMgc3NpemVfdCByZWxlYXNlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTY5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NzA6c3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU3NTpzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1ODA6c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU4NTpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU5NC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTk1OnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01OTYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYwNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjA1OnN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYxMi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjEzOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjYxODpzdGF0aWMgc3NpemVfdCB0cmFuc21pdF9lcnJvcnNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MzMtLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjYzNDpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYzNS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjQ2LS8qIGNvbmZpZ2ZzIGhlbHBlciB0byBkaXNwbGF5IGlmIHRhc2tuYW1lIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY0NzpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3Rhc2tuYW1lX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY0OC1cXHRcXHRcXHRcXHRcXHQgICAgIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NTktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY2MDpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3JlbGVhc2VfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjYxLVxcdFxcdFxcdFxcdFxcdCAgICBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjc1LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NzY6c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9uZXRjb25zX2NvbnNvbGVzKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjk5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MDA6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MDEtXFx0XFx0XFx0XFx0XFx0ICBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzE5LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MjA6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcyMS1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjgwODpzdGF0aWMgc3NpemVfdCByZWxlYXNlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDktXFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODM0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MzU6c3RhdGljIHNzaXplX3QgZXh0ZW5kZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzNi1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODYwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NjE6c3RhdGljIHNzaXplX3QgZGV2X25hbWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg2Mi1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODg3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODg6c3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODg5LVxcdFxcdHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MDktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkxMDpzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxMS1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MzEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkzMjpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMzLVxcdFxcdHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NTYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk1NzpzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1OC1cXHQgICAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk4Ni0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTg3OnN0YXRpYyBzaXplX3QgY291bnRfdXNlcmRhdGFfZW50cmllcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTkyOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5My1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTAxOD1zdHJ1Y3QgdXNlcmRhdHVtIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDIyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDIzOnN0YXRpYyBzdHJ1Y3QgdXNlcmRhdHVtICp0b191c2VyZGF0dW0oc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDI4PXN0cnVjdCB1c2VyZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAzMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTAzMjpzdGF0aWMgc3RydWN0IHVzZXJkYXRhICp0b191c2VyZGF0YShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMzc6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqdXNlcmRhdGFfdG9fdGFyZ2V0KHN0cnVjdCB1c2VyZGF0YSAqdWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNDQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNDU6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNTQ6c3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDcyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDczOnN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNzQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMjE6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIyLVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNTktICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNjA6c3RhdGljIHZvaWQgZGlzYWJsZV9zeXNkYXRhX2ZlYXR1cmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2MS1cXHRcXHRcXHRcXHQgICAgZW51bSBzeXNkYXRhX2ZlYXR1cmUgZmVhdHVyZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTY2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTY3OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNjgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE5NjpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3JlbGVhc2VfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExOTctXFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjI1OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMjYtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1NC0vKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjU1OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjU2LVxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjkyPUNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIG1zZ2lkX2VuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjkzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjk0OnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp1c2VyZGF0dW1fYXR0cnNbXSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5NS1cXHRcXHUwMDI2dXNlcmRhdHVtX2F0dHJfdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI5OTpzdGF0aWMgdm9pZCB1c2VyZGF0dW1fcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMDQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdXNlcmRhdHVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMwNS1cXHQucmVsZWFzZSA9IHVzZXJkYXR1bV9yZWxlYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMDg6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXR1bV90eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzA5LVxcdC5jdF9pdGVtX29wc1xcdD0gXFx1MDAyNnVzZXJkYXR1bV9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMxMy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTMxNDpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzE1LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMzYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMzc6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMzOC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM1MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM1MTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdXNlcmRhdGFfYXR0cnNbXSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM1Mi1cXHRcXHUwMDI2c3lzZGF0YV9hdHRyX2NwdV9ucl9lbmFibGVkLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNTgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNTk6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHVzZXJkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2MC1cXHQubWFrZV9pdGVtXFx0XFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXRhX3R5cGUgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjUtXFx0LmN0X2l0ZW1fb3BzXFx0PSBcXHUwMDI2dXNlcmRhdHVtX29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzgxPUNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzgyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzgzOnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzg0LVxcdFxcdTAwMjZhdHRyX2VuYWJsZWQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQwMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQwMjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQwMy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQwOS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQxMDpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBuZXRjb25zb2xlX3RhcmdldF9pdGVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMS1cXHQucmVsZWFzZVxcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDEzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDE0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDE1LVxcdC5jdF9hdHRyc1xcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfYXR0cnMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxOS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQyMDpzdGF0aWMgdm9pZCBpbml0X3RhcmdldF9jb25maWdfZ3JvdXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQyMS1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQyOC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQyOTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpmaW5kX2NtZGxpbmVfdGFyZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MzAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NDktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0NTA6c3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm1ha2VfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDgzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDg0OnN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0ODUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1MzMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1MzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIG5ldGNvbnNvbGVfc3Vic3lzX2dyb3VwX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUzNS1cXHQubWFrZV9ncm91cFxcdD0gbWFrZV9uZXRjb25zb2xlX3RhcmdldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTM4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTM5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3N1YnN5c190eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTQwLVxcdC5jdF9ncm91cF9vcHNcXHQ9IFxcdTAwMjZuZXRjb25zb2xlX3N1YnN5c19ncm91cF9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU0NC0vKiBUaGUgbmV0Y29uc29sZSBjb25maWdmcyBzdWJzeXN0ZW0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0NTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU0Ni1cXHQuc3VfZ3JvdXBcXHQ9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTUzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTU0OnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1NS1cXHRcXHRcXHRcXHQgICBpbnQgY21kbGluZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTYzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTY0OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfY3B1X25yKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NjUtXFx0XFx0XFx0XFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTcxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTcyOnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfdGFza25hbWUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4MDpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX3JlbGVhc2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4MS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NzpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX21zZ2lkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1OTktICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MDA6c3RhdGljIGludCBwcmVwYXJlX3N5c2RhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYwMS1cXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyNS0vKiBIYW5kbGUgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIG5vdGlmaWNhdGlvbnMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYyNjpzdGF0aWMgaW50IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyNy1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwMy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwNDpzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5ldGNvbnNvbGVfbmV0ZGV2X25vdGlmaWVyID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzA1LVxcdC5ub3RpZmllcl9jYWxsICA9IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MTktICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MjA6c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzQzOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc0NC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc2Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc2ODpzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NjktXFx0XFx0XFx0XFx0IGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc5Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc5MzpzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3OTQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MTAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MTE6c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODEyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODI0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODI1OnN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NTEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NTI6c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1My17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg3NC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg3NTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MTktICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5MjA6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTM2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTM3OnN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkzOC1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk3MzpzdGF0aWMgdm9pZCBhcHBlbmRfcmVsZWFzZShjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5ODAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5ODE6c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk4Mi1cXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNzItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNzM6c3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDc0LVxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKm1zZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE4LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTE5OnN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTUxOnN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTItXFx0XFx0XFx0IHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3MS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE3MjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwMDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMS1cXHRcXHRcXHRcXHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDY6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9iYXNpYyhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwNy1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxMjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV9sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEzLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE0PV9fYWNxdWlyZXMoXFx1MDAyNnRhcmdldF9saXN0X2xvY2spXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxOC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxOTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV91bmxvY2soc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjAtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjIxPV9fcmVsZWFzZXMoXFx1MDAyNnRhcmdldF9saXN0X2xvY2spXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNjpzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjcte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjAtLyogQWxsb2NhdGUgbmV3IHRhcmdldCAoZnJvbSBib290L21vZHVsZSBwYXJhbSkgYW5kIHNldHVwIG5ldHBvbGwgZm9yIGl0ICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMjE6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjItXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBjbWRsaW5lX2NvdW50KVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDozMy45NDg4MzI5NTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2ODQ0NDUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgTW9kdWxlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgb3ZlciB0aGlzIGBuZXRjb25zb2xlYCBjb2RlLCBhbmQgdGhlIGltbWVkaWF0ZSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZSBjcnVjaWFsIGBpbml0X21vZHVsZWAgYW5kIGBjbGVhbnVwX21vZHVsZWAgZnVuY3Rpb25zIOKAkyB0aGUgZW50cnkgYW5kIGV4aXQgcG9pbnRzLCByZWFsbHkg4oCTIGFyZSBhbGwgbWFjcm8tZ2VuZXJhdGVkLiBTdGFuZGFyZCBzdHVmZi4gTm90aGluZyB1bnVzdWFsIHRoZXJlLiBCdXQgaG9sZCBvbi4uLiB3YXNuJ3QgdGhlcmUgYSBzdGF0aWMgZnVuY3Rpb24uLi4gaG1tLi4uIHllYWgsIGBuZXRjb25zb2xlX3dyaXRlYCBpcyBmbGFnZ2VkIGFzIHN0YXRpYy5cblxuQWxyaWdodCwgdGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBmbG9hdGluZyBhcm91bmQgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgZWxzZSB3ZSBjYW4gdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NjQsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDozOC4xMTcyODMzMTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjA2MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTgwPV9fc2V0dXAoXFxcIm5ldGNvbnNvbGU9XFxcIiwgb3B0aW9uX3NldHVwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04My0vKiBMaW5rZWQgbGlzdCBvZiBhbGwgY29uZmlndXJlZCB0YXJnZXRzICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0OnN0YXRpYyBMSVNUX0hFQUQodGFyZ2V0X2xpc3QpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NS0vKiB0YXJnZXRfY2xlYW51cF9saXN0IGlzIHVzZWQgdG8gdHJhY2sgdGFyZ2V0cyB0aGF0IG5lZWQgdG8gYmUgY2xlYW5lZCBvdXRzaWRlXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODgtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg5OnN0YXRpYyBMSVNUX0hFQUQodGFyZ2V0X2NsZWFudXBfbGlzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MS0vKiBUaGlzIG5lZWRzIHRvIGJlIGEgc3BpbmxvY2sgYmVjYXVzZSB3cml0ZV9tc2coKSBjYW5ub3Qgc2xlZXAgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTI6c3RhdGljIERFRklORV9TUElOTE9DSyh0YXJnZXRfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMtLyogVGhpcyBuZWVkcyB0byBiZSBhIG11dGV4IGJlY2F1c2UgbmV0cG9sbF9jbGVhbnVwIG1pZ2h0IHNsZWVwICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk0OnN0YXRpYyBERUZJTkVfTVVURVgodGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTUtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1PXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIG5ldGNvbnNvbGVfc3Vic3lzO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTY6c3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjM4LjE5ODQ5ODg3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDIwMjEyMzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBNeSBSZWdleCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcmVnZXggYW5kIGl0J3MganVzdCBub3QgcXVpdGUgcmlnaHQuIEkgd2FzIHRyeWluZyB0byBmaW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBidXQgSSdtIGNsZWFybHkgbWlzc2luZyBzb21ldGhpbmcuIExldCBtZSB0cnkgYGdyZXAgLUUgJ15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgnIGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFRoYXQgc2hvdWxkIGNhdGNoIG1vc3Qgb2YgdGhlbS4uLiBidXQgd2FpdCwgSSBrbm93IGZyb20gbWVtb3J5IHRoYXQgbW9zdCBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlIGFyZSBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBwcm9iYWJseSBleHBsYWlucyB3aHkgdGhlIHJlc3VsdHMgYXJlbid0IHdoYXQgSSBleHBlY3QuIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayBgaW5pdF9uZXRjb25zb2xlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxODgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MjA6NDIuNjE4NzEzNzA3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzkxNjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbml0X25ldGNvbnNvbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzk0PXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MDM6c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0ODQ9c3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfbmV0Y29uc29sZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MTctICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MTg6bGF0ZV9pbml0Y2FsbChpbml0X25ldGNvbnNvbGUpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTE5LW1vZHVsZV9leGl0KGNsZWFudXBfbmV0Y29uc29sZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjQyLjcxNjYzNDk1N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzY5NjA4NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEZ1bmN0aW9uIEVudHJ5IFBvaW50cyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgc3RhdGljIGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgaGVyZS4gU2luY2UgdGhlIGluc3RydWN0aW9ucyBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBJJ2xsIGZpcnN0IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnksIGFuZCBpZiBub3QsIGZhbGwgYmFjayBvbiB0aGUgc3RhdGljIG9uZXMsIGZvY3VzaW5nIG9uIG1vZGlmaWVkIGZ1bmN0aW9ucy5cblxuTG9va2luZyBhdCB0aGUgbGlzdCBvZiBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zLCBJIGhhdmU6IGB1cGRhdGVfdXNlcmRhdGFgLCBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAsIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgYHNlbmRfZnJhZ21lbnRlZF9ib2R5YCwgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgLCBgc2VuZF9leHRfbXNnX3VkcGAsIGBzZW5kX21zZ191ZHBgLCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YC4gRm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMsIEknbGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gbGlrZSBwb3RlbnRpYWwgQVBJIGVudHJ5cG9pbnRzIG9yIGhhdmUgYSBnb29kIGNoYW5jZSBvZiAqbm90KiBiZWluZyBpbmxpbmVkLlxuXG5gdXBkYXRlX3VzZXJkYXRhYCwgYHNlbmRfZXh0X21zZ191ZHBgLCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAsIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgYW5kIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAgYXJlIHRoZSBmcm9udCBydW5uZXJzLiBgc2VuZF9leHRfbXNnX3VkcGAgYW5kIGB1cGRhdGVfdXNlcmRhdGFgIGFyZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgaW5saW5lZCBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSBtb3JlIHNpZ25pZmljYW50LlxuXG5Ob3csIEknbSBub3RpbmcgdGhlIGNvbmZpZyBvcHRpb25zLiBXZSBoYXZlIGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCBgQ09ORklHRlNfRlNgLiBJIGtub3cgYENPTkZJR0ZTX0ZTYCBpcyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCBJJ2xsIGluY2x1ZGUgaXQganVzdCB0byBiZSBzYWZlLiBJIHNlZSB0aGF0IGBORVRDT05TT0xFX0RZTkFNSUNgIGRlcGVuZHMgb24gYE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GU2AuIExldCdzIGFzc3VtZSB0aGF0IGBTWVNGU2AgaXMgbGlrZWx5IGltcGxpZWQuIFNvIG15IGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGBbXCJORVRDT05TT0xFXCIsIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsIFwiQ09ORklHRlNfRlNcIl1gLlxuXG5JJ2xsIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVENPTlNPTEVgLiBTZWVtcyBpdCBkZXBlbmRzIG9uIGBQUklOVEtgLCB3aGljaCBpcyBzdGFuZGFyZC5cblxuU28gbm93LCBmb3IgbXkgYEZvY3VzU3ltYm9sc2AgbGlzdCwgYmFzZWQgb24gdGhlIHByZXZpb3VzIGV2YWx1YXRpb24sIEknbGwgZ28gd2l0aCBgW1widXBkYXRlX3VzZXJkYXRhXCIsIFwic2VuZF9leHRfbXNnX3VkcFwiLCBcInNlbmRfbXNnX2ZyYWdtZW50ZWRcIiwgXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIiwgXCJ1c2VyZGF0dW1fZHJvcFwiXWAuICBJJ2xsIHZlcmlmeSB0aGF0IGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgIGFyZSBzdGF0aWMsIGFzIEkgc3VzcGVjdC5cblxuSSBzaG91bGQgYWxzbyBtYWtlIGEgbm90ZSBvZiB0aGUgY29uc29sZSB3cml0ZSBjYWxsYmFja3MsIGluIGNhc2UgdGhvc2UgdHVybiBvdXQgdG8gYmUgaW1wb3J0YW50OiBgbmV0Y29uc29sZV93cml0ZWAsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAsIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0Y29uc29sZV93cml0ZV9leHRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDo1Mi4wODYyNDcxNzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTIzMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGNvbnNvbGVfd3JpdGVfZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE3Mj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTk5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjAwOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfZXh0KHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM4NT1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM4Ny1cXHQuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9FWFRFTkRFRCB8IENPTl9OQkNPTiB8IENPTl9OQkNPTl9BVE9NSUNfVU5TQUZFLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzg4OlxcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM4OTpcXHQud3JpdGVfYXRvbWljID0gbmV0Y29uc29sZV93cml0ZV9leHQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzOTAtXFx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MjA6NTIuMTQwMTc2NjVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk5Nzg3MDkxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGNvbnNvbGUgUkNVIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGltcGxlbWVudGluZyBSZWFkLUNvcHktVXBkYXRlIChSQ1UpIHByb3RlY3Rpb24gZm9yIHRoZSBgdXNlcmRhdGFgIGZpZWxkIHdpdGhpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzIHJlbGF0ZWQgdG8gaG93IHRoZSBjb25maWd1cmF0aW9uIGRhdGEgaXMgbWFuYWdlZCBhbmQgYWNjZXNzZWQuXG5cblRoZSBrZXkgZW50cnkgcG9pbnRzIGFyZSBjbGVhcjogYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGFyZSB0aGUgcHVibGljIGZhY2VzIGZvciB3cml0aW5nIHRvIHRoZSBjb25zb2xlLCBhbmQgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAgYXJlIHRoZSBjb25maWdmcyBlbnRyeSBwb2ludHMgZm9yIG1hbmFnaW5nIHRoZSBgdXNlcmRhdGFgLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQ6XG5cbiogICBgdXBkYXRlX3VzZXJkYXRhYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgdGhlIGBuZXRjb25zX3VzZXJkYXRhYCBzdHJ1Y3R1cmUgdXNpbmcgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLiBUaGlzIGlzIHdoZXJlIHRoZSBuZXcgZGF0YSBjb21lcyBpbiBhbmQgdGhlIG9sZCBkYXRhIGlzIGdyYWNlZnVsbHkgcmVsaW5xdWlzaGVkIHZpYSBSQ1Ugc2VtYW50aWNzLlxuKiAgIGBzZW5kX2V4dF9tc2dfdWRwYCBpcyB0aGUgY3JpdGljYWwgZnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhpcyBwcm90ZWN0ZWQgYHVzZXJkYXRhYC4gSSBzZWUgaXQgdXNpbmcgYHJjdV9yZWFkX2xvY2soKWAsIGByY3VfZGVyZWZlcmVuY2UoKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgdG8gc2FmZWx5IGFjY2VzcyB0aGUgZGF0YS4gVGhpcyBpbXBsaWVzIGEgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIG1lYW5pbmcgd2UgY291bGQgcG90ZW50aWFsbHkgaGF2ZSBoaWdoIHJlYWQgcGVyZm9ybWFuY2Ugd2hlbiB1cGRhdGluZyB0aGUgY29uZmlncy5cbiogICBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCBhcmUgdGhlIGNvbmZpZ2ZzIGhvb2tzIHRoYXQgdWx0aW1hdGVseSAqY2FsbCogYHVwZGF0ZV91c2VyZGF0YWAgdG8gaGFuZGxlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgYHNlbmRfZXh0X21zZ191ZHBgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGFuZCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAgYXJlIGFsbCBtb2RpZmllZCB0byB0YWtlIGB1c2VyZGF0YWAgYXMgYW4gYXJndW1lbnQuIFRoZSBwYXRjaCBpcyBlbnN1cmluZyB0aGUgY3VycmVudCB1c2VyZGF0YSBpcyBwYXNzZWQgZG93biwgaW5zdGVhZCBvZiBzb21lIG90aGVyIGNvcHkgb2YgdGhlIHVzZXJkYXRhLlxuXG5UaGUgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgIGFuZCBgZnJlZV9wYXJhbV90YXJnZXRgIGZ1bmN0aW9ucyBhcmUgYWxzbyBtb2RpZmllZCB0byBga2ZyZWUoKWAgdGhlIG9sZCB1c2VyZGF0YSB1c2luZyBgcmN1X2FjY2Vzc19wb2ludGVyYCwgaW5kaWNhdGluZyB0aGUgcmVsZWFzZSBwYXJ0IG9mIHRoZSBSQ1UgY3ljbGUuXG5cblRoZXJlZm9yZSwgZm9yIG15IHRlc3RpbmcgYW5kIGFuYWx5c2lzLCBteSBpbml0aWFsIGxpc3Qgb2YgZnVuY3Rpb25zIEkgd2lsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGlzOlxuXG4qICAgYHVwZGF0ZV91c2VyZGF0YWAgKGZvciBSQ1UgdXBkYXRlKVxuKiAgIGBzZW5kX2V4dF9tc2dfdWRwYCAoZm9yIFJDVSByZWFkKVxuKiAgIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIChjb25maWdmcyB1cGRhdGUpXG4qICAgYHVzZXJkYXR1bV9kcm9wYCAoY29uZmlnZnMgdXBkYXRlKVxuKiAgIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgKGJlY2F1c2UgSSBzZWUgaXQgYXQgdGhlIHRvcCwgYW5kIGxpa2VseSBpbnRlcmFjdHMgd2l0aCBhbGwgdGhlIGZ1bmN0aW9ucyBhYm92ZSwgd2l0aCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2ApXG5cbkdpdmVuIHRoaXMgY2hhbmdlIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24sIGl0J3MgY3JpdGljYWwgdG8gZnV6eiB0aGlzIGFyZWEgd2l0aCBjb25jdXJyZW50IHVwZGF0ZXMgdGhyb3VnaCBjb25maWdmcyBhbmQgY29uc29sZSB3cml0ZXMgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBvciBkYXRhIHJhY2VzIGFyZSBpbnRyb2R1Y2VkLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB2ZXJpZnkgYXJlIGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCBgQ09ORklHRlNfRlNgLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgdGhlIGNvcmUga2VybmVsLCBsaWtlbHkgaW5jcmVhc2luZyBpdHMgc3RhYmlsaXR5LiBUaW1lIHRvIHNldCB1cCB0aGF0IGZ1enppbmcgY2FtcGFpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTUyLCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMToxMi4xMTg4ODk3NDhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwNjE4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1cGRhdGVfdXNlcmRhdGFcIixcbiAgICBcInNlbmRfZXh0X21zZ191ZHBcIixcbiAgICBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICAgIFwidXNlcmRhdHVtX2Ryb3BcIixcbiAgICBcIm5ldGNvbnNvbGVfd3JpdGVfZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIGB1c2VyZGF0YWAgcGF5bG9hZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEl0IG1vZGlmaWVzIGhvdyB1c2VyZGF0YSBpcyB1cGRhdGVkIHZpYSBjb25maWdmcyBhbmQgaG93IGl0IGlzIHJlYWQgZHVyaW5nIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMpIHRoYXQgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24gaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIGNyYXNoZXMgdW5kZXIgY29uY3VycmVudCBjb25maWdmcyB1cGRhdGVzIGFuZCBjb25zb2xlIHdyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXBkYXRlX3VzZXJkYXRhXCIsXG4gICAgXCJzZW5kX2V4dF9tc2dfdWRwXCIsXG4gICAgXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIixcbiAgICBcInVzZXJkYXR1bV9kcm9wXCIsXG4gICAgXCJuZXRjb25zb2xlX3dyaXRlX2V4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBgdXNlcmRhdGFgIHBheWxvYWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyLiBJdCBtb2RpZmllcyBob3cgdXNlcmRhdGEgaXMgdXBkYXRlZCB2aWEgY29uZmlnZnMgYW5kIGhvdyBpdCBpcyByZWFkIGR1cmluZyBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jKSB0aGF0IHByZXZlbnRzIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgUkNVIGltcGxlbWVudGF0aW9uIGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBjcmFzaGVzIHVuZGVyIGNvbmN1cnJlbnQgY29uZmlnZnMgdXBkYXRlcyBhbmQgY29uc29sZSB3cml0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowl5nq4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 12:17:55 +0000 UTC FinishedAt: 2026-08-05 12:21:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8ba098e6b6ff0db8edf28528d1552be261af30d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8ba098e6b6ff0db8edf28528d1552be261af30d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS" ], "series_id": "abd45107-7f42-404f-9def-e50bce1ea092" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "update_userdata", "send_ext_msg_udp", "userdatum_value_store", "userdatum_drop", "netconsole_write_ext" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXBkYXRlX3VzZXJkYXRhJiMzNDssCiAgICAmIzM0O3NlbmRfZXh0X21zZ191ZHAmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX3ZhbHVlX3N0b3JlJiMzNDssCiAgICAmIzM0O3VzZXJkYXR1bV9kcm9wJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfd3JpdGVfZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBgdXNlcmRhdGFgIHBheWxvYWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyLiBJdCBtb2RpZmllcyBob3cgdXNlcmRhdGEgaXMgdXBkYXRlZCB2aWEgY29uZmlnZnMgYW5kIGhvdyBpdCBpcyByZWFkIGR1cmluZyBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jKSB0aGF0IHByZXZlbnRzIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgUkNVIGltcGxlbWVudGF0aW9uIGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgY3Jhc2hlcyB1bmRlciBjb25jdXJyZW50IGNvbmZpZ2ZzIHVwZGF0ZXMgYW5kIGNvbnNvbGUgd3JpdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWZmMTEwY2ZhMWU0YWE2NDlkYWFmMjViMGNiYTRjOWQ0MTgzYjRlN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTI6MTk6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5pbmRleCA4NjIwMDFkMDlhYTg0Li4xNDA5MmZiMTVmNmQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC0xMzUsMTMgJiM0MzsxMzUsMjcgQEAgZW51bSB0YXJnZXRfc3RhdGUge1xuIFx0U1RBVEVfREVBQ1RJVkFURUQsXG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXG4mIzQzOyAqIEByY3U6XHRVc2VkIHRvIGZyZWUgdGhlIHBheWxvYWQgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuXG4mIzQzOyAqIEBsZW5ndGg6XHRMZW5ndGggb2YgQGRhdGEsIGV4Y2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3IuXG4mIzQzOyAqIEBkYXRhOlx0Rm9ybWF0dGVkIFwmIzM0OyBrZXk9dmFsdWVcXG5cJiMzNDsgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEltbXV0YWJsZSBvbmNlIHB1Ymxpc2hlZCwgc28gdGhlIHRyYW5zbWl0IHBhdGggbmV2ZXIgb2JzZXJ2ZXMgQGRhdGEgYW5kXG4mIzQzOyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XG4mIzQzO1x0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbiYjNDM7XHRzaXplX3RcdFx0XHRsZW5ndGg7XG4mIzQzO1x0Y2hhclx0XHRcdGRhdGFbXTtcbiYjNDM7fTtcbiYjNDM7XG4gLyoqXG4gICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuXG4gICogQGxpc3Q6XHRMaW5rcyB0aGlzIHRhcmdldCBpbnRvIHRoZSB0YXJnZXRfbGlzdC5cbiAgKiBAZ3JvdXA6XHRMaW5rcyB1cyBpbnRvIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0gaGllcmFyY2h5LlxuICAqIEB1c2VyZGF0YV9ncm91cDpcdExpbmtzIHRvIHRoZSB1c2VyZGF0YSBjb25maWdmcyBoaWVyYXJjaHlcbi0gKiBAdXNlcmRhdGE6XHRcdENhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmRcbi0gKiBAdXNlcmRhdGFfbGVuZ3RoOlx0U3RyaW5nIGxlbmd0aCBvZiB1c2VyZGF0YS5cbiYjNDM7ICogQHVzZXJkYXRhOlx0XHRDYWNoZWQsIGZvcm1hdHRlZCB1c2VyZGF0YSBwYXlsb2FkLiBSQ1UgcHJvdGVjdGVkLlxuICAqIEBzeXNkYXRhOlx0XHRDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kXG4gICogQHN5c2RhdGFfZmllbGRzOlx0U3lzZGF0YSBmZWF0dXJlcyBlbmFibGVkLlxuICAqIEBtc2djb3VudGVyOlx0TWVzc2FnZSBzZW50IGNvdW50ZXIuXG5AQCAtMTc2LDggJiM0MzsxOTAsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3RydWN0IGNvbmZpZ19ncm91cFx0Z3JvdXA7XG4gXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXHR1c2VyZGF0YV9ncm91cDtcbi1cdGNoYXJcdFx0XHQqdXNlcmRhdGE7XG4tXHRzaXplX3RcdFx0XHR1c2VyZGF0YV9sZW5ndGg7XG4mIzQzO1x0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgX19yY3UgKnVzZXJkYXRhO1xuIFx0Y2hhclx0XHRcdHN5c2RhdGFbTUFYX0VYVFJBREFUQV9FTlRSWV9MRU4gKiBNQVhfU1lTREFUQV9JVEVNU107XG4gXG4gXHQvKiBiaXQtd2lzZSB3aXRoIHN5c2RhdGFfZmVhdHVyZSBiaXRzICovXG5AQCAtMTA1OSwxMiAmIzQzOzEwNzIsMTEgQEAgc3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFxuIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpuZXcgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpvbGQ7XG4gXHRzdHJ1Y3QgdXNlcmRhdHVtICp1ZG1faXRlbTtcbiBcdHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuLVx0Y2hhciAqb2xkX2J1ZiA9IE5VTEw7XG4tXHRjaGFyICpuZXdfYnVmID0gTlVMTDtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgb2Zmc2V0ID0gMDtcbiBcdGludCBsZW47XG4gXG5AQCAtMTA3Niw4ICYjNDM7MTA4OCw4IEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXG4gXHQvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyICovXG4gXHRpZiAobGVuKSB7XG4tXHRcdG5ld19idWYgPSBrbWFsbG9jKGxlbiAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbi1cdFx0aWYgKCFuZXdfYnVmKVxuJiM0MztcdFx0bmV3ID0ga21hbGxvY19mbGV4KCpuZXcsIGRhdGEsIGxlbiAmIzQzOyAxKTtcbiYjNDM7XHRcdGlmICghbmV3KVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuQEAgLTEwODcsMjIgJiM0MzsxMDk5LDIxIEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHVkbV9pdGVtID0gdG9fdXNlcmRhdHVtKGl0ZW0pO1xuIFx0XHQvKiBTa2lwIHVzZXJkYXRhIHdpdGggbm8gdmFsdWUgc2V0ICovXG4gXHRcdGlmICh1ZG1faXRlbS1cdTAwM2V2YWx1ZVswXSkge1xuLVx0XHRcdG9mZnNldCAmIzQzOz0gc2NucHJpbnRmKFx1MDAyNm5ld19idWZbb2Zmc2V0XSwgbGVuICYjNDM7IDEgLSBvZmZzZXQsXG4mIzQzO1x0XHRcdG9mZnNldCAmIzQzOz0gc2NucHJpbnRmKFx1MDAyNm5ldy1cdTAwM2VkYXRhW29mZnNldF0sXG4mIzQzO1x0XHRcdFx0XHQgICAgbGVuICYjNDM7IDEgLSBvZmZzZXQsXG4gXHRcdFx0XHRcdCAgICBcJiMzNDsgJXM9JXNcXG5cJiMzNDssIGl0ZW0tXHUwMDNlY2lfbmFtZSxcbiBcdFx0XHRcdFx0ICAgIHVkbV9pdGVtLVx1MDAzZXZhbHVlKTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0V0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pO1xuJiM0MztcdGlmIChuZXcpXG4mIzQzO1x0XHRuZXctXHUwMDNlbGVuZ3RoID0gb2Zmc2V0O1xuIFxuLVx0LyogU3dpdGNoIHRvIG5ldyBidWZmZXIgYW5kIGZyZWUgb2xkIGJ1ZmZlciAqL1xuLVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuLVx0b2xkX2J1ZiA9IG50LVx1MDAzZXVzZXJkYXRhO1xuLVx0bnQtXHUwMDNldXNlcmRhdGEgPSBuZXdfYnVmO1xuLVx0bnQtXHUwMDNldXNlcmRhdGFfbGVuZ3RoID0gb2Zmc2V0O1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XG4tXG4tXHRrZnJlZShvbGRfYnVmKTtcbiYjNDM7XHQvKiBXcml0ZXJzIGFyZSBzZXJpYWxpemVkIGJ5IGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleC4gKi9cbiYjNDM7XHRvbGQgPSByY3VfcmVwbGFjZV9wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhLCBuZXcsXG4mIzQzO1x0XHRcdFx0ICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZHluYW1pY19uZXRjb25zb2xlX211dGV4KSk7XG4mIzQzO1x0a2ZyZWVfcmN1KG9sZCwgcmN1KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMzkyLDcgJiM0MzsxNDAzLDcgQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGtmcmVlKG50LVx1MDAzZXVzZXJkYXRhKTtcbiYjNDM7XHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtXHUwMDNldXNlcmRhdGEpKTtcbiBcdGtmcmVlKG50KTtcbiB9XG4gXG5AQCAtMTkyNiwxNCAmIzQzOzE5MzcsMTMgQEAgc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0XHRcdCAgICAgIGludCBtc2dfbGVuLFxuLVx0XHRcdFx0ICAgICAgaW50IHJlbGVhc2VfbGVuKVxuJiM0MztcdFx0XHRcdCAgICAgIGludCByZWxlYXNlX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXG4ge1xuLVx0Y29uc3QgY2hhciAqdXNlcmRhdGEgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqc3lzZGF0YSA9IE5VTEw7XG4gXHRjb25zdCBjaGFyICpyZWxlYXNlO1xuIFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHR1c2VyZGF0YSA9IG50LVx1MDAzZXVzZXJkYXRhO1xuIFx0c3lzZGF0YSA9IG50LVx1MDAzZXN5c2RhdGE7XG4gI2VuZGlmXG4gXG5AQCAtMTk1MCw3ICYjNDM7MTk2MCw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGlmICh1c2VyZGF0YSlcbiBcdFx0bXNnX2xlbiAmIzQzOz0gc2NucHJpbnRmKFx1MDAyNm50LVx1MDAzZWJ1Zlttc2dfbGVuXSxcbiBcdFx0XHRcdCAgICAgc2l6ZW9mKG50LVx1MDAzZWJ1ZikgLSBtc2dfbGVuLCBcJiMzNDslc1wmIzM0Oyxcbi1cdFx0XHRcdCAgICAgdXNlcmRhdGEpO1xuJiM0MztcdFx0XHRcdCAgICAgdXNlcmRhdGEtXHUwMDNlZGF0YSk7XG4gXG4gXHRpZiAoc3lzZGF0YSlcbiBcdFx0bXNnX2xlbiAmIzQzOz0gc2NucHJpbnRmKFx1MDAyNm50LVx1MDAzZWJ1Zlttc2dfbGVuXSxcbkBAIC0xOTcwLDcgJiM0MzsxOTgwLDggQEAgc3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxuLVx0XHRcdFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuKVxuJiM0MztcdFx0XHRcdCBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbiBcdGNvbnN0IGNoYXIgKnVzZXJkYXRhX3B0ciA9IE5VTEw7XG4gXHRjb25zdCBjaGFyICpzeXNkYXRhX3B0ciA9IE5VTEw7XG5AQCAtMTk4MSwxMiAmIzQzOzE5OTIsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xuIFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHR1c2VyZGF0YV9wdHIgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGFfcHRyID0gbnQtXHUwMDNlc3lzZGF0YTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbiAjZW5kaWZcbi1cdGlmIChXQVJOX09OX09OQ0UoIXVzZXJkYXRhX3B0ciBcdTAwMjZcdTAwMjYgdXNlcmRhdGFfbGVuICE9IDApKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0aWYgKHVzZXJkYXRhKSB7XG4mIzQzO1x0XHR1c2VyZGF0YV9wdHIgPSB1c2VyZGF0YS1cdTAwM2VkYXRhO1xuJiM0MztcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuJiM0MztcdH1cbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXN5c2RhdGFfcHRyIFx1MDAyNlx1MDAyNiBzeXNkYXRhX2xlbiAhPSAwKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTIwNjMsNyAmIzQzOzIwNzQsOCBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHRjb25zdCBjaGFyICptc2csXG4gXHRcdFx0XHRpbnQgbXNnX2xlbixcbiBcdFx0XHRcdGludCByZWxlYXNlX2xlbixcbi1cdFx0XHRcdGludCBzeXNkYXRhX2xlbilcbiYjNDM7XHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbiBcdGludCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbjtcbiBcdGNvbnN0IGNoYXIgKm1zZ2JvZHk7XG5AQCAtMjA5Miw3ICYjNDM7MjEwNCw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdCAqIHdpbGwgYmUgcmVwbGFjZWRcbiBcdCAqL1xuIFx0c2VuZF9mcmFnbWVudGVkX2JvZHkobnQsIG1zZ2JvZHksIGhlYWRlcl9sZW4sIG1zZ2JvZHlfbGVuLFxuLVx0XHRcdCAgICAgc3lzZGF0YV9sZW4pO1xuJiM0MztcdFx0XHQgICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gfVxuIFxuIC8qKlxuQEAgLTIxMDcsMjUgJiM0MzsyMTE5LDMzIEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSA9IE5VTEw7XG4gXHRpbnQgdXNlcmRhdGFfbGVuID0gMDtcbiBcdGludCByZWxlYXNlX2xlbiA9IDA7XG4gXHRpbnQgc3lzZGF0YV9sZW4gPSAwO1xuIFx0aW50IGxlbjtcbiBcbiYjNDM7XHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4gXHRzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpO1xuLVx0dXNlcmRhdGFfbGVuID0gbnQtXHUwMDNldXNlcmRhdGFfbGVuZ3RoO1xuJiM0MztcdHVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LVx1MDAzZXVzZXJkYXRhKTtcbiYjNDM7XHRpZiAodXNlcmRhdGEpXG4mIzQzO1x0XHR1c2VyZGF0YV9sZW4gPSB1c2VyZGF0YS1cdTAwM2VsZW5ndGg7XG4gI2VuZGlmXG4gXHRpZiAobnQtXHUwMDNlcmVsZWFzZSlcbiBcdFx0cmVsZWFzZV9sZW4gPSBzdHJsZW4oaW5pdF91dHNuYW1lKCktXHUwMDNlcmVsZWFzZSkgJiM0MzsgMTtcbiBcbiBcdGxlbiA9IHdjdHh0LVx1MDAzZWxlbiAmIzQzOyByZWxlYXNlX2xlbiAmIzQzOyBzeXNkYXRhX2xlbiAmIzQzOyB1c2VyZGF0YV9sZW47XG4gXHRpZiAobGVuIFx1MDAzYz0gTUFYX1BSSU5UX0NIVU5LKVxuLVx0XHRyZXR1cm4gc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtXHUwMDNlb3V0YnVmLFxuLVx0XHRcdFx0XHRcdCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuKTtcbiYjNDM7XHRcdHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LVx1MDAzZW91dGJ1Ziwgd2N0eHQtXHUwMDNlbGVuLFxuJiM0MztcdFx0XHRcdFx0ICByZWxlYXNlX2xlbiwgdXNlcmRhdGEpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LVx1MDAzZW91dGJ1Ziwgd2N0eHQtXHUwMDNlbGVuLCByZWxlYXNlX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTtcbiBcbi1cdHJldHVybiBzZW5kX21zZ19mcmFnbWVudGVkKG50LCB3Y3R4dC1cdTAwM2VvdXRidWYsIHdjdHh0LVx1MDAzZWxlbiwgcmVsZWFzZV9sZW4sXG4tXHRcdFx0XHQgICBzeXNkYXRhX2xlbik7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5AQCAtMjM1Nyw3ICYjNDM7MjM3Nyw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm50LVx1MDAzZXJlc3VtZV93cSk7XG4gXHRuZXRwb2xsX2NsZWFudXAoXHUwMDI2bnQtXHUwMDNlbnApO1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuJiM0MztcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC1cdTAwM2V1c2VyZGF0YSkpO1xuICNlbmRpZlxuIFx0a2ZyZWUobnQpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxuaW5kZXggYjU2YzcwYjdlMjc0Mi4uZjA2NzRjMDAxN2ZjNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbkBAIC0xMyw2ICYjNDM7MTMsNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRuZXRjb25zX3Jlc3VtZS5zaCBcXFxuIFx0bmV0Y29uc19zeXNkYXRhLnNoIFxcXG4gXHRuZXRjb25zX3RvcnR1cmUuc2ggXFxcbiYjNDM7XHRuZXRjb25zX3VzZXJkYXRhLnNoIFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xuIFxuIGluY2x1ZGUgLi4vLi4vLi4vbGliLm1rXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMTEzOTAzZjRjZTFjNVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXG5AQCAtMCwwICYjNDM7MSwyMjkgQEBcbiYjNDM7IyEvdXNyL2Jpbi9lbnYgYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjIEV4ZXJjaXNlIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuXG4mIzQzOyNcbiYjNDM7IyBUaGUgZmlyc3QgcGFydCBjaGVja3MgdGhhdCB0aGUgcGF5bG9hZCB0aGUgdGFyZ2V0IHRyYW5zbWl0cyBmb2xsb3dzIHdoYXRcbiYjNDM7IyBjb25maWdmcyBzYXlzOiBhIHZhbHVlIHNob3dzIHVwIGluIHRoZSBuZXh0IG1lc3NhZ2UsIGFuIHVwZGF0ZSByZXBsYWNlcyB0aGVcbiYjNDM7IyBwcmV2aW91cyBvbmUsIGNsZWFyaW5nIHRoZSB2YWx1ZSBkcm9wcyB0aGUgZW50cnksIGFuZCBzbyBkb2VzIHJlbW92aW5nIHRoZVxuJiM0MzsjIGtleS5cbiYjNDM7I1xuJiM0MzsjIFRoZSBzZWNvbmQgcGFydCByZXdyaXRlcyB2YWx1ZXMsIGNyZWF0ZXMgYW5kIGRlbGV0ZXMga2V5cywgYW5kIGNsZWFycyB0aGVcbiYjNDM7IyBwYXlsb2FkIGVudGlyZWx5IHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBrZWVwc1xuJiM0MzsjIHBpY2tpbmcgdXAgcGF5bG9hZHMgdGhhdCBhcmUgYmVpbmcgcmVwbGFjZWQgdW5kZXJuZWF0aCBpdC4gSXQgcnVucyB0d2ljZSxcbiYjNDM7IyBvbmNlIHdpdGggYSBwYXlsb2FkIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYSBzaW5nbGUgcGFja2V0IGFuZCBvbmNlIGxhcmdlXG4mIzQzOyMgZW5vdWdoIHRvIGJlIGZyYWdtZW50ZWQuXG4mIzQzOyNcbiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuJiM0MztcbiYjNDM7c2V0IC1ldW8gcGlwZWZhaWxcbiYjNDM7XG4mIzQzO1NDUklQVERJUj0kKGRpcm5hbWUgXCYjMzQ7JChyZWFkbGluayAtZSBcJiMzNDske0JBU0hfU09VUkNFWzBdfVwmIzM0OylcJiMzNDspXG4mIzQzO1xuJiM0Mztzb3VyY2UgXCYjMzQ7JHtTQ1JJUFRESVJ9XCYjMzQ7Ly4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaFxuJiM0MztcbiYjNDM7IyBOdW1iZXIgb2YgdGltZXMgZWFjaCB0b3J0dXJlIHdvcmtlciBsb29wc1xuJiM0MztJVEVSQVRJT05TPSR7MTotMjAwfVxuJiM0MztcbiYjNDM7IyBLZXlzIG93bmVkIGJ5IGVhY2ggdG9ydHVyZSB3b3JrZXIuIFdvcmtlcnMgZG8gbm90IHNoYXJlIGtleXMsIHNvIGEgZmFpbGluZ1xuJiM0MzsjIGNvbmZpZ2ZzIG9wZXJhdGlvbiBtZWFucyBhIHJlYWwgcHJvYmxlbSBhbmQgbm90IGEgbG9zdCByYWNlLlxuJiM0MztDSFVSTl9LRVk9XCYjMzQ7Y2h1cm5rZXlcJiMzNDtcbiYjNDM7VFJBTlNJRU5UX0tFWT1cJiMzNDt0cmFuc2llbnRrZXlcJiMzNDtcbiYjNDM7IyBOdW1iZXIgb2Yga2V5cyB1c2VkIHRvIHB1c2ggYSBtZXNzYWdlIHBhc3QgTUFYX1BSSU5UX0NIVU5LXG4mIzQzO0JVTEtfS0VZUz04XG4mIzQzO1xuJiM0MztVU0VSREFUQV9ESVI9XCYjMzQ7JHtORVRDT05TX1BBVEh9L3VzZXJkYXRhXCYjMzQ7XG4mIzQzOyMgVmFsdWVzIGFyZSBjYXBwZWQgYXQgTUFYX0VYVFJBREFUQV9WQUxVRV9MRU4oMjAwKSBieXRlcywgc28gJHtCVUxLX0tFWVN9XG4mIzQzOyMgZW50cmllcyBvZiB0aGlzIHNpemUgYXJlIGVub3VnaCB0byBmb3JjZSBmcmFnbWVudGF0aW9uXG4mIzQzO0xPTkdfVkFMVUU9JChwcmludGYgLS0gJiMzOTt2JS4wcyYjMzk7IHsxLi4xOTB9KVxuJiM0MztcbiYjNDM7ZnVuY3Rpb24gd3JpdGVfa2V5KCkge1xuJiM0MztcdGxvY2FsIEtFWT1cJiMzNDskezF9XCYjMzQ7XG4mIzQzO1x0bG9jYWwgVkFMVUU9XCYjMzQ7JHsyfVwmIzM0O1xuJiM0MztcbiYjNDM7XHRta2RpciAtcCBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtLRVl9XCYjMzQ7XG4mIzQzO1x0ZWNobyBcJiMzNDske1ZBTFVFfVwmIzM0OyBcdTAwM2UgXCYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7S0VZfS92YWx1ZVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIFNlbmQgYSBzaW5nbGUgbWVzc2FnZSBhbmQgY2FwdHVyZSBpdCBvbiB0aGUgZGVzdGluYXRpb24gaW50ZXJmYWNlXG4mIzQzO2Z1bmN0aW9uIHNlbmRfYW5kX2NhcHR1cmUoKSB7XG4mIzQzO1x0cm0gLWYgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDtcbiYjNDM7XG4mIzQzO1x0bGlzdGVuX3BvcnRfYW5kX3NhdmVfdG8gXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDI2XG4mIzQzO1x0d2FpdF9mb3JfcG9ydCBcJiMzNDske05BTUVTUEFDRX1cJiMzNDsgXCYjMzQ7JHtQT1JUfVwmIzM0OyBcJiMzNDske0lQX1ZFUlNJT059XCYjMzQ7XG4mIzQzO1x0ZWNobyBcJiMzNDske01TR306ICR7VEFSR0VUfVwmIzM0OyBcdTAwM2UgL2Rldi9rbXNnXG4mIzQzO1x0YnVzeXdhaXQgXCYjMzQ7JHtCVVNZV0FJVF9USU1FT1VUfVwmIzM0OyB0ZXN0IC1zIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7IHx8IHRydWVcbiYjNDM7XHRwa2lsbF9zb2NhdFxuJiM0MztcdHZhbGlkYXRlX21zZyBcJiMzNDske09VVFBVVF9GSUxFfVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztmdW5jdGlvbiBleHBlY3RfaW5fbXNnKCkge1xuJiM0MztcdGxvY2FsIFdBTlRFRD1cJiMzNDskezF9XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlmICEgZ3JlcCAtcSAtLSBcJiMzNDske1dBTlRFRH1cJiMzNDsgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDs7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7RkFJTDogJiMzOTske1dBTlRFRH0mIzM5OyBub3QgZm91bmQgaW4gJHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0Y2F0IFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7IFx1MDAzZVx1MDAyNjJcbiYjNDM7XHRcdGV4aXQgXCYjMzQ7JHtrc2Z0X2ZhaWx9XCYjMzQ7XG4mIzQzO1x0ZmlcbiYjNDM7fVxuJiM0MztcbiYjNDM7ZnVuY3Rpb24gZXhwZWN0X25vdF9pbl9tc2coKSB7XG4mIzQzO1x0bG9jYWwgVU5XQU5URUQ9XCYjMzQ7JHsxfVwmIzM0O1xuJiM0MztcbiYjNDM7XHRpZiBncmVwIC1xIC0tIFwmIzM0OyR7VU5XQU5URUR9XCYjMzQ7IFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7OyB0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6ICYjMzk7JHtVTldBTlRFRH0mIzM5OyBmb3VuZCBpbiAke09VVFBVVF9GSUxFfVwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRjYXQgXCYjMzQ7JHtPVVRQVVRfRklMRX1cJiMzNDsgXHUwMDNlXHUwMDI2MlxuJiM0MztcdFx0ZXhpdCBcJiMzNDske2tzZnRfZmFpbH1cJiMzNDtcbiYjNDM7XHRmaVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIEV2ZXJ5IHdyaXRlIHB1Ymxpc2hlcyBhIG5ldyBwYXlsb2FkIGFuZCBmcmVlcyB0aGUgcHJldmlvdXMgb25lLiBBbiBlbXB0eVxuJiM0MzsjIHZhbHVlIGlzIHNraXBwZWQgd2hlbiB0aGUgcGF5bG9hZCBpcyBmb3JtYXR0ZWQsIHNvIHRoaXMgYWxzbyBkcml2ZXMgdGhlXG4mIzQzOyMgdGFyZ2V0IHRocm91Z2ggaGF2aW5nIG5vIHBheWxvYWQgYXQgYWxsLlxuJiM0MztmdW5jdGlvbiBjaHVybl92YWx1ZSgpIHtcbiYjNDM7XHRsb2NhbCBpXG4mIzQzO1xuJiM0MztcdGZvciBpIGluICQoc2VxIFwmIzM0OyR7SVRFUkFUSU9OU31cJiMzNDspXG4mIzQzO1x0ZG9cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7dmFsdWUke2l9XCYjMzQ7IFx1MDAzZSBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXCYjMzQ7XG4mIzQzO1x0XHRlY2hvIFx1MDAzZSBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIENyZWF0ZSBhbmQgZGVsZXRlIGEga2V5IHVuZGVybmVhdGggdGhlIHNlbmRlclxuJiM0MztmdW5jdGlvbiBjaHVybl9rZXkoKSB7XG4mIzQzO1x0bG9jYWwgaVxuJiM0MztcbiYjNDM7XHRmb3IgaSBpbiAkKHNlcSBcJiMzNDske0lURVJBVElPTlN9XCYjMzQ7KVxuJiM0MztcdGRvXG4mIzQzO1x0XHRta2RpciBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVwmIzM0O1xuJiM0MztcdFx0ZWNobyBcJiMzNDt0cmFuc2llbnQke2l9XCYjMzQ7IFx1MDAzZSBcJiMzNDske1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfS92YWx1ZVwmIzM0O1xuJiM0MztcdFx0cm1kaXIgXCYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX1cJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgS2VlcCB0aGUgdHJhbnNtaXQgcGF0aCBidXN5IHdoaWxlIHRoZSBwYXlsb2FkIGlzIGJlaW5nIHJlcGxhY2VkXG4mIzQzO2Z1bmN0aW9uIHNlbmRfbWVzc2FnZXMoKSB7XG4mIzQzO1x0bG9jYWwgaVxuJiM0MztcbiYjNDM7XHRmb3IgaSBpbiAkKHNlcSBcJiMzNDske0lURVJBVElPTlN9XCYjMzQ7KVxuJiM0MztcdGRvXG4mIzQzO1x0XHRlY2hvIFwmIzM0OyR7TVNHfTogJHtUQVJHRVR9ICR7aX1cJiMzNDsgXHUwMDNlIC9kZXYva21zZ1xuJiM0MztcdGRvbmVcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBSdW4gdGhlIHdvcmtlcnMgY29uY3VycmVudGx5IGFuZCBmYWlsIGlmIGFueSBvZiB0aGVtIGhpdHMgYW4gZXJyb3JcbiYjNDM7ZnVuY3Rpb24gcnVuX3dvcmtlcnMoKSB7XG4mIzQzO1x0bG9jYWwgUElEUz0oKVxuJiM0MztcdGxvY2FsIFdPUktFUlxuJiM0MztcdGxvY2FsIFJFVD0wXG4mIzQzO1x0bG9jYWwgUElEXG4mIzQzO1xuJiM0MztcdGZvciBXT1JLRVIgaW4gXCYjMzQ7JEBcJiMzNDtcbiYjNDM7XHRkb1xuJiM0MztcdFx0XCYjMzQ7JHtXT1JLRVJ9XCYjMzQ7IFx1MDAyNlxuJiM0MztcdFx0UElEUyYjNDM7PShcJiMzNDskIVwmIzM0OylcbiYjNDM7XHRkb25lXG4mIzQzO1xuJiM0MztcdCMgUmVhcCBldmVyeSB3b3JrZXIgYmVmb3JlIHJlcG9ydGluZyBhIGZhaWx1cmUsIG90aGVyd2lzZSBhIHN1cnZpdmluZ1xuJiM0MztcdCMgd29ya2VyIGtlZXBzIHdyaXRpbmcgdG8gY29uZmlnZnMgd2hpbGUgdGhlIGV4aXQgdHJhcCBjbGVhbnMgaXQgdXAuXG4mIzQzO1x0Zm9yIFBJRCBpbiBcJiMzNDske1BJRFNbQF19XCYjMzQ7XG4mIzQzO1x0ZG9cbiYjNDM7XHRcdHdhaXQgXCYjMzQ7JHtQSUR9XCYjMzQ7IHx8IFJFVD0xXG4mIzQzO1x0ZG9uZVxuJiM0MztcbiYjNDM7XHRpZiBbWyBcJiMzNDske1JFVH1cJiMzNDsgLW5lIDAgXV1cbiYjNDM7XHR0aGVuXG4mIzQzO1x0XHRlY2hvIFwmIzM0O0ZBSUw6IHVzZXJkYXRhIHRvcnR1cmUgd29ya2VyIGZhaWxlZFwmIzM0OyBcdTAwM2VcdTAwMjYyXG4mIzQzO1x0XHRleGl0IFwmIzM0OyR7a3NmdF9mYWlsfVwmIzM0O1xuJiM0MztcdGZpXG4mIzQzO31cbiYjNDM7XG4mIzQzO2Z1bmN0aW9uIGNyZWF0ZV9idWxrX2tleXMoKSB7XG4mIzQzO1x0bG9jYWwgaVxuJiM0MztcbiYjNDM7XHRmb3IgaSBpbiAkKHNlcSBcJiMzNDske0JVTEtfS0VZU31cJiMzNDspXG4mIzQzO1x0ZG9cbiYjNDM7XHRcdHdyaXRlX2tleSBcJiMzNDtidWxrJHtpfVwmIzM0OyBcJiMzNDske0xPTkdfVkFMVUV9XCYjMzQ7XG4mIzQzO1x0ZG9uZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztmdW5jdGlvbiBkZWxldGVfYnVsa19rZXlzKCkge1xuJiM0MztcdGxvY2FsIGlcbiYjNDM7XG4mIzQzO1x0Zm9yIGkgaW4gJChzZXEgXCYjMzQ7JHtCVUxLX0tFWVN9XCYjMzQ7KVxuJiM0MztcdGRvXG4mIzQzO1x0XHRybWRpciBcJiMzNDske1VTRVJEQVRBX0RJUn0vYnVsayR7aX1cJiMzNDtcbiYjNDM7XHRkb25lXG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgPT09PT09PT09PSAjXG4mIzQzOyMgU3RhcnQgaGVyZSAjXG4mIzQzOyMgPT09PT09PT09PSAjXG4mIzQzO1xuJiM0Mzttb2Rwcm9iZSBuZXRkZXZzaW0gMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuJiM0Mzttb2Rwcm9iZSBuZXRjb25zb2xlIDJcdTAwM2UgL2Rldi9udWxsIHx8IHRydWVcbiYjNDM7XG4mIzQzO0lQX1ZFUlNJT049XCYjMzQ7aXB2NFwmIzM0O1xuJiM0MzsjIFRoZSBjb250ZW50IG9mIGttc2cgd2lsbCBiZSBzYXZlZCB0byB0aGUgZm9sbG93aW5nIGZpbGVcbiYjNDM7T1VUUFVUX0ZJTEU9XCYjMzQ7L3RtcC8ke1RBUkdFVH1cJiMzNDtcbiYjNDM7XG4mIzQzOyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxuJiM0MztjaGVja19mb3JfZGVwZW5kZW5jaWVzXG4mIzQzOyMgU2V0IGN1cnJlbnQgbG9nbGV2ZWwgdG8gS0VSTl9JTkZPKDYpLCBhbmQgZGVmYXVsdCB0byBLRVJOX05PVElDRSg1KVxuJiM0MztlY2hvIFwmIzM0OzYgNVwmIzM0OyBcdTAwM2UgL3Byb2Mvc3lzL2tlcm5lbC9wcmludGtcbiYjNDM7IyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdFxuJiM0Mzt0cmFwIGNsZWFudXAgRVhJVFxuJiM0MzsjIENyZWF0ZSBvbmUgbmFtZXNwYWNlIGFuZCB0d28gaW50ZXJmYWNlc1xuJiM0MztzZXRfbmV0d29yayBcJiMzNDske0lQX1ZFUlNJT059XCYjMzQ7XG4mIzQzOyMgQ3JlYXRlIGEgZHluYW1pYyB0YXJnZXQgZm9yIG5ldGNvbnNvbGVcbiYjNDM7Y3JlYXRlX2R5bmFtaWNfdGFyZ2V0XG4mIzQzO1xuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsjIFRFU1QgIzFcbiYjNDM7IyBBIHZhbHVlIHdyaXR0ZW4gdG8gY29uZmlnZnMgcmVhY2hlcyB0aGUgZGVzdGluYXRpb25cbiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7d3JpdGVfa2V5IFwmIzM0OyR7VVNFUkRBVEFfS0VZfVwmIzM0OyBcJiMzNDtmaXJzdFwmIzM0O1xuJiM0MztzZW5kX2FuZF9jYXB0dXJlXG4mIzQzO2V4cGVjdF9pbl9tc2cgXCYjMzQ7JHtVU0VSREFUQV9LRVl9PWZpcnN0XCYjMzQ7XG4mIzQzO1xuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsjIFRFU1QgIzJcbiYjNDM7IyBVcGRhdGluZyB0aGUgdmFsdWUgcmVwbGFjZXMgdGhlIHByZXZpb3VzIHBheWxvYWRcbiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7d3JpdGVfa2V5IFwmIzM0OyR7VVNFUkRBVEFfS0VZfVwmIzM0OyBcJiMzNDtzZWNvbmRcJiMzNDtcbiYjNDM7c2VuZF9hbmRfY2FwdHVyZVxuJiM0MztleHBlY3RfaW5fbXNnIFwmIzM0OyR7VVNFUkRBVEFfS0VZfT1zZWNvbmRcJiMzNDtcbiYjNDM7ZXhwZWN0X25vdF9pbl9tc2cgXCYjMzQ7JHtVU0VSREFUQV9LRVl9PWZpcnN0XCYjMzQ7XG4mIzQzO1xuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsjIFRFU1QgIzNcbiYjNDM7IyBDbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5XG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO2VjaG8gXHUwMDNlIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX0vdmFsdWVcJiMzNDtcbiYjNDM7c2VuZF9hbmRfY2FwdHVyZVxuJiM0MztleHBlY3Rfbm90X2luX21zZyBcJiMzNDske1VTRVJEQVRBX0tFWX09XCYjMzQ7XG4mIzQzO1xuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsjIFRFU1QgIzRcbiYjNDM7IyBSZW1vdmluZyB0aGUga2V5IGRyb3BzIHRoZSBlbnRyeVxuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0Mzt3cml0ZV9rZXkgXCYjMzQ7JHtVU0VSREFUQV9LRVl9XCYjMzQ7IFwmIzM0O3RoaXJkXCYjMzQ7XG4mIzQzO3JtZGlyIFwmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX1cJiMzNDtcbiYjNDM7c2VuZF9hbmRfY2FwdHVyZVxuJiM0MztleHBlY3Rfbm90X2luX21zZyBcJiMzNDske1VTRVJEQVRBX0tFWX09XCYjMzQ7XG4mIzQzO3JtIFwmIzM0OyR7T1VUUFVUX0ZJTEV9XCYjMzQ7XG4mIzQzO1xuJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsjIFRFU1QgIzVcbiYjNDM7IyBUb3J0dXJlIHRoZSBwYXlsb2FkIHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LFxuJiM0MzsjIGZpcnN0IHVuZnJhZ21lbnRlZCBhbmQgdGhlbiBmcmFnbWVudGVkXG4mIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO3dyaXRlX2tleSBcJiMzNDske0NIVVJOX0tFWX1cJiMzNDsgXCYjMzQ7JHtVU0VSREFUQV9WQUxVRX1cJiMzNDtcbiYjNDM7cnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXNcbiYjNDM7XG4mIzQzO2NyZWF0ZV9idWxrX2tleXNcbiYjNDM7cnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXNcbiYjNDM7ZGVsZXRlX2J1bGtfa2V5c1xuJiM0MztcbiYjNDM7ZXhpdCBcJiMzNDske2tzZnRfcGFzc31cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1cGRhdGVfdXNlcmRhdGEmIzM0OywKICAgICYjMzQ7c2VuZF9leHRfbXNnX3VkcCYjMzQ7LAogICAgJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX2Ryb3AmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV93cml0ZV9leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIGB1c2VyZGF0YWAgcGF5bG9hZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEl0IG1vZGlmaWVzIGhvdyB1c2VyZGF0YSBpcyB1cGRhdGVkIHZpYSBjb25maWdmcyBhbmQgaG93IGl0IGlzIHJlYWQgZHVyaW5nIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMpIHRoYXQgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24gaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBjcmFzaGVzIHVuZGVyIGNvbmN1cnJlbnQgY29uZmlnZnMgdXBkYXRlcyBhbmQgY29uc29sZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZmYxMTBjZmExZTRhYTY0OWRhYWYyNWIwY2JhNGM5ZDQxODNiNGU3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAxMjoxOTozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwppbmRleCA4NjIwMDFkMDlhYTg0Li4xNDA5MmZiMTVmNmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCkBAIC0xMzUsMTMgJiM0MzsxMzUsMjcgQEAgZW51bSB0YXJnZXRfc3RhdGUgewogCVNUQVRFX0RFQUNUSVZBVEVELAogfTsKIAomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuCiYjNDM7ICogQHJjdToJVXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgomIzQzOyAqIEBsZW5ndGg6CUxlbmd0aCBvZiBAZGF0YSwgZXhjbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvci4KJiM0MzsgKiBAZGF0YToJRm9ybWF0dGVkICYjMzQ7IGtleT12YWx1ZVxuJiMzNDsgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuCiYjNDM7ICoKJiM0MzsgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZAomIzQzOyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuCiYjNDM7ICovCiYjNDM7c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgewomIzQzOwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKJiM0MzsJc2l6ZV90CQkJbGVuZ3RoOwomIzQzOwljaGFyCQkJZGF0YVtdOwomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAtIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIG5ldGNvbnNvbGUgdGFyZ2V0LgogICogQGxpc3Q6CUxpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LgogICogQGdyb3VwOglMaW5rcyB1cyBpbnRvIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0gaGllcmFyY2h5LgogICogQHVzZXJkYXRhX2dyb3VwOglMaW5rcyB0byB0aGUgdXNlcmRhdGEgY29uZmlnZnMgaGllcmFyY2h5Ci0gKiBAdXNlcmRhdGE6CQlDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kCi0gKiBAdXNlcmRhdGFfbGVuZ3RoOglTdHJpbmcgbGVuZ3RoIG9mIHVzZXJkYXRhLgomIzQzOyAqIEB1c2VyZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQuIFJDVSBwcm90ZWN0ZWQuCiAgKiBAc3lzZGF0YToJCUNhY2hlZCwgZm9ybWF0dGVkIHN0cmluZyBvZiBhcHBlbmQKICAqIEBzeXNkYXRhX2ZpZWxkczoJU3lzZGF0YSBmZWF0dXJlcyBlbmFibGVkLgogICogQG1zZ2NvdW50ZXI6CU1lc3NhZ2Ugc2VudCBjb3VudGVyLgpAQCAtMTc2LDggJiM0MzsxOTAsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgewogI2lmZGVmCUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwCWdyb3VwOwogCXN0cnVjdCBjb25maWdfZ3JvdXAJdXNlcmRhdGFfZ3JvdXA7Ci0JY2hhcgkJCSp1c2VyZGF0YTsKLQlzaXplX3QJCQl1c2VyZGF0YV9sZW5ndGg7CiYjNDM7CXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIF9fcmN1ICp1c2VyZGF0YTsKIAljaGFyCQkJc3lzZGF0YVtNQVhfRVhUUkFEQVRBX0VOVFJZX0xFTiAqIE1BWF9TWVNEQVRBX0lURU1TXTsKIAogCS8qIGJpdC13aXNlIHdpdGggc3lzZGF0YV9mZWF0dXJlIGJpdHMgKi8KQEAgLTEwNTksMTIgJiM0MzsxMDcyLDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAogc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKJiM0MzsJc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm5ldyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpvbGQ7CiAJc3RydWN0IHVzZXJkYXR1bSAqdWRtX2l0ZW07CiAJc3RydWN0IGNvbmZpZ19pdGVtICppdGVtOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwotCWNoYXIgKm9sZF9idWYgPSBOVUxMOwotCWNoYXIgKm5ld19idWYgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9mZnNldCA9IDA7CiAJaW50IGxlbjsKIApAQCAtMTA3Niw4ICYjNDM7MTA4OCw4IEBAIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAKIAkvKiBBbGxvY2F0ZSBuZXcgYnVmZmVyICovCiAJaWYgKGxlbikgewotCQluZXdfYnVmID0ga21hbGxvYyhsZW4gJiM0MzsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmV3X2J1ZikKJiM0MzsJCW5ldyA9IGttYWxsb2NfZmxleCgqbmV3LCBkYXRhLCBsZW4gJiM0MzsgMSk7CiYjNDM7CQlpZiAoIW5ldykKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTA4NywyMiAmIzQzOzEwOTksMjEgQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAkJdWRtX2l0ZW0gPSB0b191c2VyZGF0dW0oaXRlbSk7CiAJCS8qIFNraXAgdXNlcmRhdGEgd2l0aCBubyB2YWx1ZSBzZXQgKi8KIAkJaWYgKHVkbV9pdGVtLSZndDt2YWx1ZVswXSkgewotCQkJb2Zmc2V0ICYjNDM7PSBzY25wcmludGYoJmFtcDtuZXdfYnVmW29mZnNldF0sIGxlbiAmIzQzOyAxIC0gb2Zmc2V0LAomIzQzOwkJCW9mZnNldCAmIzQzOz0gc2NucHJpbnRmKCZhbXA7bmV3LSZndDtkYXRhW29mZnNldF0sCiYjNDM7CQkJCQkgICAgbGVuICYjNDM7IDEgLSBvZmZzZXQsCiAJCQkJCSAgICAmIzM0OyAlcz0lc1xuJiMzNDssIGl0ZW0tJmd0O2NpX25hbWUsCiAJCQkJCSAgICB1ZG1faXRlbS0mZ3Q7dmFsdWUpOwogCQl9CiAJfQogCiAJV0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pOwomIzQzOwlpZiAobmV3KQomIzQzOwkJbmV3LSZndDtsZW5ndGggPSBvZmZzZXQ7CiAKLQkvKiBTd2l0Y2ggdG8gbmV3IGJ1ZmZlciBhbmQgZnJlZSBvbGQgYnVmZmVyICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7Ci0Jb2xkX2J1ZiA9IG50LSZndDt1c2VyZGF0YTsKLQludC0mZ3Q7dXNlcmRhdGEgPSBuZXdfYnVmOwotCW50LSZndDt1c2VyZGF0YV9sZW5ndGggPSBvZmZzZXQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3RhcmdldF9saXN0X2xvY2ssIGZsYWdzKTsKLQotCWtmcmVlKG9sZF9idWYpOwomIzQzOwkvKiBXcml0ZXJzIGFyZSBzZXJpYWxpemVkIGJ5IGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleC4gKi8KJiM0MzsJb2xkID0gcmN1X3JlcGxhY2VfcG9pbnRlcihudC0mZ3Q7dXNlcmRhdGEsIG5ldywKJiM0MzsJCQkJICBsb2NrZGVwX2lzX2hlbGQoJmFtcDtkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpKTsKJiM0MzsJa2ZyZWVfcmN1KG9sZCwgcmN1KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM5Miw3ICYjNDM7MTQwMyw3IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlrZnJlZShudC0mZ3Q7dXNlcmRhdGEpOwomIzQzOwlrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtJmd0O3VzZXJkYXRhKSk7CiAJa2ZyZWUobnQpOwogfQogCkBAIC0xOTI2LDE0ICYjNDM7MTkzNywxMyBAQCBzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pCiBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJCQkJICAgICAgY29uc3QgY2hhciAqbXNnLAogCQkJCSAgICAgIGludCBtc2dfbGVuLAotCQkJCSAgICAgIGludCByZWxlYXNlX2xlbikKJiM0MzsJCQkJICAgICAgaW50IHJlbGVhc2VfbGVuLAomIzQzOwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpCiB7Ci0JY29uc3QgY2hhciAqdXNlcmRhdGEgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnJlbGVhc2U7CiAKICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDCi0JdXNlcmRhdGEgPSBudC0mZ3Q7dXNlcmRhdGE7CiAJc3lzZGF0YSA9IG50LSZndDtzeXNkYXRhOwogI2VuZGlmCiAKQEAgLTE5NTAsNyAmIzQzOzE5NjAsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJaWYgKHVzZXJkYXRhKQogCQltc2dfbGVuICYjNDM7PSBzY25wcmludGYoJmFtcDtudC0mZ3Q7YnVmW21zZ19sZW5dLAogCQkJCSAgICAgc2l6ZW9mKG50LSZndDtidWYpIC0gbXNnX2xlbiwgJiMzNDslcyYjMzQ7LAotCQkJCSAgICAgdXNlcmRhdGEpOwomIzQzOwkJCQkgICAgIHVzZXJkYXRhLSZndDtkYXRhKTsKIAogCWlmIChzeXNkYXRhKQogCQltc2dfbGVuICYjNDM7PSBzY25wcmludGYoJmFtcDtudC0mZ3Q7YnVmW21zZ19sZW5dLApAQCAtMTk3MCw3ICYjNDM7MTk4MCw4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZF9yZWxlYXNlKGNoYXIgKmJ1ZikKIAogc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQkgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLAotCQkJCSBpbnQgbXNnYm9keV9sZW4sIGludCBzeXNkYXRhX2xlbikKJiM0MzsJCQkJIGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuLAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKQogewogCWNvbnN0IGNoYXIgKnVzZXJkYXRhX3B0ciA9IE5VTEw7CiAJY29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMOwpAQCAtMTk4MSwxMiAmIzQzOzE5OTIsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAlpbnQgdXNlcmRhdGFfbGVuID0gMDsKIAogI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKLQl1c2VyZGF0YV9wdHIgPSBudC0mZ3Q7dXNlcmRhdGE7CiAJc3lzZGF0YV9wdHIgPSBudC0mZ3Q7c3lzZGF0YTsKLQl1c2VyZGF0YV9sZW4gPSBudC0mZ3Q7dXNlcmRhdGFfbGVuZ3RoOwogI2VuZGlmCi0JaWYgKFdBUk5fT05fT05DRSghdXNlcmRhdGFfcHRyICZhbXA7JmFtcDsgdXNlcmRhdGFfbGVuICE9IDApKQotCQlyZXR1cm47CiYjNDM7CWlmICh1c2VyZGF0YSkgewomIzQzOwkJdXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtJmd0O2RhdGE7CiYjNDM7CQl1c2VyZGF0YV9sZW4gPSB1c2VyZGF0YS0mZ3Q7bGVuZ3RoOwomIzQzOwl9CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFzeXNkYXRhX3B0ciAmYW1wOyZhbXA7IHN5c2RhdGFfbGVuICE9IDApKQogCQlyZXR1cm47CkBAIC0yMDYzLDcgJiM0MzsyMDc0LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCQkJCWNvbnN0IGNoYXIgKm1zZywKIAkJCQlpbnQgbXNnX2xlbiwKIAkJCQlpbnQgcmVsZWFzZV9sZW4sCi0JCQkJaW50IHN5c2RhdGFfbGVuKQomIzQzOwkJCQlpbnQgc3lzZGF0YV9sZW4sCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSkKIHsKIAlpbnQgaGVhZGVyX2xlbiwgbXNnYm9keV9sZW47CiAJY29uc3QgY2hhciAqbXNnYm9keTsKQEAgLTIwOTIsNyAmIzQzOzIxMDQsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJICogd2lsbCBiZSByZXBsYWNlZAogCSAqLwogCXNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbiwKLQkJCSAgICAgc3lzZGF0YV9sZW4pOwomIzQzOwkJCSAgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTsKIH0KIAogLyoqCkBAIC0yMTA3LDI1ICYjNDM7MjExOSwzMyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiBzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJCQkgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCkKIHsKJiM0MzsJY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhID0gTlVMTDsKIAlpbnQgdXNlcmRhdGFfbGVuID0gMDsKIAlpbnQgcmVsZWFzZV9sZW4gPSAwOwogCWludCBzeXNkYXRhX2xlbiA9IDA7CiAJaW50IGxlbjsKIAomIzQzOwkvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi8KJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwogI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMKIAlzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpOwotCXVzZXJkYXRhX2xlbiA9IG50LSZndDt1c2VyZGF0YV9sZW5ndGg7CiYjNDM7CXVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LSZndDt1c2VyZGF0YSk7CiYjNDM7CWlmICh1c2VyZGF0YSkKJiM0MzsJCXVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLSZndDtsZW5ndGg7CiAjZW5kaWYKIAlpZiAobnQtJmd0O3JlbGVhc2UpCiAJCXJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLSZndDtyZWxlYXNlKSAmIzQzOyAxOwogCiAJbGVuID0gd2N0eHQtJmd0O2xlbiAmIzQzOyByZWxlYXNlX2xlbiAmIzQzOyBzeXNkYXRhX2xlbiAmIzQzOyB1c2VyZGF0YV9sZW47CiAJaWYgKGxlbiAmbHQ7PSBNQVhfUFJJTlRfQ0hVTkspCi0JCXJldHVybiBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKG50LCB3Y3R4dC0mZ3Q7b3V0YnVmLAotCQkJCQkJIHdjdHh0LSZndDtsZW4sIHJlbGVhc2VfbGVuKTsKJiM0MzsJCXNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24obnQsIHdjdHh0LSZndDtvdXRidWYsIHdjdHh0LSZndDtsZW4sCiYjNDM7CQkJCQkgIHJlbGVhc2VfbGVuLCB1c2VyZGF0YSk7CiYjNDM7CWVsc2UKJiM0MzsJCXNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LSZndDtvdXRidWYsIHdjdHh0LSZndDtsZW4sIHJlbGVhc2VfbGVuLAomIzQzOwkJCQkgICAgc3lzZGF0YV9sZW4sIHVzZXJkYXRhKTsKIAotCXJldHVybiBzZW5kX21zZ19mcmFnbWVudGVkKG50LCB3Y3R4dC0mZ3Q7b3V0YnVmLCB3Y3R4dC0mZ3Q7bGVuLCByZWxlYXNlX2xlbiwKLQkJCQkgICBzeXNkYXRhX2xlbik7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLApAQCAtMjM1Nyw3ICYjNDM7MjM3Nyw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO250LSZndDtyZXN1bWVfd3EpOwogCW5ldHBvbGxfY2xlYW51cCgmYW1wO250LSZndDtucCk7CiAjaWZkZWYJQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQwotCWtmcmVlKG50LSZndDt1c2VyZGF0YSk7CiYjNDM7CWtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC0mZ3Q7dXNlcmRhdGEpKTsKICNlbmRpZgogCWtmcmVlKG50KTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlCmluZGV4IGI1NmM3MGI3ZTI3NDIuLmYwNjc0YzAwMTdmYzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZQpAQCAtMTMsNiAmIzQzOzEzLDcgQEAgVEVTVF9QUk9HUyA6PSBcCiAJbmV0Y29uc19yZXN1bWUuc2ggXAogCW5ldGNvbnNfc3lzZGF0YS5zaCBcCiAJbmV0Y29uc190b3J0dXJlLnNoIFwKJiM0MzsJbmV0Y29uc191c2VyZGF0YS5zaCBcCiAjIGVuZCBvZiBURVNUX1BST0dTCiAKIGluY2x1ZGUgLi4vLi4vLi4vbGliLm1rCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTEzOTAzZjRjZTFjNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaApAQCAtMCwwICYjNDM7MSwyMjkgQEAKJiM0MzsjIS91c3IvYmluL2VudiBiYXNoCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyMgRXhlcmNpc2UgdGhlIG5ldGNvbnNvbGUgdXNlcmRhdGEgcGF5bG9hZC4KJiM0MzsjCiYjNDM7IyBUaGUgZmlyc3QgcGFydCBjaGVja3MgdGhhdCB0aGUgcGF5bG9hZCB0aGUgdGFyZ2V0IHRyYW5zbWl0cyBmb2xsb3dzIHdoYXQKJiM0MzsjIGNvbmZpZ2ZzIHNheXM6IGEgdmFsdWUgc2hvd3MgdXAgaW4gdGhlIG5leHQgbWVzc2FnZSwgYW4gdXBkYXRlIHJlcGxhY2VzIHRoZQomIzQzOyMgcHJldmlvdXMgb25lLCBjbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5LCBhbmQgc28gZG9lcyByZW1vdmluZyB0aGUKJiM0MzsjIGtleS4KJiM0MzsjCiYjNDM7IyBUaGUgc2Vjb25kIHBhcnQgcmV3cml0ZXMgdmFsdWVzLCBjcmVhdGVzIGFuZCBkZWxldGVzIGtleXMsIGFuZCBjbGVhcnMgdGhlCiYjNDM7IyBwYXlsb2FkIGVudGlyZWx5IHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LCBzbyB0aGUgdHJhbnNtaXQgcGF0aCBrZWVwcwomIzQzOyMgcGlja2luZyB1cCBwYXlsb2FkcyB0aGF0IGFyZSBiZWluZyByZXBsYWNlZCB1bmRlcm5lYXRoIGl0LiBJdCBydW5zIHR3aWNlLAomIzQzOyMgb25jZSB3aXRoIGEgcGF5bG9hZCBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGEgc2luZ2xlIHBhY2tldCBhbmQgb25jZSBsYXJnZQomIzQzOyMgZW5vdWdoIHRvIGJlIGZyYWdtZW50ZWQuCiYjNDM7IwomIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOwomIzQzO3NldCAtZXVvIHBpcGVmYWlsCiYjNDM7CiYjNDM7U0NSSVBURElSPSQoZGlybmFtZSAmIzM0OyQocmVhZGxpbmsgLWUgJiMzNDske0JBU0hfU09VUkNFWzBdfSYjMzQ7KSYjMzQ7KQomIzQzOwomIzQzO3NvdXJjZSAmIzM0OyR7U0NSSVBURElSfSYjMzQ7Ly4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaAomIzQzOwomIzQzOyMgTnVtYmVyIG9mIHRpbWVzIGVhY2ggdG9ydHVyZSB3b3JrZXIgbG9vcHMKJiM0MztJVEVSQVRJT05TPSR7MTotMjAwfQomIzQzOwomIzQzOyMgS2V5cyBvd25lZCBieSBlYWNoIHRvcnR1cmUgd29ya2VyLiBXb3JrZXJzIGRvIG5vdCBzaGFyZSBrZXlzLCBzbyBhIGZhaWxpbmcKJiM0MzsjIGNvbmZpZ2ZzIG9wZXJhdGlvbiBtZWFucyBhIHJlYWwgcHJvYmxlbSBhbmQgbm90IGEgbG9zdCByYWNlLgomIzQzO0NIVVJOX0tFWT0mIzM0O2NodXJua2V5JiMzNDsKJiM0MztUUkFOU0lFTlRfS0VZPSYjMzQ7dHJhbnNpZW50a2V5JiMzNDsKJiM0MzsjIE51bWJlciBvZiBrZXlzIHVzZWQgdG8gcHVzaCBhIG1lc3NhZ2UgcGFzdCBNQVhfUFJJTlRfQ0hVTksKJiM0MztCVUxLX0tFWVM9OAomIzQzOwomIzQzO1VTRVJEQVRBX0RJUj0mIzM0OyR7TkVUQ09OU19QQVRIfS91c2VyZGF0YSYjMzQ7CiYjNDM7IyBWYWx1ZXMgYXJlIGNhcHBlZCBhdCBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTigyMDApIGJ5dGVzLCBzbyAke0JVTEtfS0VZU30KJiM0MzsjIGVudHJpZXMgb2YgdGhpcyBzaXplIGFyZSBlbm91Z2ggdG8gZm9yY2UgZnJhZ21lbnRhdGlvbgomIzQzO0xPTkdfVkFMVUU9JChwcmludGYgLS0gJiMzOTt2JS4wcyYjMzk7IHsxLi4xOTB9KQomIzQzOwomIzQzO2Z1bmN0aW9uIHdyaXRlX2tleSgpIHsKJiM0MzsJbG9jYWwgS0VZPSYjMzQ7JHsxfSYjMzQ7CiYjNDM7CWxvY2FsIFZBTFVFPSYjMzQ7JHsyfSYjMzQ7CiYjNDM7CiYjNDM7CW1rZGlyIC1wICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7S0VZfSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDske1ZBTFVFfSYjMzQ7ICZndDsgJiMzNDske1VTRVJEQVRBX0RJUn0vJHtLRVl9L3ZhbHVlJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7IyBTZW5kIGEgc2luZ2xlIG1lc3NhZ2UgYW5kIGNhcHR1cmUgaXQgb24gdGhlIGRlc3RpbmF0aW9uIGludGVyZmFjZQomIzQzO2Z1bmN0aW9uIHNlbmRfYW5kX2NhcHR1cmUoKSB7CiYjNDM7CXJtIC1mICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzOwlsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byAmIzM0OyR7T1VUUFVUX0ZJTEV9JiMzNDsgJmFtcDsKJiM0MzsJd2FpdF9mb3JfcG9ydCAmIzM0OyR7TkFNRVNQQUNFfSYjMzQ7ICYjMzQ7JHtQT1JUfSYjMzQ7ICYjMzQ7JHtJUF9WRVJTSU9OfSYjMzQ7CiYjNDM7CWVjaG8gJiMzNDske01TR306ICR7VEFSR0VUfSYjMzQ7ICZndDsgL2Rldi9rbXNnCiYjNDM7CWJ1c3l3YWl0ICYjMzQ7JHtCVVNZV0FJVF9USU1FT1VUfSYjMzQ7IHRlc3QgLXMgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7IHx8IHRydWUKJiM0MzsJcGtpbGxfc29jYXQKJiM0MzsJdmFsaWRhdGVfbXNnICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBleHBlY3RfaW5fbXNnKCkgewomIzQzOwlsb2NhbCBXQU5URUQ9JiMzNDskezF9JiMzNDsKJiM0MzsKJiM0MzsJaWYgISBncmVwIC1xIC0tICYjMzQ7JHtXQU5URUR9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJiMzOTske1dBTlRFRH0mIzM5OyBub3QgZm91bmQgaW4gJHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQljYXQgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7ICZndDsmYW1wOzIKJiM0MzsJCWV4aXQgJiMzNDske2tzZnRfZmFpbH0mIzM0OwomIzQzOwlmaQomIzQzO30KJiM0MzsKJiM0MztmdW5jdGlvbiBleHBlY3Rfbm90X2luX21zZygpIHsKJiM0MzsJbG9jYWwgVU5XQU5URUQ9JiMzNDskezF9JiMzNDsKJiM0MzsKJiM0MzsJaWYgZ3JlcCAtcSAtLSAmIzM0OyR7VU5XQU5URUR9JiMzNDsgJiMzNDske09VVFBVVF9GSUxFfSYjMzQ7OyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7RkFJTDogJiMzOTske1VOV0FOVEVEfSYjMzk7IGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9JiMzNDsgJmd0OyZhbXA7MgomIzQzOwkJY2F0ICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBFdmVyeSB3cml0ZSBwdWJsaXNoZXMgYSBuZXcgcGF5bG9hZCBhbmQgZnJlZXMgdGhlIHByZXZpb3VzIG9uZS4gQW4gZW1wdHkKJiM0MzsjIHZhbHVlIGlzIHNraXBwZWQgd2hlbiB0aGUgcGF5bG9hZCBpcyBmb3JtYXR0ZWQsIHNvIHRoaXMgYWxzbyBkcml2ZXMgdGhlCiYjNDM7IyB0YXJnZXQgdGhyb3VnaCBoYXZpbmcgbm8gcGF5bG9hZCBhdCBhbGwuCiYjNDM7ZnVuY3Rpb24gY2h1cm5fdmFsdWUoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0lURVJBVElPTlN9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQllY2hvICYjMzQ7dmFsdWUke2l9JiMzNDsgJmd0OyAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke0NIVVJOX0tFWX0vdmFsdWUmIzM0OwomIzQzOwkJZWNobyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZSYjMzQ7CiYjNDM7CWRvbmUKJiM0Mzt9CiYjNDM7CiYjNDM7IyBDcmVhdGUgYW5kIGRlbGV0ZSBhIGtleSB1bmRlcm5lYXRoIHRoZSBzZW5kZXIKJiM0MztmdW5jdGlvbiBjaHVybl9rZXkoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0lURVJBVElPTlN9JiMzNDspCiYjNDM7CWRvCiYjNDM7CQlta2RpciAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9JiMzNDsKJiM0MzsJCWVjaG8gJiMzNDt0cmFuc2llbnQke2l9JiMzNDsgJmd0OyAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9L3ZhbHVlJiMzNDsKJiM0MzsJCXJtZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzOyMgS2VlcCB0aGUgdHJhbnNtaXQgcGF0aCBidXN5IHdoaWxlIHRoZSBwYXlsb2FkIGlzIGJlaW5nIHJlcGxhY2VkCiYjNDM7ZnVuY3Rpb24gc2VuZF9tZXNzYWdlcygpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7SVRFUkFUSU9OU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCWVjaG8gJiMzNDske01TR306ICR7VEFSR0VUfSAke2l9JiMzNDsgJmd0OyAvZGV2L2ttc2cKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MzsjIFJ1biB0aGUgd29ya2VycyBjb25jdXJyZW50bHkgYW5kIGZhaWwgaWYgYW55IG9mIHRoZW0gaGl0cyBhbiBlcnJvcgomIzQzO2Z1bmN0aW9uIHJ1bl93b3JrZXJzKCkgewomIzQzOwlsb2NhbCBQSURTPSgpCiYjNDM7CWxvY2FsIFdPUktFUgomIzQzOwlsb2NhbCBSRVQ9MAomIzQzOwlsb2NhbCBQSUQKJiM0MzsKJiM0MzsJZm9yIFdPUktFUiBpbiAmIzM0OyRAJiMzNDsKJiM0MzsJZG8KJiM0MzsJCSYjMzQ7JHtXT1JLRVJ9JiMzNDsgJmFtcDsKJiM0MzsJCVBJRFMmIzQzOz0oJiMzNDskISYjMzQ7KQomIzQzOwlkb25lCiYjNDM7CiYjNDM7CSMgUmVhcCBldmVyeSB3b3JrZXIgYmVmb3JlIHJlcG9ydGluZyBhIGZhaWx1cmUsIG90aGVyd2lzZSBhIHN1cnZpdmluZwomIzQzOwkjIHdvcmtlciBrZWVwcyB3cml0aW5nIHRvIGNvbmZpZ2ZzIHdoaWxlIHRoZSBleGl0IHRyYXAgY2xlYW5zIGl0IHVwLgomIzQzOwlmb3IgUElEIGluICYjMzQ7JHtQSURTW0BdfSYjMzQ7CiYjNDM7CWRvCiYjNDM7CQl3YWl0ICYjMzQ7JHtQSUR9JiMzNDsgfHwgUkVUPTEKJiM0MzsJZG9uZQomIzQzOwomIzQzOwlpZiBbWyAmIzM0OyR7UkVUfSYjMzQ7IC1uZSAwIF1dCiYjNDM7CXRoZW4KJiM0MzsJCWVjaG8gJiMzNDtGQUlMOiB1c2VyZGF0YSB0b3J0dXJlIHdvcmtlciBmYWlsZWQmIzM0OyAmZ3Q7JmFtcDsyCiYjNDM7CQlleGl0ICYjMzQ7JHtrc2Z0X2ZhaWx9JiMzNDsKJiM0MzsJZmkKJiM0Mzt9CiYjNDM7CiYjNDM7ZnVuY3Rpb24gY3JlYXRlX2J1bGtfa2V5cygpIHsKJiM0MzsJbG9jYWwgaQomIzQzOwomIzQzOwlmb3IgaSBpbiAkKHNlcSAmIzM0OyR7QlVMS19LRVlTfSYjMzQ7KQomIzQzOwlkbwomIzQzOwkJd3JpdGVfa2V5ICYjMzQ7YnVsayR7aX0mIzM0OyAmIzM0OyR7TE9OR19WQUxVRX0mIzM0OwomIzQzOwlkb25lCiYjNDM7fQomIzQzOwomIzQzO2Z1bmN0aW9uIGRlbGV0ZV9idWxrX2tleXMoKSB7CiYjNDM7CWxvY2FsIGkKJiM0MzsKJiM0MzsJZm9yIGkgaW4gJChzZXEgJiMzNDske0JVTEtfS0VZU30mIzM0OykKJiM0MzsJZG8KJiM0MzsJCXJtZGlyICYjMzQ7JHtVU0VSREFUQV9ESVJ9L2J1bGske2l9JiMzNDsKJiM0MzsJZG9uZQomIzQzO30KJiM0MzsKJiM0MzsjID09PT09PT09PT0gIwomIzQzOyMgU3RhcnQgaGVyZSAjCiYjNDM7IyA9PT09PT09PT09ICMKJiM0MzsKJiM0Mzttb2Rwcm9iZSBuZXRkZXZzaW0gMiZndDsgL2Rldi9udWxsIHx8IHRydWUKJiM0Mzttb2Rwcm9iZSBuZXRjb25zb2xlIDImZ3Q7IC9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7CiYjNDM7SVBfVkVSU0lPTj0mIzM0O2lwdjQmIzM0OwomIzQzOyMgVGhlIGNvbnRlbnQgb2Yga21zZyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBmb2xsb3dpbmcgZmlsZQomIzQzO09VVFBVVF9GSUxFPSYjMzQ7L3RtcC8ke1RBUkdFVH0mIzM0OwomIzQzOwomIzQzOyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZAomIzQzO2NoZWNrX2Zvcl9kZXBlbmRlbmNpZXMKJiM0MzsjIFNldCBjdXJyZW50IGxvZ2xldmVsIHRvIEtFUk5fSU5GTyg2KSwgYW5kIGRlZmF1bHQgdG8gS0VSTl9OT1RJQ0UoNSkKJiM0MztlY2hvICYjMzQ7NiA1JiMzNDsgJmd0OyAvcHJvYy9zeXMva2VybmVsL3ByaW50awomIzQzOyMgUmVtb3ZlIHRoZSBuYW1lc3BhY2UsIGludGVyZmFjZXMgYW5kIG5ldGNvbnNvbGUgdGFyZ2V0IG9uIGV4aXQKJiM0Mzt0cmFwIGNsZWFudXAgRVhJVAomIzQzOyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzCiYjNDM7c2V0X25ldHdvcmsgJiMzNDske0lQX1ZFUlNJT059JiMzNDsKJiM0MzsjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlCiYjNDM7Y3JlYXRlX2R5bmFtaWNfdGFyZ2V0CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzEKJiM0MzsjIEEgdmFsdWUgd3JpdHRlbiB0byBjb25maWdmcyByZWFjaGVzIHRoZSBkZXN0aW5hdGlvbgomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7d3JpdGVfa2V5ICYjMzQ7JHtVU0VSREFUQV9LRVl9JiMzNDsgJiMzNDtmaXJzdCYjMzQ7CiYjNDM7c2VuZF9hbmRfY2FwdHVyZQomIzQzO2V4cGVjdF9pbl9tc2cgJiMzNDske1VTRVJEQVRBX0tFWX09Zmlyc3QmIzM0OwomIzQzOwomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7IyBURVNUICMyCiYjNDM7IyBVcGRhdGluZyB0aGUgdmFsdWUgcmVwbGFjZXMgdGhlIHByZXZpb3VzIHBheWxvYWQKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO3dyaXRlX2tleSAmIzM0OyR7VVNFUkRBVEFfS0VZfSYjMzQ7ICYjMzQ7c2Vjb25kJiMzNDsKJiM0MztzZW5kX2FuZF9jYXB0dXJlCiYjNDM7ZXhwZWN0X2luX21zZyAmIzM0OyR7VVNFUkRBVEFfS0VZfT1zZWNvbmQmIzM0OwomIzQzO2V4cGVjdF9ub3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PWZpcnN0JiMzNDsKJiM0MzsKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyMgVEVTVCAjMwomIzQzOyMgQ2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeQomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ZWNobyAmZ3Q7ICYjMzQ7JHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfS92YWx1ZSYjMzQ7CiYjNDM7c2VuZF9hbmRfY2FwdHVyZQomIzQzO2V4cGVjdF9ub3RfaW5fbXNnICYjMzQ7JHtVU0VSREFUQV9LRVl9PSYjMzQ7CiYjNDM7CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsjIFRFU1QgIzQKJiM0MzsjIFJlbW92aW5nIHRoZSBrZXkgZHJvcHMgdGhlIGVudHJ5CiYjNDM7IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0Mzt3cml0ZV9rZXkgJiMzNDske1VTRVJEQVRBX0tFWX0mIzM0OyAmIzM0O3RoaXJkJiMzNDsKJiM0MztybWRpciAmIzM0OyR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX0mIzM0OwomIzQzO3NlbmRfYW5kX2NhcHR1cmUKJiM0MztleHBlY3Rfbm90X2luX21zZyAmIzM0OyR7VVNFUkRBVEFfS0VZfT0mIzM0OwomIzQzO3JtICYjMzQ7JHtPVVRQVVRfRklMRX0mIzM0OwomIzQzOwomIzQzOyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7IyBURVNUICM1CiYjNDM7IyBUb3J0dXJlIHRoZSBwYXlsb2FkIHdoaWxlIG1lc3NhZ2VzIGFyZSBiZWluZyBzZW50LAomIzQzOyMgZmlyc3QgdW5mcmFnbWVudGVkIGFuZCB0aGVuIGZyYWdtZW50ZWQKJiM0MzsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzO3dyaXRlX2tleSAmIzM0OyR7Q0hVUk5fS0VZfSYjMzQ7ICYjMzQ7JHtVU0VSREFUQV9WQUxVRX0mIzM0OwomIzQzO3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzCiYjNDM7CiYjNDM7Y3JlYXRlX2J1bGtfa2V5cwomIzQzO3J1bl93b3JrZXJzIGNodXJuX3ZhbHVlIGNodXJuX2tleSBzZW5kX21lc3NhZ2VzCiYjNDM7ZGVsZXRlX2J1bGtfa2V5cwomIzQzOwomIzQzO2V4aXQgJiMzNDske2tzZnRfcGFzc30mIzM0Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTEyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGBuZXRjb25zb2xlYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBvdmVyaGF1bGluZyBob3cgdGhlIGB1c2VyZGF0YWAgaXMgaGFuZGxlZCwgYW5kIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCB0b3VjaGVzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIExvb2tzIGxpa2UgdGhleSYjMzk7cmUgZGl0Y2hpbmcgdGhlIG9sZCBgY2hhciAqdXNlcmRhdGFgIGFuZCBgc2l6ZV90IHVzZXJkYXRhX2xlbmd0aGAgZm9yIGEgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCB0aGF0JiMzOTtzIFJDVS1wcm90ZWN0ZWQuIFNtYXJ0LiBUaGlzIGlzIGEgc29saWQgbW92ZSB0byBlbGltaW5hdGUgdGhvc2UgbmFzdHkgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZSB2dWxuZXJhYmlsaXRpZXMg4oCTIGRlZmluaXRlbHkgYSB3b3J0aHdoaWxlIGltcHJvdmVtZW50LgoKVGhlIHVwZGF0ZSBhbmQgcmVhZCBvcGVyYXRpb25zIGFyZSBub3cgdXNpbmcgYHJjdV9yZXBsYWNlX3BvaW50ZXIoKWAgYW5kIGBrZnJlZV9yY3UoKWAsIGFuZCBhbGwgdGhlIHNlbmQgZnVuY3Rpb25zIChgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbigpYCwgZXRjLikgYXJlIHRha2luZyBgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhYCBhbmQgYXBwcm9wcmlhdGVseSB3cmFwcGluZyB0aGUgcGF5bG9hZCBhY2Nlc3Mgd2l0aCBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYC4gVGhpcyBpcyB0ZXh0Ym9vayBSQ1UgaW1wbGVtZW50YXRpb24uCgpHaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0LWRvLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcm9idXN0IGJlZm9yZSBpdCBnb2VzIGxpdmUuCgpUaW1lIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgY29uZmlnIHRvIHJlcHJvZHVjZSB0aGlzIGFuZCBnZXQgdG8gdGVzdGluZy4gSSBrbm93IGBDT05GSUdfTkVUQ09OU09MRWAgaXMgcmVxdWlyZWQsIGFuZCBJIHN1c3BlY3QgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIHdpbGwgYWxzbyBiZSBuZWVkZWQuIExldCBtZSBkb3VibGUtY2hlY2sgYGRyaXZlcnMvbmV0L0tjb25maWdgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNi1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcbmRyaXZlcnMvbmV0L0tjb25maWctMzM1LVx0Ym9vbCBcJiMzNDtEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ1OmNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXHRib29sIFwmIzM0O1NldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVx0Ym9vbCBcJiMzNDtQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZTogTkVUQ09OU09MRSBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIE5FVENPTlNPTEUuIEJlZm9yZSBJIHN0YXJ0IGFueSB0cm91Ymxlc2hvb3Rpbmcgb3IgZGVlcGVyIGFuYWx5c2lzLCB1bmRlcnN0YW5kaW5nIHdoYXQgTkVUQ09OU09MRSByZWxpZXMgb24gaXMgYWJzb2x1dGVseSBjcnVjaWFsLiBJIG5lZWQgdG8ga25vdyB0aGUgcG90ZW50aWFsIGNob2tlIHBvaW50cywgdGhlIG90aGVyIGNvbXBvbmVudHMgd2hvc2UgZmFpbHVyZSB3b3VsZCB0YWtlIE5FVENPTlNPTEUgZG93biB3aXRoIHRoZW0uIEEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBkZXBlbmRlbmNpZXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgYW55IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBub3QganVzdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIHRyYW5zaXRpdmUgb25lcyDigJMgdGhvc2UgY29tcG9uZW50cyBORVRDT05TT0xFIHJlbGllcyBvbiwgd2hpY2ggaW4gdHVybiByZWx5IG9uICpvdGhlciogdGhpbmdzLiBUaGlzIGlzIHRoZSBmaXJzdCwgZXNzZW50aWFsIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTY9bWVudWNvbmZpZyBORVRERVZJQ0VTXG5kcml2ZXJzL25ldC9LY29uZmlnLTctXHRkZWZhdWx0IHkgaWYgVU1MXG5kcml2ZXJzL25ldC9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIE5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy05LVx0Ym9vbCBcJiMzNDtOZXR3b3JrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00MT1jb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWc6NDQ6XHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cbmRyaXZlcnMvbmV0L0tjb25maWctNDUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz03ND1jb25maWcgV0lSRUdVQVJEXG5kcml2ZXJzL25ldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7V2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo3NjpcdGRlcGVuZHMgb24gTkVUIFx1MDAyNlx1MDAyNiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnLTc3LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz05Mj1jb25maWcgV0lSRUdVQVJEX0RFQlVHXG5kcml2ZXJzL25ldC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgY2hlY2tzIGFuZCB2ZXJib3NlIG1lc3NhZ2VzXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjk0Olx0ZGVwZW5kcyBvbiBXSVJFR1VBUkRcbmRyaXZlcnMvbmV0L0tjb25maWctOTUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0xMDM9Y29uZmlnIE9WUE5cbmRyaXZlcnMvbmV0L0tjb25maWctMTA0LVx0dHJpc3RhdGUgXCYjMzQ7T3BlblZQTiBkYXRhIGNoYW5uZWwgb2ZmbG9hZFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoxMDU6XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMDYtXHRzZWxlY3QgRFNUX0NBQ0hFXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0xMzY9Y29uZmlnIE5FVF9GQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0xMzctXHRib29sIFwmIzM0O0ZpYnJlIENoYW5uZWwgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MTM4Olx0ZGVwZW5kcyBvbiBTQ1NJIFx1MDAyNlx1MDAyNiBQQ0lcbmRyaXZlcnMvbmV0L0tjb25maWctMTM5LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MTQ5PWNvbmZpZyBJRkJcbmRyaXZlcnMvbmV0L0tjb25maWctMTUwLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZXJtZWRpYXRlIEZ1bmN0aW9uYWwgQmxvY2sgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoxNTE6XHRkZXBlbmRzIG9uIE5FVF9BQ1RfTUlSUkVEIHx8IE5GVF9GV0RfTkVUREVWXG5kcml2ZXJzL25ldC9LY29uZmlnLTE1Mi1cdHNlbGVjdCBORVRfUkVESVJFQ1Rcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTE3OT1jb25maWcgTUFDVlRBUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xODAtXHR0cmlzdGF0ZSBcJiMzNDtNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjE4MTpcdGRlcGVuZHMgb24gTUFDVkxBTlxuZHJpdmVycy9uZXQvS2NvbmZpZzoxODI6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMTgzLVx0c2VsZWN0IFRBUFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MTkzPWNvbmZpZyBJUFZMQU5fTDNTXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5NDpcdGRlcGVuZHMgb24gTkVURklMVEVSXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5NTpcdGRlcGVuZHMgb24gSVBWTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnLTE5Ni1cdGRlZl9ib29sIHlcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTE5OT1jb25maWcgSVBWTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQLVZMQU4gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyMDE6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjAyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcbmRyaXZlcnMvbmV0L0tjb25maWctMjE3LVx0dHJpc3RhdGUgXCYjMzQ7SVAtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjIxODpcdGRlcGVuZHMgb24gSVBWTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnOjIxOTpcdGRlcGVuZHMgb24gSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMjAtXHRzZWxlY3QgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyMzI6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjMzLVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNDU9Y29uZmlnIEdFTkVWRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDYtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyNDc6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjQ4LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcbmRyaXZlcnMvbmV0L0tjb25maWctMjYxLVx0dHJpc3RhdGUgXCYjMzQ7QmFyZSBVRFAgRW5jYXBzdWxhdGlvblwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyNjI6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjYzLVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNzI9Y29uZmlnIEdUUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzMtXHR0cmlzdGF0ZSBcJiMzNDtHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjI3NDpcdGRlcGVuZHMgb24gSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzUtXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTI4OT1jb25maWcgUEZDUFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yOTAtXHR0cmlzdGF0ZSBcJiMzNDtQYWNrZXQgRm9yd2FyZGluZyBDb250cm9sIFByb3RvY29sIChQRkNQKVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzoyOTE6XHRkZXBlbmRzIG9uIElORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMjkyLVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zMDI9Y29uZmlnIEFNVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDMtXHR0cmlzdGF0ZSBcJiMzNDtBdXRvbWF0aWMgTXVsdGljYXN0IFR1bm5lbGluZyAoQU1UKVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozMDQ6XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElQX01VTFRJQ0FTVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDUtXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTMyNz1jb25maWcgTkVUQ09OU09MRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGNvbnNvbGUgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjMyOTpcdGRlcGVuZHMgb24gUFJJTlRLXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTMzND1jb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cdGJvb2wgXCYjMzQ7RHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNjpcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTIFx1MDAyNlx1MDAyNiBcXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzctXHRcdFx0IShORVRDT05TT0xFPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNDU9Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cdGJvb2wgXCYjMzQ7U2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ3Olx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0OC1cdGRlZmF1bHQgblxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzU1PWNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXHRib29sIFwmIzM0O1ByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NzpcdGRlcGVuZHMgb24gTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcbmRyaXZlcnMvbmV0L0tjb25maWctMzU4LVx0ZGVmYXVsdCBuXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNzM9Y29uZmlnIE5UQl9ORVRERVZcbmRyaXZlcnMvbmV0L0tjb25maWctMzc0LVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBFdGhlcm5ldCBvdmVyIE5UQiBUcmFuc3BvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzc1Olx0ZGVwZW5kcyBvbiBOVEJfVFJBTlNQT1JUXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3Ni1cbmRyaXZlcnMvbmV0L0tjb25maWc9Mzc3PWNvbmZpZyBSSU9ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctMzc4LVx0dHJpc3RhdGUgXCYjMzQ7UmFwaWRJTyBFdGhlcm5ldCBvdmVyIG1lc3NhZ2luZyBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozNzk6XHRkZXBlbmRzIG9uIFJBUElESU9cbmRyaXZlcnMvbmV0L0tjb25maWctMzgwLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0zODE9Y29uZmlnIFJJT05FVF9UWF9TSVpFXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4Mi1cdGludCBcJiMzNDtOdW1iZXIgb2Ygb3V0Ym91bmQgcXVldWUgZW50cmllc1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozODM6XHRkZXBlbmRzIG9uIFJJT05FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zODQtXHRkZWZhdWx0IFwmIzM0OzEyOFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zODctXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIGluYm91bmQgcXVldWUgZW50cmllc1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzozODg6XHRkZXBlbmRzIG9uIFJJT05FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zODktXHRkZWZhdWx0IFwmIzM0OzEyOFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9MzkxPWNvbmZpZyBUVU5cbmRyaXZlcnMvbmV0L0tjb25maWctMzkyLVx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MzpcdGRlcGVuZHMgb24gSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTQtXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ0Mz1jb25maWcgVklSVElPX05FVFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDQtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0aW8gbmV0d29yayBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDQ1Olx0ZGVwZW5kcyBvbiBWSVJUSU9cbmRyaXZlcnMvbmV0L0tjb25maWctNDQ2LVx0c2VsZWN0IE5FVF9GQUlMT1ZFUlxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDYzPWNvbmZpZyBORVRLSVRcbmRyaXZlcnMvbmV0L0tjb25maWctNDY0LVx0Ym9vbCBcJiMzNDtCUEYtcHJvZ3JhbW1hYmxlIG5ldHdvcmsgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ2NTpcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbmRyaXZlcnMvbmV0L0tjb25maWctNDY2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDcyPWNvbmZpZyBORVRfVlJGXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ3My1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgUm91dGluZyBhbmQgRm9yd2FyZGluZyAoTGl0ZSlcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc0Olx0ZGVwZW5kcyBvbiBJUF9NVUxUSVBMRV9UQUJMRVNcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc1Olx0ZGVwZW5kcyBvbiBORVRfTDNfTUFTVEVSX0RFVlxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NzY6XHRkZXBlbmRzIG9uIElQVjZfTVVMVElQTEVfVEFCTEVTIHx8IElQVjY9blxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00ODE9Y29uZmlnIFZTT0NLTU9OXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ4Mi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgdnNvY2sgbW9uaXRvcmluZyBkZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NDgzOlx0ZGVwZW5kcyBvbiBWSE9TVF9WU09DS1xuZHJpdmVycy9uZXQvS2NvbmZpZy00ODQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz00ODk9Y29uZmlnIE1ISV9ORVRcbmRyaXZlcnMvbmV0L0tjb25maWctNDkwLVx0dHJpc3RhdGUgXCYjMzQ7TUhJIG5ldHdvcmsgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQ5MTpcdGRlcGVuZHMgb24gTUhJX0JVU1xuZHJpdmVycy9uZXQvS2NvbmZpZy00OTItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01NDQ9Y29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkRcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ1LVx0dHJpc3RhdGUgXCYjMzQ7WGVuIG5ldHdvcmsgZGV2aWNlIGZyb250ZW5kIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo1NDY6XHRkZXBlbmRzIG9uIFhFTlxuZHJpdmVycy9uZXQvS2NvbmZpZy01NDctXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTYyPWNvbmZpZyBYRU5fTkVUREVWX0JBQ0tFTkRcbmRyaXZlcnMvbmV0L0tjb25maWctNTYzLVx0dHJpc3RhdGUgXCYjMzQ7WGVuIGJhY2tlbmQgbmV0d29yayBkZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NTY0Olx0ZGVwZW5kcyBvbiBYRU5fQkFDS0VORFxuZHJpdmVycy9uZXQvS2NvbmZpZy01NjUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz01ODQ9Y29uZmlnIFZNWE5FVDNcbmRyaXZlcnMvbmV0L0tjb25maWctNTg1LVx0dHJpc3RhdGUgXCYjMzQ7Vk13YXJlIFZNWE5FVDMgZXRoZXJuZXQgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjU4NjpcdGRlcGVuZHMgb24gUENJIFx1MDAyNlx1MDAyNiBJTkVUXG5kcml2ZXJzL25ldC9LY29uZmlnOjU4NzpcdGRlcGVuZHMgb24gUEFHRV9TSVpFX0xFU1NfVEhBTl82NEtCXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OC1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTU5ND1jb25maWcgRlVKSVRTVV9FU1xuZHJpdmVycy9uZXQvS2NvbmZpZy01OTUtXHR0cmlzdGF0ZSBcJiMzNDtGVUpJVFNVIEV4dGVuZGVkIFNvY2tldCBOZXR3b3JrIERldmljZSBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWc6NTk2Olx0ZGVwZW5kcyBvbiBBQ1BJXG5kcml2ZXJzL25ldC9LY29uZmlnLTU5Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDY6XHRkZXBlbmRzIG9uIERFQlVHX0ZTXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNzpcdGRlcGVuZHMgb24gSU5FVFxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDg6XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgUFNBTVBMRT1uXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwOTpcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cbmRyaXZlcnMvbmV0L0tjb25maWctNjEwLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGNvbnNvbGUgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBORVRDT05TT0xFYCBoZXJlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRmlyc3Qgb2ZmLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgTkVUQ09OU09MRWAgcmVsaWVzIG9uIGBQUklOVEtgLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgbG9nZ2luZyBwdXJwb3Nlcy4gTm93LCBgTkVUQ09OU09MRV9EWU5BTUlDYCBicmluZ3MgaW4gYSBtb3JlIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGF0IG9uZSBoYXMgYSBkZXBlbmRlbmN5IG9uIGBORVRDT05TT0xFYCBpdHNlbGYsIHBsdXMgYFNZU0ZTYCBhbmQgYENPTkZJR0ZTX0ZTYC4gUmlnaHQsIHNvIHRvIGdldCB0aGUgZnVuY3Rpb25hbGl0eSB3ZSBuZWVkLCBJJiMzOTttIHRoaW5raW5nIHdlIHNob3VsZCBlbmFibGUgYE5FVENPTlNPTEVgLCBgTkVUQ09OU09MRV9EWU5BTUlDYCwgYW5kLCBiZWNhdXNlIG9mIHRoZSBsYXR0ZXImIzM5O3MgZGVwZW5kZW5jeSwgYWxzbyBgQ09ORklHRlNfRlNgLiBUaGF0IGNvdmVycyB0aGUgYmFzaWMgc2V0dXAsIGluY2x1ZGluZyB0aGUgZHluYW1pYyBhc3BlY3QuCgpOb3cgdG8gZ2V0IGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGFjdHVhbCBjaGFuZ2VzLCBJIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGNvcmUgc3ltYm9scyBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhpcyBwYXRjaC4gTGV0IG1lIHNlZS4uLiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYHVwZGF0ZV91c2VyZGF0YWAsIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCwgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgLCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAsIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX3VkcGAsIGFuZCBgZnJlZV9wYXJhbV90YXJnZXRgLiAKCk9rYXksIGl0IHNlZW1zIHRoYXQgYHVwZGF0ZV91c2VyZGF0YWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSB0aGF0IGlzIGNhbGxlZCBhbmQgaG93IHRoZSBjaGFuZ2VzIGFyZSBpbXBsZW1lbnRlZCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cGRhdGVfdXNlcmRhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwNTQ9c3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDcyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNzM6c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDc0LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTEyMT1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMzQtXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMzU6XHQvKiBTbmFwc2hvdCBmb3Igcm9sbGJhY2sgaWYgdXBkYXRlX3VzZXJkYXRhKCkgZmFpbHMgYmVsb3cgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTM2LVx0c3Ryc2NweShvbGRfdmFsdWUsIHVkbS1cdTAwM2V2YWx1ZSwgc2l6ZW9mKG9sZF92YWx1ZSkpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTQyLVx0bnQgPSB1c2VyZGF0YV90b190YXJnZXQodWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNDM6XHRyZXQgPSB1cGRhdGVfdXNlcmRhdGEobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNDQtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzMzc9c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM0NS1cdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM0NjpcdHVwZGF0ZV91c2VyZGF0YShudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM0Ny1cdGNvbmZpZ19pdGVtX3B1dChpdGVtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB1cGRhdGVfdXNlcmRhdGFgLiBBaCwgeWVzLCB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIGJvdGggYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAuIE5vdywgdGhvc2UgcmluZyBhIGJlbGwuLi4gcmlnaHQsIHRob3NlIGFyZSBjb25maWdmcyBjYWxsYmFja3MuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZXNlIGNvbmZpZ2ZzIGNhbGxiYWNrcyBhbmQgdW5kZXJzdGFuZCBob3cgYHVwZGF0ZV91c2VyZGF0YWAgaXMgdXNlZCB3aXRoaW4gdGhlaXIgY29udGV4dC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb25maWdmcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwNzM9c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEyMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTIxOnN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIyLVx0XHRcdFx0ICAgICBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUaGUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgQ29udW5kcnVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBleGFjdGx5IGlzIHRoaXMgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYmVpbmcgbGV2ZXJhZ2VkPyYjMzQ7IFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBnZW5lcmljIHZhcmlhYmxlIG5hbWU7IGl0IHN1Z2dlc3RzIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgdGllZCB0byB1c2VyIGRhdGEgYW5kIGl0cyBwZXJzaXN0ZW50IHZhbHVlcy4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBiZWluZyB1c2VkICpzb21ld2hlcmUqLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgaXRzIGludGVyYWN0aW9ucy4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgaXMga2V5IHRvIGl0cyBkZXNpZ24sIGludGVyYWN0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucy4gVGhlIG5leHQgc3RlcCBpcyB0byBpbml0aWF0ZSBhIHNlYXJjaCBhbmQgdHJhY2UgYWxsIGluc3RhbmNlcyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGl0IG9wZXJhdGVzIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcmRhdHVtX3ZhbHVlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDczPXN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTEyMTpzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEyMi1cdFx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqTG9jYXRpbmcgdGhlIFRhcmdldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIFRpbWUgdG8gbG9jYXRlIHRoYXQgc3BlY2lmaWMgdmFyaWFibGUgb3IgbW9kdWxlLCB0aGUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAuIEkga25vdyBpdCYjMzk7cyBpbiB0aGlzIGZpbGUgc29tZXdoZXJlLCBhbmQgSSBuZWVkIHRvIGZpbmQgYWxsIGluc3RhbmNlcy4gU28sIEkgbmVlZCB0byBzdGFydCB3aXRoIGEgYnJvYWQsIHRob3JvdWdoIHNlYXJjaC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIHVzZSBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIGZ1bmN0aW9uIHRvIHNjb3VyIHRoZSBlbnRpcmUgZG9jdW1lbnQuIFRoaXMgY291bGQgYmUgYSBjcnVjaWFsIHBhcnQgb2Ygd2hhdGV2ZXIgcHJvY2VzcyBJJiMzOTttIHdvcmtpbmcgb24gcmlnaHQgbm93LiBHb3QgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJkYXR1bV92YWx1ZV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTA3Mz1zdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMjE6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjItXHRcdFx0XHQgICAgIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnVzZWQgRGVmaW5pdGlvbiBDaGVjayoqCgpIb2xkIG9uIGEgc2Vjb25kLi4uIHRoaXMgdmFyaWFibGUvZnVuY3Rpb24vd2hhdGV2ZXIgaXMgKmRlZmluZWQqIGJ1dCBub3QgYWN0dWFsbHkgKnVzZWQqPyBUaGF0JiMzOTtzIGEgY2xhc3NpYyByZWQgZmxhZy4gQ291bGQgYmUgZGVhZCBjb2RlLCBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgY29uZnVzaW9uLCBvciBldmVuIGEgc3VidGxlIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbiBpZiBpdCYjMzk7cyB1bmludGVudGlvbmFsbHkgaW50ZXJhY3Rpbmcgd2l0aCBzb21ldGhpbmcgZWxzZS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBMZXQmIzM5O3MgaW1tZWRpYXRlbHkganVtcCB0byB0aGF0IHNlY3Rpb24gb2YgdGhlIGZpbGUuIExpbmUgMTEyMSBpcyB0aGUgbGlrZWx5IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0byB1bmRlcnN0YW5kIHdoeSBpdCYjMzk7cyB0aGVyZS4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgbmVlZHMgaW52ZXN0aWdhdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHRcbjExMjE6XHRzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4xMTIyOlx0XHRcdFx0XHQgICAgIHNpemVfdCBjb3VudClcbjExMjM6XHR7XG4xMTI0Olx0XHRzdHJ1Y3QgdXNlcmRhdHVtICp1ZG0gPSB0b191c2VyZGF0dW0oaXRlbSk7XG4xMTI1Olx0XHRjaGFyIG9sZF92YWx1ZVtNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTl07XG4xMTI2Olx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuMTEyNzpcdFx0c3RydWN0IHVzZXJkYXRhICp1ZDtcbjExMjg6XHRcdHNzaXplX3QgcmV0O1xuMTEyOTpcdFxuMTEzMDpcdFx0aWYgKGNvdW50IFx1MDAzZT0gTUFYX0VYVFJBREFUQV9WQUxVRV9MRU4pXG4xMTMxOlx0XHRcdHJldHVybiAtRU1TR1NJWkU7XG4xMTMyOlx0XG4xMTMzOlx0XHRtdXRleF9sb2NrKFx1MDAyNm5ldGNvbnNvbGVfc3Vic3lzLnN1X211dGV4KTtcbjExMzQ6XHRcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XG4xMTM1Olx0XHQvKiBTbmFwc2hvdCBmb3Igcm9sbGJhY2sgaWYgdXBkYXRlX3VzZXJkYXRhKCkgZmFpbHMgYmVsb3cgKi9cbjExMzY6XHRcdHN0cnNjcHkob2xkX3ZhbHVlLCB1ZG0tXHUwMDNldmFsdWUsIHNpemVvZihvbGRfdmFsdWUpKTtcbjExMzc6XHRcdC8qIGNvdW50IGlzIGJvdW5kZWQgYWJvdmUsIHNvIHN0cnNjcHkoKSBjYW5ub3QgdHJ1bmNhdGUgaGVyZSAqL1xuMTEzODpcdFx0c3Ryc2NweSh1ZG0tXHUwMDNldmFsdWUsIGJ1Ziwgc2l6ZW9mKHVkbS1cdTAwM2V2YWx1ZSkpO1xuMTEzOTpcdFx0dHJpbV9uZXdsaW5lKHVkbS1cdTAwM2V2YWx1ZSwgc2l6ZW9mKHVkbS1cdTAwM2V2YWx1ZSkpO1xuMTE0MDpcdFxuMTE0MTpcdFx0dWQgPSB0b191c2VyZGF0YShpdGVtLVx1MDAzZWNpX3BhcmVudCk7XG4xMTQyOlx0XHRudCA9IHVzZXJkYXRhX3RvX3RhcmdldCh1ZCk7XG4xMTQzOlx0XHRyZXQgPSB1cGRhdGVfdXNlcmRhdGEobnQpO1xuMTE0NDpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMTE0NTpcdFx0XHQvKiBSZXN0b3JlIHRoZSBwcmV2aW91cyB2YWx1ZSBzbyBpdCBtYXRjaGVzIHRoZSBsaXZlIHBheWxvYWQgKi9cbjExNDY6XHRcdFx0c3Ryc2NweSh1ZG0tXHUwMDNldmFsdWUsIG9sZF92YWx1ZSwgc2l6ZW9mKHVkbS1cdTAwM2V2YWx1ZSkpO1xuMTE0NzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMTQ4Olx0XHR9XG4xMTQ5Olx0XHRyZXQgPSBjb3VudDtcbjExNTA6XHRvdXRfdW5sb2NrOlxuMTE1MTpcdFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jaygpO1xuMTE1MjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldGNvbnNvbGVfc3Vic3lzLnN1X211dGV4KTtcbjExNTM6XHRcdHJldHVybiByZXQ7XG4xMTU0Olx0fVxuMTE1NTpcdFxuMTE1NjpcdC8qIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlIC0gRGlzYWJsZSBzeXNkYXRhIGZlYXR1cmUgYW5kIGNsZWFuIHN5c2RhdGFcbjExNTc6XHQgKiBAbnQ6IHRhcmdldCB0aGF0IGlzIGRpc2FibGluZyB0aGUgZmVhdHVyZVxuMTE1ODpcdCAqIEBmZWF0dXJlOiBmZWF0dXJlIGJlaW5nIGRpc2FibGVkXG4xMTU5Olx0ICovXG4xMTYwOlx0c3RhdGljIHZvaWQgZGlzYWJsZV9zeXNkYXRhX2ZlYXR1cmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbjExNjE6XHRcdFx0XHRcdCAgICBlbnVtIHN5c2RhdGFfZmVhdHVyZSBmZWF0dXJlKVxuMTE2MjpcdHtcbjExNjM6XHRcdG50LVx1MDAzZXN5c2RhdGFfZmllbGRzIFx1MDAyNj0gfmZlYXR1cmU7XG4xMTY0Olx0XHRudC1cdTAwM2VzeXNkYXRhWzBdID0gMDtcbjExNjU6XHR9XG4xMTY2Olx0XG4xMTY3Olx0c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbjExNjg6XHRcdFx0XHRcdFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4xMTY5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgQ29udW5kcnVtKioKClJpZ2h0LCBhIGZsaWNrZXIgb2YgbWVtb3J5IOKAkyB0aGF0IGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgLiBJdCYjMzk7cyBuYWdnaW5nIGF0IG1lLCBzdWdnZXN0aW5nIGl0JiMzOTtzIGxpa2VseSAqaW52b2x2ZWQqIGluIGEgbWFjcm8gZGVmaW5pdGlvbi4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCBpc24mIzM5O3QgYmVpbmcgdXNlZCBkaXJlY3RseS4gVGhhdCBzdWdnZXN0cyBJIHNob3VsZCB0cnkgdG8gdHJhY2UgaXRzIHVzYWdlLiBJIHNob3VsZCBicm9hZGVuIG15IHNlYXJjaC4gUmF0aGVyIHRoYW4gZ2V0IGxvc3QgaW4gdGhlIGZ1bmN0aW9uIGNhbGxzLCBJIHNob3VsZCBsb29rIG1vcmUgYnJvYWRseSBmb3IgdXNlcyBvZiB0aGUgc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2ggdGVybXMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBicm9hZGVyIHNjb3BlIHNlYXJjaCBmb3IgYHVzZXJkYXR1bV92YWx1ZWAuIEkmIzM5O2xsIGFsc28gdHJ5IGEgYnJvYWRlciBzY29wZSBzZWFyY2ggZm9yIGBDT05GSUdGU19BVFRSYC4gSXQmIzM5O3MgYSBodW5jaCwgYnV0IHNvbWV0aGluZyBsaWtlIHRoYXQgZmVlbHMgcmlnaHQuIEkmIzM5O20gYmV0dGluZyB0aGF0IG9uZSBvZiB0aGVzZSB3aWxsIGxlYWQgbWUgdG8gdGhlIG1hY3JvIGRlZmluaXRpb24gdGhhdCYjMzk7cyB1c2luZyB0aGUgc3RvcmFnZSBpbiBhbiBpbmRpcmVjdCB3YXkuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcCBhbmQgc2VlIHdoYXQgY29tZXMgYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHRlNfQVRUUi4qdXNlcmRhdHVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjU1PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjg3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyODg6Q09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI4OS1DT05GSUdGU19BVFRSKHN5c2RhdGFfLCBjcHVfbnJfZW5hYmxlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJiMzOTtzIERhdGEgRmxvdyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgQ09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSlgIG1hY3JvLCBhbmQgaXQgY2xlYXJseSBleHBhbmRzIHRvIGNyZWF0ZSB0d28gZnVuY3Rpb25zOiBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV92YWx1ZV9zaG93YC4gTXkgYnJhaW4gaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGVudHJ5IHBvaW50cywgd2hpY2ggYXJlIHRodXMgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAuIEkgYWxzbyBzZWUgdGhhdCBgc2VuZF9leHRfbXNnX3VkcGAgYW5kIGBzZW5kX21zZ191ZHBgIGFyZSBrZXkgcGxheWVycyBoZXJlLgoKSG1tLCB3YWl0IGEgc2Vjb25kLiAgSSBrbm93IHRoYXQgYHNlbmRfZXh0X21zZ191ZHBgIGFuZCBgc2VuZF9tc2dfdWRwYCBhcmUgaW52b2tlZCBieSBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgIHJlc3BlY3RpdmVseSwgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgY2FsbGVkIGJ5IGBuZXRjb25zb2xlX3dyaXRlYC4gVGhhdCYjMzk7cyBhIGdvb2QgY29ubmVjdGlvbiB0byBtYWtlLiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGBuZXRjb25zb2xlX3dyaXRlYC4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBhIGNvbnNvbGUgd3JpdGUgY2FsbGJhY2suCgpIb2xkIG9uLi4uIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIGBzZW5kX2V4dF9tc2dfdWRwYCBpcyBhY3R1YWxseSBjYWxsZWQgYnkgdGhlIGBuZXRjb25zb2xlX2V4dF93cml0ZWAgZnVuY3Rpb24uIFRoaXMgbWFrZXMgdGhlIGNvbm5lY3Rpb25zIG11Y2ggbW9yZSBjbGVhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VuZF9leHRfbXNnX3VkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA3Mz1zdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMTAtLyoqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjExMTogKiBzZW5kX2V4dF9tc2dfdWRwIC0gc2VuZCBleHRlbmRlZCBsb2cgbWVzc2FnZSB0byB0YXJnZXRcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTEyLSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE4LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMTk6c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMjAtXHRcdFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNzI9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTEtXHRcdGlmIChleHRlbmRlZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTkyOlx0XHRcdHNlbmRfZXh0X21zZ191ZHAobnQsIHdjdHh0KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTkzLVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIEtlcm5lbCBFbnRyeSBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBkYXRhIGdldHMgaW50byBhbmQgb3V0IG9mIHRoZSBrZXJuZWwmIzM5O3MgdmFyaW91cyBzdWJzeXN0ZW1zLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgbmV0Y29uc29sZV93cml0ZWAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHdyaXRpbmcgdG8gdGhlIGNvbnNvbGUuIFRoYXQgbWFrZXMgc2Vuc2UsIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCBoYW5kbGluZyB0aGUgaW5pdGlhbCBjYWxsIHRvIGdldCBkYXRhIG9udG8gdGhlIHNjcmVlbiBvciBpbnRvIGEgbG9nLCBiYXNlZCBvbiBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAuCgpOb3csIEkgc2VlIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFzIGFub3RoZXIgZW50cnkgcG9pbnQsIHRoaXMgdGltZSBmb3IgY29uZmlnZnMuIFJpZ2h0LCB0aGlzIHdvdWxkIGJlIGhvdyB1c2VyLXByb3ZpZGVkIGRhdGEgaXMgYWN0dWFsbHkgc3RvcmVkIHdpdGhpbiB0aGUgY29uZmlnZnMgc3RydWN0dXJlcyDigJMgdGhlIG1haW4gbWVjaGFuaXNtIHRvIGhhbmRsZSBjb25maWd1cmF0aW9uIGlucHV0LiBUaGF0IGltcGxpZXMgaXQmIzM5O3MgdGhlIGludGVyZmFjZSB1c2VkIHRvIHdyaXRlIGNvbmZpZ3VyYXRpb24gZGF0YS4KCkFoLCBhbmQgSSBzZWUgYHVzZXJkYXR1bV9kcm9wYCBhbHNvIG1lbnRpb25lZCBhcyBhbiBlbnRyeSBwb2ludC4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGltcG9ydGFudCBlbnRyeSBwb2ludCB0aGF0IGlzIHVzZWQgdG8gcmVtb3ZlIG9yIGNsZWFudXAgdGhpcyB1c2VyIGRhdGEuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgdG8gc2VlIGhvdyBldmVyeXRoaW5nIGlzIG1hbmFnZWQsIGZyb20gZ2V0dGluZyBkYXRhIGluLCB0byBzdG9yaW5nIGl0IGFuZCBmaW5hbGx5LCBjbGVhbmluZyBpdCB1cC4gVW5kZXJzdGFuZGluZyB0aGVzZSBlbnRyeSBwb2ludHMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGVzZSBjcml0aWNhbCBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZGF0dW1fZHJvcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTMxND1zdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMzc6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTM1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjAtXHQubWFrZV9pdGVtXHRcdD0gdXNlcmRhdHVtX21ha2VfaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzYxOlx0LmRyb3BfaXRlbVx0XHQ9IHVzZXJkYXR1bV9kcm9wLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MDAKCQkJCQkJCW91dHB1dDogNjUKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhvdC1QYXRoIFN5bWJvbHMgaW4gTmV0Y29uc29sZSBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzIGZvciB0aGlzIG5ldGNvbnNvbGUgd29yay4gTXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IHRoZSBrZXkgb25lcyBzaG91bGQgYmUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAsIGB1c2VyZGF0dW1fZHJvcGAsIGFuZCBgbmV0Y29uc29sZV93cml0ZWAuIEJ1dCBob2xkIG9uLi4uIGlzbiYjMzk7dCBgbmV0Y29uc29sZV93cml0ZWAgYSBwcmV0dHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbj8gSXQmIzM5O3MgdGhlIGNvbnNvbGUgd3JpdGUgY2FsbGJhY2ssIGFuZCBpdCBjb3VsZCBiZSBoaXQgcmVhbGx5LCByZWFsbHkgb2Z0ZW4gaWYgdGhlcmUmIzM5O3MgYSBmbG9vZCBvZiBgcHJpbnRrc2AuIEhvd2V2ZXIsIHRoZSBvdGhlciB0d28sIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLCBhcmUgbXVjaCBtb3JlIGRpcmVjdGx5IHRpZWQgdG8gKnRoaXMqIHNwZWNpZmljIGZlYXR1cmUuCgpOb3csIEkgcmVhbGx5IHNob3VsZCBkb3VibGUtY2hlY2sgaG93IGZyZXF1ZW50bHkgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZC4gQWgsIHJpZ2h0LCBpdCBnZXRzIGZpcmVkIGZvciBldmVyeSBzaW5nbGUgYHByaW50a2Agd2hlbiBuZXRjb25zb2xlIGlzIGVuYWJsZWQsIHRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgZGlnZ2luZyBpbnRvIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGFuZCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgLiBUaG9zZSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4gSXMgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gZXhwb3NlZCBpbiB0aGUgbmV0Y29uc29sZSBjb2RlPyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgdGhlcmUuIEdvdHRhIGNvdmVyIG15IGJhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MD1fX3NldHVwKFwmIzM0O25ldGNvbnNvbGU9XCYjMzQ7LCBvcHRpb25fc2V0dXApO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04My0vKiBMaW5rZWQgbGlzdCBvZiBhbGwgY29uZmlndXJlZCB0YXJnZXRzICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUtLyogdGFyZ2V0X2NsZWFudXBfbGlzdCBpcyB1c2VkIHRvIHRyYWNrIHRhcmdldHMgdGhhdCBuZWVkIHRvIGJlIGNsZWFuZWQgb3V0c2lkZVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxLS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMtLyogVGhpcyBuZWVkcyB0byBiZSBhIG11dGV4IGJlY2F1c2UgbmV0cG9sbF9jbGVhbnVwIG1pZ2h0IHNsZWVwICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQ6c3RhdGljIERFRklORV9NVVRFWCh0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTU9c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXM7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OnN0YXRpYyBERUZJTkVfTVVURVgoZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTI2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqUmVnZXggU25hZnU6IFRpbWUgZm9yIHRoZSBGaWxlKioKClVnaCwgd2FpdCBhIHNlY29uZC4gVGhhdCByZWdleCBJIGp1c3QgY3JhZnRlZOKApiBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJiMzOTttIHN0YXJ0aW5nIHRvIGhhdmUgZG91YnRzLiBUaGUgZWRnZSBjYXNlcyBhcmUgc3RhcnRpbmcgdG8gc3dpbSB1cCBpbiBteSBtZW50YWwgbW9kZWwsIGFuZCBJIHN1c3BlY3QgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIGFzIHJvYnVzdCBhcyBJJiMzOTtkIGluaXRpYWxseSBob3BlZC4gQWxyaWdodCwgZm9yZ2V0IHRoZSByZWdleCBmb3Igbm93LiBJdCYjMzk7cyB0aW1lIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIGdldCBhIG1vcmUgZ3JvdW5kZWQgcGVyc3BlY3RpdmUuIExldCYjMzk7cyBqdXN0IGxvb2sgYXQgdGhlIHJhdyBkYXRhIGluIHRoZSBmaWxlIGl0c2VsZi4gVGhhdCYjMzk7cyBhbHdheXMgdGhlIGJlc3QgZmlyc3Qgc3RlcCB3aGVuIGEgcGF0dGVybiBtYXRjaGluZyBzdHJhdGVneSBmZWVscyBzaGFreS4gSSYjMzk7bGwgZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHRoaXMgd2F5LCBhbmQgSSBjYW4gYWx3YXlzIGdvIGJhY2sgYW5kIHJlZmluZSB0aGUgcmVnZXggYmFzZWQgb24gYWN0dWFsIG9ic2VydmF0aW9ucywgYnV0IEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MjAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01Mz1NT0RVTEVfSU1QT1JUX05TKFwmIzM0O05FVERFVl9JTlRFUk5BTFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY0OnN0YXRpYyBjaGFyIGNvbmZpZ1tNQVhfUEFSQU1fTEVOR1RIXTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NS1tb2R1bGVfcGFyYW1fc3RyaW5nKG5ldGNvbnNvbGUsIGNvbmZpZywgTUFYX1BBUkFNX0xFTkdUSCwgMCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjY9TU9EVUxFX1BBUk1fREVTQyhuZXRjb25zb2xlLCBcJiMzNDsgbmV0Y29uc29sZT1bc3JjLXBvcnRdQFtzcmMtaXBdL1tkZXZdLFt0Z3QtcG9ydF1AXHUwMDNjdGd0LWlwXHUwMDNlL1t0Z3QtbWFjYWRkcl1cJiMzNDspO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY4OnN0YXRpYyBib29sIG9vcHNfb25seTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02OS1tb2R1bGVfcGFyYW0ob29wc19vbmx5LCBib29sLCAwNjAwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03MD1NT0RVTEVfUEFSTV9ERVNDKG9vcHNfb25seSwgXCYjMzQ7T25seSBsb2cgb29wcyBtZXNzYWdlc1wmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc0LSNpZm5kZWZcdE1PRFVMRVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc1OnN0YXRpYyBpbnQgX19pbml0IG9wdGlvbl9zZXR1cChjaGFyICpvcHQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MD1fX3NldHVwKFwmIzM0O25ldGNvbnNvbGU9XCYjMzQ7LCBvcHRpb25fc2V0dXApO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04My0vKiBMaW5rZWQgbGlzdCBvZiBhbGwgY29uZmlndXJlZCB0YXJnZXRzICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUtLyogdGFyZ2V0X2NsZWFudXBfbGlzdCBpcyB1c2VkIHRvIHRyYWNrIHRhcmdldHMgdGhhdCBuZWVkIHRvIGJlIGNsZWFuZWQgb3V0c2lkZVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxLS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMtLyogVGhpcyBuZWVkcyB0byBiZSBhIG11dGV4IGJlY2F1c2UgbmV0cG9sbF9jbGVhbnVwIG1pZ2h0IHNsZWVwICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQ6c3RhdGljIERFRklORV9NVVRFWCh0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk2OnN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0Y29uc29sZV93cTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05Ny1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAxLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMjpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQsIG5ldGNvbnNvbGU7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAzLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODg9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTY6c3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTg6c3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTkte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjI1OnN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzU6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ3OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MjpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1OTpzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjQ6c3RhdGljIHZvaWQgX19leGl0IGR5bmFtaWNfbmV0Y29uc29sZV9leGl0KHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjcxLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9nZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjc2OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3Ny17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODA6c3RhdGljIHZvaWQgcG9wdWxhdGVfY29uZmlnZnNfaXRlbShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4MS1cdFx0XHRcdCAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yODQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI4OTpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjkwLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjk1LS8qIENoZWNrIGlmIHRoZSB0YXJnZXQgd2FzIGJvdW5kIGJ5IG1hYyBhZGRyZXNzLiAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI5NjpzdGF0aWMgYm9vbCBib3VuZF9ieV9tYWMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzAxOnN0YXRpYyB2b2lkIG5ldGNvbnNfcmVsZWFzZV9kZXYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDgtLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzA5OnN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMjEtLyogQ2hlY2tzIGlmIGEgZGVhY3RpdmF0ZWQgdGFyZ2V0IG1hdGNoZXMgYSBkZXZpY2UuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzIyOnN0YXRpYyBib29sIGRlYWN0aXZhdGVkX3RhcmdldF9tYXRjaChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMyMy1cdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzMy0vKiBQcm9jZXNzIHdvcmsgc2NoZWR1bGVkIGZvciB0YXJnZXQgcmVzdW1lLiAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMzNDpzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzNS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM5My0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozOTQ6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zOTUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MjAtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDIxOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDIyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDQ0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ0NTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0cG9sbCAqbnApXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDQ2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDY0LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ2NTpzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NjYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01MTQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTE1OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKnRvX3RhcmdldChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTE2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTI4LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjUyOTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3Byb2Nlc3NfY2xlYW51cHModm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01MzAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01MzktLyogR2V0IHJpZCBvZiBwb3NzaWJsZSB0cmFpbGluZyBuZXdsaW5lLCByZXR1cm5pbmcgdGhlIG5ldyBsZW5ndGggKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NDA6c3RhdGljIHZvaWQgdHJpbV9uZXdsaW5lKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTQxLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTU0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU1NTpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTU2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTU5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU2MDpzdGF0aWMgc3NpemVfdCBleHRlbmRlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2MS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2NC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NjU6c3RhdGljIHNzaXplX3QgcmVsZWFzZV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2Ni17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NzA6c3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzEte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTc1OnN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTgwOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTgxLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTg0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU4NTpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU4Ni17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU5NC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1OTU6c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTk2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjA0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjYwNTpzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MDYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjEzOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjE4OnN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYxOS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYzMy0vKiBjb25maWdmcyBoZWxwZXIgdG8gZGlzcGxheSBpZiBjcHVfbnIgc3lzZGF0YSBmZWF0dXJlIGlzIGVuYWJsZWQgKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2MzQ6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYzNS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY0Ni0vKiBjb25maWdmcyBoZWxwZXIgdG8gZGlzcGxheSBpZiB0YXNrbmFtZSBzeXNkYXRhIGZlYXR1cmUgaXMgZW5hYmxlZCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY0NzpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3Rhc2tuYW1lX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjQ4LVx0XHRcdFx0XHQgICAgIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjU5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY2MDpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3JlbGVhc2VfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NjEtXHRcdFx0XHRcdCAgICBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3NS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NzY6c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9uZXRjb25zX2NvbnNvbGVzKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjc3LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjk5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjcwMDpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX21zZ2lkX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzAxLVx0XHRcdFx0XHQgIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzE5LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjcyMDpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MjEtXHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODA4OnN0YXRpYyBzc2l6ZV90IHJlbGVhc2Vfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODA5LVx0XHRcdCAgICAgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MzQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODM1OnN0YXRpYyBzc2l6ZV90IGV4dGVuZGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzNi1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NjAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODYxOnN0YXRpYyBzc2l6ZV90IGRldl9uYW1lX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg2Mi1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODg4OnN0YXRpYyBzc2l6ZV90IGxvY2FsX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODg5LVx0XHRzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwOS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MTA6c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxMS1cdFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkzMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MzI6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMzLVx0XHRzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5NTc6c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1OC1cdCAgICAgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk4Ni0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5ODc6c3RhdGljIHNpemVfdCBjb3VudF91c2VyZGF0YV9lbnRyaWVzKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTg4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTkxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk5MjpzdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5My1cdFx0c2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDE4PXN0cnVjdCB1c2VyZGF0dW0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDIyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMjM6c3RhdGljIHN0cnVjdCB1c2VyZGF0dW0gKnRvX3VzZXJkYXR1bShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAyNC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMjg9c3RydWN0IHVzZXJkYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAzMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDMyOnN0YXRpYyBzdHJ1Y3QgdXNlcmRhdGEgKnRvX3VzZXJkYXRhKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDMzLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAzNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDM3OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKnVzZXJkYXRhX3RvX3RhcmdldChzdHJ1Y3QgdXNlcmRhdGEgKnVkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDQ0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNDU6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA0Ni17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTMtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA1NDpzdGF0aWMgaW50IGNhbGNfdXNlcmRhdGFfbGVuKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA1NS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNzItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA3MzpzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNzQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMjE6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjItXHRcdFx0XHQgICAgIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE1OS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTYwOnN0YXRpYyB2b2lkIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2MS1cdFx0XHRcdCAgICBlbnVtIHN5c2RhdGFfZmVhdHVyZSBmZWF0dXJlKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTY2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNjc6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTY4LVx0XHRcdFx0XHQgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTk2OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTk3LVx0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMjU6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI2LVx0XHRcdFx0XHQgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1NC0vKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNTU6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1Ni1cdFx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjkyPUNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIG1zZ2lkX2VuYWJsZWQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyOTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI5NDpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdXNlcmRhdHVtX2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5NS1cdFx1MDAyNnVzZXJkYXR1bV9hdHRyX3ZhbHVlLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjk4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyOTk6c3RhdGljIHZvaWQgdXNlcmRhdHVtX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzAzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMDQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdXNlcmRhdHVtX29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzA1LVx0LnJlbGVhc2UgPSB1c2VyZGF0dW1fcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMwNy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzA4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0dW1fdHlwZSA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzA5LVx0LmN0X2l0ZW1fb3BzXHQ9IFx1MDAyNnVzZXJkYXR1bV9vcHMsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTMxNDpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMTUtXHRcdFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpuYW1lKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMzc6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM1MC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzUxOnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp1c2VyZGF0YV9hdHRyc1tdID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNTItXHRcdTAwMjZzeXNkYXRhX2F0dHJfY3B1X25yX2VuYWJsZWQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNTgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM1OTpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdXNlcmRhdGFfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjAtXHQubWFrZV9pdGVtXHRcdD0gdXNlcmRhdHVtX21ha2VfaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzY0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB1c2VyZGF0YV90eXBlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjUtXHQuY3RfaXRlbV9vcHNcdD0gXHUwMDI2dXNlcmRhdHVtX29wcyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTM4MT1DT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzgyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzODM6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM4NC1cdFx1MDAyNmF0dHJfZW5hYmxlZCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQwMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDAyOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MDMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDA5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0MTA6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMS1cdC5yZWxlYXNlXHRcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDE0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MTUtXHQuY3RfYXR0cnNcdFx0PSBuZXRjb25zb2xlX3RhcmdldF9hdHRycyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxOS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDIwOnN0YXRpYyB2b2lkIGluaXRfdGFyZ2V0X2NvbmZpZ19ncm91cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MjEtXHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MjgtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQyOTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpmaW5kX2NtZGxpbmVfdGFyZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQzMC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NDktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ1MDpzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDUxLVx0XHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0ODMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ4NDpzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0ODUtXHRcdFx0XHQgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1MzMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTUzNDpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1MzUtXHQubWFrZV9ncm91cFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTM4LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1Mzk6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG5ldGNvbnNvbGVfc3Vic3lzX3R5cGUgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU0MC1cdC5jdF9ncm91cF9vcHNcdD0gXHUwMDI2bmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTQ0LS8qIFRoZSBuZXRjb25zb2xlIGNvbmZpZ2ZzIHN1YnN5c3RlbSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NDU6c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU0Ni1cdC5zdV9ncm91cFx0PSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU1NDpzdGF0aWMgdm9pZCBwb3B1bGF0ZV9jb25maWdmc19pdGVtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1NS1cdFx0XHRcdCAgIGludCBjbWRsaW5lX2NvdW50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTYzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NjQ6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF9jcHVfbnIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTY1LVx0XHRcdFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3MS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTcyOnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfdGFza25hbWUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTczLVx0XHRcdFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTc5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1ODA6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF9yZWxlYXNlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4MS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODYtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NzpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX21zZ2lkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4OC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1OTktICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYwMDpzdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MDEtXHRcdFx0ICAgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjI1LS8qIEhhbmRsZSBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugbm90aWZpY2F0aW9ucyAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MjY6c3RhdGljIGludCBuZXRjb25zb2xlX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyNy1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwMy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzA0OnN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0Y29uc29sZV9uZXRkZXZfbm90aWZpZXIgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwNS1cdC5ub3RpZmllcl9jYWxsICA9IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE5LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MjA6c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MjEte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3NDM6c3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NDQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzY3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3Njg6c3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NjktXHRcdFx0XHQgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc5Mi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzkzOnN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzk0LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgxMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODExOnN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODEyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyNC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODI1OnN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgyNi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NTEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg1MjpzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NTMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODc0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzU6c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTE5LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5MjA6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MjEte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTM2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5Mzc6c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MzgtXHRcdFx0XHQgICAgICBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NzItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk3MzpzdGF0aWMgdm9pZCBhcHBlbmRfcmVsZWFzZShjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3NC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5ODAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk4MTpzdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5ODItXHRcdFx0XHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDcyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNzM6c3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNzQtXHRcdFx0XHRjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMTgtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjExOTpzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyMC1cdFx0XHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1MC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTUxOnN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE1Mi1cdFx0XHQgdW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3MS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTcyOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzMte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTk5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDA6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9leHQoc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMS1cdFx0XHRcdCBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwNjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDctXHRcdFx0XHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxMjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV9sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTMtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpmbGFncylcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE0PV9fYWNxdWlyZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxOC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE5OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfZGV2aWNlX3VubG9jayhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjIwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMjE9X19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjY6c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRwb2xsICpucCwgY2hhciAqb3B0KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzIwLS8qIEFsbG9jYXRlIG5ldyB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBzZXR1cCBuZXRwb2xsIGZvciBpdCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMjE6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjMyMi1cdFx0XHRcdFx0XHQgICAgaW50IGNtZGxpbmVfY291bnQpXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1NjQKCQkJCQkJCW91dHB1dDogNjUKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgTW9kdWxlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBvdmVyIHRoaXMgYG5ldGNvbnNvbGVgIGNvZGUsIGFuZCB0aGUgaW1tZWRpYXRlIHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgdGhlIGNydWNpYWwgYGluaXRfbW9kdWxlYCBhbmQgYGNsZWFudXBfbW9kdWxlYCBmdW5jdGlvbnMg4oCTIHRoZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMsIHJlYWxseSDigJMgYXJlIGFsbCBtYWNyby1nZW5lcmF0ZWQuIFN0YW5kYXJkIHN0dWZmLiBOb3RoaW5nIHVudXN1YWwgdGhlcmUuIEJ1dCBob2xkIG9uLi4uIHdhc24mIzM5O3QgdGhlcmUgYSBzdGF0aWMgZnVuY3Rpb24uLi4gaG1tLi4uIHllYWgsIGBuZXRjb25zb2xlX3dyaXRlYCBpcyBmbGFnZ2VkIGFzIHN0YXRpYy4KCkFscmlnaHQsIHRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZmxvYXRpbmcgYXJvdW5kIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBlbHNlIHdlIGNhbiB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MD1fX3NldHVwKFwmIzM0O25ldGNvbnNvbGU9XCYjMzQ7LCBvcHRpb25fc2V0dXApO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04My0vKiBMaW5rZWQgbGlzdCBvZiBhbGwgY29uZmlndXJlZCB0YXJnZXRzICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfbGlzdCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUtLyogdGFyZ2V0X2NsZWFudXBfbGlzdCBpcyB1c2VkIHRvIHRyYWNrIHRhcmdldHMgdGhhdCBuZWVkIHRvIGJlIGNsZWFuZWQgb3V0c2lkZVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OC0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxLS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMtLyogVGhpcyBuZWVkcyB0byBiZSBhIG11dGV4IGJlY2F1c2UgbmV0cG9sbF9jbGVhbnVwIG1pZ2h0IHNsZWVwICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQ6c3RhdGljIERFRklORV9NVVRFWCh0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTU9c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbmV0Y29uc29sZV9zdWJzeXM7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OnN0YXRpYyBERUZJTkVfTVVURVgoZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTg4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBNeSBSZWdleCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyByZWdleCBhbmQgaXQmIzM5O3MganVzdCBub3QgcXVpdGUgcmlnaHQuIEkgd2FzIHRyeWluZyB0byBmaW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBidXQgSSYjMzk7bSBjbGVhcmx5IG1pc3Npbmcgc29tZXRoaW5nLiBMZXQgbWUgdHJ5IGBncmVwIC1FICYjMzk7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlwoJiMzOTsgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gVGhhdCBzaG91bGQgY2F0Y2ggbW9zdCBvZiB0aGVtLi4uIGJ1dCB3YWl0LCBJIGtub3cgZnJvbSBtZW1vcnkgdGhhdCBtb3N0IGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUgYXJlIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IHByb2JhYmx5IGV4cGxhaW5zIHdoeSB0aGUgcmVzdWx0cyBhcmVuJiMzOTt0IHdoYXQgSSBleHBlY3QuIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayBgaW5pdF9uZXRjb25zb2xlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5pdF9uZXRjb25zb2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzk0PXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDAyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MDM6c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQwNC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0ODQ9c3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfbmV0Y29uc29sZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTE3LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MTg6bGF0ZV9pbml0Y2FsbChpbml0X25ldGNvbnNvbGUpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MTktbW9kdWxlX2V4aXQoY2xlYW51cF9uZXRjb25zb2xlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2ODAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRnVuY3Rpb24gRW50cnkgUG9pbnRzIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgc3RhdGljIGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgaGVyZS4gU2luY2UgdGhlIGluc3RydWN0aW9ucyBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBJJiMzOTtsbCBmaXJzdCBjaGVjayBpZiB0aGVyZSBhcmUgYW55LCBhbmQgaWYgbm90LCBmYWxsIGJhY2sgb24gdGhlIHN0YXRpYyBvbmVzLCBmb2N1c2luZyBvbiBtb2RpZmllZCBmdW5jdGlvbnMuCgpMb29raW5nIGF0IHRoZSBsaXN0IG9mIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnMsIEkgaGF2ZTogYHVwZGF0ZV91c2VyZGF0YWAsIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCwgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgLCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAsIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX3VkcGAsIGFuZCBgZnJlZV9wYXJhbV90YXJnZXRgLiBGb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucywgSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gbGlrZSBwb3RlbnRpYWwgQVBJIGVudHJ5cG9pbnRzIG9yIGhhdmUgYSBnb29kIGNoYW5jZSBvZiAqbm90KiBiZWluZyBpbmxpbmVkLgoKYHVwZGF0ZV91c2VyZGF0YWAsIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGFuZCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgIGFyZSB0aGUgZnJvbnQgcnVubmVycy4gYHNlbmRfZXh0X21zZ191ZHBgIGFuZCBgdXBkYXRlX3VzZXJkYXRhYCBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFueSBpbmxpbmVkIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIG1vcmUgc2lnbmlmaWNhbnQuCgpOb3csIEkmIzM5O20gbm90aW5nIHRoZSBjb25maWcgb3B0aW9ucy4gV2UgaGF2ZSBgTkVUQ09OU09MRWAsIGBORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR0ZTX0ZTYC4gSSBrbm93IGBDT05GSUdGU19GU2AgaXMgcHJldHR5IHN0YW5kYXJkLCBidXQgSSYjMzk7bGwgaW5jbHVkZSBpdCBqdXN0IHRvIGJlIHNhZmUuIEkgc2VlIHRoYXQgYE5FVENPTlNPTEVfRFlOQU1JQ2AgZGVwZW5kcyBvbiBgTkVUQ09OU09MRSAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgLiBMZXQmIzM5O3MgYXNzdW1lIHRoYXQgYFNZU0ZTYCBpcyBsaWtlbHkgaW1wbGllZC4gU28gbXkgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgYFsmIzM0O05FVENPTlNPTEUmIzM0OywgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywgJiMzNDtDT05GSUdGU19GUyYjMzQ7XWAuCgpJJiMzOTtsbCBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRDT05TT0xFYC4gU2VlbXMgaXQgZGVwZW5kcyBvbiBgUFJJTlRLYCwgd2hpY2ggaXMgc3RhbmRhcmQuCgpTbyBub3csIGZvciBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LCBiYXNlZCBvbiB0aGUgcHJldmlvdXMgZXZhbHVhdGlvbiwgSSYjMzk7bGwgZ28gd2l0aCBgWyYjMzQ7dXBkYXRlX3VzZXJkYXRhJiMzNDssICYjMzQ7c2VuZF9leHRfbXNnX3VkcCYjMzQ7LCAmIzM0O3NlbmRfbXNnX2ZyYWdtZW50ZWQmIzM0OywgJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywgJiMzNDt1c2VyZGF0dW1fZHJvcCYjMzQ7XWAuICBJJiMzOTtsbCB2ZXJpZnkgdGhhdCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCBhcmUgc3RhdGljLCBhcyBJIHN1c3BlY3QuCgpJIHNob3VsZCBhbHNvIG1ha2UgYSBub3RlIG9mIHRoZSBjb25zb2xlIHdyaXRlIGNhbGxiYWNrcywgaW4gY2FzZSB0aG9zZSB0dXJuIG91dCB0byBiZSBpbXBvcnRhbnQ6IGBuZXRjb25zb2xlX3dyaXRlYCwgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCwgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYC4gTGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0Y29uc29sZV93cml0ZV9leHRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRjb25zb2xlX3dyaXRlX2V4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE3Mj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjAwOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfZXh0KHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDEtXHRcdFx0XHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzg1PXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM4Ny1cdC5mbGFncyA9IENPTl9FTkFCTEVEIHwgQ09OX0VYVEVOREVEIHwgQ09OX05CQ09OIHwgQ09OX05CQ09OX0FUT01JQ19VTlNBRkUsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM4ODpcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzg5Olx0LndyaXRlX2F0b21pYyA9IG5ldGNvbnNvbGVfd3JpdGVfZXh0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzOTAtXHQuZGV2aWNlX2xvY2sgPSBuZXRjb25zb2xlX2RldmljZV9sb2NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE1MgoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiA1NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGNvbnNvbGUgUkNVIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGltcGxlbWVudGluZyBSZWFkLUNvcHktVXBkYXRlIChSQ1UpIHByb3RlY3Rpb24gZm9yIHRoZSBgdXNlcmRhdGFgIGZpZWxkIHdpdGhpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzIHJlbGF0ZWQgdG8gaG93IHRoZSBjb25maWd1cmF0aW9uIGRhdGEgaXMgbWFuYWdlZCBhbmQgYWNjZXNzZWQuCgpUaGUga2V5IGVudHJ5IHBvaW50cyBhcmUgY2xlYXI6IGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgYW5kIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCBhcmUgdGhlIHB1YmxpYyBmYWNlcyBmb3Igd3JpdGluZyB0byB0aGUgY29uc29sZSwgYW5kIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgIGFyZSB0aGUgY29uZmlnZnMgZW50cnkgcG9pbnRzIGZvciBtYW5hZ2luZyB0aGUgYHVzZXJkYXRhYC4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdDoKCiogICBgdXBkYXRlX3VzZXJkYXRhYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgdGhlIGBuZXRjb25zX3VzZXJkYXRhYCBzdHJ1Y3R1cmUgdXNpbmcgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLiBUaGlzIGlzIHdoZXJlIHRoZSBuZXcgZGF0YSBjb21lcyBpbiBhbmQgdGhlIG9sZCBkYXRhIGlzIGdyYWNlZnVsbHkgcmVsaW5xdWlzaGVkIHZpYSBSQ1Ugc2VtYW50aWNzLgoqICAgYHNlbmRfZXh0X21zZ191ZHBgIGlzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgcmVhZGluZyB0aGlzIHByb3RlY3RlZCBgdXNlcmRhdGFgLiBJIHNlZSBpdCB1c2luZyBgcmN1X3JlYWRfbG9jaygpYCwgYHJjdV9kZXJlZmVyZW5jZSgpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCB0byBzYWZlbHkgYWNjZXNzIHRoZSBkYXRhLiBUaGlzIGltcGxpZXMgYSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiwgbWVhbmluZyB3ZSBjb3VsZCBwb3RlbnRpYWxseSBoYXZlIGhpZ2ggcmVhZCBwZXJmb3JtYW5jZSB3aGVuIHVwZGF0aW5nIHRoZSBjb25maWdzLgoqICAgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAgYXJlIHRoZSBjb25maWdmcyBob29rcyB0aGF0IHVsdGltYXRlbHkgKmNhbGwqIGB1cGRhdGVfdXNlcmRhdGFgIHRvIGhhbmRsZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoYXQgYHNlbmRfZXh0X21zZ191ZHBgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGFuZCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAgYXJlIGFsbCBtb2RpZmllZCB0byB0YWtlIGB1c2VyZGF0YWAgYXMgYW4gYXJndW1lbnQuIFRoZSBwYXRjaCBpcyBlbnN1cmluZyB0aGUgY3VycmVudCB1c2VyZGF0YSBpcyBwYXNzZWQgZG93biwgaW5zdGVhZCBvZiBzb21lIG90aGVyIGNvcHkgb2YgdGhlIHVzZXJkYXRhLgoKVGhlIGBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlYCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YCBmdW5jdGlvbnMgYXJlIGFsc28gbW9kaWZpZWQgdG8gYGtmcmVlKClgIHRoZSBvbGQgdXNlcmRhdGEgdXNpbmcgYHJjdV9hY2Nlc3NfcG9pbnRlcmAsIGluZGljYXRpbmcgdGhlIHJlbGVhc2UgcGFydCBvZiB0aGUgUkNVIGN5Y2xlLgoKVGhlcmVmb3JlLCBmb3IgbXkgdGVzdGluZyBhbmQgYW5hbHlzaXMsIG15IGluaXRpYWwgbGlzdCBvZiBmdW5jdGlvbnMgSSB3aWxsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaXM6CgoqICAgYHVwZGF0ZV91c2VyZGF0YWAgKGZvciBSQ1UgdXBkYXRlKQoqICAgYHNlbmRfZXh0X21zZ191ZHBgIChmb3IgUkNVIHJlYWQpCiogICBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCAoY29uZmlnZnMgdXBkYXRlKQoqICAgYHVzZXJkYXR1bV9kcm9wYCAoY29uZmlnZnMgdXBkYXRlKQoqICAgYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCAoYmVjYXVzZSBJIHNlZSBpdCBhdCB0aGUgdG9wLCBhbmQgbGlrZWx5IGludGVyYWN0cyB3aXRoIGFsbCB0aGUgZnVuY3Rpb25zIGFib3ZlLCB3aXRoIGBuZXRjb25zb2xlX3dyaXRlX2Jhc2ljYCkKCkdpdmVuIHRoaXMgY2hhbmdlIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24sIGl0JiMzOTtzIGNyaXRpY2FsIHRvIGZ1enogdGhpcyBhcmVhIHdpdGggY29uY3VycmVudCB1cGRhdGVzIHRocm91Z2ggY29uZmlnZnMgYW5kIGNvbnNvbGUgd3JpdGVzIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3IgZGF0YSByYWNlcyBhcmUgaW50cm9kdWNlZC4gVGhlIGtleSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdmVyaWZ5IGFyZSBgTkVUQ09OU09MRWAsIGBORVRDT05TT0xFX0RZTkFNSUNgLCBhbmQgYENPTkZJR0ZTX0ZTYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UgZm9yIHRoZSBjb3JlIGtlcm5lbCwgbGlrZWx5IGluY3JlYXNpbmcgaXRzIHN0YWJpbGl0eS4gVGltZSB0byBzZXQgdXAgdGhhdCBmdXp6aW5nIGNhbXBhaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUQ09OU09MRSYjMzQ7LAogICAgJiMzNDtORVRDT05TT0xFX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1cGRhdGVfdXNlcmRhdGEmIzM0OywKICAgICYjMzQ7c2VuZF9leHRfbXNnX3VkcCYjMzQ7LAogICAgJiMzNDt1c2VyZGF0dW1fdmFsdWVfc3RvcmUmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX2Ryb3AmIzM0OywKICAgICYjMzQ7bmV0Y29uc29sZV93cml0ZV9leHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIGB1c2VyZGF0YWAgcGF5bG9hZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEl0IG1vZGlmaWVzIGhvdyB1c2VyZGF0YSBpcyB1cGRhdGVkIHZpYSBjb25maWdmcyBhbmQgaG93IGl0IGlzIHJlYWQgZHVyaW5nIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMpIHRoYXQgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24gaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBjcmFzaGVzIHVuZGVyIGNvbmN1cnJlbnQgY29uZmlnZnMgdXBkYXRlcyBhbmQgY29uc29sZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXBkYXRlX3VzZXJkYXRhJiMzNDssCiAgICAmIzM0O3NlbmRfZXh0X21zZ191ZHAmIzM0OywKICAgICYjMzQ7dXNlcmRhdHVtX3ZhbHVlX3N0b3JlJiMzNDssCiAgICAmIzM0O3VzZXJkYXR1bV9kcm9wJiMzNDssCiAgICAmIzM0O25ldGNvbnNvbGVfd3JpdGVfZXh0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBgdXNlcmRhdGFgIHBheWxvYWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyLiBJdCBtb2RpZmllcyBob3cgdXNlcmRhdGEgaXMgdXBkYXRlZCB2aWEgY29uZmlnZnMgYW5kIGhvdyBpdCBpcyByZWFkIGR1cmluZyBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jKSB0aGF0IHByZXZlbnRzIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgUkNVIGltcGxlbWVudGF0aW9uIGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgY3Jhc2hlcyB1bmRlciBjb25jdXJyZW50IGNvbmZpZ2ZzIHVwZGF0ZXMgYW5kIGNvbnNvbGUgd3JpdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MTk6MzUuNjMzNjYyNjUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY2MTgzMTM5NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVwZGF0ZV91c2VyZGF0YVwiLFxuICAgIFwic2VuZF9leHRfbXNnX3VkcFwiLFxuICAgIFwidXNlcmRhdHVtX3ZhbHVlX3N0b3JlXCIsXG4gICAgXCJ1c2VyZGF0dW1fZHJvcFwiLFxuICAgIFwibmV0Y29uc29sZV93cml0ZV9leHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgYHVzZXJkYXRhYCBwYXlsb2FkIGluIHRoZSBuZXRjb25zb2xlIGRyaXZlci4gSXQgbW9kaWZpZXMgaG93IHVzZXJkYXRhIGlzIHVwZGF0ZWQgdmlhIGNvbmZpZ2ZzIGFuZCBob3cgaXQgaXMgcmVhZCBkdXJpbmcgbWVzc2FnZSB0cmFuc21pc3Npb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgKGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYykgdGhhdCBwcmV2ZW50cyB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcy4gSXQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgY3Jhc2hlcyB1bmRlciBjb25jdXJyZW50IGNvbmZpZ2ZzIHVwZGF0ZXMgYW5kIGNvbnNvbGUgd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoxOTozNS42MzM2Njk3NDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDk5MjM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFmZjExMGNmYTFlNGFhNjQ5ZGFhZjI1YjBjYmE0YzlkNDE4M2I0ZTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAxMjoxOTozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5pbmRleCA4NjIwMDFkMDlhYTg0Li4xNDA5MmZiMTVmNmQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xcbkBAIC0xMzUsMTMgKzEzNSwyNyBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XFxuIFxcdFNUQVRFX0RFQUNUSVZBVEVELFxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXFxuKyAqIEByY3U6XFx0VXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLlxcbisgKiBAbGVuZ3RoOlxcdExlbmd0aCBvZiBAZGF0YSwgZXhjbHVkaW5nIHRoZSBOVUwgdGVybWluYXRvci5cXG4rICogQGRhdGE6XFx0Rm9ybWF0dGVkIFxcXCIga2V5PXZhbHVlXFxcXG5cXFwiIGVudHJpZXMsIE5VTCB0ZXJtaW5hdGVkLlxcbisgKlxcbisgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZFxcbisgKiBAbGVuZ3RoIGRpc2FncmVlaW5nLlxcbisgKi9cXG4rc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xcbitcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxuK1xcdHNpemVfdFxcdFxcdFxcdGxlbmd0aDtcXG4rXFx0Y2hhclxcdFxcdFxcdGRhdGFbXTtcXG4rfTtcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cXG4gICogQGxpc3Q6XFx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXFxuICAqIEBncm91cDpcXHRMaW5rcyB1cyBpbnRvIHRoZSBjb25maWdmcyBzdWJzeXN0ZW0gaGllcmFyY2h5LlxcbiAgKiBAdXNlcmRhdGFfZ3JvdXA6XFx0TGlua3MgdG8gdGhlIHVzZXJkYXRhIGNvbmZpZ2ZzIGhpZXJhcmNoeVxcbi0gKiBAdXNlcmRhdGE6XFx0XFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxcbi0gKiBAdXNlcmRhdGFfbGVuZ3RoOlxcdFN0cmluZyBsZW5ndGggb2YgdXNlcmRhdGEuXFxuKyAqIEB1c2VyZGF0YTpcXHRcXHRDYWNoZWQsIGZvcm1hdHRlZCB1c2VyZGF0YSBwYXlsb2FkLiBSQ1UgcHJvdGVjdGVkLlxcbiAgKiBAc3lzZGF0YTpcXHRcXHRDYWNoZWQsIGZvcm1hdHRlZCBzdHJpbmcgb2YgYXBwZW5kXFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcXHRTeXNkYXRhIGZlYXR1cmVzIGVuYWJsZWQuXFxuICAqIEBtc2djb3VudGVyOlxcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxcbkBAIC0xNzYsOCArMTkwLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4gI2lmZGVmXFx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXFx0Z3JvdXA7XFxuIFxcdHN0cnVjdCBjb25maWdfZ3JvdXBcXHR1c2VyZGF0YV9ncm91cDtcXG4tXFx0Y2hhclxcdFxcdFxcdCp1c2VyZGF0YTtcXG4tXFx0c2l6ZV90XFx0XFx0XFx0dXNlcmRhdGFfbGVuZ3RoO1xcbitcXHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSBfX3JjdSAqdXNlcmRhdGE7XFxuIFxcdGNoYXJcXHRcXHRcXHRzeXNkYXRhW01BWF9FWFRSQURBVEFfRU5UUllfTEVOICogTUFYX1NZU0RBVEFfSVRFTVNdO1xcbiBcXG4gXFx0LyogYml0LXdpc2Ugd2l0aCBzeXNkYXRhX2ZlYXR1cmUgYml0cyAqL1xcbkBAIC0xMDU5LDEyICsxMDcyLDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFxuIHN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIHtcXG4rXFx0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm5ldyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpvbGQ7XFxuIFxcdHN0cnVjdCB1c2VyZGF0dW0gKnVkbV9pdGVtO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW07XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xcbi1cXHRjaGFyICpvbGRfYnVmID0gTlVMTDtcXG4tXFx0Y2hhciAqbmV3X2J1ZiA9IE5VTEw7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGludCBvZmZzZXQgPSAwO1xcbiBcXHRpbnQgbGVuO1xcbiBcXG5AQCAtMTA3Niw4ICsxMDg4LDggQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFxuIFxcdC8qIEFsbG9jYXRlIG5ldyBidWZmZXIgKi9cXG4gXFx0aWYgKGxlbikge1xcbi1cXHRcXHRuZXdfYnVmID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTtcXG4tXFx0XFx0aWYgKCFuZXdfYnVmKVxcbitcXHRcXHRuZXcgPSBrbWFsbG9jX2ZsZXgoKm5ldywgZGF0YSwgbGVuICsgMSk7XFxuK1xcdFxcdGlmICghbmV3KVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG5AQCAtMTA4NywyMiArMTA5OSwyMSBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXHRcXHR1ZG1faXRlbSA9IHRvX3VzZXJkYXR1bShpdGVtKTtcXG4gXFx0XFx0LyogU2tpcCB1c2VyZGF0YSB3aXRoIG5vIHZhbHVlIHNldCAqL1xcbiBcXHRcXHRpZiAodWRtX2l0ZW0tXFx1MDAzZXZhbHVlWzBdKSB7XFxuLVxcdFxcdFxcdG9mZnNldCArPSBzY25wcmludGYoXFx1MDAyNm5ld19idWZbb2Zmc2V0XSwgbGVuICsgMSAtIG9mZnNldCxcXG4rXFx0XFx0XFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcXHUwMDI2bmV3LVxcdTAwM2VkYXRhW29mZnNldF0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBsZW4gKyAxIC0gb2Zmc2V0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFxcIiAlcz0lc1xcXFxuXFxcIiwgaXRlbS1cXHUwMDNlY2lfbmFtZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHVkbV9pdGVtLVxcdTAwM2V2YWx1ZSk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pO1xcbitcXHRpZiAobmV3KVxcbitcXHRcXHRuZXctXFx1MDAzZWxlbmd0aCA9IG9mZnNldDtcXG4gXFxuLVxcdC8qIFN3aXRjaCB0byBuZXcgYnVmZmVyIGFuZCBmcmVlIG9sZCBidWZmZXIgKi9cXG4tXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcXG4tXFx0b2xkX2J1ZiA9IG50LVxcdTAwM2V1c2VyZGF0YTtcXG4tXFx0bnQtXFx1MDAzZXVzZXJkYXRhID0gbmV3X2J1ZjtcXG4tXFx0bnQtXFx1MDAzZXVzZXJkYXRhX2xlbmd0aCA9IG9mZnNldDtcXG4tXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xcbi1cXG4tXFx0a2ZyZWUob2xkX2J1Zik7XFxuK1xcdC8qIFdyaXRlcnMgYXJlIHNlcmlhbGl6ZWQgYnkgZHluYW1pY19uZXRjb25zb2xlX211dGV4LiAqL1xcbitcXHRvbGQgPSByY3VfcmVwbGFjZV9wb2ludGVyKG50LVxcdTAwM2V1c2VyZGF0YSwgbmV3LFxcbitcXHRcXHRcXHRcXHQgIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2ZHluYW1pY19uZXRjb25zb2xlX211dGV4KSk7XFxuK1xcdGtmcmVlX3JjdShvbGQsIHJjdSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0xMzkyLDcgKzE0MDMsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbiBcXG4tXFx0a2ZyZWUobnQtXFx1MDAzZXVzZXJkYXRhKTtcXG4rXFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVxcdTAwM2V1c2VyZGF0YSkpO1xcbiBcXHRrZnJlZShudCk7XFxuIH1cXG4gXFxuQEAgLTE5MjYsMTQgKzE5MzcsMTMgQEAgc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm1zZyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgaW50IG1zZ19sZW4sXFxuLVxcdFxcdFxcdFxcdCAgICAgIGludCByZWxlYXNlX2xlbilcXG4rXFx0XFx0XFx0XFx0ICAgICAgaW50IHJlbGVhc2VfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXFxuIHtcXG4tXFx0Y29uc3QgY2hhciAqdXNlcmRhdGEgPSBOVUxMO1xcbiBcXHRjb25zdCBjaGFyICpzeXNkYXRhID0gTlVMTDtcXG4gXFx0Y29uc3QgY2hhciAqcmVsZWFzZTtcXG4gXFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuLVxcdHVzZXJkYXRhID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbiBcXHRzeXNkYXRhID0gbnQtXFx1MDAzZXN5c2RhdGE7XFxuICNlbmRpZlxcbiBcXG5AQCAtMTk1MCw3ICsxOTYwLDcgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHRpZiAodXNlcmRhdGEpXFxuIFxcdFxcdG1zZ19sZW4gKz0gc2NucHJpbnRmKFxcdTAwMjZudC1cXHUwMDNlYnVmW21zZ19sZW5dLFxcbiBcXHRcXHRcXHRcXHQgICAgIHNpemVvZihudC1cXHUwMDNlYnVmKSAtIG1zZ19sZW4sIFxcXCIlc1xcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgdXNlcmRhdGEpO1xcbitcXHRcXHRcXHRcXHQgICAgIHVzZXJkYXRhLVxcdTAwM2VkYXRhKTtcXG4gXFxuIFxcdGlmIChzeXNkYXRhKVxcbiBcXHRcXHRtc2dfbGVuICs9IHNjbnByaW50ZihcXHUwMDI2bnQtXFx1MDAzZWJ1Zlttc2dfbGVuXSxcXG5AQCAtMTk3MCw3ICsxOTgwLDggQEAgc3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKVxcbiBcXG4gc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4gXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm1zZ2JvZHlfcHRyLCBpbnQgaGVhZGVyX2xlbixcXG4tXFx0XFx0XFx0XFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuKVxcbitcXHRcXHRcXHRcXHQgaW50IG1zZ2JvZHlfbGVuLCBpbnQgc3lzZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXFxuIHtcXG4gXFx0Y29uc3QgY2hhciAqdXNlcmRhdGFfcHRyID0gTlVMTDtcXG4gXFx0Y29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMO1xcbkBAIC0xOTgxLDEyICsxOTkyLDEyIEBAIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xcbiBcXG4gI2lmZGVmIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNcXG4tXFx0dXNlcmRhdGFfcHRyID0gbnQtXFx1MDAzZXVzZXJkYXRhO1xcbiBcXHRzeXNkYXRhX3B0ciA9IG50LVxcdTAwM2VzeXNkYXRhO1xcbi1cXHR1c2VyZGF0YV9sZW4gPSBudC1cXHUwMDNldXNlcmRhdGFfbGVuZ3RoO1xcbiAjZW5kaWZcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghdXNlcmRhdGFfcHRyIFxcdTAwMjZcXHUwMDI2IHVzZXJkYXRhX2xlbiAhPSAwKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAodXNlcmRhdGEpIHtcXG4rXFx0XFx0dXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtXFx1MDAzZWRhdGE7XFxuK1xcdFxcdHVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLVxcdTAwM2VsZW5ndGg7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoIXN5c2RhdGFfcHRyIFxcdTAwMjZcXHUwMDI2IHN5c2RhdGFfbGVuICE9IDApKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTIwNjMsNyArMjA3NCw4IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4gXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqbXNnLFxcbiBcXHRcXHRcXHRcXHRpbnQgbXNnX2xlbixcXG4gXFx0XFx0XFx0XFx0aW50IHJlbGVhc2VfbGVuLFxcbi1cXHRcXHRcXHRcXHRpbnQgc3lzZGF0YV9sZW4pXFxuK1xcdFxcdFxcdFxcdGludCBzeXNkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxcbiB7XFxuIFxcdGludCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbjtcXG4gXFx0Y29uc3QgY2hhciAqbXNnYm9keTtcXG5AQCAtMjA5Miw3ICsyMTA0LDcgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHQgKiB3aWxsIGJlIHJlcGxhY2VkXFxuIFxcdCAqL1xcbiBcXHRzZW5kX2ZyYWdtZW50ZWRfYm9keShudCwgbXNnYm9keSwgaGVhZGVyX2xlbiwgbXNnYm9keV9sZW4sXFxuLVxcdFxcdFxcdCAgICAgc3lzZGF0YV9sZW4pO1xcbitcXHRcXHRcXHQgICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMTA3LDI1ICsyMTE5LDMzIEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4gc3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4ge1xcbitcXHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEgPSBOVUxMO1xcbiBcXHRpbnQgdXNlcmRhdGFfbGVuID0gMDtcXG4gXFx0aW50IHJlbGVhc2VfbGVuID0gMDtcXG4gXFx0aW50IHN5c2RhdGFfbGVuID0gMDtcXG4gXFx0aW50IGxlbjtcXG4gXFxuK1xcdC8qIEtlZXBzIHRoZSBwYXlsb2FkIHBpY2tlZCBiZWxvdyBhbGl2ZSB1bnRpbCB0aGUgbGFzdCBzZW5kX3VkcCgpLiAqL1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xcbiBcXHRzeXNkYXRhX2xlbiA9IHByZXBhcmVfc3lzZGF0YShudCwgd2N0eHQpO1xcbi1cXHR1c2VyZGF0YV9sZW4gPSBudC1cXHUwMDNldXNlcmRhdGFfbGVuZ3RoO1xcbitcXHR1c2VyZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShudC1cXHUwMDNldXNlcmRhdGEpO1xcbitcXHRpZiAodXNlcmRhdGEpXFxuK1xcdFxcdHVzZXJkYXRhX2xlbiA9IHVzZXJkYXRhLVxcdTAwM2VsZW5ndGg7XFxuICNlbmRpZlxcbiBcXHRpZiAobnQtXFx1MDAzZXJlbGVhc2UpXFxuIFxcdFxcdHJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLVxcdTAwM2VyZWxlYXNlKSArIDE7XFxuIFxcbiBcXHRsZW4gPSB3Y3R4dC1cXHUwMDNlbGVuICsgcmVsZWFzZV9sZW4gKyBzeXNkYXRhX2xlbiArIHVzZXJkYXRhX2xlbjtcXG4gXFx0aWYgKGxlbiBcXHUwMDNjPSBNQVhfUFJJTlRfQ0hVTkspXFxuLVxcdFxcdHJldHVybiBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKG50LCB3Y3R4dC1cXHUwMDNlb3V0YnVmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgd2N0eHQtXFx1MDAzZWxlbiwgcmVsZWFzZV9sZW4pO1xcbitcXHRcXHRzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uKG50LCB3Y3R4dC1cXHUwMDNlb3V0YnVmLCB3Y3R4dC1cXHUwMDNlbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgIHJlbGVhc2VfbGVuLCB1c2VyZGF0YSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0c2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXFx1MDAzZW91dGJ1Ziwgd2N0eHQtXFx1MDAzZWxlbiwgcmVsZWFzZV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICBzeXNkYXRhX2xlbiwgdXNlcmRhdGEpO1xcbiBcXG4tXFx0cmV0dXJuIHNlbmRfbXNnX2ZyYWdtZW50ZWQobnQsIHdjdHh0LVxcdTAwM2VvdXRidWYsIHdjdHh0LVxcdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxcbi1cXHRcXHRcXHRcXHQgICBzeXNkYXRhX2xlbik7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbkBAIC0yMzU3LDcgKzIzNzcsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZudC1cXHUwMDNlcmVzdW1lX3dxKTtcXG4gXFx0bmV0cG9sbF9jbGVhbnVwKFxcdTAwMjZudC1cXHUwMDNlbnApO1xcbiAjaWZkZWZcXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXFxuLVxcdGtmcmVlKG50LVxcdTAwM2V1c2VyZGF0YSk7XFxuK1xcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihudC1cXHUwMDNldXNlcmRhdGEpKTtcXG4gI2VuZGlmXFxuIFxcdGtmcmVlKG50KTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxcbmluZGV4IGI1NmM3MGI3ZTI3NDIuLmYwNjc0YzAwMTdmYzQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcXG5AQCAtMTMsNiArMTMsNyBAQCBURVNUX1BST0dTIDo9IFxcXFxcXG4gXFx0bmV0Y29uc19yZXN1bWUuc2ggXFxcXFxcbiBcXHRuZXRjb25zX3N5c2RhdGEuc2ggXFxcXFxcbiBcXHRuZXRjb25zX3RvcnR1cmUuc2ggXFxcXFxcbitcXHRuZXRjb25zX3VzZXJkYXRhLnNoIFxcXFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xcbiBcXG4gaW5jbHVkZSAuLi8uLi8uLi9saWIubWtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9uZXRjb25zX3VzZXJkYXRhLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMTM5MDNmNGNlMWM1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvbmV0Y29uc191c2VyZGF0YS5zaFxcbkBAIC0wLDAgKzEsMjI5IEBAXFxuKyMhL3Vzci9iaW4vZW52IGJhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rIyBFeGVyY2lzZSB0aGUgbmV0Y29uc29sZSB1c2VyZGF0YSBwYXlsb2FkLlxcbisjXFxuKyMgVGhlIGZpcnN0IHBhcnQgY2hlY2tzIHRoYXQgdGhlIHBheWxvYWQgdGhlIHRhcmdldCB0cmFuc21pdHMgZm9sbG93cyB3aGF0XFxuKyMgY29uZmlnZnMgc2F5czogYSB2YWx1ZSBzaG93cyB1cCBpbiB0aGUgbmV4dCBtZXNzYWdlLCBhbiB1cGRhdGUgcmVwbGFjZXMgdGhlXFxuKyMgcHJldmlvdXMgb25lLCBjbGVhcmluZyB0aGUgdmFsdWUgZHJvcHMgdGhlIGVudHJ5LCBhbmQgc28gZG9lcyByZW1vdmluZyB0aGVcXG4rIyBrZXkuXFxuKyNcXG4rIyBUaGUgc2Vjb25kIHBhcnQgcmV3cml0ZXMgdmFsdWVzLCBjcmVhdGVzIGFuZCBkZWxldGVzIGtleXMsIGFuZCBjbGVhcnMgdGhlXFxuKyMgcGF5bG9hZCBlbnRpcmVseSB3aGlsZSBtZXNzYWdlcyBhcmUgYmVpbmcgc2VudCwgc28gdGhlIHRyYW5zbWl0IHBhdGgga2VlcHNcXG4rIyBwaWNraW5nIHVwIHBheWxvYWRzIHRoYXQgYXJlIGJlaW5nIHJlcGxhY2VkIHVuZGVybmVhdGggaXQuIEl0IHJ1bnMgdHdpY2UsXFxuKyMgb25jZSB3aXRoIGEgcGF5bG9hZCBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGEgc2luZ2xlIHBhY2tldCBhbmQgb25jZSBsYXJnZVxcbisjIGVub3VnaCB0byBiZSBmcmFnbWVudGVkLlxcbisjXFxuKyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbitcXG4rc2V0IC1ldW8gcGlwZWZhaWxcXG4rXFxuK1NDUklQVERJUj0kKGRpcm5hbWUgXFxcIiQocmVhZGxpbmsgLWUgXFxcIiR7QkFTSF9TT1VSQ0VbMF19XFxcIilcXFwiKVxcbitcXG4rc291cmNlIFxcXCIke1NDUklQVERJUn1cXFwiLy4uL2xpYi9zaC9saWJfbmV0Y29ucy5zaFxcbitcXG4rIyBOdW1iZXIgb2YgdGltZXMgZWFjaCB0b3J0dXJlIHdvcmtlciBsb29wc1xcbitJVEVSQVRJT05TPSR7MTotMjAwfVxcbitcXG4rIyBLZXlzIG93bmVkIGJ5IGVhY2ggdG9ydHVyZSB3b3JrZXIuIFdvcmtlcnMgZG8gbm90IHNoYXJlIGtleXMsIHNvIGEgZmFpbGluZ1xcbisjIGNvbmZpZ2ZzIG9wZXJhdGlvbiBtZWFucyBhIHJlYWwgcHJvYmxlbSBhbmQgbm90IGEgbG9zdCByYWNlLlxcbitDSFVSTl9LRVk9XFxcImNodXJua2V5XFxcIlxcbitUUkFOU0lFTlRfS0VZPVxcXCJ0cmFuc2llbnRrZXlcXFwiXFxuKyMgTnVtYmVyIG9mIGtleXMgdXNlZCB0byBwdXNoIGEgbWVzc2FnZSBwYXN0IE1BWF9QUklOVF9DSFVOS1xcbitCVUxLX0tFWVM9OFxcbitcXG4rVVNFUkRBVEFfRElSPVxcXCIke05FVENPTlNfUEFUSH0vdXNlcmRhdGFcXFwiXFxuKyMgVmFsdWVzIGFyZSBjYXBwZWQgYXQgTUFYX0VYVFJBREFUQV9WQUxVRV9MRU4oMjAwKSBieXRlcywgc28gJHtCVUxLX0tFWVN9XFxuKyMgZW50cmllcyBvZiB0aGlzIHNpemUgYXJlIGVub3VnaCB0byBmb3JjZSBmcmFnbWVudGF0aW9uXFxuK0xPTkdfVkFMVUU9JChwcmludGYgLS0gJ3YlLjBzJyB7MS4uMTkwfSlcXG4rXFxuK2Z1bmN0aW9uIHdyaXRlX2tleSgpIHtcXG4rXFx0bG9jYWwgS0VZPVxcXCIkezF9XFxcIlxcbitcXHRsb2NhbCBWQUxVRT1cXFwiJHsyfVxcXCJcXG4rXFxuK1xcdG1rZGlyIC1wIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtLRVl9XFxcIlxcbitcXHRlY2hvIFxcXCIke1ZBTFVFfVxcXCIgXFx1MDAzZSBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7S0VZfS92YWx1ZVxcXCJcXG4rfVxcbitcXG4rIyBTZW5kIGEgc2luZ2xlIG1lc3NhZ2UgYW5kIGNhcHR1cmUgaXQgb24gdGhlIGRlc3RpbmF0aW9uIGludGVyZmFjZVxcbitmdW5jdGlvbiBzZW5kX2FuZF9jYXB0dXJlKCkge1xcbitcXHRybSAtZiBcXFwiJHtPVVRQVVRfRklMRX1cXFwiXFxuK1xcbitcXHRsaXN0ZW5fcG9ydF9hbmRfc2F2ZV90byBcXFwiJHtPVVRQVVRfRklMRX1cXFwiIFxcdTAwMjZcXG4rXFx0d2FpdF9mb3JfcG9ydCBcXFwiJHtOQU1FU1BBQ0V9XFxcIiBcXFwiJHtQT1JUfVxcXCIgXFxcIiR7SVBfVkVSU0lPTn1cXFwiXFxuK1xcdGVjaG8gXFxcIiR7TVNHfTogJHtUQVJHRVR9XFxcIiBcXHUwMDNlIC9kZXYva21zZ1xcbitcXHRidXN5d2FpdCBcXFwiJHtCVVNZV0FJVF9USU1FT1VUfVxcXCIgdGVzdCAtcyBcXFwiJHtPVVRQVVRfRklMRX1cXFwiIHx8IHRydWVcXG4rXFx0cGtpbGxfc29jYXRcXG4rXFx0dmFsaWRhdGVfbXNnIFxcXCIke09VVFBVVF9GSUxFfVxcXCJcXG4rfVxcbitcXG4rZnVuY3Rpb24gZXhwZWN0X2luX21zZygpIHtcXG4rXFx0bG9jYWwgV0FOVEVEPVxcXCIkezF9XFxcIlxcbitcXG4rXFx0aWYgISBncmVwIC1xIC0tIFxcXCIke1dBTlRFRH1cXFwiIFxcXCIke09VVFBVVF9GSUxFfVxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJyR7V0FOVEVEfScgbm90IGZvdW5kIGluICR7T1VUUFVUX0ZJTEV9XFxcIiBcXHUwMDNlXFx1MDAyNjJcXG4rXFx0XFx0Y2F0IFxcXCIke09VVFBVVF9GSUxFfVxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgXFxcIiR7a3NmdF9mYWlsfVxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rZnVuY3Rpb24gZXhwZWN0X25vdF9pbl9tc2coKSB7XFxuK1xcdGxvY2FsIFVOV0FOVEVEPVxcXCIkezF9XFxcIlxcbitcXG4rXFx0aWYgZ3JlcCAtcSAtLSBcXFwiJHtVTldBTlRFRH1cXFwiIFxcXCIke09VVFBVVF9GSUxFfVxcXCI7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiRkFJTDogJyR7VU5XQU5URUR9JyBmb3VuZCBpbiAke09VVFBVVF9GSUxFfVxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGNhdCBcXFwiJHtPVVRQVVRfRklMRX1cXFwiIFxcdTAwM2VcXHUwMDI2MlxcbitcXHRcXHRleGl0IFxcXCIke2tzZnRfZmFpbH1cXFwiXFxuK1xcdGZpXFxuK31cXG4rXFxuKyMgRXZlcnkgd3JpdGUgcHVibGlzaGVzIGEgbmV3IHBheWxvYWQgYW5kIGZyZWVzIHRoZSBwcmV2aW91cyBvbmUuIEFuIGVtcHR5XFxuKyMgdmFsdWUgaXMgc2tpcHBlZCB3aGVuIHRoZSBwYXlsb2FkIGlzIGZvcm1hdHRlZCwgc28gdGhpcyBhbHNvIGRyaXZlcyB0aGVcXG4rIyB0YXJnZXQgdGhyb3VnaCBoYXZpbmcgbm8gcGF5bG9hZCBhdCBhbGwuXFxuK2Z1bmN0aW9uIGNodXJuX3ZhbHVlKCkge1xcbitcXHRsb2NhbCBpXFxuK1xcbitcXHRmb3IgaSBpbiAkKHNlcSBcXFwiJHtJVEVSQVRJT05TfVxcXCIpXFxuK1xcdGRvXFxuK1xcdFxcdGVjaG8gXFxcInZhbHVlJHtpfVxcXCIgXFx1MDAzZSBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7Q0hVUk5fS0VZfS92YWx1ZVxcXCJcXG4rXFx0XFx0ZWNobyBcXHUwMDNlIFxcXCIke1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXFxcIlxcbitcXHRkb25lXFxuK31cXG4rXFxuKyMgQ3JlYXRlIGFuZCBkZWxldGUgYSBrZXkgdW5kZXJuZWF0aCB0aGUgc2VuZGVyXFxuK2Z1bmN0aW9uIGNodXJuX2tleSgpIHtcXG4rXFx0bG9jYWwgaVxcbitcXG4rXFx0Zm9yIGkgaW4gJChzZXEgXFxcIiR7SVRFUkFUSU9OU31cXFwiKVxcbitcXHRkb1xcbitcXHRcXHRta2RpciBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX1cXFwiXFxuK1xcdFxcdGVjaG8gXFxcInRyYW5zaWVudCR7aX1cXFwiIFxcdTAwM2UgXFxcIiR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9L3ZhbHVlXFxcIlxcbitcXHRcXHRybWRpciBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX1cXFwiXFxuK1xcdGRvbmVcXG4rfVxcbitcXG4rIyBLZWVwIHRoZSB0cmFuc21pdCBwYXRoIGJ1c3kgd2hpbGUgdGhlIHBheWxvYWQgaXMgYmVpbmcgcmVwbGFjZWRcXG4rZnVuY3Rpb24gc2VuZF9tZXNzYWdlcygpIHtcXG4rXFx0bG9jYWwgaVxcbitcXG4rXFx0Zm9yIGkgaW4gJChzZXEgXFxcIiR7SVRFUkFUSU9OU31cXFwiKVxcbitcXHRkb1xcbitcXHRcXHRlY2hvIFxcXCIke01TR306ICR7VEFSR0VUfSAke2l9XFxcIiBcXHUwMDNlIC9kZXYva21zZ1xcbitcXHRkb25lXFxuK31cXG4rXFxuKyMgUnVuIHRoZSB3b3JrZXJzIGNvbmN1cnJlbnRseSBhbmQgZmFpbCBpZiBhbnkgb2YgdGhlbSBoaXRzIGFuIGVycm9yXFxuK2Z1bmN0aW9uIHJ1bl93b3JrZXJzKCkge1xcbitcXHRsb2NhbCBQSURTPSgpXFxuK1xcdGxvY2FsIFdPUktFUlxcbitcXHRsb2NhbCBSRVQ9MFxcbitcXHRsb2NhbCBQSURcXG4rXFxuK1xcdGZvciBXT1JLRVIgaW4gXFxcIiRAXFxcIlxcbitcXHRkb1xcbitcXHRcXHRcXFwiJHtXT1JLRVJ9XFxcIiBcXHUwMDI2XFxuK1xcdFxcdFBJRFMrPShcXFwiJCFcXFwiKVxcbitcXHRkb25lXFxuK1xcbitcXHQjIFJlYXAgZXZlcnkgd29ya2VyIGJlZm9yZSByZXBvcnRpbmcgYSBmYWlsdXJlLCBvdGhlcndpc2UgYSBzdXJ2aXZpbmdcXG4rXFx0IyB3b3JrZXIga2VlcHMgd3JpdGluZyB0byBjb25maWdmcyB3aGlsZSB0aGUgZXhpdCB0cmFwIGNsZWFucyBpdCB1cC5cXG4rXFx0Zm9yIFBJRCBpbiBcXFwiJHtQSURTW0BdfVxcXCJcXG4rXFx0ZG9cXG4rXFx0XFx0d2FpdCBcXFwiJHtQSUR9XFxcIiB8fCBSRVQ9MVxcbitcXHRkb25lXFxuK1xcbitcXHRpZiBbWyBcXFwiJHtSRVR9XFxcIiAtbmUgMCBdXVxcbitcXHR0aGVuXFxuK1xcdFxcdGVjaG8gXFxcIkZBSUw6IHVzZXJkYXRhIHRvcnR1cmUgd29ya2VyIGZhaWxlZFxcXCIgXFx1MDAzZVxcdTAwMjYyXFxuK1xcdFxcdGV4aXQgXFxcIiR7a3NmdF9mYWlsfVxcXCJcXG4rXFx0ZmlcXG4rfVxcbitcXG4rZnVuY3Rpb24gY3JlYXRlX2J1bGtfa2V5cygpIHtcXG4rXFx0bG9jYWwgaVxcbitcXG4rXFx0Zm9yIGkgaW4gJChzZXEgXFxcIiR7QlVMS19LRVlTfVxcXCIpXFxuK1xcdGRvXFxuK1xcdFxcdHdyaXRlX2tleSBcXFwiYnVsayR7aX1cXFwiIFxcXCIke0xPTkdfVkFMVUV9XFxcIlxcbitcXHRkb25lXFxuK31cXG4rXFxuK2Z1bmN0aW9uIGRlbGV0ZV9idWxrX2tleXMoKSB7XFxuK1xcdGxvY2FsIGlcXG4rXFxuK1xcdGZvciBpIGluICQoc2VxIFxcXCIke0JVTEtfS0VZU31cXFwiKVxcbitcXHRkb1xcbitcXHRcXHRybWRpciBcXFwiJHtVU0VSREFUQV9ESVJ9L2J1bGske2l9XFxcIlxcbitcXHRkb25lXFxuK31cXG4rXFxuKyMgPT09PT09PT09PSAjXFxuKyMgU3RhcnQgaGVyZSAjXFxuKyMgPT09PT09PT09PSAjXFxuK1xcbittb2Rwcm9iZSBuZXRkZXZzaW0gMlxcdTAwM2UgL2Rldi9udWxsIHx8IHRydWVcXG4rbW9kcHJvYmUgbmV0Y29uc29sZSAyXFx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxcbitcXG4rSVBfVkVSU0lPTj1cXFwiaXB2NFxcXCJcXG4rIyBUaGUgY29udGVudCBvZiBrbXNnIHdpbGwgYmUgc2F2ZWQgdG8gdGhlIGZvbGxvd2luZyBmaWxlXFxuK09VVFBVVF9GSUxFPVxcXCIvdG1wLyR7VEFSR0VUfVxcXCJcXG4rXFxuKyMgQ2hlY2sgZm9yIGJhc2ljIHN5c3RlbSBkZXBlbmRlbmN5IGFuZCBleGl0IGlmIG5vdCBmb3VuZFxcbitjaGVja19mb3JfZGVwZW5kZW5jaWVzXFxuKyMgU2V0IGN1cnJlbnQgbG9nbGV2ZWwgdG8gS0VSTl9JTkZPKDYpLCBhbmQgZGVmYXVsdCB0byBLRVJOX05PVElDRSg1KVxcbitlY2hvIFxcXCI2IDVcXFwiIFxcdTAwM2UgL3Byb2Mvc3lzL2tlcm5lbC9wcmludGtcXG4rIyBSZW1vdmUgdGhlIG5hbWVzcGFjZSwgaW50ZXJmYWNlcyBhbmQgbmV0Y29uc29sZSB0YXJnZXQgb24gZXhpdFxcbit0cmFwIGNsZWFudXAgRVhJVFxcbisjIENyZWF0ZSBvbmUgbmFtZXNwYWNlIGFuZCB0d28gaW50ZXJmYWNlc1xcbitzZXRfbmV0d29yayBcXFwiJHtJUF9WRVJTSU9OfVxcXCJcXG4rIyBDcmVhdGUgYSBkeW5hbWljIHRhcmdldCBmb3IgbmV0Y29uc29sZVxcbitjcmVhdGVfZHluYW1pY190YXJnZXRcXG4rXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyMgVEVTVCAjMVxcbisjIEEgdmFsdWUgd3JpdHRlbiB0byBjb25maWdmcyByZWFjaGVzIHRoZSBkZXN0aW5hdGlvblxcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbit3cml0ZV9rZXkgXFxcIiR7VVNFUkRBVEFfS0VZfVxcXCIgXFxcImZpcnN0XFxcIlxcbitzZW5kX2FuZF9jYXB0dXJlXFxuK2V4cGVjdF9pbl9tc2cgXFxcIiR7VVNFUkRBVEFfS0VZfT1maXJzdFxcXCJcXG4rXFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyMgVEVTVCAjMlxcbisjIFVwZGF0aW5nIHRoZSB2YWx1ZSByZXBsYWNlcyB0aGUgcHJldmlvdXMgcGF5bG9hZFxcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbit3cml0ZV9rZXkgXFxcIiR7VVNFUkRBVEFfS0VZfVxcXCIgXFxcInNlY29uZFxcXCJcXG4rc2VuZF9hbmRfY2FwdHVyZVxcbitleHBlY3RfaW5fbXNnIFxcXCIke1VTRVJEQVRBX0tFWX09c2Vjb25kXFxcIlxcbitleHBlY3Rfbm90X2luX21zZyBcXFwiJHtVU0VSREFUQV9LRVl9PWZpcnN0XFxcIlxcbitcXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rIyBURVNUICMzXFxuKyMgQ2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeVxcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitlY2hvIFxcdTAwM2UgXFxcIiR7VVNFUkRBVEFfRElSfS8ke1VTRVJEQVRBX0tFWX0vdmFsdWVcXFwiXFxuK3NlbmRfYW5kX2NhcHR1cmVcXG4rZXhwZWN0X25vdF9pbl9tc2cgXFxcIiR7VVNFUkRBVEFfS0VZfT1cXFwiXFxuK1xcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbisjIFRFU1QgIzRcXG4rIyBSZW1vdmluZyB0aGUga2V5IGRyb3BzIHRoZSBlbnRyeVxcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbit3cml0ZV9rZXkgXFxcIiR7VVNFUkRBVEFfS0VZfVxcXCIgXFxcInRoaXJkXFxcIlxcbitybWRpciBcXFwiJHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfVxcXCJcXG4rc2VuZF9hbmRfY2FwdHVyZVxcbitleHBlY3Rfbm90X2luX21zZyBcXFwiJHtVU0VSREFUQV9LRVl9PVxcXCJcXG4rcm0gXFxcIiR7T1VUUFVUX0ZJTEV9XFxcIlxcbitcXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rIyBURVNUICM1XFxuKyMgVG9ydHVyZSB0aGUgcGF5bG9hZCB3aGlsZSBtZXNzYWdlcyBhcmUgYmVpbmcgc2VudCxcXG4rIyBmaXJzdCB1bmZyYWdtZW50ZWQgYW5kIHRoZW4gZnJhZ21lbnRlZFxcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbit3cml0ZV9rZXkgXFxcIiR7Q0hVUk5fS0VZfVxcXCIgXFxcIiR7VVNFUkRBVEFfVkFMVUV9XFxcIlxcbitydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xcbitcXG4rY3JlYXRlX2J1bGtfa2V5c1xcbitydW5fd29ya2VycyBjaHVybl92YWx1ZSBjaHVybl9rZXkgc2VuZF9tZXNzYWdlc1xcbitkZWxldGVfYnVsa19rZXlzXFxuK1xcbitleGl0IFxcXCIke2tzZnRfcGFzc31cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjE5OjM2LjE2NTcyOTU4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk2MDg2MjM0MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1cGRhdGVfdXNlcmRhdGFcIixcbiAgICBcInNlbmRfZXh0X21zZ191ZHBcIixcbiAgICBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICAgIFwidXNlcmRhdHVtX2Ryb3BcIixcbiAgICBcIm5ldGNvbnNvbGVfd3JpdGVfZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIGB1c2VyZGF0YWAgcGF5bG9hZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEl0IG1vZGlmaWVzIGhvdyB1c2VyZGF0YSBpcyB1cGRhdGVkIHZpYSBjb25maWdmcyBhbmQgaG93IGl0IGlzIHJlYWQgZHVyaW5nIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMpIHRoYXQgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24gaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIGNyYXNoZXMgdW5kZXIgY29uY3VycmVudCBjb25maWdmcyB1cGRhdGVzIGFuZCBjb25zb2xlIHdyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWZmMTEwY2ZhMWU0YWE2NDlkYWFmMjViMGNiYTRjOWQ0MTgzYjRlN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTI6MTk6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbmluZGV4IDg2MjAwMWQwOWFhODQuLjE0MDkyZmIxNWY2ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuQEAgLTEzNSwxMyArMTM1LDI3IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHtcbiBcdFNUQVRFX0RFQUNUSVZBVEVELFxuIH07XG4gXG4rLyoqXG4rICogc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgLSBGb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZCBvZiBhIHRhcmdldC5cbisgKiBAcmN1Olx0VXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLlxuKyAqIEBsZW5ndGg6XHRMZW5ndGggb2YgQGRhdGEsIGV4Y2x1ZGluZyB0aGUgTlVMIHRlcm1pbmF0b3IuXG4rICogQGRhdGE6XHRGb3JtYXR0ZWQgXCIga2V5PXZhbHVlXFxuXCIgZW50cmllcywgTlVMIHRlcm1pbmF0ZWQuXG4rICpcbisgKiBJbW11dGFibGUgb25jZSBwdWJsaXNoZWQsIHNvIHRoZSB0cmFuc21pdCBwYXRoIG5ldmVyIG9ic2VydmVzIEBkYXRhIGFuZFxuKyAqIEBsZW5ndGggZGlzYWdyZWVpbmcuXG4rICovXG4rc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuK1x0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbitcdHNpemVfdFx0XHRcdGxlbmd0aDtcbitcdGNoYXJcdFx0XHRkYXRhW107XG4rfTtcbitcbiAvKipcbiAgKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cbiAgKiBAbGlzdDpcdExpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0LlxuICAqIEBncm91cDpcdExpbmtzIHVzIGludG8gdGhlIGNvbmZpZ2ZzIHN1YnN5c3RlbSBoaWVyYXJjaHkuXG4gICogQHVzZXJkYXRhX2dyb3VwOlx0TGlua3MgdG8gdGhlIHVzZXJkYXRhIGNvbmZpZ2ZzIGhpZXJhcmNoeVxuLSAqIEB1c2VyZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuLSAqIEB1c2VyZGF0YV9sZW5ndGg6XHRTdHJpbmcgbGVuZ3RoIG9mIHVzZXJkYXRhLlxuKyAqIEB1c2VyZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZC4gUkNVIHByb3RlY3RlZC5cbiAgKiBAc3lzZGF0YTpcdFx0Q2FjaGVkLCBmb3JtYXR0ZWQgc3RyaW5nIG9mIGFwcGVuZFxuICAqIEBzeXNkYXRhX2ZpZWxkczpcdFN5c2RhdGEgZmVhdHVyZXMgZW5hYmxlZC5cbiAgKiBAbXNnY291bnRlcjpcdE1lc3NhZ2Ugc2VudCBjb3VudGVyLlxuQEAgLTE3Niw4ICsxOTAsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuICNpZmRlZlx0Q09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3RydWN0IGNvbmZpZ19ncm91cFx0Z3JvdXA7XG4gXHRzdHJ1Y3QgY29uZmlnX2dyb3VwXHR1c2VyZGF0YV9ncm91cDtcbi1cdGNoYXJcdFx0XHQqdXNlcmRhdGE7XG4tXHRzaXplX3RcdFx0XHR1c2VyZGF0YV9sZW5ndGg7XG4rXHRzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSBfX3JjdSAqdXNlcmRhdGE7XG4gXHRjaGFyXHRcdFx0c3lzZGF0YVtNQVhfRVhUUkFEQVRBX0VOVFJZX0xFTiAqIE1BWF9TWVNEQVRBX0lURU1TXTtcbiBcbiBcdC8qIGJpdC13aXNlIHdpdGggc3lzZGF0YV9mZWF0dXJlIGJpdHMgKi9cbkBAIC0xMDU5LDEyICsxMDcyLDExIEBAIHN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcbiBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbitcdHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICpuZXcgPSBOVUxMO1xuK1x0c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKm9sZDtcbiBcdHN0cnVjdCB1c2VyZGF0dW0gKnVkbV9pdGVtO1xuIFx0c3RydWN0IGNvbmZpZ19pdGVtICppdGVtO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XG4tXHRjaGFyICpvbGRfYnVmID0gTlVMTDtcbi1cdGNoYXIgKm5ld19idWYgPSBOVUxMO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBvZmZzZXQgPSAwO1xuIFx0aW50IGxlbjtcbiBcbkBAIC0xMDc2LDggKzEwODgsOCBAQCBzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFxuIFx0LyogQWxsb2NhdGUgbmV3IGJ1ZmZlciAqL1xuIFx0aWYgKGxlbikge1xuLVx0XHRuZXdfYnVmID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTtcbi1cdFx0aWYgKCFuZXdfYnVmKVxuK1x0XHRuZXcgPSBrbWFsbG9jX2ZsZXgoKm5ldywgZGF0YSwgbGVuICsgMSk7XG4rXHRcdGlmICghbmV3KVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuQEAgLTEwODcsMjIgKzEwOTksMjEgQEAgc3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdFx0dWRtX2l0ZW0gPSB0b191c2VyZGF0dW0oaXRlbSk7XG4gXHRcdC8qIFNraXAgdXNlcmRhdGEgd2l0aCBubyB2YWx1ZSBzZXQgKi9cbiBcdFx0aWYgKHVkbV9pdGVtLVx1MDAzZXZhbHVlWzBdKSB7XG4tXHRcdFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcdTAwMjZuZXdfYnVmW29mZnNldF0sIGxlbiArIDEgLSBvZmZzZXQsXG4rXHRcdFx0b2Zmc2V0ICs9IHNjbnByaW50ZihcdTAwMjZuZXctXHUwMDNlZGF0YVtvZmZzZXRdLFxuK1x0XHRcdFx0XHQgICAgbGVuICsgMSAtIG9mZnNldCxcbiBcdFx0XHRcdFx0ICAgIFwiICVzPSVzXFxuXCIsIGl0ZW0tXHUwMDNlY2lfbmFtZSxcbiBcdFx0XHRcdFx0ICAgIHVkbV9pdGVtLVx1MDAzZXZhbHVlKTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0V0FSTl9PTl9PTkNFKG9mZnNldCAhPSBsZW4pO1xuK1x0aWYgKG5ldylcbitcdFx0bmV3LVx1MDAzZWxlbmd0aCA9IG9mZnNldDtcbiBcbi1cdC8qIFN3aXRjaCB0byBuZXcgYnVmZmVyIGFuZCBmcmVlIG9sZCBidWZmZXIgKi9cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbi1cdG9sZF9idWYgPSBudC1cdTAwM2V1c2VyZGF0YTtcbi1cdG50LVx1MDAzZXVzZXJkYXRhID0gbmV3X2J1Zjtcbi1cdG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aCA9IG9mZnNldDtcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpO1xuLVxuLVx0a2ZyZWUob2xkX2J1Zik7XG4rXHQvKiBXcml0ZXJzIGFyZSBzZXJpYWxpemVkIGJ5IGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleC4gKi9cbitcdG9sZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIobnQtXHUwMDNldXNlcmRhdGEsIG5ldyxcbitcdFx0XHRcdCAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmR5bmFtaWNfbmV0Y29uc29sZV9tdXRleCkpO1xuK1x0a2ZyZWVfcmN1KG9sZCwgcmN1KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMzkyLDcgKzE0MDMsNyBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0a2ZyZWUobnQtXHUwMDNldXNlcmRhdGEpO1xuK1x0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKG50LVx1MDAzZXVzZXJkYXRhKSk7XG4gXHRrZnJlZShudCk7XG4gfVxuIFxuQEAgLTE5MjYsMTQgKzE5MzcsMTMgQEAgc3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0XHRcdCAgICAgIGludCBtc2dfbGVuLFxuLVx0XHRcdFx0ICAgICAgaW50IHJlbGVhc2VfbGVuKVxuK1x0XHRcdFx0ICAgICAgaW50IHJlbGVhc2VfbGVuLFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgKnVzZXJkYXRhKVxuIHtcbi1cdGNvbnN0IGNoYXIgKnVzZXJkYXRhID0gTlVMTDtcbiBcdGNvbnN0IGNoYXIgKnN5c2RhdGEgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqcmVsZWFzZTtcbiBcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuLVx0dXNlcmRhdGEgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGEgPSBudC1cdTAwM2VzeXNkYXRhO1xuICNlbmRpZlxuIFxuQEAgLTE5NTAsNyArMTk2MCw3IEBAIHN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGlmICh1c2VyZGF0YSlcbiBcdFx0bXNnX2xlbiArPSBzY25wcmludGYoXHUwMDI2bnQtXHUwMDNlYnVmW21zZ19sZW5dLFxuIFx0XHRcdFx0ICAgICBzaXplb2YobnQtXHUwMDNlYnVmKSAtIG1zZ19sZW4sIFwiJXNcIixcbi1cdFx0XHRcdCAgICAgdXNlcmRhdGEpO1xuK1x0XHRcdFx0ICAgICB1c2VyZGF0YS1cdTAwM2VkYXRhKTtcbiBcbiBcdGlmIChzeXNkYXRhKVxuIFx0XHRtc2dfbGVuICs9IHNjbnByaW50ZihcdTAwMjZudC1cdTAwM2VidWZbbXNnX2xlbl0sXG5AQCAtMTk3MCw3ICsxOTgwLDggQEAgc3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxuLVx0XHRcdFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuKVxuK1x0XHRcdFx0IGludCBtc2dib2R5X2xlbiwgaW50IHN5c2RhdGFfbGVuLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YSlcbiB7XG4gXHRjb25zdCBjaGFyICp1c2VyZGF0YV9wdHIgPSBOVUxMO1xuIFx0Y29uc3QgY2hhciAqc3lzZGF0YV9wdHIgPSBOVUxMO1xuQEAgLTE5ODEsMTIgKzE5OTIsMTIgQEAgc3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdGludCB1c2VyZGF0YV9sZW4gPSAwO1xuIFxuICNpZmRlZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHR1c2VyZGF0YV9wdHIgPSBudC1cdTAwM2V1c2VyZGF0YTtcbiBcdHN5c2RhdGFfcHRyID0gbnQtXHUwMDNlc3lzZGF0YTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbiAjZW5kaWZcbi1cdGlmIChXQVJOX09OX09OQ0UoIXVzZXJkYXRhX3B0ciBcdTAwMjZcdTAwMjYgdXNlcmRhdGFfbGVuICE9IDApKVxuLVx0XHRyZXR1cm47XG4rXHRpZiAodXNlcmRhdGEpIHtcbitcdFx0dXNlcmRhdGFfcHRyID0gdXNlcmRhdGEtXHUwMDNlZGF0YTtcbitcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuK1x0fVxuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghc3lzZGF0YV9wdHIgXHUwMDI2XHUwMDI2IHN5c2RhdGFfbGVuICE9IDApKVxuIFx0XHRyZXR1cm47XG5AQCAtMjA2Myw3ICsyMDc0LDggQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0XHRcdFx0Y29uc3QgY2hhciAqbXNnLFxuIFx0XHRcdFx0aW50IG1zZ19sZW4sXG4gXHRcdFx0XHRpbnQgcmVsZWFzZV9sZW4sXG4tXHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4pXG4rXHRcdFx0XHRpbnQgc3lzZGF0YV9sZW4sXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXG4ge1xuIFx0aW50IGhlYWRlcl9sZW4sIG1zZ2JvZHlfbGVuO1xuIFx0Y29uc3QgY2hhciAqbXNnYm9keTtcbkBAIC0yMDkyLDcgKzIxMDQsNyBAQCBzdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHQgKiB3aWxsIGJlIHJlcGxhY2VkXG4gXHQgKi9cbiBcdHNlbmRfZnJhZ21lbnRlZF9ib2R5KG50LCBtc2dib2R5LCBoZWFkZXJfbGVuLCBtc2dib2R5X2xlbixcbi1cdFx0XHQgICAgIHN5c2RhdGFfbGVuKTtcbitcdFx0XHQgICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gfVxuIFxuIC8qKlxuQEAgLTIxMDcsMjUgKzIxMTksMzMgQEAgc3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIHN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcbiB7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEgPSBOVUxMO1xuIFx0aW50IHVzZXJkYXRhX2xlbiA9IDA7XG4gXHRpbnQgcmVsZWFzZV9sZW4gPSAwO1xuIFx0aW50IHN5c2RhdGFfbGVuID0gMDtcbiBcdGludCBsZW47XG4gXG4rXHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cbitcdHJjdV9yZWFkX2xvY2soKTtcbitcbiAjaWZkZWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQ1xuIFx0c3lzZGF0YV9sZW4gPSBwcmVwYXJlX3N5c2RhdGEobnQsIHdjdHh0KTtcbi1cdHVzZXJkYXRhX2xlbiA9IG50LVx1MDAzZXVzZXJkYXRhX2xlbmd0aDtcbitcdHVzZXJkYXRhID0gcmN1X2RlcmVmZXJlbmNlKG50LVx1MDAzZXVzZXJkYXRhKTtcbitcdGlmICh1c2VyZGF0YSlcbitcdFx0dXNlcmRhdGFfbGVuID0gdXNlcmRhdGEtXHUwMDNlbGVuZ3RoO1xuICNlbmRpZlxuIFx0aWYgKG50LVx1MDAzZXJlbGVhc2UpXG4gXHRcdHJlbGVhc2VfbGVuID0gc3RybGVuKGluaXRfdXRzbmFtZSgpLVx1MDAzZXJlbGVhc2UpICsgMTtcbiBcbiBcdGxlbiA9IHdjdHh0LVx1MDAzZWxlbiArIHJlbGVhc2VfbGVuICsgc3lzZGF0YV9sZW4gKyB1c2VyZGF0YV9sZW47XG4gXHRpZiAobGVuIFx1MDAzYz0gTUFYX1BSSU5UX0NIVU5LKVxuLVx0XHRyZXR1cm4gc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtXHUwMDNlb3V0YnVmLFxuLVx0XHRcdFx0XHRcdCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuKTtcbitcdFx0c2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sXG4rXHRcdFx0XHRcdCAgcmVsZWFzZV9sZW4sIHVzZXJkYXRhKTtcbitcdGVsc2VcbitcdFx0c2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxuK1x0XHRcdFx0ICAgIHN5c2RhdGFfbGVuLCB1c2VyZGF0YSk7XG4gXG4tXHRyZXR1cm4gc2VuZF9tc2dfZnJhZ21lbnRlZChudCwgd2N0eHQtXHUwMDNlb3V0YnVmLCB3Y3R4dC1cdTAwM2VsZW4sIHJlbGVhc2VfbGVuLFxuLVx0XHRcdFx0ICAgc3lzZGF0YV9sZW4pO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5AQCAtMjM1Nyw3ICsyMzc3LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9wYXJhbV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bnQtXHUwMDNlcmVzdW1lX3dxKTtcbiBcdG5ldHBvbGxfY2xlYW51cChcdTAwMjZudC1cdTAwM2VucCk7XG4gI2lmZGVmXHRDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDXG4tXHRrZnJlZShudC1cdTAwM2V1c2VyZGF0YSk7XG4rXHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobnQtXHUwMDNldXNlcmRhdGEpKTtcbiAjZW5kaWZcbiBcdGtmcmVlKG50KTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvbmV0Y29uc29sZS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUvTWFrZWZpbGVcbmluZGV4IGI1NmM3MGI3ZTI3NDIuLmYwNjc0YzAwMTdmYzQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL01ha2VmaWxlXG5AQCAtMTMsNiArMTMsNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRuZXRjb25zX3Jlc3VtZS5zaCBcXFxuIFx0bmV0Y29uc19zeXNkYXRhLnNoIFxcXG4gXHRuZXRjb25zX3RvcnR1cmUuc2ggXFxcbitcdG5ldGNvbnNfdXNlcmRhdGEuc2ggXFxcbiAjIGVuZCBvZiBURVNUX1BST0dTXG4gXG4gaW5jbHVkZSAuLi8uLi8uLi9saWIubWtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xMTM5MDNmNGNlMWM1XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9uZXRjb25zb2xlL25ldGNvbnNfdXNlcmRhdGEuc2hcbkBAIC0wLDAgKzEsMjI5IEBAXG4rIyEvdXNyL2Jpbi9lbnYgYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjIEV4ZXJjaXNlIHRoZSBuZXRjb25zb2xlIHVzZXJkYXRhIHBheWxvYWQuXG4rI1xuKyMgVGhlIGZpcnN0IHBhcnQgY2hlY2tzIHRoYXQgdGhlIHBheWxvYWQgdGhlIHRhcmdldCB0cmFuc21pdHMgZm9sbG93cyB3aGF0XG4rIyBjb25maWdmcyBzYXlzOiBhIHZhbHVlIHNob3dzIHVwIGluIHRoZSBuZXh0IG1lc3NhZ2UsIGFuIHVwZGF0ZSByZXBsYWNlcyB0aGVcbisjIHByZXZpb3VzIG9uZSwgY2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeSwgYW5kIHNvIGRvZXMgcmVtb3ZpbmcgdGhlXG4rIyBrZXkuXG4rI1xuKyMgVGhlIHNlY29uZCBwYXJ0IHJld3JpdGVzIHZhbHVlcywgY3JlYXRlcyBhbmQgZGVsZXRlcyBrZXlzLCBhbmQgY2xlYXJzIHRoZVxuKyMgcGF5bG9hZCBlbnRpcmVseSB3aGlsZSBtZXNzYWdlcyBhcmUgYmVpbmcgc2VudCwgc28gdGhlIHRyYW5zbWl0IHBhdGgga2VlcHNcbisjIHBpY2tpbmcgdXAgcGF5bG9hZHMgdGhhdCBhcmUgYmVpbmcgcmVwbGFjZWQgdW5kZXJuZWF0aCBpdC4gSXQgcnVucyB0d2ljZSxcbisjIG9uY2Ugd2l0aCBhIHBheWxvYWQgc21hbGwgZW5vdWdoIHRvIGZpdCBpbiBhIHNpbmdsZSBwYWNrZXQgYW5kIG9uY2UgbGFyZ2VcbisjIGVub3VnaCB0byBiZSBmcmFnbWVudGVkLlxuKyNcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rXG4rc2V0IC1ldW8gcGlwZWZhaWxcbitcbitTQ1JJUFRESVI9JChkaXJuYW1lIFwiJChyZWFkbGluayAtZSBcIiR7QkFTSF9TT1VSQ0VbMF19XCIpXCIpXG4rXG4rc291cmNlIFwiJHtTQ1JJUFRESVJ9XCIvLi4vbGliL3NoL2xpYl9uZXRjb25zLnNoXG4rXG4rIyBOdW1iZXIgb2YgdGltZXMgZWFjaCB0b3J0dXJlIHdvcmtlciBsb29wc1xuK0lURVJBVElPTlM9JHsxOi0yMDB9XG4rXG4rIyBLZXlzIG93bmVkIGJ5IGVhY2ggdG9ydHVyZSB3b3JrZXIuIFdvcmtlcnMgZG8gbm90IHNoYXJlIGtleXMsIHNvIGEgZmFpbGluZ1xuKyMgY29uZmlnZnMgb3BlcmF0aW9uIG1lYW5zIGEgcmVhbCBwcm9ibGVtIGFuZCBub3QgYSBsb3N0IHJhY2UuXG4rQ0hVUk5fS0VZPVwiY2h1cm5rZXlcIlxuK1RSQU5TSUVOVF9LRVk9XCJ0cmFuc2llbnRrZXlcIlxuKyMgTnVtYmVyIG9mIGtleXMgdXNlZCB0byBwdXNoIGEgbWVzc2FnZSBwYXN0IE1BWF9QUklOVF9DSFVOS1xuK0JVTEtfS0VZUz04XG4rXG4rVVNFUkRBVEFfRElSPVwiJHtORVRDT05TX1BBVEh9L3VzZXJkYXRhXCJcbisjIFZhbHVlcyBhcmUgY2FwcGVkIGF0IE1BWF9FWFRSQURBVEFfVkFMVUVfTEVOKDIwMCkgYnl0ZXMsIHNvICR7QlVMS19LRVlTfVxuKyMgZW50cmllcyBvZiB0aGlzIHNpemUgYXJlIGVub3VnaCB0byBmb3JjZSBmcmFnbWVudGF0aW9uXG4rTE9OR19WQUxVRT0kKHByaW50ZiAtLSAndiUuMHMnIHsxLi4xOTB9KVxuK1xuK2Z1bmN0aW9uIHdyaXRlX2tleSgpIHtcbitcdGxvY2FsIEtFWT1cIiR7MX1cIlxuK1x0bG9jYWwgVkFMVUU9XCIkezJ9XCJcbitcbitcdG1rZGlyIC1wIFwiJHtVU0VSREFUQV9ESVJ9LyR7S0VZfVwiXG4rXHRlY2hvIFwiJHtWQUxVRX1cIiBcdTAwM2UgXCIke1VTRVJEQVRBX0RJUn0vJHtLRVl9L3ZhbHVlXCJcbit9XG4rXG4rIyBTZW5kIGEgc2luZ2xlIG1lc3NhZ2UgYW5kIGNhcHR1cmUgaXQgb24gdGhlIGRlc3RpbmF0aW9uIGludGVyZmFjZVxuK2Z1bmN0aW9uIHNlbmRfYW5kX2NhcHR1cmUoKSB7XG4rXHRybSAtZiBcIiR7T1VUUFVUX0ZJTEV9XCJcbitcbitcdGxpc3Rlbl9wb3J0X2FuZF9zYXZlX3RvIFwiJHtPVVRQVVRfRklMRX1cIiBcdTAwMjZcbitcdHdhaXRfZm9yX3BvcnQgXCIke05BTUVTUEFDRX1cIiBcIiR7UE9SVH1cIiBcIiR7SVBfVkVSU0lPTn1cIlxuK1x0ZWNobyBcIiR7TVNHfTogJHtUQVJHRVR9XCIgXHUwMDNlIC9kZXYva21zZ1xuK1x0YnVzeXdhaXQgXCIke0JVU1lXQUlUX1RJTUVPVVR9XCIgdGVzdCAtcyBcIiR7T1VUUFVUX0ZJTEV9XCIgfHwgdHJ1ZVxuK1x0cGtpbGxfc29jYXRcbitcdHZhbGlkYXRlX21zZyBcIiR7T1VUUFVUX0ZJTEV9XCJcbit9XG4rXG4rZnVuY3Rpb24gZXhwZWN0X2luX21zZygpIHtcbitcdGxvY2FsIFdBTlRFRD1cIiR7MX1cIlxuK1xuK1x0aWYgISBncmVwIC1xIC0tIFwiJHtXQU5URUR9XCIgXCIke09VVFBVVF9GSUxFfVwiOyB0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiAnJHtXQU5URUR9JyBub3QgZm91bmQgaW4gJHtPVVRQVVRfRklMRX1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGNhdCBcIiR7T1VUUFVUX0ZJTEV9XCIgXHUwMDNlXHUwMDI2MlxuK1x0XHRleGl0IFwiJHtrc2Z0X2ZhaWx9XCJcbitcdGZpXG4rfVxuK1xuK2Z1bmN0aW9uIGV4cGVjdF9ub3RfaW5fbXNnKCkge1xuK1x0bG9jYWwgVU5XQU5URUQ9XCIkezF9XCJcbitcbitcdGlmIGdyZXAgLXEgLS0gXCIke1VOV0FOVEVEfVwiIFwiJHtPVVRQVVRfRklMRX1cIjsgdGhlblxuK1x0XHRlY2hvIFwiRkFJTDogJyR7VU5XQU5URUR9JyBmb3VuZCBpbiAke09VVFBVVF9GSUxFfVwiIFx1MDAzZVx1MDAyNjJcbitcdFx0Y2F0IFwiJHtPVVRQVVRfRklMRX1cIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgXCIke2tzZnRfZmFpbH1cIlxuK1x0Zmlcbit9XG4rXG4rIyBFdmVyeSB3cml0ZSBwdWJsaXNoZXMgYSBuZXcgcGF5bG9hZCBhbmQgZnJlZXMgdGhlIHByZXZpb3VzIG9uZS4gQW4gZW1wdHlcbisjIHZhbHVlIGlzIHNraXBwZWQgd2hlbiB0aGUgcGF5bG9hZCBpcyBmb3JtYXR0ZWQsIHNvIHRoaXMgYWxzbyBkcml2ZXMgdGhlXG4rIyB0YXJnZXQgdGhyb3VnaCBoYXZpbmcgbm8gcGF5bG9hZCBhdCBhbGwuXG4rZnVuY3Rpb24gY2h1cm5fdmFsdWUoKSB7XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSBcIiR7SVRFUkFUSU9OU31cIilcbitcdGRvXG4rXHRcdGVjaG8gXCJ2YWx1ZSR7aX1cIiBcdTAwM2UgXCIke1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXCJcbitcdFx0ZWNobyBcdTAwM2UgXCIke1VTRVJEQVRBX0RJUn0vJHtDSFVSTl9LRVl9L3ZhbHVlXCJcbitcdGRvbmVcbit9XG4rXG4rIyBDcmVhdGUgYW5kIGRlbGV0ZSBhIGtleSB1bmRlcm5lYXRoIHRoZSBzZW5kZXJcbitmdW5jdGlvbiBjaHVybl9rZXkoKSB7XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSBcIiR7SVRFUkFUSU9OU31cIilcbitcdGRvXG4rXHRcdG1rZGlyIFwiJHtVU0VSREFUQV9ESVJ9LyR7VFJBTlNJRU5UX0tFWX1cIlxuK1x0XHRlY2hvIFwidHJhbnNpZW50JHtpfVwiIFx1MDAzZSBcIiR7VVNFUkRBVEFfRElSfS8ke1RSQU5TSUVOVF9LRVl9L3ZhbHVlXCJcbitcdFx0cm1kaXIgXCIke1VTRVJEQVRBX0RJUn0vJHtUUkFOU0lFTlRfS0VZfVwiXG4rXHRkb25lXG4rfVxuK1xuKyMgS2VlcCB0aGUgdHJhbnNtaXQgcGF0aCBidXN5IHdoaWxlIHRoZSBwYXlsb2FkIGlzIGJlaW5nIHJlcGxhY2VkXG4rZnVuY3Rpb24gc2VuZF9tZXNzYWdlcygpIHtcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIFwiJHtJVEVSQVRJT05TfVwiKVxuK1x0ZG9cbitcdFx0ZWNobyBcIiR7TVNHfTogJHtUQVJHRVR9ICR7aX1cIiBcdTAwM2UgL2Rldi9rbXNnXG4rXHRkb25lXG4rfVxuK1xuKyMgUnVuIHRoZSB3b3JrZXJzIGNvbmN1cnJlbnRseSBhbmQgZmFpbCBpZiBhbnkgb2YgdGhlbSBoaXRzIGFuIGVycm9yXG4rZnVuY3Rpb24gcnVuX3dvcmtlcnMoKSB7XG4rXHRsb2NhbCBQSURTPSgpXG4rXHRsb2NhbCBXT1JLRVJcbitcdGxvY2FsIFJFVD0wXG4rXHRsb2NhbCBQSURcbitcbitcdGZvciBXT1JLRVIgaW4gXCIkQFwiXG4rXHRkb1xuK1x0XHRcIiR7V09SS0VSfVwiIFx1MDAyNlxuK1x0XHRQSURTKz0oXCIkIVwiKVxuK1x0ZG9uZVxuK1xuK1x0IyBSZWFwIGV2ZXJ5IHdvcmtlciBiZWZvcmUgcmVwb3J0aW5nIGEgZmFpbHVyZSwgb3RoZXJ3aXNlIGEgc3Vydml2aW5nXG4rXHQjIHdvcmtlciBrZWVwcyB3cml0aW5nIHRvIGNvbmZpZ2ZzIHdoaWxlIHRoZSBleGl0IHRyYXAgY2xlYW5zIGl0IHVwLlxuK1x0Zm9yIFBJRCBpbiBcIiR7UElEU1tAXX1cIlxuK1x0ZG9cbitcdFx0d2FpdCBcIiR7UElEfVwiIHx8IFJFVD0xXG4rXHRkb25lXG4rXG4rXHRpZiBbWyBcIiR7UkVUfVwiIC1uZSAwIF1dXG4rXHR0aGVuXG4rXHRcdGVjaG8gXCJGQUlMOiB1c2VyZGF0YSB0b3J0dXJlIHdvcmtlciBmYWlsZWRcIiBcdTAwM2VcdTAwMjYyXG4rXHRcdGV4aXQgXCIke2tzZnRfZmFpbH1cIlxuK1x0Zmlcbit9XG4rXG4rZnVuY3Rpb24gY3JlYXRlX2J1bGtfa2V5cygpIHtcbitcdGxvY2FsIGlcbitcbitcdGZvciBpIGluICQoc2VxIFwiJHtCVUxLX0tFWVN9XCIpXG4rXHRkb1xuK1x0XHR3cml0ZV9rZXkgXCJidWxrJHtpfVwiIFwiJHtMT05HX1ZBTFVFfVwiXG4rXHRkb25lXG4rfVxuK1xuK2Z1bmN0aW9uIGRlbGV0ZV9idWxrX2tleXMoKSB7XG4rXHRsb2NhbCBpXG4rXG4rXHRmb3IgaSBpbiAkKHNlcSBcIiR7QlVMS19LRVlTfVwiKVxuK1x0ZG9cbitcdFx0cm1kaXIgXCIke1VTRVJEQVRBX0RJUn0vYnVsayR7aX1cIlxuK1x0ZG9uZVxuK31cbitcbisjID09PT09PT09PT0gI1xuKyMgU3RhcnQgaGVyZSAjXG4rIyA9PT09PT09PT09ICNcbitcbittb2Rwcm9iZSBuZXRkZXZzaW0gMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK21vZHByb2JlIG5ldGNvbnNvbGUgMlx1MDAzZSAvZGV2L251bGwgfHwgdHJ1ZVxuK1xuK0lQX1ZFUlNJT049XCJpcHY0XCJcbisjIFRoZSBjb250ZW50IG9mIGttc2cgd2lsbCBiZSBzYXZlZCB0byB0aGUgZm9sbG93aW5nIGZpbGVcbitPVVRQVVRfRklMRT1cIi90bXAvJHtUQVJHRVR9XCJcbitcbisjIENoZWNrIGZvciBiYXNpYyBzeXN0ZW0gZGVwZW5kZW5jeSBhbmQgZXhpdCBpZiBub3QgZm91bmRcbitjaGVja19mb3JfZGVwZW5kZW5jaWVzXG4rIyBTZXQgY3VycmVudCBsb2dsZXZlbCB0byBLRVJOX0lORk8oNiksIGFuZCBkZWZhdWx0IHRvIEtFUk5fTk9USUNFKDUpXG4rZWNobyBcIjYgNVwiIFx1MDAzZSAvcHJvYy9zeXMva2VybmVsL3ByaW50a1xuKyMgUmVtb3ZlIHRoZSBuYW1lc3BhY2UsIGludGVyZmFjZXMgYW5kIG5ldGNvbnNvbGUgdGFyZ2V0IG9uIGV4aXRcbit0cmFwIGNsZWFudXAgRVhJVFxuKyMgQ3JlYXRlIG9uZSBuYW1lc3BhY2UgYW5kIHR3byBpbnRlcmZhY2VzXG4rc2V0X25ldHdvcmsgXCIke0lQX1ZFUlNJT059XCJcbisjIENyZWF0ZSBhIGR5bmFtaWMgdGFyZ2V0IGZvciBuZXRjb25zb2xlXG4rY3JlYXRlX2R5bmFtaWNfdGFyZ2V0XG4rXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisjIFRFU1QgIzFcbisjIEEgdmFsdWUgd3JpdHRlbiB0byBjb25maWdmcyByZWFjaGVzIHRoZSBkZXN0aW5hdGlvblxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rd3JpdGVfa2V5IFwiJHtVU0VSREFUQV9LRVl9XCIgXCJmaXJzdFwiXG4rc2VuZF9hbmRfY2FwdHVyZVxuK2V4cGVjdF9pbl9tc2cgXCIke1VTRVJEQVRBX0tFWX09Zmlyc3RcIlxuK1xuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rIyBURVNUICMyXG4rIyBVcGRhdGluZyB0aGUgdmFsdWUgcmVwbGFjZXMgdGhlIHByZXZpb3VzIHBheWxvYWRcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK3dyaXRlX2tleSBcIiR7VVNFUkRBVEFfS0VZfVwiIFwic2Vjb25kXCJcbitzZW5kX2FuZF9jYXB0dXJlXG4rZXhwZWN0X2luX21zZyBcIiR7VVNFUkRBVEFfS0VZfT1zZWNvbmRcIlxuK2V4cGVjdF9ub3RfaW5fbXNnIFwiJHtVU0VSREFUQV9LRVl9PWZpcnN0XCJcbitcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyMgVEVTVCAjM1xuKyMgQ2xlYXJpbmcgdGhlIHZhbHVlIGRyb3BzIHRoZSBlbnRyeVxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rZWNobyBcdTAwM2UgXCIke1VTRVJEQVRBX0RJUn0vJHtVU0VSREFUQV9LRVl9L3ZhbHVlXCJcbitzZW5kX2FuZF9jYXB0dXJlXG4rZXhwZWN0X25vdF9pbl9tc2cgXCIke1VTRVJEQVRBX0tFWX09XCJcbitcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyMgVEVTVCAjNFxuKyMgUmVtb3ZpbmcgdGhlIGtleSBkcm9wcyB0aGUgZW50cnlcbisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK3dyaXRlX2tleSBcIiR7VVNFUkRBVEFfS0VZfVwiIFwidGhpcmRcIlxuK3JtZGlyIFwiJHtVU0VSREFUQV9ESVJ9LyR7VVNFUkRBVEFfS0VZfVwiXG4rc2VuZF9hbmRfY2FwdHVyZVxuK2V4cGVjdF9ub3RfaW5fbXNnIFwiJHtVU0VSREFUQV9LRVl9PVwiXG4rcm0gXCIke09VVFBVVF9GSUxFfVwiXG4rXG4rIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisjIFRFU1QgIzVcbisjIFRvcnR1cmUgdGhlIHBheWxvYWQgd2hpbGUgbWVzc2FnZXMgYXJlIGJlaW5nIHNlbnQsXG4rIyBmaXJzdCB1bmZyYWdtZW50ZWQgYW5kIHRoZW4gZnJhZ21lbnRlZFxuKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rd3JpdGVfa2V5IFwiJHtDSFVSTl9LRVl9XCIgXCIke1VTRVJEQVRBX1ZBTFVFfVwiXG4rcnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXNcbitcbitjcmVhdGVfYnVsa19rZXlzXG4rcnVuX3dvcmtlcnMgY2h1cm5fdmFsdWUgY2h1cm5fa2V5IHNlbmRfbWVzc2FnZXNcbitkZWxldGVfYnVsa19rZXlzXG4rXG4rZXhpdCBcIiR7a3NmdF9wYXNzfVwiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoxOTozNi4xNjU3MzE4NTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTY4NjAwNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGBuZXRjb25zb2xlYC4gU3BlY2lmaWNhbGx5LCBpdCdzIG92ZXJoYXVsaW5nIGhvdyB0aGUgYHVzZXJkYXRhYCBpcyBoYW5kbGVkLCBhbmQgdGhhdCdzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgdG91Y2hlcyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBMb29rcyBsaWtlIHRoZXkncmUgZGl0Y2hpbmcgdGhlIG9sZCBgY2hhciAqdXNlcmRhdGFgIGFuZCBgc2l6ZV90IHVzZXJkYXRhX2xlbmd0aGAgZm9yIGEgYHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhYCB0aGF0J3MgUkNVLXByb3RlY3RlZC4gU21hcnQuIFRoaXMgaXMgYSBzb2xpZCBtb3ZlIHRvIGVsaW1pbmF0ZSB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlIHZ1bG5lcmFiaWxpdGllcyDigJMgZGVmaW5pdGVseSBhIHdvcnRod2hpbGUgaW1wcm92ZW1lbnQuXG5cblRoZSB1cGRhdGUgYW5kIHJlYWQgb3BlcmF0aW9ucyBhcmUgbm93IHVzaW5nIGByY3VfcmVwbGFjZV9wb2ludGVyKClgIGFuZCBga2ZyZWVfcmN1KClgLCBhbmQgYWxsIHRoZSBzZW5kIGZ1bmN0aW9ucyAoYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oKWAsIGV0Yy4pIGFyZSB0YWtpbmcgYGNvbnN0IHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhICp1c2VyZGF0YWAgYW5kIGFwcHJvcHJpYXRlbHkgd3JhcHBpbmcgdGhlIHBheWxvYWQgYWNjZXNzIHdpdGggYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAuIFRoaXMgaXMgdGV4dGJvb2sgUkNVIGltcGxlbWVudGF0aW9uLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0LWRvLiBJJ20gZ29pbmcgdG8gd2FudCB0byBtYWtlIHN1cmUgdGhpcyBpcyByb2J1c3QgYmVmb3JlIGl0IGdvZXMgbGl2ZS5cblxuVGltZSB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIGNvbmZpZyB0byByZXByb2R1Y2UgdGhpcyBhbmQgZ2V0IHRvIHRlc3RpbmcuIEkga25vdyBgQ09ORklHX05FVENPTlNPTEVgIGlzIHJlcXVpcmVkLCBhbmQgSSBzdXNwZWN0IGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCB3aWxsIGFsc28gYmUgbmVlZGVkLiBMZXQgbWUgZG91YmxlLWNoZWNrIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTEyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MTk6NDMuMTM0MzM1ODQ0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjY5NjAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUQ09OU09MRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzI3OmNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjMzNDpjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM1NTpjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1Ni1cXHRib29sIFxcXCJQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MTk6NDMuMjM3MDM3MTI0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2MzMzNDEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyB0aGUgTGFuZHNjYXBlOiBORVRDT05TT0xFIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBORVRDT05TT0xFLiBCZWZvcmUgSSBzdGFydCBhbnkgdHJvdWJsZXNob290aW5nIG9yIGRlZXBlciBhbmFseXNpcywgdW5kZXJzdGFuZGluZyB3aGF0IE5FVENPTlNPTEUgcmVsaWVzIG9uIGlzIGFic29sdXRlbHkgY3J1Y2lhbC4gSSBuZWVkIHRvIGtub3cgdGhlIHBvdGVudGlhbCBjaG9rZSBwb2ludHMsIHRoZSBvdGhlciBjb21wb25lbnRzIHdob3NlIGZhaWx1cmUgd291bGQgdGFrZSBORVRDT05TT0xFIGRvd24gd2l0aCB0aGVtLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFueSBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbGwgbmVlZCB0byBpZGVudGlmeSBub3QganVzdCB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcywgYnV0IGFsc28gdGhlIHRyYW5zaXRpdmUgb25lcyDigJMgdGhvc2UgY29tcG9uZW50cyBORVRDT05TT0xFIHJlbGllcyBvbiwgd2hpY2ggaW4gdHVybiByZWx5IG9uICpvdGhlciogdGhpbmdzLiBUaGlzIGlzIHRoZSBmaXJzdCwgZXNzZW50aWFsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjE5OjQ2LjcwMDM3NDk0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzY5ODY0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTY9bWVudWNvbmZpZyBORVRERVZJQ0VTXFxuZHJpdmVycy9uZXQvS2NvbmZpZy03LVxcdGRlZmF1bHQgeSBpZiBVTUxcXG5kcml2ZXJzL25ldC9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTktXFx0Ym9vbCBcXFwiTmV0d29yayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDE9Y29uZmlnIEJPTkRJTkdcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJCb25kaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDpcXHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NzQ9Y29uZmlnIFdJUkVHVUFSRFxcbmRyaXZlcnMvbmV0L0tjb25maWctNzUtXFx0dHJpc3RhdGUgXFxcIldpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWxcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo3NjpcXHRkZXBlbmRzIG9uIE5FVCBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy03Ny1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9OTI9Y29uZmlnIFdJUkVHVUFSRF9ERUJVR1xcbmRyaXZlcnMvbmV0L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRGVidWdnaW5nIGNoZWNrcyBhbmQgdmVyYm9zZSBtZXNzYWdlc1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjk0OlxcdGRlcGVuZHMgb24gV0lSRUdVQVJEXFxuZHJpdmVycy9uZXQvS2NvbmZpZy05NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTEwMz1jb25maWcgT1ZQTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTA0LVxcdHRyaXN0YXRlIFxcXCJPcGVuVlBOIGRhdGEgY2hhbm5lbCBvZmZsb2FkXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTA1OlxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTEwNi1cXHRzZWxlY3QgRFNUX0NBQ0hFXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTEzNj1jb25maWcgTkVUX0ZDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMzctXFx0Ym9vbCBcXFwiRmlicmUgQ2hhbm5lbCBkcml2ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjEzODpcXHRkZXBlbmRzIG9uIFNDU0kgXFx1MDAyNlxcdTAwMjYgUENJXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xMzktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0xNDk9Y29uZmlnIElGQlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTUwLVxcdHRyaXN0YXRlIFxcXCJJbnRlcm1lZGlhdGUgRnVuY3Rpb25hbCBCbG9jayBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTUxOlxcdGRlcGVuZHMgb24gTkVUX0FDVF9NSVJSRUQgfHwgTkZUX0ZXRF9ORVRERVZcXG5kcml2ZXJzL25ldC9LY29uZmlnLTE1Mi1cXHRzZWxlY3QgTkVUX1JFRElSRUNUXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTE3OT1jb25maWcgTUFDVlRBUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgwLVxcdHRyaXN0YXRlIFxcXCJNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgxOlxcdGRlcGVuZHMgb24gTUFDVkxBTlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTgyOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMTgzLVxcdHNlbGVjdCBUQVBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MTkzPWNvbmZpZyBJUFZMQU5fTDNTXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoxOTQ6XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjE5NTpcXHRkZXBlbmRzIG9uIElQVkxBTlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTk2LVxcdGRlZl9ib29sIHlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MTk5PWNvbmZpZyBJUFZMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVAtVkxBTiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjAxOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjAyLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIxNy1cXHR0cmlzdGF0ZSBcXFwiSVAtVkxBTiBiYXNlZCB0YXAgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjE4OlxcdGRlcGVuZHMgb24gSVBWTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMTk6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMjAtXFx0c2VsZWN0IFRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMjpcXHRkZXBlbmRzIG9uIElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMy1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjQ1PWNvbmZpZyBHRU5FVkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0Ni1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIEVuY2Fwc3VsYXRpb25cXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNDc6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDgtXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTI2MD1jb25maWcgQkFSRVVEUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjYxLVxcdHRyaXN0YXRlIFxcXCJCYXJlIFVEUCBFbmNhcHN1bGF0aW9uXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjYyOlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjYzLVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNzI9Y29uZmlnIEdUUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVxcdHRyaXN0YXRlIFxcXCJHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6Mjc0OlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjc1LVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0yODk9Y29uZmlnIFBGQ1BcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI5MC1cXHR0cmlzdGF0ZSBcXFwiUGFja2V0IEZvcndhcmRpbmcgQ29udHJvbCBQcm90b2NvbCAoUEZDUClcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyOTE6XFx0ZGVwZW5kcyBvbiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yOTItXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMwMj1jb25maWcgQU1UXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMDMtXFx0dHJpc3RhdGUgXFxcIkF1dG9tYXRpYyBNdWx0aWNhc3QgVHVubmVsaW5nIChBTVQpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzA0OlxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJUF9NVUxUSUNBU1RcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMwNS1cXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzI3PWNvbmZpZyBORVRDT05TT0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjgtXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjk6XFx0ZGVwZW5kcyBvbiBQUklOVEtcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTMzND1jb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiRHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgbG9nZ2luZyB0YXJnZXRzXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM2OlxcdGRlcGVuZHMgb24gTkVUQ09OU09MRSBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdGU19GUyBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzctXFx0XFx0XFx0IShORVRDT05TT0xFPXkgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlM9bSlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzQ1PWNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ2LVxcdGJvb2wgXFxcIlNldCBrZXJuZWwgZXh0ZW5kZWQgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzQ3OlxcdGRlcGVuZHMgb24gTkVUQ09OU09MRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzQ4LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNTU9Y29uZmlnIE5FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXFx0Ym9vbCBcXFwiUHJlcGVuZCBrZXJuZWwgcmVsZWFzZSB2ZXJzaW9uIGluIHRoZSBtZXNzYWdlIGJ5IGRlZmF1bHRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNTc6XFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzU4LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNzM9Y29uZmlnIE5UQl9ORVRERVZcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM3NC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBFdGhlcm5ldCBvdmVyIE5UQiBUcmFuc3BvcnRcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozNzU6XFx0ZGVwZW5kcyBvbiBOVEJfVFJBTlNQT1JUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNzYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZz0zNzc9Y29uZmlnIFJJT05FVFxcbmRyaXZlcnMvbmV0L0tjb25maWctMzc4LVxcdHRyaXN0YXRlIFxcXCJSYXBpZElPIEV0aGVybmV0IG92ZXIgbWVzc2FnaW5nIGRyaXZlciBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6Mzc5OlxcdGRlcGVuZHMgb24gUkFQSURJT1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzgwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzgxPWNvbmZpZyBSSU9ORVRfVFhfU0laRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzgyLVxcdGludCBcXFwiTnVtYmVyIG9mIG91dGJvdW5kIHF1ZXVlIGVudHJpZXNcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozODM6XFx0ZGVwZW5kcyBvbiBSSU9ORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4NC1cXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4Ny1cXHRpbnQgXFxcIk51bWJlciBvZiBpbmJvdW5kIHF1ZXVlIGVudHJpZXNcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozODg6XFx0ZGVwZW5kcyBvbiBSSU9ORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM4OS1cXHRkZWZhdWx0IFxcXCIxMjhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTM5MT1jb25maWcgVFVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjM5MzpcXHRkZXBlbmRzIG9uIElORVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5NC1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDQtXFx0dHJpc3RhdGUgXFxcIlZpcnRpbyBuZXR3b3JrIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0NTpcXHRkZXBlbmRzIG9uIFZJUlRJT1xcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ2LVxcdHNlbGVjdCBORVRfRkFJTE9WRVJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDYzPWNvbmZpZyBORVRLSVRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2NC1cXHRib29sIFxcXCJCUEYtcHJvZ3JhbW1hYmxlIG5ldHdvcmsgZGV2aWNlXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDY1OlxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ2Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTQ3Mj1jb25maWcgTkVUX1ZSRlxcbmRyaXZlcnMvbmV0L0tjb25maWctNDczLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFJvdXRpbmcgYW5kIEZvcndhcmRpbmcgKExpdGUpXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc0OlxcdGRlcGVuZHMgb24gSVBfTVVMVElQTEVfVEFCTEVTXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NzU6XFx0ZGVwZW5kcyBvbiBORVRfTDNfTUFTVEVSX0RFVlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NDc2OlxcdGRlcGVuZHMgb24gSVBWNl9NVUxUSVBMRV9UQUJMRVMgfHwgSVBWNj1uXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00NzctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00ODE9Y29uZmlnIFZTT0NLTU9OXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00ODItXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgdnNvY2sgbW9uaXRvcmluZyBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0ODM6XFx0ZGVwZW5kcyBvbiBWSE9TVF9WU09DS1xcbmRyaXZlcnMvbmV0L0tjb25maWctNDg0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDg5PWNvbmZpZyBNSElfTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00OTAtXFx0dHJpc3RhdGUgXFxcIk1ISSBuZXR3b3JrIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ5MTpcXHRkZXBlbmRzIG9uIE1ISV9CVVNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ5Mi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTU0ND1jb25maWcgWEVOX05FVERFVl9GUk9OVEVORFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTQ1LVxcdHRyaXN0YXRlIFxcXCJYZW4gbmV0d29yayBkZXZpY2UgZnJvbnRlbmQgZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ2OlxcdGRlcGVuZHMgb24gWEVOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01NDctXFx0c2VsZWN0IFhFTl9YRU5CVVNfRlJPTlRFTkRcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTYyPWNvbmZpZyBYRU5fTkVUREVWX0JBQ0tFTkRcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU2My1cXHR0cmlzdGF0ZSBcXFwiWGVuIGJhY2tlbmQgbmV0d29yayBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1NjQ6XFx0ZGVwZW5kcyBvbiBYRU5fQkFDS0VORFxcbmRyaXZlcnMvbmV0L0tjb25maWctNTY1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01ODUtXFx0dHJpc3RhdGUgXFxcIlZNd2FyZSBWTVhORVQzIGV0aGVybmV0IGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnOjU4NjpcXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBJTkVUXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODc6XFx0ZGVwZW5kcyBvbiBQQUdFX1NJWkVfTEVTU19USEFOXzY0S0JcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OC1cXHRzZWxlY3QgUEFHRV9QT09MXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTU5ND1jb25maWcgRlVKSVRTVV9FU1xcbmRyaXZlcnMvbmV0L0tjb25maWctNTk1LVxcdHRyaXN0YXRlIFxcXCJGVUpJVFNVIEV4dGVuZGVkIFNvY2tldCBOZXR3b3JrIERldmljZSBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1OTY6XFx0ZGVwZW5kcyBvbiBBQ1BJXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01OTctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxcbmRyaXZlcnMvbmV0L0tjb25maWctNjA1LVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDY6XFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA3OlxcdGRlcGVuZHMgb24gSU5FVFxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA4OlxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwOTpcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX01PQ0sgfHwgUFRQXzE1ODhfQ0xPQ0tfTU9DSz1uXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTAtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjE5OjQ2Ljc4NDA4MzE2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MTE5MzQyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGNvbnNvbGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGBORVRDT05TT0xFYCBoZXJlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRmlyc3Qgb2ZmLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGBORVRDT05TT0xFYCByZWxpZXMgb24gYFBSSU5US2AsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciBsb2dnaW5nIHB1cnBvc2VzLiBOb3csIGBORVRDT05TT0xFX0RZTkFNSUNgIGJyaW5ncyBpbiBhIG1vcmUgYWR2YW5jZWQgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgb25lIGhhcyBhIGRlcGVuZGVuY3kgb24gYE5FVENPTlNPTEVgIGl0c2VsZiwgcGx1cyBgU1lTRlNgIGFuZCBgQ09ORklHRlNfRlNgLiBSaWdodCwgc28gdG8gZ2V0IHRoZSBmdW5jdGlvbmFsaXR5IHdlIG5lZWQsIEknbSB0aGlua2luZyB3ZSBzaG91bGQgZW5hYmxlIGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCwgYmVjYXVzZSBvZiB0aGUgbGF0dGVyJ3MgZGVwZW5kZW5jeSwgYWxzbyBgQ09ORklHRlNfRlNgLiBUaGF0IGNvdmVycyB0aGUgYmFzaWMgc2V0dXAsIGluY2x1ZGluZyB0aGUgZHluYW1pYyBhc3BlY3QuXG5cbk5vdyB0byBnZXQgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGUgYWN0dWFsIGNoYW5nZXMsIEkgd2FudCB0byBpZGVudGlmeSB0aGUgY29yZSBzeW1ib2xzIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGlzIHBhdGNoLiBMZXQgbWUgc2VlLi4uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgdXBkYXRlX3VzZXJkYXRhYCwgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGBzZW5kX21zZ19mcmFnbWVudGVkYCwgYHNlbmRfZXh0X21zZ191ZHBgLCBgc2VuZF9tc2dfdWRwYCwgYW5kIGBmcmVlX3BhcmFtX3RhcmdldGAuIFxuXG5Pa2F5LCBpdCBzZWVtcyB0aGF0IGB1cGRhdGVfdXNlcmRhdGFgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSB0aGF0IGlzIGNhbGxlZCBhbmQgaG93IHRoZSBjaGFuZ2VzIGFyZSBpbXBsZW1lbnRlZCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MTk6NTIuMzk2MDIwODU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDY5MDc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1cGRhdGVfdXNlcmRhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDU0PXN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDcyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDczOnN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNzQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTExMjE9c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMzQtXFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTEzNTpcXHQvKiBTbmFwc2hvdCBmb3Igcm9sbGJhY2sgaWYgdXBkYXRlX3VzZXJkYXRhKCkgZmFpbHMgYmVsb3cgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEzNi1cXHRzdHJzY3B5KG9sZF92YWx1ZSwgdWRtLVxcdTAwM2V2YWx1ZSwgc2l6ZW9mKG9sZF92YWx1ZSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNDItXFx0bnQgPSB1c2VyZGF0YV90b190YXJnZXQodWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTQzOlxcdHJldCA9IHVwZGF0ZV91c2VyZGF0YShudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNDQtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzM3PXN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM0NS1cXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzQ2OlxcdHVwZGF0ZV91c2VyZGF0YShudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNDctXFx0Y29uZmlnX2l0ZW1fcHV0KGl0ZW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoxOTo1Mi41MTA3MTkyOTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIxNDc2Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIEknbSB0aGlua2luZyBhYm91dCBgdXBkYXRlX3VzZXJkYXRhYC4gQWgsIHllcywgdGhhdCdzIGNhbGxlZCBmcm9tIGJvdGggYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAuIE5vdywgdGhvc2UgcmluZyBhIGJlbGwuLi4gcmlnaHQsIHRob3NlIGFyZSBjb25maWdmcyBjYWxsYmFja3MuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZXNlIGNvbmZpZ2ZzIGNhbGxiYWNrcyBhbmQgdW5kZXJzdGFuZCBob3cgYHVwZGF0ZV91c2VyZGF0YWAgaXMgdXNlZCB3aXRoaW4gdGhlaXIgY29udGV4dC4gTGV0J3MgZGlnIGludG8gdGhlIGNvbmZpZ2ZzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTMwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MTk6NTUuODMyMTk3NzY4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI1MDk3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNlcmRhdHVtX3ZhbHVlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTA3Mz1zdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMjE6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIyLVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoxOTo1Ni4wMzQ3MTUwMDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwNDY3MjkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBUaGUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgQ29udW5kcnVtKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgZXhhY3RseSBpcyB0aGlzIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGJlaW5nIGxldmVyYWdlZD9cIiBUaGlzIGlzbid0IGp1c3QgYSBnZW5lcmljIHZhcmlhYmxlIG5hbWU7IGl0IHN1Z2dlc3RzIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgZGF0YSBzdHJ1Y3R1cmUgdGllZCB0byB1c2VyIGRhdGEgYW5kIGl0cyBwZXJzaXN0ZW50IHZhbHVlcy4gR2l2ZW4gdGhhdCBpdCdzIHByb2JhYmx5IGJlaW5nIHVzZWQgKnNvbWV3aGVyZSosIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdHMgaW50ZXJhY3Rpb25zLiBVbmRlcnN0YW5kaW5nIGl0cyB1c2FnZSBpcyBrZXkgdG8gaXRzIGRlc2lnbiwgaW50ZXJhY3Rpb25zLCBhbmQgYW55IHBvdGVudGlhbCBtb2RpZmljYXRpb25zLiBUaGUgbmV4dCBzdGVwIGlzIHRvIGluaXRpYXRlIGEgc2VhcmNoIGFuZCB0cmFjZSBhbGwgaW5zdGFuY2VzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgaXQgb3BlcmF0ZXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjMxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MjA6MDEuMTM5MzkwMjY4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk3OTIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDczPXN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEyMC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTEyMTpzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjItXFx0XFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjAxLjIxOTM3NTc3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk2NDUxMTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKkxvY2F0aW5nIHRoZSBUYXJnZXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gVGltZSB0byBsb2NhdGUgdGhhdCBzcGVjaWZpYyB2YXJpYWJsZSBvciBtb2R1bGUsIHRoZSBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSSBrbm93IGl0J3MgaW4gdGhpcyBmaWxlIHNvbWV3aGVyZSwgYW5kIEkgbmVlZCB0byBmaW5kIGFsbCBpbnN0YW5jZXMuIFNvLCBJIG5lZWQgdG8gc3RhcnQgd2l0aCBhIGJyb2FkLCB0aG9yb3VnaCBzZWFyY2guIEknbGwgbWFrZSBzdXJlIHRvIHVzZSBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIGZ1bmN0aW9uIHRvIHNjb3VyIHRoZSBlbnRpcmUgZG9jdW1lbnQuIFRoaXMgY291bGQgYmUgYSBjcnVjaWFsIHBhcnQgb2Ygd2hhdGV2ZXIgcHJvY2VzcyBJJ20gd29ya2luZyBvbiByaWdodCBub3cuIEdvdCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjA0LjcxNTgyOTkzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTI1NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwNzM9c3RhdGljIGludCB1cGRhdGVfdXNlcmRhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTIxOnN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTEyMi1cXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MjA6MDQuODI1OTU5OTk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjY4NzAzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlVudXNlZCBEZWZpbml0aW9uIENoZWNrKipcblxuSG9sZCBvbiBhIHNlY29uZC4uLiB0aGlzIHZhcmlhYmxlL2Z1bmN0aW9uL3doYXRldmVyIGlzICpkZWZpbmVkKiBidXQgbm90IGFjdHVhbGx5ICp1c2VkKj8gVGhhdCdzIGEgY2xhc3NpYyByZWQgZmxhZy4gQ291bGQgYmUgZGVhZCBjb2RlLCBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgY29uZnVzaW9uLCBvciBldmVuIGEgc3VidGxlIGJ1ZyB3YWl0aW5nIHRvIGhhcHBlbiBpZiBpdCdzIHVuaW50ZW50aW9uYWxseSBpbnRlcmFjdGluZyB3aXRoIHNvbWV0aGluZyBlbHNlLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMuIExldCdzIGltbWVkaWF0ZWx5IGp1bXAgdG8gdGhhdCBzZWN0aW9uIG9mIHRoZSBmaWxlLiBMaW5lIDExMjEgaXMgdGhlIGxpa2VseSBwbGFjZSB0byBzdGFydCBsb29raW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIGNvbnRleHQuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIHRoZXJlLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBuZWVkcyBpbnZlc3RpZ2F0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg2NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjA4Ljg5MjgzMjk3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFxuMTEyMTpcXHRzdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuMTEyMjpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjb3VudClcXG4xMTIzOlxcdHtcXG4xMTI0OlxcdFxcdHN0cnVjdCB1c2VyZGF0dW0gKnVkbSA9IHRvX3VzZXJkYXR1bShpdGVtKTtcXG4xMTI1OlxcdFxcdGNoYXIgb2xkX3ZhbHVlW01BWF9FWFRSQURBVEFfVkFMVUVfTEVOXTtcXG4xMTI2OlxcdFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuMTEyNzpcXHRcXHRzdHJ1Y3QgdXNlcmRhdGEgKnVkO1xcbjExMjg6XFx0XFx0c3NpemVfdCByZXQ7XFxuMTEyOTpcXHRcXG4xMTMwOlxcdFxcdGlmIChjb3VudCBcXHUwMDNlPSBNQVhfRVhUUkFEQVRBX1ZBTFVFX0xFTilcXG4xMTMxOlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuMTEzMjpcXHRcXG4xMTMzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm5ldGNvbnNvbGVfc3Vic3lzLnN1X211dGV4KTtcXG4xMTM0OlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuMTEzNTpcXHRcXHQvKiBTbmFwc2hvdCBmb3Igcm9sbGJhY2sgaWYgdXBkYXRlX3VzZXJkYXRhKCkgZmFpbHMgYmVsb3cgKi9cXG4xMTM2OlxcdFxcdHN0cnNjcHkob2xkX3ZhbHVlLCB1ZG0tXFx1MDAzZXZhbHVlLCBzaXplb2Yob2xkX3ZhbHVlKSk7XFxuMTEzNzpcXHRcXHQvKiBjb3VudCBpcyBib3VuZGVkIGFib3ZlLCBzbyBzdHJzY3B5KCkgY2Fubm90IHRydW5jYXRlIGhlcmUgKi9cXG4xMTM4OlxcdFxcdHN0cnNjcHkodWRtLVxcdTAwM2V2YWx1ZSwgYnVmLCBzaXplb2YodWRtLVxcdTAwM2V2YWx1ZSkpO1xcbjExMzk6XFx0XFx0dHJpbV9uZXdsaW5lKHVkbS1cXHUwMDNldmFsdWUsIHNpemVvZih1ZG0tXFx1MDAzZXZhbHVlKSk7XFxuMTE0MDpcXHRcXG4xMTQxOlxcdFxcdHVkID0gdG9fdXNlcmRhdGEoaXRlbS1cXHUwMDNlY2lfcGFyZW50KTtcXG4xMTQyOlxcdFxcdG50ID0gdXNlcmRhdGFfdG9fdGFyZ2V0KHVkKTtcXG4xMTQzOlxcdFxcdHJldCA9IHVwZGF0ZV91c2VyZGF0YShudCk7XFxuMTE0NDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjExNDU6XFx0XFx0XFx0LyogUmVzdG9yZSB0aGUgcHJldmlvdXMgdmFsdWUgc28gaXQgbWF0Y2hlcyB0aGUgbGl2ZSBwYXlsb2FkICovXFxuMTE0NjpcXHRcXHRcXHRzdHJzY3B5KHVkbS1cXHUwMDNldmFsdWUsIG9sZF92YWx1ZSwgc2l6ZW9mKHVkbS1cXHUwMDNldmFsdWUpKTtcXG4xMTQ3OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMTQ4OlxcdFxcdH1cXG4xMTQ5OlxcdFxcdHJldCA9IGNvdW50O1xcbjExNTA6XFx0b3V0X3VubG9jazpcXG4xMTUxOlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2soKTtcXG4xMTUyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bmV0Y29uc29sZV9zdWJzeXMuc3VfbXV0ZXgpO1xcbjExNTM6XFx0XFx0cmV0dXJuIHJldDtcXG4xMTU0OlxcdH1cXG4xMTU1OlxcdFxcbjExNTY6XFx0LyogZGlzYWJsZV9zeXNkYXRhX2ZlYXR1cmUgLSBEaXNhYmxlIHN5c2RhdGEgZmVhdHVyZSBhbmQgY2xlYW4gc3lzZGF0YVxcbjExNTc6XFx0ICogQG50OiB0YXJnZXQgdGhhdCBpcyBkaXNhYmxpbmcgdGhlIGZlYXR1cmVcXG4xMTU4OlxcdCAqIEBmZWF0dXJlOiBmZWF0dXJlIGJlaW5nIGRpc2FibGVkXFxuMTE1OTpcXHQgKi9cXG4xMTYwOlxcdHN0YXRpYyB2b2lkIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuMTE2MTpcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBzeXNkYXRhX2ZlYXR1cmUgZmVhdHVyZSlcXG4xMTYyOlxcdHtcXG4xMTYzOlxcdFxcdG50LVxcdTAwM2VzeXNkYXRhX2ZpZWxkcyBcXHUwMDI2PSB+ZmVhdHVyZTtcXG4xMTY0OlxcdFxcdG50LVxcdTAwM2VzeXNkYXRhWzBdID0gMDtcXG4xMTY1OlxcdH1cXG4xMTY2OlxcdFxcbjExNjc6XFx0c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4xMTY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbjExNjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDowOC44OTMxMDU3OTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMzQ1OTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBDb251bmRydW0qKlxuXG5SaWdodCwgYSBmbGlja2VyIG9mIG1lbW9yeSDigJMgdGhhdCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYC4gSXQncyBuYWdnaW5nIGF0IG1lLCBzdWdnZXN0aW5nIGl0J3MgbGlrZWx5ICppbnZvbHZlZCogaW4gYSBtYWNybyBkZWZpbml0aW9uLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0IGlzbid0IGJlaW5nIHVzZWQgZGlyZWN0bHkuIFRoYXQgc3VnZ2VzdHMgSSBzaG91bGQgdHJ5IHRvIHRyYWNlIGl0cyB1c2FnZS4gSSBzaG91bGQgYnJvYWRlbiBteSBzZWFyY2guIFJhdGhlciB0aGFuIGdldCBsb3N0IGluIHRoZSBmdW5jdGlvbiBjYWxscywgSSBzaG91bGQgbG9vayBtb3JlIGJyb2FkbHkgZm9yIHVzZXMgb2YgdGhlIHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2ggdGVybXMuIEknbGwgc3RhcnQgd2l0aCBhIGJyb2FkZXIgc2NvcGUgc2VhcmNoIGZvciBgdXNlcmRhdHVtX3ZhbHVlYC4gSSdsbCBhbHNvIHRyeSBhIGJyb2FkZXIgc2NvcGUgc2VhcmNoIGZvciBgQ09ORklHRlNfQVRUUmAuIEl0J3MgYSBodW5jaCwgYnV0IHNvbWV0aGluZyBsaWtlIHRoYXQgZmVlbHMgcmlnaHQuIEknbSBiZXR0aW5nIHRoYXQgb25lIG9mIHRoZXNlIHdpbGwgbGVhZCBtZSB0byB0aGUgbWFjcm8gZGVmaW5pdGlvbiB0aGF0J3MgdXNpbmcgdGhlIHN0b3JhZ2UgaW4gYW4gaW5kaXJlY3Qgd2F5LiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXAgYW5kIHNlZSB3aGF0IGNvbWVzIGJhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODcyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDoxMi44MTY1Njg3NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzYxMTkwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdGU19BVFRSLip1c2VyZGF0dW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjU1PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyODg6Q09ORklHRlNfQVRUUih1c2VyZGF0dW1fLCB2YWx1ZSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODktQ09ORklHRlNfQVRUUihzeXNkYXRhXywgY3B1X25yX2VuYWJsZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDoxMy4xMzQxODg3MTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcyNzIwNDA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSdzIERhdGEgRmxvdyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYENPTkZJR0ZTX0FUVFIodXNlcmRhdHVtXywgdmFsdWUpYCBtYWNybywgYW5kIGl0IGNsZWFybHkgZXhwYW5kcyB0byBjcmVhdGUgdHdvIGZ1bmN0aW9uczogYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fdmFsdWVfc2hvd2AuIE15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBlbnRyeSBwb2ludHMsIHdoaWNoIGFyZSB0aHVzIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgLiBJIGFsc28gc2VlIHRoYXQgYHNlbmRfZXh0X21zZ191ZHBgIGFuZCBgc2VuZF9tc2dfdWRwYCBhcmUga2V5IHBsYXllcnMgaGVyZS5cblxuSG1tLCB3YWl0IGEgc2Vjb25kLiAgSSBrbm93IHRoYXQgYHNlbmRfZXh0X21zZ191ZHBgIGFuZCBgc2VuZF9tc2dfdWRwYCBhcmUgaW52b2tlZCBieSBgd3JpdGVfZXh0X21zZ2AgYW5kIGB3cml0ZV9tc2dgIHJlc3BlY3RpdmVseSwgd2hpY2ggYXJlIHRoZW1zZWx2ZXMgY2FsbGVkIGJ5IGBuZXRjb25zb2xlX3dyaXRlYC4gVGhhdCdzIGEgZ29vZCBjb25uZWN0aW9uIHRvIG1ha2UuIExldCdzIHNlZS4uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiBgbmV0Y29uc29sZV93cml0ZWAuIEFoLCByaWdodCwgaXQncyBhIGNvbnNvbGUgd3JpdGUgY2FsbGJhY2suXG5cbkhvbGQgb24uLi4gSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBgc2VuZF9leHRfbXNnX3VkcGAgaXMgYWN0dWFsbHkgY2FsbGVkIGJ5IHRoZSBgbmV0Y29uc29sZV9leHRfd3JpdGVgIGZ1bmN0aW9uLiBUaGlzIG1ha2VzIHRoZSBjb25uZWN0aW9ucyBtdWNoIG1vcmUgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjE4Ljg2MTM5NzA4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ2Nzg4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZW5kX2V4dF9tc2dfdWRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA3Mz1zdGF0aWMgdm9pZCBzZW5kX21zZ19mcmFnbWVudGVkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjExMC0vKipcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjExMTogKiBzZW5kX2V4dF9tc2dfdWRwIC0gc2VuZCBleHRlbmRlZCBsb2cgbWVzc2FnZSB0byB0YXJnZXRcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjExMi0gKiBAbnQ6IHRhcmdldCB0byBzZW5kIG1lc3NhZ2UgdG9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE4LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTE5OnN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTcyPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGUoc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0LCBib29sIGV4dGVuZGVkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTEtXFx0XFx0aWYgKGV4dGVuZGVkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTkyOlxcdFxcdFxcdHNlbmRfZXh0X21zZ191ZHAobnQsIHdjdHh0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5My1cXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjE4LjkzMjg2OTk3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc3MzQyMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgS2VybmVsIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBkYXRhIGdldHMgaW50byBhbmQgb3V0IG9mIHRoZSBrZXJuZWwncyB2YXJpb3VzIHN1YnN5c3RlbXMuIExldCdzIHNlZS4uLiB0aGUgYG5ldGNvbnNvbGVfd3JpdGVgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB3cml0aW5nIHRvIHRoZSBjb25zb2xlLiBUaGF0IG1ha2VzIHNlbnNlLCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHRoZSBnYXRla2VlcGVyLCBoYW5kbGluZyB0aGUgaW5pdGlhbCBjYWxsIHRvIGdldCBkYXRhIG9udG8gdGhlIHNjcmVlbiBvciBpbnRvIGEgbG9nLCBiYXNlZCBvbiBob3cgdGhlIHN5c3RlbSBpcyBzZXQgdXAuXG5cbk5vdywgSSBzZWUgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYXMgYW5vdGhlciBlbnRyeSBwb2ludCwgdGhpcyB0aW1lIGZvciBjb25maWdmcy4gUmlnaHQsIHRoaXMgd291bGQgYmUgaG93IHVzZXItcHJvdmlkZWQgZGF0YSBpcyBhY3R1YWxseSBzdG9yZWQgd2l0aGluIHRoZSBjb25maWdmcyBzdHJ1Y3R1cmVzIOKAkyB0aGUgbWFpbiBtZWNoYW5pc20gdG8gaGFuZGxlIGNvbmZpZ3VyYXRpb24gaW5wdXQuIFRoYXQgaW1wbGllcyBpdCdzIHRoZSBpbnRlcmZhY2UgdXNlZCB0byB3cml0ZSBjb25maWd1cmF0aW9uIGRhdGEuXG5cbkFoLCBhbmQgSSBzZWUgYHVzZXJkYXR1bV9kcm9wYCBhbHNvIG1lbnRpb25lZCBhcyBhbiBlbnRyeSBwb2ludC4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGltcG9ydGFudCBlbnRyeSBwb2ludCB0aGF0IGlzIHVzZWQgdG8gcmVtb3ZlIG9yIGNsZWFudXAgdGhpcyB1c2VyIGRhdGEuIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSB0byBzZWUgaG93IGV2ZXJ5dGhpbmcgaXMgbWFuYWdlZCwgZnJvbSBnZXR0aW5nIGRhdGEgaW4sIHRvIHN0b3JpbmcgaXQgYW5kIGZpbmFsbHksIGNsZWFuaW5nIGl0IHVwLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGVudHJ5IHBvaW50cyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93IGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZXNlIGNyaXRpY2FsIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MjA6MjMuNjEwMjE2ODA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTM4MDIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZGF0dW1fZHJvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzMTQ9c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzM3OnN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMzgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHVzZXJkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2MC1cXHQubWFrZV9pdGVtXFx0XFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzYxOlxcdC5kcm9wX2l0ZW1cXHRcXHQ9IHVzZXJkYXR1bV9kcm9wLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzYyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjIzLjY4OTYwMjAxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzMxNDAzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEhvdC1QYXRoIFN5bWJvbHMgaW4gTmV0Y29uc29sZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scyBmb3IgdGhpcyBuZXRjb25zb2xlIHdvcmsuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUga2V5IG9uZXMgc2hvdWxkIGJlIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgLCBgdXNlcmRhdHVtX2Ryb3BgLCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVgLiBCdXQgaG9sZCBvbi4uLiBpc24ndCBgbmV0Y29uc29sZV93cml0ZWAgYSBwcmV0dHkgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbj8gSXQncyB0aGUgY29uc29sZSB3cml0ZSBjYWxsYmFjaywgYW5kIGl0IGNvdWxkIGJlIGhpdCByZWFsbHksIHJlYWxseSBvZnRlbiBpZiB0aGVyZSdzIGEgZmxvb2Qgb2YgYHByaW50a3NgLiBIb3dldmVyLCB0aGUgb3RoZXIgdHdvLCBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCwgYXJlIG11Y2ggbW9yZSBkaXJlY3RseSB0aWVkIHRvICp0aGlzKiBzcGVjaWZpYyBmZWF0dXJlLlxuXG5Ob3csIEkgcmVhbGx5IHNob3VsZCBkb3VibGUtY2hlY2sgaG93IGZyZXF1ZW50bHkgYG5ldGNvbnNvbGVfd3JpdGVgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZC4gQWgsIHJpZ2h0LCBpdCBnZXRzIGZpcmVkIGZvciBldmVyeSBzaW5nbGUgYHByaW50a2Agd2hlbiBuZXRjb25zb2xlIGlzIGVuYWJsZWQsIHRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgdG8gYmUgZGlnZ2luZyBpbnRvIGBzZW5kX2V4dF9tc2dfdWRwYCwgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGFuZCBgc2VuZF9mcmFnbWVudGVkX2JvZHlgLiBUaG9zZSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4gSXMgdGhlcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24gZXhwb3NlZCBpbiB0aGUgbmV0Y29uc29sZSBjb2RlPyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgdGhlcmUuIEdvdHRhIGNvdmVyIG15IGJhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTYwMCwiT3V0cHV0VG9rZW5zIjo2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDoyOS41MjI3NDYyNTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTYxMDI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MD1fX3NldHVwKFxcXCJuZXRjb25zb2xlPVxcXCIsIG9wdGlvbl9zZXR1cCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODMtLyogTGlua2VkIGxpc3Qgb2YgYWxsIGNvbmZpZ3VyZWQgdGFyZ2V0cyAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NDpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9saXN0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODUtLyogdGFyZ2V0X2NsZWFudXBfbGlzdCBpcyB1c2VkIHRvIHRyYWNrIHRhcmdldHMgdGhhdCBuZWVkIHRvIGJlIGNsZWFuZWQgb3V0c2lkZVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTpzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9jbGVhbnVwX2xpc3QpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTEtLyogVGhpcyBuZWVkcyB0byBiZSBhIHNwaW5sb2NrIGJlY2F1c2Ugd3JpdGVfbXNnKCkgY2Fubm90IHNsZWVwICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkyOnN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGFyZ2V0X2xpc3RfbG9jayk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkzLS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBtdXRleCBiZWNhdXNlIG5ldHBvbGxfY2xlYW51cCBtaWdodCBzbGVlcCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5NDpzdGF0aWMgREVGSU5FX01VVEVYKHRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1LVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNT1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OnN0YXRpYyBERUZJTkVfTVVURVgoZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDoyOS42MzQzNjEzODNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0OTM1NjY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcyBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqUmVnZXggU25hZnU6IFRpbWUgZm9yIHRoZSBGaWxlKipcblxuVWdoLCB3YWl0IGEgc2Vjb25kLiBUaGF0IHJlZ2V4IEkganVzdCBjcmFmdGVk4oCmIHNvbWV0aGluZyBmZWVscyBvZmYuIEknbSBzdGFydGluZyB0byBoYXZlIGRvdWJ0cy4gVGhlIGVkZ2UgY2FzZXMgYXJlIHN0YXJ0aW5nIHRvIHN3aW0gdXAgaW4gbXkgbWVudGFsIG1vZGVsLCBhbmQgSSBzdXNwZWN0IGl0J3Mgbm90IGdvaW5nIHRvIGJlIGFzIHJvYnVzdCBhcyBJJ2QgaW5pdGlhbGx5IGhvcGVkLiBBbHJpZ2h0LCBmb3JnZXQgdGhlIHJlZ2V4IGZvciBub3cuIEl0J3MgdGltZSB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBnZXQgYSBtb3JlIGdyb3VuZGVkIHBlcnNwZWN0aXZlLiBMZXQncyBqdXN0IGxvb2sgYXQgdGhlIHJhdyBkYXRhIGluIHRoZSBmaWxlIGl0c2VsZi4gVGhhdCdzIGFsd2F5cyB0aGUgYmVzdCBmaXJzdCBzdGVwIHdoZW4gYSBwYXR0ZXJuIG1hdGNoaW5nIHN0cmF0ZWd5IGZlZWxzIHNoYWt5LiBJJ2xsIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSB0aGlzIHdheSwgYW5kIEkgY2FuIGFsd2F5cyBnbyBiYWNrIGFuZCByZWZpbmUgdGhlIHJlZ2V4IGJhc2VkIG9uIGFjdHVhbCBvYnNlcnZhdGlvbnMsIGJ1dCBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUyNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjMzLjg4MzcyMTA0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxMDQ5NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTIwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NTM9TU9EVUxFX0lNUE9SVF9OUyhcXFwiTkVUREVWX0lOVEVSTkFMXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY0OnN0YXRpYyBjaGFyIGNvbmZpZ1tNQVhfUEFSQU1fTEVOR1RIXTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjUtbW9kdWxlX3BhcmFtX3N0cmluZyhuZXRjb25zb2xlLCBjb25maWcsIE1BWF9QQVJBTV9MRU5HVEgsIDApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz02Nj1NT0RVTEVfUEFSTV9ERVNDKG5ldGNvbnNvbGUsIFxcXCIgbmV0Y29uc29sZT1bc3JjLXBvcnRdQFtzcmMtaXBdL1tkZXZdLFt0Z3QtcG9ydF1AXFx1MDAzY3RndC1pcFxcdTAwM2UvW3RndC1tYWNhZGRyXVxcXCIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Njg6c3RhdGljIGJvb2wgb29wc19vbmx5O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02OS1tb2R1bGVfcGFyYW0ob29wc19vbmx5LCBib29sLCAwNjAwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NzA9TU9EVUxFX1BBUk1fREVTQyhvb3BzX29ubHksIFxcXCJPbmx5IGxvZyBvb3BzIG1lc3NhZ2VzXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzQtI2lmbmRlZlxcdE1PRFVMRVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3NTpzdGF0aWMgaW50IF9faW5pdCBvcHRpb25fc2V0dXAoY2hhciAqb3B0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9ODA9X19zZXR1cChcXFwibmV0Y29uc29sZT1cXFwiLCBvcHRpb25fc2V0dXApO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzLS8qIExpbmtlZCBsaXN0IG9mIGFsbCBjb25maWd1cmVkIHRhcmdldHMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODQ6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfbGlzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg1LS8qIHRhcmdldF9jbGVhbnVwX2xpc3QgaXMgdXNlZCB0byB0cmFjayB0YXJnZXRzIHRoYXQgbmVlZCB0byBiZSBjbGVhbmVkIG91dHNpZGVcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODk6c3RhdGljIExJU1RfSEVBRCh0YXJnZXRfY2xlYW51cF9saXN0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxLS8qIFRoaXMgbmVlZHMgdG8gYmUgYSBzcGlubG9jayBiZWNhdXNlIHdyaXRlX21zZygpIGNhbm5vdCBzbGVlcCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MjpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhcmdldF9saXN0X2xvY2spO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05My0vKiBUaGlzIG5lZWRzIHRvIGJlIGEgbXV0ZXggYmVjYXVzZSBuZXRwb2xsX2NsZWFudXAgbWlnaHQgc2xlZXAgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTQ6c3RhdGljIERFRklORV9NVVRFWCh0YXJnZXRfY2xlYW51cF9saXN0X2xvY2spO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTY6c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXRjb25zb2xlX3dxO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDEtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMjpzdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQsIG5ldGNvbnNvbGU7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMy1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODg9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cztcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE2OnN0YXRpYyBERUZJTkVfTVVURVgoZHluYW1pY19uZXRjb25zb2xlX211dGV4KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTg6c3RhdGljIGludCBfX2luaXQgZHluYW1pY19uZXRjb25zb2xlX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNTpzdGF0aWMgdm9pZCBfX2V4aXQgZHluYW1pY19uZXRjb25zb2xlX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzQtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9nZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NzpzdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jayh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUyOnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1OTpzdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX25ldGNvbnNvbGVfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY0OnN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjUte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcyOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X2dldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjc2OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzcte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjgwOnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjgxLVxcdFxcdFxcdFxcdCAgIGludCBjbWRsaW5lX2NvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4NC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjg1OnN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI4Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjg4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyODk6c3RhdGljIHZvaWQgZHluYW1pY19uZXRjb25zb2xlX211dGV4X3VubG9jayh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI5NS0vKiBDaGVjayBpZiB0aGUgdGFyZ2V0IHdhcyBib3VuZCBieSBtYWMgYWRkcmVzcy4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjk2OnN0YXRpYyBib29sIGJvdW5kX2J5X21hYyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yOTcte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwMC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzAxOnN0YXRpYyB2b2lkIG5ldGNvbnNfcmVsZWFzZV9kZXYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDgtLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMwOTpzdGF0aWMgdm9pZCByZXN1bWVfdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMxMC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzIxLS8qIENoZWNrcyBpZiBhIGRlYWN0aXZhdGVkIHRhcmdldCBtYXRjaGVzIGEgZGV2aWNlLiAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMjI6c3RhdGljIGJvb2wgZGVhY3RpdmF0ZWRfdGFyZ2V0X21hdGNoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMyMy1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzMy0vKiBQcm9jZXNzIHdvcmsgc2NoZWR1bGVkIGZvciB0YXJnZXQgcmVzdW1lLiAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMzQ6c3RhdGljIHZvaWQgcHJvY2Vzc19yZXN1bWVfdGFyZ2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zOTMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM5NDpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zOTUte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQyMC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDIxOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQyMi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDQ0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0NDU6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldHBvbGwgKm5wKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ2NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDY1OnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NjYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTUxNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTE1OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKnRvX3RhcmdldChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTUxNi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTI4LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1Mjk6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTUzMC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTM5LS8qIEdldCByaWQgb2YgcG9zc2libGUgdHJhaWxpbmcgbmV3bGluZSwgcmV0dXJuaW5nIHRoZSBuZXcgbGVuZ3RoICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU0MDpzdGF0aWMgdm9pZCB0cmltX25ld2xpbmUoY2hhciAqcywgc2l6ZV90IG1heGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NTQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU1NTpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTU5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NjA6c3RhdGljIHNzaXplX3QgZXh0ZW5kZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NjQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU2NTpzdGF0aWMgc3NpemVfdCByZWxlYXNlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTY5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1NzA6c3RhdGljIHNzaXplX3QgZGV2X25hbWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU3NTpzdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1ODA6c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU4NTpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU5NC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTk1OnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01OTYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYwNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjA1OnN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYxMi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjEzOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjE0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjYxODpzdGF0aWMgc3NpemVfdCB0cmFuc21pdF9lcnJvcnNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MzMtLyogY29uZmlnZnMgaGVscGVyIHRvIGRpc3BsYXkgaWYgY3B1X25yIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjYzNDpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYzNS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjQ2LS8qIGNvbmZpZ2ZzIGhlbHBlciB0byBkaXNwbGF5IGlmIHRhc2tuYW1lIHN5c2RhdGEgZmVhdHVyZSBpcyBlbmFibGVkICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY0NzpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3Rhc2tuYW1lX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY0OC1cXHRcXHRcXHRcXHRcXHQgICAgIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NTktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjY2MDpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3JlbGVhc2VfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjYxLVxcdFxcdFxcdFxcdFxcdCAgICBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjc1LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NzY6c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9uZXRjb25zX2NvbnNvbGVzKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjk5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MDA6c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MDEtXFx0XFx0XFx0XFx0XFx0ICBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzE5LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MjA6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcyMS1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjgwODpzdGF0aWMgc3NpemVfdCByZWxlYXNlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDktXFx0XFx0XFx0ICAgICBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODM0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4MzU6c3RhdGljIHNzaXplX3QgZXh0ZW5kZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgzNi1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODYwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NjE6c3RhdGljIHNzaXplX3QgZGV2X25hbWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg2Mi1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODg3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODg6c3RhdGljIHNzaXplX3QgbG9jYWxfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODg5LVxcdFxcdHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MDktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkxMDpzdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxMS1cXHRcXHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MzEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjkzMjpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMzLVxcdFxcdHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NTYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk1NzpzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1OC1cXHQgICAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk4Ni0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTg3OnN0YXRpYyBzaXplX3QgY291bnRfdXNlcmRhdGFfZW50cmllcyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5MS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTkyOnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9tYWNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk5My1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTAxOD1zdHJ1Y3QgdXNlcmRhdHVtIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDIyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDIzOnN0YXRpYyBzdHJ1Y3QgdXNlcmRhdHVtICp0b191c2VyZGF0dW0oc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDI0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDI4PXN0cnVjdCB1c2VyZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTAzMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTAzMjpzdGF0aWMgc3RydWN0IHVzZXJkYXRhICp0b191c2VyZGF0YShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzMte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMzc6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqdXNlcmRhdGFfdG9fdGFyZ2V0KHN0cnVjdCB1c2VyZGF0YSAqdWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMzgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNDQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNDU6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNTMtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwNTQ6c3RhdGljIGludCBjYWxjX3VzZXJkYXRhX2xlbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDcyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDczOnN0YXRpYyBpbnQgdXBkYXRlX3VzZXJkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNzQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMjAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExMjE6c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTIyLVxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNTktICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNjA6c3RhdGljIHZvaWQgZGlzYWJsZV9zeXNkYXRhX2ZlYXR1cmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2MS1cXHRcXHRcXHRcXHQgICAgZW51bSBzeXNkYXRhX2ZlYXR1cmUgZmVhdHVyZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTY2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTY3OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExNjgtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE5NjpzdGF0aWMgc3NpemVfdCBzeXNkYXRhX3JlbGVhc2VfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExOTctXFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjI0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjI1OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMjYtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1NC0vKiBjb25maWdmcyBoZWxwZXIgdG8gc3lzZGF0YSBjcHVfbnIgZmVhdHVyZSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjU1OnN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjU2LVxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjkyPUNPTkZJR0ZTX0FUVFIoc3lzZGF0YV8sIG1zZ2lkX2VuYWJsZWQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjkzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjk0OnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp1c2VyZGF0dW1fYXR0cnNbXSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5NS1cXHRcXHUwMDI2dXNlcmRhdHVtX2F0dHJfdmFsdWUsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI5OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI5OTpzdGF0aWMgdm9pZCB1c2VyZGF0dW1fcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMDQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdXNlcmRhdHVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMwNS1cXHQucmVsZWFzZSA9IHVzZXJkYXR1bV9yZWxlYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMDctXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMDg6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXR1bV90eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzA5LVxcdC5jdF9pdGVtX29wc1xcdD0gXFx1MDAyNnVzZXJkYXR1bV9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMxMy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTMxNDpzdGF0aWMgc3RydWN0IGNvbmZpZ19pdGVtICp1c2VyZGF0dW1fbWFrZV9pdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzE1LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzMzYtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMzc6c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMzOC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM1MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM1MTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdXNlcmRhdGFfYXR0cnNbXSA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM1Mi1cXHRcXHUwMDI2c3lzZGF0YV9hdHRyX2NwdV9ucl9lbmFibGVkLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNTgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNTk6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHVzZXJkYXRhX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM2MC1cXHQubWFrZV9pdGVtXFx0XFx0PSB1c2VyZGF0dW1fbWFrZV9pdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzNjQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHVzZXJkYXRhX3R5cGUgPSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNjUtXFx0LmN0X2l0ZW1fb3BzXFx0PSBcXHUwMDI2dXNlcmRhdHVtX29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMzgxPUNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzgyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzgzOnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzg0LVxcdFxcdTAwMjZhdHRyX2VuYWJsZWQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQwMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQwMjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQwMy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQwOS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQxMDpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBuZXRjb25zb2xlX3RhcmdldF9pdGVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxMS1cXHQucmVsZWFzZVxcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDEzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDE0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDE1LVxcdC5jdF9hdHRyc1xcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfYXR0cnMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQxOS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQyMDpzdGF0aWMgdm9pZCBpbml0X3RhcmdldF9jb25maWdfZ3JvdXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQyMS1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQyOC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQyOTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpmaW5kX2NtZGxpbmVfdGFyZ2V0KGNvbnN0IGNoYXIgKm5hbWUpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0MzAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NDktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0NTA6c3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm1ha2VfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDgzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDg0OnN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0ODUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1MzMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1MzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIG5ldGNvbnNvbGVfc3Vic3lzX2dyb3VwX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUzNS1cXHQubWFrZV9ncm91cFxcdD0gbWFrZV9uZXRjb25zb2xlX3RhcmdldCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTM4LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTM5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3N1YnN5c190eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTQwLVxcdC5jdF9ncm91cF9vcHNcXHQ9IFxcdTAwMjZuZXRjb25zb2xlX3N1YnN5c19ncm91cF9vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU0NC0vKiBUaGUgbmV0Y29uc29sZSBjb25maWdmcyBzdWJzeXN0ZW0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0NTpzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU0Ni1cXHQuc3VfZ3JvdXBcXHQ9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTUzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTU0OnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1NS1cXHRcXHRcXHRcXHQgICBpbnQgY21kbGluZV9jb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTYzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTY0OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfY3B1X25yKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NjUtXFx0XFx0XFx0XFx0IHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTcxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTcyOnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfdGFza25hbWUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3My1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU3OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4MDpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX3JlbGVhc2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4MS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU4Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU4NzpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX21zZ2lkKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBvZmZzZXQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1OTktICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MDA6c3RhdGljIGludCBwcmVwYXJlX3N5c2RhdGEoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYwMS1cXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyNS0vKiBIYW5kbGUgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIG5vdGlmaWNhdGlvbnMgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYyNjpzdGF0aWMgaW50IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTYyNy1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwMy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwNDpzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5ldGNvbnNvbGVfbmV0ZGV2X25vdGlmaWVyID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzA1LVxcdC5ub3RpZmllcl9jYWxsICA9IG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MTktICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MjA6c3RhdGljIHN0cnVjdCBza19idWZmICpuZXRjb25zX3NrYl9wb3Aoc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzQzOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmluZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBpbnQgbGVuLCBpbnQgcmVzZXJ2ZSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc0NC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc2Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc2ODpzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NjktXFx0XFx0XFx0XFx0IGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc5Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc5MzpzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3OTQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MTAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4MTE6c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODEyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODI0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODI1OnN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0cG9sbCAqbnAsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MjYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NTEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NTI6c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRwb2xsICpucCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1My17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg3NC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg3NTpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldHBvbGwgKm5wLCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MTktICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5MjA6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTM2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTM3OnN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkzOC1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk3Mi1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk3MzpzdGF0aWMgdm9pZCBhcHBlbmRfcmVsZWFzZShjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5ODAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5ODE6c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk4Mi1cXHRcXHRcXHRcXHQgY29uc3QgY2hhciAqbXNnYm9keV9wdHIsIGludCBoZWFkZXJfbGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNzItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNzM6c3RhdGljIHZvaWQgc2VuZF9tc2dfZnJhZ21lbnRlZChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDc0LVxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKm1zZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE4LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTE5OnN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTUxOnN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTItXFx0XFx0XFx0IHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3MS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE3MjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIwMDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlX2V4dChzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwMS1cXHRcXHRcXHRcXHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDY6c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZV9iYXNpYyhzdHJ1Y3QgY29uc29sZSAqY29uIF9fYWx3YXlzX3VudXNlZCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwNy1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxMS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxMjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV9sb2NrKHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjEzLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjE0PV9fYWNxdWlyZXMoXFx1MDAyNnRhcmdldF9saXN0X2xvY2spXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxOC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxOTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX2RldmljZV91bmxvY2soc3RydWN0IGNvbnNvbGUgKmNvbiBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjAtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjIxPV9fcmVsZWFzZXMoXFx1MDAyNnRhcmdldF9saXN0X2xvY2spXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNjpzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpvcHQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjcte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjAtLyogQWxsb2NhdGUgbmV3IHRhcmdldCAoZnJvbSBib290L21vZHVsZSBwYXJhbSkgYW5kIHNldHVwIG5ldHBvbGwgZm9yIGl0ICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMjE6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMjItXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBjbWRsaW5lX2NvdW50KVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDozMy45NDg4MzI5NTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2ODQ0NDUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgTW9kdWxlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgb3ZlciB0aGlzIGBuZXRjb25zb2xlYCBjb2RlLCBhbmQgdGhlIGltbWVkaWF0ZSB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZSBjcnVjaWFsIGBpbml0X21vZHVsZWAgYW5kIGBjbGVhbnVwX21vZHVsZWAgZnVuY3Rpb25zIOKAkyB0aGUgZW50cnkgYW5kIGV4aXQgcG9pbnRzLCByZWFsbHkg4oCTIGFyZSBhbGwgbWFjcm8tZ2VuZXJhdGVkLiBTdGFuZGFyZCBzdHVmZi4gTm90aGluZyB1bnVzdWFsIHRoZXJlLiBCdXQgaG9sZCBvbi4uLiB3YXNuJ3QgdGhlcmUgYSBzdGF0aWMgZnVuY3Rpb24uLi4gaG1tLi4uIHllYWgsIGBuZXRjb25zb2xlX3dyaXRlYCBpcyBmbGFnZ2VkIGFzIHN0YXRpYy5cblxuQWxyaWdodCwgdGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBmbG9hdGluZyBhcm91bmQgaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgZWxzZSB3ZSBjYW4gdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1NjQsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDozOC4xMTcyODMzMTRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjA2MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTgwPV9fc2V0dXAoXFxcIm5ldGNvbnNvbGU9XFxcIiwgb3B0aW9uX3NldHVwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04My0vKiBMaW5rZWQgbGlzdCBvZiBhbGwgY29uZmlndXJlZCB0YXJnZXRzICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0OnN0YXRpYyBMSVNUX0hFQUQodGFyZ2V0X2xpc3QpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NS0vKiB0YXJnZXRfY2xlYW51cF9saXN0IGlzIHVzZWQgdG8gdHJhY2sgdGFyZ2V0cyB0aGF0IG5lZWQgdG8gYmUgY2xlYW5lZCBvdXRzaWRlXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODgtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg5OnN0YXRpYyBMSVNUX0hFQUQodGFyZ2V0X2NsZWFudXBfbGlzdCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MS0vKiBUaGlzIG5lZWRzIHRvIGJlIGEgc3BpbmxvY2sgYmVjYXVzZSB3cml0ZV9tc2coKSBjYW5ub3Qgc2xlZXAgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTI6c3RhdGljIERFRklORV9TUElOTE9DSyh0YXJnZXRfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTMtLyogVGhpcyBuZWVkcyB0byBiZSBhIG11dGV4IGJlY2F1c2UgbmV0cG9sbF9jbGVhbnVwIG1pZ2h0IHNsZWVwICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk0OnN0YXRpYyBERUZJTkVfTVVURVgodGFyZ2V0X2NsZWFudXBfbGlzdF9sb2NrKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTUtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1PXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIG5ldGNvbnNvbGVfc3Vic3lzO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTY6c3RhdGljIERFRklORV9NVVRFWChkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXgpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjM4LjE5ODQ5ODg3NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDIwMjEyMzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBNeSBSZWdleCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcmVnZXggYW5kIGl0J3MganVzdCBub3QgcXVpdGUgcmlnaHQuIEkgd2FzIHRyeWluZyB0byBmaW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCBidXQgSSdtIGNsZWFybHkgbWlzc2luZyBzb21ldGhpbmcuIExldCBtZSB0cnkgYGdyZXAgLUUgJ15bYS16QS1aX11bYS16QS1aMC05X10qIFthLXpBLVpfXVthLXpBLVowLTlfXSpcXCgnIGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFRoYXQgc2hvdWxkIGNhdGNoIG1vc3Qgb2YgdGhlbS4uLiBidXQgd2FpdCwgSSBrbm93IGZyb20gbWVtb3J5IHRoYXQgbW9zdCBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlIGFyZSBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBwcm9iYWJseSBleHBsYWlucyB3aHkgdGhlIHJlc3VsdHMgYXJlbid0IHdoYXQgSSBleHBlY3QuIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayBgaW5pdF9uZXRjb25zb2xlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxODgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MjA6NDIuNjE4NzEzNzA3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzkxNjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbml0X25ldGNvbnNvbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMzk0PXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MDM6c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MDQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0ODQ9c3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfbmV0Y29uc29sZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MTctICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MTg6bGF0ZV9pbml0Y2FsbChpbml0X25ldGNvbnNvbGUpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTE5LW1vZHVsZV9leGl0KGNsZWFudXBfbmV0Y29uc29sZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEyOjIwOjQyLjcxNjYzNDk1N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzY5NjA4NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEZ1bmN0aW9uIEVudHJ5IFBvaW50cyBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgc3RhdGljIGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgaGVyZS4gU2luY2UgdGhlIGluc3RydWN0aW9ucyBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBJJ2xsIGZpcnN0IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnksIGFuZCBpZiBub3QsIGZhbGwgYmFjayBvbiB0aGUgc3RhdGljIG9uZXMsIGZvY3VzaW5nIG9uIG1vZGlmaWVkIGZ1bmN0aW9ucy5cblxuTG9va2luZyBhdCB0aGUgbGlzdCBvZiBtb2RpZmllZCBzdGF0aWMgZnVuY3Rpb25zLCBJIGhhdmU6IGB1cGRhdGVfdXNlcmRhdGFgLCBgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZWAsIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgYHNlbmRfZnJhZ21lbnRlZF9ib2R5YCwgYHNlbmRfbXNnX2ZyYWdtZW50ZWRgLCBgc2VuZF9leHRfbXNnX3VkcGAsIGBzZW5kX21zZ191ZHBgLCBhbmQgYGZyZWVfcGFyYW1fdGFyZ2V0YC4gRm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMsIEknbGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IHNlZW0gbGlrZSBwb3RlbnRpYWwgQVBJIGVudHJ5cG9pbnRzIG9yIGhhdmUgYSBnb29kIGNoYW5jZSBvZiAqbm90KiBiZWluZyBpbmxpbmVkLlxuXG5gdXBkYXRlX3VzZXJkYXRhYCwgYHNlbmRfZXh0X21zZ191ZHBgLCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAsIGBzZW5kX21zZ19ub19mcmFnbWVudGF0aW9uYCwgYW5kIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAgYXJlIHRoZSBmcm9udCBydW5uZXJzLiBgc2VuZF9leHRfbXNnX3VkcGAgYW5kIGB1cGRhdGVfdXNlcmRhdGFgIGFyZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgaW5saW5lZCBmdW5jdGlvbnMgdGhhdCBjb3VsZCBiZSBtb3JlIHNpZ25pZmljYW50LlxuXG5Ob3csIEknbSBub3RpbmcgdGhlIGNvbmZpZyBvcHRpb25zLiBXZSBoYXZlIGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCBgQ09ORklHRlNfRlNgLiBJIGtub3cgYENPTkZJR0ZTX0ZTYCBpcyBwcmV0dHkgc3RhbmRhcmQsIGJ1dCBJJ2xsIGluY2x1ZGUgaXQganVzdCB0byBiZSBzYWZlLiBJIHNlZSB0aGF0IGBORVRDT05TT0xFX0RZTkFNSUNgIGRlcGVuZHMgb24gYE5FVENPTlNPTEUgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GU2AuIExldCdzIGFzc3VtZSB0aGF0IGBTWVNGU2AgaXMgbGlrZWx5IGltcGxpZWQuIFNvIG15IGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGBbXCJORVRDT05TT0xFXCIsIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsIFwiQ09ORklHRlNfRlNcIl1gLlxuXG5JJ2xsIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVENPTlNPTEVgLiBTZWVtcyBpdCBkZXBlbmRzIG9uIGBQUklOVEtgLCB3aGljaCBpcyBzdGFuZGFyZC5cblxuU28gbm93LCBmb3IgbXkgYEZvY3VzU3ltYm9sc2AgbGlzdCwgYmFzZWQgb24gdGhlIHByZXZpb3VzIGV2YWx1YXRpb24sIEknbGwgZ28gd2l0aCBgW1widXBkYXRlX3VzZXJkYXRhXCIsIFwic2VuZF9leHRfbXNnX3VkcFwiLCBcInNlbmRfbXNnX2ZyYWdtZW50ZWRcIiwgXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIiwgXCJ1c2VyZGF0dW1fZHJvcFwiXWAuICBJJ2xsIHZlcmlmeSB0aGF0IGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIGFuZCBgdXNlcmRhdHVtX2Ryb3BgIGFyZSBzdGF0aWMsIGFzIEkgc3VzcGVjdC5cblxuSSBzaG91bGQgYWxzbyBtYWtlIGEgbm90ZSBvZiB0aGUgY29uc29sZSB3cml0ZSBjYWxsYmFja3MsIGluIGNhc2UgdGhvc2UgdHVybiBvdXQgdG8gYmUgaW1wb3J0YW50OiBgbmV0Y29uc29sZV93cml0ZWAsIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAsIGFuZCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2AuIExldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0Y29uc29sZV93cml0ZV9leHRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMDo1Mi4wODYyNDcxNzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzOTIzMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGNvbnNvbGVfd3JpdGVfZXh0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE3Mj1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3dyaXRlKHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dCwgYm9vbCBleHRlbmRlZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTk5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjAwOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfd3JpdGVfZXh0KHN0cnVjdCBjb25zb2xlICpjb24gX19hbHdheXNfdW51c2VkLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjAxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjM4NT1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM4Ny1cXHQuZmxhZ3MgPSBDT05fRU5BQkxFRCB8IENPTl9FWFRFTkRFRCB8IENPTl9OQkNPTiB8IENPTl9OQkNPTl9BVE9NSUNfVU5TQUZFLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzg4OlxcdC53cml0ZV90aHJlYWQgPSBuZXRjb25zb2xlX3dyaXRlX2V4dCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM4OTpcXHQud3JpdGVfYXRvbWljID0gbmV0Y29uc29sZV93cml0ZV9leHQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzOTAtXFx0LmRldmljZV9sb2NrID0gbmV0Y29uc29sZV9kZXZpY2VfbG9jayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTI6MjA6NTIuMTQwMTc2NjVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk5Nzg3MDkxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldGNvbnNvbGUgUkNVIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGltcGxlbWVudGluZyBSZWFkLUNvcHktVXBkYXRlIChSQ1UpIHByb3RlY3Rpb24gZm9yIHRoZSBgdXNlcmRhdGFgIGZpZWxkIHdpdGhpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzIHJlbGF0ZWQgdG8gaG93IHRoZSBjb25maWd1cmF0aW9uIGRhdGEgaXMgbWFuYWdlZCBhbmQgYWNjZXNzZWQuXG5cblRoZSBrZXkgZW50cnkgcG9pbnRzIGFyZSBjbGVhcjogYG5ldGNvbnNvbGVfd3JpdGVfZXh0YCBhbmQgYG5ldGNvbnNvbGVfd3JpdGVfYmFzaWNgIGFyZSB0aGUgcHVibGljIGZhY2VzIGZvciB3cml0aW5nIHRvIHRoZSBjb25zb2xlLCBhbmQgYHVzZXJkYXR1bV92YWx1ZV9zdG9yZWAgYW5kIGB1c2VyZGF0dW1fZHJvcGAgYXJlIHRoZSBjb25maWdmcyBlbnRyeSBwb2ludHMgZm9yIG1hbmFnaW5nIHRoZSBgdXNlcmRhdGFgLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQ6XG5cbiogICBgdXBkYXRlX3VzZXJkYXRhYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgdGhlIGBuZXRjb25zX3VzZXJkYXRhYCBzdHJ1Y3R1cmUgdXNpbmcgYHJjdV9yZXBsYWNlX3BvaW50ZXJgLiBUaGlzIGlzIHdoZXJlIHRoZSBuZXcgZGF0YSBjb21lcyBpbiBhbmQgdGhlIG9sZCBkYXRhIGlzIGdyYWNlZnVsbHkgcmVsaW5xdWlzaGVkIHZpYSBSQ1Ugc2VtYW50aWNzLlxuKiAgIGBzZW5kX2V4dF9tc2dfdWRwYCBpcyB0aGUgY3JpdGljYWwgZnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhpcyBwcm90ZWN0ZWQgYHVzZXJkYXRhYC4gSSBzZWUgaXQgdXNpbmcgYHJjdV9yZWFkX2xvY2soKWAsIGByY3VfZGVyZWZlcmVuY2UoKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgdG8gc2FmZWx5IGFjY2VzcyB0aGUgZGF0YS4gVGhpcyBpbXBsaWVzIGEgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIG1lYW5pbmcgd2UgY291bGQgcG90ZW50aWFsbHkgaGF2ZSBoaWdoIHJlYWQgcGVyZm9ybWFuY2Ugd2hlbiB1cGRhdGluZyB0aGUgY29uZmlncy5cbiogICBgdXNlcmRhdHVtX3ZhbHVlX3N0b3JlYCBhbmQgYHVzZXJkYXR1bV9kcm9wYCBhcmUgdGhlIGNvbmZpZ2ZzIGhvb2tzIHRoYXQgdWx0aW1hdGVseSAqY2FsbCogYHVwZGF0ZV91c2VyZGF0YWAgdG8gaGFuZGxlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgYHNlbmRfZXh0X21zZ191ZHBgLCBgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbmAsIGBzZW5kX2ZyYWdtZW50ZWRfYm9keWAsIGFuZCBgc2VuZF9tc2dfZnJhZ21lbnRlZGAgYXJlIGFsbCBtb2RpZmllZCB0byB0YWtlIGB1c2VyZGF0YWAgYXMgYW4gYXJndW1lbnQuIFRoZSBwYXRjaCBpcyBlbnN1cmluZyB0aGUgY3VycmVudCB1c2VyZGF0YSBpcyBwYXNzZWQgZG93biwgaW5zdGVhZCBvZiBzb21lIG90aGVyIGNvcHkgb2YgdGhlIHVzZXJkYXRhLlxuXG5UaGUgYG5ldGNvbnNvbGVfdGFyZ2V0X3JlbGVhc2VgIGFuZCBgZnJlZV9wYXJhbV90YXJnZXRgIGZ1bmN0aW9ucyBhcmUgYWxzbyBtb2RpZmllZCB0byBga2ZyZWUoKWAgdGhlIG9sZCB1c2VyZGF0YSB1c2luZyBgcmN1X2FjY2Vzc19wb2ludGVyYCwgaW5kaWNhdGluZyB0aGUgcmVsZWFzZSBwYXJ0IG9mIHRoZSBSQ1UgY3ljbGUuXG5cblRoZXJlZm9yZSwgZm9yIG15IHRlc3RpbmcgYW5kIGFuYWx5c2lzLCBteSBpbml0aWFsIGxpc3Qgb2YgZnVuY3Rpb25zIEkgd2lsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGlzOlxuXG4qICAgYHVwZGF0ZV91c2VyZGF0YWAgKGZvciBSQ1UgdXBkYXRlKVxuKiAgIGBzZW5kX2V4dF9tc2dfdWRwYCAoZm9yIFJDVSByZWFkKVxuKiAgIGB1c2VyZGF0dW1fdmFsdWVfc3RvcmVgIChjb25maWdmcyB1cGRhdGUpXG4qICAgYHVzZXJkYXR1bV9kcm9wYCAoY29uZmlnZnMgdXBkYXRlKVxuKiAgIGBuZXRjb25zb2xlX3dyaXRlX2V4dGAgKGJlY2F1c2UgSSBzZWUgaXQgYXQgdGhlIHRvcCwgYW5kIGxpa2VseSBpbnRlcmFjdHMgd2l0aCBhbGwgdGhlIGZ1bmN0aW9ucyBhYm92ZSwgd2l0aCBgbmV0Y29uc29sZV93cml0ZV9iYXNpY2ApXG5cbkdpdmVuIHRoaXMgY2hhbmdlIGlzIGZ1bmRhbWVudGFsIHRvIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24sIGl0J3MgY3JpdGljYWwgdG8gZnV6eiB0aGlzIGFyZWEgd2l0aCBjb25jdXJyZW50IHVwZGF0ZXMgdGhyb3VnaCBjb25maWdmcyBhbmQgY29uc29sZSB3cml0ZXMgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBvciBkYXRhIHJhY2VzIGFyZSBpbnRyb2R1Y2VkLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB2ZXJpZnkgYXJlIGBORVRDT05TT0xFYCwgYE5FVENPTlNPTEVfRFlOQU1JQ2AsIGFuZCBgQ09ORklHRlNfRlNgLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgdGhlIGNvcmUga2VybmVsLCBsaWtlbHkgaW5jcmVhc2luZyBpdHMgc3RhYmlsaXR5LiBUaW1lIHRvIHNldCB1cCB0aGF0IGZ1enppbmcgY2FtcGFpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTUyLCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMjoyMToxMi4xMTg4ODk3NDhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwNjE4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1cGRhdGVfdXNlcmRhdGFcIixcbiAgICBcInNlbmRfZXh0X21zZ191ZHBcIixcbiAgICBcInVzZXJkYXR1bV92YWx1ZV9zdG9yZVwiLFxuICAgIFwidXNlcmRhdHVtX2Ryb3BcIixcbiAgICBcIm5ldGNvbnNvbGVfd3JpdGVfZXh0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIGB1c2VyZGF0YWAgcGF5bG9hZCBpbiB0aGUgbmV0Y29uc29sZSBkcml2ZXIuIEl0IG1vZGlmaWVzIGhvdyB1c2VyZGF0YSBpcyB1cGRhdGVkIHZpYSBjb25maWdmcyBhbmQgaG93IGl0IGlzIHJlYWQgZHVyaW5nIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIChkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMpIHRoYXQgcHJldmVudHMgdXNlLWFmdGVyLWZyZWUgYW5kIGRhdGEgcmFjZXMuIEl0IGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBSQ1UgaW1wbGVtZW50YXRpb24gaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIGNyYXNoZXMgdW5kZXIgY29uY3VycmVudCBjb25maWdmcyB1cGRhdGVzIGFuZCBjb25zb2xlIHdyaXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXBkYXRlX3VzZXJkYXRhXCIsXG4gICAgXCJzZW5kX2V4dF9tc2dfdWRwXCIsXG4gICAgXCJ1c2VyZGF0dW1fdmFsdWVfc3RvcmVcIixcbiAgICBcInVzZXJkYXR1bV9kcm9wXCIsXG4gICAgXCJuZXRjb25zb2xlX3dyaXRlX2V4dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBgdXNlcmRhdGFgIHBheWxvYWQgaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyLiBJdCBtb2RpZmllcyBob3cgdXNlcmRhdGEgaXMgdXBkYXRlZCB2aWEgY29uZmlnZnMgYW5kIGhvdyBpdCBpcyByZWFkIGR1cmluZyBtZXNzYWdlIHRyYW5zbWlzc2lvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCAoZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jKSB0aGF0IHByZXZlbnRzIHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLiBJdCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgUkNVIGltcGxlbWVudGF0aW9uIGlzIGNvcnJlY3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBjcmFzaGVzIHVuZGVyIGNvbmN1cnJlbnQgY29uZmlnZnMgdXBkYXRlcyBhbmQgY29uc29sZSB3cml0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowl5nq4[1] Phase: Succeeded StartedAt: 2026-08-05 12:21:23 +0000 UTC FinishedAt: 2026-08-05 12:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 12:21:23 +0000 UTC FinishedAt: 2026-08-05 12:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2] Phase: Succeeded StartedAt: 2026-08-05 12:21:23 +0000 UTC FinishedAt: 2026-08-05 16:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 12:21:23 +0000 UTC FinishedAt: 2026-08-05 16:07:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 12:21:23 +0000 UTC FinishedAt: 2026-08-05 12:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 12:21:23 +0000 UTC FinishedAt: 2026-08-05 12:21:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowl5nq4/series-workflowl5nq4-convert-artifact-513791137/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 12:21:33 +0000 UTC FinishedAt: 2026-08-05 12:38:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 12:21:33 +0000 UTC FinishedAt: 2026-08-05 12:38:39 +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:*e10111e9-8fd1-477a-a32b-e2696ddb2806,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-workflowl5nq4/series-workflowl5nq4-convert-artifact-513791137/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": "edfa4ac8-166a-4a2c-b555-27e309d60852", "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-workflowl5nq4/series-workflowl5nq4-build-action-4280331215/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 12:21:33 +0000 UTC FinishedAt: 2026-08-05 12:38:29 +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:*e10111e9-8fd1-477a-a32b-e2696ddb2806,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-workflowl5nq4/series-workflowl5nq4-convert-artifact-513791137/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": "edfa4ac8-166a-4a2c-b555-27e309d60852", "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-workflowl5nq4/series-workflowl5nq4-build-action-4280331215/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 12:38:39 +0000 UTC FinishedAt: 2026-08-05 12:38:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 12:38:39 +0000 UTC FinishedAt: 2026-08-05 12:38:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 12:38:39 +0000 UTC FinishedAt: 2026-08-05 12:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 12:38:39 +0000 UTC FinishedAt: 2026-08-05 12:38:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowl5nq4/series-workflowl5nq4-convert-artifact-2698833652/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 12:38:49 +0000 UTC FinishedAt: 2026-08-05 12:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 12:38:49 +0000 UTC FinishedAt: 2026-08-05 12:40:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*edfa4ac8-166a-4a2c-b555-27e309d60852,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-workflowl5nq4/series-workflowl5nq4-build-action-4280331215/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-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 12:41:08 +0000 UTC FinishedAt: 2026-08-05 12:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 12:41:08 +0000 UTC FinishedAt: 2026-08-05 12:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 12:41:08 +0000 UTC FinishedAt: 2026-08-05 13:02:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 12:41:08 +0000 UTC FinishedAt: 2026-08-05 13:02:22 +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:*e10111e9-8fd1-477a-a32b-e2696ddb2806,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-workflowl5nq4/series-workflowl5nq4-convert-artifact-2698833652/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": "6b27ecc5-c752-4285-abe4-921831804022", "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-workflowl5nq4/series-workflowl5nq4-build-action-1427907520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 12:41:08 +0000 UTC FinishedAt: 2026-08-05 13:01:51 +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:*e10111e9-8fd1-477a-a32b-e2696ddb2806,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-workflowl5nq4/series-workflowl5nq4-convert-artifact-2698833652/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": "6b27ecc5-c752-4285-abe4-921831804022", "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-workflowl5nq4/series-workflowl5nq4-build-action-1427907520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 13:02:22 +0000 UTC FinishedAt: 2026-08-05 13:02:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 13:02:22 +0000 UTC FinishedAt: 2026-08-05 13:02:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 13:02:22 +0000 UTC FinishedAt: 2026-08-05 13:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 13:02:22 +0000 UTC FinishedAt: 2026-08-05 13:04:16 +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:*6b27ecc5-c752-4285-abe4-921831804022,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-workflowl5nq4/series-workflowl5nq4-build-action-1427907520/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-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 13:04:26 +0000 UTC FinishedAt: 2026-08-05 16:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 13:04:26 +0000 UTC FinishedAt: 2026-08-05 16:07:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"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:*edfa4ac8-166a-4a2c-b555-27e309d60852,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6b27ecc5-c752-4285-abe4-921831804022,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-workflowl5nq4/series-workflowl5nq4-build-action-4280331215/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-workflowl5nq4/series-workflowl5nq4-build-action-1427907520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 13:04:26 +0000 UTC FinishedAt: 2026-08-05 13:04:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 13:04:26 +0000 UTC FinishedAt: 2026-08-05 13:04:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowl5nq4/series-workflowl5nq4-convert-artifact-4162220317/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 13:04:26 +0000 UTC FinishedAt: 2026-08-05 13:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 13:04:26 +0000 UTC FinishedAt: 2026-08-05 13:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 13:04:26 +0000 UTC FinishedAt: 2026-08-05 13:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 13:04:36 +0000 UTC FinishedAt: 2026-08-05 16:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl5nq4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["update_userdata","send_ext_msg_udp","userdatum_value_store","userdatum_drop","netconsole_write_ext"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS"],"series_id":"abd45107-7f42-404f-9def-e50bce1ea092","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 13:04:36 +0000 UTC FinishedAt: 2026-08-05 16:07:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*edfa4ac8-166a-4a2c-b555-27e309d60852,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6b27ecc5-c752-4285-abe4-921831804022,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowl5nq4/series-workflowl5nq4-build-action-4280331215/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowl5nq4/series-workflowl5nq4-build-action-1427907520/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowl5nq4/series-workflowl5nq4-convert-artifact-4162220317/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}