Name: series-workflow5dzch Phase: Succeeded StartedAt: 2026-08-24 16:33:50 +0000 UTC FinishedAt: 2026-08-24 17:20:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dzch[0] Phase: Succeeded StartedAt: 2026-08-24 16:33:50 +0000 UTC FinishedAt: 2026-08-24 16:59:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dzch[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 16:33:50 +0000 UTC FinishedAt: 2026-08-24 16:59:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_SMACK", "BPF_LSM", "CACHEFILES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_SMACK", "BPF_LSM", "CACHEFILES" ], "series_id": "fbf1f054-896c-4ac0-82a1-06d3a8cc2380" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "security_inode_create", "security_inode_link", "security_inode_symlink", "security_inode_mkdir", "security_inode_mknod", "vfs_create", "vfs_mkobj", "vfs_mkdir", "vfs_mknod", "vfs_symlink", "vfs_link" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NNQUNLJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtub2QmIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbWtvYmomIzM0OywKICAgICYjMzQ7dmZzX21rZGlyJiMzNDssCiAgICAmIzM0O3Zmc19ta25vZCYjMzQ7LAogICAgJiMzNDt2ZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDt2ZnNfbGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBgc3RydWN0IG1udF9pZG1hcCAqYCBhcmd1bWVudCB0byBzZXZlcmFsIExTTSBpbm9kZSBob29rcyAoY3JlYXRlLCBsaW5rLCBzeW1saW5rLCBta2RpciwgbWtub2QsIHBlcm1pc3Npb24pIGFuZCBwcm9wYWdhdGVzIGl0IGZyb20gdGhlIFZGUyBsYXllciB0byB0aGUgTFNNIGltcGxlbWVudGF0aW9ucyBhbmQgQlBGIGhvb2tzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIGhhbmRsaW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MsIHN1Y2ggYXMgZGVyZWZlcmVuY2luZyBhbiBpbnZhbGlkIG9yIGZyZWVkIGBpZG1hcGAgcG9pbnRlciwgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIGdlbmVyYWwga2VybmVsIHRlc3RpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGFuZCBMU00gaG9va3MgKGBzZWN1cml0eV9pbm9kZV8qYCkgdG8gYWNjZXB0IGEgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBhcmd1bWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBzZWN1cml0eSBjaGVja3MgZHVyaW5nIGZpbGUgY3JlYXRpb24sIGxpbmtpbmcsIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyBhY3Jvc3MgbXVsdGlwbGUgTFNNcyAoU0VMaW51eCwgU21hY2ssIEJQRikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzM2RlNjcxZWM4YTkyOTViMzk5YTBjYTViMWE0NDBlNjQ0ZjE0MGE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTY6MzU6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5pbmRleCBmYzY2MTE4ODZiM2I1Li5lZWZlNTQ1M2I5MDRlIDEwMDY0NFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbkBAIC01MSwxNCAmIzQzOzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuJiM0MztcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkXCYjMzQ7LFxuIFx0XHQgICAgICAgcmV0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuJiM0MztcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cHJfZXJyKFwmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWRcJiMzNDssXG4gXHRcdCAgICAgICByZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuY1xuQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAodW5saWtlbHkocmV0dmFsKSlcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pO1xuIFxuQEAgLTY5NSw3ICYjNDM7Njk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRcbiBcdGlmICh1bmxpa2VseSgoKGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuJiM0MztcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQxODgsNyAmIzQzOzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1x0Lyogc2hvdWxkbiYjMzk7dCBpdCBiZSBFTk9TWVM/ICovXG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuQEAgLTQyMTIsNyAmIzQzOzQyMTIsNyBAQCBpbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFxuIFx0bW9kZSBcdTAwMjY9IFNfSUFMTFVHTztcbiBcdG1vZGUgfD0gU19JRlJFRztcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7XG5AQCAtNDMyOCw3ICYjNDM7NDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIFxuIC8qKlxuQEAgLTUyNTgsNyAmIzQzOzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTUzOTUsNyAmIzQzOzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbkBAIC01NzgzLDcgJiM0Mzs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZGlyLVx1MDAzZWlfb3AtXHUwMDNlc3ltbGluaylcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC01OTA3LDcgJiM0Mzs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMjAsMjYgJiM0MzsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBpbnQgKnhhdHRyX2NvdW50KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4mIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgYm9vbCByY3UpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHQgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0IHN0cnVjdCBpYXR0ciAqYXR0cilcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3Rfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC00MDQsMjQgJiM0Mzs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdFx0XHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgICAgYm9vbCByY3UpO1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcbiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdCAgICAgIGludCBtYXNrKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbkBAIC05MDIsOSAmIzQzOzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCB1bW9kZV90IG1vZGUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05MTMsOSAmIzQzOzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWRcbiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTI2LDE2ICYjNDM7OTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0ICBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHRcdFx0XHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk0Niw5ICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NzQsNyAmIzQzOzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC0xNjE0LDYgJiM0MzsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiB0aGUgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWRcbiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZVxuQEAgLTE2MjIsMTIgJiM0MzsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcbiBcbkBAIC0xNjQ4LDYgJiM0MzsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZVxuICAqIEBkaXI6IG5ldyBwYXJlbnQgZGlyZWN0b3J5XG4gICogQG5ld19kZW50cnk6IG5ldyBsaW5rXG5AQCAtMTY1NiwxMiAmIzQzOzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuJiM0MztcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkX2JhY2tpbmdfaW5vZGUob2xkX2RlbnRyeSkpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIH1cbiBcbiAvKipcbkBAIC0xNjgyLDYgJiM0MzsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmtcbiAgKiBAb2xkX25hbWU6IGV4aXN0aW5nIGZpbGVuYW1lXG5AQCAtMTY5MCwxNiAmIzQzOzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuIH1cbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcbkBAIC0xNzA5LDExICYjNDM7MTcxMywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7XG4gXG5AQCAtMTczNSw2ICYjNDM7MTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBmaWxlXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcbkBAIC0xNzQ3LDEyICYjNDM7MTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuIH1cbiBcbiAvKipcbkBAIC0xODIzLDYgJiM0MzsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZFxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogaW5vZGVcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcbiAgKlxuQEAgLTE4MzUsMTEgJiM0MzsxODQyLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHQgICAgICBpbnQgbWFzaylcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDAzNWFhZjExM2QxZGEuLjk2Nzk4NGQwYWYzMDAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTMwNzQsMTIgJiM0MzszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgXHUwMDI2YWQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcbiB9XG5AQCAtMzA4OSwxMiAmIzQzOzMwOTEsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpO1xuIH1cbkBAIC0zMTA0LDcgJiM0MzszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpO1xuIH1cbkBAIC0zMjM2LDEzICYjNDM7MzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuIFxuIC8qKlxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWRcbiAgKiBAcmVxdWVzdGVkOiB0aGUgYWNjZXNzZXMgYmVpbmcgcmVxdWVzdGVkXG4gICpcbiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG9cbiAgKiBAcmVxdWVzdGVkLiAgUmV0dXJucyAwIGlmIGFsbG93ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4ge1xuIFx0aW50IG1hc2s7XG4gXHR1MzIgcGVybXM7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTEwODksMTQgJiM0MzsxMDg5LDE1IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9saW5rIC0gU21hY2sgY2hlY2sgb24gbGlua1xuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0XG4gICogQGRpcjogdW51c2VkXG4gICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4mIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHN0cnVjdCBzbWFja19rbm93biAqaXNwO1xuIFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xuQEAgLTEyMjYsNiAmIzQzOzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxuICAqXG5AQCAtMTIzMyw3ICYjNDM7MTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICBpbnQgbWFzaylcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5AQCAtMSwxOCAmIzQzOzEsMzAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4gXG4gLypcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDtsc20uc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bHNtX3RhaWxjYWxsLnNrZWwuaFwmIzM0O1xuIFxuIGNoYXIgKkNNRF9BUkdTW10gPSB7XCYjMzQ7dHJ1ZVwmIzM0OywgTlVMTH07XG4gXG4mIzQzO2VudW0ge1xuJiM0MztcdElOT0RFX0lETUFQX0FMTCA9ICgxVSBcdTAwM2NcdTAwM2MgNikgLSAxLFxuJiM0Mzt9O1xuJiM0MztcbiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIHtcbiBcdGludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1cztcbkBAIC0zMCw2ICYjNDM7NDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTtcbiYjNDM7XHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7XG4mIzQzO1x0aW50IGZkLCBzYXZlZF9lcnJubyA9IDA7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcbiYjNDM7XHRcdHNhdmVkX2Vycm5vID0gRUlPO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRpZiAoc2F2ZWRfZXJybm8pIHtcbiYjNDM7XHRcdGVycm5vID0gc2F2ZWRfZXJybm87XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX3VzZXJuc19maWxlKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbNjRdO1xuJiM0MztcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7L3Byb2MvJWQvJXNcJiMzNDssIHBpZCwgbmFtZSk7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuJiM0MztcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoWzY0XTtcbiYjNDM7XHRwaWRfdCBwaWQsIHdhaXRlZDtcbiYjNDM7XHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKHBpZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAocGlkID09IDApIHtcbiYjNDM7XHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxuJiM0MztcdFx0XHRfZXhpdCgxKTtcbiYjNDM7XHRcdHJhaXNlKFNJR1NUT1ApO1xuJiM0MztcdFx0X2V4aXQoMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCBXVU5UUkFDRUQpO1xuJiM0MztcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuJiM0MztcdGlmICh3YWl0ZWQgIT0gcGlkKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHtcbiYjNDM7XHRcdHBpZCA9IC0xO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqL1xuJiM0MztcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O3NldGdyb3Vwc1wmIzM0OywgXCYjMzQ7ZGVueVwmIzM0OykgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVOT0VOVClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O3VpZF9tYXBcJiMzNDssIFwmIzM0OzAgMCAxXCYjMzQ7KSB8fFxuJiM0MztcdCAgICB3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O2dpZF9tYXBcJiMzNDssIFwmIzM0OzAgMCAxXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0Oy9wcm9jLyVkL25zL3VzZXJcJiMzNDssIHBpZCk7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuJiM0MztcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGlmIChwaWQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGtpbGwocGlkLCBTSUdLSUxMKTtcbiYjNDM7XHRcdGRvIHtcbiYjNDM7XHRcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApO1xuJiM0MztcdFx0fSB3aGlsZSAod2FpdGVkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4mIzQzO1x0fVxuJiM0MztcdGVycm5vID0gc2F2ZWRfZXJybm87XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHtcbiYjNDM7XHRcdC5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgZnNmZCA9IC0xLCBtbnRmZCA9IC0xLCBzYXZlZF9lcnJubywgdXNlcm5zX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcbiYjNDM7XHRpZiAodXNlcm5zX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovXG4mIzQzO1x0ZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sIFwmIzM0O3RtcGZzXCYjMzQ7LCBGU09QRU5fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGZzZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRtbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApO1xuJiM0MztcdGlmIChtbnRmZCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDtcbiYjNDM7XHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcJiMzNDtcJiMzNDssIEFUX0VNUFRZX1BBVEgsIFx1MDAyNmF0dHIsXG4mIzQzO1x0XHQgICAgc2l6ZW9mKGF0dHIpKSkge1xuJiM0MztcdFx0Y2xvc2UobW50ZmQpO1xuJiM0MztcdFx0bW50ZmQgPSAtMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRpZiAoZnNmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmc2ZkKTtcbiYjNDM7XHRpZiAodXNlcm5zX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHVzZXJuc19mZCk7XG4mIzQzO1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbiYjNDM7XHRyZXR1cm4gbW50ZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gLTEsIHJldCA9IC0xO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5hdChkaXJmZCwgXCYjMzQ7ZmlsZVwmIzM0OywgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxuJiM0MztcdFx0ICAgIDA2MDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcJiMzNDtjcmVhdGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGZkID0gLTE7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFwmIzM0O2RpclwmIzM0OywgMDcwMCksIFwmIzM0O21rZGlyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcJiMzNDt0YXJnZXRcJiMzNDssIGRpcmZkLCBcJiMzNDtzeW1saW5rXCYjMzQ7KSwgXCYjMzQ7c3ltbGlua1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsIFwmIzM0O2ZpbGVcJiMzNDssIGRpcmZkLCBcJiMzNDtsaW5rXCYjMzQ7LCAwKSwgXCYjMzQ7bGlua1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgXCYjMzQ7Zmlmb1wmIzM0OywgMDYwMCksIFwmIzM0O21rbm9kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHR1bmxpbmthdChkaXJmZCwgXCYjMzQ7bGlua1wmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2ZpZm9cJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KGRpcmZkLCBcJiMzNDtzeW1saW5rXCYjMzQ7LCAwKTtcbiYjNDM7XHR1bmxpbmthdChkaXJmZCwgXCYjMzQ7ZmlsZVwmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2RpclwmIzM0OywgQVRfUkVNT1ZFRElSKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHRtcGRpcltdID0gXCYjMzQ7L3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXCYjMzQ7O1xuJiM0MztcdF9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMO1xuJiM0MztcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xuJiM0MztcdGludCByZXQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXCYjMzQ7bWtkdGVtcFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcJiMzNDtvcGVuX3RtcGRpclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXCYjMzQ7Y3JlYXRlX2lkbWFwcGVkX3RtcGZzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCBcJiMzNDtpZGVudGl0eV9pZG1hcFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7aWRtYXBwZWRfbW91bnRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0cmV0ID0gQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLFxuJiM0MztcdFx0XHRcJiMzNDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuXCYjMzQ7KSA/IDAgOiAtMTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoaWRtYXBwZWRfZGlyZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xuJiM0MztcdGlmIChkaXJmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShkaXJmZCk7XG4mIzQzO1x0cm1kaXIodG1wZGlyKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG5AQCAtNTMsNiAmIzQzOzI3OCwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4gXG4mIzQzO1x0ZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X2xzbV9pbm9kZV9pZG1hcFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdGVyciA9IHN0YWNrX21wcm90ZWN0KCk7XG4gXHRpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCBcJiMzNDtzdGFja19tcHJvdGVjdFwmIzM0OykgfHxcbiBcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXCYjMzQ7c3RhY2tfbXByb3RlY3RcJiMzNDspKVxuQEAgLTcxLDYgJiM0MzszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3Rlc3QgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9jb3VudCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC04NCw2ICYjNDM7ODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7XG4gaW50IG1wcm90ZWN0X2NvdW50ID0gMDtcbiBpbnQgYnBybV9jb3VudCA9IDA7XG4mIzQzO19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuJiM0MztfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdElOT0RFX0lETUFQX0NSRUFURVx0PSAxVSBcdTAwM2NcdTAwM2MgMCxcbiYjNDM7XHRJTk9ERV9JRE1BUF9MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAxLFxuJiM0MztcdElOT0RFX0lETUFQX1NZTUxJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDIsXG4mIzQzO1x0SU5PREVfSURNQVBfTUtESVJcdD0gMVUgXHUwMDNjXHUwMDNjIDMsXG4mIzQzO1x0SU5PREVfSURNQVBfTUtOT0RcdD0gMVUgXHUwMDNjXHUwMDNjIDQsXG4mIzQzO1x0SU5PREVfSURNQVBfUEVSTUlTU0lPTlx0PSAxVSBcdTAwM2NcdTAwM2MgNSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4mIzQzO3tcbiYjNDM7XHRfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcdTAwMjZcdTAwMjYgaWRtYXA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpZG1hcC1cdTAwM2V1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgaWRtYXAtXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIF9fdTMyIGhvb2ssIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKVxuJiM0MztcdFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vaztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9jcmVhdGVcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20vaW5vZGVfbGlua1wmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9MSU5LLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX3N5bWxpbmtcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX21rZGlyXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9ta25vZFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS05PRCwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9wZXJtaXNzaW9uXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTtcbiYjNDM7fVxuIFxuIFNFQyhcJiMzNDtsc20vZmlsZV9tcHJvdGVjdFwmIzM0OylcbiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NNQUNLJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtub2QmIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbWtvYmomIzM0OywKICAgICYjMzQ7dmZzX21rZGlyJiMzNDssCiAgICAmIzM0O3Zmc19ta25vZCYjMzQ7LAogICAgJiMzNDt2ZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDt2ZnNfbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBhbmQgTFNNIGhvb2tzIChgc2VjdXJpdHlfaW5vZGVfKmApIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgYXJndW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3Rpbmcgc2VjdXJpdHkgY2hlY2tzIGR1cmluZyBmaWxlIGNyZWF0aW9uLCBsaW5raW5nLCBhbmQgcGVybWlzc2lvbiBjaGVja3MgYWNyb3NzIG11bHRpcGxlIExTTXMgKFNFTGludXgsIFNtYWNrLCBCUEYpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzNkZTY3MWVjOGE5Mjk1YjM5OWEwY2E1YjFhNDQwZTY0NGYxNDBhOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE2OjM1OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0Ci0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKQEAgLTUxLDE0ICYjNDM7NTEsMTQgQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCiB7CiAJaW50IHJldDsKIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiYjNDM7CXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKCZhbXA7bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwomIzQzOwlyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwogCWlmIChyZXQgJmx0OyAwKQogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC02NTgsNyAmIzQzOzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmICh1bmxpa2VseShyZXR2YWwpKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTsKIApAQCAtNjk1LDcgJiM0Mzs2OTUsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlYyhzdHJ1Y3QgbW50X2lkbWFwICppZAogCWlmICh1bmxpa2VseSgoKGlub2RlLSZndDtpX21vZGUgJmFtcDsgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKQogCQlyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogCiAvKioKQEAgLTQxODgsNyAmIzQzOzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAJCXJldHVybiAtRUFDQ0VTOwkvKiBzaG91bGRuJiMzOTt0IGl0IGJlIEVOT1NZUz8gKi8KIAogCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpOwpAQCAtNDIxMiw3ICYjNDM7NDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAKIAltb2RlICZhbXA7PSBTX0lBTExVR087CiAJbW9kZSB8PSBTX0lGUkVHOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSBmKGRlbnRyeSwgbW9kZSwgYXJnKTsKQEAgLTQzMjgsNyAmIzQzOzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwogfQogCiAvKioKQEAgLTUyNTgsNyAmIzQzOzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC01Mzk1LDcgJiM0Mzs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJZ290byBlcnI7CiAKIAltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnI7CiAKQEAgLTU3ODMsNyAmIzQzOzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmICghZGlyLSZndDtpX29wLSZndDtzeW1saW5rKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTU5MDcsNyAmIzQzOzU5MDcsNyBAQCBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCkBAIC0xMjAsMjYgJiM0MzsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgaW50ICp4YXR0cl9jb3VudCkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgY29uc3QgY2hhciAqb2xkX25hbWUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSB1bW9kZV90IG1vZGUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCSBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGJvb2wgcmN1KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJIHN0cnVjdCBpYXR0ciAqYXR0cikKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC00MDQsMjQgJiM0Mzs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTsKLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCQkJc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwogaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJCQkgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwKIAkJCSAgdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgICBib29sIHJjdSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICAgICAgaW50IG1hc2spOwogaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApAQCAtOTAyLDkgJiM0Mzs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQlzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCXVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTkxMyw5ICYjNDM7OTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZAogc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsgfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCi0JCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXJldHVybiAwOwogfQpAQCAtOTI2LDE2ICYjNDM7OTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCSAgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQkgY29uc3QgY2hhciAqb2xkX25hbWUpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCWludCBtb2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTk0Niw5ICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQlpbnQgbW9kZSwgZGV2X3QgZGV2KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiAwOwogfQpAQCAtOTc0LDcgJiM0Mzs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTYxNCw2ICYjNDM7MTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkCiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZQpAQCAtMTYyMiwxMiAmIzQzOzE2MjMsMTIgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICB1bW9kZV90IG1vZGUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7CiAKQEAgLTE2NDgsNiAmIzQzOzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZQogICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnkKICAqIEBuZXdfZGVudHJ5OiBuZXcgbGluawpAQCAtMTY1NiwxMiAmIzQzOzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKIH0KIAogLyoqCkBAIC0xNjgyLDYgJiM0MzsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmsKICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWUKQEAgLTE2OTAsMTYgJiM0MzsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgICBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7CiB9CiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnkKICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGUKQEAgLTE3MDksMTEgJiM0MzsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTsKIApAQCAtMTczNSw2ICYjNDM7MTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBmaWxlCiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZQpAQCAtMTc0NywxMiAmIzQzOzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiB9CiAKIC8qKgpAQCAtMTgyMyw2ICYjNDM7MTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiBpbm9kZQogICogQG1hc2s6IGFjY2VzcyBtYXNrCiAgKgpAQCAtMTgzNSwxMSAmIzQzOzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCSAgICAgIGludCBtYXNrKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMzA3NCwxMiAmIzQzOzMwNzQsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICZhbXA7YWQpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7CiB9CkBAIC0zMDg5LDEyICYjNDM7MzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTsKIH0KQEAgLTMxMDQsNyAmIzQzOzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTsKIH0KQEAgLTMyMzYsMTMgJiM0MzszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsCiAKIC8qKgogICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWQKICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWQKICAqCiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG8KICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZCkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpCiB7CiAJaW50IG1hc2s7CiAJdTMyIHBlcm1zOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtMTA4OSwxNCAmIzQzOzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiAvKioKICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0CiAgKiBAZGlyOiB1bnVzZWQKICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXN0cnVjdCBzbWFja19rbm93biAqaXNwOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKQEAgLTEyMjYsNiAmIzQzOzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKIAogLyoqCiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKCkKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb24KICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZAogICoKQEAgLTEyMzMsNyAmIzQzOzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKICAqCiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICBpbnQgbWFzaykKIHsKIAlzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwpAQCAtMSwxOCAmIzQzOzEsMzAgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQogCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuCiAgKi8KIAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7bHNtLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xzbV90YWlsY2FsbC5za2VsLmgmIzM0OwogCiBjaGFyICpDTURfQVJHU1tdID0geyYjMzQ7dHJ1ZSYjMzQ7LCBOVUxMfTsKIAomIzQzO2VudW0gewomIzQzOwlJTk9ERV9JRE1BUF9BTEwgPSAoMVUgJmx0OyZsdDsgNikgLSAxLAomIzQzO307CiYjNDM7CiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKQogewogCWludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1czsKQEAgLTMwLDYgJiM0Mzs0MiwyMTkgQEAgaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZCkKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTsKJiM0MzsJfSB3aGlsZSAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7CiYjNDM7CWludCBmZCwgc2F2ZWRfZXJybm8gPSAwOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDIHwgT19OT0NUVFkgfCBPX05PRk9MTE9XKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwllbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pCiYjNDM7CQlzYXZlZF9lcnJubyA9IEVJTzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAoc2F2ZWRfZXJybm8pIHsKJiM0MzsJCWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CWludCBsZW47CiYjNDM7CiYjNDM7CWxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDsvcHJvYy8lZC8lcyYjMzQ7LCBwaWQsIG5hbWUpOwomIzQzOwlpZiAobGVuICZsdDsgMCB8fCAoc2l6ZV90KWxlbiAmZ3Q7PSBzaXplb2YocGF0aCkpIHsKJiM0MzsJCWVycm5vID0gRU9WRVJGTE9XOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB3cml0ZV9maWxlKHBhdGgsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfdXNlcm5zX2ZkKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbNjRdOwomIzQzOwlwaWRfdCBwaWQsIHdhaXRlZDsKJiM0MzsJaW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1czsKJiM0MzsKJiM0MzsJcGlkID0gZm9yaygpOwomIzQzOwlpZiAocGlkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSkKJiM0MzsJCQlfZXhpdCgxKTsKJiM0MzsJCXJhaXNlKFNJR1NUT1ApOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJd2FpdGVkID0gd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCBXVU5UUkFDRUQpOwomIzQzOwl9IHdoaWxlICh3YWl0ZWQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwlpZiAod2FpdGVkICE9IHBpZCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIVdJRlNUT1BQRUQoc3RhdHVzKSkgewomIzQzOwkJcGlkID0gLTE7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqLwomIzQzOwlpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O3NldGdyb3VwcyYjMzQ7LCAmIzM0O2RlbnkmIzM0OykgJmFtcDsmYW1wOyBlcnJubyAhPSBFTk9FTlQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDt1aWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykgfHwKJiM0MzsJICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDtnaWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkL25zL3VzZXImIzM0OywgcGlkKTsKJiM0MzsJaWYgKGxlbiAmbHQ7IDAgfHwgKHNpemVfdClsZW4gJmd0Oz0gc2l6ZW9mKHBhdGgpKSB7CiYjNDM7CQllcnJubyA9IEVPVkVSRkxPVzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwlpZiAocGlkICZndDsgMCkgewomIzQzOwkJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwkJZG8gewomIzQzOwkJCXdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTsKJiM0MzsJCX0gd2hpbGUgKHdhaXRlZCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CX0KJiM0MzsJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHsKJiM0MzsJCS5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsCiYjNDM7CX07CiYjNDM7CWludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTsKJiM0MzsKJiM0MzsJdXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqLwomIzQzOwlmc2ZkID0gc3lzY2FsbChfX05SX2Zzb3BlbiwgJiMzNDt0bXBmcyYjMzQ7LCBGU09QRU5fQ0xPRVhFQyk7CiYjNDM7CWlmIChmc2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwltbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApOwomIzQzOwlpZiAobW50ZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWF0dHIudXNlcm5zX2ZkID0gdXNlcm5zX2ZkOwomIzQzOwlpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCAmIzM0OyYjMzQ7LCBBVF9FTVBUWV9QQVRILCAmYW1wO2F0dHIsCiYjNDM7CQkgICAgc2l6ZW9mKGF0dHIpKSkgewomIzQzOwkJY2xvc2UobW50ZmQpOwomIzQzOwkJbW50ZmQgPSAtMTsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJaWYgKGZzZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZzZmQpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZSh1c2VybnNfZmQpOwomIzQzOwllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwlyZXR1cm4gbW50ZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKQomIzQzO3sKJiM0MzsJaW50IGZkID0gLTEsIHJldCA9IC0xOwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQywKJiM0MzsJCSAgICAwNjAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZmQsIDAsICYjMzQ7Y3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJZmQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgJiMzNDtkaXImIzM0OywgMDcwMCksICYjMzQ7bWtkaXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KCYjMzQ7dGFyZ2V0JiMzNDssIGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OyksICYjMzQ7c3ltbGluayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCBkaXJmZCwgJiMzNDtsaW5rJiMzNDssIDApLCAmIzM0O2xpbmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsICYjMzQ7ZmlmbyYjMzQ7LCAwNjAwKSwgJiMzNDtta25vZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSAwOwomIzQzO291dDoKJiM0MzsJaWYgKGZkICZndDs9IDApCiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2xpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpZm8mIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpCiYjNDM7ewomIzQzOwljaGFyIHRtcGRpcltdID0gJiMzNDsvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFgmIzM0OzsKJiM0MzsJX191MzIgZXhwZWN0ZWQgPSBJTk9ERV9JRE1BUF9BTEw7CiYjNDM7CWludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksICYjMzQ7bWtkdGVtcCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJZGlyZmQgPSBvcGVuKHRtcGRpciwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCAmIzM0O29wZW5fdG1wZGlyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCAmIzM0O2NyZWF0ZV9pZG1hcHBlZF90bXBmcyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhkaXJmZCksICYjMzQ7aWRlbnRpdHlfaWRtYXAmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLAomIzQzOwkJICAgICAgICYjMzQ7aWRtYXBwZWRfbW91bnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCwKJiM0MzsJCSAgICAgICAmIzM0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJcmV0ID0gQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiwgZXhwZWN0ZWQsCiYjNDM7CQkJJiMzNDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuJiMzNDspID8gMCA6IC0xOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGlkbWFwcGVkX2RpcmZkICZndDs9IDApCiYjNDM7CQljbG9zZShpZG1hcHBlZF9kaXJmZCk7CiYjNDM7CWlmIChkaXJmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZGlyZmQpOwomIzQzOwlybWRpcih0bXBkaXIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIHsKIAlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CkBAIC01Myw2ICYjNDM7Mjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIAogCXNrZWwtJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpOwogCiYjNDM7CWVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9sc21faW5vZGVfaWRtYXAmIzM0OykpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCWVyciA9IHN0YWNrX21wcm90ZWN0KCk7CiAJaWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSB8fAogCSAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSkKQEAgLTcxLDYgJiM0MzszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpCiAJc2tlbC0mZ3Q7YnNzLSZndDtjb3B5X3Rlc3QgPSAwOwogCXNrZWwtJmd0O2Jzcy0mZ3Q7YnBybV9jb3VudCA9IDA7CiAJc2tlbC0mZ3Q7YnNzLSZndDttcHJvdGVjdF9jb3VudCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwppbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCkBAIC04NCw2ICYjNDM7ODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogaW50IG1vbml0b3JlZF9waWQgPSAwOwogaW50IG1wcm90ZWN0X2NvdW50ID0gMDsKIGludCBicHJtX2NvdW50ID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJSU5PREVfSURNQVBfQ1JFQVRFCT0gMVUgJmx0OyZsdDsgMCwKJiM0MzsJSU5PREVfSURNQVBfTElOSwk9IDFVICZsdDsmbHQ7IDEsCiYjNDM7CUlOT0RFX0lETUFQX1NZTUxJTksJPSAxVSAmbHQ7Jmx0OyAyLAomIzQzOwlJTk9ERV9JRE1BUF9NS0RJUgk9IDFVICZsdDsmbHQ7IDMsCiYjNDM7CUlOT0RFX0lETUFQX01LTk9ECT0gMVUgJmx0OyZsdDsgNCwKJiM0MzsJSU5PREVfSURNQVBfUEVSTUlTU0lPTgk9IDFVICZsdDsmbHQ7IDUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJX191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgJmd0OyZndDsgMzI7CiYjNDM7CiYjNDM7CXJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCAmYW1wOyZhbXA7IGlkbWFwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gaWRtYXAtJmd0O3VpZF9tYXAubnJfZXh0ZW50cyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGlkbWFwLSZndDtnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJICAgICAgX191MzIgaG9vaywgaW50IHJldCkKJiM0Mzt7CiYjNDM7CWlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKQomIzQzOwkJaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rOwomIzQzOwllbHNlCiYjNDM7CQlpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfY3JlYXRlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9zeW1saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfbWtkaXImIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9ta25vZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfcGVybWlzc2lvbiYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTsKJiM0Mzt9CiAKIFNFQygmIzM0O2xzbS9maWxlX21wcm90ZWN0JiMzNDspCiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDc0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNb3VudCBJRCBNYXBwaW5nIGluIExTTSBIb29rcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0ICp3YXJyYW50KiBmdXp6aW5nLCBubyBxdWVzdGlvbi4gVGhlIGludHJvZHVjdGlvbiBvZiBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIGludG8gdmFyaW91cyBMU00gaG9va3MgcmVsYXRlZCB0byBpbm9kZXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgYWx0ZXJhdGlvbiB0byB0aGUgY29yZSBWRlMgYW5kIHNlY3VyaXR5IHN1YnN5c3RlbS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgdGhlIHdvcmtzIOKAkyBmdW5kYW1lbnRhbCBvcGVyYXRpb25zLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGBmcy9uYW1laS5jYCwgYW5kIHNldmVyYWwgc2VjdXJpdHktcmVsYXRlZCBmaWxlcyAoaW5jbHVkaW5nIFNFTGludXggYW5kIFNtYWNrKSBjb25maXJtcyB0aGlzIGFzIGEgcG90ZW50aWFsIHRyb3VibGUgc3BvdC4gVXBkYXRpbmcgdGhlIEJQRiB0ZXN0cyBmdXJ0aGVyIHVuZGVyc2NvcmVzIHRoZSBpbXBvcnRhbmNlLgoKVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdGhhdCBwYXNzaW5nIHRoZSBgaWRtYXBgIHRvIExTTSBob29rcyBnaXZlcyBtb2R1bGVzIChTRUxpbnV4LCBTbWFjaywgQlBGLCBldGMuKSBhY2Nlc3MgdG8gdGhlIG1vdW50IElEIG1hcHBpbmcgZHVyaW5nIHNlY3VyaXR5IGRlY2lzaW9ucy4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSByZWZhY3RvcmluZzsgaXQmIzM5O3MgYSBzdHJ1Y3R1cmFsIGNoYW5nZSB0aGF0IGNhbiBpbmZsdWVuY2UgYWNjZXNzIGNvbnRyb2wgZGVjaXNpb25zIGJhc2VkIG9uIG1vdW50IG5hbWVzcGFjZXMuIFdlIG5lZWQgdG8gZXhwbG9yZSB0aGVzZSBuZXcgY29kZSBwYXRocy4KClNvLCBmdXp6aW5nIGlzIGEgKmdvKi4gTm93LCB0aGUgY29uY3JldGUgcGxhbi4gSSBuZWVkIHRvIGV4dHJhY3QgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZCwgd2hpY2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBXZSBoYXZlOgoKKiAgIGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gCiogICBgc2VsaW51eF9pbm9kZV9jcmVhdGVgLCBgc2VsaW51eF9pbm9kZV9saW5rYCwgYHNlbGludXhfaW5vZGVfc3ltbGlua2AsIGBzZWxpbnV4X2lub2RlX21rZGlyYCwgYHNlbGludXhfaW5vZGVfbWtub2RgLCBgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uYAoqICAgYHNtYWNrX2lub2RlX2xpbmtgLCBgc21hY2tfaW5vZGVfcGVybWlzc2lvbmAKClRoZXNlIGJlY29tZSB0aGUgYEZvY3VzU3ltYm9sc2AgZm9yIG91ciBmdXp6aW5nIGNhbXBhaWduLiBOZXh0IHN0ZXA6IGNvbmZpcm0gcmVhY2hhYmlsaXR5IGFuZCBpZGVudGlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgaXQgbG9va3MgbGlrZSB3ZSYjMzk7bGwgbmVlZCBgU0VDVVJJVFlgLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGFuZCBgQlBGX0xTTWAgZW5hYmxlZCBmb3IgZnVsbCBjb3ZlcmFnZS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGNoZWNrIG9uIHRoZSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBwcm9iYWJseSB0aGUgbW9zdCBiYXNpYyBvbmVzIHRoYXQgd2lsbCByZWFjaCBtdWx0aXBsZSBMU00gbW9kdWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKSBzZWN1cml0eV9pbm9kZV8oY3JlYXRlfGxpbmt8c3ltbGlua3xta2Rpcnxta25vZHxwZXJtaXNzaW9uKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDA0PWludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA2LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MDc6aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA4LVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQwOT12b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDEwLVx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MTE6aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDEyLVx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MTM9aW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MTQ6aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQxNS1cdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MTY6aW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00MTctXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MTg9aW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQxOTppbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQyMC1cdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQyNT1pbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQyNi1cdFx0XHQgICAgICAgYm9vbCByY3UpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQyNzppbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00MjgtXHRcdFx0ICAgICAgaW50IG1hc2spO1xuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTYwOT1pbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjI2OmludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI3LVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjQyPXZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NjAtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2NjE6aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NjItXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjc4PWludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2OTUtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2OTY6aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjk3LVx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzE1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNzE2OmludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MTctXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTczND1pbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3NTUtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE3NTY6aW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc1Ny1cdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTE4MjI9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDQtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4NDU6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDYtXHRcdFx0ICAgICAgaW50IG1hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvcmUgVkZTL1NlY3VyaXR5IEhvb2sgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjaGFuZ2VzLCBhbmQgaXQgc2VlbXMgdGhlIGZvY3VzIGlzIG9uIGNvcmUgVkZTIGFuZCBzZWN1cml0eSBob29rcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9sczogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBgc2VjdXJpdHlfaW5vZGVfbWtub2RgLCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLiBUaGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgYWNjZXNzIGNvbnRyb2wgd2l0aGluIHRoZSBmaWxlc3lzdGVtLCBzbyBhbnkgY2hhbmdlcyBoZXJlIGFyZSBjcml0aWNhbC4KCk9mIGNvdXJzZSwgSSBjYW4mIzM5O3QgaWdub3JlIHRoZSBTRUxpbnV4IGltcGxpY2F0aW9ucyDigJMgdGhlIGBzZWxpbnV4X2lub2RlXypgIGZ1bmN0aW9ucyBhcmUgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBTRUxpbnV4IGlzIGludGVncmF0aW5nLiBTbyBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgYHNlbGludXhfaW5vZGVfY3JlYXRlYCwgYHNlbGludXhfaW5vZGVfbGlua2AsIGBzZWxpbnV4X2lub2RlX3N5bWxpbmtgLCBgc2VsaW51eF9pbm9kZV9ta2RpcmAsIGBzZWxpbnV4X2lub2RlX21rbm9kYCwgYW5kIGBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb25gIGFsb25nc2lkZSB0aGUgYmFzZSBob29rcy4KCkFuZCBpdCYjMzk7cyBub3QganVzdCBTRUxpbnV4OyBTbWFjayBzZWVtcyB0byBiZSBpbnZvbHZlZCB0b28sIHNwZWNpZmljYWxseSB3aXRoIGBzbWFja19pbm9kZV9saW5rYCBhbmQgYHNtYWNrX2lub2RlX3Blcm1pc3Npb25gLiBTbyBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgZml0IGluLgoKVGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGNoZWNrIGlzIHdoZXRoZXIgU0VMaW51eCBhbmQgU21hY2sgYXJlIHVzaW5nIHN0YXRpYyBvciBkeW5hbWljIGxpbmtpbmcgZm9yIHRoZWlyIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBzZWN1cml0eSBtb2R1bGVzIGFyZSBkZXNpZ25lZCB0byBpbnRlcmFjdC4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsaW51eF9pbm9kZV8oY3JlYXRlfGxpbmt8c3ltbGlua3xta2Rpcnxta25vZHxwZXJtaXNzaW9uKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzAxMT1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwNzYtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA3NzpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDc4LVx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwODItXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA4MzpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDg0LVx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMDg5PXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA5My1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDk0OnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDk1LVx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA5OS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTAwOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzEwMS1cdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMxMDY9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxMTAtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzExMTpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxMTItXHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMyMjM9c3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI0Mi0vKipcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjQzOiAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDQtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI1MC0gKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjUxOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNTItXHRcdFx0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDI2Mz1zdGF0aWMgaW50IHNlbGludXhfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MjgwLVx0ICogU2luY2UgdGhlIGlub2RlIGxhYmVsIG9yIHBvbGljeSBzZXFubyBtYXkgaGF2ZSBjaGFuZ2VkXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NDI4MTpcdCAqIGJldHdlZW4gdGhlIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiBjaGVjayBhbmQgdGhlIHNhdmluZ1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQyODItXHQgKiBvZiBzdGF0ZSBhYm92ZSwgcmVjaGVjayB0aGF0IGFjY2VzcyBpcyBzdGlsbCBwZXJtaXR0ZWQuXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1Njc9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYwNy1cdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbiksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYwODpcdExTTV9IT09LX0lOSVQoaW5vZGVfY3JlYXRlLCBzZWxpbnV4X2lub2RlX2NyZWF0ZSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYwOTpcdExTTV9IT09LX0lOSVQoaW5vZGVfbGluaywgc2VsaW51eF9pbm9kZV9saW5rKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjEwLVx0TFNNX0hPT0tfSU5JVChpbm9kZV91bmxpbmssIHNlbGludXhfaW5vZGVfdW5saW5rKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjExOlx0TFNNX0hPT0tfSU5JVChpbm9kZV9zeW1saW5rLCBzZWxpbnV4X2lub2RlX3N5bWxpbmspLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTI6XHRMU01fSE9PS19JTklUKGlub2RlX21rZGlyLCBzZWxpbnV4X2lub2RlX21rZGlyKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjEzLVx0TFNNX0hPT0tfSU5JVChpbm9kZV9ybWRpciwgc2VsaW51eF9pbm9kZV9ybWRpciksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYxNDpcdExTTV9IT09LX0lOSVQoaW5vZGVfbWtub2QsIHNlbGludXhfaW5vZGVfbWtub2QpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTUtXHRMU01fSE9PS19JTklUKGlub2RlX3JlbmFtZSwgc2VsaW51eF9pbm9kZV9yZW5hbWUpLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE3LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9mb2xsb3dfbGluaywgc2VsaW51eF9pbm9kZV9mb2xsb3dfbGluayksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYxODpcdExTTV9IT09LX0lOSVQoaW5vZGVfcGVybWlzc2lvbiwgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE5LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9zZXRhdHRyLCBzZWxpbnV4X2lub2RlX3NldGF0dHIpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjcyCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFNFTGludXggRnVuY3Rpb24gTGlzdGluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBkb2N1bWVudCB0aGVzZSBTRUxpbnV4IGZ1bmN0aW9ucy4gRmlyc3Qgb2ZmLCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBTRUxpbnV4IGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBUaGF0JiMzOTtzIGtleSwgSSBkb24mIzM5O3Qgd2FudCB0byBsaXN0IHRob3NlIGJlY2F1c2UsIHdlbGwsIHRoYXQmIzM5O3Mgbm90IHdoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgd2FudCB0aGUgc3R1ZmYgdGhhdCYjMzk7cyBhY3R1YWxseSBhY2Nlc3NpYmxlLiBUaGUgYHNlY3VyaXR5X2lub2RlXypgIGZhbWlseSBhcmUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMuIFBlcmZlY3QsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTttIGFmdGVyLgoKUmlnaHQsIHNvLCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTtsbCBwdXQgdGhlc2UgaW4gdGhlIGxpc3Q6CmBzZWN1cml0eV9pbm9kZV9jcmVhdGVgCmBzZWN1cml0eV9pbm9kZV9saW5rYApgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AKYHNlY3VyaXR5X2lub2RlX21rZGlyYApgc2VjdXJpdHlfaW5vZGVfbWtub2RgCmBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYAoKTm93LCBsZXQmIzM5O3Mga2VlcCBhbiBleWUgb24gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuIEkgdGhpbmsgYFNFQ1VSSVRZYCBpcyByZWxldmFudCBoZXJlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhhdCYjMzk7cyBlbm91Z2ggdG8gY29udHJvbCB0aGlzIHNldCBvZiBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFQ1VSSVRZJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L0tjb25maWc9OD1zb3VyY2UgXCYjMzQ7c2VjdXJpdHkva2V5cy9LY29uZmlnXCYjMzQ7XG5zZWN1cml0eS9LY29uZmlnLTktXG5zZWN1cml0eS9LY29uZmlnOjEwOmNvbmZpZyBTRUNVUklUWV9ETUVTR19SRVNUUklDVFxuc2VjdXJpdHkvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7UmVzdHJpY3QgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUga2VybmVsIHN5c2xvZ1wmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWc9NTI9Y29uZmlnIE1TRUFMX1NZU1RFTV9NQVBQSU5HU1xuLS1cbnNlY3VyaXR5L0tjb25maWctNzItXG5zZWN1cml0eS9LY29uZmlnOjczOmNvbmZpZyBTRUNVUklUWVxuc2VjdXJpdHkvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHNcJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnPTg2PWNvbmZpZyBIQVNfU0VDVVJJVFlfQVVESVRcbi0tXG5zZWN1cml0eS9LY29uZmlnLTkwLVxuc2VjdXJpdHkvS2NvbmZpZzo5MTpjb25maWcgU0VDVVJJVFlGU1xuc2VjdXJpdHkvS2NvbmZpZy05Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnLTk4LVxuc2VjdXJpdHkvS2NvbmZpZzo5OTpjb25maWcgU0VDVVJJVFlfTkVUV09SS1xuc2VjdXJpdHkvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O1NvY2tldCBhbmQgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1wmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWctMTA3LVxuc2VjdXJpdHkvS2NvbmZpZzoxMDg6Y29uZmlnIFNFQ1VSSVRZX0lORklOSUJBTkRcbnNlY3VyaXR5L0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtJbmZpbmliYW5kIFNlY3VyaXR5IEhvb2tzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZy0xMTYtXG5zZWN1cml0eS9LY29uZmlnOjExNzpjb25maWcgU0VDVVJJVFlfTkVUV09SS19YRlJNXG5zZWN1cml0eS9LY29uZmlnLTExOC1cdGJvb2wgXCYjMzQ7WEZSTSAoSVBTZWMpIE5ldHdvcmtpbmcgU2VjdXJpdHkgSG9va3NcJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnLTEyOS1cbnNlY3VyaXR5L0tjb25maWc6MTMwOmNvbmZpZyBTRUNVUklUWV9QQVRIXG5zZWN1cml0eS9LY29uZmlnLTEzMS1cdGJvb2wgXCYjMzQ7U2VjdXJpdHkgaG9va3MgZm9yIHBhdGhuYW1lIGJhc2VkIGFjY2VzcyBjb250cm9sXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZz0yNjg9Y29uZmlnIExTTVxuLS1cbnNlY3VyaXR5L0tjb25maWctMjg0LVxuc2VjdXJpdHkvS2NvbmZpZzoyODU6Y29uZmlnIFNFQ1VSSVRZX0NPTU1PTkNBUF9LVU5JVF9URVNUXG5zZWN1cml0eS9LY29uZmlnLTI4Ni1cdGJvb2wgXCYjMzQ7QnVpbGQgS1VuaXQgdGVzdHMgZm9yIGNvbW1vbmNhcFwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBcHBBcm1vciBzdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI3LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7QnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1Z2dpbmcgYXNzZXJ0c1wmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzctXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjM4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR19NRVNTQUdFU1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGVidWcgbWVzc2FnZXMgZW5hYmxlZCBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00Ni1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNTgtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjU5OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTYwLVx0Ym9vbCBcJiMzNDtFbmFibGUgaW50cm9zcGVjdGlvbiBvZiBzaGEyNTYgaGFzaGVzIGZvciBsb2FkZWQgcHJvZmlsZXNcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcwLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo3MTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSF9ERUZBVUxUXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcyLSAgICAgICBib29sIFwmIzM0O0VuYWJsZSBwb2xpY3kgaGFzaCBpbnRyb3NwZWN0aW9uIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTgzLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NDpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04NS1cdGJvb2wgXCYjMzQ7QWxsb3cgZXhwb3J0aW5nIHRoZSByYXcgYmluYXJ5IHBvbGljeVwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTUtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjk2OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk3LVx0Ym9vbCBcJiMzNDtQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwNi1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTA3OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9LVU5JVF9URVNUXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOC1cdHRyaXN0YXRlIFwmIzM0O0J1aWxkIEtVbml0IHRlc3RzIGZvciBwb2xpY3lfdW5wYWNrLmNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbnNlY3VyaXR5L2lwZS9LY29uZmlnLTUtXG5zZWN1cml0eS9pcGUvS2NvbmZpZzo2Om1lbnVjb25maWcgU0VDVVJJVFlfSVBFXG5zZWN1cml0eS9pcGUvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtJbnRlZ3JpdHkgUG9saWN5IEVuZm9yY2VtZW50IChJUEUpXCYjMzQ7XG4tLVxuc2VjdXJpdHkvaXBlL0tjb25maWc9OTg9ZW5kbWVudVxuc2VjdXJpdHkvaXBlL0tjb25maWctOTktXG5zZWN1cml0eS9pcGUvS2NvbmZpZzoxMDA6Y29uZmlnIFNFQ1VSSVRZX0lQRV9LVU5JVF9URVNUXG5zZWN1cml0eS9pcGUvS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIEtVbml0IHRlc3RzIGZvciBJUEVcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMi1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWc6Mzpjb25maWcgU0VDVVJJVFlfTEFORExPQ0tcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctNC1cdGJvb2wgXCYjMzQ7TGFuZGxvY2sgc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjMtXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjI0OmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS19MT0dcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjUtXHRib29sXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy0yOC1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWc6Mjk6Y29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLX0tVTklUX1RFU1RcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMzAtXHRib29sIFwmIzM0O0tVbml0IHRlc3RzIGZvciBMYW5kbG9ja1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9sb2FkcGluL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfTE9BRFBJTlxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnLTMtXHRib29sIFwmIzM0O1BpbiBsb2FkIG9mIGtlcm5lbCBmaWxlcyAobW9kdWxlcywgZncsIGV0YykgdG8gb25lIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMTMtXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWc6MTQ6Y29uZmlnIFNFQ1VSSVRZX0xPQURQSU5fRU5GT1JDRVxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtFbmZvcmNlIExvYWRQaW4gYXQgYm9vdFwmIzM0O1xuLS1cbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0yNC1cbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZzoyNTpjb25maWcgU0VDVVJJVFlfTE9BRFBJTl9WRVJJVFlcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0yNi1cdGJvb2wgXCYjMzQ7QWxsb3cgcmVhZGluZyBmaWxlcyBmcm9tIGNlcnRhaW4gb3RoZXIgZmlsZXN5c3RlbXMgdGhhdCB1c2UgZG0tdmVyaXR5XCYjMzQ7XG4tLVxuc2VjdXJpdHkvbG9ja2Rvd24vS2NvbmZpZzoxOmNvbmZpZyBTRUNVUklUWV9MT0NLRE9XTl9MU01cbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWctMi1cdGJvb2wgXCYjMzQ7QmFzaWMgbW9kdWxlIGZvciBlbmZvcmNpbmcga2VybmVsIGxvY2tkb3duXCYjMzQ7XG4tLVxuc2VjdXJpdHkvbG9ja2Rvd24vS2NvbmZpZy04LVxuc2VjdXJpdHkvbG9ja2Rvd24vS2NvbmZpZzo5OmNvbmZpZyBTRUNVUklUWV9MT0NLRE9XTl9MU01fRUFSTFlcbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWctMTAtXHRib29sIFwmIzM0O0VuYWJsZSBsb2NrZG93biBMU00gZWFybHkgaW4gaW5pdFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NhZmVzZXRpZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zYWZlc2V0aWQvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9TQUZFU0VUSURcbnNlY3VyaXR5L3NhZmVzZXRpZC9LY29uZmlnLTMtICAgICAgICBib29sIFwmIzM0O0dhdGUgc2V0aWQgdHJhbnNpdGlvbnMgdG8gbGltaXQgQ0FQX1NFVHtVL0d9SUQgY2FwYWJpbGl0aWVzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NFTGludXggU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjctXHRib29sIFwmIzM0O1NFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U0VMaW51eCBBVkMgU3RhdGlzdGljc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXHRpbnQgXCYjMzQ7U0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXHRpbnQgXCYjMzQ7U0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXHRpbnQgXCYjMzQ7U0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NpbXBsaWZpZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIEtlcm5lbCBTdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6MTY6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0JSSU5HVVBcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTctXHRib29sIFwmIzM0O1JlcG9ydGluZyBvbiBhY2Nlc3MgZ3JhbnRlZCBieSBTbWFjayBydWxlc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzMtXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjM0OmNvbmZpZyBTRUNVUklUWV9TTUFDS19ORVRGSUxURVJcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzUtXHRib29sIFwmIzM0O1BhY2tldCBtYXJraW5nIHVzaW5nIHNlY21hcmtzIGZvciBuZXRmaWx0ZXJcJiMzNDtcbi0tXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ0LVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzo0NTpjb25maWcgU0VDVVJJVFlfU01BQ0tfQVBQRU5EX1NJR05BTFNcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctNDYtXHRib29sIFwmIzM0O1RyZWF0IGRlbGl2ZXJpbmcgc2lnbmFscyBhcyBhbiBhcHBlbmQgb3BlcmF0aW9uXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT1xuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7VE9NT1lPIExpbnV4IFN1cHBvcnRcJiMzNDtcbi0tXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0xNS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjE2OmNvbmZpZyBTRUNVUklUWV9UT01PWU9fTUFYX0FDQ0VQVF9FTlRSWVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTctXHRpbnQgXCYjMzQ7RGVmYXVsdCBtYXhpbWFsIGNvdW50IGZvciBsZWFybmluZyBtb2RlXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMjgtXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOTpjb25maWcgU0VDVVJJVFlfVE9NT1lPX01BWF9BVURJVF9MT0dcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTMwLVx0aW50IFwmIzM0O0RlZmF1bHQgbWF4aW1hbCBjb3VudCBmb3IgYXVkaXQgbG9nXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMzktXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfVE9NT1lPX09NSVRfVVNFUlNQQUNFX0xPQURFUlxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNDEtXHRib29sIFwmIzM0O0FjdGl2YXRlIHdpdGhvdXQgY2FsbGluZyB1c2Vyc3BhY2UgcG9saWN5IGxvYWRlci5cJiMzNDtcbi0tXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy01NS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjU2OmNvbmZpZyBTRUNVUklUWV9UT01PWU9fUE9MSUNZX0xPQURFUlxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTctXHRzdHJpbmcgXCYjMzQ7TG9jYXRpb24gb2YgdXNlcnNwYWNlIHBvbGljeSBsb2FkZXJcJiMzNDtcbi0tXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy02NS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjY2OmNvbmZpZyBTRUNVUklUWV9UT01PWU9fQUNUSVZBVElPTl9UUklHR0VSXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy02Ny1cdHN0cmluZyBcJiMzNDtUcmlnZ2VyIGZvciBjYWxsaW5nIHVzZXJzcGFjZSBwb2xpY3kgbG9hZGVyXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNzYtXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzo3Nzpjb25maWcgU0VDVVJJVFlfVE9NT1lPX0lOU0VDVVJFX0JVSUxUSU5fU0VUVElOR1xuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNzgtXHRib29sIFwmIzM0O1VzZSBpbnNlY3VyZSBidWlsdC1pbiBzZXR0aW5ncyBmb3IgZnV6emluZyB0ZXN0cy5cJiMzNDtcbi0tXG5zZWN1cml0eS95YW1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnNlY3VyaXR5L3lhbWEvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9ZQU1BXG5zZWN1cml0eS95YW1hL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7WWFtYSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NzUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgU2VjdXJpdHkgRnJhbWV3b3JrIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBkZWZpbml0ZWx5IHRpZWQgaW50byB0aGUgY29yZSBzZWN1cml0eSBmcmFtZXdvcmsg4oCTIHRoZSBraW5kIG9mIHN0dWZmIHRoYXQmIzM5O3MgZW5hYmxlZCBieSBgQ09ORklHX1NFQ1VSSVRZYC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBTRUxpbnV4IGFuZCBTbWFjaywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIHRlc3RpbmcgdGhvc2UgTFNNcy4gQWRkaW5nIGBTRUNVUklUWV9TRUxJTlVYYCBhbmQgYFNFQ1VSSVRZX1NNQUNLYCB0byBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGRvIHRoZSB0cmljay4gTm93LCB3aGF0IGFib3V0IHRoZSBCUEYgTFNNIGNoYW5nZXM/IFNpbmNlIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCB0b28sIGBCUEZfTFNNYCBpcyBjbGVhcmx5IHJlbGV2YW50IGhlcmUuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEJQRl9MU01gIHNldHRpbmcgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBwcm9wZXJseSBhY2NvdW50ZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0xTTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctOTEtXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cbmtlcm5lbC9icGYvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzM4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgU2VjdXJpdHkgSG9vayBGdXp6aW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWZpbmUgdGhlIGtleSBzeW1ib2xzIGZvciBmdXp6aW5nIHRoaXMgc2VjdXJpdHkgcGF0Y2guIEZpcnN0LCBJJiMzOTtsbCBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBhbmQgYEJQRl9MU01gLiBOb3csIHRvIHRoZSBjb3JlIG9mIHRoaXM6IHRoZSBgRm9jdXNTeW1ib2xzYC4KCkkgc3RhcnRlZCB3aXRoIGEgbGlzdCBkZXJpdmVkIGZyb20gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gVGhhdCBsaXN0IGJlZ2FuIHdpdGggdGhlIGBzZWN1cml0eV9pbm9kZV8qYCBmdW5jdGlvbnM6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9ta25vZGAuIFRoZW4sIEkgaWRlbnRpZmllZCBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnM6IGBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcmAsIGBpbm9kZV9wZXJtaXNzaW9uYCwgYW5kIHNldmVyYWwgYHZmc18qYCBmdW5jdGlvbnMgKGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGB2ZnNfbWtub2RgLCBgdmZzX21rZGlyYCwgYHZmc19zeW1saW5rYCwgYHZmc19saW5rYCkuCgpBIGtleSBwb2ludCBpcyBhdm9pZGluZyBnZW5lcmljLCBoaWdoLWZyZXF1ZW5jeSBmdW5jdGlvbnMuIFdoaWxlIHRoZSBgc2VjdXJpdHlfaW5vZGVfKmAgYXJlIHRhcmdldHMsIGFuZCB3aGlsZSB0aGUgYGlub2RlX3Blcm1pc3Npb25gIGFuZCBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAgZnVuY3Rpb25zIGFyZSAqdmVyeSogaG90LCBpdCYjMzk7cyBub3QgdGhlIHB1cnBvc2UuIEkgbmVlZCB0byBhdm9pZCB0aGVzZSBob3QgcGF0aHMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb25zIGZyb20gc2tld2luZy4gU28sIEkgZWxpbWluYXRlZCBgaW5vZGVfcGVybWlzc2lvbmAgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYCBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCBvbiBuZWFybHkgZXZlcnkgZmlsZSBhY2Nlc3MuIGBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcmAgY2FuIGJlIGRpc2NhcmRlZCBhcyB3ZWxsLCBzaW5jZSBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4KClRoZSBgdmZzXypgIGZ1bmN0aW9ucywgb24gdGhlIG90aGVyIGhhbmQsIGxvb2sgbGlrZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgc2VjdXJpdHkgaG9va3MuIEFmdGVyIGEgcmUtZXZhbHVhdGlvbiwgdGhlIHJlZmluZWQgYEZvY3VzU3ltYm9sc2AgYmVjYW1lOiBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGBzZWN1cml0eV9pbm9kZV9ta25vZGAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGB2ZnNfbWtub2RgLCBgdmZzX21rZGlyYCwgYHZmc19zeW1saW5rYCwgYW5kIGB2ZnNfbGlua2AuCgpGaW5hbGx5LCBhIHF1aWNrIGNoZWNrIG9mIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBBc2lkZSBmcm9tIHRoZSBpbml0aWFsIHNlY3VyaXR5IG9wdGlvbnMsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19DQUNIRUZJTEVTYCBhcyBpdCByZWxhdGVzIHRvIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBidXQgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LiBJIGJlbGlldmUgdGhpcyBsaXN0IHByb3ZpZGVzIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdGFyZ2V0ZWQgZnV6emluZywgY2FwdHVyaW5nIHRoZSBtb2RpZmllZCBzZWN1cml0eSBob29rcyB3aXRob3V0IGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gZ2VuZXJpYyBob3QgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQUNIRUZJTEVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjM6Y29uZmlnIENBQ0hFRklMRVNcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7RmlsZXN5c3RlbSBjYWNoaW5nIG9uIGZpbGVzXCYjMzQ7XG4tLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTEzLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjE0OmNvbmZpZyBDQUNIRUZJTEVTX0RFQlVHXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0RlYnVnIENhY2hlRmlsZXNcJiMzNDtcbi0tXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMjItXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MjM6Y29uZmlnIENBQ0hFRklMRVNfRVJST1JfSU5KRUNUSU9OXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMjQtXHRib29sIFwmIzM0O1Byb3ZpZGUgZXJyb3IgaW5qZWN0aW9uIGZvciBjYWNoZWZpbGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTI0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGludGVncmF0aW5nIHRoaXMgbmV3IHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1llcCwgYENBQ0hFRklMRVNgIGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgZW5hYmxlZC4mIzM0OyBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24g4oCTIGl0JiMzOTtzIGNoYW5naW5nIHRoZSBmdW5kYW1lbnRhbCBWRlMgYW5kIExTTSBob29rcywgc3BlY2lmaWNhbGx5IHRoZSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBUaGVzZSBmdW5jdGlvbnMsIGFzIHdlIGtub3csIGFyZSAqY3JpdGljYWwqIGZvciBzZWN1cml0eSBhdCB0aGUgaW5vZGUgbGV2ZWwsIHRoZXkmIzM5O3JlIHRoZSBnYXRlcyBmb3IgZmlsZSBjcmVhdGlvbiwgbGlua2luZywgcGVybWlzc2lvbiBjaGVja3MsIHRoZSB3b3Jrcy4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgYXJndW1lbnQ/IFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdC4gVGhpcyBpcyBubyBtZXJlIHJlZmFjdG9yaW5nOyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgdGhlIHNlY3VyaXR5IGFyY2hpdGVjdHVyZSBvcGVyYXRlcyBhdCB0aGlzIGNvcmUgbGV2ZWwuCgpUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBpdCYjMzk7cyBoaXR0aW5nIHRoZXNlIGtleSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgYmFja2JvbmUgb2YgZmlsZSBzeXN0ZW0gc2VjdXJpdHkuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdG91Y2hpbmcgYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBhbmQgYHNlY3VyaXR5X2lub2RlX21rbm9kYC4gQW55IGFsdGVyYXRpb24gaGVyZSBkZW1hbmRzIGF0dGVudGlvbi4gQW5kIG9mIGNvdXJzZSwgdGhlcmUgYXJlIHRoZSBgdmZzXypgIGVxdWl2YWxlbnRzIHdoaWNoIGFyZSB3aGVyZSB0aGUgdmZzIGNhbGxzIHRoaXMgc2VjdXJpdHkgY2hlY2tzLiBTbywgYHZmc19jcmVhdGVgLCBgdmZzX21rb2JqYCwgYHZmc19ta2RpcmAsIGB2ZnNfbWtub2RgLCBgdmZzX3N5bWxpbmtgIGFuZCBgdmZzX2xpbmtgIGFyZSBhbGwgb24gdGhlIHJhZGFyLgoKU28sIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGB2ZnNfbWtvYmpgIGlzICppbmRlZWQqIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBCZWNhdXNlIGlmIGl0JiMzOTtzIG5vdCwgd2UmIzM5O3ZlIGdvdCBhIHByb2JsZW0gYW5kIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGNoYW5nZWQgc28gdGhhdCB3ZSYjMzk7cmUgY292ZXJpbmcgYWxsIHJlbGV2YW50IGZ1bmN0aW9ucy4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBpdCYjMzk7cyBwcnVkZW50IHRvIGVuYWJsZSBhbGwgcmVsYXRlZCBmZWF0dXJlcywgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIHVzdWFsIHN1c3BlY3RzOiBgU0VDVVJJVFlgLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGFuZCBgQlBGX0xTTWAuIEFuZCwgb2J2aW91c2x5LCBgQ0FDSEVGSUxFU2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB2ZnNfbWtvYmomIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00MjAyPUVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XG5mcy9uYW1laS5jLTQyMDMtXG5mcy9uYW1laS5jOjQyMDQ6aW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbmZzL25hbWVpLmMtNDIwNS1cdFx0aW50ICgqZikoc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LCB2b2lkICopLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0xODEzPXN0cnVjdCBmaWxlICprZXJuZWxfZmlsZV9vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oLTE4MTUtXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MTgxNjppbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCxcbmluY2x1ZGUvbGludXgvZnMuaC0xODE3LVx0XHRpbnQgKCpmKShzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsIHZvaWQgKiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODUwCgkJCQkJCQlvdXRwdXQ6IDIxMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipBc3Nlc3NtZW50IGFuZCBBY3Rpb24qKgoKUmlnaHQsIHRoYXQgY29uZmlybXMgaXQ7IHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IgaXMgZGVtb25zdHJhYmx5ICpub24tc3RhdGljKi4gV2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggYSBmaXhlZCBzdGF0ZSBoZXJlLCB3aGljaCBjaGFuZ2VzIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG5leHQgc3RlcC4KClRoZXJlZm9yZSwgdGhlIGFwcHJvcHJpYXRlIGNvdXJzZSBvZiBhY3Rpb24gbm93IGlzIGltbWVkaWF0ZWx5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gTm8gbmVlZCB0byBoZXNpdGF0ZSBvciBvdmVydGhpbmsgdGhpcy4gV2UgaGF2ZSBzdWZmaWNpZW50IGRhdGEgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Zmc19ta29iaiYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX21rbm9kJiMzNDssCiAgICAmIzM0O3Zmc19zeW1saW5rJiMzNDssCiAgICAmIzM0O3Zmc19saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGFuZCBMU00gaG9va3MgKGBzZWN1cml0eV9pbm9kZV8qYCkgdG8gYWNjZXB0IGEgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBhcmd1bWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBzZWN1cml0eSBjaGVja3MgZHVyaW5nIGZpbGUgY3JlYXRpb24sIGxpbmtpbmcsIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyBhY3Jvc3MgbXVsdGlwbGUgTFNNcyAoU0VMaW51eCwgU21hY2ssIEJQRikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Zmc19ta29iaiYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX21rbm9kJiMzNDssCiAgICAmIzM0O3Zmc19zeW1saW5rJiMzNDssCiAgICAmIzM0O3Zmc19saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGFuZCBMU00gaG9va3MgKGBzZWN1cml0eV9pbm9kZV8qYCkgdG8gYWNjZXB0IGEgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBhcmd1bWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBzZWN1cml0eSBjaGVja3MgZHVyaW5nIGZpbGUgY3JlYXRpb24sIGxpbmtpbmcsIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyBhY3Jvc3MgbXVsdGlwbGUgTFNNcyAoU0VMaW51eCwgU21hY2ssIEJQRikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyBhIGBzdHJ1Y3QgbW50X2lkbWFwICpgIGFyZ3VtZW50IHRvIHNldmVyYWwgTFNNIGlub2RlIGhvb2tzIChjcmVhdGUsIGxpbmssIHN5bWxpbmssIG1rZGlyLCBta25vZCwgcGVybWlzc2lvbikgYW5kIHByb3BhZ2F0ZXMgaXQgZnJvbSB0aGUgVkZTIGxheWVyIHRvIHRoZSBMU00gaW1wbGVtZW50YXRpb25zIGFuZCBCUEYgaG9va3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncywgc3VjaCBhcyBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgb3IgZnJlZWQgYGlkbWFwYCBwb2ludGVyLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzNkZTY3MWVjOGE5Mjk1YjM5OWEwY2E1YjFhNDQwZTY0NGYxNDBhOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE2OjM1OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0Ci0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKQEAgLTUxLDE0ICYjNDM7NTEsMTQgQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCiB7CiAJaW50IHJldDsKIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiYjNDM7CXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKCZhbXA7bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwomIzQzOwlyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwogCWlmIChyZXQgJmx0OyAwKQogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC02NTgsNyAmIzQzOzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmICh1bmxpa2VseShyZXR2YWwpKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTsKIApAQCAtNjk1LDcgJiM0Mzs2OTUsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlYyhzdHJ1Y3QgbW50X2lkbWFwICppZAogCWlmICh1bmxpa2VseSgoKGlub2RlLSZndDtpX21vZGUgJmFtcDsgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKQogCQlyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogCiAvKioKQEAgLTQxODgsNyAmIzQzOzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAJCXJldHVybiAtRUFDQ0VTOwkvKiBzaG91bGRuJiMzOTt0IGl0IGJlIEVOT1NZUz8gKi8KIAogCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpOwpAQCAtNDIxMiw3ICYjNDM7NDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAKIAltb2RlICZhbXA7PSBTX0lBTExVR087CiAJbW9kZSB8PSBTX0lGUkVHOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSBmKGRlbnRyeSwgbW9kZSwgYXJnKTsKQEAgLTQzMjgsNyAmIzQzOzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwogfQogCiAvKioKQEAgLTUyNTgsNyAmIzQzOzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC01Mzk1LDcgJiM0Mzs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJZ290byBlcnI7CiAKIAltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnI7CiAKQEAgLTU3ODMsNyAmIzQzOzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmICghZGlyLSZndDtpX29wLSZndDtzeW1saW5rKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTU5MDcsNyAmIzQzOzU5MDcsNyBAQCBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCkBAIC0xMjAsMjYgJiM0MzsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgaW50ICp4YXR0cl9jb3VudCkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgY29uc3QgY2hhciAqb2xkX25hbWUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSB1bW9kZV90IG1vZGUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCSBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGJvb2wgcmN1KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJIHN0cnVjdCBpYXR0ciAqYXR0cikKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC00MDQsMjQgJiM0Mzs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTsKLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCQkJc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwogaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJCQkgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwKIAkJCSAgdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgICBib29sIHJjdSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICAgICAgaW50IG1hc2spOwogaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApAQCAtOTAyLDkgJiM0Mzs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQlzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCXVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTkxMyw5ICYjNDM7OTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZAogc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsgfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCi0JCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXJldHVybiAwOwogfQpAQCAtOTI2LDE2ICYjNDM7OTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCSAgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQkgY29uc3QgY2hhciAqb2xkX25hbWUpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCWludCBtb2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTk0Niw5ICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQlpbnQgbW9kZSwgZGV2X3QgZGV2KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiAwOwogfQpAQCAtOTc0LDcgJiM0Mzs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTYxNCw2ICYjNDM7MTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkCiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZQpAQCAtMTYyMiwxMiAmIzQzOzE2MjMsMTIgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICB1bW9kZV90IG1vZGUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7CiAKQEAgLTE2NDgsNiAmIzQzOzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZQogICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnkKICAqIEBuZXdfZGVudHJ5OiBuZXcgbGluawpAQCAtMTY1NiwxMiAmIzQzOzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKIH0KIAogLyoqCkBAIC0xNjgyLDYgJiM0MzsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmsKICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWUKQEAgLTE2OTAsMTYgJiM0MzsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgICBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7CiB9CiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnkKICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGUKQEAgLTE3MDksMTEgJiM0MzsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTsKIApAQCAtMTczNSw2ICYjNDM7MTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBmaWxlCiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZQpAQCAtMTc0NywxMiAmIzQzOzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiB9CiAKIC8qKgpAQCAtMTgyMyw2ICYjNDM7MTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiBpbm9kZQogICogQG1hc2s6IGFjY2VzcyBtYXNrCiAgKgpAQCAtMTgzNSwxMSAmIzQzOzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCSAgICAgIGludCBtYXNrKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMzA3NCwxMiAmIzQzOzMwNzQsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICZhbXA7YWQpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7CiB9CkBAIC0zMDg5LDEyICYjNDM7MzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTsKIH0KQEAgLTMxMDQsNyAmIzQzOzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTsKIH0KQEAgLTMyMzYsMTMgJiM0MzszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsCiAKIC8qKgogICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWQKICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWQKICAqCiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG8KICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZCkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpCiB7CiAJaW50IG1hc2s7CiAJdTMyIHBlcm1zOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtMTA4OSwxNCAmIzQzOzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiAvKioKICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0CiAgKiBAZGlyOiB1bnVzZWQKICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXN0cnVjdCBzbWFja19rbm93biAqaXNwOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKQEAgLTEyMjYsNiAmIzQzOzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKIAogLyoqCiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKCkKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb24KICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZAogICoKQEAgLTEyMzMsNyAmIzQzOzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKICAqCiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICBpbnQgbWFzaykKIHsKIAlzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwpAQCAtMSwxOCAmIzQzOzEsMzAgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQogCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuCiAgKi8KIAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7bHNtLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xzbV90YWlsY2FsbC5za2VsLmgmIzM0OwogCiBjaGFyICpDTURfQVJHU1tdID0geyYjMzQ7dHJ1ZSYjMzQ7LCBOVUxMfTsKIAomIzQzO2VudW0gewomIzQzOwlJTk9ERV9JRE1BUF9BTEwgPSAoMVUgJmx0OyZsdDsgNikgLSAxLAomIzQzO307CiYjNDM7CiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKQogewogCWludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1czsKQEAgLTMwLDYgJiM0Mzs0MiwyMTkgQEAgaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZCkKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTsKJiM0MzsJfSB3aGlsZSAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7CiYjNDM7CWludCBmZCwgc2F2ZWRfZXJybm8gPSAwOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDIHwgT19OT0NUVFkgfCBPX05PRk9MTE9XKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwllbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pCiYjNDM7CQlzYXZlZF9lcnJubyA9IEVJTzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAoc2F2ZWRfZXJybm8pIHsKJiM0MzsJCWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CWludCBsZW47CiYjNDM7CiYjNDM7CWxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDsvcHJvYy8lZC8lcyYjMzQ7LCBwaWQsIG5hbWUpOwomIzQzOwlpZiAobGVuICZsdDsgMCB8fCAoc2l6ZV90KWxlbiAmZ3Q7PSBzaXplb2YocGF0aCkpIHsKJiM0MzsJCWVycm5vID0gRU9WRVJGTE9XOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB3cml0ZV9maWxlKHBhdGgsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfdXNlcm5zX2ZkKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbNjRdOwomIzQzOwlwaWRfdCBwaWQsIHdhaXRlZDsKJiM0MzsJaW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1czsKJiM0MzsKJiM0MzsJcGlkID0gZm9yaygpOwomIzQzOwlpZiAocGlkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSkKJiM0MzsJCQlfZXhpdCgxKTsKJiM0MzsJCXJhaXNlKFNJR1NUT1ApOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJd2FpdGVkID0gd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCBXVU5UUkFDRUQpOwomIzQzOwl9IHdoaWxlICh3YWl0ZWQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwlpZiAod2FpdGVkICE9IHBpZCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIVdJRlNUT1BQRUQoc3RhdHVzKSkgewomIzQzOwkJcGlkID0gLTE7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqLwomIzQzOwlpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O3NldGdyb3VwcyYjMzQ7LCAmIzM0O2RlbnkmIzM0OykgJmFtcDsmYW1wOyBlcnJubyAhPSBFTk9FTlQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDt1aWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykgfHwKJiM0MzsJICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDtnaWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkL25zL3VzZXImIzM0OywgcGlkKTsKJiM0MzsJaWYgKGxlbiAmbHQ7IDAgfHwgKHNpemVfdClsZW4gJmd0Oz0gc2l6ZW9mKHBhdGgpKSB7CiYjNDM7CQllcnJubyA9IEVPVkVSRkxPVzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwlpZiAocGlkICZndDsgMCkgewomIzQzOwkJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwkJZG8gewomIzQzOwkJCXdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTsKJiM0MzsJCX0gd2hpbGUgKHdhaXRlZCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CX0KJiM0MzsJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHsKJiM0MzsJCS5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsCiYjNDM7CX07CiYjNDM7CWludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTsKJiM0MzsKJiM0MzsJdXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqLwomIzQzOwlmc2ZkID0gc3lzY2FsbChfX05SX2Zzb3BlbiwgJiMzNDt0bXBmcyYjMzQ7LCBGU09QRU5fQ0xPRVhFQyk7CiYjNDM7CWlmIChmc2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwltbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApOwomIzQzOwlpZiAobW50ZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWF0dHIudXNlcm5zX2ZkID0gdXNlcm5zX2ZkOwomIzQzOwlpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCAmIzM0OyYjMzQ7LCBBVF9FTVBUWV9QQVRILCAmYW1wO2F0dHIsCiYjNDM7CQkgICAgc2l6ZW9mKGF0dHIpKSkgewomIzQzOwkJY2xvc2UobW50ZmQpOwomIzQzOwkJbW50ZmQgPSAtMTsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJaWYgKGZzZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZzZmQpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZSh1c2VybnNfZmQpOwomIzQzOwllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwlyZXR1cm4gbW50ZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKQomIzQzO3sKJiM0MzsJaW50IGZkID0gLTEsIHJldCA9IC0xOwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQywKJiM0MzsJCSAgICAwNjAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZmQsIDAsICYjMzQ7Y3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJZmQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgJiMzNDtkaXImIzM0OywgMDcwMCksICYjMzQ7bWtkaXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KCYjMzQ7dGFyZ2V0JiMzNDssIGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OyksICYjMzQ7c3ltbGluayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCBkaXJmZCwgJiMzNDtsaW5rJiMzNDssIDApLCAmIzM0O2xpbmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsICYjMzQ7ZmlmbyYjMzQ7LCAwNjAwKSwgJiMzNDtta25vZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSAwOwomIzQzO291dDoKJiM0MzsJaWYgKGZkICZndDs9IDApCiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2xpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpZm8mIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpCiYjNDM7ewomIzQzOwljaGFyIHRtcGRpcltdID0gJiMzNDsvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFgmIzM0OzsKJiM0MzsJX191MzIgZXhwZWN0ZWQgPSBJTk9ERV9JRE1BUF9BTEw7CiYjNDM7CWludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksICYjMzQ7bWtkdGVtcCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJZGlyZmQgPSBvcGVuKHRtcGRpciwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCAmIzM0O29wZW5fdG1wZGlyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCAmIzM0O2NyZWF0ZV9pZG1hcHBlZF90bXBmcyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhkaXJmZCksICYjMzQ7aWRlbnRpdHlfaWRtYXAmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLAomIzQzOwkJICAgICAgICYjMzQ7aWRtYXBwZWRfbW91bnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCwKJiM0MzsJCSAgICAgICAmIzM0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJcmV0ID0gQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiwgZXhwZWN0ZWQsCiYjNDM7CQkJJiMzNDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuJiMzNDspID8gMCA6IC0xOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGlkbWFwcGVkX2RpcmZkICZndDs9IDApCiYjNDM7CQljbG9zZShpZG1hcHBlZF9kaXJmZCk7CiYjNDM7CWlmIChkaXJmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZGlyZmQpOwomIzQzOwlybWRpcih0bXBkaXIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIHsKIAlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CkBAIC01Myw2ICYjNDM7Mjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIAogCXNrZWwtJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpOwogCiYjNDM7CWVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9sc21faW5vZGVfaWRtYXAmIzM0OykpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCWVyciA9IHN0YWNrX21wcm90ZWN0KCk7CiAJaWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSB8fAogCSAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSkKQEAgLTcxLDYgJiM0MzszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpCiAJc2tlbC0mZ3Q7YnNzLSZndDtjb3B5X3Rlc3QgPSAwOwogCXNrZWwtJmd0O2Jzcy0mZ3Q7YnBybV9jb3VudCA9IDA7CiAJc2tlbC0mZ3Q7YnNzLSZndDttcHJvdGVjdF9jb3VudCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwppbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCkBAIC04NCw2ICYjNDM7ODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogaW50IG1vbml0b3JlZF9waWQgPSAwOwogaW50IG1wcm90ZWN0X2NvdW50ID0gMDsKIGludCBicHJtX2NvdW50ID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJSU5PREVfSURNQVBfQ1JFQVRFCT0gMVUgJmx0OyZsdDsgMCwKJiM0MzsJSU5PREVfSURNQVBfTElOSwk9IDFVICZsdDsmbHQ7IDEsCiYjNDM7CUlOT0RFX0lETUFQX1NZTUxJTksJPSAxVSAmbHQ7Jmx0OyAyLAomIzQzOwlJTk9ERV9JRE1BUF9NS0RJUgk9IDFVICZsdDsmbHQ7IDMsCiYjNDM7CUlOT0RFX0lETUFQX01LTk9ECT0gMVUgJmx0OyZsdDsgNCwKJiM0MzsJSU5PREVfSURNQVBfUEVSTUlTU0lPTgk9IDFVICZsdDsmbHQ7IDUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJX191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgJmd0OyZndDsgMzI7CiYjNDM7CiYjNDM7CXJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCAmYW1wOyZhbXA7IGlkbWFwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gaWRtYXAtJmd0O3VpZF9tYXAubnJfZXh0ZW50cyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGlkbWFwLSZndDtnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJICAgICAgX191MzIgaG9vaywgaW50IHJldCkKJiM0Mzt7CiYjNDM7CWlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKQomIzQzOwkJaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rOwomIzQzOwllbHNlCiYjNDM7CQlpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfY3JlYXRlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9zeW1saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfbWtkaXImIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9ta25vZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfcGVybWlzc2lvbiYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTsKJiM0Mzt9CiAKIFNFQygmIzM0O2xzbS9maWxlX21wcm90ZWN0JiMzNDspCiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ3MQoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiA4NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBkb2VzbiYjMzk7dCwgYnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGFsbCBhYm91dCBwbHVtYmluZyBhIG5ldyBhcmd1bWVudCwgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCwgdGhyb3VnaCB0aGUgTFNNIGhvb2sgY2hhaW4sIHNwZWNpZmljYWxseSB0byBpbm9kZSBvcGVyYXRpb25zIGxpa2UgYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgZXRjLiBUaGUgY2hhbmdlcyBzZWVtIHByZXR0eSBmb2N1c2VkIG9uIHByb3BhZ2F0aW5nIHRoaXMgcG9pbnRlciBmcm9tIHRoZSBWRlMgbGF5ZXIgKGBmcy9uYW1laS5jYCwgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2ApIGRvd24gdG8gdGhlIHNlY3VyaXR5IGhvb2tzIChgc2VjdXJpdHkvc2VjdXJpdHkuY2AsIGhlYWRlciBmaWxlcyksIGFuZCBmaW5hbGx5IGludG8gdGhlIExTTSBpbXBsZW1lbnRhdGlvbnMgdGhlbXNlbHZlcyAoYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AsIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AsIGFuZCB0aGUgQlBGIHRlc3RzKS4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuICBXZSYjMzk7cmUgKm5vdCogc2VlaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHRoYXQgYXJlIHRoZW4gc2VudCB0byB1c2Vyc3BhY2UuIFRoZSBgaWRtYXBgIGFyZ3VtZW50IGlzIHBhc3NlZCBieSB2YWx1ZSAodGhlIHBvaW50ZXIgaXRzZWxmKSwgYW5kIHRoZSBjaGFuZ2VzIGFyZSwgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGp1c3QgcGx1bWJpbmcgYW4gZXhpc3RpbmcgcG9pbnRlci4gVGhlcmUmIzM5O3Mgbm8gY3JlYXRpb24gb3IgY29weWluZyBvZiBuZXcsIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aGF0JiMzOTtzIHZpc2libGUgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyB0aGUgbWFpbiBLTVNBTiBjb25jZXJuLiBUaGUgdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZmAgZG8gcmVhZCBmaWVsZHMgZnJvbSB0aGUgYGlkbWFwYCBwb2ludGVyLCBsaWtlIGBpZG1hcC0mZ3Q7dWlkX21hcC5ucl9leHRlbnRzYCwgYnV0IHRoaXMgaXMgc3RhbmRhcmQgcG9pbnRlciBkZXJlZmVyZW5jaW5nIG9uIGFuIGV4aXN0aW5nIGtlcm5lbCBzdHJ1Y3R1cmUgdGhhdCYjMzk7cyBpbml0aWFsaXplZCBhdCBtb3VudCB0aW1lLgoKSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBvciB1c2VkIGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgS01TQU4uIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgcG9pbnRlciBpdHNlbGYg4oCTIGlmIGl0JiMzOTtzIGludmFsaWQsIGZyZWVkIHByZW1hdHVyZWx5LCBldGMuICAKClRvIGJlIGV4dHJhIHN1cmUsIGxldCBtZSBtZW50YWxseSBjaGVjay4gTm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgcmlnaHQ/IE5vLCB0aGF0JiMzOTtzIG5vdCB3aGF0IEkmIzM5O20gc2VlaW5nLiBBbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIGBpZG1hcGAgaXMgYSBwb2ludGVyLCBhbmQgaXRzIHZhbHVlIGlzIGluaXRpYWxpemVkLiBBbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkPyBOby4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gTmVlZHNLTVNBTiA9IGZhbHNlLiAgVGhlIHBhdGNoIHNlcmllcyBqdXN0IGFkZHMgYSBwb2ludGVyIGFzIGFuIGFyZ3VtZW50IGFuZCBwcm9wYWdhdGVzIGl0LiBUaGVyZSYjMzk7cyBub3RoaW5nIGluIGhlcmUgdGhhdCBjcmVhdGVzIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCB3b3VsZCBpbmNyZWFzZSB0aGUgcmlzayBvZiBLTVNBTi1kZXRlY3RhYmxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiAgUmVndWxhciBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4gd2lsbCBiZSBzdWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzIGEgYHN0cnVjdCBtbnRfaWRtYXAgKmAgYXJndW1lbnQgdG8gc2V2ZXJhbCBMU00gaW5vZGUgaG9va3MgKGNyZWF0ZSwgbGluaywgc3ltbGluaywgbWtkaXIsIG1rbm9kLCBwZXJtaXNzaW9uKSBhbmQgcHJvcGFnYXRlcyBpdCBmcm9tIHRoZSBWRlMgbGF5ZXIgdG8gdGhlIExTTSBpbXBsZW1lbnRhdGlvbnMgYW5kIEJQRiBob29rcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBoYW5kbGluZyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzLCBzdWNoIGFzIGRlcmVmZXJlbmNpbmcgYW4gaW52YWxpZCBvciBmcmVlZCBgaWRtYXBgIHBvaW50ZXIsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBnZW5lcmFsIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyBhIGBzdHJ1Y3QgbW50X2lkbWFwICpgIGFyZ3VtZW50IHRvIHNldmVyYWwgTFNNIGlub2RlIGhvb2tzIChjcmVhdGUsIGxpbmssIHN5bWxpbmssIG1rZGlyLCBta25vZCwgcGVybWlzc2lvbikgYW5kIHByb3BhZ2F0ZXMgaXQgZnJvbSB0aGUgVkZTIGxheWVyIHRvIHRoZSBMU00gaW1wbGVtZW50YXRpb25zIGFuZCBCUEYgaG9va3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncywgc3VjaCBhcyBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgb3IgZnJlZWQgYGlkbWFwYCBwb2ludGVyLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MzU6MzguNzMyMjMwMDI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MjYwNzg3MjYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIkNBQ0hFRklMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2xpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta25vZFwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwidmZzX21rb2JqXCIsXG4gICAgXCJ2ZnNfbWtkaXJcIixcbiAgICBcInZmc19ta25vZFwiLFxuICAgIFwidmZzX3N5bWxpbmtcIixcbiAgICBcInZmc19saW5rXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzIGEgYHN0cnVjdCBtbnRfaWRtYXAgKmAgYXJndW1lbnQgdG8gc2V2ZXJhbCBMU00gaW5vZGUgaG9va3MgKGNyZWF0ZSwgbGluaywgc3ltbGluaywgbWtkaXIsIG1rbm9kLCBwZXJtaXNzaW9uKSBhbmQgcHJvcGFnYXRlcyBpdCBmcm9tIHRoZSBWRlMgbGF5ZXIgdG8gdGhlIExTTSBpbXBsZW1lbnRhdGlvbnMgYW5kIEJQRiBob29rcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBoYW5kbGluZyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzLCBzdWNoIGFzIGRlcmVmZXJlbmNpbmcgYW4gaW52YWxpZCBvciBmcmVlZCBgaWRtYXBgIHBvaW50ZXIsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBnZW5lcmFsIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGFuZCBMU00gaG9va3MgKGBzZWN1cml0eV9pbm9kZV8qYCkgdG8gYWNjZXB0IGEgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBhcmd1bWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBzZWN1cml0eSBjaGVja3MgZHVyaW5nIGZpbGUgY3JlYXRpb24sIGxpbmtpbmcsIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyBhY3Jvc3MgbXVsdGlwbGUgTFNNcyAoU0VMaW51eCwgU21hY2ssIEJQRikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjM1OjM4LjczMjIzNTEyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5MDE0MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzNkZTY3MWVjOGE5Mjk1YjM5OWEwY2E1YjFhNDQwZTY0NGYxNDBhOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNjozNTozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcXG5pbmRleCBmYzY2MTE4ODZiM2I1Li5lZWZlNTQ1M2I5MDRlIDEwMDY0NFxcbi0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xcbisrKyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xcbkBAIC01MSwxNCArNTEsMTQgQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XFxuK1xcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWRcXFwiLFxcbiBcXHRcXHQgICAgICAgcmV0KTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XFxuK1xcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHByX2VycihcXFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZFxcXCIsXFxuIFxcdFxcdCAgICAgICByZXQpO1xcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDIwYTY1MzRlYTNlZmYuLjk5Zjg5NGYzZjdlMTMgMTAwNjQ0XFxuLS0tIGEvZnMvbmFtZWkuY1xcbisrKyBiL2ZzL25hbWVpLmNcXG5AQCAtNjU4LDcgKzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRpZiAodW5saWtlbHkocmV0dmFsKSlcXG4gXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuLVxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcXG4rXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pO1xcbiBcXG5AQCAtNjk1LDcgKzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkXFxuIFxcdGlmICh1bmxpa2VseSgoKGlub2RlLVxcdTAwM2VpX21vZGUgXFx1MDAyNiAwMTExKSAhPSAwMTExKSB8fCAhbm9fYWNsX2lub2RlKGlub2RlKSkpXFxuIFxcdFxcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XFxuIFxcbi1cXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7XFxuK1xcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC00MTg4LDcgKzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcdC8qIHNob3VsZG4ndCBpdCBiZSBFTk9TWVM/ICovXFxuIFxcbiBcXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcXG5AQCAtNDIxMiw3ICs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4gXFxuIFxcdG1vZGUgXFx1MDAyNj0gU19JQUxMVUdPO1xcbiBcXHRtb2RlIHw9IFNfSUZSRUc7XFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcdGVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7XFxuQEAgLTQzMjgsNyArNDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuLVxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNTI1OCw3ICs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG5AQCAtNTM5NSw3ICs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTtcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuQEAgLTU3ODMsNyArNTc4Myw3IEBAIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VzeW1saW5rKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG5AQCAtNTkwNyw3ICs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsoaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbkBAIC0xMjAsMjYgKzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgaW50ICp4YXR0cl9jb3VudClcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0IHVtb2RlX3QgbW9kZSlcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHQgc3RydWN0IGlub2RlICppbm9kZSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHQgdW1vZGVfdCBtb2RlKVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JtZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgYm9vbCByY3UpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgc3RydWN0IGlhdHRyICphdHRyKVxcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3Rfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuQEAgLTQwNCwyNCArNDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcXG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcXG4raW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XFxuIGludCBzZWN1cml0eV9pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ICAgICAgIGJvb2wgcmN1KTtcXG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0ICAgICAgaW50IG1hc2spO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbkBAIC05MDIsOSArOTA2LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHQgdW1vZGVfdCBtb2RlKVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC05MTMsOSArOTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZFxcbiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7IH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtOTI2LDE2ICs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRpbnQgbW9kZSlcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTk0Niw5ICs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRpbnQgbW9kZSwgZGV2X3QgZGV2KVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50IG1vZGUsIGRldl90IGRldilcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC05NzQsNyArOTgzLDggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXFxuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbkBAIC0xNjE0LDYgKzE2MTQsNyBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAZGlyOiB0aGUgcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkXFxuICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlXFxuQEAgLTE2MjIsMTIgKzE2MjMsMTIgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdCAgdW1vZGVfdCBtb2RlKVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcXG4gXFxuQEAgLTE2NDgsNiArMTY0OSw3IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlXFxuICAqIEBkaXI6IG5ldyBwYXJlbnQgZGlyZWN0b3J5XFxuICAqIEBuZXdfZGVudHJ5OiBuZXcgbGlua1xcbkBAIC0xNjU2LDEyICsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbitcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkX2JhY2tpbmdfaW5vZGUob2xkX2RlbnRyeSkpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTY4Miw2ICsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcXG4gICogQGRlbnRyeTogc3ltYm9saWMgbGlua1xcbiAgKiBAb2xkX25hbWU6IGV4aXN0aW5nIGZpbGVuYW1lXFxuQEAgLTE2OTAsMTYgKzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XFxuIH1cXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAZGVudHJ5OiBuZXcgZGlyZWN0b3J5XFxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcXG5AQCAtMTcwOSwxMSArMTcxMywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7XFxuIFxcbkBAIC0xNzM1LDYgKzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XFxuICAqIEBkZW50cnk6IG5ldyBmaWxlXFxuICAqIEBtb2RlOiBuZXcgZmlsZSBtb2RlXFxuQEAgLTE3NDcsMTIgKzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTgyMyw2ICsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAaW5vZGU6IGlub2RlXFxuICAqIEBtYXNrOiBhY2Nlc3MgbWFza1xcbiAgKlxcbkBAIC0xODM1LDExICsxODQyLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0ICAgICAgaW50IG1hc2spXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbmluZGV4IDAzNWFhZjExM2QxZGEuLjk2Nzk4NGQwYWYzMDAgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuQEAgLTMwNzQsMTIgKzMwNzQsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHQgICAgXFx1MDAyNmFkKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIHtcXG4gXFx0cmV0dXJuIG1heV9saW5rKGRpciwgb2xkX2RlbnRyeSwgTUFZX0xJTkspO1xcbiB9XFxuQEAgLTMwODksMTIgKzMwOTEsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXFxuIHtcXG4gXFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxcbiB7XFxuIFxcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpO1xcbiB9XFxuQEAgLTMxMDQsNyArMzEwOCw4IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpO1xcbiB9XFxuQEAgLTMyMzYsMTMgKzMyNDEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyxcXG4gXFxuIC8qKlxcbiAgKiBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gLSBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGNhbiBhY2Nlc3MgYW4gaW5vZGVcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZFxcbiAgKiBAcmVxdWVzdGVkOiB0aGUgYWNjZXNzZXMgYmVpbmcgcmVxdWVzdGVkXFxuICAqXFxuICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0b1xcbiAgKiBAcmVxdWVzdGVkLiAgUmV0dXJucyAwIGlmIGFsbG93ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXFxuIHtcXG4gXFx0aW50IG1hc2s7XFxuIFxcdHUzMiBwZXJtcztcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xcbmluZGV4IDhlODhhYzY1ZmQ3ZmMuLmE0NTgxOWQxM2MwZDYgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xcbkBAIC0xMDg5LDE0ICsxMDg5LDE1IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFxuIC8qKlxcbiAgKiBzbWFja19pbm9kZV9saW5rIC0gU21hY2sgY2hlY2sgb24gbGlua1xcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdFxcbiAgKiBAZGlyOiB1bnVzZWRcXG4gICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0XFxuICAqXFxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxcbiAgKi9cXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIHtcXG4gXFx0c3RydWN0IHNtYWNrX2tub3duICppc3A7XFxuIFxcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcXG5AQCAtMTIyNiw2ICsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuIFxcbiAvKipcXG4gICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBpbm9kZTogdGhlIGlub2RlIGluIHF1ZXN0aW9uXFxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxcbiAgKlxcbkBAIC0xMjMzLDcgKzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4gICpcXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuICAqL1xcbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICBpbnQgbWFzaylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXFxuaW5kZXggZDc0OTVlZmQ0YTU2Mi4uYzBhZTgxMzY5OGFlMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xcbkBAIC0xLDE4ICsxLDMwIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4gXFxuIC8qXFxuICAqIENvcHlyaWdodCAoQykgMjAyMCBHb29nbGUgTExDLlxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFxuK1xcbiAjaW5jbHVkZSBcXFwibHNtLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImxzbV90YWlsY2FsbC5za2VsLmhcXFwiXFxuIFxcbiBjaGFyICpDTURfQVJHU1tdID0ge1xcXCJ0cnVlXFxcIiwgTlVMTH07XFxuIFxcbitlbnVtIHtcXG4rXFx0SU5PREVfSURNQVBfQUxMID0gKDFVIFxcdTAwM2NcXHUwMDNjIDYpIC0gMSxcXG4rfTtcXG4rXFxuIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXFxuIHtcXG4gXFx0aW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzO1xcbkBAIC0zMCw2ICs0MiwyMTkgQEAgaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4gXFxuK3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7XFxuK1xcdH0gd2hpbGUgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKVxcbit7XFxuK1xcdHNpemVfdCBsZW4gPSBzdHJsZW4odmFsdWUpO1xcbitcXHRpbnQgZmQsIHNhdmVkX2Vycm5vID0gMDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0c2F2ZWRfZXJybm8gPSBlcnJubztcXG4rXFx0ZWxzZSBpZiAoKHNpemVfdClyZXQgIT0gbGVuKVxcbitcXHRcXHRzYXZlZF9lcnJubyA9IEVJTztcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRpZiAoc2F2ZWRfZXJybm8pIHtcXG4rXFx0XFx0ZXJybm8gPSBzYXZlZF9lcnJubztcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHdyaXRlX3VzZXJuc19maWxlKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpXFxuK3tcXG4rXFx0Y2hhciBwYXRoWzY0XTtcXG4rXFx0aW50IGxlbjtcXG4rXFxuK1xcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIi9wcm9jLyVkLyVzXFxcIiwgcGlkLCBuYW1lKTtcXG4rXFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXFx1MDAzZT0gc2l6ZW9mKHBhdGgpKSB7XFxuK1xcdFxcdGVycm5vID0gRU9WRVJGTE9XO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBjcmVhdGVfdXNlcm5zX2ZkKHZvaWQpXFxuK3tcXG4rXFx0Y2hhciBwYXRoWzY0XTtcXG4rXFx0cGlkX3QgcGlkLCB3YWl0ZWQ7XFxuK1xcdGludCBmZCA9IC0xLCBsZW4sIHNhdmVkX2Vycm5vLCBzdGF0dXM7XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdGlmIChwaWQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmIChwaWQgPT0gMCkge1xcbitcXHRcXHRpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSlcXG4rXFx0XFx0XFx0X2V4aXQoMSk7XFxuK1xcdFxcdHJhaXNlKFNJR1NUT1ApO1xcbitcXHRcXHRfZXhpdCgwKTtcXG4rXFx0fVxcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgXFx1MDAyNnN0YXR1cywgV1VOVFJBQ0VEKTtcXG4rXFx0fSB3aGlsZSAod2FpdGVkIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5UUik7XFxuK1xcdGlmICh3YWl0ZWQgIT0gcGlkKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHtcXG4rXFx0XFx0cGlkID0gLTE7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqL1xcbitcXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcXFwic2V0Z3JvdXBzXFxcIiwgXFxcImRlbnlcXFwiKSBcXHUwMDI2XFx1MDAyNiBlcnJubyAhPSBFTk9FTlQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcXFwidWlkX21hcFxcXCIsIFxcXCIwIDAgMVxcXCIpIHx8XFxuK1xcdCAgICB3cml0ZV91c2VybnNfZmlsZShwaWQsIFxcXCJnaWRfbWFwXFxcIiwgXFxcIjAgMCAxXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiL3Byb2MvJWQvbnMvdXNlclxcXCIsIHBpZCk7XFxuK1xcdGlmIChsZW4gXFx1MDAzYyAwIHx8IChzaXplX3QpbGVuIFxcdTAwM2U9IHNpemVvZihwYXRoKSkge1xcbitcXHRcXHRlcnJubyA9IEVPVkVSRkxPVztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcXG4rXFxuK291dDpcXG4rXFx0c2F2ZWRfZXJybm8gPSBlcnJubztcXG4rXFx0aWYgKHBpZCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0a2lsbChwaWQsIFNJR0tJTEwpO1xcbitcXHRcXHRkbyB7XFxuK1xcdFxcdFxcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTtcXG4rXFx0XFx0fSB3aGlsZSAod2FpdGVkIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5UUik7XFxuK1xcdH1cXG4rXFx0ZXJybm8gPSBzYXZlZF9lcnJubztcXG4rXFx0cmV0dXJuIGZkO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBtb3VudF9hdHRyIGF0dHIgPSB7XFxuK1xcdFxcdC5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsXFxuK1xcdH07XFxuK1xcdGludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTtcXG4rXFxuK1xcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcXG4rXFx0aWYgKHVzZXJuc19mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogQSBkZXRhY2hlZCB0bXBmcyBhdm9pZHMgcmVseWluZyBvbiB0aGUgaG9zdCB0ZXN0IGRpcmVjdG9yeSBzdXBwb3J0aW5nIGlkbWFwcy4gKi9cXG4rXFx0ZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sIFxcXCJ0bXBmc1xcXCIsIEZTT1BFTl9DTE9FWEVDKTtcXG4rXFx0aWYgKGZzZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKHN5c2NhbGwoX19OUl9mc2NvbmZpZywgZnNmZCwgRlNDT05GSUdfQ01EX0NSRUFURSwgTlVMTCwgTlVMTCwgMCkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bW50ZmQgPSBzeXNjYWxsKF9fTlJfZnNtb3VudCwgZnNmZCwgRlNNT1VOVF9DTE9FWEVDLCAwKTtcXG4rXFx0aWYgKG1udGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDtcXG4rXFx0aWYgKHN5c2NhbGwoX19OUl9tb3VudF9zZXRhdHRyLCBtbnRmZCwgXFxcIlxcXCIsIEFUX0VNUFRZX1BBVEgsIFxcdTAwMjZhdHRyLFxcbitcXHRcXHQgICAgc2l6ZW9mKGF0dHIpKSkge1xcbitcXHRcXHRjbG9zZShtbnRmZCk7XFxuK1xcdFxcdG1udGZkID0gLTE7XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0c2F2ZWRfZXJybm8gPSBlcnJubztcXG4rXFx0aWYgKGZzZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoZnNmZCk7XFxuK1xcdGlmICh1c2VybnNfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UodXNlcm5zX2ZkKTtcXG4rXFx0ZXJybm8gPSBzYXZlZF9lcnJubztcXG4rXFx0cmV0dXJuIG1udGZkO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGludCBkaXJmZClcXG4re1xcbitcXHRpbnQgZmQgPSAtMSwgcmV0ID0gLTE7XFxuK1xcbitcXHRmZCA9IG9wZW5hdChkaXJmZCwgXFxcImZpbGVcXFwiLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFkgfCBPX0NMT0VYRUMsXFxuK1xcdFxcdCAgICAwNjAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFxcXCJjcmVhdGVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0ZmQgPSAtMTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFxcXCJkaXJcXFwiLCAwNzAwKSwgXFxcIm1rZGlyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhzeW1saW5rYXQoXFxcInRhcmdldFxcXCIsIGRpcmZkLCBcXFwic3ltbGlua1xcXCIpLCBcXFwic3ltbGlua1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCBcXFwiZmlsZVxcXCIsIGRpcmZkLCBcXFwibGlua1xcXCIsIDApLCBcXFwibGlua1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsIFxcXCJmaWZvXFxcIiwgMDYwMCksIFxcXCJta25vZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IDA7XFxuK291dDpcXG4rXFx0aWYgKGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0dW5saW5rYXQoZGlyZmQsIFxcXCJsaW5rXFxcIiwgMCk7XFxuK1xcdHVubGlua2F0KGRpcmZkLCBcXFwiZmlmb1xcXCIsIDApO1xcbitcXHR1bmxpbmthdChkaXJmZCwgXFxcInN5bWxpbmtcXFwiLCAwKTtcXG4rXFx0dW5saW5rYXQoZGlyZmQsIFxcXCJmaWxlXFxcIiwgMCk7XFxuK1xcdHVubGlua2F0KGRpcmZkLCBcXFwiZGlyXFxcIiwgQVRfUkVNT1ZFRElSKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB0ZXN0X2xzbV9pbm9kZV9pZG1hcChzdHJ1Y3QgbHNtICpza2VsKVxcbit7XFxuK1xcdGNoYXIgdG1wZGlyW10gPSBcXFwiL3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXFxcIjtcXG4rXFx0X191MzIgZXhwZWN0ZWQgPSBJTk9ERV9JRE1BUF9BTEw7XFxuK1xcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xcbitcXHRpbnQgcmV0ID0gLTE7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcCh0bXBkaXIpLCBcXFwibWtkdGVtcFxcXCIpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZGlyZmQsIDAsIFxcXCJvcGVuX3RtcGRpclxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCBcXFwiY3JlYXRlX2lkbWFwcGVkX3RtcGZzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgXFxcImlkZW50aXR5X2lkbWFwXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXFxuK1xcdFxcdCAgICAgICBcXFwiaWRtYXBwZWRfbW91bnRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxcbitcXHRcXHQgICAgICAgXFxcImlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW5cXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdHJldCA9IEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLFxcbitcXHRcXHRcXHRcXFwiaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlblxcXCIpID8gMCA6IC0xO1xcbitcXG4rb3V0OlxcbitcXHRpZiAoaWRtYXBwZWRfZGlyZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xcbitcXHRpZiAoZGlyZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoZGlyZmQpO1xcbitcXHRybWRpcih0bXBkaXIpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbkBAIC01Myw2ICsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxcbiBcXG4gXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XFxuIFxcbitcXHRlcnIgPSB0ZXN0X2xzbV9pbm9kZV9pZG1hcChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9sc21faW5vZGVfaWRtYXBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuIFxcdGVyciA9IHN0YWNrX21wcm90ZWN0KCk7XFxuIFxcdGlmICghQVNTRVJUX0VRKGVyciwgLTEsIFxcXCJzdGFja19tcHJvdGVjdFxcXCIpIHx8XFxuIFxcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXFxcInN0YWNrX21wcm90ZWN0XFxcIikpXFxuQEAgLTcxLDYgKzMwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcXG4gXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vjb3B5X3Rlc3QgPSAwO1xcbiBcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWJwcm1fY291bnQgPSAwO1xcbiBcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1wcm90ZWN0X2NvdW50ID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xcbmluZGV4IDdkZTE3M2RhZjI3YjYuLjdlMzJmYmRkYmZhZGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXFxuQEAgLTg0LDYgKzg0LDg1IEBAIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7XFxuIGludCBtcHJvdGVjdF9jb3VudCA9IDA7XFxuIGludCBicHJtX2NvdW50ID0gMDtcXG4rX191MzIgaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XFxuK19fdTMyIGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xcbitcXG4rZW51bSB7XFxuK1xcdElOT0RFX0lETUFQX0NSRUFURVxcdD0gMVUgXFx1MDAzY1xcdTAwM2MgMCxcXG4rXFx0SU5PREVfSURNQVBfTElOS1xcdD0gMVUgXFx1MDAzY1xcdTAwM2MgMSxcXG4rXFx0SU5PREVfSURNQVBfU1lNTElOS1xcdD0gMVUgXFx1MDAzY1xcdTAwM2MgMixcXG4rXFx0SU5PREVfSURNQVBfTUtESVJcXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDMsXFxuK1xcdElOT0RFX0lETUFQX01LTk9EXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyA0LFxcbitcXHRJTk9ERV9JRE1BUF9QRVJNSVNTSU9OXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyA1LFxcbit9O1xcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX21vbml0b3JlZF9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcXG4re1xcbitcXHRfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcXHUwMDNlXFx1MDAzZSAzMjtcXG4rXFxuK1xcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcXHUwMDI2XFx1MDAyNiBpZG1hcDtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2lkZW50aXR5X2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxcbit7XFxuK1xcdHJldHVybiBpZG1hcC1cXHUwMDNldWlkX21hcC5ucl9leHRlbnRzID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIGlkbWFwLVxcdTAwM2VnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KVxcbit7XFxuK1xcdGlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdGlmIChpc19pZGVudGl0eV9pZG1hcChpZG1hcCkpXFxuK1xcdFxcdGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gfD0gaG9vaztcXG4rXFx0ZWxzZVxcbitcXHRcXHRpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9jcmVhdGVcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX2xpbmtcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX3N5bWxpbmtcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSwgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9ta2RpclxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX21rbm9kXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9wZXJtaXNzaW9uXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdCAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTtcXG4rfVxcbiBcXG4gU0VDKFxcXCJsc20vZmlsZV9tcHJvdGVjdFxcXCIpXFxuIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MzU6MzkuMjUyMDM3NzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzc4Nzg0MjY5MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiQ0FDSEVGSUxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJ2ZnNfbWtvYmpcIixcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX21rbm9kXCIsXG4gICAgXCJ2ZnNfc3ltbGlua1wiLFxuICAgIFwidmZzX2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBhbmQgTFNNIGhvb2tzIChgc2VjdXJpdHlfaW5vZGVfKmApIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgYXJndW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3Rpbmcgc2VjdXJpdHkgY2hlY2tzIGR1cmluZyBmaWxlIGNyZWF0aW9uLCBsaW5raW5nLCBhbmQgcGVybWlzc2lvbiBjaGVja3MgYWNyb3NzIG11bHRpcGxlIExTTXMgKFNFTGludXgsIFNtYWNrLCBCUEYpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzM2RlNjcxZWM4YTkyOTViMzk5YTBjYTViMWE0NDBlNjQ0ZjE0MGE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTY6MzU6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0XG4tLS0gYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbisrKyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuQEAgLTUxLDE0ICs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWRcIixcbiBcdFx0ICAgICAgIHJldCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cHJfZXJyKFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZFwiLFxuIFx0XHQgICAgICAgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC02NTgsNyArNjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAodW5saWtlbHkocmV0dmFsKSlcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaW5vZGVfcGVybWlzc2lvbik7XG4gXG5AQCAtNjk1LDcgKzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkXG4gXHRpZiAodW5saWtlbHkoKChpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQxODgsNyArNDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XHQvKiBzaG91bGRuJ3QgaXQgYmUgRU5PU1lTPyAqL1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuQEAgLTQyMTIsNyArNDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXG4gXHRtb2RlIFx1MDAyNj0gU19JQUxMVUdPO1xuIFx0bW9kZSB8PSBTX0lGUkVHO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpO1xuQEAgLTQzMjgsNyArNDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gXG4gLyoqXG5AQCAtNTI1OCw3ICs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTUzOTUsNyArNTM5NSw3IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG5AQCAtNTc4Myw3ICs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZGlyLVx1MDAzZWlfb3AtXHUwMDNlc3ltbGluaylcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTU5MDcsNyArNTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMjAsMjYgKzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGludCAqeGF0dHJfY291bnQpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0IHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGJvb2wgcmN1KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgc3RydWN0IGlhdHRyICphdHRyKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTQwNCwyNCArNDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdFx0XHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgICAgYm9vbCByY3UpO1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzayk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtOTAyLDkgKzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTkxMyw5ICs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkXG4gc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7IH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTI2LDE2ICs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk0Niw5ICs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0aW50IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTc0LDcgKzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTYxNCw2ICsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogdGhlIGZpbGUgYmVpbmcgY3JlYXRlZFxuICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlXG5AQCAtMTYyMiwxMiArMTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlKVxuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7XG4gXG5AQCAtMTY0OCw2ICsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlXG4gICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAbmV3X2RlbnRyeTogbmV3IGxpbmtcbkBAIC0xNjU2LDEyICsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTY4Miw2ICsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogc3ltYm9saWMgbGlua1xuICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWVcbkBAIC0xNjkwLDE2ICsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbiB9XG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcbkBAIC0xNzA5LDExICsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTtcbiBcbkBAIC0xNzM1LDYgKzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBmaWxlXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcbkBAIC0xNzQ3LDEyICsxNzUzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4gfVxuIFxuIC8qKlxuQEAgLTE4MjMsNiArMTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogaW5vZGVcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcbiAgKlxuQEAgLTE4MzUsMTEgKzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzaylcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMzA3NCwxMiArMzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgIFx1MDAyNmFkKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcbiB9XG5AQCAtMzA4OSwxMiArMzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTtcbiB9XG5AQCAtMzEwNCw3ICszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTtcbiB9XG5AQCAtMzIzNiwxMyArMzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuIFxuIC8qKlxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZFxuICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWRcbiAgKlxuICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0b1xuICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4ge1xuIFx0aW50IG1hc2s7XG4gXHR1MzIgcGVybXM7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTEwODksMTQgKzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIC8qKlxuICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdFxuICAqIEBkaXI6IHVudXNlZFxuICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0c3RydWN0IHNtYWNrX2tub3duICppc3A7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5AQCAtMTIyNiw2ICsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxuICAqXG5AQCAtMTIzMyw3ICsxMjM1LDggQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICBpbnQgbWFzaylcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5AQCAtMSwxOCArMSwzMCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuIFxuIC8qXG4gICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcImxzbS5za2VsLmhcIlxuICNpbmNsdWRlIFwibHNtX3RhaWxjYWxsLnNrZWwuaFwiXG4gXG4gY2hhciAqQ01EX0FSR1NbXSA9IHtcInRydWVcIiwgTlVMTH07XG4gXG4rZW51bSB7XG4rXHRJTk9ERV9JRE1BUF9BTEwgPSAoMVUgXHUwMDNjXHUwMDNjIDYpIC0gMSxcbit9O1xuK1xuIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4ge1xuIFx0aW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzO1xuQEAgLTMwLDYgKzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0ZG8ge1xuK1x0XHRyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7XG4rXHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTtcbitcdGludCBmZCwgc2F2ZWRfZXJybm8gPSAwO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcbitcdFx0c2F2ZWRfZXJybm8gPSBFSU87XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAoc2F2ZWRfZXJybm8pIHtcbitcdFx0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0aW50IGxlbjtcbitcbitcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIvcHJvYy8lZC8lc1wiLCBwaWQsIG5hbWUpO1xuK1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuK1x0XHRlcnJubyA9IEVPVkVSRkxPVztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZClcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0cGlkX3QgcGlkLCB3YWl0ZWQ7XG4rXHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKHBpZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxuK1x0XHRcdF9leGl0KDEpO1xuK1x0XHRyYWlzZShTSUdTVE9QKTtcbitcdFx0X2V4aXQoMCk7XG4rXHR9XG4rXG4rXHRkbyB7XG4rXHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIFdVTlRSQUNFRCk7XG4rXHR9IHdoaWxlICh3YWl0ZWQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcdGlmICh3YWl0ZWQgIT0gcGlkKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7XG4rXHRcdHBpZCA9IC0xO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovXG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInNldGdyb3Vwc1wiLCBcImRlbnlcIikgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVOT0VOVClcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInVpZF9tYXBcIiwgXCIwIDAgMVwiKSB8fFxuK1x0ICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXCJnaWRfbWFwXCIsIFwiMCAwIDFcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkL25zL3VzZXJcIiwgcGlkKTtcbitcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbitcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbitcbitvdXQ6XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0aWYgKHBpZCBcdTAwM2UgMCkge1xuK1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHRcdGRvIHtcbitcdFx0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCk7XG4rXHRcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1x0fVxuK1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZClcbit7XG4rXHRzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0ge1xuK1x0XHQuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLFxuK1x0fTtcbitcdGludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTtcbitcbitcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcbitcdGlmICh1c2VybnNfZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogQSBkZXRhY2hlZCB0bXBmcyBhdm9pZHMgcmVseWluZyBvbiB0aGUgaG9zdCB0ZXN0IGRpcmVjdG9yeSBzdXBwb3J0aW5nIGlkbWFwcy4gKi9cbitcdGZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCBcInRtcGZzXCIsIEZTT1BFTl9DTE9FWEVDKTtcbitcdGlmIChmc2ZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7XG4rXHRpZiAobW50ZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7XG4rXHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcIlwiLCBBVF9FTVBUWV9QQVRILCBcdTAwMjZhdHRyLFxuK1x0XHQgICAgc2l6ZW9mKGF0dHIpKSkge1xuK1x0XHRjbG9zZShtbnRmZCk7XG4rXHRcdG1udGZkID0gLTE7XG4rXHR9XG4rXG4rb3V0OlxuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGlmIChmc2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZnNmZCk7XG4rXHRpZiAodXNlcm5zX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodXNlcm5zX2ZkKTtcbitcdGVycm5vID0gc2F2ZWRfZXJybm87XG4rXHRyZXR1cm4gbW50ZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxuK3tcbitcdGludCBmZCA9IC0xLCByZXQgPSAtMTtcbitcbitcdGZkID0gb3BlbmF0KGRpcmZkLCBcImZpbGVcIiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxuK1x0XHQgICAgMDYwMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCJjcmVhdGVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Y2xvc2UoZmQpO1xuK1x0ZmQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFwiZGlyXCIsIDA3MDApLCBcIm1rZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcInRhcmdldFwiLCBkaXJmZCwgXCJzeW1saW5rXCIpLCBcInN5bWxpbmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCBcImZpbGVcIiwgZGlyZmQsIFwibGlua1wiLCAwKSwgXCJsaW5rXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG1rZmlmb2F0KGRpcmZkLCBcImZpZm9cIiwgMDYwMCksIFwibWtub2RcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gMDtcbitvdXQ6XG4rXHRpZiAoZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmZCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJsaW5rXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZmlmb1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcInN5bWxpbmtcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJmaWxlXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZGlyXCIsIEFUX1JFTU9WRURJUik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXG4re1xuK1x0Y2hhciB0bXBkaXJbXSA9IFwiL3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXCI7XG4rXHRfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDtcbitcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xuK1x0aW50IHJldCA9IC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXCJta2R0ZW1wXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTtcbitcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcIm9wZW5fdG1wZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXCJjcmVhdGVfaWRtYXBwZWRfdG1wZnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgXCJpZGVudGl0eV9pZG1hcFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXG4rXHRcdCAgICAgICBcImlkbWFwcGVkX21vdW50XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxuK1x0XHQgICAgICAgXCJpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdHJldCA9IEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCxcbitcdFx0XHRcImlub2RlX2lkbWFwcGVkX21vdW50X3NlZW5cIikgPyAwIDogLTE7XG4rXG4rb3V0OlxuK1x0aWYgKGlkbWFwcGVkX2RpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xuK1x0aWYgKGRpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZGlyZmQpO1xuK1x0cm1kaXIodG1wZGlyKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG5AQCAtNTMsNiArMjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiBcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiBcbitcdGVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfbHNtX2lub2RlX2lkbWFwXCIpKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuIFx0ZXJyID0gc3RhY2tfbXByb3RlY3QoKTtcbiBcdGlmICghQVNTRVJUX0VRKGVyciwgLTEsIFwic3RhY2tfbXByb3RlY3RcIikgfHxcbiBcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXCJzdGFja19tcHJvdGVjdFwiKSlcbkBAIC03MSw2ICszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3Rlc3QgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9jb3VudCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5AQCAtODQsNiArODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIGludCBtb25pdG9yZWRfcGlkID0gMDtcbiBpbnQgbXByb3RlY3RfY291bnQgPSAwO1xuIGludCBicHJtX2NvdW50ID0gMDtcbitfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitlbnVtIHtcbitcdElOT0RFX0lETUFQX0NSRUFURVx0PSAxVSBcdTAwM2NcdTAwM2MgMCxcbitcdElOT0RFX0lETUFQX0xJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDEsXG4rXHRJTk9ERV9JRE1BUF9TWU1MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAyLFxuK1x0SU5PREVfSURNQVBfTUtESVJcdD0gMVUgXHUwMDNjXHUwMDNjIDMsXG4rXHRJTk9ERV9JRE1BUF9NS05PRFx0PSAxVSBcdTAwM2NcdTAwM2MgNCxcbitcdElOT0RFX0lETUFQX1BFUk1JU1NJT05cdD0gMVUgXHUwMDNjXHUwMDNjIDUsXG4rfTtcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuK3tcbitcdF9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcbitcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcdTAwMjZcdTAwMjYgaWRtYXA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbit7XG4rXHRyZXR1cm4gaWRtYXAtXHUwMDNldWlkX21hcC5ucl9leHRlbnRzID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgaWRtYXAtXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0ICAgICAgX191MzIgaG9vaywgaW50IHJldClcbit7XG4rXHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSlcbitcdFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xuK1x0ZWxzZVxuK1x0XHRpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX2NyZWF0ZVwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9zeW1saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9ta2RpclwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LRElSLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfbWtub2RcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfcGVybWlzc2lvblwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpO1xuK31cbiBcbiBTRUMoXCJsc20vZmlsZV9tcHJvdGVjdFwiKVxuIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjM1OjM5LjI1MjA0MDcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyNjQ2NTkzNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNb3VudCBJRCBNYXBwaW5nIGluIExTTSBIb29rcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCAqd2FycmFudCogZnV6emluZywgbm8gcXVlc3Rpb24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBpbnRvIHZhcmlvdXMgTFNNIGhvb2tzIHJlbGF0ZWQgdG8gaW5vZGVzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFsdGVyYXRpb24gdG8gdGhlIGNvcmUgVkZTIGFuZCBzZWN1cml0eSBzdWJzeXN0ZW0uIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgdGhlIHdvcmtzIOKAkyBmdW5kYW1lbnRhbCBvcGVyYXRpb25zLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGBmcy9uYW1laS5jYCwgYW5kIHNldmVyYWwgc2VjdXJpdHktcmVsYXRlZCBmaWxlcyAoaW5jbHVkaW5nIFNFTGludXggYW5kIFNtYWNrKSBjb25maXJtcyB0aGlzIGFzIGEgcG90ZW50aWFsIHRyb3VibGUgc3BvdC4gVXBkYXRpbmcgdGhlIEJQRiB0ZXN0cyBmdXJ0aGVyIHVuZGVyc2NvcmVzIHRoZSBpbXBvcnRhbmNlLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGF0IHBhc3NpbmcgdGhlIGBpZG1hcGAgdG8gTFNNIGhvb2tzIGdpdmVzIG1vZHVsZXMgKFNFTGludXgsIFNtYWNrLCBCUEYsIGV0Yy4pIGFjY2VzcyB0byB0aGUgbW91bnQgSUQgbWFwcGluZyBkdXJpbmcgc2VjdXJpdHkgZGVjaXNpb25zLiBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgcmVmYWN0b3Jpbmc7IGl0J3MgYSBzdHJ1Y3R1cmFsIGNoYW5nZSB0aGF0IGNhbiBpbmZsdWVuY2UgYWNjZXNzIGNvbnRyb2wgZGVjaXNpb25zIGJhc2VkIG9uIG1vdW50IG5hbWVzcGFjZXMuIFdlIG5lZWQgdG8gZXhwbG9yZSB0aGVzZSBuZXcgY29kZSBwYXRocy5cblxuU28sIGZ1enppbmcgaXMgYSAqZ28qLiBOb3csIHRoZSBjb25jcmV0ZSBwbGFuLiBJIG5lZWQgdG8gZXh0cmFjdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkLCB3aGljaCBpcyBzdHJhaWdodGZvcndhcmQuIFdlIGhhdmU6XG5cbiogICBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGBzZWN1cml0eV9pbm9kZV9ta25vZGAsIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYFxuKiAgIGBzZWxpbnV4X2lub2RlX2NyZWF0ZWAsIGBzZWxpbnV4X2lub2RlX2xpbmtgLCBgc2VsaW51eF9pbm9kZV9zeW1saW5rYCwgYHNlbGludXhfaW5vZGVfbWtkaXJgLCBgc2VsaW51eF9pbm9kZV9ta25vZGAsIGBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb25gXG4qICAgYHNtYWNrX2lub2RlX2xpbmtgLCBgc21hY2tfaW5vZGVfcGVybWlzc2lvbmBcblxuVGhlc2UgYmVjb21lIHRoZSBgRm9jdXNTeW1ib2xzYCBmb3Igb3VyIGZ1enppbmcgY2FtcGFpZ24uIE5leHQgc3RlcDogY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIGlkZW50aWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBCYXNlZCBvbiB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCBsb29rcyBsaWtlIHdlJ2xsIG5lZWQgYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBhbmQgYEJQRl9MU01gIGVuYWJsZWQgZm9yIGZ1bGwgY292ZXJhZ2UuXG5cbkxldCdzIGRvIGEgcXVpY2sgY2hlY2sgb24gdGhlIGBzZWN1cml0eV9pbm9kZV8qYCBmdW5jdGlvbnMuIFRoZXkncmUgcHJvYmFibHkgdGhlIG1vc3QgYmFzaWMgb25lcyB0aGF0IHdpbGwgcmVhY2ggbXVsdGlwbGUgTFNNIG1vZHVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDc0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NDI6NTEuODk4NjM3OTc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjE3MDIwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkgc2VjdXJpdHlfaW5vZGVfKGNyZWF0ZXxsaW5rfHN5bWxpbmt8bWtkaXJ8bWtub2R8cGVybWlzc2lvbilcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQwND1pbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA2LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQwNzppbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA4LVxcdFxcdFxcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MDk9dm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00MTAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQxMTppbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDEyLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDEzPWludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQxNDppbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQxNS1cXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6NDE2OmludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQxNy1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MTg9aW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MTk6aW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDIwLVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MjU9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDI2LVxcdFxcdFxcdCAgICAgICBib29sIHJjdSk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQyNzppbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDI4LVxcdFxcdFxcdCAgICAgIGludCBtYXNrKTtcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTYwOT1pbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MjUtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjI2OmludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYyNy1cXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjQyPXZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY2MC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2NjE6aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjYyLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjc4PWludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY5NS0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2OTY6aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY5Ny1cXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzE1LSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTcxNjppbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcxNy1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTE3MzQ9aW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3NTUtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNzU2OmludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzU3LVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xODIyPWludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDQtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxODQ1OmludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0Ni1cXHRcXHRcXHQgICAgICBpbnQgbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NDI6NTQuOTYwMzQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MjE1NTQ5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvcmUgVkZTL1NlY3VyaXR5IEhvb2sgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY2hhbmdlcywgYW5kIGl0IHNlZW1zIHRoZSBmb2N1cyBpcyBvbiBjb3JlIFZGUyBhbmQgc2VjdXJpdHkgaG9va3MuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZXNlIHN5bWJvbHM6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYC4gVGhlc2UgYXJlIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgZm9yIGFjY2VzcyBjb250cm9sIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSwgc28gYW55IGNoYW5nZXMgaGVyZSBhcmUgY3JpdGljYWwuXG5cbk9mIGNvdXJzZSwgSSBjYW4ndCBpZ25vcmUgdGhlIFNFTGludXggaW1wbGljYXRpb25zIOKAkyB0aGUgYHNlbGludXhfaW5vZGVfKmAgZnVuY3Rpb25zIGFyZSBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IFNFTGludXggaXMgaW50ZWdyYXRpbmcuIFNvIEknbGwgbmVlZCB0byBhbmFseXplIGBzZWxpbnV4X2lub2RlX2NyZWF0ZWAsIGBzZWxpbnV4X2lub2RlX2xpbmtgLCBgc2VsaW51eF9pbm9kZV9zeW1saW5rYCwgYHNlbGludXhfaW5vZGVfbWtkaXJgLCBgc2VsaW51eF9pbm9kZV9ta25vZGAsIGFuZCBgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uYCBhbG9uZ3NpZGUgdGhlIGJhc2UgaG9va3MuXG5cbkFuZCBpdCdzIG5vdCBqdXN0IFNFTGludXg7IFNtYWNrIHNlZW1zIHRvIGJlIGludm9sdmVkIHRvbywgc3BlY2lmaWNhbGx5IHdpdGggYHNtYWNrX2lub2RlX2xpbmtgIGFuZCBgc21hY2tfaW5vZGVfcGVybWlzc2lvbmAuIFNvIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmaXQgaW4uXG5cblRoZSBmaXJzdCB0aGluZyBJJ2xsIGNoZWNrIGlzIHdoZXRoZXIgU0VMaW51eCBhbmQgU21hY2sgYXJlIHVzaW5nIHN0YXRpYyBvciBkeW5hbWljIGxpbmtpbmcgZm9yIHRoZWlyIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBzZWN1cml0eSBtb2R1bGVzIGFyZSBkZXNpZ25lZCB0byBpbnRlcmFjdC4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzM3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjQzOjQwLjg4MTkwNDY0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTkzNjg4NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGludXhfaW5vZGVfKGNyZWF0ZXxsaW5rfHN5bWxpbmt8bWtkaXJ8bWtub2R8cGVybWlzc2lvbilcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMwMTE9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwNzYtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMwNzc6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwNzgtXFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA4Mi1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA4MzpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA4NC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMDg5PXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDkzLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDk0OnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA5NS1cXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwOTktXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMxMDA6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzEwMS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzEwNj1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTEwLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTExOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxMTItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDItLyoqXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNDM6ICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDQtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjUxOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQyNjM9c3RhdGljIGludCBzZWxpbnV4X2ZpbGVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MjgwLVxcdCAqIFNpbmNlIHRoZSBpbm9kZSBsYWJlbCBvciBwb2xpY3kgc2Vxbm8gbWF5IGhhdmUgY2hhbmdlZFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MjgxOlxcdCAqIGJldHdlZW4gdGhlIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiBjaGVjayBhbmQgdGhlIHNhdmluZ1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MjgyLVxcdCAqIG9mIHN0YXRlIGFib3ZlLCByZWNoZWNrIHRoYXQgYWNjZXNzIGlzIHN0aWxsIHBlcm1pdHRlZC5cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTY3PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYwNy1cXHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24pLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjA4OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfY3JlYXRlLCBzZWxpbnV4X2lub2RlX2NyZWF0ZSksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MDk6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9saW5rLCBzZWxpbnV4X2lub2RlX2xpbmspLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjEwLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfdW5saW5rLCBzZWxpbnV4X2lub2RlX3VubGluayksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTE6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9zeW1saW5rLCBzZWxpbnV4X2lub2RlX3N5bWxpbmspLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjEyOlxcdExTTV9IT09LX0lOSVQoaW5vZGVfbWtkaXIsIHNlbGludXhfaW5vZGVfbWtkaXIpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjEzLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfcm1kaXIsIHNlbGludXhfaW5vZGVfcm1kaXIpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE0OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfbWtub2QsIHNlbGludXhfaW5vZGVfbWtub2QpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE1LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfcmVuYW1lLCBzZWxpbnV4X2lub2RlX3JlbmFtZSksXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxNy1cXHRMU01fSE9PS19JTklUKGlub2RlX2ZvbGxvd19saW5rLCBzZWxpbnV4X2lub2RlX2ZvbGxvd19saW5rKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYxODpcXHRMU01fSE9PS19JTklUKGlub2RlX3Blcm1pc3Npb24sIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTktXFx0TFNNX0hPT0tfSU5JVChpbm9kZV9zZXRhdHRyLCBzZWxpbnV4X2lub2RlX3NldGF0dHIpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo0Mzo0My40NzU2MDI1ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTgwMDA2ODk0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgU0VMaW51eCBGdW5jdGlvbiBMaXN0aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBkb2N1bWVudCB0aGVzZSBTRUxpbnV4IGZ1bmN0aW9ucy4gRmlyc3Qgb2ZmLCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBTRUxpbnV4IGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBUaGF0J3Mga2V5LCBJIGRvbid0IHdhbnQgdG8gbGlzdCB0aG9zZSBiZWNhdXNlLCB3ZWxsLCB0aGF0J3Mgbm90IHdoYXQncyBpbnRlcmVzdGluZy4gSSB3YW50IHRoZSBzdHVmZiB0aGF0J3MgYWN0dWFsbHkgYWNjZXNzaWJsZS4gVGhlIGBzZWN1cml0eV9pbm9kZV8qYCBmYW1pbHkgYXJlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBQZXJmZWN0LCB0aGF0J3Mgd2hhdCBJJ20gYWZ0ZXIuXG5cblJpZ2h0LCBzbywgbGV0J3Mgc2VlLCBJJ2xsIHB1dCB0aGVzZSBpbiB0aGUgbGlzdDpcbmBzZWN1cml0eV9pbm9kZV9jcmVhdGVgXG5gc2VjdXJpdHlfaW5vZGVfbGlua2BcbmBzZWN1cml0eV9pbm9kZV9zeW1saW5rYFxuYHNlY3VyaXR5X2lub2RlX21rZGlyYFxuYHNlY3VyaXR5X2lub2RlX21rbm9kYFxuYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gXG5cbk5vdywgbGV0J3Mga2VlcCBhbiBleWUgb24gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuIEkgdGhpbmsgYFNFQ1VSSVRZYCBpcyByZWxldmFudCBoZXJlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhhdCdzIGVub3VnaCB0byBjb250cm9sIHRoaXMgc2V0IG9mIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY3MiwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo1MjowMS40NzYyOTUyMTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzg2NzUzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDVVJJVFlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvS2NvbmZpZz04PXNvdXJjZSBcXFwic2VjdXJpdHkva2V5cy9LY29uZmlnXFxcIlxcbnNlY3VyaXR5L0tjb25maWctOS1cXG5zZWN1cml0eS9LY29uZmlnOjEwOmNvbmZpZyBTRUNVUklUWV9ETUVTR19SRVNUUklDVFxcbnNlY3VyaXR5L0tjb25maWctMTEtXFx0Ym9vbCBcXFwiUmVzdHJpY3QgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUga2VybmVsIHN5c2xvZ1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWc9NTI9Y29uZmlnIE1TRUFMX1NZU1RFTV9NQVBQSU5HU1xcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy03Mi1cXG5zZWN1cml0eS9LY29uZmlnOjczOmNvbmZpZyBTRUNVUklUWVxcbnNlY3VyaXR5L0tjb25maWctNzQtXFx0Ym9vbCBcXFwiRW5hYmxlIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHNcXFwiXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnPTg2PWNvbmZpZyBIQVNfU0VDVVJJVFlfQVVESVRcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctOTAtXFxuc2VjdXJpdHkvS2NvbmZpZzo5MTpjb25maWcgU0VDVVJJVFlGU1xcbnNlY3VyaXR5L0tjb25maWctOTItXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTk4LVxcbnNlY3VyaXR5L0tjb25maWc6OTk6Y29uZmlnIFNFQ1VSSVRZX05FVFdPUktcXG5zZWN1cml0eS9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJTb2NrZXQgYW5kIE5ldHdvcmtpbmcgU2VjdXJpdHkgSG9va3NcXFwiXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTEwNy1cXG5zZWN1cml0eS9LY29uZmlnOjEwODpjb25maWcgU0VDVVJJVFlfSU5GSU5JQkFORFxcbnNlY3VyaXR5L0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkluZmluaWJhbmQgU2VjdXJpdHkgSG9va3NcXFwiXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTExNi1cXG5zZWN1cml0eS9LY29uZmlnOjExNzpjb25maWcgU0VDVVJJVFlfTkVUV09SS19YRlJNXFxuc2VjdXJpdHkvS2NvbmZpZy0xMTgtXFx0Ym9vbCBcXFwiWEZSTSAoSVBTZWMpIE5ldHdvcmtpbmcgU2VjdXJpdHkgSG9va3NcXFwiXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTEyOS1cXG5zZWN1cml0eS9LY29uZmlnOjEzMDpjb25maWcgU0VDVVJJVFlfUEFUSFxcbnNlY3VyaXR5L0tjb25maWctMTMxLVxcdGJvb2wgXFxcIlNlY3VyaXR5IGhvb2tzIGZvciBwYXRobmFtZSBiYXNlZCBhY2Nlc3MgY29udHJvbFxcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWc9MjY4PWNvbmZpZyBMU01cXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMjg0LVxcbnNlY3VyaXR5L0tjb25maWc6Mjg1OmNvbmZpZyBTRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L0tjb25maWctMjg2LVxcdGJvb2wgXFxcIkJ1aWxkIEtVbml0IHRlc3RzIGZvciBjb21tb25jYXBcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIkFwcEFybW9yIHN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xOS1cXHRib29sIFxcXCJCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX0FTU0VSVFNcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI5LVxcdGJvb2wgXFxcIkJ1aWxkIEFwcEFybW9yIHdpdGggZGVidWdnaW5nIGFzc2VydHNcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mzg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX01FU1NBR0VTXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEZWJ1ZyBtZXNzYWdlcyBlbmFibGVkIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ2LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00OC1cXHRib29sIFxcXCJBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNTgtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo1OTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNjAtXFx0Ym9vbCBcXFwiRW5hYmxlIGludHJvc3BlY3Rpb24gb2Ygc2hhMjU2IGhhc2hlcyBmb3IgbG9hZGVkIHByb2ZpbGVzXFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03MC1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjcxOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIX0RFRkFVTFRcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcyLSAgICAgICBib29sIFxcXCJFbmFibGUgcG9saWN5IGhhc2ggaW50cm9zcGVjdGlvbiBieSBkZWZhdWx0XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04My1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjg0OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04NS1cXHRib29sIFxcXCJBbGxvdyBleHBvcnRpbmcgdGhlIHJhdyBiaW5hcnkgcG9saWN5XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05NS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjk2OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwNi1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjEwNzpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTA4LVxcdHRyaXN0YXRlIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgcG9saWN5X3VucGFjay5jXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZy01LVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnOjY6bWVudWNvbmZpZyBTRUNVUklUWV9JUEVcXG5zZWN1cml0eS9pcGUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkludGVncml0eSBQb2xpY3kgRW5mb3JjZW1lbnQgKElQRSlcXFwiXFxuLS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZz05OD1lbmRtZW51XFxuc2VjdXJpdHkvaXBlL0tjb25maWctOTktXFxuc2VjdXJpdHkvaXBlL0tjb25maWc6MTAwOmNvbmZpZyBTRUNVUklUWV9JUEVfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2lwZS9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgSVBFXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTItXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzozOmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctNC1cXHRib29sIFxcXCJMYW5kbG9jayBzdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy0yMy1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjI0OmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS19MT0dcXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTI1LVxcdGJvb2xcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjgtXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzoyOTpjb25maWcgU0VDVVJJVFlfTEFORExPQ0tfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiS1VuaXQgdGVzdHMgZm9yIExhbmRsb2NrXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfTE9BRFBJTlxcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlBpbiBsb2FkIG9mIGtlcm5lbCBmaWxlcyAobW9kdWxlcywgZncsIGV0YykgdG8gb25lIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMTMtXFxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjE0OmNvbmZpZyBTRUNVUklUWV9MT0FEUElOX0VORk9SQ0VcXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiRW5mb3JjZSBMb2FkUGluIGF0IGJvb3RcXFwiXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMjQtXFxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjI1OmNvbmZpZyBTRUNVUklUWV9MT0FEUElOX1ZFUklUWVxcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0yNi1cXHRib29sIFxcXCJBbGxvdyByZWFkaW5nIGZpbGVzIGZyb20gY2VydGFpbiBvdGhlciBmaWxlc3lzdGVtcyB0aGF0IHVzZSBkbS12ZXJpdHlcXFwiXFxuLS1cXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnOjE6Y29uZmlnIFNFQ1VSSVRZX0xPQ0tET1dOX0xTTVxcbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWctMi1cXHRib29sIFxcXCJCYXNpYyBtb2R1bGUgZm9yIGVuZm9yY2luZyBrZXJuZWwgbG9ja2Rvd25cXFwiXFxuLS1cXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTgtXFxuc2VjdXJpdHkvbG9ja2Rvd24vS2NvbmZpZzo5OmNvbmZpZyBTRUNVUklUWV9MT0NLRE9XTl9MU01fRUFSTFlcXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTEwLVxcdGJvb2wgXFxcIkVuYWJsZSBsb2NrZG93biBMU00gZWFybHkgaW4gaW5pdFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NhZmVzZXRpZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc2FmZXNldGlkL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0FGRVNFVElEXFxuc2VjdXJpdHkvc2FmZXNldGlkL0tjb25maWctMy0gICAgICAgIGJvb2wgXFxcIkdhdGUgc2V0aWQgdHJhbnNpdGlvbnMgdG8gbGltaXQgQ0FQX1NFVHtVL0d9SUQgY2FwYWJpbGl0aWVzXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMy1cXHRib29sIFxcXCJTRUxpbnV4IFN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTEtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjEyOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTRUxpbnV4IGJvb3QgcGFyYW1ldGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI1LVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlNFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlNFTGludXggQVZDIFN0YXRpc3RpY3NcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDgtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQ5OmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRFRBQl9IQVNIX0JJVFNcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXFx0aW50IFxcXCJTRUxpbnV4IHNpZHRhYiBoYXNodGFibGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02MC1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYyLVxcdGludCBcXFwiU0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NzI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX0hBU0hfQklUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03My1cXHRpbnQgXFxcIlNFTGludXggYXZjIGhhc2h0YWJsZSBzaXplXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTgyLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo4Mzpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cXHRib29sIFxcXCJTRUxpbnV4IGtlcm5lbCBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlNpbXBsaWZpZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIEtlcm5lbCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjE2OmNvbmZpZyBTRUNVUklUWV9TTUFDS19CUklOR1VQXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNy1cXHRib29sIFxcXCJSZXBvcnRpbmcgb24gYWNjZXNzIGdyYW50ZWQgYnkgU21hY2sgcnVsZXNcXFwiXFxuLS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMzLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6MzQ6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUlxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiUGFja2V0IG1hcmtpbmcgdXNpbmcgc2VjbWFya3MgZm9yIG5ldGZpbHRlclxcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctNDQtXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzo0NTpjb25maWcgU0VDVVJJVFlfU01BQ0tfQVBQRU5EX1NJR05BTFNcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlRyZWF0IGRlbGl2ZXJpbmcgc2lnbmFscyBhcyBhbiBhcHBlbmQgb3BlcmF0aW9uXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9UT01PWU9cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlRPTU9ZTyBMaW51eCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTUtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6MTY6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19NQVhfQUNDRVBUX0VOVFJZXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTctXFx0aW50IFxcXCJEZWZhdWx0IG1heGltYWwgY291bnQgZm9yIGxlYXJuaW5nIG1vZGVcXFwiXFxuLS1cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0yOC1cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOTpjb25maWcgU0VDVVJJVFlfVE9NT1lPX01BWF9BVURJVF9MT0dcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0zMC1cXHRpbnQgXFxcIkRlZmF1bHQgbWF4aW1hbCBjb3VudCBmb3IgYXVkaXQgbG9nXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMzktXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVJcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy00MS1cXHRib29sIFxcXCJBY3RpdmF0ZSB3aXRob3V0IGNhbGxpbmcgdXNlcnNwYWNlIHBvbGljeSBsb2FkZXIuXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTUtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6NTY6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19QT0xJQ1lfTE9BREVSXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTctXFx0c3RyaW5nIFxcXCJMb2NhdGlvbiBvZiB1c2Vyc3BhY2UgcG9saWN5IGxvYWRlclxcXCJcXG4tLVxcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTY1LVxcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjY2OmNvbmZpZyBTRUNVUklUWV9UT01PWU9fQUNUSVZBVElPTl9UUklHR0VSXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNjctXFx0c3RyaW5nIFxcXCJUcmlnZ2VyIGZvciBjYWxsaW5nIHVzZXJzcGFjZSBwb2xpY3kgbG9hZGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNzYtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6Nzc6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19JTlNFQ1VSRV9CVUlMVElOX1NFVFRJTkdcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy03OC1cXHRib29sIFxcXCJVc2UgaW5zZWN1cmUgYnVpbHQtaW4gc2V0dGluZ3MgZm9yIGZ1enppbmcgdGVzdHMuXFxcIlxcbi0tXFxuc2VjdXJpdHkveWFtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkveWFtYS9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1lBTUFcXG5zZWN1cml0eS95YW1hL0tjb25maWctMy1cXHRib29sIFxcXCJZYW1hIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjUyOjAzLjE5NDE2OTA1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjExOTI1ODAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBTZWN1cml0eSBGcmFtZXdvcmsgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBUaGV5J3JlIGRlZmluaXRlbHkgdGllZCBpbnRvIHRoZSBjb3JlIHNlY3VyaXR5IGZyYW1ld29yayDigJMgdGhlIGtpbmQgb2Ygc3R1ZmYgdGhhdCdzIGVuYWJsZWQgYnkgYENPTkZJR19TRUNVUklUWWAuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgU0VMaW51eCBhbmQgU21hY2ssIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIHRlc3RpbmcgdGhvc2UgTFNNcy4gQWRkaW5nIGBTRUNVUklUWV9TRUxJTlVYYCBhbmQgYFNFQ1VSSVRZX1NNQUNLYCB0byBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGRvIHRoZSB0cmljay4gTm93LCB3aGF0IGFib3V0IHRoZSBCUEYgTFNNIGNoYW5nZXM/IFNpbmNlIHRoYXQncyBiZWVuIG1vZGlmaWVkIHRvbywgYEJQRl9MU01gIGlzIGNsZWFybHkgcmVsZXZhbnQgaGVyZS4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBgQlBGX0xTTWAgc2V0dGluZyBhbmQgbWFrZSBzdXJlIGl0J3MgcHJvcGVybHkgYWNjb3VudGVkIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NTc6NDUuMzEzNDI5OTE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkwNDEzMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfTFNNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo1Nzo0Ni45MDM4NTA0NzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2MDc5NjA2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzIGZvciBTZWN1cml0eSBIb29rIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVmaW5lIHRoZSBrZXkgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIHNlY3VyaXR5IHBhdGNoLiBGaXJzdCwgSSdsbCBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBhbmQgYEJQRl9MU01gLiBOb3csIHRvIHRoZSBjb3JlIG9mIHRoaXM6IHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuSSBzdGFydGVkIHdpdGggYSBsaXN0IGRlcml2ZWQgZnJvbSB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBUaGF0IGxpc3QgYmVnYW4gd2l0aCB0aGUgYHNlY3VyaXR5X2lub2RlXypgIGZ1bmN0aW9uczogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBhbmQgYHNlY3VyaXR5X2lub2RlX21rbm9kYC4gVGhlbiwgSSBpZGVudGlmaWVkIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9uczogYGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyYCwgYGlub2RlX3Blcm1pc3Npb25gLCBhbmQgc2V2ZXJhbCBgdmZzXypgIGZ1bmN0aW9ucyAoYHZmc19jcmVhdGVgLCBgdmZzX21rb2JqYCwgYHZmc19ta25vZGAsIGB2ZnNfbWtkaXJgLCBgdmZzX3N5bWxpbmtgLCBgdmZzX2xpbmtgKS5cblxuQSBrZXkgcG9pbnQgaXMgYXZvaWRpbmcgZ2VuZXJpYywgaGlnaC1mcmVxdWVuY3kgZnVuY3Rpb25zLiBXaGlsZSB0aGUgYHNlY3VyaXR5X2lub2RlXypgIGFyZSB0YXJnZXRzLCBhbmQgd2hpbGUgdGhlIGBpbm9kZV9wZXJtaXNzaW9uYCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gIGZ1bmN0aW9ucyBhcmUgKnZlcnkqIGhvdCwgaXQncyBub3QgdGhlIHB1cnBvc2UuIEkgbmVlZCB0byBhdm9pZCB0aGVzZSBob3QgcGF0aHMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb25zIGZyb20gc2tld2luZy4gU28sIEkgZWxpbWluYXRlZCBgaW5vZGVfcGVybWlzc2lvbmAgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYCBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCBvbiBuZWFybHkgZXZlcnkgZmlsZSBhY2Nlc3MuIGBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcmAgY2FuIGJlIGRpc2NhcmRlZCBhcyB3ZWxsLCBzaW5jZSBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbi5cblxuVGhlIGB2ZnNfKmAgZnVuY3Rpb25zLCBvbiB0aGUgb3RoZXIgaGFuZCwgbG9vayBsaWtlIGdvb2QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIHRoZSBzZWN1cml0eSBob29rcy4gQWZ0ZXIgYSByZS1ldmFsdWF0aW9uLCB0aGUgcmVmaW5lZCBgRm9jdXNTeW1ib2xzYCBiZWNhbWU6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYHZmc19jcmVhdGVgLCBgdmZzX21rb2JqYCwgYHZmc19ta25vZGAsIGB2ZnNfbWtkaXJgLCBgdmZzX3N5bWxpbmtgLCBhbmQgYHZmc19saW5rYC5cblxuRmluYWxseSwgYSBxdWljayBjaGVjayBvZiBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQXNpZGUgZnJvbSB0aGUgaW5pdGlhbCBzZWN1cml0eSBvcHRpb25zLCBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19DQUNIRUZJTEVTYCBhcyBpdCByZWxhdGVzIHRvIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBidXQgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQuIEkgYmVsaWV2ZSB0aGlzIGxpc3QgcHJvdmlkZXMgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB0YXJnZXRlZCBmdXp6aW5nLCBjYXB0dXJpbmcgdGhlIG1vZGlmaWVkIHNlY3VyaXR5IGhvb2tzIHdpdGhvdXQgZ2V0dGluZyBib2dnZWQgZG93biBpbiBnZW5lcmljIGhvdCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NTg6MjMuNTExODE0MzY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc3NzUzMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDQUNIRUZJTEVTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozOmNvbmZpZyBDQUNIRUZJTEVTXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xMy1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MTQ6Y29uZmlnIENBQ0hFRklMRVNfREVCVUdcXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiRGVidWcgQ2FjaGVGaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yMi1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MjM6Y29uZmlnIENBQ0hFRklMRVNfRVJST1JfSU5KRUNUSU9OXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIlByb3ZpZGUgZXJyb3IgaW5qZWN0aW9uIGZvciBjYWNoZWZpbGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo1ODoyNS4wODk1NzUzOTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3Mjg3MTIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIEknbSBpbnRlZ3JhdGluZyB0aGlzIG5ldyBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJZZXAsIGBDQUNIRUZJTEVTYCBkZWZpbml0ZWx5IG5lZWRzIHRvIGJlIGVuYWJsZWQuXCIgTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24g4oCTIGl0J3MgY2hhbmdpbmcgdGhlIGZ1bmRhbWVudGFsIFZGUyBhbmQgTFNNIGhvb2tzLCBzcGVjaWZpY2FsbHkgdGhlIGBzZWN1cml0eV9pbm9kZV8qYCBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucywgYXMgd2Uga25vdywgYXJlICpjcml0aWNhbCogZm9yIHNlY3VyaXR5IGF0IHRoZSBpbm9kZSBsZXZlbCwgdGhleSdyZSB0aGUgZ2F0ZXMgZm9yIGZpbGUgY3JlYXRpb24sIGxpbmtpbmcsIHBlcm1pc3Npb24gY2hlY2tzLCB0aGUgd29ya3MuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIGFyZ3VtZW50PyBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdC4gVGhpcyBpcyBubyBtZXJlIHJlZmFjdG9yaW5nOyBpdCdzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyB0aGUgc2VjdXJpdHkgYXJjaGl0ZWN0dXJlIG9wZXJhdGVzIGF0IHRoaXMgY29yZSBsZXZlbC5cblxuVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogaXQncyBoaXR0aW5nIHRoZXNlIGtleSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoZSBiYWNrYm9uZSBvZiBmaWxlIHN5c3RlbSBzZWN1cml0eS4gU3BlY2lmaWNhbGx5LCBpdCdzIHRvdWNoaW5nIGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9ta25vZGAuIEFueSBhbHRlcmF0aW9uIGhlcmUgZGVtYW5kcyBhdHRlbnRpb24uIEFuZCBvZiBjb3Vyc2UsIHRoZXJlIGFyZSB0aGUgYHZmc18qYCBlcXVpdmFsZW50cyB3aGljaCBhcmUgd2hlcmUgdGhlIHZmcyBjYWxscyB0aGlzIHNlY3VyaXR5IGNoZWNrcy4gU28sIGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGB2ZnNfbWtkaXJgLCBgdmZzX21rbm9kYCwgYHZmc19zeW1saW5rYCBhbmQgYHZmc19saW5rYCBhcmUgYWxsIG9uIHRoZSByYWRhci5cblxuU28sIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MganVzdCBjb25maXJtIHRoYXQgYHZmc19ta29iamAgaXMgKmluZGVlZCogZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMuIEJlY2F1c2UgaWYgaXQncyBub3QsIHdlJ3ZlIGdvdCBhIHByb2JsZW0gYW5kIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGNoYW5nZWQgc28gdGhhdCB3ZSdyZSBjb3ZlcmluZyBhbGwgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5Gcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgaXQncyBwcnVkZW50IHRvIGVuYWJsZSBhbGwgcmVsYXRlZCBmZWF0dXJlcywgc28gd2UncmUgdGFsa2luZyBhYm91dCB0aGUgdXN1YWwgc3VzcGVjdHM6IGBTRUNVUklUWWAsIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYCwgYW5kIGBCUEZfTFNNYC4gQW5kLCBvYnZpb3VzbHksIGBDQUNIRUZJTEVTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5MjQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NTg6MzEuNDYyNDQ5NzczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkyNDc1MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCB2ZnNfbWtvYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00MjAyPUVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XFxuZnMvbmFtZWkuYy00MjAzLVxcbmZzL25hbWVpLmM6NDIwNDppbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbmZzL25hbWVpLmMtNDIwNS1cXHRcXHRpbnQgKCpmKShzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsIHZvaWQgKiksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MTgxMz1zdHJ1Y3QgZmlsZSAqa2VybmVsX2ZpbGVfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTE4MTUtXFxuaW5jbHVkZS9saW51eC9mcy5oOjE4MTY6aW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXFxuaW5jbHVkZS9saW51eC9mcy5oLTE4MTctXFx0XFx0aW50ICgqZikoc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LCB2b2lkICopLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo1ODozMy4wNTQ5Mjk4NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwMDQwNzQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OlxuXG4qKkFzc2Vzc21lbnQgYW5kIEFjdGlvbioqXG5cblJpZ2h0LCB0aGF0IGNvbmZpcm1zIGl0OyB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IgaXMgZGVtb25zdHJhYmx5ICpub24tc3RhdGljKi4gV2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIGZpeGVkIHN0YXRlIGhlcmUsIHdoaWNoIGNoYW5nZXMgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgbmV4dCBzdGVwLlxuXG5UaGVyZWZvcmUsIHRoZSBhcHByb3ByaWF0ZSBjb3Vyc2Ugb2YgYWN0aW9uIG5vdyBpcyBpbW1lZGlhdGVseSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIE5vIG5lZWQgdG8gaGVzaXRhdGUgb3Igb3ZlcnRoaW5rIHRoaXMuIFdlIGhhdmUgc3VmZmljaWVudCBkYXRhIHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODUwLCJPdXRwdXRUb2tlbnMiOjIxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjU4OjM3Ljk1NTMzOTY2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTY0MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIkNBQ0hFRklMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2xpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta25vZFwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwidmZzX21rb2JqXCIsXG4gICAgXCJ2ZnNfbWtkaXJcIixcbiAgICBcInZmc19ta25vZFwiLFxuICAgIFwidmZzX3N5bWxpbmtcIixcbiAgICBcInZmc19saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgYW5kIExTTSBob29rcyAoYHNlY3VyaXR5X2lub2RlXypgKSB0byBhY2NlcHQgYSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIGFyZ3VtZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHNlY3VyaXR5IGNoZWNrcyBkdXJpbmcgZmlsZSBjcmVhdGlvbiwgbGlua2luZywgYW5kIHBlcm1pc3Npb24gY2hlY2tzIGFjcm9zcyBtdWx0aXBsZSBMU01zIChTRUxpbnV4LCBTbWFjaywgQlBGKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIkNBQ0hFRklMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2xpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta25vZFwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwidmZzX21rb2JqXCIsXG4gICAgXCJ2ZnNfbWtkaXJcIixcbiAgICBcInZmc19ta25vZFwiLFxuICAgIFwidmZzX3N5bWxpbmtcIixcbiAgICBcInZmc19saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgYW5kIExTTSBob29rcyAoYHNlY3VyaXR5X2lub2RlXypgKSB0byBhY2NlcHQgYSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIGFyZ3VtZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHNlY3VyaXR5IGNoZWNrcyBkdXJpbmcgZmlsZSBjcmVhdGlvbiwgbGlua2luZywgYW5kIHBlcm1pc3Npb24gY2hlY2tzIGFjcm9zcyBtdWx0aXBsZSBMU01zIChTRUxpbnV4LCBTbWFjaywgQlBGKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NTg6MzguMDM2MzExMTczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwMzc4MjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjU4OjM4LjAzNzA0MDM3M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzMwMzA0OTc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyBhIGBzdHJ1Y3QgbW50X2lkbWFwICpgIGFyZ3VtZW50IHRvIHNldmVyYWwgTFNNIGlub2RlIGhvb2tzIChjcmVhdGUsIGxpbmssIHN5bWxpbmssIG1rZGlyLCBta25vZCwgcGVybWlzc2lvbikgYW5kIHByb3BhZ2F0ZXMgaXQgZnJvbSB0aGUgVkZTIGxheWVyIHRvIHRoZSBMU00gaW1wbGVtZW50YXRpb25zIGFuZCBCUEYgaG9va3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncywgc3VjaCBhcyBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgb3IgZnJlZWQgYGlkbWFwYCBwb2ludGVyLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzM2RlNjcxZWM4YTkyOTViMzk5YTBjYTViMWE0NDBlNjQ0ZjE0MGE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTY6MzU6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0XG4tLS0gYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbisrKyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuQEAgLTUxLDE0ICs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWRcIixcbiBcdFx0ICAgICAgIHJldCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cHJfZXJyKFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZFwiLFxuIFx0XHQgICAgICAgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC02NTgsNyArNjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAodW5saWtlbHkocmV0dmFsKSlcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaW5vZGVfcGVybWlzc2lvbik7XG4gXG5AQCAtNjk1LDcgKzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkXG4gXHRpZiAodW5saWtlbHkoKChpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQxODgsNyArNDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XHQvKiBzaG91bGRuJ3QgaXQgYmUgRU5PU1lTPyAqL1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuQEAgLTQyMTIsNyArNDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXG4gXHRtb2RlIFx1MDAyNj0gU19JQUxMVUdPO1xuIFx0bW9kZSB8PSBTX0lGUkVHO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpO1xuQEAgLTQzMjgsNyArNDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gXG4gLyoqXG5AQCAtNTI1OCw3ICs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTUzOTUsNyArNTM5NSw3IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG5AQCAtNTc4Myw3ICs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZGlyLVx1MDAzZWlfb3AtXHUwMDNlc3ltbGluaylcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTU5MDcsNyArNTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMjAsMjYgKzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGludCAqeGF0dHJfY291bnQpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0IHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGJvb2wgcmN1KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgc3RydWN0IGlhdHRyICphdHRyKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTQwNCwyNCArNDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdFx0XHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgICAgYm9vbCByY3UpO1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzayk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtOTAyLDkgKzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTkxMyw5ICs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkXG4gc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7IH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTI2LDE2ICs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk0Niw5ICs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0aW50IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTc0LDcgKzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTYxNCw2ICsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogdGhlIGZpbGUgYmVpbmcgY3JlYXRlZFxuICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlXG5AQCAtMTYyMiwxMiArMTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlKVxuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7XG4gXG5AQCAtMTY0OCw2ICsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlXG4gICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAbmV3X2RlbnRyeTogbmV3IGxpbmtcbkBAIC0xNjU2LDEyICsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTY4Miw2ICsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogc3ltYm9saWMgbGlua1xuICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWVcbkBAIC0xNjkwLDE2ICsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbiB9XG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcbkBAIC0xNzA5LDExICsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTtcbiBcbkBAIC0xNzM1LDYgKzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBmaWxlXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcbkBAIC0xNzQ3LDEyICsxNzUzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4gfVxuIFxuIC8qKlxuQEAgLTE4MjMsNiArMTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogaW5vZGVcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcbiAgKlxuQEAgLTE4MzUsMTEgKzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzaylcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMzA3NCwxMiArMzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgIFx1MDAyNmFkKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcbiB9XG5AQCAtMzA4OSwxMiArMzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTtcbiB9XG5AQCAtMzEwNCw3ICszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTtcbiB9XG5AQCAtMzIzNiwxMyArMzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuIFxuIC8qKlxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZFxuICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWRcbiAgKlxuICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0b1xuICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4ge1xuIFx0aW50IG1hc2s7XG4gXHR1MzIgcGVybXM7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTEwODksMTQgKzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIC8qKlxuICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdFxuICAqIEBkaXI6IHVudXNlZFxuICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0c3RydWN0IHNtYWNrX2tub3duICppc3A7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5AQCAtMTIyNiw2ICsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxuICAqXG5AQCAtMTIzMyw3ICsxMjM1LDggQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICBpbnQgbWFzaylcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5AQCAtMSwxOCArMSwzMCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuIFxuIC8qXG4gICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcImxzbS5za2VsLmhcIlxuICNpbmNsdWRlIFwibHNtX3RhaWxjYWxsLnNrZWwuaFwiXG4gXG4gY2hhciAqQ01EX0FSR1NbXSA9IHtcInRydWVcIiwgTlVMTH07XG4gXG4rZW51bSB7XG4rXHRJTk9ERV9JRE1BUF9BTEwgPSAoMVUgXHUwMDNjXHUwMDNjIDYpIC0gMSxcbit9O1xuK1xuIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4ge1xuIFx0aW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzO1xuQEAgLTMwLDYgKzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0ZG8ge1xuK1x0XHRyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7XG4rXHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTtcbitcdGludCBmZCwgc2F2ZWRfZXJybm8gPSAwO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcbitcdFx0c2F2ZWRfZXJybm8gPSBFSU87XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAoc2F2ZWRfZXJybm8pIHtcbitcdFx0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0aW50IGxlbjtcbitcbitcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIvcHJvYy8lZC8lc1wiLCBwaWQsIG5hbWUpO1xuK1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuK1x0XHRlcnJubyA9IEVPVkVSRkxPVztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZClcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0cGlkX3QgcGlkLCB3YWl0ZWQ7XG4rXHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKHBpZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxuK1x0XHRcdF9leGl0KDEpO1xuK1x0XHRyYWlzZShTSUdTVE9QKTtcbitcdFx0X2V4aXQoMCk7XG4rXHR9XG4rXG4rXHRkbyB7XG4rXHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIFdVTlRSQUNFRCk7XG4rXHR9IHdoaWxlICh3YWl0ZWQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcdGlmICh3YWl0ZWQgIT0gcGlkKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7XG4rXHRcdHBpZCA9IC0xO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovXG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInNldGdyb3Vwc1wiLCBcImRlbnlcIikgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVOT0VOVClcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInVpZF9tYXBcIiwgXCIwIDAgMVwiKSB8fFxuK1x0ICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXCJnaWRfbWFwXCIsIFwiMCAwIDFcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkL25zL3VzZXJcIiwgcGlkKTtcbitcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbitcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbitcbitvdXQ6XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0aWYgKHBpZCBcdTAwM2UgMCkge1xuK1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHRcdGRvIHtcbitcdFx0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCk7XG4rXHRcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1x0fVxuK1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZClcbit7XG4rXHRzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0ge1xuK1x0XHQuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLFxuK1x0fTtcbitcdGludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTtcbitcbitcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcbitcdGlmICh1c2VybnNfZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogQSBkZXRhY2hlZCB0bXBmcyBhdm9pZHMgcmVseWluZyBvbiB0aGUgaG9zdCB0ZXN0IGRpcmVjdG9yeSBzdXBwb3J0aW5nIGlkbWFwcy4gKi9cbitcdGZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCBcInRtcGZzXCIsIEZTT1BFTl9DTE9FWEVDKTtcbitcdGlmIChmc2ZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7XG4rXHRpZiAobW50ZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7XG4rXHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcIlwiLCBBVF9FTVBUWV9QQVRILCBcdTAwMjZhdHRyLFxuK1x0XHQgICAgc2l6ZW9mKGF0dHIpKSkge1xuK1x0XHRjbG9zZShtbnRmZCk7XG4rXHRcdG1udGZkID0gLTE7XG4rXHR9XG4rXG4rb3V0OlxuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGlmIChmc2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZnNmZCk7XG4rXHRpZiAodXNlcm5zX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodXNlcm5zX2ZkKTtcbitcdGVycm5vID0gc2F2ZWRfZXJybm87XG4rXHRyZXR1cm4gbW50ZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxuK3tcbitcdGludCBmZCA9IC0xLCByZXQgPSAtMTtcbitcbitcdGZkID0gb3BlbmF0KGRpcmZkLCBcImZpbGVcIiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxuK1x0XHQgICAgMDYwMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCJjcmVhdGVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Y2xvc2UoZmQpO1xuK1x0ZmQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFwiZGlyXCIsIDA3MDApLCBcIm1rZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcInRhcmdldFwiLCBkaXJmZCwgXCJzeW1saW5rXCIpLCBcInN5bWxpbmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCBcImZpbGVcIiwgZGlyZmQsIFwibGlua1wiLCAwKSwgXCJsaW5rXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG1rZmlmb2F0KGRpcmZkLCBcImZpZm9cIiwgMDYwMCksIFwibWtub2RcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gMDtcbitvdXQ6XG4rXHRpZiAoZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmZCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJsaW5rXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZmlmb1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcInN5bWxpbmtcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJmaWxlXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZGlyXCIsIEFUX1JFTU9WRURJUik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXG4re1xuK1x0Y2hhciB0bXBkaXJbXSA9IFwiL3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXCI7XG4rXHRfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDtcbitcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xuK1x0aW50IHJldCA9IC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXCJta2R0ZW1wXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTtcbitcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcIm9wZW5fdG1wZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXCJjcmVhdGVfaWRtYXBwZWRfdG1wZnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgXCJpZGVudGl0eV9pZG1hcFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXG4rXHRcdCAgICAgICBcImlkbWFwcGVkX21vdW50XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxuK1x0XHQgICAgICAgXCJpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdHJldCA9IEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCxcbitcdFx0XHRcImlub2RlX2lkbWFwcGVkX21vdW50X3NlZW5cIikgPyAwIDogLTE7XG4rXG4rb3V0OlxuK1x0aWYgKGlkbWFwcGVkX2RpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xuK1x0aWYgKGRpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZGlyZmQpO1xuK1x0cm1kaXIodG1wZGlyKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG5AQCAtNTMsNiArMjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiBcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiBcbitcdGVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfbHNtX2lub2RlX2lkbWFwXCIpKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuIFx0ZXJyID0gc3RhY2tfbXByb3RlY3QoKTtcbiBcdGlmICghQVNTRVJUX0VRKGVyciwgLTEsIFwic3RhY2tfbXByb3RlY3RcIikgfHxcbiBcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXCJzdGFja19tcHJvdGVjdFwiKSlcbkBAIC03MSw2ICszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3Rlc3QgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9jb3VudCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5AQCAtODQsNiArODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIGludCBtb25pdG9yZWRfcGlkID0gMDtcbiBpbnQgbXByb3RlY3RfY291bnQgPSAwO1xuIGludCBicHJtX2NvdW50ID0gMDtcbitfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitlbnVtIHtcbitcdElOT0RFX0lETUFQX0NSRUFURVx0PSAxVSBcdTAwM2NcdTAwM2MgMCxcbitcdElOT0RFX0lETUFQX0xJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDEsXG4rXHRJTk9ERV9JRE1BUF9TWU1MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAyLFxuK1x0SU5PREVfSURNQVBfTUtESVJcdD0gMVUgXHUwMDNjXHUwMDNjIDMsXG4rXHRJTk9ERV9JRE1BUF9NS05PRFx0PSAxVSBcdTAwM2NcdTAwM2MgNCxcbitcdElOT0RFX0lETUFQX1BFUk1JU1NJT05cdD0gMVUgXHUwMDNjXHUwMDNjIDUsXG4rfTtcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuK3tcbitcdF9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcbitcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcdTAwMjZcdTAwMjYgaWRtYXA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbit7XG4rXHRyZXR1cm4gaWRtYXAtXHUwMDNldWlkX21hcC5ucl9leHRlbnRzID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgaWRtYXAtXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0ICAgICAgX191MzIgaG9vaywgaW50IHJldClcbit7XG4rXHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSlcbitcdFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xuK1x0ZWxzZVxuK1x0XHRpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX2NyZWF0ZVwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9zeW1saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9ta2RpclwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LRElSLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfbWtub2RcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfcGVybWlzc2lvblwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpO1xuK31cbiBcbiBTRUMoXCJsc20vZmlsZV9tcHJvdGVjdFwiKVxuIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjU4OjM4LjAzNzA0MTc3M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzMwMzAzMDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBkb2Vzbid0LCBidXQgbGV0J3MgYmUgdGhvcm91Z2guXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGFsbCBhYm91dCBwbHVtYmluZyBhIG5ldyBhcmd1bWVudCwgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCwgdGhyb3VnaCB0aGUgTFNNIGhvb2sgY2hhaW4sIHNwZWNpZmljYWxseSB0byBpbm9kZSBvcGVyYXRpb25zIGxpa2UgYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgZXRjLiBUaGUgY2hhbmdlcyBzZWVtIHByZXR0eSBmb2N1c2VkIG9uIHByb3BhZ2F0aW5nIHRoaXMgcG9pbnRlciBmcm9tIHRoZSBWRlMgbGF5ZXIgKGBmcy9uYW1laS5jYCwgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2ApIGRvd24gdG8gdGhlIHNlY3VyaXR5IGhvb2tzIChgc2VjdXJpdHkvc2VjdXJpdHkuY2AsIGhlYWRlciBmaWxlcyksIGFuZCBmaW5hbGx5IGludG8gdGhlIExTTSBpbXBsZW1lbnRhdGlvbnMgdGhlbXNlbHZlcyAoYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AsIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AsIGFuZCB0aGUgQlBGIHRlc3RzKS5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiAgV2UncmUgKm5vdCogc2VlaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHRoYXQgYXJlIHRoZW4gc2VudCB0byB1c2Vyc3BhY2UuIFRoZSBgaWRtYXBgIGFyZ3VtZW50IGlzIHBhc3NlZCBieSB2YWx1ZSAodGhlIHBvaW50ZXIgaXRzZWxmKSwgYW5kIHRoZSBjaGFuZ2VzIGFyZSwgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGp1c3QgcGx1bWJpbmcgYW4gZXhpc3RpbmcgcG9pbnRlci4gVGhlcmUncyBubyBjcmVhdGlvbiBvciBjb3B5aW5nIG9mIG5ldywgdW5pbml0aWFsaXplZCBkYXRhIHRoYXQncyB2aXNpYmxlIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgdGhlIG1haW4gS01TQU4gY29uY2Vybi4gVGhlIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGZgIGRvIHJlYWQgZmllbGRzIGZyb20gdGhlIGBpZG1hcGAgcG9pbnRlciwgbGlrZSBgaWRtYXAtXHUwMDNldWlkX21hcC5ucl9leHRlbnRzYCwgYnV0IHRoaXMgaXMgc3RhbmRhcmQgcG9pbnRlciBkZXJlZmVyZW5jaW5nIG9uIGFuIGV4aXN0aW5nIGtlcm5lbCBzdHJ1Y3R1cmUgdGhhdCdzIGluaXRpYWxpemVkIGF0IG1vdW50IHRpbWUuXG5cbkkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBvciB1c2VkIGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgS01TQU4uIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgcG9pbnRlciBpdHNlbGYg4oCTIGlmIGl0J3MgaW52YWxpZCwgZnJlZWQgcHJlbWF0dXJlbHksIGV0Yy4gIFxuXG5UbyBiZSBleHRyYSBzdXJlLCBsZXQgbWUgbWVudGFsbHkgY2hlY2suIE5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIHJpZ2h0PyBObywgdGhhdCdzIG5vdCB3aGF0IEknbSBzZWVpbmcuIEFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZSwgYGlkbWFwYCBpcyBhIHBvaW50ZXIsIGFuZCBpdHMgdmFsdWUgaXMgaW5pdGlhbGl6ZWQuIEFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQ/IE5vLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIE5lZWRzS01TQU4gPSBmYWxzZS4gIFRoZSBwYXRjaCBzZXJpZXMganVzdCBhZGRzIGEgcG9pbnRlciBhcyBhbiBhcmd1bWVudCBhbmQgcHJvcGFnYXRlcyBpdC4gVGhlcmUncyBub3RoaW5nIGluIGhlcmUgdGhhdCBjcmVhdGVzIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCB3b3VsZCBpbmNyZWFzZSB0aGUgcmlzayBvZiBLTVNBTi1kZXRlY3RhYmxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiAgUmVndWxhciBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4gd2lsbCBiZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3MSwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo1ODo1MS4zNDAwNzQ3MzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBgc3RydWN0IG1udF9pZG1hcCAqYCBhcmd1bWVudCB0byBzZXZlcmFsIExTTSBpbm9kZSBob29rcyAoY3JlYXRlLCBsaW5rLCBzeW1saW5rLCBta2RpciwgbWtub2QsIHBlcm1pc3Npb24pIGFuZCBwcm9wYWdhdGVzIGl0IGZyb20gdGhlIFZGUyBsYXllciB0byB0aGUgTFNNIGltcGxlbWVudGF0aW9ucyBhbmQgQlBGIGhvb2tzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIGhhbmRsaW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MsIHN1Y2ggYXMgZGVyZWZlcmVuY2luZyBhbiBpbnZhbGlkIG9yIGZyZWVkIGBpZG1hcGAgcG9pbnRlciwgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIGdlbmVyYWwga2VybmVsIHRlc3RpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyBhIGBzdHJ1Y3QgbW50X2lkbWFwICpgIGFyZ3VtZW50IHRvIHNldmVyYWwgTFNNIGlub2RlIGhvb2tzIChjcmVhdGUsIGxpbmssIHN5bWxpbmssIG1rZGlyLCBta25vZCwgcGVybWlzc2lvbikgYW5kIHByb3BhZ2F0ZXMgaXQgZnJvbSB0aGUgVkZTIGxheWVyIHRvIHRoZSBMU00gaW1wbGVtZW50YXRpb25zIGFuZCBCUEYgaG9va3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncywgc3VjaCBhcyBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgb3IgZnJlZWQgYGlkbWFwYCBwb2ludGVyLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dzch[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 16:33:50 +0000 UTC FinishedAt: 2026-08-24 16:58:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_SMACK", "BPF_LSM", "CACHEFILES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SECURITY", "SECURITY_SELINUX", "SECURITY_SMACK", "BPF_LSM", "CACHEFILES" ], "series_id": "fbf1f054-896c-4ac0-82a1-06d3a8cc2380" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "security_inode_create", "security_inode_link", "security_inode_symlink", "security_inode_mkdir", "security_inode_mknod", "vfs_create", "vfs_mkobj", "vfs_mkdir", "vfs_mknod", "vfs_symlink", "vfs_link" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NNQUNLJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtub2QmIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbWtvYmomIzM0OywKICAgICYjMzQ7dmZzX21rZGlyJiMzNDssCiAgICAmIzM0O3Zmc19ta25vZCYjMzQ7LAogICAgJiMzNDt2ZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDt2ZnNfbGluayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBgc3RydWN0IG1udF9pZG1hcCAqYCBhcmd1bWVudCB0byBzZXZlcmFsIExTTSBpbm9kZSBob29rcyAoY3JlYXRlLCBsaW5rLCBzeW1saW5rLCBta2RpciwgbWtub2QsIHBlcm1pc3Npb24pIGFuZCBwcm9wYWdhdGVzIGl0IGZyb20gdGhlIFZGUyBsYXllciB0byB0aGUgTFNNIGltcGxlbWVudGF0aW9ucyBhbmQgQlBGIGhvb2tzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIGhhbmRsaW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MsIHN1Y2ggYXMgZGVyZWZlcmVuY2luZyBhbiBpbnZhbGlkIG9yIGZyZWVkIGBpZG1hcGAgcG9pbnRlciwgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIGdlbmVyYWwga2VybmVsIHRlc3RpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGFuZCBMU00gaG9va3MgKGBzZWN1cml0eV9pbm9kZV8qYCkgdG8gYWNjZXB0IGEgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBhcmd1bWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBzZWN1cml0eSBjaGVja3MgZHVyaW5nIGZpbGUgY3JlYXRpb24sIGxpbmtpbmcsIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyBhY3Jvc3MgbXVsdGlwbGUgTFNNcyAoU0VMaW51eCwgU21hY2ssIEJQRikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzM2RlNjcxZWM4YTkyOTViMzk5YTBjYTViMWE0NDBlNjQ0ZjE0MGE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTY6MzU6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG5pbmRleCBmYzY2MTE4ODZiM2I1Li5lZWZlNTQ1M2I5MDRlIDEwMDY0NFxuLS0tIGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbkBAIC01MSwxNCAmIzQzOzUxLDE0IEBAIHN0YXRpYyBpbnQgY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuJiM0MztcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkXCYjMzQ7LFxuIFx0XHQgICAgICAgcmV0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuJiM0MztcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cHJfZXJyKFwmIzM0O1NlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlczogZXJyb3IgJWRcJiMzNDssXG4gXHRcdCAgICAgICByZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi45OWY4OTRmM2Y3ZTEzIDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmFtZWkuY1xuQEAgLTY1OCw3ICYjNDM7NjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAodW5saWtlbHkocmV0dmFsKSlcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pO1xuIFxuQEAgLTY5NSw3ICYjNDM7Njk1LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgbG9va3VwX2lub2RlX3Blcm1pc3Npb25fbWF5X2V4ZWMoc3RydWN0IG1udF9pZG1hcCAqaWRcbiBcdGlmICh1bmxpa2VseSgoKGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spO1xuJiM0MztcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQxODgsNyAmIzQzOzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXHRcdHJldHVybiAtRUFDQ0VTO1x0Lyogc2hvdWxkbiYjMzk7dCBpdCBiZSBFTk9TWVM/ICovXG4gXG4gXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuQEAgLTQyMTIsNyAmIzQzOzQyMTIsNyBAQCBpbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFxuIFx0bW9kZSBcdTAwMjY9IFNfSUFMTFVHTztcbiBcdG1vZGUgfD0gU19JRlJFRztcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7XG5AQCAtNDMyOCw3ICYjNDM7NDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIFxuIC8qKlxuQEAgLTUyNTgsNyAmIzQzOzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiYjNDM7XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTUzOTUsNyAmIzQzOzUzOTUsNyBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbkBAIC01NzgzLDcgJiM0Mzs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZGlyLVx1MDAzZWlfb3AtXHUwMDNlc3ltbGluaylcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4mIzQzO1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbkBAIC01OTA3LDcgJiM0Mzs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuJiM0MztcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMjAsMjYgJiM0MzsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCBpbnQgKnhhdHRyX2NvdW50KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4mIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4gXHQgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgYm9vbCByY3UpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHQgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0IHN0cnVjdCBpYXR0ciAqYXR0cilcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3Rfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG5pbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbkBAIC00MDQsMjQgJiM0Mzs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4gaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xuLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiYjNDM7XHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdFx0XHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgICAgYm9vbCByY3UpO1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcbiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdCAgICAgIGludCBtYXNrKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbkBAIC05MDIsOSAmIzQzOzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCB1bW9kZV90IG1vZGUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05MTMsOSAmIzQzOzkxOCwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWRcbiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHsgfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTI2LDE2ICYjNDM7OTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0ICBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHRcdFx0XHQgY29uc3QgY2hhciAqb2xkX25hbWUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk0Niw5ICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdGludCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0XHRcdCAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC05NzQsNyAmIzQzOzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xuaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbkBAIC0xNjE0LDYgJiM0MzsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiB0aGUgcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHRoZSBmaWxlIGJlaW5nIGNyZWF0ZWRcbiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZVxuQEAgLTE2MjIsMTIgJiM0MzsxNjIzLDEyIEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aClcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcbiBcbkBAIC0xNjQ4LDYgJiM0MzsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZVxuICAqIEBkaXI6IG5ldyBwYXJlbnQgZGlyZWN0b3J5XG4gICogQG5ld19kZW50cnk6IG5ldyBsaW5rXG5AQCAtMTY1NiwxMiAmIzQzOzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuJiM0MztcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkX2JhY2tpbmdfaW5vZGUob2xkX2RlbnRyeSkpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xuIH1cbiBcbiAvKipcbkBAIC0xNjgyLDYgJiM0MzsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmtcbiAgKiBAb2xkX25hbWU6IGV4aXN0aW5nIGZpbGVuYW1lXG5AQCAtMTY5MCwxNiAmIzQzOzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkX25hbWUpO1xuIH1cbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcbkBAIC0xNzA5LDExICYjNDM7MTcxMywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rZGlyLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7XG4gXG5AQCAtMTczNSw2ICYjNDM7MTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkXG4mIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBmaWxlXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcbkBAIC0xNzQ3LDEyICYjNDM7MTc1MywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xuIH1cbiBcbiAvKipcbkBAIC0xODIzLDYgJiM0MzsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZFxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogaW5vZGVcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcbiAgKlxuQEAgLTE4MzUsMTEgJiM0MzsxODQyLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4mIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0XHQgICAgICBpbnQgbWFzaylcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcbiYjNDM7XHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9wZXJtaXNzaW9uLCBpZG1hcCwgaW5vZGUsIG1hc2spO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbmluZGV4IDAzNWFhZjExM2QxZGEuLjk2Nzk4NGQwYWYzMDAgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuQEAgLTMwNzQsMTIgJiM0MzszMDc0LDE0IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgXHUwMDI2YWQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcbiB9XG5AQCAtMzA4OSwxMiAmIzQzOzMwOTEsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0cmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpO1xuIH1cbkBAIC0zMTA0LDcgJiM0MzszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpO1xuIH1cbkBAIC0zMjM2LDEzICYjNDM7MzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuIFxuIC8qKlxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWRcbiAgKiBAcmVxdWVzdGVkOiB0aGUgYWNjZXNzZXMgYmVpbmcgcmVxdWVzdGVkXG4gICpcbiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG9cbiAgKiBAcmVxdWVzdGVkLiAgUmV0dXJucyAwIGlmIGFsbG93ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbiYjNDM7c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4ge1xuIFx0aW50IG1hc2s7XG4gXHR1MzIgcGVybXM7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTEwODksMTQgJiM0MzsxMDg5LDE1IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9saW5rIC0gU21hY2sgY2hlY2sgb24gbGlua1xuJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0XG4gICogQGRpcjogdW51c2VkXG4gICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0XG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4mIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHN0cnVjdCBzbWFja19rbm93biAqaXNwO1xuIFx0c3RydWN0IHNta19hdWRpdF9pbmZvIGFkO1xuQEAgLTEyMjYsNiAmIzQzOzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbiBcbiAvKipcbiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKClcbiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxuICAqXG5AQCAtMTIzMyw3ICYjNDM7MTIzNSw4IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRcdFx0ICBpbnQgbWFzaylcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5AQCAtMSwxOCAmIzQzOzEsMzAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4gXG4gLypcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgR29vZ2xlIExMQy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuJiM0MztcbiAjaW5jbHVkZSBcJiMzNDtsc20uc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7bHNtX3RhaWxjYWxsLnNrZWwuaFwmIzM0O1xuIFxuIGNoYXIgKkNNRF9BUkdTW10gPSB7XCYjMzQ7dHJ1ZVwmIzM0OywgTlVMTH07XG4gXG4mIzQzO2VudW0ge1xuJiM0MztcdElOT0RFX0lETUFQX0FMTCA9ICgxVSBcdTAwM2NcdTAwM2MgNikgLSAxLFxuJiM0Mzt9O1xuJiM0MztcbiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIHtcbiBcdGludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1cztcbkBAIC0zMCw2ICYjNDM7NDIsMjE5IEBAIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTtcbiYjNDM7XHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7XG4mIzQzO1x0aW50IGZkLCBzYXZlZF9lcnJubyA9IDA7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ0xPRVhFQyB8IE9fTk9DVFRZIHwgT19OT0ZPTExPVyk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcbiYjNDM7XHRcdHNhdmVkX2Vycm5vID0gRUlPO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7XHRpZiAoc2F2ZWRfZXJybm8pIHtcbiYjNDM7XHRcdGVycm5vID0gc2F2ZWRfZXJybm87XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdyaXRlX3VzZXJuc19maWxlKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHBhdGhbNjRdO1xuJiM0MztcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7L3Byb2MvJWQvJXNcJiMzNDssIHBpZCwgbmFtZSk7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuJiM0MztcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gd3JpdGVfZmlsZShwYXRoLCB2YWx1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY3JlYXRlX3VzZXJuc19mZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBwYXRoWzY0XTtcbiYjNDM7XHRwaWRfdCBwaWQsIHdhaXRlZDtcbiYjNDM7XHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKHBpZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRpZiAocGlkID09IDApIHtcbiYjNDM7XHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxuJiM0MztcdFx0XHRfZXhpdCgxKTtcbiYjNDM7XHRcdHJhaXNlKFNJR1NUT1ApO1xuJiM0MztcdFx0X2V4aXQoMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCBXVU5UUkFDRUQpO1xuJiM0MztcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuJiM0MztcdGlmICh3YWl0ZWQgIT0gcGlkKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHtcbiYjNDM7XHRcdHBpZCA9IC0xO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqL1xuJiM0MztcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O3NldGdyb3Vwc1wmIzM0OywgXCYjMzQ7ZGVueVwmIzM0OykgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVOT0VOVClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICh3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O3VpZF9tYXBcJiMzNDssIFwmIzM0OzAgMCAxXCYjMzQ7KSB8fFxuJiM0MztcdCAgICB3cml0ZV91c2VybnNfZmlsZShwaWQsIFwmIzM0O2dpZF9tYXBcJiMzNDssIFwmIzM0OzAgMCAxXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRsZW4gPSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwmIzM0Oy9wcm9jLyVkL25zL3VzZXJcJiMzNDssIHBpZCk7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuJiM0MztcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRzYXZlZF9lcnJubyA9IGVycm5vO1xuJiM0MztcdGlmIChwaWQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGtpbGwocGlkLCBTSUdLSUxMKTtcbiYjNDM7XHRcdGRvIHtcbiYjNDM7XHRcdFx0d2FpdGVkID0gd2FpdHBpZChwaWQsIE5VTEwsIDApO1xuJiM0MztcdFx0fSB3aGlsZSAod2FpdGVkIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUik7XG4mIzQzO1x0fVxuJiM0MztcdGVycm5vID0gc2F2ZWRfZXJybm87XG4mIzQzO1x0cmV0dXJuIGZkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHtcbiYjNDM7XHRcdC5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgZnNmZCA9IC0xLCBtbnRmZCA9IC0xLCBzYXZlZF9lcnJubywgdXNlcm5zX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcbiYjNDM7XHRpZiAodXNlcm5zX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEEgZGV0YWNoZWQgdG1wZnMgYXZvaWRzIHJlbHlpbmcgb24gdGhlIGhvc3QgdGVzdCBkaXJlY3Rvcnkgc3VwcG9ydGluZyBpZG1hcHMuICovXG4mIzQzO1x0ZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sIFwmIzM0O3RtcGZzXCYjMzQ7LCBGU09QRU5fQ0xPRVhFQyk7XG4mIzQzO1x0aWYgKGZzZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRtbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApO1xuJiM0MztcdGlmIChtbnRmZCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDtcbiYjNDM7XHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcJiMzNDtcJiMzNDssIEFUX0VNUFRZX1BBVEgsIFx1MDAyNmF0dHIsXG4mIzQzO1x0XHQgICAgc2l6ZW9mKGF0dHIpKSkge1xuJiM0MztcdFx0Y2xvc2UobW50ZmQpO1xuJiM0MztcdFx0bW50ZmQgPSAtMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbiYjNDM7XHRpZiAoZnNmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmc2ZkKTtcbiYjNDM7XHRpZiAodXNlcm5zX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHVzZXJuc19mZCk7XG4mIzQzO1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbiYjNDM7XHRyZXR1cm4gbW50ZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gLTEsIHJldCA9IC0xO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW5hdChkaXJmZCwgXCYjMzQ7ZmlsZVwmIzM0OywgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxuJiM0MztcdFx0ICAgIDA2MDApO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGZkLCAwLCBcJiMzNDtjcmVhdGVcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0MztcdGZkID0gLTE7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFwmIzM0O2RpclwmIzM0OywgMDcwMCksIFwmIzM0O21rZGlyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcJiMzNDt0YXJnZXRcJiMzNDssIGRpcmZkLCBcJiMzNDtzeW1saW5rXCYjMzQ7KSwgXCYjMzQ7c3ltbGlua1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsIFwmIzM0O2ZpbGVcJiMzNDssIGRpcmZkLCBcJiMzNDtsaW5rXCYjMzQ7LCAwKSwgXCYjMzQ7bGlua1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhta2ZpZm9hdChkaXJmZCwgXCYjMzQ7Zmlmb1wmIzM0OywgMDYwMCksIFwmIzM0O21rbm9kXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHR1bmxpbmthdChkaXJmZCwgXCYjMzQ7bGlua1wmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2ZpZm9cJiMzNDssIDApO1xuJiM0MztcdHVubGlua2F0KGRpcmZkLCBcJiMzNDtzeW1saW5rXCYjMzQ7LCAwKTtcbiYjNDM7XHR1bmxpbmthdChkaXJmZCwgXCYjMzQ7ZmlsZVwmIzM0OywgMCk7XG4mIzQzO1x0dW5saW5rYXQoZGlyZmQsIFwmIzM0O2RpclwmIzM0OywgQVRfUkVNT1ZFRElSKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHRtcGRpcltdID0gXCYjMzQ7L3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXCYjMzQ7O1xuJiM0MztcdF9fdTMyIGV4cGVjdGVkID0gSU5PREVfSURNQVBfQUxMO1xuJiM0MztcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xuJiM0MztcdGludCByZXQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXCYjMzQ7bWtkdGVtcFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGRpcmZkID0gb3Blbih0bXBkaXIsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkgfCBPX0NMT0VYRUMpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcJiMzNDtvcGVuX3RtcGRpclwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWRtYXBwZWRfZGlyZmQgPSBjcmVhdGVfaWRtYXBwZWRfdG1wZnMoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXCYjMzQ7Y3JlYXRlX2lkbWFwcGVkX3RtcGZzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoZGlyZmQpLCBcJiMzNDtpZGVudGl0eV9pZG1hcFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7aWRtYXBwZWRfbW91bnRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxuJiM0MztcdFx0ICAgICAgIFwmIzM0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0cmV0ID0gQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLFxuJiM0MztcdFx0XHRcJiMzNDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuXCYjMzQ7KSA/IDAgOiAtMTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoaWRtYXBwZWRfZGlyZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xuJiM0MztcdGlmIChkaXJmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShkaXJmZCk7XG4mIzQzO1x0cm1kaXIodG1wZGlyKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG5AQCAtNTMsNiAmIzQzOzI3OCwxMCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XG4gXG4mIzQzO1x0ZXJyID0gdGVzdF9sc21faW5vZGVfaWRtYXAoc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDt0ZXN0X2xzbV9pbm9kZV9pZG1hcFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiBcdGVyciA9IHN0YWNrX21wcm90ZWN0KCk7XG4gXHRpZiAoIUFTU0VSVF9FUShlcnIsIC0xLCBcJiMzNDtzdGFja19tcHJvdGVjdFwmIzM0OykgfHxcbiBcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXCYjMzQ7c3RhY2tfbXByb3RlY3RcJiMzNDspKVxuQEAgLTcxLDYgJiM0MzszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3Rlc3QgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9jb3VudCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5pbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmNcbkBAIC04NCw2ICYjNDM7ODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7XG4gaW50IG1wcm90ZWN0X2NvdW50ID0gMDtcbiBpbnQgYnBybV9jb3VudCA9IDA7XG4mIzQzO19fdTMyIGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwO1xuJiM0MztfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbiYjNDM7XG4mIzQzO2VudW0ge1xuJiM0MztcdElOT0RFX0lETUFQX0NSRUFURVx0PSAxVSBcdTAwM2NcdTAwM2MgMCxcbiYjNDM7XHRJTk9ERV9JRE1BUF9MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAxLFxuJiM0MztcdElOT0RFX0lETUFQX1NZTUxJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDIsXG4mIzQzO1x0SU5PREVfSURNQVBfTUtESVJcdD0gMVUgXHUwMDNjXHUwMDNjIDMsXG4mIzQzO1x0SU5PREVfSURNQVBfTUtOT0RcdD0gMVUgXHUwMDNjXHUwMDNjIDQsXG4mIzQzO1x0SU5PREVfSURNQVBfUEVSTUlTU0lPTlx0PSAxVSBcdTAwM2NcdTAwM2MgNSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19tb25pdG9yZWRfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApXG4mIzQzO3tcbiYjNDM7XHRfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcdTAwM2VcdTAwM2UgMzI7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcdTAwMjZcdTAwMjYgaWRtYXA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpZG1hcC1cdTAwM2V1aWRfbWFwLm5yX2V4dGVudHMgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgaWRtYXAtXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIF9fdTMyIGhvb2ssIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKVxuJiM0MztcdFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gfD0gaG9vaztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9jcmVhdGVcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsc20vaW5vZGVfbGlua1wmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4mIzQzO1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnksIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9MSU5LLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX3N5bWxpbmtcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtL2lub2RlX21rZGlyXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS0RJUiwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9ta25vZFwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9NS05PRCwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS9pbm9kZV9wZXJtaXNzaW9uXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiYjNDM7XHQgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTtcbiYjNDM7fVxuIFxuIFNFQyhcJiMzNDtsc20vZmlsZV9tcHJvdGVjdFwmIzM0OylcbiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTRUNVUklUWSYjMzQ7LAogICAgJiMzNDtTRUNVUklUWV9TRUxJTlVYJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NNQUNLJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OywKICAgICYjMzQ7Q0FDSEVGSUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9saW5rJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX3N5bWxpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtkaXImIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfbWtub2QmIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbWtvYmomIzM0OywKICAgICYjMzQ7dmZzX21rZGlyJiMzNDssCiAgICAmIzM0O3Zmc19ta25vZCYjMzQ7LAogICAgJiMzNDt2ZnNfc3ltbGluayYjMzQ7LAogICAgJiMzNDt2ZnNfbGluayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBhbmQgTFNNIGhvb2tzIChgc2VjdXJpdHlfaW5vZGVfKmApIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgYXJndW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3Rpbmcgc2VjdXJpdHkgY2hlY2tzIGR1cmluZyBmaWxlIGNyZWF0aW9uLCBsaW5raW5nLCBhbmQgcGVybWlzc2lvbiBjaGVja3MgYWNyb3NzIG11bHRpcGxlIExTTXMgKFNFTGludXgsIFNtYWNrLCBCUEYpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzNkZTY3MWVjOGE5Mjk1YjM5OWEwY2E1YjFhNDQwZTY0NGYxNDBhOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE2OjM1OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0Ci0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKQEAgLTUxLDE0ICYjNDM7NTEsMTQgQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCiB7CiAJaW50IHJldDsKIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiYjNDM7CXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKCZhbXA7bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwomIzQzOwlyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwogCWlmIChyZXQgJmx0OyAwKQogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC02NTgsNyAmIzQzOzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmICh1bmxpa2VseShyZXR2YWwpKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTsKIApAQCAtNjk1LDcgJiM0Mzs2OTUsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlYyhzdHJ1Y3QgbW50X2lkbWFwICppZAogCWlmICh1bmxpa2VseSgoKGlub2RlLSZndDtpX21vZGUgJmFtcDsgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKQogCQlyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogCiAvKioKQEAgLTQxODgsNyAmIzQzOzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAJCXJldHVybiAtRUFDQ0VTOwkvKiBzaG91bGRuJiMzOTt0IGl0IGJlIEVOT1NZUz8gKi8KIAogCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpOwpAQCAtNDIxMiw3ICYjNDM7NDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAKIAltb2RlICZhbXA7PSBTX0lBTExVR087CiAJbW9kZSB8PSBTX0lGUkVHOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSBmKGRlbnRyeSwgbW9kZSwgYXJnKTsKQEAgLTQzMjgsNyAmIzQzOzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwogfQogCiAvKioKQEAgLTUyNTgsNyAmIzQzOzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC01Mzk1LDcgJiM0Mzs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJZ290byBlcnI7CiAKIAltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnI7CiAKQEAgLTU3ODMsNyAmIzQzOzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmICghZGlyLSZndDtpX29wLSZndDtzeW1saW5rKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTU5MDcsNyAmIzQzOzU5MDcsNyBAQCBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCkBAIC0xMjAsMjYgJiM0MzsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgaW50ICp4YXR0cl9jb3VudCkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgY29uc3QgY2hhciAqb2xkX25hbWUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSB1bW9kZV90IG1vZGUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCSBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGJvb2wgcmN1KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJIHN0cnVjdCBpYXR0ciAqYXR0cikKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC00MDQsMjQgJiM0Mzs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTsKLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCQkJc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwogaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJCQkgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwKIAkJCSAgdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgICBib29sIHJjdSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICAgICAgaW50IG1hc2spOwogaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApAQCAtOTAyLDkgJiM0Mzs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQlzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCXVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTkxMyw5ICYjNDM7OTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZAogc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsgfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCi0JCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXJldHVybiAwOwogfQpAQCAtOTI2LDE2ICYjNDM7OTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCSAgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQkgY29uc3QgY2hhciAqb2xkX25hbWUpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCWludCBtb2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTk0Niw5ICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQlpbnQgbW9kZSwgZGV2X3QgZGV2KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiAwOwogfQpAQCAtOTc0LDcgJiM0Mzs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTYxNCw2ICYjNDM7MTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkCiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZQpAQCAtMTYyMiwxMiAmIzQzOzE2MjMsMTIgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICB1bW9kZV90IG1vZGUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7CiAKQEAgLTE2NDgsNiAmIzQzOzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZQogICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnkKICAqIEBuZXdfZGVudHJ5OiBuZXcgbGluawpAQCAtMTY1NiwxMiAmIzQzOzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKIH0KIAogLyoqCkBAIC0xNjgyLDYgJiM0MzsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmsKICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWUKQEAgLTE2OTAsMTYgJiM0MzsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgICBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7CiB9CiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnkKICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGUKQEAgLTE3MDksMTEgJiM0MzsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTsKIApAQCAtMTczNSw2ICYjNDM7MTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBmaWxlCiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZQpAQCAtMTc0NywxMiAmIzQzOzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiB9CiAKIC8qKgpAQCAtMTgyMyw2ICYjNDM7MTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiBpbm9kZQogICogQG1hc2s6IGFjY2VzcyBtYXNrCiAgKgpAQCAtMTgzNSwxMSAmIzQzOzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCSAgICAgIGludCBtYXNrKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMzA3NCwxMiAmIzQzOzMwNzQsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICZhbXA7YWQpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7CiB9CkBAIC0zMDg5LDEyICYjNDM7MzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTsKIH0KQEAgLTMxMDQsNyAmIzQzOzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTsKIH0KQEAgLTMyMzYsMTMgJiM0MzszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsCiAKIC8qKgogICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWQKICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWQKICAqCiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG8KICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZCkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpCiB7CiAJaW50IG1hc2s7CiAJdTMyIHBlcm1zOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtMTA4OSwxNCAmIzQzOzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiAvKioKICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0CiAgKiBAZGlyOiB1bnVzZWQKICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXN0cnVjdCBzbWFja19rbm93biAqaXNwOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKQEAgLTEyMjYsNiAmIzQzOzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKIAogLyoqCiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKCkKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb24KICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZAogICoKQEAgLTEyMzMsNyAmIzQzOzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKICAqCiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICBpbnQgbWFzaykKIHsKIAlzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwpAQCAtMSwxOCAmIzQzOzEsMzAgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQogCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuCiAgKi8KIAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7bHNtLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xzbV90YWlsY2FsbC5za2VsLmgmIzM0OwogCiBjaGFyICpDTURfQVJHU1tdID0geyYjMzQ7dHJ1ZSYjMzQ7LCBOVUxMfTsKIAomIzQzO2VudW0gewomIzQzOwlJTk9ERV9JRE1BUF9BTEwgPSAoMVUgJmx0OyZsdDsgNikgLSAxLAomIzQzO307CiYjNDM7CiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKQogewogCWludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1czsKQEAgLTMwLDYgJiM0Mzs0MiwyMTkgQEAgaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZCkKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTsKJiM0MzsJfSB3aGlsZSAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7CiYjNDM7CWludCBmZCwgc2F2ZWRfZXJybm8gPSAwOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDIHwgT19OT0NUVFkgfCBPX05PRk9MTE9XKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwllbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pCiYjNDM7CQlzYXZlZF9lcnJubyA9IEVJTzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAoc2F2ZWRfZXJybm8pIHsKJiM0MzsJCWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CWludCBsZW47CiYjNDM7CiYjNDM7CWxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDsvcHJvYy8lZC8lcyYjMzQ7LCBwaWQsIG5hbWUpOwomIzQzOwlpZiAobGVuICZsdDsgMCB8fCAoc2l6ZV90KWxlbiAmZ3Q7PSBzaXplb2YocGF0aCkpIHsKJiM0MzsJCWVycm5vID0gRU9WRVJGTE9XOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB3cml0ZV9maWxlKHBhdGgsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfdXNlcm5zX2ZkKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbNjRdOwomIzQzOwlwaWRfdCBwaWQsIHdhaXRlZDsKJiM0MzsJaW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1czsKJiM0MzsKJiM0MzsJcGlkID0gZm9yaygpOwomIzQzOwlpZiAocGlkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSkKJiM0MzsJCQlfZXhpdCgxKTsKJiM0MzsJCXJhaXNlKFNJR1NUT1ApOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJd2FpdGVkID0gd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCBXVU5UUkFDRUQpOwomIzQzOwl9IHdoaWxlICh3YWl0ZWQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwlpZiAod2FpdGVkICE9IHBpZCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIVdJRlNUT1BQRUQoc3RhdHVzKSkgewomIzQzOwkJcGlkID0gLTE7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqLwomIzQzOwlpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O3NldGdyb3VwcyYjMzQ7LCAmIzM0O2RlbnkmIzM0OykgJmFtcDsmYW1wOyBlcnJubyAhPSBFTk9FTlQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDt1aWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykgfHwKJiM0MzsJICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDtnaWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkL25zL3VzZXImIzM0OywgcGlkKTsKJiM0MzsJaWYgKGxlbiAmbHQ7IDAgfHwgKHNpemVfdClsZW4gJmd0Oz0gc2l6ZW9mKHBhdGgpKSB7CiYjNDM7CQllcnJubyA9IEVPVkVSRkxPVzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwlpZiAocGlkICZndDsgMCkgewomIzQzOwkJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwkJZG8gewomIzQzOwkJCXdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTsKJiM0MzsJCX0gd2hpbGUgKHdhaXRlZCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CX0KJiM0MzsJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHsKJiM0MzsJCS5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsCiYjNDM7CX07CiYjNDM7CWludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTsKJiM0MzsKJiM0MzsJdXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqLwomIzQzOwlmc2ZkID0gc3lzY2FsbChfX05SX2Zzb3BlbiwgJiMzNDt0bXBmcyYjMzQ7LCBGU09QRU5fQ0xPRVhFQyk7CiYjNDM7CWlmIChmc2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwltbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApOwomIzQzOwlpZiAobW50ZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWF0dHIudXNlcm5zX2ZkID0gdXNlcm5zX2ZkOwomIzQzOwlpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCAmIzM0OyYjMzQ7LCBBVF9FTVBUWV9QQVRILCAmYW1wO2F0dHIsCiYjNDM7CQkgICAgc2l6ZW9mKGF0dHIpKSkgewomIzQzOwkJY2xvc2UobW50ZmQpOwomIzQzOwkJbW50ZmQgPSAtMTsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJaWYgKGZzZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZzZmQpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZSh1c2VybnNfZmQpOwomIzQzOwllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwlyZXR1cm4gbW50ZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKQomIzQzO3sKJiM0MzsJaW50IGZkID0gLTEsIHJldCA9IC0xOwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQywKJiM0MzsJCSAgICAwNjAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZmQsIDAsICYjMzQ7Y3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJZmQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgJiMzNDtkaXImIzM0OywgMDcwMCksICYjMzQ7bWtkaXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KCYjMzQ7dGFyZ2V0JiMzNDssIGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OyksICYjMzQ7c3ltbGluayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCBkaXJmZCwgJiMzNDtsaW5rJiMzNDssIDApLCAmIzM0O2xpbmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsICYjMzQ7ZmlmbyYjMzQ7LCAwNjAwKSwgJiMzNDtta25vZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSAwOwomIzQzO291dDoKJiM0MzsJaWYgKGZkICZndDs9IDApCiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2xpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpZm8mIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpCiYjNDM7ewomIzQzOwljaGFyIHRtcGRpcltdID0gJiMzNDsvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFgmIzM0OzsKJiM0MzsJX191MzIgZXhwZWN0ZWQgPSBJTk9ERV9JRE1BUF9BTEw7CiYjNDM7CWludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksICYjMzQ7bWtkdGVtcCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJZGlyZmQgPSBvcGVuKHRtcGRpciwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCAmIzM0O29wZW5fdG1wZGlyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCAmIzM0O2NyZWF0ZV9pZG1hcHBlZF90bXBmcyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhkaXJmZCksICYjMzQ7aWRlbnRpdHlfaWRtYXAmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLAomIzQzOwkJICAgICAgICYjMzQ7aWRtYXBwZWRfbW91bnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCwKJiM0MzsJCSAgICAgICAmIzM0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJcmV0ID0gQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiwgZXhwZWN0ZWQsCiYjNDM7CQkJJiMzNDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuJiMzNDspID8gMCA6IC0xOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGlkbWFwcGVkX2RpcmZkICZndDs9IDApCiYjNDM7CQljbG9zZShpZG1hcHBlZF9kaXJmZCk7CiYjNDM7CWlmIChkaXJmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZGlyZmQpOwomIzQzOwlybWRpcih0bXBkaXIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIHsKIAlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CkBAIC01Myw2ICYjNDM7Mjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIAogCXNrZWwtJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpOwogCiYjNDM7CWVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9sc21faW5vZGVfaWRtYXAmIzM0OykpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCWVyciA9IHN0YWNrX21wcm90ZWN0KCk7CiAJaWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSB8fAogCSAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSkKQEAgLTcxLDYgJiM0MzszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpCiAJc2tlbC0mZ3Q7YnNzLSZndDtjb3B5X3Rlc3QgPSAwOwogCXNrZWwtJmd0O2Jzcy0mZ3Q7YnBybV9jb3VudCA9IDA7CiAJc2tlbC0mZ3Q7YnNzLSZndDttcHJvdGVjdF9jb3VudCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwppbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCkBAIC04NCw2ICYjNDM7ODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogaW50IG1vbml0b3JlZF9waWQgPSAwOwogaW50IG1wcm90ZWN0X2NvdW50ID0gMDsKIGludCBicHJtX2NvdW50ID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJSU5PREVfSURNQVBfQ1JFQVRFCT0gMVUgJmx0OyZsdDsgMCwKJiM0MzsJSU5PREVfSURNQVBfTElOSwk9IDFVICZsdDsmbHQ7IDEsCiYjNDM7CUlOT0RFX0lETUFQX1NZTUxJTksJPSAxVSAmbHQ7Jmx0OyAyLAomIzQzOwlJTk9ERV9JRE1BUF9NS0RJUgk9IDFVICZsdDsmbHQ7IDMsCiYjNDM7CUlOT0RFX0lETUFQX01LTk9ECT0gMVUgJmx0OyZsdDsgNCwKJiM0MzsJSU5PREVfSURNQVBfUEVSTUlTU0lPTgk9IDFVICZsdDsmbHQ7IDUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJX191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgJmd0OyZndDsgMzI7CiYjNDM7CiYjNDM7CXJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCAmYW1wOyZhbXA7IGlkbWFwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gaWRtYXAtJmd0O3VpZF9tYXAubnJfZXh0ZW50cyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGlkbWFwLSZndDtnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJICAgICAgX191MzIgaG9vaywgaW50IHJldCkKJiM0Mzt7CiYjNDM7CWlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKQomIzQzOwkJaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rOwomIzQzOwllbHNlCiYjNDM7CQlpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfY3JlYXRlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9zeW1saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfbWtkaXImIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9ta25vZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfcGVybWlzc2lvbiYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTsKJiM0Mzt9CiAKIFNFQygmIzM0O2xzbS9maWxlX21wcm90ZWN0JiMzNDspCiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDc0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNb3VudCBJRCBNYXBwaW5nIGluIExTTSBIb29rcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0ICp3YXJyYW50KiBmdXp6aW5nLCBubyBxdWVzdGlvbi4gVGhlIGludHJvZHVjdGlvbiBvZiBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIGludG8gdmFyaW91cyBMU00gaG9va3MgcmVsYXRlZCB0byBpbm9kZXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgYWx0ZXJhdGlvbiB0byB0aGUgY29yZSBWRlMgYW5kIHNlY3VyaXR5IHN1YnN5c3RlbS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgdGhlIHdvcmtzIOKAkyBmdW5kYW1lbnRhbCBvcGVyYXRpb25zLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGBmcy9uYW1laS5jYCwgYW5kIHNldmVyYWwgc2VjdXJpdHktcmVsYXRlZCBmaWxlcyAoaW5jbHVkaW5nIFNFTGludXggYW5kIFNtYWNrKSBjb25maXJtcyB0aGlzIGFzIGEgcG90ZW50aWFsIHRyb3VibGUgc3BvdC4gVXBkYXRpbmcgdGhlIEJQRiB0ZXN0cyBmdXJ0aGVyIHVuZGVyc2NvcmVzIHRoZSBpbXBvcnRhbmNlLgoKVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdGhhdCBwYXNzaW5nIHRoZSBgaWRtYXBgIHRvIExTTSBob29rcyBnaXZlcyBtb2R1bGVzIChTRUxpbnV4LCBTbWFjaywgQlBGLCBldGMuKSBhY2Nlc3MgdG8gdGhlIG1vdW50IElEIG1hcHBpbmcgZHVyaW5nIHNlY3VyaXR5IGRlY2lzaW9ucy4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSByZWZhY3RvcmluZzsgaXQmIzM5O3MgYSBzdHJ1Y3R1cmFsIGNoYW5nZSB0aGF0IGNhbiBpbmZsdWVuY2UgYWNjZXNzIGNvbnRyb2wgZGVjaXNpb25zIGJhc2VkIG9uIG1vdW50IG5hbWVzcGFjZXMuIFdlIG5lZWQgdG8gZXhwbG9yZSB0aGVzZSBuZXcgY29kZSBwYXRocy4KClNvLCBmdXp6aW5nIGlzIGEgKmdvKi4gTm93LCB0aGUgY29uY3JldGUgcGxhbi4gSSBuZWVkIHRvIGV4dHJhY3QgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZCwgd2hpY2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBXZSBoYXZlOgoKKiAgIGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gCiogICBgc2VsaW51eF9pbm9kZV9jcmVhdGVgLCBgc2VsaW51eF9pbm9kZV9saW5rYCwgYHNlbGludXhfaW5vZGVfc3ltbGlua2AsIGBzZWxpbnV4X2lub2RlX21rZGlyYCwgYHNlbGludXhfaW5vZGVfbWtub2RgLCBgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uYAoqICAgYHNtYWNrX2lub2RlX2xpbmtgLCBgc21hY2tfaW5vZGVfcGVybWlzc2lvbmAKClRoZXNlIGJlY29tZSB0aGUgYEZvY3VzU3ltYm9sc2AgZm9yIG91ciBmdXp6aW5nIGNhbXBhaWduLiBOZXh0IHN0ZXA6IGNvbmZpcm0gcmVhY2hhYmlsaXR5IGFuZCBpZGVudGlmeSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gQmFzZWQgb24gdGhlIGZpbGUgbW9kaWZpY2F0aW9ucywgaXQgbG9va3MgbGlrZSB3ZSYjMzk7bGwgbmVlZCBgU0VDVVJJVFlgLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGFuZCBgQlBGX0xTTWAgZW5hYmxlZCBmb3IgZnVsbCBjb3ZlcmFnZS4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGNoZWNrIG9uIHRoZSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBwcm9iYWJseSB0aGUgbW9zdCBiYXNpYyBvbmVzIHRoYXQgd2lsbCByZWFjaCBtdWx0aXBsZSBMU00gbW9kdWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKSBzZWN1cml0eV9pbm9kZV8oY3JlYXRlfGxpbmt8c3ltbGlua3xta2Rpcnxta25vZHxwZXJtaXNzaW9uKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDA0PWludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA2LVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MDc6aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA4LVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQwOT12b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDEwLVx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MTE6aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDEyLVx0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MTM9aW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MTQ6aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQxNS1cdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MTY6aW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00MTctXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MTg9aW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQxOTppbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQyMC1cdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XG4tLVxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQyNT1pbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQyNi1cdFx0XHQgICAgICAgYm9vbCByY3UpO1xuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQyNzppbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00MjgtXHRcdFx0ICAgICAgaW50IG1hc2spO1xuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTYwOT1pbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjI2OmludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjI3LVx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjQyPXZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NjAtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2NjE6aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2NjItXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjc4PWludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2OTUtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2OTY6aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjk3LVx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4tLVxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzE1LSAqL1xuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNzE2OmludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3MTctXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuLS1cbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTczND1pbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3NTUtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE3NTY6aW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTc1Ny1cdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jPTE4MjI9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDQtICovXG5zZWN1cml0eS9zZWN1cml0eS5jOjE4NDU6aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDYtXHRcdFx0ICAgICAgaW50IG1hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvcmUgVkZTL1NlY3VyaXR5IEhvb2sgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZSBjaGFuZ2VzLCBhbmQgaXQgc2VlbXMgdGhlIGZvY3VzIGlzIG9uIGNvcmUgVkZTIGFuZCBzZWN1cml0eSBob29rcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlc2Ugc3ltYm9sczogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBgc2VjdXJpdHlfaW5vZGVfbWtub2RgLCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gLiBUaGVzZSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgYWNjZXNzIGNvbnRyb2wgd2l0aGluIHRoZSBmaWxlc3lzdGVtLCBzbyBhbnkgY2hhbmdlcyBoZXJlIGFyZSBjcml0aWNhbC4KCk9mIGNvdXJzZSwgSSBjYW4mIzM5O3QgaWdub3JlIHRoZSBTRUxpbnV4IGltcGxpY2F0aW9ucyDigJMgdGhlIGBzZWxpbnV4X2lub2RlXypgIGZ1bmN0aW9ucyBhcmUgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBTRUxpbnV4IGlzIGludGVncmF0aW5nLiBTbyBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgYHNlbGludXhfaW5vZGVfY3JlYXRlYCwgYHNlbGludXhfaW5vZGVfbGlua2AsIGBzZWxpbnV4X2lub2RlX3N5bWxpbmtgLCBgc2VsaW51eF9pbm9kZV9ta2RpcmAsIGBzZWxpbnV4X2lub2RlX21rbm9kYCwgYW5kIGBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb25gIGFsb25nc2lkZSB0aGUgYmFzZSBob29rcy4KCkFuZCBpdCYjMzk7cyBub3QganVzdCBTRUxpbnV4OyBTbWFjayBzZWVtcyB0byBiZSBpbnZvbHZlZCB0b28sIHNwZWNpZmljYWxseSB3aXRoIGBzbWFja19pbm9kZV9saW5rYCBhbmQgYHNtYWNrX2lub2RlX3Blcm1pc3Npb25gLiBTbyBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgZml0IGluLgoKVGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGNoZWNrIGlzIHdoZXRoZXIgU0VMaW51eCBhbmQgU21hY2sgYXJlIHVzaW5nIHN0YXRpYyBvciBkeW5hbWljIGxpbmtpbmcgZm9yIHRoZWlyIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBzZWN1cml0eSBtb2R1bGVzIGFyZSBkZXNpZ25lZCB0byBpbnRlcmFjdC4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsaW51eF9pbm9kZV8oY3JlYXRlfGxpbmt8c3ltbGlua3xta2Rpcnxta25vZHxwZXJtaXNzaW9uKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtzZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzAxMT1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwNzYtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA3NzpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDc4LVx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwODItXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA4MzpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDg0LVx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMDg5PXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA5My1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDk0OnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDk1LVx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA5OS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTAwOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzEwMS1cdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMxMDY9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxMTAtXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzExMTpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxMTItXHRcdFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMyMjM9c3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyxcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI0Mi0vKipcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjQzOiAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDQtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzI1MC0gKi9cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjUxOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNTItXHRcdFx0XHQgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZClcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9NDI2Mz1zdGF0aWMgaW50IHNlbGludXhfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MjgwLVx0ICogU2luY2UgdGhlIGlub2RlIGxhYmVsIG9yIHBvbGljeSBzZXFubyBtYXkgaGF2ZSBjaGFuZ2VkXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NDI4MTpcdCAqIGJldHdlZW4gdGhlIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiBjaGVjayBhbmQgdGhlIHNhdmluZ1xuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTQyODItXHQgKiBvZiBzdGF0ZSBhYm92ZSwgcmVjaGVjayB0aGF0IGFjY2VzcyBpcyBzdGlsbCBwZXJtaXR0ZWQuXG4tLVxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTc1Njc9c3RhdGljIHN0cnVjdCBzZWN1cml0eV9ob29rX2xpc3Qgc2VsaW51eF9ob29rc1tdIF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYwNy1cdExTTV9IT09LX0lOSVQoaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbiksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYwODpcdExTTV9IT09LX0lOSVQoaW5vZGVfY3JlYXRlLCBzZWxpbnV4X2lub2RlX2NyZWF0ZSksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYwOTpcdExTTV9IT09LX0lOSVQoaW5vZGVfbGluaywgc2VsaW51eF9pbm9kZV9saW5rKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjEwLVx0TFNNX0hPT0tfSU5JVChpbm9kZV91bmxpbmssIHNlbGludXhfaW5vZGVfdW5saW5rKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjExOlx0TFNNX0hPT0tfSU5JVChpbm9kZV9zeW1saW5rLCBzZWxpbnV4X2lub2RlX3N5bWxpbmspLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTI6XHRMU01fSE9PS19JTklUKGlub2RlX21rZGlyLCBzZWxpbnV4X2lub2RlX21rZGlyKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjEzLVx0TFNNX0hPT0tfSU5JVChpbm9kZV9ybWRpciwgc2VsaW51eF9pbm9kZV9ybWRpciksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYxNDpcdExTTV9IT09LX0lOSVQoaW5vZGVfbWtub2QsIHNlbGludXhfaW5vZGVfbWtub2QpLFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTUtXHRMU01fSE9PS19JTklUKGlub2RlX3JlbmFtZSwgc2VsaW51eF9pbm9kZV9yZW5hbWUpLFxuLS1cbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE3LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9mb2xsb3dfbGluaywgc2VsaW51eF9pbm9kZV9mb2xsb3dfbGluayksXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYxODpcdExTTV9IT09LX0lOSVQoaW5vZGVfcGVybWlzc2lvbiwgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKSxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE5LVx0TFNNX0hPT0tfSU5JVChpbm9kZV9zZXRhdHRyLCBzZWxpbnV4X2lub2RlX3NldGF0dHIpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjcyCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFNFTGludXggRnVuY3Rpb24gTGlzdGluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0byBkb2N1bWVudCB0aGVzZSBTRUxpbnV4IGZ1bmN0aW9ucy4gRmlyc3Qgb2ZmLCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBTRUxpbnV4IGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBUaGF0JiMzOTtzIGtleSwgSSBkb24mIzM5O3Qgd2FudCB0byBsaXN0IHRob3NlIGJlY2F1c2UsIHdlbGwsIHRoYXQmIzM5O3Mgbm90IHdoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgd2FudCB0aGUgc3R1ZmYgdGhhdCYjMzk7cyBhY3R1YWxseSBhY2Nlc3NpYmxlLiBUaGUgYHNlY3VyaXR5X2lub2RlXypgIGZhbWlseSBhcmUgZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMuIFBlcmZlY3QsIHRoYXQmIzM5O3Mgd2hhdCBJJiMzOTttIGFmdGVyLgoKUmlnaHQsIHNvLCBsZXQmIzM5O3Mgc2VlLCBJJiMzOTtsbCBwdXQgdGhlc2UgaW4gdGhlIGxpc3Q6CmBzZWN1cml0eV9pbm9kZV9jcmVhdGVgCmBzZWN1cml0eV9pbm9kZV9saW5rYApgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AKYHNlY3VyaXR5X2lub2RlX21rZGlyYApgc2VjdXJpdHlfaW5vZGVfbWtub2RgCmBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYAoKTm93LCBsZXQmIzM5O3Mga2VlcCBhbiBleWUgb24gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuIEkgdGhpbmsgYFNFQ1VSSVRZYCBpcyByZWxldmFudCBoZXJlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhhdCYjMzk7cyBlbm91Z2ggdG8gY29udHJvbCB0aGlzIHNldCBvZiBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNFQ1VSSVRZJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L0tjb25maWc9OD1zb3VyY2UgXCYjMzQ7c2VjdXJpdHkva2V5cy9LY29uZmlnXCYjMzQ7XG5zZWN1cml0eS9LY29uZmlnLTktXG5zZWN1cml0eS9LY29uZmlnOjEwOmNvbmZpZyBTRUNVUklUWV9ETUVTR19SRVNUUklDVFxuc2VjdXJpdHkvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7UmVzdHJpY3QgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUga2VybmVsIHN5c2xvZ1wmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWc9NTI9Y29uZmlnIE1TRUFMX1NZU1RFTV9NQVBQSU5HU1xuLS1cbnNlY3VyaXR5L0tjb25maWctNzItXG5zZWN1cml0eS9LY29uZmlnOjczOmNvbmZpZyBTRUNVUklUWVxuc2VjdXJpdHkvS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHNcJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnPTg2PWNvbmZpZyBIQVNfU0VDVVJJVFlfQVVESVRcbi0tXG5zZWN1cml0eS9LY29uZmlnLTkwLVxuc2VjdXJpdHkvS2NvbmZpZzo5MTpjb25maWcgU0VDVVJJVFlGU1xuc2VjdXJpdHkvS2NvbmZpZy05Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnLTk4LVxuc2VjdXJpdHkvS2NvbmZpZzo5OTpjb25maWcgU0VDVVJJVFlfTkVUV09SS1xuc2VjdXJpdHkvS2NvbmZpZy0xMDAtXHRib29sIFwmIzM0O1NvY2tldCBhbmQgTmV0d29ya2luZyBTZWN1cml0eSBIb29rc1wmIzM0O1xuLS1cbnNlY3VyaXR5L0tjb25maWctMTA3LVxuc2VjdXJpdHkvS2NvbmZpZzoxMDg6Y29uZmlnIFNFQ1VSSVRZX0lORklOSUJBTkRcbnNlY3VyaXR5L0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtJbmZpbmliYW5kIFNlY3VyaXR5IEhvb2tzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZy0xMTYtXG5zZWN1cml0eS9LY29uZmlnOjExNzpjb25maWcgU0VDVVJJVFlfTkVUV09SS19YRlJNXG5zZWN1cml0eS9LY29uZmlnLTExOC1cdGJvb2wgXCYjMzQ7WEZSTSAoSVBTZWMpIE5ldHdvcmtpbmcgU2VjdXJpdHkgSG9va3NcJiMzNDtcbi0tXG5zZWN1cml0eS9LY29uZmlnLTEyOS1cbnNlY3VyaXR5L0tjb25maWc6MTMwOmNvbmZpZyBTRUNVUklUWV9QQVRIXG5zZWN1cml0eS9LY29uZmlnLTEzMS1cdGJvb2wgXCYjMzQ7U2VjdXJpdHkgaG9va3MgZm9yIHBhdGhuYW1lIGJhc2VkIGFjY2VzcyBjb250cm9sXCYjMzQ7XG4tLVxuc2VjdXJpdHkvS2NvbmZpZz0yNjg9Y29uZmlnIExTTVxuLS1cbnNlY3VyaXR5L0tjb25maWctMjg0LVxuc2VjdXJpdHkvS2NvbmZpZzoyODU6Y29uZmlnIFNFQ1VSSVRZX0NPTU1PTkNBUF9LVU5JVF9URVNUXG5zZWN1cml0eS9LY29uZmlnLTI4Ni1cdGJvb2wgXCYjMzQ7QnVpbGQgS1VuaXQgdGVzdHMgZm9yIGNvbW1vbmNhcFwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUlxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBcHBBcm1vciBzdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xNy1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI3LVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzoyODpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfREVCVUdfQVNTRVJUU1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0yOS1cdGJvb2wgXCYjMzQ7QnVpbGQgQXBwQXJtb3Igd2l0aCBkZWJ1Z2dpbmcgYXNzZXJ0c1wmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMzctXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjM4OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9ERUJVR19NRVNTQUdFU1xuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGVidWcgbWVzc2FnZXMgZW5hYmxlZCBieSBkZWZhdWx0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00Ni1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNTgtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjU5OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTYwLVx0Ym9vbCBcJiMzNDtFbmFibGUgaW50cm9zcGVjdGlvbiBvZiBzaGEyNTYgaGFzaGVzIGZvciBsb2FkZWQgcHJvZmlsZXNcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcwLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo3MTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSF9ERUZBVUxUXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcyLSAgICAgICBib29sIFwmIzM0O0VuYWJsZSBwb2xpY3kgaGFzaCBpbnRyb3NwZWN0aW9uIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTgzLVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo4NDpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfRVhQT1JUX0JJTkFSWVxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04NS1cdGJvb2wgXCYjMzQ7QWxsb3cgZXhwb3J0aW5nIHRoZSByYXcgYmluYXJ5IHBvbGljeVwmIzM0O1xuLS1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctOTUtXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjk2OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTk3LVx0Ym9vbCBcJiMzNDtQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcJiMzNDtcbi0tXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwNi1cbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTA3OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9LVU5JVF9URVNUXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwOC1cdHRyaXN0YXRlIFwmIzM0O0J1aWxkIEtVbml0IHRlc3RzIGZvciBwb2xpY3lfdW5wYWNrLmNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbnNlY3VyaXR5L2lwZS9LY29uZmlnLTUtXG5zZWN1cml0eS9pcGUvS2NvbmZpZzo2Om1lbnVjb25maWcgU0VDVVJJVFlfSVBFXG5zZWN1cml0eS9pcGUvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtJbnRlZ3JpdHkgUG9saWN5IEVuZm9yY2VtZW50IChJUEUpXCYjMzQ7XG4tLVxuc2VjdXJpdHkvaXBlL0tjb25maWc9OTg9ZW5kbWVudVxuc2VjdXJpdHkvaXBlL0tjb25maWctOTktXG5zZWN1cml0eS9pcGUvS2NvbmZpZzoxMDA6Y29uZmlnIFNFQ1VSSVRZX0lQRV9LVU5JVF9URVNUXG5zZWN1cml0eS9pcGUvS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIEtVbml0IHRlc3RzIGZvciBJUEVcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMi1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWc6Mzpjb25maWcgU0VDVVJJVFlfTEFORExPQ0tcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctNC1cdGJvb2wgXCYjMzQ7TGFuZGxvY2sgc3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjMtXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjI0OmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS19MT0dcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjUtXHRib29sXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy0yOC1cbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWc6Mjk6Y29uZmlnIFNFQ1VSSVRZX0xBTkRMT0NLX0tVTklUX1RFU1RcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMzAtXHRib29sIFwmIzM0O0tVbml0IHRlc3RzIGZvciBMYW5kbG9ja1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9sb2FkcGluL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfTE9BRFBJTlxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnLTMtXHRib29sIFwmIzM0O1BpbiBsb2FkIG9mIGtlcm5lbCBmaWxlcyAobW9kdWxlcywgZncsIGV0YykgdG8gb25lIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMTMtXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWc6MTQ6Y29uZmlnIFNFQ1VSSVRZX0xPQURQSU5fRU5GT1JDRVxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnLTE1LVx0Ym9vbCBcJiMzNDtFbmZvcmNlIExvYWRQaW4gYXQgYm9vdFwmIzM0O1xuLS1cbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0yNC1cbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZzoyNTpjb25maWcgU0VDVVJJVFlfTE9BRFBJTl9WRVJJVFlcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0yNi1cdGJvb2wgXCYjMzQ7QWxsb3cgcmVhZGluZyBmaWxlcyBmcm9tIGNlcnRhaW4gb3RoZXIgZmlsZXN5c3RlbXMgdGhhdCB1c2UgZG0tdmVyaXR5XCYjMzQ7XG4tLVxuc2VjdXJpdHkvbG9ja2Rvd24vS2NvbmZpZzoxOmNvbmZpZyBTRUNVUklUWV9MT0NLRE9XTl9MU01cbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWctMi1cdGJvb2wgXCYjMzQ7QmFzaWMgbW9kdWxlIGZvciBlbmZvcmNpbmcga2VybmVsIGxvY2tkb3duXCYjMzQ7XG4tLVxuc2VjdXJpdHkvbG9ja2Rvd24vS2NvbmZpZy04LVxuc2VjdXJpdHkvbG9ja2Rvd24vS2NvbmZpZzo5OmNvbmZpZyBTRUNVUklUWV9MT0NLRE9XTl9MU01fRUFSTFlcbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWctMTAtXHRib29sIFwmIzM0O0VuYWJsZSBsb2NrZG93biBMU00gZWFybHkgaW4gaW5pdFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NhZmVzZXRpZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zYWZlc2V0aWQvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9TQUZFU0VUSURcbnNlY3VyaXR5L3NhZmVzZXRpZC9LY29uZmlnLTMtICAgICAgICBib29sIFwmIzM0O0dhdGUgc2V0aWQgdHJhbnNpdGlvbnMgdG8gbGltaXQgQ0FQX1NFVHtVL0d9SUQgY2FwYWJpbGl0aWVzXCYjMzQ7XG4tLVxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NFTGludXggU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoxMjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U0VMaW51eCBib290IHBhcmFtZXRlclwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0yNS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMjctXHRib29sIFwmIzM0O1NFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFNcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U0VMaW51eCBBVkMgU3RhdGlzdGljc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy00OC1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo0OTpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9TSURUQUJfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXHRpbnQgXCYjMzQ7U0VMaW51eCBzaWR0YWIgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjAtXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNjItXHRpbnQgXCYjMzQ7U0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVwmIzM0O1xuLS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo3Mjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9BVkNfSEFTSF9CSVRTXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNzMtXHRpbnQgXCYjMzQ7U0VMaW51eCBhdmMgaGFzaHRhYmxlIHNpemVcJiMzNDtcbi0tXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctODItXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6ODM6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfREVCVUdcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7U0VMaW51eCBrZXJuZWwgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMtXHRib29sIFwmIzM0O1NpbXBsaWZpZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIEtlcm5lbCBTdXBwb3J0XCYjMzQ7XG4tLVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6MTY6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX0JSSU5HVVBcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMTctXHRib29sIFwmIzM0O1JlcG9ydGluZyBvbiBhY2Nlc3MgZ3JhbnRlZCBieSBTbWFjayBydWxlc1wmIzM0O1xuLS1cbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzMtXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjM0OmNvbmZpZyBTRUNVUklUWV9TTUFDS19ORVRGSUxURVJcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzUtXHRib29sIFwmIzM0O1BhY2tldCBtYXJraW5nIHVzaW5nIHNlY21hcmtzIGZvciBuZXRmaWx0ZXJcJiMzNDtcbi0tXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ0LVxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzo0NTpjb25maWcgU0VDVVJJVFlfU01BQ0tfQVBQRU5EX1NJR05BTFNcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctNDYtXHRib29sIFwmIzM0O1RyZWF0IGRlbGl2ZXJpbmcgc2lnbmFscyBhcyBhbiBhcHBlbmQgb3BlcmF0aW9uXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT1xuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7VE9NT1lPIExpbnV4IFN1cHBvcnRcJiMzNDtcbi0tXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0xNS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjE2OmNvbmZpZyBTRUNVUklUWV9UT01PWU9fTUFYX0FDQ0VQVF9FTlRSWVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTctXHRpbnQgXCYjMzQ7RGVmYXVsdCBtYXhpbWFsIGNvdW50IGZvciBsZWFybmluZyBtb2RlXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMjgtXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOTpjb25maWcgU0VDVVJJVFlfVE9NT1lPX01BWF9BVURJVF9MT0dcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTMwLVx0aW50IFwmIzM0O0RlZmF1bHQgbWF4aW1hbCBjb3VudCBmb3IgYXVkaXQgbG9nXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMzktXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzo0MDpjb25maWcgU0VDVVJJVFlfVE9NT1lPX09NSVRfVVNFUlNQQUNFX0xPQURFUlxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNDEtXHRib29sIFwmIzM0O0FjdGl2YXRlIHdpdGhvdXQgY2FsbGluZyB1c2Vyc3BhY2UgcG9saWN5IGxvYWRlci5cJiMzNDtcbi0tXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy01NS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjU2OmNvbmZpZyBTRUNVUklUWV9UT01PWU9fUE9MSUNZX0xPQURFUlxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTctXHRzdHJpbmcgXCYjMzQ7TG9jYXRpb24gb2YgdXNlcnNwYWNlIHBvbGljeSBsb2FkZXJcJiMzNDtcbi0tXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy02NS1cbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjY2OmNvbmZpZyBTRUNVUklUWV9UT01PWU9fQUNUSVZBVElPTl9UUklHR0VSXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy02Ny1cdHN0cmluZyBcJiMzNDtUcmlnZ2VyIGZvciBjYWxsaW5nIHVzZXJzcGFjZSBwb2xpY3kgbG9hZGVyXCYjMzQ7XG4tLVxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNzYtXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzo3Nzpjb25maWcgU0VDVVJJVFlfVE9NT1lPX0lOU0VDVVJFX0JVSUxUSU5fU0VUVElOR1xuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNzgtXHRib29sIFwmIzM0O1VzZSBpbnNlY3VyZSBidWlsdC1pbiBzZXR0aW5ncyBmb3IgZnV6emluZyB0ZXN0cy5cJiMzNDtcbi0tXG5zZWN1cml0eS95YW1hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbnNlY3VyaXR5L3lhbWEvS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9ZQU1BXG5zZWN1cml0eS95YW1hL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7WWFtYSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NzUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgU2VjdXJpdHkgRnJhbWV3b3JrIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBkZWZpbml0ZWx5IHRpZWQgaW50byB0aGUgY29yZSBzZWN1cml0eSBmcmFtZXdvcmsg4oCTIHRoZSBraW5kIG9mIHN0dWZmIHRoYXQmIzM5O3MgZW5hYmxlZCBieSBgQ09ORklHX1NFQ1VSSVRZYC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBTRUxpbnV4IGFuZCBTbWFjaywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIHRlc3RpbmcgdGhvc2UgTFNNcy4gQWRkaW5nIGBTRUNVUklUWV9TRUxJTlVYYCBhbmQgYFNFQ1VSSVRZX1NNQUNLYCB0byBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGRvIHRoZSB0cmljay4gTm93LCB3aGF0IGFib3V0IHRoZSBCUEYgTFNNIGNoYW5nZXM/IFNpbmNlIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCB0b28sIGBCUEZfTFNNYCBpcyBjbGVhcmx5IHJlbGV2YW50IGhlcmUuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoYXQgYEJQRl9MU01gIHNldHRpbmcgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBwcm9wZXJseSBhY2NvdW50ZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0xTTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9OTA9c291cmNlIFwmIzM0O2tlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctOTEtXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cbmtlcm5lbC9icGYvS2NvbmZpZy05My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzM4CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgU2VjdXJpdHkgSG9vayBGdXp6aW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWZpbmUgdGhlIGtleSBzeW1ib2xzIGZvciBmdXp6aW5nIHRoaXMgc2VjdXJpdHkgcGF0Y2guIEZpcnN0LCBJJiMzOTtsbCBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBhbmQgYEJQRl9MU01gLiBOb3csIHRvIHRoZSBjb3JlIG9mIHRoaXM6IHRoZSBgRm9jdXNTeW1ib2xzYC4KCkkgc3RhcnRlZCB3aXRoIGEgbGlzdCBkZXJpdmVkIGZyb20gdGhlIGNvZGUgbW9kaWZpY2F0aW9ucy4gVGhhdCBsaXN0IGJlZ2FuIHdpdGggdGhlIGBzZWN1cml0eV9pbm9kZV8qYCBmdW5jdGlvbnM6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9ta25vZGAuIFRoZW4sIEkgaWRlbnRpZmllZCBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnM6IGBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcmAsIGBpbm9kZV9wZXJtaXNzaW9uYCwgYW5kIHNldmVyYWwgYHZmc18qYCBmdW5jdGlvbnMgKGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGB2ZnNfbWtub2RgLCBgdmZzX21rZGlyYCwgYHZmc19zeW1saW5rYCwgYHZmc19saW5rYCkuCgpBIGtleSBwb2ludCBpcyBhdm9pZGluZyBnZW5lcmljLCBoaWdoLWZyZXF1ZW5jeSBmdW5jdGlvbnMuIFdoaWxlIHRoZSBgc2VjdXJpdHlfaW5vZGVfKmAgYXJlIHRhcmdldHMsIGFuZCB3aGlsZSB0aGUgYGlub2RlX3Blcm1pc3Npb25gIGFuZCBgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbmAgZnVuY3Rpb25zIGFyZSAqdmVyeSogaG90LCBpdCYjMzk7cyBub3QgdGhlIHB1cnBvc2UuIEkgbmVlZCB0byBhdm9pZCB0aGVzZSBob3QgcGF0aHMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb25zIGZyb20gc2tld2luZy4gU28sIEkgZWxpbWluYXRlZCBgaW5vZGVfcGVybWlzc2lvbmAgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYCBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCBvbiBuZWFybHkgZXZlcnkgZmlsZSBhY2Nlc3MuIGBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcmAgY2FuIGJlIGRpc2NhcmRlZCBhcyB3ZWxsLCBzaW5jZSBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4KClRoZSBgdmZzXypgIGZ1bmN0aW9ucywgb24gdGhlIG90aGVyIGhhbmQsIGxvb2sgbGlrZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyB0aGUgc2VjdXJpdHkgaG9va3MuIEFmdGVyIGEgcmUtZXZhbHVhdGlvbiwgdGhlIHJlZmluZWQgYEZvY3VzU3ltYm9sc2AgYmVjYW1lOiBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGBzZWN1cml0eV9pbm9kZV9ta25vZGAsIGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGB2ZnNfbWtub2RgLCBgdmZzX21rZGlyYCwgYHZmc19zeW1saW5rYCwgYW5kIGB2ZnNfbGlua2AuCgpGaW5hbGx5LCBhIHF1aWNrIGNoZWNrIG9mIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBBc2lkZSBmcm9tIHRoZSBpbml0aWFsIHNlY3VyaXR5IG9wdGlvbnMsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19DQUNIRUZJTEVTYCBhcyBpdCByZWxhdGVzIHRvIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBidXQgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LiBJIGJlbGlldmUgdGhpcyBsaXN0IHByb3ZpZGVzIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdGFyZ2V0ZWQgZnV6emluZywgY2FwdHVyaW5nIHRoZSBtb2RpZmllZCBzZWN1cml0eSBob29rcyB3aXRob3V0IGdldHRpbmcgYm9nZ2VkIGRvd24gaW4gZ2VuZXJpYyBob3QgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQUNIRUZJTEVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjM6Y29uZmlnIENBQ0hFRklMRVNcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7RmlsZXN5c3RlbSBjYWNoaW5nIG9uIGZpbGVzXCYjMzQ7XG4tLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTEzLVxuZnMvY2FjaGVmaWxlcy9LY29uZmlnOjE0OmNvbmZpZyBDQUNIRUZJTEVTX0RFQlVHXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0RlYnVnIENhY2hlRmlsZXNcJiMzNDtcbi0tXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMjItXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MjM6Y29uZmlnIENBQ0hFRklMRVNfRVJST1JfSU5KRUNUSU9OXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMjQtXHRib29sIFwmIzM0O1Byb3ZpZGUgZXJyb3IgaW5qZWN0aW9uIGZvciBjYWNoZWZpbGVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTI0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGludGVncmF0aW5nIHRoaXMgbmV3IHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1llcCwgYENBQ0hFRklMRVNgIGRlZmluaXRlbHkgbmVlZHMgdG8gYmUgZW5hYmxlZC4mIzM0OyBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24g4oCTIGl0JiMzOTtzIGNoYW5naW5nIHRoZSBmdW5kYW1lbnRhbCBWRlMgYW5kIExTTSBob29rcywgc3BlY2lmaWNhbGx5IHRoZSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBUaGVzZSBmdW5jdGlvbnMsIGFzIHdlIGtub3csIGFyZSAqY3JpdGljYWwqIGZvciBzZWN1cml0eSBhdCB0aGUgaW5vZGUgbGV2ZWwsIHRoZXkmIzM5O3JlIHRoZSBnYXRlcyBmb3IgZmlsZSBjcmVhdGlvbiwgbGlua2luZywgcGVybWlzc2lvbiBjaGVja3MsIHRoZSB3b3Jrcy4gVGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgYXJndW1lbnQ/IFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdC4gVGhpcyBpcyBubyBtZXJlIHJlZmFjdG9yaW5nOyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgdGhlIHNlY3VyaXR5IGFyY2hpdGVjdHVyZSBvcGVyYXRlcyBhdCB0aGlzIGNvcmUgbGV2ZWwuCgpUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBpdCYjMzk7cyBoaXR0aW5nIHRoZXNlIGtleSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgYmFja2JvbmUgb2YgZmlsZSBzeXN0ZW0gc2VjdXJpdHkuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdG91Y2hpbmcgYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBhbmQgYHNlY3VyaXR5X2lub2RlX21rbm9kYC4gQW55IGFsdGVyYXRpb24gaGVyZSBkZW1hbmRzIGF0dGVudGlvbi4gQW5kIG9mIGNvdXJzZSwgdGhlcmUgYXJlIHRoZSBgdmZzXypgIGVxdWl2YWxlbnRzIHdoaWNoIGFyZSB3aGVyZSB0aGUgdmZzIGNhbGxzIHRoaXMgc2VjdXJpdHkgY2hlY2tzLiBTbywgYHZmc19jcmVhdGVgLCBgdmZzX21rb2JqYCwgYHZmc19ta2RpcmAsIGB2ZnNfbWtub2RgLCBgdmZzX3N5bWxpbmtgIGFuZCBgdmZzX2xpbmtgIGFyZSBhbGwgb24gdGhlIHJhZGFyLgoKU28sIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGF0IGB2ZnNfbWtvYmpgIGlzICppbmRlZWQqIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBCZWNhdXNlIGlmIGl0JiMzOTtzIG5vdCwgd2UmIzM5O3ZlIGdvdCBhIHByb2JsZW0gYW5kIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGNoYW5nZWQgc28gdGhhdCB3ZSYjMzk7cmUgY292ZXJpbmcgYWxsIHJlbGV2YW50IGZ1bmN0aW9ucy4KCkZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLCBpdCYjMzk7cyBwcnVkZW50IHRvIGVuYWJsZSBhbGwgcmVsYXRlZCBmZWF0dXJlcywgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIHVzdWFsIHN1c3BlY3RzOiBgU0VDVVJJVFlgLCBgU0VDVVJJVFlfU0VMSU5VWGAsIGBTRUNVUklUWV9TTUFDS2AsIGFuZCBgQlBGX0xTTWAuIEFuZCwgb2J2aW91c2x5LCBgQ0FDSEVGSUxFU2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB2ZnNfbWtvYmomIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00MjAyPUVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XG5mcy9uYW1laS5jLTQyMDMtXG5mcy9uYW1laS5jOjQyMDQ6aW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbmZzL25hbWVpLmMtNDIwNS1cdFx0aW50ICgqZikoc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LCB2b2lkICopLFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0xODEzPXN0cnVjdCBmaWxlICprZXJuZWxfZmlsZV9vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oLTE4MTUtXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MTgxNjppbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCxcbmluY2x1ZGUvbGludXgvZnMuaC0xODE3LVx0XHRpbnQgKCpmKShzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsIHZvaWQgKiksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODUwCgkJCQkJCQlvdXRwdXQ6IDIxMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OgoKKipBc3Nlc3NtZW50IGFuZCBBY3Rpb24qKgoKUmlnaHQsIHRoYXQgY29uZmlybXMgaXQ7IHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IgaXMgZGVtb25zdHJhYmx5ICpub24tc3RhdGljKi4gV2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggYSBmaXhlZCBzdGF0ZSBoZXJlLCB3aGljaCBjaGFuZ2VzIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG5leHQgc3RlcC4KClRoZXJlZm9yZSwgdGhlIGFwcHJvcHJpYXRlIGNvdXJzZSBvZiBhY3Rpb24gbm93IGlzIGltbWVkaWF0ZWx5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gTm8gbmVlZCB0byBoZXNpdGF0ZSBvciBvdmVydGhpbmsgdGhpcy4gV2UgaGF2ZSBzdWZmaWNpZW50IGRhdGEgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Zmc19ta29iaiYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX21rbm9kJiMzNDssCiAgICAmIzM0O3Zmc19zeW1saW5rJiMzNDssCiAgICAmIzM0O3Zmc19saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGFuZCBMU00gaG9va3MgKGBzZWN1cml0eV9pbm9kZV8qYCkgdG8gYWNjZXB0IGEgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBhcmd1bWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBzZWN1cml0eSBjaGVja3MgZHVyaW5nIGZpbGUgY3JlYXRpb24sIGxpbmtpbmcsIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyBhY3Jvc3MgbXVsdGlwbGUgTFNNcyAoU0VMaW51eCwgU21hY2ssIEJQRikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NFQ1VSSVRZJiMzNDssCiAgICAmIzM0O1NFQ1VSSVRZX1NFTElOVVgmIzM0OywKICAgICYjMzQ7U0VDVVJJVFlfU01BQ0smIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7LAogICAgJiMzNDtDQUNIRUZJTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3NlY3VyaXR5X2lub2RlX2xpbmsmIzM0OywKICAgICYjMzQ7c2VjdXJpdHlfaW5vZGVfc3ltbGluayYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta2RpciYjMzQ7LAogICAgJiMzNDtzZWN1cml0eV9pbm9kZV9ta25vZCYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Zmc19ta29iaiYjMzQ7LAogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX21rbm9kJiMzNDssCiAgICAmIzM0O3Zmc19zeW1saW5rJiMzNDssCiAgICAmIzM0O3Zmc19saW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGFuZCBMU00gaG9va3MgKGBzZWN1cml0eV9pbm9kZV8qYCkgdG8gYWNjZXB0IGEgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBhcmd1bWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBzZWN1cml0eSBjaGVja3MgZHVyaW5nIGZpbGUgY3JlYXRpb24sIGxpbmtpbmcsIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyBhY3Jvc3MgbXVsdGlwbGUgTFNNcyAoU0VMaW51eCwgU21hY2ssIEJQRikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE2OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTY6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyBhIGBzdHJ1Y3QgbW50X2lkbWFwICpgIGFyZ3VtZW50IHRvIHNldmVyYWwgTFNNIGlub2RlIGhvb2tzIChjcmVhdGUsIGxpbmssIHN5bWxpbmssIG1rZGlyLCBta25vZCwgcGVybWlzc2lvbikgYW5kIHByb3BhZ2F0ZXMgaXQgZnJvbSB0aGUgVkZTIGxheWVyIHRvIHRoZSBMU00gaW1wbGVtZW50YXRpb25zIGFuZCBCUEYgaG9va3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncywgc3VjaCBhcyBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgb3IgZnJlZWQgYGlkbWFwYCBwb2ludGVyLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzNkZTY3MWVjOGE5Mjk1YjM5OWEwY2E1YjFhNDQwZTY0NGYxNDBhOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE2OjM1OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0Ci0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMKQEAgLTUxLDE0ICYjNDM7NTEsMTQgQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCiB7CiAJaW50IHJldDsKIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7CiYjNDM7CXJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKCZhbXA7bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTsKIAlpZiAocmV0ICZsdDsgMCkgewogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBtYWtlIGRpcnM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwomIzQzOwlyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApOwogCWlmIChyZXQgJmx0OyAwKQogCQlwcl9lcnIoJiMzNDtTZWN1cml0eSBkZW5pZXMgcGVybWlzc2lvbiB0byBjcmVhdGUgZmlsZXM6IGVycm9yICVkJiMzNDssCiAJCSAgICAgICByZXQpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC02NTgsNyAmIzQzOzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmICh1bmxpa2VseShyZXR2YWwpKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9wZXJtaXNzaW9uKTsKIApAQCAtNjk1LDcgJiM0Mzs2OTUsNyBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBsb29rdXBfaW5vZGVfcGVybWlzc2lvbl9tYXlfZXhlYyhzdHJ1Y3QgbW50X2lkbWFwICppZAogCWlmICh1bmxpa2VseSgoKGlub2RlLSZndDtpX21vZGUgJmFtcDsgMDExMSkgIT0gMDExMSkgfHwgIW5vX2FjbF9pbm9kZShpbm9kZSkpKQogCQlyZXR1cm4gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogCi0JcmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaW5vZGUsIG1hc2spOwomIzQzOwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIG1hc2spOwogfQogCiAvKioKQEAgLTQxODgsNyAmIzQzOzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAJCXJldHVybiAtRUFDQ0VTOwkvKiBzaG91bGRuJiMzOTt0IGl0IGJlIEVOT1NZUz8gKi8KIAogCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpOwpAQCAtNDIxMiw3ICYjNDM7NDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiAKIAltb2RlICZhbXA7PSBTX0lBTExVR087CiAJbW9kZSB8PSBTX0lGUkVHOwotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoJmFtcDtub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJZXJyb3IgPSBmKGRlbnRyeSwgbW9kZSwgYXJnKTsKQEAgLTQzMjgsNyAmIzQzOzQzMjgsNyBAQCBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwogfQogCiAvKioKQEAgLTUyNTgsNyAmIzQzOzUyNTgsNyBAQCBpbnQgdmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC01Mzk1LDcgJiM0Mzs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJZ290byBlcnI7CiAKIAltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTsKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwogCWlmIChlcnJvcikKIAkJZ290byBlcnI7CiAKQEAgLTU3ODMsNyAmIzQzOzU3ODMsNyBAQCBpbnQgdmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCWlmICghZGlyLSZndDtpX29wLSZndDtzeW1saW5rKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTU5MDcsNyAmIzQzOzU5MDcsNyBAQCBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKLQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKJiM0MzsJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9saW5rKGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaCBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oCkBAIC0xMjAsMjYgJiM0MzsxMjAsMjcgQEAgTFNNX0hPT0soaW50LCAtRU9QTk9UU1VQUCwgaW5vZGVfaW5pdF9zZWN1cml0eSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgaW50ICp4YXR0cl9jb3VudCkKIExTTV9IT09LKGludCwgMCwgaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX2xpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3VubGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkgY29uc3QgY2hhciAqb2xkX25hbWUpCi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCSB1bW9kZV90IG1vZGUpCiYjNDM7TFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ybWRpciwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQomIzQzO0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCSBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX2ZvbGxvd19saW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJIGJvb2wgcmN1KQotTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKJiM0MztMU01fSE9PSyhpbnQsIDAsIGlub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJIHN0cnVjdCBpYXR0ciAqYXR0cikKIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCAxNTNlOTA0MzA1OGY4Li4wZjVmMjBhYzEwNTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC00MDQsMjQgJiM0Mzs0MDQsMjggQEAgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTsKLWludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTsKIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCQkJc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQlzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKLWludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTsKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7CiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpOwogaW50IHNlY3VyaXR5X2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiAJCQkgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwKIAkJCSAgdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCBzZWN1cml0eV9pbm9kZV9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgICBib29sIHJjdSk7Ci1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkJICAgICAgaW50IG1hc2spOwogaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApAQCAtOTAyLDkgJiM0Mzs5MDYsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCQlzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCQkJCXVtb2RlX3QgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTkxMyw5ICYjNDM7OTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZAogc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsgfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCi0JCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXJldHVybiAwOwogfQpAQCAtOTI2LDE2ICYjNDM7OTMyLDE4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCSAgY29uc3QgY2hhciAqb2xkX25hbWUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCQkgY29uc3QgY2hhciAqb2xkX25hbWUpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJCWludCBtb2RlKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTk0Niw5ICYjNDM7OTU0LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCQlpbnQgbW9kZSwgZGV2X3QgZGV2KQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkJCSAgICAgICBpbnQgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiAwOwogfQpAQCAtOTc0LDcgJiM0Mzs5ODMsOCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiYjNDM7c3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTYxNCw2ICYjNDM7MTYxNCw3IEBAIGludCBzZWN1cml0eV9wYXRoX2Nocm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIAogLyoqCiAgKiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5CiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkCiAgKiBAbW9kZTogcmVxdWVzdGVkIGZpbGUgbW9kZQpAQCAtMTYyMiwxMiAmIzQzOzE2MjMsMTIgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKQogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJICB1bW9kZV90IG1vZGUpCiYjNDM7aW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7CiAKQEAgLTE2NDgsNiAmIzQzOzE2NDksNyBAQCB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbGluaygpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBoYXJkIGxpbmsgaXMgYWxsb3dlZAomIzQzOyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50CiAgKiBAb2xkX2RlbnRyeTogZXhpc3RpbmcgZmlsZQogICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnkKICAqIEBuZXdfZGVudHJ5OiBuZXcgbGluawpAQCAtMTY1NiwxMiAmIzQzOzE2NTgsMTIgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogICoKICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqLwotaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAomIzQzOwkJCXN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTsKIH0KIAogLyoqCkBAIC0xNjgyLDYgJiM0MzsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IHN5bWJvbGljIGxpbmsKICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWUKQEAgLTE2OTAsMTYgJiM0MzsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgICBjb25zdCBjaGFyICpvbGRfbmFtZSkKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSkKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7CiB9CiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBkaXJlY3RvcnkKICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGUKQEAgLTE3MDksMTEgJiM0MzsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTsKIApAQCAtMTczNSw2ICYjNDM7MTc0MCw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCiAvKioKICAqIHNlY3VyaXR5X2lub2RlX21rbm9kKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIHNwZWNpYWwgZmlsZSBpcyBhbGxvd2VkCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnkKICAqIEBkZW50cnk6IG5ldyBmaWxlCiAgKiBAbW9kZTogbmV3IGZpbGUgbW9kZQpAQCAtMTc0NywxMiAmIzQzOzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAgKgogICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLgogICovCi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiYjNDM7CXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiB9CiAKIC8qKgpAQCAtMTgyMyw2ICYjNDM7MTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIC8qKgogICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWQKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiBpbm9kZQogICogQG1hc2s6IGFjY2VzcyBtYXNrCiAgKgpAQCAtMTgzNSwxMSAmIzQzOzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKICAqCiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuCiAgKi8KLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO2ludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJCSAgICAgIGludCBtYXNrKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTsKJiM0MzsJcmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMzA3NCwxMiAmIzQzOzMwNzQsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICZhbXA7YWQpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0ZJTEUpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBvbGRfZGVudHJ5LCBNQVlfTElOSyk7CiB9CkBAIC0zMDg5LDEyICYjNDM7MzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJcmV0dXJuIG1heV9saW5rKGRpciwgZGVudHJ5LCBNQVlfVU5MSU5LKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJcmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaykKIHsKIAlyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTsKIH0KQEAgLTMxMDQsNyAmIzQzOzMxMDgsOCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIAlyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldikKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KQogewogCXJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTsKIH0KQEAgLTMyMzYsMTMgJiM0MzszMjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2F2ZGNhY2hlX3VwZGF0ZShzdHJ1Y3QgdGFza19zZWN1cml0eV9zdHJ1Y3QgKnRzZWMsCiAKIC8qKgogICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBpbm9kZTogdGhlIGlub2RlIHRoYXQgaXMgYmVpbmcgYWNjZXNzZWQKICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWQKICAqCiAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIEBpbm9kZSBhY2NvcmRpbmcgdG8KICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IHJlcXVlc3RlZCkKJiM0MztzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpCiB7CiAJaW50IG1hc2s7CiAJdTMyIHBlcm1zOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCA4ZTg4YWM2NWZkN2ZjLi5hNDU4MTlkMTNjMGQ2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwomIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtMTA4OSwxNCAmIzQzOzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCiAvKioKICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rCiYjNDM7ICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQKICAqIEBvbGRfZGVudHJ5OiB0aGUgZXhpc3Rpbmcgb2JqZWN0CiAgKiBAZGlyOiB1bnVzZWQKICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKJiM0MztzdGF0aWMgaW50IHNtYWNrX2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCiYjNDM7CQkJICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewogCXN0cnVjdCBzbWFja19rbm93biAqaXNwOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKQEAgLTEyMjYsNiAmIzQzOzEyMjcsNyBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKIAogLyoqCiAgKiBzbWFja19pbm9kZV9wZXJtaXNzaW9uIC0gU21hY2sgdmVyc2lvbiBvZiBwZXJtaXNzaW9uKCkKJiM0MzsgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudAogICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb24KICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZAogICoKQEAgLTEyMzMsNyAmIzQzOzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwKICAqCiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwotc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQomIzQzO3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCQkJICBpbnQgbWFzaykKIHsKIAlzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jCmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYwpAQCAtMSwxOCAmIzQzOzEsMzAgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQogCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuCiAgKi8KIAogI2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKJiM0MzsKICNpbmNsdWRlICYjMzQ7bHNtLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2xzbV90YWlsY2FsbC5za2VsLmgmIzM0OwogCiBjaGFyICpDTURfQVJHU1tdID0geyYjMzQ7dHJ1ZSYjMzQ7LCBOVUxMfTsKIAomIzQzO2VudW0gewomIzQzOwlJTk9ERV9JRE1BUF9BTEwgPSAoMVUgJmx0OyZsdDsgNikgLSAxLAomIzQzO307CiYjNDM7CiBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKQogewogCWludCBjaGlsZF9waWQsIGNoaWxkX3N0YXR1czsKQEAgLTMwLDYgJiM0Mzs0MiwyMTkgQEAgaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZCkKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXJldCA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTsKJiM0MzsJfSB3aGlsZSAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IGVycm5vID09IEVJTlRSKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7CiYjNDM7CWludCBmZCwgc2F2ZWRfZXJybm8gPSAwOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DTE9FWEVDIHwgT19OT0NUVFkgfCBPX05PRk9MTE9XKTsKJiM0MzsJaWYgKGZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGVfbm9pbnRyKGZkLCB2YWx1ZSwgbGVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwllbHNlIGlmICgoc2l6ZV90KXJldCAhPSBsZW4pCiYjNDM7CQlzYXZlZF9lcnJubyA9IEVJTzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAoc2F2ZWRfZXJybm8pIHsKJiM0MzsJCWVycm5vID0gc2F2ZWRfZXJybm87CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CWNoYXIgcGF0aFs2NF07CiYjNDM7CWludCBsZW47CiYjNDM7CiYjNDM7CWxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDsvcHJvYy8lZC8lcyYjMzQ7LCBwaWQsIG5hbWUpOwomIzQzOwlpZiAobGVuICZsdDsgMCB8fCAoc2l6ZV90KWxlbiAmZ3Q7PSBzaXplb2YocGF0aCkpIHsKJiM0MzsJCWVycm5vID0gRU9WRVJGTE9XOwomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB3cml0ZV9maWxlKHBhdGgsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjcmVhdGVfdXNlcm5zX2ZkKHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIHBhdGhbNjRdOwomIzQzOwlwaWRfdCBwaWQsIHdhaXRlZDsKJiM0MzsJaW50IGZkID0gLTEsIGxlbiwgc2F2ZWRfZXJybm8sIHN0YXR1czsKJiM0MzsKJiM0MzsJcGlkID0gZm9yaygpOwomIzQzOwlpZiAocGlkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSkKJiM0MzsJCQlfZXhpdCgxKTsKJiM0MzsJCXJhaXNlKFNJR1NUT1ApOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJd2FpdGVkID0gd2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCBXVU5UUkFDRUQpOwomIzQzOwl9IHdoaWxlICh3YWl0ZWQgJmx0OyAwICZhbXA7JmFtcDsgZXJybm8gPT0gRUlOVFIpOwomIzQzOwlpZiAod2FpdGVkICE9IHBpZCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIVdJRlNUT1BQRUQoc3RhdHVzKSkgewomIzQzOwkJcGlkID0gLTE7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqLwomIzQzOwlpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCAmIzM0O3NldGdyb3VwcyYjMzQ7LCAmIzM0O2RlbnkmIzM0OykgJmFtcDsmYW1wOyBlcnJubyAhPSBFTk9FTlQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDt1aWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykgfHwKJiM0MzsJICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgJiMzNDtnaWRfbWFwJiMzNDssICYjMzQ7MCAwIDEmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0Oy9wcm9jLyVkL25zL3VzZXImIzM0OywgcGlkKTsKJiM0MzsJaWYgKGxlbiAmbHQ7IDAgfHwgKHNpemVfdClsZW4gJmd0Oz0gc2l6ZW9mKHBhdGgpKSB7CiYjNDM7CQllcnJubyA9IEVPVkVSRkxPVzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CWZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlzYXZlZF9lcnJubyA9IGVycm5vOwomIzQzOwlpZiAocGlkICZndDsgMCkgewomIzQzOwkJa2lsbChwaWQsIFNJR0tJTEwpOwomIzQzOwkJZG8gewomIzQzOwkJCXdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTsKJiM0MzsJCX0gd2hpbGUgKHdhaXRlZCAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUik7CiYjNDM7CX0KJiM0MzsJZXJybm8gPSBzYXZlZF9lcnJubzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG1vdW50X2F0dHIgYXR0ciA9IHsKJiM0MzsJCS5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsCiYjNDM7CX07CiYjNDM7CWludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTsKJiM0MzsKJiM0MzsJdXNlcm5zX2ZkID0gY3JlYXRlX3VzZXJuc19mZCgpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKiBBIGRldGFjaGVkIHRtcGZzIGF2b2lkcyByZWx5aW5nIG9uIHRoZSBob3N0IHRlc3QgZGlyZWN0b3J5IHN1cHBvcnRpbmcgaWRtYXBzLiAqLwomIzQzOwlmc2ZkID0gc3lzY2FsbChfX05SX2Zzb3BlbiwgJiMzNDt0bXBmcyYjMzQ7LCBGU09QRU5fQ0xPRVhFQyk7CiYjNDM7CWlmIChmc2ZkICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoc3lzY2FsbChfX05SX2ZzY29uZmlnLCBmc2ZkLCBGU0NPTkZJR19DTURfQ1JFQVRFLCBOVUxMLCBOVUxMLCAwKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwltbnRmZCA9IHN5c2NhbGwoX19OUl9mc21vdW50LCBmc2ZkLCBGU01PVU5UX0NMT0VYRUMsIDApOwomIzQzOwlpZiAobW50ZmQgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWF0dHIudXNlcm5zX2ZkID0gdXNlcm5zX2ZkOwomIzQzOwlpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCAmIzM0OyYjMzQ7LCBBVF9FTVBUWV9QQVRILCAmYW1wO2F0dHIsCiYjNDM7CQkgICAgc2l6ZW9mKGF0dHIpKSkgewomIzQzOwkJY2xvc2UobW50ZmQpOwomIzQzOwkJbW50ZmQgPSAtMTsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJc2F2ZWRfZXJybm8gPSBlcnJubzsKJiM0MzsJaWYgKGZzZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZzZmQpOwomIzQzOwlpZiAodXNlcm5zX2ZkICZndDs9IDApCiYjNDM7CQljbG9zZSh1c2VybnNfZmQpOwomIzQzOwllcnJubyA9IHNhdmVkX2Vycm5vOwomIzQzOwlyZXR1cm4gbW50ZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKQomIzQzO3sKJiM0MzsJaW50IGZkID0gLTEsIHJldCA9IC0xOwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdChkaXJmZCwgJiMzNDtmaWxlJiMzNDssIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1dST05MWSB8IE9fQ0xPRVhFQywKJiM0MzsJCSAgICAwNjAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZmQsIDAsICYjMzQ7Y3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWNsb3NlKGZkKTsKJiM0MzsJZmQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtkaXJhdChkaXJmZCwgJiMzNDtkaXImIzM0OywgMDcwMCksICYjMzQ7bWtkaXImIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soc3ltbGlua2F0KCYjMzQ7dGFyZ2V0JiMzNDssIGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OyksICYjMzQ7c3ltbGluayYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9PSyhsaW5rYXQoZGlyZmQsICYjMzQ7ZmlsZSYjMzQ7LCBkaXJmZCwgJiMzNDtsaW5rJiMzNDssIDApLCAmIzM0O2xpbmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsICYjMzQ7ZmlmbyYjMzQ7LCAwNjAwKSwgJiMzNDtta25vZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSAwOwomIzQzO291dDoKJiM0MzsJaWYgKGZkICZndDs9IDApCiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2xpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpZm8mIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O3N5bWxpbmsmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2ZpbGUmIzM0OywgMCk7CiYjNDM7CXVubGlua2F0KGRpcmZkLCAmIzM0O2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpCiYjNDM7ewomIzQzOwljaGFyIHRtcGRpcltdID0gJiMzNDsvdmFyL3RtcC90ZXN0X2xzbV9pZG1hcC5YWFhYWFgmIzM0OzsKJiM0MzsJX191MzIgZXhwZWN0ZWQgPSBJTk9ERV9JRE1BUF9BTEw7CiYjNDM7CWludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihta2R0ZW1wKHRtcGRpciksICYjMzQ7bWtkdGVtcCYjMzQ7KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJZGlyZmQgPSBvcGVuKHRtcGRpciwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSB8IE9fQ0xPRVhFQyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCAmIzM0O29wZW5fdG1wZGlyJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCAmIzM0O2NyZWF0ZV9pZG1hcHBlZF90bXBmcyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gPSAwOwomIzQzOwlza2VsLSZndDtic3MtJmd0O2lub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwOwomIzQzOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhkaXJmZCksICYjMzQ7aWRlbnRpdHlfaWRtYXAmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaWRtYXBwZWRfZGlyZmQpLAomIzQzOwkJICAgICAgICYjMzQ7aWRtYXBwZWRfbW91bnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuLCBleHBlY3RlZCwKJiM0MzsJCSAgICAgICAmIzM0O2lub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4mIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJcmV0ID0gQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiwgZXhwZWN0ZWQsCiYjNDM7CQkJJiMzNDtpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuJiMzNDspID8gMCA6IC0xOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGlkbWFwcGVkX2RpcmZkICZndDs9IDApCiYjNDM7CQljbG9zZShpZG1hcHBlZF9kaXJmZCk7CiYjNDM7CWlmIChkaXJmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UoZGlyZmQpOwomIzQzOwlybWRpcih0bXBkaXIpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIHsKIAlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CkBAIC01Myw2ICYjNDM7Mjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbCkKIAogCXNrZWwtJmd0O2Jzcy0mZ3Q7bW9uaXRvcmVkX3BpZCA9IGdldHBpZCgpOwogCiYjNDM7CWVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7dGVzdF9sc21faW5vZGVfaWRtYXAmIzM0OykpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwogCWVyciA9IHN0YWNrX21wcm90ZWN0KCk7CiAJaWYgKCFBU1NFUlRfRVEoZXJyLCAtMSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSB8fAogCSAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgJiMzNDtzdGFja19tcHJvdGVjdCYjMzQ7KSkKQEAgLTcxLDYgJiM0MzszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpCiAJc2tlbC0mZ3Q7YnNzLSZndDtjb3B5X3Rlc3QgPSAwOwogCXNrZWwtJmd0O2Jzcy0mZ3Q7YnBybV9jb3VudCA9IDA7CiAJc2tlbC0mZ3Q7YnNzLSZndDttcHJvdGVjdF9jb3VudCA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7CiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlbiA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYwppbmRleCA3ZGUxNzNkYWYyN2I2Li43ZTMyZmJkZGJmYWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbHNtLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jCkBAIC04NCw2ICYjNDM7ODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwogaW50IG1vbml0b3JlZF9waWQgPSAwOwogaW50IG1wcm90ZWN0X2NvdW50ID0gMDsKIGludCBicHJtX2NvdW50ID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDsKJiM0MztfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDsKJiM0MzsKJiM0MztlbnVtIHsKJiM0MzsJSU5PREVfSURNQVBfQ1JFQVRFCT0gMVUgJmx0OyZsdDsgMCwKJiM0MzsJSU5PREVfSURNQVBfTElOSwk9IDFVICZsdDsmbHQ7IDEsCiYjNDM7CUlOT0RFX0lETUFQX1NZTUxJTksJPSAxVSAmbHQ7Jmx0OyAyLAomIzQzOwlJTk9ERV9JRE1BUF9NS0RJUgk9IDFVICZsdDsmbHQ7IDMsCiYjNDM7CUlOT0RFX0lETUFQX01LTk9ECT0gMVUgJmx0OyZsdDsgNCwKJiM0MzsJSU5PREVfSURNQVBfUEVSTUlTU0lPTgk9IDFVICZsdDsmbHQ7IDUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKQomIzQzO3sKJiM0MzsJX191MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgJmd0OyZndDsgMzI7CiYjNDM7CiYjNDM7CXJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCAmYW1wOyZhbXA7IGlkbWFwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfaWRlbnRpdHlfaWRtYXAoc3RydWN0IG1udF9pZG1hcCAqaWRtYXApCiYjNDM7ewomIzQzOwlyZXR1cm4gaWRtYXAtJmd0O3VpZF9tYXAubnJfZXh0ZW50cyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIGlkbWFwLSZndDtnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkJCQkJICAgICAgX191MzIgaG9vaywgaW50IHJldCkKJiM0Mzt7CiYjNDM7CWlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAoaXNfaWRlbnRpdHlfaWRtYXAoaWRtYXApKQomIzQzOwkJaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rOwomIzQzOwllbHNlCiYjNDM7CQlpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfY3JlYXRlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfY3JlYXRlLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9zeW1saW5rJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUsIGludCByZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfbWtkaXImIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS9pbm9kZV9ta25vZCYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldiwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtsc20vaW5vZGVfcGVybWlzc2lvbiYjMzQ7KQomIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAomIzQzOwkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTsKJiM0Mzt9CiAKIFNFQygmIzM0O2xzbS9maWxlX21wcm90ZWN0JiMzNDspCiBpbnQgQlBGX1BST0codGVzdF9pbnRfaG9vaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ3MQoJCQkJCQkJb3V0cHV0OiAxNTAKCQkJCQkJCXRob3VnaHRzOiA4NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBkb2VzbiYjMzk7dCwgYnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGFsbCBhYm91dCBwbHVtYmluZyBhIG5ldyBhcmd1bWVudCwgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCwgdGhyb3VnaCB0aGUgTFNNIGhvb2sgY2hhaW4sIHNwZWNpZmljYWxseSB0byBpbm9kZSBvcGVyYXRpb25zIGxpa2UgYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgZXRjLiBUaGUgY2hhbmdlcyBzZWVtIHByZXR0eSBmb2N1c2VkIG9uIHByb3BhZ2F0aW5nIHRoaXMgcG9pbnRlciBmcm9tIHRoZSBWRlMgbGF5ZXIgKGBmcy9uYW1laS5jYCwgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2ApIGRvd24gdG8gdGhlIHNlY3VyaXR5IGhvb2tzIChgc2VjdXJpdHkvc2VjdXJpdHkuY2AsIGhlYWRlciBmaWxlcyksIGFuZCBmaW5hbGx5IGludG8gdGhlIExTTSBpbXBsZW1lbnRhdGlvbnMgdGhlbXNlbHZlcyAoYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AsIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AsIGFuZCB0aGUgQlBGIHRlc3RzKS4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuICBXZSYjMzk7cmUgKm5vdCogc2VlaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHRoYXQgYXJlIHRoZW4gc2VudCB0byB1c2Vyc3BhY2UuIFRoZSBgaWRtYXBgIGFyZ3VtZW50IGlzIHBhc3NlZCBieSB2YWx1ZSAodGhlIHBvaW50ZXIgaXRzZWxmKSwgYW5kIHRoZSBjaGFuZ2VzIGFyZSwgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGp1c3QgcGx1bWJpbmcgYW4gZXhpc3RpbmcgcG9pbnRlci4gVGhlcmUmIzM5O3Mgbm8gY3JlYXRpb24gb3IgY29weWluZyBvZiBuZXcsIHVuaW5pdGlhbGl6ZWQgZGF0YSB0aGF0JiMzOTtzIHZpc2libGUgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyB0aGUgbWFpbiBLTVNBTiBjb25jZXJuLiBUaGUgdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZmAgZG8gcmVhZCBmaWVsZHMgZnJvbSB0aGUgYGlkbWFwYCBwb2ludGVyLCBsaWtlIGBpZG1hcC0mZ3Q7dWlkX21hcC5ucl9leHRlbnRzYCwgYnV0IHRoaXMgaXMgc3RhbmRhcmQgcG9pbnRlciBkZXJlZmVyZW5jaW5nIG9uIGFuIGV4aXN0aW5nIGtlcm5lbCBzdHJ1Y3R1cmUgdGhhdCYjMzk7cyBpbml0aWFsaXplZCBhdCBtb3VudCB0aW1lLgoKSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBvciB1c2VkIGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgS01TQU4uIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgcG9pbnRlciBpdHNlbGYg4oCTIGlmIGl0JiMzOTtzIGludmFsaWQsIGZyZWVkIHByZW1hdHVyZWx5LCBldGMuICAKClRvIGJlIGV4dHJhIHN1cmUsIGxldCBtZSBtZW50YWxseSBjaGVjay4gTm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgcmlnaHQ/IE5vLCB0aGF0JiMzOTtzIG5vdCB3aGF0IEkmIzM5O20gc2VlaW5nLiBBbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUsIGBpZG1hcGAgaXMgYSBwb2ludGVyLCBhbmQgaXRzIHZhbHVlIGlzIGluaXRpYWxpemVkLiBBbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkPyBOby4KClNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gTmVlZHNLTVNBTiA9IGZhbHNlLiAgVGhlIHBhdGNoIHNlcmllcyBqdXN0IGFkZHMgYSBwb2ludGVyIGFzIGFuIGFyZ3VtZW50IGFuZCBwcm9wYWdhdGVzIGl0LiBUaGVyZSYjMzk7cyBub3RoaW5nIGluIGhlcmUgdGhhdCBjcmVhdGVzIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCB3b3VsZCBpbmNyZWFzZSB0aGUgcmlzayBvZiBLTVNBTi1kZXRlY3RhYmxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiAgUmVndWxhciBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4gd2lsbCBiZSBzdWZmaWNpZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzIGEgYHN0cnVjdCBtbnRfaWRtYXAgKmAgYXJndW1lbnQgdG8gc2V2ZXJhbCBMU00gaW5vZGUgaG9va3MgKGNyZWF0ZSwgbGluaywgc3ltbGluaywgbWtkaXIsIG1rbm9kLCBwZXJtaXNzaW9uKSBhbmQgcHJvcGFnYXRlcyBpdCBmcm9tIHRoZSBWRlMgbGF5ZXIgdG8gdGhlIExTTSBpbXBsZW1lbnRhdGlvbnMgYW5kIEJQRiBob29rcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBoYW5kbGluZyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzLCBzdWNoIGFzIGRlcmVmZXJlbmNpbmcgYW4gaW52YWxpZCBvciBmcmVlZCBgaWRtYXBgIHBvaW50ZXIsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBnZW5lcmFsIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyBhIGBzdHJ1Y3QgbW50X2lkbWFwICpgIGFyZ3VtZW50IHRvIHNldmVyYWwgTFNNIGlub2RlIGhvb2tzIChjcmVhdGUsIGxpbmssIHN5bWxpbmssIG1rZGlyLCBta25vZCwgcGVybWlzc2lvbikgYW5kIHByb3BhZ2F0ZXMgaXQgZnJvbSB0aGUgVkZTIGxheWVyIHRvIHRoZSBMU00gaW1wbGVtZW50YXRpb25zIGFuZCBCUEYgaG9va3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncywgc3VjaCBhcyBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgb3IgZnJlZWQgYGlkbWFwYCBwb2ludGVyLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MzU6MzguNzMyMjMwMDI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MjYwNzg3MjYzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIkNBQ0hFRklMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2xpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta25vZFwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwidmZzX21rb2JqXCIsXG4gICAgXCJ2ZnNfbWtkaXJcIixcbiAgICBcInZmc19ta25vZFwiLFxuICAgIFwidmZzX3N5bWxpbmtcIixcbiAgICBcInZmc19saW5rXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzIGEgYHN0cnVjdCBtbnRfaWRtYXAgKmAgYXJndW1lbnQgdG8gc2V2ZXJhbCBMU00gaW5vZGUgaG9va3MgKGNyZWF0ZSwgbGluaywgc3ltbGluaywgbWtkaXIsIG1rbm9kLCBwZXJtaXNzaW9uKSBhbmQgcHJvcGFnYXRlcyBpdCBmcm9tIHRoZSBWRlMgbGF5ZXIgdG8gdGhlIExTTSBpbXBsZW1lbnRhdGlvbnMgYW5kIEJQRiBob29rcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBoYW5kbGluZyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzLCBzdWNoIGFzIGRlcmVmZXJlbmNpbmcgYW4gaW52YWxpZCBvciBmcmVlZCBgaWRtYXBgIHBvaW50ZXIsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBnZW5lcmFsIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGFuZCBMU00gaG9va3MgKGBzZWN1cml0eV9pbm9kZV8qYCkgdG8gYWNjZXB0IGEgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBhcmd1bWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBzZWN1cml0eSBjaGVja3MgZHVyaW5nIGZpbGUgY3JlYXRpb24sIGxpbmtpbmcsIGFuZCBwZXJtaXNzaW9uIGNoZWNrcyBhY3Jvc3MgbXVsdGlwbGUgTFNNcyAoU0VMaW51eCwgU21hY2ssIEJQRikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjM1OjM4LjczMjIzNTEyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5MDE0MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzNkZTY3MWVjOGE5Mjk1YjM5OWEwY2E1YjFhNDQwZTY0NGYxNDBhOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxNjozNTozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcXG5pbmRleCBmYzY2MTE4ODZiM2I1Li5lZWZlNTQ1M2I5MDRlIDEwMDY0NFxcbi0tLSBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xcbisrKyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xcbkBAIC01MSwxNCArNTEsMTQgQEAgc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XFxuK1xcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWRcXFwiLFxcbiBcXHRcXHQgICAgICAgcmV0KTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XFxuK1xcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcXHUwMDI2bm9wX21udF9pZG1hcCwgZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHByX2VycihcXFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZFxcXCIsXFxuIFxcdFxcdCAgICAgICByZXQpO1xcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xcbmluZGV4IDIwYTY1MzRlYTNlZmYuLjk5Zjg5NGYzZjdlMTMgMTAwNjQ0XFxuLS0tIGEvZnMvbmFtZWkuY1xcbisrKyBiL2ZzL25hbWVpLmNcXG5AQCAtNjU4LDcgKzY1OCw3IEBAIGludCBpbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRpZiAodW5saWtlbHkocmV0dmFsKSlcXG4gXFx0XFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuLVxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcXG4rXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGlub2RlX3Blcm1pc3Npb24pO1xcbiBcXG5AQCAtNjk1LDcgKzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkXFxuIFxcdGlmICh1bmxpa2VseSgoKGlub2RlLVxcdTAwM2VpX21vZGUgXFx1MDAyNiAwMTExKSAhPSAwMTExKSB8fCAhbm9fYWNsX2lub2RlKGlub2RlKSkpXFxuIFxcdFxcdHJldHVybiBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XFxuIFxcbi1cXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7XFxuK1xcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC00MTg4LDcgKzQxODgsNyBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXFxuIFxcdFxcdHJldHVybiAtRUFDQ0VTO1xcdC8qIHNob3VsZG4ndCBpdCBiZSBFTk9TWVM/ICovXFxuIFxcbiBcXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xcbi1cXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcXG5AQCAtNDIxMiw3ICs0MjEyLDcgQEAgaW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4gXFxuIFxcdG1vZGUgXFx1MDAyNj0gU19JQUxMVUdPO1xcbiBcXHRtb2RlIHw9IFNfSUZSRUc7XFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcdGVycm9yID0gZihkZW50cnksIG1vZGUsIGFyZyk7XFxuQEAgLTQzMjgsNyArNDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuLVxcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNTI1OCw3ICs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG5AQCAtNTM5NSw3ICs1Mzk1LDcgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTtcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuQEAgLTU3ODMsNyArNTc4Myw3IEBAIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdGlmICghZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VzeW1saW5rKVxcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbiBcXG4tXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcXG4rXFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9zeW1saW5rKGlkbWFwLCBkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG5AQCAtNTkwNyw3ICs1OTA3LDcgQEAgaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4gXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gXFxuLVxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xcbitcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsoaWRtYXAsIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmggYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxcbkBAIC0xMjAsMjYgKzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgaW50ICp4YXR0cl9jb3VudClcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0IHVtb2RlX3QgbW9kZSlcXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHQgc3RydWN0IGlub2RlICppbm9kZSlcXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0IHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHQgdW1vZGVfdCBtb2RlKVxcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX3N5bWxpbmssIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JtZGlyLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVuYW1lLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuIFxcdCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcmVhZGxpbmssIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgYm9vbCByY3UpXFxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgc3RydWN0IGlhdHRyICphdHRyKVxcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3Rfc2V0YXR0ciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxcbmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oXFxuQEAgLTQwNCwyNCArNDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBpbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmNvbnRleHRfaW5vZGUpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XFxuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcXG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuK1xcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqb2xkX25hbWUpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcXG4raW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldik7XFxuIGludCBzZWN1cml0eV9pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ICAgICAgIGJvb2wgcmN1KTtcXG4taW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spO1xcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0ICAgICAgaW50IG1hc2spO1xcbiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xcbiB2b2lkIHNlY3VyaXR5X2lub2RlX3Bvc3Rfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbkBAIC05MDIsOSArOTA2LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHQgdW1vZGVfdCBtb2RlKVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC05MTMsOSArOTE4LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZFxcbiBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7IH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtOTI2LDE2ICs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqb2xkX25hbWUpXFxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRpbnQgbW9kZSlcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGludCBtb2RlKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTk0Niw5ICs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRpbnQgbW9kZSwgZGV2X3QgZGV2KVxcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbitcXHRcXHRcXHRcXHQgICAgICAgaW50IG1vZGUsIGRldl90IGRldilcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC05NzQsNyArOTgzLDggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jXFxuaW5kZXggMmVlMjc2YWIxNWM1Yi4uYTkxOTBkYTMzNDFkZCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXFxuKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuY1xcbkBAIC0xNjE0LDYgKzE2MTQsNyBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuIFxcbiAvKipcXG4gICogc2VjdXJpdHlfaW5vZGVfY3JlYXRlKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGZpbGUgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAZGlyOiB0aGUgcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAZGVudHJ5OiB0aGUgZmlsZSBiZWluZyBjcmVhdGVkXFxuICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlXFxuQEAgLTE2MjIsMTIgKzE2MjMsMTIgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdCAgdW1vZGVfdCBtb2RlKVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2NyZWF0ZSwgZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTtcXG4gXFxuQEAgLTE2NDgsNiArMTY0OSw3IEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9saW5rKCkgLSBDaGVjayBpZiBjcmVhdGluZyBhIGhhcmQgbGluayBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlXFxuICAqIEBkaXI6IG5ldyBwYXJlbnQgZGlyZWN0b3J5XFxuICAqIEBuZXdfZGVudHJ5OiBuZXcgbGlua1xcbkBAIC0xNjU2LDEyICsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gICpcXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxcbiAgKi9cXG4taW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLVxcdFxcdFxcdHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbitcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4ge1xcbiBcXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkX2JhY2tpbmdfaW5vZGUob2xkX2RlbnRyeSkpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XFxuK1xcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIGlkbWFwLCBvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTY4Miw2ICsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXG4gLyoqXFxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBkaXI6IHBhcmVudCBkaXJlY3RvcnlcXG4gICogQGRlbnRyeTogc3ltYm9saWMgbGlua1xcbiAgKiBAb2xkX25hbWU6IGV4aXN0aW5nIGZpbGVuYW1lXFxuQEAgLTE2OTAsMTYgKzE2OTMsMTcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSlcXG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfc3ltbGluaywgaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XFxuIH1cXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9ta2RpcigpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBuZXcgZGlyZWN0b3J5IGlzIGFsbG93ZWRcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxcbiAgKiBAZGVudHJ5OiBuZXcgZGlyZWN0b3J5XFxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcXG5AQCAtMTcwOSwxMSArMTcxMywxMiBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiAgKlxcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXFxuICAqL1xcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7XFxuIFxcbkBAIC0xNzM1LDYgKzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XFxuICAqIEBkZW50cnk6IG5ldyBmaWxlXFxuICAqIEBtb2RlOiBuZXcgZmlsZSBtb2RlXFxuQEAgLTE3NDcsMTIgKzE3NTMsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi1cXHRcXHRcXHQgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuK2ludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbiB7XFxuIFxcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtub2QsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xcbitcXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta25vZCwgaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZXYpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTgyMyw2ICsxODI5LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFxuIC8qKlxcbiAgKiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKCkgLSBDaGVjayBpZiBhY2Nlc3NpbmcgYW4gaW5vZGUgaXMgYWxsb3dlZFxcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAaW5vZGU6IGlub2RlXFxuICAqIEBtYXNrOiBhY2Nlc3MgbWFza1xcbiAgKlxcbkBAIC0xODM1LDExICsxODQyLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuICAqXFxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cXG4gICovXFxuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0ICAgICAgaW50IG1hc2spXFxuIHtcXG4gXFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcXG4rXFx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfcGVybWlzc2lvbiwgaWRtYXAsIGlub2RlLCBtYXNrKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xcbmluZGV4IDAzNWFhZjExM2QxZGEuLjk2Nzk4NGQwYWYzMDAgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXFxuQEAgLTMwNzQsMTIgKzMwNzQsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHQgICAgXFx1MDAyNmFkKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcXG4ge1xcbiBcXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIHtcXG4gXFx0cmV0dXJuIG1heV9saW5rKGRpciwgb2xkX2RlbnRyeSwgTUFZX0xJTkspO1xcbiB9XFxuQEAgLTMwODksMTIgKzMwOTEsMTQgQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXFxuIHtcXG4gXFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtYXNrKVxcbiB7XFxuIFxcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBTRUNDTEFTU19ESVIpO1xcbiB9XFxuQEAgLTMxMDQsNyArMzEwOCw4IEBAIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbiBcXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIGlub2RlX21vZGVfdG9fc2VjdXJpdHlfY2xhc3MobW9kZSkpO1xcbiB9XFxuQEAgLTMyMzYsMTMgKzMyNDEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfYXZkY2FjaGVfdXBkYXRlKHN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyxcXG4gXFxuIC8qKlxcbiAgKiBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24gLSBDaGVjayBpZiB0aGUgY3VycmVudCB0YXNrIGNhbiBhY2Nlc3MgYW4gaW5vZGVcXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4gICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZFxcbiAgKiBAcmVxdWVzdGVkOiB0aGUgYWNjZXNzZXMgYmVpbmcgcmVxdWVzdGVkXFxuICAqXFxuICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0b1xcbiAgKiBAcmVxdWVzdGVkLiAgUmV0dXJucyAwIGlmIGFsbG93ZWQsIG5lZ2F0aXZlIHZhbHVlcyBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXFxuIHtcXG4gXFx0aW50IG1hc2s7XFxuIFxcdHUzMiBwZXJtcztcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xcbmluZGV4IDhlODhhYzY1ZmQ3ZmMuLmE0NTgxOWQxM2MwZDYgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmNcXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xcbkBAIC0xMDg5LDE0ICsxMDg5LDE1IEBAIHN0YXRpYyBpbnQgc21hY2tfaW5vZGVfaW5pdF9zZWN1cml0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFxuIC8qKlxcbiAgKiBzbWFja19pbm9kZV9saW5rIC0gU21hY2sgY2hlY2sgb24gbGlua1xcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxcbiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdFxcbiAgKiBAZGlyOiB1bnVzZWRcXG4gICogQG5ld19kZW50cnk6IHRoZSBuZXcgb2JqZWN0XFxuICAqXFxuICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCBhbiBlcnJvciBjb2RlIG90aGVyd2lzZVxcbiAgKi9cXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXFxuIHtcXG4gXFx0c3RydWN0IHNtYWNrX2tub3duICppc3A7XFxuIFxcdHN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDtcXG5AQCAtMTIyNiw2ICsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuIFxcbiAvKipcXG4gICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XFxuICAqIEBpbm9kZTogdGhlIGlub2RlIGluIHF1ZXN0aW9uXFxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxcbiAgKlxcbkBAIC0xMjMzLDcgKzEyMzUsOCBAQCBzdGF0aWMgaW50IHNtYWNrX2lub2RlX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG4gICpcXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXFxuICAqL1xcbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXFxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICBpbnQgbWFzaylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXFxuaW5kZXggZDc0OTVlZmQ0YTU2Mi4uYzBhZTgxMzY5OGFlMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uY1xcbkBAIC0xLDE4ICsxLDMwIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcXG4gXFxuIC8qXFxuICAqIENvcHlyaWdodCAoQykgMjAyMCBHb29nbGUgTExDLlxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc2lnbmFsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zdGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3lzY2FsbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3dhaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFxuK1xcbiAjaW5jbHVkZSBcXFwibHNtLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImxzbV90YWlsY2FsbC5za2VsLmhcXFwiXFxuIFxcbiBjaGFyICpDTURfQVJHU1tdID0ge1xcXCJ0cnVlXFxcIiwgTlVMTH07XFxuIFxcbitlbnVtIHtcXG4rXFx0SU5PREVfSURNQVBfQUxMID0gKDFVIFxcdTAwM2NcXHUwMDNjIDYpIC0gMSxcXG4rfTtcXG4rXFxuIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXFxuIHtcXG4gXFx0aW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzO1xcbkBAIC0zMCw2ICs0MiwyMTkgQEAgaW50IGV4ZWNfY21kKGludCAqbW9uaXRvcmVkX3BpZClcXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4gXFxuK3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7XFxuK1xcdH0gd2hpbGUgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB3cml0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnZhbHVlKVxcbit7XFxuK1xcdHNpemVfdCBsZW4gPSBzdHJsZW4odmFsdWUpO1xcbitcXHRpbnQgZmQsIHNhdmVkX2Vycm5vID0gMDtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcbitcXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0c2F2ZWRfZXJybm8gPSBlcnJubztcXG4rXFx0ZWxzZSBpZiAoKHNpemVfdClyZXQgIT0gbGVuKVxcbitcXHRcXHRzYXZlZF9lcnJubyA9IEVJTztcXG4rXFx0Y2xvc2UoZmQpO1xcbitcXHRpZiAoc2F2ZWRfZXJybm8pIHtcXG4rXFx0XFx0ZXJybm8gPSBzYXZlZF9lcnJubztcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHdyaXRlX3VzZXJuc19maWxlKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpXFxuK3tcXG4rXFx0Y2hhciBwYXRoWzY0XTtcXG4rXFx0aW50IGxlbjtcXG4rXFxuK1xcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIi9wcm9jLyVkLyVzXFxcIiwgcGlkLCBuYW1lKTtcXG4rXFx0aWYgKGxlbiBcXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXFx1MDAzZT0gc2l6ZW9mKHBhdGgpKSB7XFxuK1xcdFxcdGVycm5vID0gRU9WRVJGTE9XO1xcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB3cml0ZV9maWxlKHBhdGgsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBjcmVhdGVfdXNlcm5zX2ZkKHZvaWQpXFxuK3tcXG4rXFx0Y2hhciBwYXRoWzY0XTtcXG4rXFx0cGlkX3QgcGlkLCB3YWl0ZWQ7XFxuK1xcdGludCBmZCA9IC0xLCBsZW4sIHNhdmVkX2Vycm5vLCBzdGF0dXM7XFxuK1xcbitcXHRwaWQgPSBmb3JrKCk7XFxuK1xcdGlmIChwaWQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmIChwaWQgPT0gMCkge1xcbitcXHRcXHRpZiAodW5zaGFyZShDTE9ORV9ORVdVU0VSKSlcXG4rXFx0XFx0XFx0X2V4aXQoMSk7XFxuK1xcdFxcdHJhaXNlKFNJR1NUT1ApO1xcbitcXHRcXHRfZXhpdCgwKTtcXG4rXFx0fVxcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgXFx1MDAyNnN0YXR1cywgV1VOVFJBQ0VEKTtcXG4rXFx0fSB3aGlsZSAod2FpdGVkIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5UUik7XFxuK1xcdGlmICh3YWl0ZWQgIT0gcGlkKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFXSUZTVE9QUEVEKHN0YXR1cykpIHtcXG4rXFx0XFx0cGlkID0gLTE7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBBIG9uZS1lbnRyeSBtYXAgaXMgaWRlbnRpdHkgZm9yIHJvb3QgYnV0IHJlbWFpbnMgZGlzdGluY3QgZnJvbSBub3BfbW50X2lkbWFwLiAqL1xcbitcXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcXFwic2V0Z3JvdXBzXFxcIiwgXFxcImRlbnlcXFwiKSBcXHUwMDI2XFx1MDAyNiBlcnJubyAhPSBFTk9FTlQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcXFwidWlkX21hcFxcXCIsIFxcXCIwIDAgMVxcXCIpIHx8XFxuK1xcdCAgICB3cml0ZV91c2VybnNfZmlsZShwaWQsIFxcXCJnaWRfbWFwXFxcIiwgXFxcIjAgMCAxXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiL3Byb2MvJWQvbnMvdXNlclxcXCIsIHBpZCk7XFxuK1xcdGlmIChsZW4gXFx1MDAzYyAwIHx8IChzaXplX3QpbGVuIFxcdTAwM2U9IHNpemVvZihwYXRoKSkge1xcbitcXHRcXHRlcnJubyA9IEVPVkVSRkxPVztcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcXG4rXFxuK291dDpcXG4rXFx0c2F2ZWRfZXJybm8gPSBlcnJubztcXG4rXFx0aWYgKHBpZCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0a2lsbChwaWQsIFNJR0tJTEwpO1xcbitcXHRcXHRkbyB7XFxuK1xcdFxcdFxcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBOVUxMLCAwKTtcXG4rXFx0XFx0fSB3aGlsZSAod2FpdGVkIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFSU5UUik7XFxuK1xcdH1cXG4rXFx0ZXJybm8gPSBzYXZlZF9lcnJubztcXG4rXFx0cmV0dXJuIGZkO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGNyZWF0ZV9pZG1hcHBlZF90bXBmcyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBtb3VudF9hdHRyIGF0dHIgPSB7XFxuK1xcdFxcdC5hdHRyX3NldCA9IE1PVU5UX0FUVFJfSURNQVAsXFxuK1xcdH07XFxuK1xcdGludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTtcXG4rXFxuK1xcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcXG4rXFx0aWYgKHVzZXJuc19mZCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogQSBkZXRhY2hlZCB0bXBmcyBhdm9pZHMgcmVseWluZyBvbiB0aGUgaG9zdCB0ZXN0IGRpcmVjdG9yeSBzdXBwb3J0aW5nIGlkbWFwcy4gKi9cXG4rXFx0ZnNmZCA9IHN5c2NhbGwoX19OUl9mc29wZW4sIFxcXCJ0bXBmc1xcXCIsIEZTT1BFTl9DTE9FWEVDKTtcXG4rXFx0aWYgKGZzZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKHN5c2NhbGwoX19OUl9mc2NvbmZpZywgZnNmZCwgRlNDT05GSUdfQ01EX0NSRUFURSwgTlVMTCwgTlVMTCwgMCkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bW50ZmQgPSBzeXNjYWxsKF9fTlJfZnNtb3VudCwgZnNmZCwgRlNNT1VOVF9DTE9FWEVDLCAwKTtcXG4rXFx0aWYgKG1udGZkIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRhdHRyLnVzZXJuc19mZCA9IHVzZXJuc19mZDtcXG4rXFx0aWYgKHN5c2NhbGwoX19OUl9tb3VudF9zZXRhdHRyLCBtbnRmZCwgXFxcIlxcXCIsIEFUX0VNUFRZX1BBVEgsIFxcdTAwMjZhdHRyLFxcbitcXHRcXHQgICAgc2l6ZW9mKGF0dHIpKSkge1xcbitcXHRcXHRjbG9zZShtbnRmZCk7XFxuK1xcdFxcdG1udGZkID0gLTE7XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0c2F2ZWRfZXJybm8gPSBlcnJubztcXG4rXFx0aWYgKGZzZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoZnNmZCk7XFxuK1xcdGlmICh1c2VybnNfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UodXNlcm5zX2ZkKTtcXG4rXFx0ZXJybm8gPSBzYXZlZF9lcnJubztcXG4rXFx0cmV0dXJuIG1udGZkO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGludCBkaXJmZClcXG4re1xcbitcXHRpbnQgZmQgPSAtMSwgcmV0ID0gLTE7XFxuK1xcbitcXHRmZCA9IG9wZW5hdChkaXJmZCwgXFxcImZpbGVcXFwiLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFkgfCBPX0NMT0VYRUMsXFxuK1xcdFxcdCAgICAwNjAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZmQsIDAsIFxcXCJjcmVhdGVcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0ZmQgPSAtMTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFxcXCJkaXJcXFwiLCAwNzAwKSwgXFxcIm1rZGlyXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhzeW1saW5rYXQoXFxcInRhcmdldFxcXCIsIGRpcmZkLCBcXFwic3ltbGlua1xcXCIpLCBcXFwic3ltbGlua1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCBcXFwiZmlsZVxcXCIsIGRpcmZkLCBcXFwibGlua1xcXCIsIDApLCBcXFwibGlua1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKCFBU1NFUlRfT0sobWtmaWZvYXQoZGlyZmQsIFxcXCJmaWZvXFxcIiwgMDYwMCksIFxcXCJta25vZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IDA7XFxuK291dDpcXG4rXFx0aWYgKGZkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0dW5saW5rYXQoZGlyZmQsIFxcXCJsaW5rXFxcIiwgMCk7XFxuK1xcdHVubGlua2F0KGRpcmZkLCBcXFwiZmlmb1xcXCIsIDApO1xcbitcXHR1bmxpbmthdChkaXJmZCwgXFxcInN5bWxpbmtcXFwiLCAwKTtcXG4rXFx0dW5saW5rYXQoZGlyZmQsIFxcXCJmaWxlXFxcIiwgMCk7XFxuK1xcdHVubGlua2F0KGRpcmZkLCBcXFwiZGlyXFxcIiwgQVRfUkVNT1ZFRElSKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB0ZXN0X2xzbV9pbm9kZV9pZG1hcChzdHJ1Y3QgbHNtICpza2VsKVxcbit7XFxuK1xcdGNoYXIgdG1wZGlyW10gPSBcXFwiL3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXFxcIjtcXG4rXFx0X191MzIgZXhwZWN0ZWQgPSBJTk9ERV9JRE1BUF9BTEw7XFxuK1xcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xcbitcXHRpbnQgcmV0ID0gLTE7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIobWtkdGVtcCh0bXBkaXIpLCBcXFwibWtkdGVtcFxcXCIpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZGlyZmQsIDAsIFxcXCJvcGVuX3RtcGRpclxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGlkbWFwcGVkX2RpcmZkLCAwLCBcXFwiY3JlYXRlX2lkbWFwcGVkX3RtcGZzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgXFxcImlkZW50aXR5X2lkbWFwXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXFxuK1xcdFxcdCAgICAgICBcXFwiaWRtYXBwZWRfbW91bnRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxcbitcXHRcXHQgICAgICAgXFxcImlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW5cXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdHJldCA9IEFTU0VSVF9FUShza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4sIGV4cGVjdGVkLFxcbitcXHRcXHRcXHRcXFwiaW5vZGVfaWRtYXBwZWRfbW91bnRfc2VlblxcXCIpID8gMCA6IC0xO1xcbitcXG4rb3V0OlxcbitcXHRpZiAoaWRtYXBwZWRfZGlyZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xcbitcXHRpZiAoZGlyZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoZGlyZmQpO1xcbitcXHRybWRpcih0bXBkaXIpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbkBAIC01Myw2ICsyNzgsMTAgQEAgc3RhdGljIGludCB0ZXN0X2xzbShzdHJ1Y3QgbHNtICpza2VsKVxcbiBcXG4gXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vtb25pdG9yZWRfcGlkID0gZ2V0cGlkKCk7XFxuIFxcbitcXHRlcnIgPSB0ZXN0X2xzbV9pbm9kZV9pZG1hcChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwidGVzdF9sc21faW5vZGVfaWRtYXBcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuIFxcdGVyciA9IHN0YWNrX21wcm90ZWN0KCk7XFxuIFxcdGlmICghQVNTRVJUX0VRKGVyciwgLTEsIFxcXCJzdGFja19tcHJvdGVjdFxcXCIpIHx8XFxuIFxcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXFxcInN0YWNrX21wcm90ZWN0XFxcIikpXFxuQEAgLTcxLDYgKzMwMCw4IEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcXG4gXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vjb3B5X3Rlc3QgPSAwO1xcbiBcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWJwcm1fY291bnQgPSAwO1xcbiBcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZW1wcm90ZWN0X2NvdW50ID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcXG4rXFx0c2tlbC1cXHUwMDNlYnNzLVxcdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xcbmluZGV4IDdkZTE3M2RhZjI3YjYuLjdlMzJmYmRkYmZhZGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXFxuQEAgLTg0LDYgKzg0LDg1IEBAIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbiBpbnQgbW9uaXRvcmVkX3BpZCA9IDA7XFxuIGludCBtcHJvdGVjdF9jb3VudCA9IDA7XFxuIGludCBicHJtX2NvdW50ID0gMDtcXG4rX191MzIgaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XFxuK19fdTMyIGlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xcbitcXG4rZW51bSB7XFxuK1xcdElOT0RFX0lETUFQX0NSRUFURVxcdD0gMVUgXFx1MDAzY1xcdTAwM2MgMCxcXG4rXFx0SU5PREVfSURNQVBfTElOS1xcdD0gMVUgXFx1MDAzY1xcdTAwM2MgMSxcXG4rXFx0SU5PREVfSURNQVBfU1lNTElOS1xcdD0gMVUgXFx1MDAzY1xcdTAwM2MgMixcXG4rXFx0SU5PREVfSURNQVBfTUtESVJcXHQ9IDFVIFxcdTAwM2NcXHUwMDNjIDMsXFxuK1xcdElOT0RFX0lETUFQX01LTk9EXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyA0LFxcbitcXHRJTk9ERV9JRE1BUF9QRVJNSVNTSU9OXFx0PSAxVSBcXHUwMDNjXFx1MDAzYyA1LFxcbit9O1xcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX21vbml0b3JlZF9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcXG4re1xcbitcXHRfX3UzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcXHUwMDNlXFx1MDAzZSAzMjtcXG4rXFxuK1xcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcXHUwMDI2XFx1MDAyNiBpZG1hcDtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGlzX2lkZW50aXR5X2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxcbit7XFxuK1xcdHJldHVybiBpZG1hcC1cXHUwMDNldWlkX21hcC5ucl9leHRlbnRzID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIGlkbWFwLVxcdTAwM2VnaWRfbWFwLm5yX2V4dGVudHMgPT0gMDtcXG4rfVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgcmVjb3JkX2lub2RlX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBfX3UzMiBob29rLCBpbnQgcmV0KVxcbit7XFxuK1xcdGlmIChyZXQgfHwgIWlzX21vbml0b3JlZF9pZG1hcChpZG1hcCkpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdGlmIChpc19pZGVudGl0eV9pZG1hcChpZG1hcCkpXFxuK1xcdFxcdGlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4gfD0gaG9vaztcXG4rXFx0ZWxzZVxcbitcXHRcXHRpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9jcmVhdGVcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX2xpbmtcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX3N5bWxpbmtcXFwiKVxcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9zeW1saW5rLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpvbGRfbmFtZSwgaW50IHJldClcXG4re1xcbitcXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9TWU1MSU5LLCByZXQpO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9ta2RpclxcXCIpXFxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdCAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfTUtESVIsIHJldCk7XFxuK31cXG4rXFxuK1NFQyhcXFwibHNtL2lub2RlX21rbm9kXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbWtub2QsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KVxcbit7XFxuK1xcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS9pbm9kZV9wZXJtaXNzaW9uXFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdCAgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIGludCByZXQpXFxuK3tcXG4rXFx0cmV0dXJuIHJlY29yZF9pbm9kZV9pZG1hcChpZG1hcCwgSU5PREVfSURNQVBfUEVSTUlTU0lPTiwgcmV0KTtcXG4rfVxcbiBcXG4gU0VDKFxcXCJsc20vZmlsZV9tcHJvdGVjdFxcXCIpXFxuIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6MzU6MzkuMjUyMDM3NzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzc4Nzg0MjY5MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNFQ1VSSVRZXCIsXG4gICAgXCJTRUNVUklUWV9TRUxJTlVYXCIsXG4gICAgXCJTRUNVUklUWV9TTUFDS1wiLFxuICAgIFwiQlBGX0xTTVwiLFxuICAgIFwiQ0FDSEVGSUxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNlY3VyaXR5X2lub2RlX2NyZWF0ZVwiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfc3ltbGlua1wiLFxuICAgIFwic2VjdXJpdHlfaW5vZGVfbWtkaXJcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rbm9kXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJ2ZnNfbWtvYmpcIixcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX21rbm9kXCIsXG4gICAgXCJ2ZnNfc3ltbGlua1wiLFxuICAgIFwidmZzX2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBhbmQgTFNNIGhvb2tzIChgc2VjdXJpdHlfaW5vZGVfKmApIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcGAgYXJndW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3Rpbmcgc2VjdXJpdHkgY2hlY2tzIGR1cmluZyBmaWxlIGNyZWF0aW9uLCBsaW5raW5nLCBhbmQgcGVybWlzc2lvbiBjaGVja3MgYWNyb3NzIG11bHRpcGxlIExTTXMgKFNFTGludXgsIFNtYWNrLCBCUEYpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzM2RlNjcxZWM4YTkyOTViMzk5YTBjYTViMWE0NDBlNjQ0ZjE0MGE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTY6MzU6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0XG4tLS0gYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbisrKyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuQEAgLTUxLDE0ICs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWRcIixcbiBcdFx0ICAgICAgIHJldCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cHJfZXJyKFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZFwiLFxuIFx0XHQgICAgICAgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC02NTgsNyArNjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAodW5saWtlbHkocmV0dmFsKSlcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaW5vZGVfcGVybWlzc2lvbik7XG4gXG5AQCAtNjk1LDcgKzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkXG4gXHRpZiAodW5saWtlbHkoKChpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQxODgsNyArNDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XHQvKiBzaG91bGRuJ3QgaXQgYmUgRU5PU1lTPyAqL1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuQEAgLTQyMTIsNyArNDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXG4gXHRtb2RlIFx1MDAyNj0gU19JQUxMVUdPO1xuIFx0bW9kZSB8PSBTX0lGUkVHO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpO1xuQEAgLTQzMjgsNyArNDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gXG4gLyoqXG5AQCAtNTI1OCw3ICs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTUzOTUsNyArNTM5NSw3IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG5AQCAtNTc4Myw3ICs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZGlyLVx1MDAzZWlfb3AtXHUwMDNlc3ltbGluaylcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTU5MDcsNyArNTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMjAsMjYgKzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGludCAqeGF0dHJfY291bnQpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0IHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGJvb2wgcmN1KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgc3RydWN0IGlhdHRyICphdHRyKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTQwNCwyNCArNDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdFx0XHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgICAgYm9vbCByY3UpO1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzayk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtOTAyLDkgKzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTkxMyw5ICs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkXG4gc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7IH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTI2LDE2ICs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk0Niw5ICs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0aW50IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTc0LDcgKzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTYxNCw2ICsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogdGhlIGZpbGUgYmVpbmcgY3JlYXRlZFxuICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlXG5AQCAtMTYyMiwxMiArMTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlKVxuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7XG4gXG5AQCAtMTY0OCw2ICsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlXG4gICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAbmV3X2RlbnRyeTogbmV3IGxpbmtcbkBAIC0xNjU2LDEyICsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTY4Miw2ICsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogc3ltYm9saWMgbGlua1xuICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWVcbkBAIC0xNjkwLDE2ICsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbiB9XG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcbkBAIC0xNzA5LDExICsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTtcbiBcbkBAIC0xNzM1LDYgKzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBmaWxlXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcbkBAIC0xNzQ3LDEyICsxNzUzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4gfVxuIFxuIC8qKlxuQEAgLTE4MjMsNiArMTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogaW5vZGVcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcbiAgKlxuQEAgLTE4MzUsMTEgKzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzaylcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMzA3NCwxMiArMzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgIFx1MDAyNmFkKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcbiB9XG5AQCAtMzA4OSwxMiArMzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTtcbiB9XG5AQCAtMzEwNCw3ICszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTtcbiB9XG5AQCAtMzIzNiwxMyArMzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuIFxuIC8qKlxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZFxuICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWRcbiAgKlxuICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0b1xuICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4ge1xuIFx0aW50IG1hc2s7XG4gXHR1MzIgcGVybXM7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTEwODksMTQgKzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIC8qKlxuICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdFxuICAqIEBkaXI6IHVudXNlZFxuICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0c3RydWN0IHNtYWNrX2tub3duICppc3A7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5AQCAtMTIyNiw2ICsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxuICAqXG5AQCAtMTIzMyw3ICsxMjM1LDggQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICBpbnQgbWFzaylcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5AQCAtMSwxOCArMSwzMCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuIFxuIC8qXG4gICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcImxzbS5za2VsLmhcIlxuICNpbmNsdWRlIFwibHNtX3RhaWxjYWxsLnNrZWwuaFwiXG4gXG4gY2hhciAqQ01EX0FSR1NbXSA9IHtcInRydWVcIiwgTlVMTH07XG4gXG4rZW51bSB7XG4rXHRJTk9ERV9JRE1BUF9BTEwgPSAoMVUgXHUwMDNjXHUwMDNjIDYpIC0gMSxcbit9O1xuK1xuIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4ge1xuIFx0aW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzO1xuQEAgLTMwLDYgKzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0ZG8ge1xuK1x0XHRyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7XG4rXHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTtcbitcdGludCBmZCwgc2F2ZWRfZXJybm8gPSAwO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcbitcdFx0c2F2ZWRfZXJybm8gPSBFSU87XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAoc2F2ZWRfZXJybm8pIHtcbitcdFx0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0aW50IGxlbjtcbitcbitcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIvcHJvYy8lZC8lc1wiLCBwaWQsIG5hbWUpO1xuK1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuK1x0XHRlcnJubyA9IEVPVkVSRkxPVztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZClcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0cGlkX3QgcGlkLCB3YWl0ZWQ7XG4rXHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKHBpZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxuK1x0XHRcdF9leGl0KDEpO1xuK1x0XHRyYWlzZShTSUdTVE9QKTtcbitcdFx0X2V4aXQoMCk7XG4rXHR9XG4rXG4rXHRkbyB7XG4rXHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIFdVTlRSQUNFRCk7XG4rXHR9IHdoaWxlICh3YWl0ZWQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcdGlmICh3YWl0ZWQgIT0gcGlkKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7XG4rXHRcdHBpZCA9IC0xO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovXG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInNldGdyb3Vwc1wiLCBcImRlbnlcIikgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVOT0VOVClcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInVpZF9tYXBcIiwgXCIwIDAgMVwiKSB8fFxuK1x0ICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXCJnaWRfbWFwXCIsIFwiMCAwIDFcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkL25zL3VzZXJcIiwgcGlkKTtcbitcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbitcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbitcbitvdXQ6XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0aWYgKHBpZCBcdTAwM2UgMCkge1xuK1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHRcdGRvIHtcbitcdFx0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCk7XG4rXHRcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1x0fVxuK1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZClcbit7XG4rXHRzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0ge1xuK1x0XHQuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLFxuK1x0fTtcbitcdGludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTtcbitcbitcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcbitcdGlmICh1c2VybnNfZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogQSBkZXRhY2hlZCB0bXBmcyBhdm9pZHMgcmVseWluZyBvbiB0aGUgaG9zdCB0ZXN0IGRpcmVjdG9yeSBzdXBwb3J0aW5nIGlkbWFwcy4gKi9cbitcdGZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCBcInRtcGZzXCIsIEZTT1BFTl9DTE9FWEVDKTtcbitcdGlmIChmc2ZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7XG4rXHRpZiAobW50ZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7XG4rXHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcIlwiLCBBVF9FTVBUWV9QQVRILCBcdTAwMjZhdHRyLFxuK1x0XHQgICAgc2l6ZW9mKGF0dHIpKSkge1xuK1x0XHRjbG9zZShtbnRmZCk7XG4rXHRcdG1udGZkID0gLTE7XG4rXHR9XG4rXG4rb3V0OlxuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGlmIChmc2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZnNmZCk7XG4rXHRpZiAodXNlcm5zX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodXNlcm5zX2ZkKTtcbitcdGVycm5vID0gc2F2ZWRfZXJybm87XG4rXHRyZXR1cm4gbW50ZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxuK3tcbitcdGludCBmZCA9IC0xLCByZXQgPSAtMTtcbitcbitcdGZkID0gb3BlbmF0KGRpcmZkLCBcImZpbGVcIiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxuK1x0XHQgICAgMDYwMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCJjcmVhdGVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Y2xvc2UoZmQpO1xuK1x0ZmQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFwiZGlyXCIsIDA3MDApLCBcIm1rZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcInRhcmdldFwiLCBkaXJmZCwgXCJzeW1saW5rXCIpLCBcInN5bWxpbmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCBcImZpbGVcIiwgZGlyZmQsIFwibGlua1wiLCAwKSwgXCJsaW5rXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG1rZmlmb2F0KGRpcmZkLCBcImZpZm9cIiwgMDYwMCksIFwibWtub2RcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gMDtcbitvdXQ6XG4rXHRpZiAoZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmZCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJsaW5rXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZmlmb1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcInN5bWxpbmtcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJmaWxlXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZGlyXCIsIEFUX1JFTU9WRURJUik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXG4re1xuK1x0Y2hhciB0bXBkaXJbXSA9IFwiL3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXCI7XG4rXHRfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDtcbitcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xuK1x0aW50IHJldCA9IC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXCJta2R0ZW1wXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTtcbitcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcIm9wZW5fdG1wZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXCJjcmVhdGVfaWRtYXBwZWRfdG1wZnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgXCJpZGVudGl0eV9pZG1hcFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXG4rXHRcdCAgICAgICBcImlkbWFwcGVkX21vdW50XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxuK1x0XHQgICAgICAgXCJpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdHJldCA9IEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCxcbitcdFx0XHRcImlub2RlX2lkbWFwcGVkX21vdW50X3NlZW5cIikgPyAwIDogLTE7XG4rXG4rb3V0OlxuK1x0aWYgKGlkbWFwcGVkX2RpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xuK1x0aWYgKGRpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZGlyZmQpO1xuK1x0cm1kaXIodG1wZGlyKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG5AQCAtNTMsNiArMjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiBcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiBcbitcdGVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfbHNtX2lub2RlX2lkbWFwXCIpKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuIFx0ZXJyID0gc3RhY2tfbXByb3RlY3QoKTtcbiBcdGlmICghQVNTRVJUX0VRKGVyciwgLTEsIFwic3RhY2tfbXByb3RlY3RcIikgfHxcbiBcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXCJzdGFja19tcHJvdGVjdFwiKSlcbkBAIC03MSw2ICszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3Rlc3QgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9jb3VudCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5AQCAtODQsNiArODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIGludCBtb25pdG9yZWRfcGlkID0gMDtcbiBpbnQgbXByb3RlY3RfY291bnQgPSAwO1xuIGludCBicHJtX2NvdW50ID0gMDtcbitfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitlbnVtIHtcbitcdElOT0RFX0lETUFQX0NSRUFURVx0PSAxVSBcdTAwM2NcdTAwM2MgMCxcbitcdElOT0RFX0lETUFQX0xJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDEsXG4rXHRJTk9ERV9JRE1BUF9TWU1MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAyLFxuK1x0SU5PREVfSURNQVBfTUtESVJcdD0gMVUgXHUwMDNjXHUwMDNjIDMsXG4rXHRJTk9ERV9JRE1BUF9NS05PRFx0PSAxVSBcdTAwM2NcdTAwM2MgNCxcbitcdElOT0RFX0lETUFQX1BFUk1JU1NJT05cdD0gMVUgXHUwMDNjXHUwMDNjIDUsXG4rfTtcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuK3tcbitcdF9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcbitcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcdTAwMjZcdTAwMjYgaWRtYXA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbit7XG4rXHRyZXR1cm4gaWRtYXAtXHUwMDNldWlkX21hcC5ucl9leHRlbnRzID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgaWRtYXAtXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0ICAgICAgX191MzIgaG9vaywgaW50IHJldClcbit7XG4rXHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSlcbitcdFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xuK1x0ZWxzZVxuK1x0XHRpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX2NyZWF0ZVwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9zeW1saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9ta2RpclwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LRElSLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfbWtub2RcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfcGVybWlzc2lvblwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpO1xuK31cbiBcbiBTRUMoXCJsc20vZmlsZV9tcHJvdGVjdFwiKVxuIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjM1OjM5LjI1MjA0MDcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMyNjQ2NTkzNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNb3VudCBJRCBNYXBwaW5nIGluIExTTSBIb29rcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCAqd2FycmFudCogZnV6emluZywgbm8gcXVlc3Rpb24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCBpbnRvIHZhcmlvdXMgTFNNIGhvb2tzIHJlbGF0ZWQgdG8gaW5vZGVzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGFsdGVyYXRpb24gdG8gdGhlIGNvcmUgVkZTIGFuZCBzZWN1cml0eSBzdWJzeXN0ZW0uIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgdGhlIHdvcmtzIOKAkyBmdW5kYW1lbnRhbCBvcGVyYXRpb25zLiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2AsIGBmcy9uYW1laS5jYCwgYW5kIHNldmVyYWwgc2VjdXJpdHktcmVsYXRlZCBmaWxlcyAoaW5jbHVkaW5nIFNFTGludXggYW5kIFNtYWNrKSBjb25maXJtcyB0aGlzIGFzIGEgcG90ZW50aWFsIHRyb3VibGUgc3BvdC4gVXBkYXRpbmcgdGhlIEJQRiB0ZXN0cyBmdXJ0aGVyIHVuZGVyc2NvcmVzIHRoZSBpbXBvcnRhbmNlLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGF0IHBhc3NpbmcgdGhlIGBpZG1hcGAgdG8gTFNNIGhvb2tzIGdpdmVzIG1vZHVsZXMgKFNFTGludXgsIFNtYWNrLCBCUEYsIGV0Yy4pIGFjY2VzcyB0byB0aGUgbW91bnQgSUQgbWFwcGluZyBkdXJpbmcgc2VjdXJpdHkgZGVjaXNpb25zLiBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgcmVmYWN0b3Jpbmc7IGl0J3MgYSBzdHJ1Y3R1cmFsIGNoYW5nZSB0aGF0IGNhbiBpbmZsdWVuY2UgYWNjZXNzIGNvbnRyb2wgZGVjaXNpb25zIGJhc2VkIG9uIG1vdW50IG5hbWVzcGFjZXMuIFdlIG5lZWQgdG8gZXhwbG9yZSB0aGVzZSBuZXcgY29kZSBwYXRocy5cblxuU28sIGZ1enppbmcgaXMgYSAqZ28qLiBOb3csIHRoZSBjb25jcmV0ZSBwbGFuLiBJIG5lZWQgdG8gZXh0cmFjdCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkLCB3aGljaCBpcyBzdHJhaWdodGZvcndhcmQuIFdlIGhhdmU6XG5cbiogICBgc2VjdXJpdHlfaW5vZGVfY3JlYXRlYCwgYHNlY3VyaXR5X2lub2RlX2xpbmtgLCBgc2VjdXJpdHlfaW5vZGVfc3ltbGlua2AsIGBzZWN1cml0eV9pbm9kZV9ta2RpcmAsIGBzZWN1cml0eV9pbm9kZV9ta25vZGAsIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYFxuKiAgIGBzZWxpbnV4X2lub2RlX2NyZWF0ZWAsIGBzZWxpbnV4X2lub2RlX2xpbmtgLCBgc2VsaW51eF9pbm9kZV9zeW1saW5rYCwgYHNlbGludXhfaW5vZGVfbWtkaXJgLCBgc2VsaW51eF9pbm9kZV9ta25vZGAsIGBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb25gXG4qICAgYHNtYWNrX2lub2RlX2xpbmtgLCBgc21hY2tfaW5vZGVfcGVybWlzc2lvbmBcblxuVGhlc2UgYmVjb21lIHRoZSBgRm9jdXNTeW1ib2xzYCBmb3Igb3VyIGZ1enppbmcgY2FtcGFpZ24uIE5leHQgc3RlcDogY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIGlkZW50aWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBCYXNlZCBvbiB0aGUgZmlsZSBtb2RpZmljYXRpb25zLCBpdCBsb29rcyBsaWtlIHdlJ2xsIG5lZWQgYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBhbmQgYEJQRl9MU01gIGVuYWJsZWQgZm9yIGZ1bGwgY292ZXJhZ2UuXG5cbkxldCdzIGRvIGEgcXVpY2sgY2hlY2sgb24gdGhlIGBzZWN1cml0eV9pbm9kZV8qYCBmdW5jdGlvbnMuIFRoZXkncmUgcHJvYmFibHkgdGhlIG1vc3QgYmFzaWMgb25lcyB0aGF0IHdpbGwgcmVhY2ggbXVsdGlwbGUgTFNNIG1vZHVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDc0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NDI6NTEuODk4NjM3OTc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjE3MDIwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkgc2VjdXJpdHlfaW5vZGVfKGNyZWF0ZXxsaW5rfHN5bWxpbmt8bWtkaXJ8bWtub2R8cGVybWlzc2lvbilcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zZWN1cml0eS5oPTQwND1pbnQgc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA2LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQwNzppbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDA4LVxcdFxcdFxcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MDk9dm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaC00MTAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQxMTppbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDEyLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg9NDEzPWludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQxNDppbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQxNS1cXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKTtcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5Lmg6NDE2OmludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oLTQxNy1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MTg9aW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaDo0MTk6aW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDIwLVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2VjdXJpdHkuaD00MjU9aW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDI2LVxcdFxcdFxcdCAgICAgICBib29sIHJjdSk7XFxuaW5jbHVkZS9saW51eC9zZWN1cml0eS5oOjQyNzppbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgtNDI4LVxcdFxcdFxcdCAgICAgIGludCBtYXNrKTtcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmM9MTYwOT1pbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE2MjUtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNjI2OmludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTYyNy1cXHRcXHRcXHQgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjQyPXZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY2MC0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2NjE6aW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNjYyLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xNjc4PWludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY5NS0gKi9cXG5zZWN1cml0eS9zZWN1cml0eS5jOjE2OTY6aW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTY5Ny1cXHRcXHRcXHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzE1LSAqL1xcbnNlY3VyaXR5L3NlY3VyaXR5LmM6MTcxNjppbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTcxNy1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jPTE3MzQ9aW50IHNlY3VyaXR5X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE3NTUtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxNzU2OmludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VjdXJpdHkuYy0xNzU3LVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxcbi0tXFxuc2VjdXJpdHkvc2VjdXJpdHkuYz0xODIyPWludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5zZWN1cml0eS9zZWN1cml0eS5jLTE4NDQtICovXFxuc2VjdXJpdHkvc2VjdXJpdHkuYzoxODQ1OmludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbnNlY3VyaXR5L3NlY3VyaXR5LmMtMTg0Ni1cXHRcXHRcXHQgICAgICBpbnQgbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NDI6NTQuOTYwMzQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MjE1NTQ5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvcmUgVkZTL1NlY3VyaXR5IEhvb2sgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgY2hhbmdlcywgYW5kIGl0IHNlZW1zIHRoZSBmb2N1cyBpcyBvbiBjb3JlIFZGUyBhbmQgc2VjdXJpdHkgaG9va3MuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZXNlIHN5bWJvbHM6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYC4gVGhlc2UgYXJlIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgZm9yIGFjY2VzcyBjb250cm9sIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSwgc28gYW55IGNoYW5nZXMgaGVyZSBhcmUgY3JpdGljYWwuXG5cbk9mIGNvdXJzZSwgSSBjYW4ndCBpZ25vcmUgdGhlIFNFTGludXggaW1wbGljYXRpb25zIOKAkyB0aGUgYHNlbGludXhfaW5vZGVfKmAgZnVuY3Rpb25zIGFyZSBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IFNFTGludXggaXMgaW50ZWdyYXRpbmcuIFNvIEknbGwgbmVlZCB0byBhbmFseXplIGBzZWxpbnV4X2lub2RlX2NyZWF0ZWAsIGBzZWxpbnV4X2lub2RlX2xpbmtgLCBgc2VsaW51eF9pbm9kZV9zeW1saW5rYCwgYHNlbGludXhfaW5vZGVfbWtkaXJgLCBgc2VsaW51eF9pbm9kZV9ta25vZGAsIGFuZCBgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uYCBhbG9uZ3NpZGUgdGhlIGJhc2UgaG9va3MuXG5cbkFuZCBpdCdzIG5vdCBqdXN0IFNFTGludXg7IFNtYWNrIHNlZW1zIHRvIGJlIGludm9sdmVkIHRvbywgc3BlY2lmaWNhbGx5IHdpdGggYHNtYWNrX2lub2RlX2xpbmtgIGFuZCBgc21hY2tfaW5vZGVfcGVybWlzc2lvbmAuIFNvIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmaXQgaW4uXG5cblRoZSBmaXJzdCB0aGluZyBJJ2xsIGNoZWNrIGlzIHdoZXRoZXIgU0VMaW51eCBhbmQgU21hY2sgYXJlIHVzaW5nIHN0YXRpYyBvciBkeW5hbWljIGxpbmtpbmcgZm9yIHRoZWlyIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBzZWN1cml0eSBtb2R1bGVzIGFyZSBkZXNpZ25lZCB0byBpbnRlcmFjdC4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzM3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjQzOjQwLjg4MTkwNDY0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTkzNjg4NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGludXhfaW5vZGVfKGNyZWF0ZXxsaW5rfHN5bWxpbmt8bWtkaXJ8bWtub2R8cGVybWlzc2lvbilcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTMwMTE9c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2luaXRfc2VjdXJpdHlfYW5vbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwNzYtXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMwNzc6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwNzgtXFx0XFx0XFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA4Mi1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6MzA4MzpzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA4NC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz0zMDg5PXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMDkzLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMDk0OnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzA5NS1cXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMwOTktXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMxMDA6c3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtMzEwMS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1hc2spXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzEwNj1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMTEwLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMTExOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMxMTItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBkZXZfdCBkZXYpXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM9MzIyMz1zdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDItLyoqXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjMyNDM6ICogc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uIC0gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdGFzayBjYW4gYWNjZXNzIGFuIGlub2RlXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTMyNDQtICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUwLSAqL1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzozMjUxOnN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy0zMjUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jPTQyNjM9c3RhdGljIGludCBzZWxpbnV4X2ZpbGVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MjgwLVxcdCAqIFNpbmNlIHRoZSBpbm9kZSBsYWJlbCBvciBwb2xpY3kgc2Vxbm8gbWF5IGhhdmUgY2hhbmdlZFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo0MjgxOlxcdCAqIGJldHdlZW4gdGhlIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiBjaGVjayBhbmQgdGhlIHNhdmluZ1xcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy00MjgyLVxcdCAqIG9mIHN0YXRlIGFib3ZlLCByZWNoZWNrIHRoYXQgYWNjZXNzIGlzIHN0aWxsIHBlcm1pdHRlZC5cXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYz03NTY3PXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfaG9va19saXN0IHNlbGludXhfaG9va3NbXSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYwNy1cXHRMU01fSE9PS19JTklUKGlub2RlX2luaXRfc2VjdXJpdHlfYW5vbiwgc2VsaW51eF9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24pLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjA4OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfY3JlYXRlLCBzZWxpbnV4X2lub2RlX2NyZWF0ZSksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MDk6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9saW5rLCBzZWxpbnV4X2lub2RlX2xpbmspLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjEwLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfdW5saW5rLCBzZWxpbnV4X2lub2RlX3VubGluayksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jOjc2MTE6XFx0TFNNX0hPT0tfSU5JVChpbm9kZV9zeW1saW5rLCBzZWxpbnV4X2lub2RlX3N5bWxpbmspLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjEyOlxcdExTTV9IT09LX0lOSVQoaW5vZGVfbWtkaXIsIHNlbGludXhfaW5vZGVfbWtkaXIpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjEzLVxcdExTTV9IT09LX0lOSVQoaW5vZGVfcm1kaXIsIHNlbGludXhfaW5vZGVfcm1kaXIpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYzo3NjE0OlxcdExTTV9IT09LX0lOSVQoaW5vZGVfbWtub2QsIHNlbGludXhfaW5vZGVfbWtub2QpLFxcbnNlY3VyaXR5L3NlbGludXgvaG9va3MuYy03NjE1LVxcdExTTV9IT09LX0lOSVQoaW5vZGVfcmVuYW1lLCBzZWxpbnV4X2lub2RlX3JlbmFtZSksXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMtNzYxNy1cXHRMU01fSE9PS19JTklUKGlub2RlX2ZvbGxvd19saW5rLCBzZWxpbnV4X2lub2RlX2ZvbGxvd19saW5rKSxcXG5zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmM6NzYxODpcXHRMU01fSE9PS19JTklUKGlub2RlX3Blcm1pc3Npb24sIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiksXFxuc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jLTc2MTktXFx0TFNNX0hPT0tfSU5JVChpbm9kZV9zZXRhdHRyLCBzZWxpbnV4X2lub2RlX3NldGF0dHIpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo0Mzo0My40NzU2MDI1ODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTgwMDA2ODk0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgU0VMaW51eCBGdW5jdGlvbiBMaXN0aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBkb2N1bWVudCB0aGVzZSBTRUxpbnV4IGZ1bmN0aW9ucy4gRmlyc3Qgb2ZmLCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBTRUxpbnV4IGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBUaGF0J3Mga2V5LCBJIGRvbid0IHdhbnQgdG8gbGlzdCB0aG9zZSBiZWNhdXNlLCB3ZWxsLCB0aGF0J3Mgbm90IHdoYXQncyBpbnRlcmVzdGluZy4gSSB3YW50IHRoZSBzdHVmZiB0aGF0J3MgYWN0dWFsbHkgYWNjZXNzaWJsZS4gVGhlIGBzZWN1cml0eV9pbm9kZV8qYCBmYW1pbHkgYXJlIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBQZXJmZWN0LCB0aGF0J3Mgd2hhdCBJJ20gYWZ0ZXIuXG5cblJpZ2h0LCBzbywgbGV0J3Mgc2VlLCBJJ2xsIHB1dCB0aGVzZSBpbiB0aGUgbGlzdDpcbmBzZWN1cml0eV9pbm9kZV9jcmVhdGVgXG5gc2VjdXJpdHlfaW5vZGVfbGlua2BcbmBzZWN1cml0eV9pbm9kZV9zeW1saW5rYFxuYHNlY3VyaXR5X2lub2RlX21rZGlyYFxuYHNlY3VyaXR5X2lub2RlX21rbm9kYFxuYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gXG5cbk5vdywgbGV0J3Mga2VlcCBhbiBleWUgb24gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuIEkgdGhpbmsgYFNFQ1VSSVRZYCBpcyByZWxldmFudCBoZXJlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgdGhhdCdzIGVub3VnaCB0byBjb250cm9sIHRoaXMgc2V0IG9mIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY3MiwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo1MjowMS40NzYyOTUyMTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzg2NzUzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0VDVVJJVFlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkvS2NvbmZpZz04PXNvdXJjZSBcXFwic2VjdXJpdHkva2V5cy9LY29uZmlnXFxcIlxcbnNlY3VyaXR5L0tjb25maWctOS1cXG5zZWN1cml0eS9LY29uZmlnOjEwOmNvbmZpZyBTRUNVUklUWV9ETUVTR19SRVNUUklDVFxcbnNlY3VyaXR5L0tjb25maWctMTEtXFx0Ym9vbCBcXFwiUmVzdHJpY3QgdW5wcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUga2VybmVsIHN5c2xvZ1xcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWc9NTI9Y29uZmlnIE1TRUFMX1NZU1RFTV9NQVBQSU5HU1xcbi0tXFxuc2VjdXJpdHkvS2NvbmZpZy03Mi1cXG5zZWN1cml0eS9LY29uZmlnOjczOmNvbmZpZyBTRUNVUklUWVxcbnNlY3VyaXR5L0tjb25maWctNzQtXFx0Ym9vbCBcXFwiRW5hYmxlIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHNcXFwiXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnPTg2PWNvbmZpZyBIQVNfU0VDVVJJVFlfQVVESVRcXG4tLVxcbnNlY3VyaXR5L0tjb25maWctOTAtXFxuc2VjdXJpdHkvS2NvbmZpZzo5MTpjb25maWcgU0VDVVJJVFlGU1xcbnNlY3VyaXR5L0tjb25maWctOTItXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTk4LVxcbnNlY3VyaXR5L0tjb25maWc6OTk6Y29uZmlnIFNFQ1VSSVRZX05FVFdPUktcXG5zZWN1cml0eS9LY29uZmlnLTEwMC1cXHRib29sIFxcXCJTb2NrZXQgYW5kIE5ldHdvcmtpbmcgU2VjdXJpdHkgSG9va3NcXFwiXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTEwNy1cXG5zZWN1cml0eS9LY29uZmlnOjEwODpjb25maWcgU0VDVVJJVFlfSU5GSU5JQkFORFxcbnNlY3VyaXR5L0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkluZmluaWJhbmQgU2VjdXJpdHkgSG9va3NcXFwiXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTExNi1cXG5zZWN1cml0eS9LY29uZmlnOjExNzpjb25maWcgU0VDVVJJVFlfTkVUV09SS19YRlJNXFxuc2VjdXJpdHkvS2NvbmZpZy0xMTgtXFx0Ym9vbCBcXFwiWEZSTSAoSVBTZWMpIE5ldHdvcmtpbmcgU2VjdXJpdHkgSG9va3NcXFwiXFxuLS1cXG5zZWN1cml0eS9LY29uZmlnLTEyOS1cXG5zZWN1cml0eS9LY29uZmlnOjEzMDpjb25maWcgU0VDVVJJVFlfUEFUSFxcbnNlY3VyaXR5L0tjb25maWctMTMxLVxcdGJvb2wgXFxcIlNlY3VyaXR5IGhvb2tzIGZvciBwYXRobmFtZSBiYXNlZCBhY2Nlc3MgY29udHJvbFxcXCJcXG4tLVxcbnNlY3VyaXR5L0tjb25maWc9MjY4PWNvbmZpZyBMU01cXG4tLVxcbnNlY3VyaXR5L0tjb25maWctMjg0LVxcbnNlY3VyaXR5L0tjb25maWc6Mjg1OmNvbmZpZyBTRUNVUklUWV9DT01NT05DQVBfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L0tjb25maWctMjg2LVxcdGJvb2wgXFxcIkJ1aWxkIEtVbml0IHRlc3RzIGZvciBjb21tb25jYXBcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIkFwcEFybW9yIHN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTE3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6MTg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0xOS1cXHRib29sIFxcXCJCdWlsZCBBcHBBcm1vciB3aXRoIGRlYnVnIGNvZGVcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mjg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX0FTU0VSVFNcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTI5LVxcdGJvb2wgXFxcIkJ1aWxkIEFwcEFybW9yIHdpdGggZGVidWdnaW5nIGFzc2VydHNcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTM3LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6Mzg6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0RFQlVHX01FU1NBR0VTXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEZWJ1ZyBtZXNzYWdlcyBlbmFibGVkIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTQ2LVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWc6NDc6Y29uZmlnIFNFQ1VSSVRZX0FQUEFSTU9SX0lOVFJPU1BFQ1RfUE9MSUNZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy00OC1cXHRib29sIFxcXCJBbGxvdyBsb2FkZWQgcG9saWN5IHRvIGJlIGludHJvc3BlY3RlZFxcXCJcXG4tLVxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNTgtXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZzo1OTpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfSEFTSFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctNjAtXFx0Ym9vbCBcXFwiRW5hYmxlIGludHJvc3BlY3Rpb24gb2Ygc2hhMjU2IGhhc2hlcyBmb3IgbG9hZGVkIHByb2ZpbGVzXFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy03MC1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjcxOmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9IQVNIX0RFRkFVTFRcXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTcyLSAgICAgICBib29sIFxcXCJFbmFibGUgcG9saWN5IGhhc2ggaW50cm9zcGVjdGlvbiBieSBkZWZhdWx0XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04My1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjg0OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9FWFBPUlRfQklOQVJZXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy04NS1cXHRib29sIFxcXCJBbGxvdyBleHBvcnRpbmcgdGhlIHJhdyBiaW5hcnkgcG9saWN5XFxcIlxcbi0tXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05NS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjk2OmNvbmZpZyBTRUNVUklUWV9BUFBBUk1PUl9QQVJBTk9JRF9MT0FEXFxuc2VjdXJpdHkvYXBwYXJtb3IvS2NvbmZpZy05Ny1cXHRib29sIFxcXCJQZXJmb3JtIGZ1bGwgdmVyaWZpY2F0aW9uIG9mIGxvYWRlZCBwb2xpY3lcXFwiXFxuLS1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnLTEwNi1cXG5zZWN1cml0eS9hcHBhcm1vci9LY29uZmlnOjEwNzpjb25maWcgU0VDVVJJVFlfQVBQQVJNT1JfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2FwcGFybW9yL0tjb25maWctMTA4LVxcdHRyaXN0YXRlIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgcG9saWN5X3VucGFjay5jXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZy01LVxcbnNlY3VyaXR5L2lwZS9LY29uZmlnOjY6bWVudWNvbmZpZyBTRUNVUklUWV9JUEVcXG5zZWN1cml0eS9pcGUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIkludGVncml0eSBQb2xpY3kgRW5mb3JjZW1lbnQgKElQRSlcXFwiXFxuLS1cXG5zZWN1cml0eS9pcGUvS2NvbmZpZz05OD1lbmRtZW51XFxuc2VjdXJpdHkvaXBlL0tjb25maWctOTktXFxuc2VjdXJpdHkvaXBlL0tjb25maWc6MTAwOmNvbmZpZyBTRUNVUklUWV9JUEVfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2lwZS9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBLVW5pdCB0ZXN0cyBmb3IgSVBFXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTItXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzozOmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS1xcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctNC1cXHRib29sIFxcXCJMYW5kbG9jayBzdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZy0yMy1cXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnOjI0OmNvbmZpZyBTRUNVUklUWV9MQU5ETE9DS19MT0dcXG5zZWN1cml0eS9sYW5kbG9jay9LY29uZmlnLTI1LVxcdGJvb2xcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMjgtXFxuc2VjdXJpdHkvbGFuZGxvY2svS2NvbmZpZzoyOTpjb25maWcgU0VDVVJJVFlfTEFORExPQ0tfS1VOSVRfVEVTVFxcbnNlY3VyaXR5L2xhbmRsb2NrL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiS1VuaXQgdGVzdHMgZm9yIExhbmRsb2NrXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfTE9BRFBJTlxcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlBpbiBsb2FkIG9mIGtlcm5lbCBmaWxlcyAobW9kdWxlcywgZncsIGV0YykgdG8gb25lIGZpbGVzeXN0ZW1cXFwiXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMTMtXFxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjE0OmNvbmZpZyBTRUNVUklUWV9MT0FEUElOX0VORk9SQ0VcXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiRW5mb3JjZSBMb2FkUGluIGF0IGJvb3RcXFwiXFxuLS1cXG5zZWN1cml0eS9sb2FkcGluL0tjb25maWctMjQtXFxuc2VjdXJpdHkvbG9hZHBpbi9LY29uZmlnOjI1OmNvbmZpZyBTRUNVUklUWV9MT0FEUElOX1ZFUklUWVxcbnNlY3VyaXR5L2xvYWRwaW4vS2NvbmZpZy0yNi1cXHRib29sIFxcXCJBbGxvdyByZWFkaW5nIGZpbGVzIGZyb20gY2VydGFpbiBvdGhlciBmaWxlc3lzdGVtcyB0aGF0IHVzZSBkbS12ZXJpdHlcXFwiXFxuLS1cXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnOjE6Y29uZmlnIFNFQ1VSSVRZX0xPQ0tET1dOX0xTTVxcbnNlY3VyaXR5L2xvY2tkb3duL0tjb25maWctMi1cXHRib29sIFxcXCJCYXNpYyBtb2R1bGUgZm9yIGVuZm9yY2luZyBrZXJuZWwgbG9ja2Rvd25cXFwiXFxuLS1cXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTgtXFxuc2VjdXJpdHkvbG9ja2Rvd24vS2NvbmZpZzo5OmNvbmZpZyBTRUNVUklUWV9MT0NLRE9XTl9MU01fRUFSTFlcXG5zZWN1cml0eS9sb2NrZG93bi9LY29uZmlnLTEwLVxcdGJvb2wgXFxcIkVuYWJsZSBsb2NrZG93biBMU00gZWFybHkgaW4gaW5pdFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NhZmVzZXRpZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc2FmZXNldGlkL0tjb25maWc6Mjpjb25maWcgU0VDVVJJVFlfU0FGRVNFVElEXFxuc2VjdXJpdHkvc2FmZXNldGlkL0tjb25maWctMy0gICAgICAgIGJvb2wgXFxcIkdhdGUgc2V0aWQgdHJhbnNpdGlvbnMgdG8gbGltaXQgQ0FQX1NFVHtVL0d9SUQgY2FwYWJpbGl0aWVzXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMy1cXHRib29sIFxcXCJTRUxpbnV4IFN1cHBvcnRcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctMTEtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjEyOmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTRUxpbnV4IGJvb3QgcGFyYW1ldGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI1LVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzoyNjpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlNFTGludXggRGV2ZWxvcG1lbnQgU3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy0zOS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlNFTGludXggQVZDIFN0YXRpc3RpY3NcXFwiXFxuLS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNDgtXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnOjQ5OmNvbmZpZyBTRUNVUklUWV9TRUxJTlVYX1NJRFRBQl9IQVNIX0JJVFNcXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWctNTAtXFx0aW50IFxcXCJTRUxpbnV4IHNpZHRhYiBoYXNodGFibGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy02MC1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NjE6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfU0lEMlNUUl9DQUNIRV9TSVpFXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTYyLVxcdGludCBcXFwiU0VMaW51eCBTSUQgdG8gY29udGV4dCBzdHJpbmcgdHJhbnNsYXRpb24gY2FjaGUgc2l6ZVxcXCJcXG4tLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03MS1cXG5zZWN1cml0eS9zZWxpbnV4L0tjb25maWc6NzI6Y29uZmlnIFNFQ1VSSVRZX1NFTElOVVhfQVZDX0hBU0hfQklUU1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy03My1cXHRpbnQgXFxcIlNFTGludXggYXZjIGhhc2h0YWJsZSBzaXplXFxcIlxcbi0tXFxuc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnLTgyLVxcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZzo4Mzpjb25maWcgU0VDVVJJVFlfU0VMSU5VWF9ERUJVR1xcbnNlY3VyaXR5L3NlbGludXgvS2NvbmZpZy04NC1cXHRib29sIFxcXCJTRUxpbnV4IGtlcm5lbCBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlNpbXBsaWZpZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIEtlcm5lbCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnOjE2OmNvbmZpZyBTRUNVUklUWV9TTUFDS19CUklOR1VQXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZy0xNy1cXHRib29sIFxcXCJSZXBvcnRpbmcgb24gYWNjZXNzIGdyYW50ZWQgYnkgU21hY2sgcnVsZXNcXFwiXFxuLS1cXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTMzLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWc6MzQ6Y29uZmlnIFNFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUlxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiUGFja2V0IG1hcmtpbmcgdXNpbmcgc2VjbWFya3MgZm9yIG5ldGZpbHRlclxcXCJcXG4tLVxcbnNlY3VyaXR5L3NtYWNrL0tjb25maWctNDQtXFxuc2VjdXJpdHkvc21hY2svS2NvbmZpZzo0NTpjb25maWcgU0VDVVJJVFlfU01BQ0tfQVBQRU5EX1NJR05BTFNcXG5zZWN1cml0eS9zbWFjay9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlRyZWF0IGRlbGl2ZXJpbmcgc2lnbmFscyBhcyBhbiBhcHBlbmQgb3BlcmF0aW9uXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOmNvbmZpZyBTRUNVUklUWV9UT01PWU9cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlRPTU9ZTyBMaW51eCBTdXBwb3J0XFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTUtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6MTY6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19NQVhfQUNDRVBUX0VOVFJZXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMTctXFx0aW50IFxcXCJEZWZhdWx0IG1heGltYWwgY291bnQgZm9yIGxlYXJuaW5nIG1vZGVcXFwiXFxuLS1cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0yOC1cXG5zZWN1cml0eS90b21veW8vS2NvbmZpZzoyOTpjb25maWcgU0VDVVJJVFlfVE9NT1lPX01BWF9BVURJVF9MT0dcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy0zMC1cXHRpbnQgXFxcIkRlZmF1bHQgbWF4aW1hbCBjb3VudCBmb3IgYXVkaXQgbG9nXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctMzktXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6NDA6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVJcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy00MS1cXHRib29sIFxcXCJBY3RpdmF0ZSB3aXRob3V0IGNhbGxpbmcgdXNlcnNwYWNlIHBvbGljeSBsb2FkZXIuXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTUtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6NTY6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19QT0xJQ1lfTE9BREVSXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNTctXFx0c3RyaW5nIFxcXCJMb2NhdGlvbiBvZiB1c2Vyc3BhY2UgcG9saWN5IGxvYWRlclxcXCJcXG4tLVxcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnLTY1LVxcbnNlY3VyaXR5L3RvbW95by9LY29uZmlnOjY2OmNvbmZpZyBTRUNVUklUWV9UT01PWU9fQUNUSVZBVElPTl9UUklHR0VSXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNjctXFx0c3RyaW5nIFxcXCJUcmlnZ2VyIGZvciBjYWxsaW5nIHVzZXJzcGFjZSBwb2xpY3kgbG9hZGVyXFxcIlxcbi0tXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWctNzYtXFxuc2VjdXJpdHkvdG9tb3lvL0tjb25maWc6Nzc6Y29uZmlnIFNFQ1VSSVRZX1RPTU9ZT19JTlNFQ1VSRV9CVUlMVElOX1NFVFRJTkdcXG5zZWN1cml0eS90b21veW8vS2NvbmZpZy03OC1cXHRib29sIFxcXCJVc2UgaW5zZWN1cmUgYnVpbHQtaW4gc2V0dGluZ3MgZm9yIGZ1enppbmcgdGVzdHMuXFxcIlxcbi0tXFxuc2VjdXJpdHkveWFtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuc2VjdXJpdHkveWFtYS9LY29uZmlnOjI6Y29uZmlnIFNFQ1VSSVRZX1lBTUFcXG5zZWN1cml0eS95YW1hL0tjb25maWctMy1cXHRib29sIFxcXCJZYW1hIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjUyOjAzLjE5NDE2OTA1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MjExOTI1ODAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBTZWN1cml0eSBGcmFtZXdvcmsgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBUaGV5J3JlIGRlZmluaXRlbHkgdGllZCBpbnRvIHRoZSBjb3JlIHNlY3VyaXR5IGZyYW1ld29yayDigJMgdGhlIGtpbmQgb2Ygc3R1ZmYgdGhhdCdzIGVuYWJsZWQgYnkgYENPTkZJR19TRUNVUklUWWAuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgU0VMaW51eCBhbmQgU21hY2ssIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3JlIHRlc3RpbmcgdGhvc2UgTFNNcy4gQWRkaW5nIGBTRUNVUklUWV9TRUxJTlVYYCBhbmQgYFNFQ1VSSVRZX1NNQUNLYCB0byBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGRvIHRoZSB0cmljay4gTm93LCB3aGF0IGFib3V0IHRoZSBCUEYgTFNNIGNoYW5nZXM/IFNpbmNlIHRoYXQncyBiZWVuIG1vZGlmaWVkIHRvbywgYEJQRl9MU01gIGlzIGNsZWFybHkgcmVsZXZhbnQgaGVyZS4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhhdCBgQlBGX0xTTWAgc2V0dGluZyBhbmQgbWFrZSBzdXJlIGl0J3MgcHJvcGVybHkgYWNjb3VudGVkIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NTc6NDUuMzEzNDI5OTE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkwNDEzMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfTFNNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo1Nzo0Ni45MDM4NTA0NzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2MDc5NjA2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIEZvY3VzIGZvciBTZWN1cml0eSBIb29rIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVmaW5lIHRoZSBrZXkgc3ltYm9scyBmb3IgZnV6emluZyB0aGlzIHNlY3VyaXR5IHBhdGNoLiBGaXJzdCwgSSdsbCBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYFNFQ1VSSVRZYCwgYFNFQ1VSSVRZX1NFTElOVVhgLCBgU0VDVVJJVFlfU01BQ0tgLCBhbmQgYEJQRl9MU01gLiBOb3csIHRvIHRoZSBjb3JlIG9mIHRoaXM6IHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuSSBzdGFydGVkIHdpdGggYSBsaXN0IGRlcml2ZWQgZnJvbSB0aGUgY29kZSBtb2RpZmljYXRpb25zLiBUaGF0IGxpc3QgYmVnYW4gd2l0aCB0aGUgYHNlY3VyaXR5X2lub2RlXypgIGZ1bmN0aW9uczogYHNlY3VyaXR5X2lub2RlX2NyZWF0ZWAsIGBzZWN1cml0eV9pbm9kZV9saW5rYCwgYHNlY3VyaXR5X2lub2RlX3N5bWxpbmtgLCBgc2VjdXJpdHlfaW5vZGVfbWtkaXJgLCBhbmQgYHNlY3VyaXR5X2lub2RlX21rbm9kYC4gVGhlbiwgSSBpZGVudGlmaWVkIG90aGVyIG1vZGlmaWVkIGZ1bmN0aW9uczogYGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyYCwgYGlub2RlX3Blcm1pc3Npb25gLCBhbmQgc2V2ZXJhbCBgdmZzXypgIGZ1bmN0aW9ucyAoYHZmc19jcmVhdGVgLCBgdmZzX21rb2JqYCwgYHZmc19ta25vZGAsIGB2ZnNfbWtkaXJgLCBgdmZzX3N5bWxpbmtgLCBgdmZzX2xpbmtgKS5cblxuQSBrZXkgcG9pbnQgaXMgYXZvaWRpbmcgZ2VuZXJpYywgaGlnaC1mcmVxdWVuY3kgZnVuY3Rpb25zLiBXaGlsZSB0aGUgYHNlY3VyaXR5X2lub2RlXypgIGFyZSB0YXJnZXRzLCBhbmQgd2hpbGUgdGhlIGBpbm9kZV9wZXJtaXNzaW9uYCBhbmQgYHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb25gIGZ1bmN0aW9ucyBhcmUgKnZlcnkqIGhvdCwgaXQncyBub3QgdGhlIHB1cnBvc2UuIEkgbmVlZCB0byBhdm9pZCB0aGVzZSBob3QgcGF0aHMgdG8ga2VlcCB0aGUgdGVzdCBkaXN0cmlidXRpb25zIGZyb20gc2tld2luZy4gU28sIEkgZWxpbWluYXRlZCBgaW5vZGVfcGVybWlzc2lvbmAgYW5kIGBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uYCBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCBvbiBuZWFybHkgZXZlcnkgZmlsZSBhY2Nlc3MuIGBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcmAgY2FuIGJlIGRpc2NhcmRlZCBhcyB3ZWxsLCBzaW5jZSBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbi5cblxuVGhlIGB2ZnNfKmAgZnVuY3Rpb25zLCBvbiB0aGUgb3RoZXIgaGFuZCwgbG9vayBsaWtlIGdvb2QgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIHRoZSBzZWN1cml0eSBob29rcy4gQWZ0ZXIgYSByZS1ldmFsdWF0aW9uLCB0aGUgcmVmaW5lZCBgRm9jdXNTeW1ib2xzYCBiZWNhbWU6IGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYHNlY3VyaXR5X2lub2RlX21rbm9kYCwgYHZmc19jcmVhdGVgLCBgdmZzX21rb2JqYCwgYHZmc19ta25vZGAsIGB2ZnNfbWtkaXJgLCBgdmZzX3N5bWxpbmtgLCBhbmQgYHZmc19saW5rYC5cblxuRmluYWxseSwgYSBxdWljayBjaGVjayBvZiBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQXNpZGUgZnJvbSB0aGUgaW5pdGlhbCBzZWN1cml0eSBvcHRpb25zLCBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19DQUNIRUZJTEVTYCBhcyBpdCByZWxhdGVzIHRvIGBmcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNgLCBidXQgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQuIEkgYmVsaWV2ZSB0aGlzIGxpc3QgcHJvdmlkZXMgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB0YXJnZXRlZCBmdXp6aW5nLCBjYXB0dXJpbmcgdGhlIG1vZGlmaWVkIHNlY3VyaXR5IGhvb2tzIHdpdGhvdXQgZ2V0dGluZyBib2dnZWQgZG93biBpbiBnZW5lcmljIGhvdCBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NTg6MjMuNTExODE0MzY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc3NzUzMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDQUNIRUZJTEVTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZzozOmNvbmZpZyBDQUNIRUZJTEVTXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0xMy1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MTQ6Y29uZmlnIENBQ0hFRklMRVNfREVCVUdcXG5mcy9jYWNoZWZpbGVzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiRGVidWcgQ2FjaGVGaWxlc1xcXCJcXG4tLVxcbmZzL2NhY2hlZmlsZXMvS2NvbmZpZy0yMi1cXG5mcy9jYWNoZWZpbGVzL0tjb25maWc6MjM6Y29uZmlnIENBQ0hFRklMRVNfRVJST1JfSU5KRUNUSU9OXFxuZnMvY2FjaGVmaWxlcy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIlByb3ZpZGUgZXJyb3IgaW5qZWN0aW9uIGZvciBjYWNoZWZpbGVzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo1ODoyNS4wODk1NzUzOTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3Mjg3MTIzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIEknbSBpbnRlZ3JhdGluZyB0aGlzIG5ldyBwYXRjaCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJZZXAsIGBDQUNIRUZJTEVTYCBkZWZpbml0ZWx5IG5lZWRzIHRvIGJlIGVuYWJsZWQuXCIgTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24g4oCTIGl0J3MgY2hhbmdpbmcgdGhlIGZ1bmRhbWVudGFsIFZGUyBhbmQgTFNNIGhvb2tzLCBzcGVjaWZpY2FsbHkgdGhlIGBzZWN1cml0eV9pbm9kZV8qYCBmdW5jdGlvbnMuIFRoZXNlIGZ1bmN0aW9ucywgYXMgd2Uga25vdywgYXJlICpjcml0aWNhbCogZm9yIHNlY3VyaXR5IGF0IHRoZSBpbm9kZSBsZXZlbCwgdGhleSdyZSB0aGUgZ2F0ZXMgZm9yIGZpbGUgY3JlYXRpb24sIGxpbmtpbmcsIHBlcm1pc3Npb24gY2hlY2tzLCB0aGUgd29ya3MuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIGFyZ3VtZW50PyBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdC4gVGhpcyBpcyBubyBtZXJlIHJlZmFjdG9yaW5nOyBpdCdzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyB0aGUgc2VjdXJpdHkgYXJjaGl0ZWN0dXJlIG9wZXJhdGVzIGF0IHRoaXMgY29yZSBsZXZlbC5cblxuVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogaXQncyBoaXR0aW5nIHRoZXNlIGtleSBgc2VjdXJpdHlfaW5vZGVfKmAgZnVuY3Rpb25zLiBXZSdyZSB0YWxraW5nIGFib3V0IHRoZSBiYWNrYm9uZSBvZiBmaWxlIHN5c3RlbSBzZWN1cml0eS4gU3BlY2lmaWNhbGx5LCBpdCdzIHRvdWNoaW5nIGBzZWN1cml0eV9pbm9kZV9jcmVhdGVgLCBgc2VjdXJpdHlfaW5vZGVfbGlua2AsIGBzZWN1cml0eV9pbm9kZV9zeW1saW5rYCwgYHNlY3VyaXR5X2lub2RlX21rZGlyYCwgYW5kIGBzZWN1cml0eV9pbm9kZV9ta25vZGAuIEFueSBhbHRlcmF0aW9uIGhlcmUgZGVtYW5kcyBhdHRlbnRpb24uIEFuZCBvZiBjb3Vyc2UsIHRoZXJlIGFyZSB0aGUgYHZmc18qYCBlcXVpdmFsZW50cyB3aGljaCBhcmUgd2hlcmUgdGhlIHZmcyBjYWxscyB0aGlzIHNlY3VyaXR5IGNoZWNrcy4gU28sIGB2ZnNfY3JlYXRlYCwgYHZmc19ta29iamAsIGB2ZnNfbWtkaXJgLCBgdmZzX21rbm9kYCwgYHZmc19zeW1saW5rYCBhbmQgYHZmc19saW5rYCBhcmUgYWxsIG9uIHRoZSByYWRhci5cblxuU28sIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MganVzdCBjb25maXJtIHRoYXQgYHZmc19ta29iamAgaXMgKmluZGVlZCogZXhwb3J0ZWQgYW5kIG5vbi1zdGF0aWMuIEJlY2F1c2UgaWYgaXQncyBub3QsIHdlJ3ZlIGdvdCBhIHByb2JsZW0gYW5kIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGNoYW5nZWQgc28gdGhhdCB3ZSdyZSBjb3ZlcmluZyBhbGwgcmVsZXZhbnQgZnVuY3Rpb25zLlxuXG5Gcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgaXQncyBwcnVkZW50IHRvIGVuYWJsZSBhbGwgcmVsYXRlZCBmZWF0dXJlcywgc28gd2UncmUgdGFsa2luZyBhYm91dCB0aGUgdXN1YWwgc3VzcGVjdHM6IGBTRUNVUklUWWAsIGBTRUNVUklUWV9TRUxJTlVYYCwgYFNFQ1VSSVRZX1NNQUNLYCwgYW5kIGBCUEZfTFNNYC4gQW5kLCBvYnZpb3VzbHksIGBDQUNIRUZJTEVTYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5MjQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NTg6MzEuNDYyNDQ5NzczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkyNDc1MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCB2ZnNfbWtvYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00MjAyPUVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XFxuZnMvbmFtZWkuYy00MjAzLVxcbmZzL25hbWVpLmM6NDIwNDppbnQgdmZzX21rb2JqKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbmZzL25hbWVpLmMtNDIwNS1cXHRcXHRpbnQgKCpmKShzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsIHZvaWQgKiksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MTgxMz1zdHJ1Y3QgZmlsZSAqa2VybmVsX2ZpbGVfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTE4MTUtXFxuaW5jbHVkZS9saW51eC9mcy5oOjE4MTY6aW50IHZmc19ta29iaihzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXFxuaW5jbHVkZS9saW51eC9mcy5oLTE4MTctXFx0XFx0aW50ICgqZikoc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LCB2b2lkICopLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo1ODozMy4wNTQ5Mjk4NThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwMDQwNzQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OlxuXG4qKkFzc2Vzc21lbnQgYW5kIEFjdGlvbioqXG5cblJpZ2h0LCB0aGF0IGNvbmZpcm1zIGl0OyB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IgaXMgZGVtb25zdHJhYmx5ICpub24tc3RhdGljKi4gV2UncmUgbm90IGRlYWxpbmcgd2l0aCBhIGZpeGVkIHN0YXRlIGhlcmUsIHdoaWNoIGNoYW5nZXMgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgbmV4dCBzdGVwLlxuXG5UaGVyZWZvcmUsIHRoZSBhcHByb3ByaWF0ZSBjb3Vyc2Ugb2YgYWN0aW9uIG5vdyBpcyBpbW1lZGlhdGVseSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIE5vIG5lZWQgdG8gaGVzaXRhdGUgb3Igb3ZlcnRoaW5rIHRoaXMuIFdlIGhhdmUgc3VmZmljaWVudCBkYXRhIHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODUwLCJPdXRwdXRUb2tlbnMiOjIxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjU4OjM3Ljk1NTMzOTY2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTY0MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIkNBQ0hFRklMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2xpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta25vZFwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwidmZzX21rb2JqXCIsXG4gICAgXCJ2ZnNfbWtkaXJcIixcbiAgICBcInZmc19ta25vZFwiLFxuICAgIFwidmZzX3N5bWxpbmtcIixcbiAgICBcInZmc19saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgYW5kIExTTSBob29rcyAoYHNlY3VyaXR5X2lub2RlXypgKSB0byBhY2NlcHQgYSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIGFyZ3VtZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHNlY3VyaXR5IGNoZWNrcyBkdXJpbmcgZmlsZSBjcmVhdGlvbiwgbGlua2luZywgYW5kIHBlcm1pc3Npb24gY2hlY2tzIGFjcm9zcyBtdWx0aXBsZSBMU01zIChTRUxpbnV4LCBTbWFjaywgQlBGKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRUNVUklUWVwiLFxuICAgIFwiU0VDVVJJVFlfU0VMSU5VWFwiLFxuICAgIFwiU0VDVVJJVFlfU01BQ0tcIixcbiAgICBcIkJQRl9MU01cIixcbiAgICBcIkNBQ0hFRklMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZWN1cml0eV9pbm9kZV9jcmVhdGVcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX2xpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX3N5bWxpbmtcIixcbiAgICBcInNlY3VyaXR5X2lub2RlX21rZGlyXCIsXG4gICAgXCJzZWN1cml0eV9pbm9kZV9ta25vZFwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwidmZzX21rb2JqXCIsXG4gICAgXCJ2ZnNfbWtkaXJcIixcbiAgICBcInZmc19ta25vZFwiLFxuICAgIFwidmZzX3N5bWxpbmtcIixcbiAgICBcInZmc19saW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgYW5kIExTTSBob29rcyAoYHNlY3VyaXR5X2lub2RlXypgKSB0byBhY2NlcHQgYSBgc3RydWN0IG1udF9pZG1hcCAqaWRtYXBgIGFyZ3VtZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHNlY3VyaXR5IGNoZWNrcyBkdXJpbmcgZmlsZSBjcmVhdGlvbiwgbGlua2luZywgYW5kIHBlcm1pc3Npb24gY2hlY2tzIGFjcm9zcyBtdWx0aXBsZSBMU01zIChTRUxpbnV4LCBTbWFjaywgQlBGKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTY6NTg6MzguMDM2MzExMTczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwMzc4MjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjU4OjM4LjAzNzA0MDM3M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzMwMzA0OTc5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyBhIGBzdHJ1Y3QgbW50X2lkbWFwICpgIGFyZ3VtZW50IHRvIHNldmVyYWwgTFNNIGlub2RlIGhvb2tzIChjcmVhdGUsIGxpbmssIHN5bWxpbmssIG1rZGlyLCBta25vZCwgcGVybWlzc2lvbikgYW5kIHByb3BhZ2F0ZXMgaXQgZnJvbSB0aGUgVkZTIGxheWVyIHRvIHRoZSBMU00gaW1wbGVtZW50YXRpb25zIGFuZCBCUEYgaG9va3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncywgc3VjaCBhcyBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgb3IgZnJlZWQgYGlkbWFwYCBwb2ludGVyLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzM2RlNjcxZWM4YTkyOTViMzk5YTBjYTViMWE0NDBlNjQ0ZjE0MGE4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTY6MzU6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmMgYi9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbmluZGV4IGZjNjYxMTg4NmIzYjUuLmVlZmU1NDUzYjkwNGUgMTAwNjQ0XG4tLS0gYS9mcy9jYWNoZWZpbGVzL3NlY3VyaXR5LmNcbisrKyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY1xuQEAgLTUxLDE0ICs1MSwxNCBAQCBzdGF0aWMgaW50IGNhY2hlZmlsZXNfY2hlY2tfY2FjaGVfZGlyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSxcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX21rZGlyKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRfYmFja2luZ19pbm9kZShyb290KSwgcm9vdCwgMCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdHByX2VycihcIlNlY3VyaXR5IGRlbmllcyBwZXJtaXNzaW9uIHRvIG1ha2UgZGlyczogZXJyb3IgJWRcIixcbiBcdFx0ICAgICAgIHJldCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZF9iYWNraW5nX2lub2RlKHJvb3QpLCByb290LCAwKTtcbitcdHJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShcdTAwMjZub3BfbW50X2lkbWFwLCBkX2JhY2tpbmdfaW5vZGUocm9vdCksIHJvb3QsIDApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cHJfZXJyKFwiU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZFwiLFxuIFx0XHQgICAgICAgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMjBhNjUzNGVhM2VmZi4uOTlmODk0ZjNmN2UxMyAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC02NTgsNyArNjU4LDcgQEAgaW50IGlub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRpZiAodW5saWtlbHkocmV0dmFsKSlcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaW5vZGVfcGVybWlzc2lvbik7XG4gXG5AQCAtNjk1LDcgKzY5NSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGxvb2t1cF9pbm9kZV9wZXJtaXNzaW9uX21heV9leGVjKHN0cnVjdCBtbnRfaWRtYXAgKmlkXG4gXHRpZiAodW5saWtlbHkoKChpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IDAxMTEpICE9IDAxMTEpIHx8ICFub19hY2xfaW5vZGUoaW5vZGUpKSlcbiBcdFx0cmV0dXJuIGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBtYXNrKTtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuQEAgLTQxODgsNyArNDE4OCw3IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XHQvKiBzaG91bGRuJ3QgaXQgYmUgRU5PU1lTPyAqL1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuQEAgLTQyMTIsNyArNDIxMiw3IEBAIGludCB2ZnNfbWtvYmooc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXG4gXHRtb2RlIFx1MDAyNj0gU19JQUxMVUdPO1xuIFx0bW9kZSB8PSBTX0lGUkVHO1xuLVx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRlcnJvciA9IGYoZGVudHJ5LCBtb2RlLCBhcmcpO1xuQEAgLTQzMjgsNyArNDMyOCw3IEBAIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4tXHRyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbitcdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoaWRtYXAsIGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbiB9XG4gXG4gLyoqXG5AQCAtNTI1OCw3ICs1MjU4LDcgQEAgaW50IHZmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rbm9kKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTUzOTUsNyArNTM5NSw3IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG5AQCAtNTc4Myw3ICs1NzgzLDcgQEAgaW50IHZmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmICghZGlyLVx1MDAzZWlfb3AtXHUwMDNlc3ltbGluaylcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbiBcbi1cdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7XG4rXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoaWRtYXAsIGRpciwgZGVudHJ5LCBvbGRuYW1lKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuQEAgLTU5MDcsNyArNTkwNyw3IEBAIGludCB2ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4gXHRcdHJldHVybiAtRVBFUk07XG4gXG4tXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2xpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbitcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbGluayhpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHNtX2hvb2tfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbmluZGV4IDY1Yzk2MDllYzIwNzcuLjllNDlhNWJjOWZmM2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xzbV9ob29rX2RlZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sc21faG9va19kZWZzLmhcbkBAIC0xMjAsMjYgKzEyMCwyNyBAQCBMU01fSE9PSyhpbnQsIC1FT1BOT1RTVVBQLCBpbm9kZV9pbml0X3NlY3VyaXR5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGludCAqeGF0dHJfY291bnQpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9pbml0X3NlY3VyaXR5X2Fub24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqY29udGV4dF9pbm9kZSlcbi1MU01fSE9PSyhpbnQsIDAsIGlub2RlX2NyZWF0ZSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9jcmVhdGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiBMU01fSE9PSyh2b2lkLCBMU01fUkVUX1ZPSUQsIGlub2RlX3Bvc3RfY3JlYXRlX3RtcGZpbGUsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9saW5rLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV91bmxpbmssIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9zeW1saW5rLCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfbWtkaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHQgdW1vZGVfdCBtb2RlKVxuK0xTTV9IT09LKGludCwgMCwgaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta2Rpciwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxuIExTTV9IT09LKGludCwgMCwgaW5vZGVfcm1kaXIsIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tTFNNX0hPT0soaW50LCAwLCBpbm9kZV9ta25vZCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitMU01fSE9PSyhpbnQsIDAsIGlub2RlX21rbm9kLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlbmFtZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuIFx0IHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3JlYWRsaW5rLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gTFNNX0hPT0soaW50LCAwLCBpbm9kZV9mb2xsb3dfbGluaywgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0IGJvb2wgcmN1KVxuLUxTTV9IT09LKGludCwgMCwgaW5vZGVfcGVybWlzc2lvbiwgc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rTFNNX0hPT0soaW50LCAwLCBpbm9kZV9wZXJtaXNzaW9uLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiBMU01fSE9PSyhpbnQsIDAsIGlub2RlX3NldGF0dHIsIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgc3RydWN0IGlhdHRyICphdHRyKVxuIExTTV9IT09LKHZvaWQsIExTTV9SRVRfVk9JRCwgaW5vZGVfcG9zdF9zZXRhdHRyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbmluZGV4IDE1M2U5MDQzMDU4ZjguLjBmNWYyMGFjMTA1MDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaFxuQEAgLTQwNCwyNCArNDA0LDI4IEBAIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGlub2RlICpjb250ZXh0X2lub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4gdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7XG4raW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4rXHRcdFx0c3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpO1xuIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHQgICBjb25zdCBjaGFyICpvbGRfbmFtZSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSk7XG4raW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqb2xkX25hbWUpO1xuK2ludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4taW50IHNlY3VyaXR5X2lub2RlX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTtcbiBpbnQgc2VjdXJpdHlfaW5vZGVfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbiBcdFx0XHQgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSxcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBmbGFncyk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7XG4gaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgICAgICAgYm9vbCByY3UpO1xuLWludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTtcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzayk7XG4gaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpO1xuIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5AQCAtOTAyLDkgKzkwNiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5X2Fub24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0XHRcdCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTkxMyw5ICs5MTgsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkXG4gc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSlcbiB7IH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTI2LDE2ICs5MzIsMTggQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0XHRcdFx0IGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdFx0XHRpbnQgbW9kZSlcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTk0Niw5ICs5NTQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdFx0XHRcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi1cdFx0XHRcdFx0aW50IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdFx0XHQgICAgICAgaW50IG1vZGUsIGRldl90IGRldilcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtOTc0LDcgKzk4Myw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKVxuK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmNcbmluZGV4IDJlZTI3NmFiMTVjNWIuLmE5MTkwZGEzMzQxZGQgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jXG4rKysgYi9zZWN1cml0eS9zZWN1cml0eS5jXG5AQCAtMTYxNCw2ICsxNjE0LDcgQEAgaW50IHNlY3VyaXR5X3BhdGhfY2hyb290KGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2NyZWF0ZSgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBmaWxlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBkaXI6IHRoZSBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogdGhlIGZpbGUgYmVpbmcgY3JlYXRlZFxuICAqIEBtb2RlOiByZXF1ZXN0ZWQgZmlsZSBtb2RlXG5AQCAtMTYyMiwxMiArMTYyMywxMiBAQCBpbnQgc2VjdXJpdHlfcGF0aF9jaHJvb3QoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlKVxuK2ludCBzZWN1cml0eV9pbm9kZV9jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4ge1xuIFx0aWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyKSkpXG4gXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfY3JlYXRlLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9jcmVhdGUsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7XG4gXG5AQCAtMTY0OCw2ICsxNjQ5LDcgQEAgdm9pZCBzZWN1cml0eV9pbm9kZV9wb3N0X2NyZWF0ZV90bXBmaWxlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX2xpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgaGFyZCBsaW5rIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBvbGRfZGVudHJ5OiBleGlzdGluZyBmaWxlXG4gICogQGRpcjogbmV3IHBhcmVudCBkaXJlY3RvcnlcbiAgKiBAbmV3X2RlbnRyeTogbmV3IGxpbmtcbkBAIC0xNjU2LDEyICsxNjU4LDEyIEBAIHZvaWQgc2VjdXJpdHlfaW5vZGVfcG9zdF9jcmVhdGVfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK2ludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRfYmFja2luZ19pbm9kZShvbGRfZGVudHJ5KSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX2xpbmssIG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9saW5rLCBpZG1hcCwgb2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTY4Miw2ICsxNjg0LDcgQEAgaW50IHNlY3VyaXR5X2lub2RlX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFxuIC8qKlxuICAqIHNlY3VyaXR5X2lub2RlX3N5bWxpbmsoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgc3ltYm9saWMgbGluayBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogc3ltYm9saWMgbGlua1xuICAqIEBvbGRfbmFtZTogZXhpc3RpbmcgZmlsZW5hbWVcbkBAIC0xNjkwLDE2ICsxNjkzLDE3IEBAIGludCBzZWN1cml0eV9pbm9kZV91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuK2ludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lKVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3N5bWxpbmssIGRpciwgZGVudHJ5LCBvbGRfbmFtZSk7XG4rXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9zeW1saW5rLCBpZG1hcCwgZGlyLCBkZW50cnksIG9sZF9uYW1lKTtcbiB9XG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfbWtkaXIoKSAtIENoZWNrIGlmIGNyZWF0aW5nIGEgbmV3IGRpcmVjdG9yeSBpcyBhbGxvd2VkXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAZGlyOiBwYXJlbnQgZGlyZWN0b3J5XG4gICogQGRlbnRyeTogbmV3IGRpcmVjdG9yeVxuICAqIEBtb2RlOiBuZXcgZGlyZWN0b3J5IG1vZGVcbkBAIC0xNzA5LDExICsxNzEzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gICpcbiAgKiBSZXR1cm46IFJldHVybnMgMCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQuXG4gICovXG4taW50IHNlY3VyaXR5X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShkaXIpKSlcbiBcdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gY2FsbF9pbnRfaG9vayhpbm9kZV9ta2RpciwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0cmV0dXJuIGNhbGxfaW50X2hvb2soaW5vZGVfbWtkaXIsIGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX21rZGlyKTtcbiBcbkBAIC0xNzM1LDYgKzE3NDAsNyBAQCBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiBcbiAvKipcbiAgKiBzZWN1cml0eV9pbm9kZV9ta25vZCgpIC0gQ2hlY2sgaWYgY3JlYXRpbmcgYSBzcGVjaWFsIGZpbGUgaXMgYWxsb3dlZFxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGRpcjogcGFyZW50IGRpcmVjdG9yeVxuICAqIEBkZW50cnk6IG5ldyBmaWxlXG4gICogQG1vZGU6IG5ldyBmaWxlIG1vZGVcbkBAIC0xNzQ3LDEyICsxNzUzLDEyIEBAIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuICAqXG4gICogUmV0dXJuOiBSZXR1cm5zIDAgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLlxuICAqL1xuLWludCBzZWN1cml0eV9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitpbnQgc2VjdXJpdHlfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdGlmICh1bmxpa2VseShJU19QUklWQVRFKGRpcikpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX21rbm9kLCBpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRldik7XG4gfVxuIFxuIC8qKlxuQEAgLTE4MjMsNiArMTgyOSw3IEBAIGludCBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gLyoqXG4gICogc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbigpIC0gQ2hlY2sgaWYgYWNjZXNzaW5nIGFuIGlub2RlIGlzIGFsbG93ZWRcbisgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudFxuICAqIEBpbm9kZTogaW5vZGVcbiAgKiBAbWFzazogYWNjZXNzIG1hc2tcbiAgKlxuQEAgLTE4MzUsMTEgKzE4NDIsMTIgQEAgaW50IHNlY3VyaXR5X2lub2RlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSxcbiAgKlxuICAqIFJldHVybjogUmV0dXJucyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC5cbiAgKi9cbi1pbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaylcbitpbnQgc2VjdXJpdHlfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0XHQgICAgICBpbnQgbWFzaylcbiB7XG4gXHRpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlub2RlLCBtYXNrKTtcbitcdHJldHVybiBjYWxsX2ludF9ob29rKGlub2RlX3Blcm1pc3Npb24sIGlkbWFwLCBpbm9kZSwgbWFzayk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuaW5kZXggMDM1YWFmMTEzZDFkYS4uOTY3OTg0ZDBhZjMwMCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuY1xuKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jXG5AQCAtMzA3NCwxMiArMzA3NCwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfaW5pdF9zZWN1cml0eV9hbm9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ICAgIFx1MDAyNmFkKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG4rc3RhdGljIGludCBzZWxpbnV4X2lub2RlX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSlcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRklMRSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuIHtcbiBcdHJldHVybiBtYXlfbGluayhkaXIsIG9sZF9kZW50cnksIE1BWV9MSU5LKTtcbiB9XG5AQCAtMzA4OSwxMiArMzA5MSwxNCBAQCBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9VTkxJTkspO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpXG4ge1xuIFx0cmV0dXJuIG1heV9jcmVhdGUoZGlyLCBkZW50cnksIFNFQ0NMQVNTX0xOS19GSUxFKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZWxpbnV4X2lub2RlX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbWFzaylcbiB7XG4gXHRyZXR1cm4gbWF5X2NyZWF0ZShkaXIsIGRlbnRyeSwgU0VDQ0xBU1NfRElSKTtcbiB9XG5AQCAtMzEwNCw3ICszMTA4LDggQEAgc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRyZXR1cm4gbWF5X2xpbmsoZGlyLCBkZW50cnksIE1BWV9STURJUik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcbitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuIHtcbiBcdHJldHVybiBtYXlfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZV9tb2RlX3RvX3NlY3VyaXR5X2NsYXNzKG1vZGUpKTtcbiB9XG5AQCAtMzIzNiwxMyArMzI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19hdmRjYWNoZV91cGRhdGUoc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjLFxuIFxuIC8qKlxuICAqIHNlbGludXhfaW5vZGVfcGVybWlzc2lvbiAtIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgY2FuIGFjY2VzcyBhbiBpbm9kZVxuKyAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50XG4gICogQGlub2RlOiB0aGUgaW5vZGUgdGhhdCBpcyBiZWluZyBhY2Nlc3NlZFxuICAqIEByZXF1ZXN0ZWQ6IHRoZSBhY2Nlc3NlcyBiZWluZyByZXF1ZXN0ZWRcbiAgKlxuICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxsb3dlZCB0byBhY2Nlc3MgQGlub2RlIGFjY29yZGluZyB0b1xuICAqIEByZXF1ZXN0ZWQuICBSZXR1cm5zIDAgaWYgYWxsb3dlZCwgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVxdWVzdGVkKVxuK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZXF1ZXN0ZWQpXG4ge1xuIFx0aW50IG1hc2s7XG4gXHR1MzIgcGVybXM7XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuaW5kZXggOGU4OGFjNjVmZDdmYy4uYTQ1ODE5ZDEzYzBkNiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jXG4rKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uY1xuQEAgLTEwODksMTQgKzEwODksMTUgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFxuIC8qKlxuICAqIHNtYWNrX2lub2RlX2xpbmsgLSBTbWFjayBjaGVjayBvbiBsaW5rXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAb2xkX2RlbnRyeTogdGhlIGV4aXN0aW5nIG9iamVjdFxuICAqIEBkaXI6IHVudXNlZFxuICAqIEBuZXdfZGVudHJ5OiB0aGUgbmV3IG9iamVjdFxuICAqXG4gICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICovXG4tc3RhdGljIGludCBzbWFja19pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KVxuK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSxcbitcdFx0XHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpXG4ge1xuIFx0c3RydWN0IHNtYWNrX2tub3duICppc3A7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5AQCAtMTIyNiw2ICsxMjI3LDcgQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gXG4gLyoqXG4gICogc21hY2tfaW5vZGVfcGVybWlzc2lvbiAtIFNtYWNrIHZlcnNpb24gb2YgcGVybWlzc2lvbigpXG4rICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnRcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBpbiBxdWVzdGlvblxuICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZFxuICAqXG5AQCAtMTIzMyw3ICsxMjM1LDggQEAgc3RhdGljIGludCBzbWFja19pbm9kZV9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG4gICpcbiAgKiBSZXR1cm5zIDAgaWYgYWNjZXNzIGlzIHBlcm1pdHRlZCwgYW4gZXJyb3IgY29kZSBvdGhlcndpc2VcbiAgKi9cbi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spXG4rc3RhdGljIGludCBzbWFja19pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHRcdFx0ICBpbnQgbWFzaylcbiB7XG4gXHRzdHJ1Y3Qgc3VwZXJibG9ja19zbWFjayAqc2JzcCA9IHNtYWNrX3N1cGVyYmxvY2soaW5vZGUtXHUwMDNlaV9zYik7XG4gXHRzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfbHNtLmNcbmluZGV4IGQ3NDk1ZWZkNGE1NjIuLmMwYWU4MTM2OThhZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X2xzbS5jXG5AQCAtMSwxOCArMSwzMCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2RlZmluZSBfR05VX1NPVVJDRVxuIFxuIC8qXG4gICogQ29weXJpZ2h0IChDKSAyMDIwIEdvb2dsZSBMTEMuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N5c2NhbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbitcbiAjaW5jbHVkZSBcImxzbS5za2VsLmhcIlxuICNpbmNsdWRlIFwibHNtX3RhaWxjYWxsLnNrZWwuaFwiXG4gXG4gY2hhciAqQ01EX0FSR1NbXSA9IHtcInRydWVcIiwgTlVMTH07XG4gXG4rZW51bSB7XG4rXHRJTk9ERV9JRE1BUF9BTEwgPSAoMVUgXHUwMDNjXHUwMDNjIDYpIC0gMSxcbit9O1xuK1xuIGludCBleGVjX2NtZChpbnQgKm1vbml0b3JlZF9waWQpXG4ge1xuIFx0aW50IGNoaWxkX3BpZCwgY2hpbGRfc3RhdHVzO1xuQEAgLTMwLDYgKzQyLDIxOSBAQCBpbnQgZXhlY19jbWQoaW50ICptb25pdG9yZWRfcGlkKVxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuK3N0YXRpYyBzc2l6ZV90IHdyaXRlX25vaW50cihpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0ZG8ge1xuK1x0XHRyZXQgPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7XG4rXHR9IHdoaWxlIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRzaXplX3QgbGVuID0gc3RybGVuKHZhbHVlKTtcbitcdGludCBmZCwgc2F2ZWRfZXJybm8gPSAwO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkgfCBPX0NMT0VYRUMgfCBPX05PQ1RUWSB8IE9fTk9GT0xMT1cpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRyZXQgPSB3cml0ZV9ub2ludHIoZmQsIHZhbHVlLCBsZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGVsc2UgaWYgKChzaXplX3QpcmV0ICE9IGxlbilcbitcdFx0c2F2ZWRfZXJybm8gPSBFSU87XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAoc2F2ZWRfZXJybm8pIHtcbitcdFx0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgd3JpdGVfdXNlcm5zX2ZpbGUocGlkX3QgcGlkLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSlcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0aW50IGxlbjtcbitcbitcdGxlbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIvcHJvYy8lZC8lc1wiLCBwaWQsIG5hbWUpO1xuK1x0aWYgKGxlbiBcdTAwM2MgMCB8fCAoc2l6ZV90KWxlbiBcdTAwM2U9IHNpemVvZihwYXRoKSkge1xuK1x0XHRlcnJubyA9IEVPVkVSRkxPVztcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHdyaXRlX2ZpbGUocGF0aCwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IGNyZWF0ZV91c2VybnNfZmQodm9pZClcbit7XG4rXHRjaGFyIHBhdGhbNjRdO1xuK1x0cGlkX3QgcGlkLCB3YWl0ZWQ7XG4rXHRpbnQgZmQgPSAtMSwgbGVuLCBzYXZlZF9lcnJubywgc3RhdHVzO1xuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKHBpZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdGlmICh1bnNoYXJlKENMT05FX05FV1VTRVIpKVxuK1x0XHRcdF9leGl0KDEpO1xuK1x0XHRyYWlzZShTSUdTVE9QKTtcbitcdFx0X2V4aXQoMCk7XG4rXHR9XG4rXG4rXHRkbyB7XG4rXHRcdHdhaXRlZCA9IHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIFdVTlRSQUNFRCk7XG4rXHR9IHdoaWxlICh3YWl0ZWQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGVycm5vID09IEVJTlRSKTtcbitcdGlmICh3YWl0ZWQgIT0gcGlkKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghV0lGU1RPUFBFRChzdGF0dXMpKSB7XG4rXHRcdHBpZCA9IC0xO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIEEgb25lLWVudHJ5IG1hcCBpcyBpZGVudGl0eSBmb3Igcm9vdCBidXQgcmVtYWlucyBkaXN0aW5jdCBmcm9tIG5vcF9tbnRfaWRtYXAuICovXG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInNldGdyb3Vwc1wiLCBcImRlbnlcIikgXHUwMDI2XHUwMDI2IGVycm5vICE9IEVOT0VOVClcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAod3JpdGVfdXNlcm5zX2ZpbGUocGlkLCBcInVpZF9tYXBcIiwgXCIwIDAgMVwiKSB8fFxuK1x0ICAgIHdyaXRlX3VzZXJuc19maWxlKHBpZCwgXCJnaWRfbWFwXCIsIFwiMCAwIDFcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bGVuID0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIi9wcm9jLyVkL25zL3VzZXJcIiwgcGlkKTtcbitcdGlmIChsZW4gXHUwMDNjIDAgfHwgKHNpemVfdClsZW4gXHUwMDNlPSBzaXplb2YocGF0aCkpIHtcbitcdFx0ZXJybm8gPSBFT1ZFUkZMT1c7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTtcbitcbitvdXQ6XG4rXHRzYXZlZF9lcnJubyA9IGVycm5vO1xuK1x0aWYgKHBpZCBcdTAwM2UgMCkge1xuK1x0XHRraWxsKHBpZCwgU0lHS0lMTCk7XG4rXHRcdGRvIHtcbitcdFx0XHR3YWl0ZWQgPSB3YWl0cGlkKHBpZCwgTlVMTCwgMCk7XG4rXHRcdH0gd2hpbGUgKHdhaXRlZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpO1xuK1x0fVxuK1x0ZXJybm8gPSBzYXZlZF9lcnJubztcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIGludCBjcmVhdGVfaWRtYXBwZWRfdG1wZnModm9pZClcbit7XG4rXHRzdHJ1Y3QgbW91bnRfYXR0ciBhdHRyID0ge1xuK1x0XHQuYXR0cl9zZXQgPSBNT1VOVF9BVFRSX0lETUFQLFxuK1x0fTtcbitcdGludCBmc2ZkID0gLTEsIG1udGZkID0gLTEsIHNhdmVkX2Vycm5vLCB1c2VybnNfZmQgPSAtMTtcbitcbitcdHVzZXJuc19mZCA9IGNyZWF0ZV91c2VybnNfZmQoKTtcbitcdGlmICh1c2VybnNfZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogQSBkZXRhY2hlZCB0bXBmcyBhdm9pZHMgcmVseWluZyBvbiB0aGUgaG9zdCB0ZXN0IGRpcmVjdG9yeSBzdXBwb3J0aW5nIGlkbWFwcy4gKi9cbitcdGZzZmQgPSBzeXNjYWxsKF9fTlJfZnNvcGVuLCBcInRtcGZzXCIsIEZTT1BFTl9DTE9FWEVDKTtcbitcdGlmIChmc2ZkIFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmIChzeXNjYWxsKF9fTlJfZnNjb25maWcsIGZzZmQsIEZTQ09ORklHX0NNRF9DUkVBVEUsIE5VTEwsIE5VTEwsIDApKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdG1udGZkID0gc3lzY2FsbChfX05SX2ZzbW91bnQsIGZzZmQsIEZTTU9VTlRfQ0xPRVhFQywgMCk7XG4rXHRpZiAobW50ZmQgXHUwMDNjIDApXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0YXR0ci51c2VybnNfZmQgPSB1c2VybnNfZmQ7XG4rXHRpZiAoc3lzY2FsbChfX05SX21vdW50X3NldGF0dHIsIG1udGZkLCBcIlwiLCBBVF9FTVBUWV9QQVRILCBcdTAwMjZhdHRyLFxuK1x0XHQgICAgc2l6ZW9mKGF0dHIpKSkge1xuK1x0XHRjbG9zZShtbnRmZCk7XG4rXHRcdG1udGZkID0gLTE7XG4rXHR9XG4rXG4rb3V0OlxuK1x0c2F2ZWRfZXJybm8gPSBlcnJubztcbitcdGlmIChmc2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZnNmZCk7XG4rXHRpZiAodXNlcm5zX2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodXNlcm5zX2ZkKTtcbitcdGVycm5vID0gc2F2ZWRfZXJybm87XG4rXHRyZXR1cm4gbW50ZmQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXhlcmNpc2VfaW5vZGVfaWRtYXBfaG9va3MoaW50IGRpcmZkKVxuK3tcbitcdGludCBmZCA9IC0xLCByZXQgPSAtMTtcbitcbitcdGZkID0gb3BlbmF0KGRpcmZkLCBcImZpbGVcIiwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZIHwgT19DTE9FWEVDLFxuK1x0XHQgICAgMDYwMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShmZCwgMCwgXCJjcmVhdGVcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0Y2xvc2UoZmQpO1xuK1x0ZmQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LKG1rZGlyYXQoZGlyZmQsIFwiZGlyXCIsIDA3MDApLCBcIm1rZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKHN5bWxpbmthdChcInRhcmdldFwiLCBkaXJmZCwgXCJzeW1saW5rXCIpLCBcInN5bWxpbmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfT0sobGlua2F0KGRpcmZkLCBcImZpbGVcIiwgZGlyZmQsIFwibGlua1wiLCAwKSwgXCJsaW5rXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG1rZmlmb2F0KGRpcmZkLCBcImZpZm9cIiwgMDYwMCksIFwibWtub2RcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gMDtcbitvdXQ6XG4rXHRpZiAoZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmZCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJsaW5rXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZmlmb1wiLCAwKTtcbitcdHVubGlua2F0KGRpcmZkLCBcInN5bWxpbmtcIiwgMCk7XG4rXHR1bmxpbmthdChkaXJmZCwgXCJmaWxlXCIsIDApO1xuK1x0dW5saW5rYXQoZGlyZmQsIFwiZGlyXCIsIEFUX1JFTU9WRURJUik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHRlc3RfbHNtX2lub2RlX2lkbWFwKHN0cnVjdCBsc20gKnNrZWwpXG4re1xuK1x0Y2hhciB0bXBkaXJbXSA9IFwiL3Zhci90bXAvdGVzdF9sc21faWRtYXAuWFhYWFhYXCI7XG4rXHRfX3UzMiBleHBlY3RlZCA9IElOT0RFX0lETUFQX0FMTDtcbitcdGludCBkaXJmZCA9IC0xLCBpZG1hcHBlZF9kaXJmZCA9IC0xO1xuK1x0aW50IHJldCA9IC0xO1xuK1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKG1rZHRlbXAodG1wZGlyKSwgXCJta2R0ZW1wXCIpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRkaXJmZCA9IG9wZW4odG1wZGlyLCBPX1JET05MWSB8IE9fRElSRUNUT1JZIHwgT19DTE9FWEVDKTtcbitcdGlmICghQVNTRVJUX0dFKGRpcmZkLCAwLCBcIm9wZW5fdG1wZGlyXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlkbWFwcGVkX2RpcmZkID0gY3JlYXRlX2lkbWFwcGVkX3RtcGZzKCk7XG4rXHRpZiAoIUFTU0VSVF9HRShpZG1hcHBlZF9kaXJmZCwgMCwgXCJjcmVhdGVfaWRtYXBwZWRfdG1wZnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitcdGlmICghQVNTRVJUX09LKGV4ZXJjaXNlX2lub2RlX2lkbWFwX2hvb2tzKGRpcmZkKSwgXCJpZGVudGl0eV9pZG1hcFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9PSyhleGVyY2lzZV9pbm9kZV9pZG1hcF9ob29rcyhpZG1hcHBlZF9kaXJmZCksXG4rXHRcdCAgICAgICBcImlkbWFwcGVkX21vdW50XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkZW50aXR5X2lkbWFwX3NlZW4sIGV4cGVjdGVkLFxuK1x0XHQgICAgICAgXCJpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdHJldCA9IEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuLCBleHBlY3RlZCxcbitcdFx0XHRcImlub2RlX2lkbWFwcGVkX21vdW50X3NlZW5cIikgPyAwIDogLTE7XG4rXG4rb3V0OlxuK1x0aWYgKGlkbWFwcGVkX2RpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoaWRtYXBwZWRfZGlyZmQpO1xuK1x0aWYgKGRpcmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZGlyZmQpO1xuK1x0cm1kaXIodG1wZGlyKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG5AQCAtNTMsNiArMjc4LDEwIEBAIHN0YXRpYyBpbnQgdGVzdF9sc20oc3RydWN0IGxzbSAqc2tlbClcbiBcbiBcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZW1vbml0b3JlZF9waWQgPSBnZXRwaWQoKTtcbiBcbitcdGVyciA9IHRlc3RfbHNtX2lub2RlX2lkbWFwKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInRlc3RfbHNtX2lub2RlX2lkbWFwXCIpKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuIFx0ZXJyID0gc3RhY2tfbXByb3RlY3QoKTtcbiBcdGlmICghQVNTRVJUX0VRKGVyciwgLTEsIFwic3RhY2tfbXByb3RlY3RcIikgfHxcbiBcdCAgICAhQVNTRVJUX0VRKGVycm5vLCBFUEVSTSwgXCJzdGFja19tcHJvdGVjdFwiKSlcbkBAIC03MSw2ICszMDAsOCBAQCBzdGF0aWMgaW50IHRlc3RfbHNtKHN0cnVjdCBsc20gKnNrZWwpXG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vjb3B5X3Rlc3QgPSAwO1xuIFx0c2tlbC1cdTAwM2Vic3MtXHUwMDNlYnBybV9jb3VudCA9IDA7XG4gXHRza2VsLVx1MDAzZWJzcy1cdTAwM2VtcHJvdGVjdF9jb3VudCA9IDA7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2Vpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZWlub2RlX2lkbWFwcGVkX21vdW50X3NlZW4gPSAwO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuaW5kZXggN2RlMTczZGFmMjdiNi4uN2UzMmZiZGRiZmFkZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9sc20uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xzbS5jXG5AQCAtODQsNiArODQsODUgQEAgY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIGludCBtb25pdG9yZWRfcGlkID0gMDtcbiBpbnQgbXByb3RlY3RfY291bnQgPSAwO1xuIGludCBicHJtX2NvdW50ID0gMDtcbitfX3UzMiBpbm9kZV9pZGVudGl0eV9pZG1hcF9zZWVuID0gMDtcbitfX3UzMiBpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuID0gMDtcbitcbitlbnVtIHtcbitcdElOT0RFX0lETUFQX0NSRUFURVx0PSAxVSBcdTAwM2NcdTAwM2MgMCxcbitcdElOT0RFX0lETUFQX0xJTktcdD0gMVUgXHUwMDNjXHUwMDNjIDEsXG4rXHRJTk9ERV9JRE1BUF9TWU1MSU5LXHQ9IDFVIFx1MDAzY1x1MDAzYyAyLFxuK1x0SU5PREVfSURNQVBfTUtESVJcdD0gMVUgXHUwMDNjXHUwMDNjIDMsXG4rXHRJTk9ERV9JRE1BUF9NS05PRFx0PSAxVSBcdTAwM2NcdTAwM2MgNCxcbitcdElOT0RFX0lETUFQX1BFUk1JU1NJT05cdD0gMVUgXHUwMDNjXHUwMDNjIDUsXG4rfTtcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgaXNfbW9uaXRvcmVkX2lkbWFwKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwKVxuK3tcbitcdF9fdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcbitcdHJldHVybiBtb25pdG9yZWRfcGlkID09IHBpZCBcdTAwMjZcdTAwMjYgaWRtYXA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBpc19pZGVudGl0eV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcClcbit7XG4rXHRyZXR1cm4gaWRtYXAtXHUwMDNldWlkX21hcC5ucl9leHRlbnRzID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgaWRtYXAtXHUwMDNlZ2lkX21hcC5ucl9leHRlbnRzID09IDA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJlY29yZF9pbm9kZV9pZG1hcChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbitcdFx0XHRcdFx0ICAgICAgX191MzIgaG9vaywgaW50IHJldClcbit7XG4rXHRpZiAocmV0IHx8ICFpc19tb25pdG9yZWRfaWRtYXAoaWRtYXApKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKGlzX2lkZW50aXR5X2lkbWFwKGlkbWFwKSlcbitcdFx0aW5vZGVfaWRlbnRpdHlfaWRtYXBfc2VlbiB8PSBob29rO1xuK1x0ZWxzZVxuK1x0XHRpbm9kZV9pZG1hcHBlZF9tb3VudF9zZWVuIHw9IGhvb2s7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwibHNtL2lub2RlX2NyZWF0ZVwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX2NyZWF0ZSwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9DUkVBVEUsIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX0xJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9zeW1saW5rXCIpXG4raW50IEJQRl9QUk9HKHRlc3RfaW5vZGVfc3ltbGluaywgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX1NZTUxJTkssIHJldCk7XG4rfVxuK1xuK1NFQyhcImxzbS9pbm9kZV9ta2RpclwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX21rZGlyLCBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LRElSLCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfbWtub2RcIilcbitpbnQgQlBGX1BST0codGVzdF9pbm9kZV9ta25vZCwgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0ICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2LCBpbnQgcmV0KVxuK3tcbitcdHJldHVybiByZWNvcmRfaW5vZGVfaWRtYXAoaWRtYXAsIElOT0RFX0lETUFQX01LTk9ELCByZXQpO1xuK31cbitcbitTRUMoXCJsc20vaW5vZGVfcGVybWlzc2lvblwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2lub2RlX3Blcm1pc3Npb24sIHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgaW50IHJldClcbit7XG4rXHRyZXR1cm4gcmVjb3JkX2lub2RlX2lkbWFwKGlkbWFwLCBJTk9ERV9JRE1BUF9QRVJNSVNTSU9OLCByZXQpO1xuK31cbiBcbiBTRUMoXCJsc20vZmlsZV9tcHJvdGVjdFwiKVxuIGludCBCUEZfUFJPRyh0ZXN0X2ludF9ob29rLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE2OjU4OjM4LjAzNzA0MTc3M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzMwMzAzMDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCBkb2Vzbid0LCBidXQgbGV0J3MgYmUgdGhvcm91Z2guXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGFsbCBhYm91dCBwbHVtYmluZyBhIG5ldyBhcmd1bWVudCwgYHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwYCwgdGhyb3VnaCB0aGUgTFNNIGhvb2sgY2hhaW4sIHNwZWNpZmljYWxseSB0byBpbm9kZSBvcGVyYXRpb25zIGxpa2UgYGlub2RlX2NyZWF0ZWAsIGBpbm9kZV9saW5rYCwgZXRjLiBUaGUgY2hhbmdlcyBzZWVtIHByZXR0eSBmb2N1c2VkIG9uIHByb3BhZ2F0aW5nIHRoaXMgcG9pbnRlciBmcm9tIHRoZSBWRlMgbGF5ZXIgKGBmcy9uYW1laS5jYCwgYGZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuY2ApIGRvd24gdG8gdGhlIHNlY3VyaXR5IGhvb2tzIChgc2VjdXJpdHkvc2VjdXJpdHkuY2AsIGhlYWRlciBmaWxlcyksIGFuZCBmaW5hbGx5IGludG8gdGhlIExTTSBpbXBsZW1lbnRhdGlvbnMgdGhlbXNlbHZlcyAoYHNlY3VyaXR5L3NlbGludXgvaG9va3MuY2AsIGBzZWN1cml0eS9zbWFjay9zbWFja19sc20uY2AsIGFuZCB0aGUgQlBGIHRlc3RzKS5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiAgV2UncmUgKm5vdCogc2VlaW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIHRoYXQgYXJlIHRoZW4gc2VudCB0byB1c2Vyc3BhY2UuIFRoZSBgaWRtYXBgIGFyZ3VtZW50IGlzIHBhc3NlZCBieSB2YWx1ZSAodGhlIHBvaW50ZXIgaXRzZWxmKSwgYW5kIHRoZSBjaGFuZ2VzIGFyZSwgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGp1c3QgcGx1bWJpbmcgYW4gZXhpc3RpbmcgcG9pbnRlci4gVGhlcmUncyBubyBjcmVhdGlvbiBvciBjb3B5aW5nIG9mIG5ldywgdW5pbml0aWFsaXplZCBkYXRhIHRoYXQncyB2aXNpYmxlIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgdGhlIG1haW4gS01TQU4gY29uY2Vybi4gVGhlIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGZgIGRvIHJlYWQgZmllbGRzIGZyb20gdGhlIGBpZG1hcGAgcG9pbnRlciwgbGlrZSBgaWRtYXAtXHUwMDNldWlkX21hcC5ucl9leHRlbnRzYCwgYnV0IHRoaXMgaXMgc3RhbmRhcmQgcG9pbnRlciBkZXJlZmVyZW5jaW5nIG9uIGFuIGV4aXN0aW5nIGtlcm5lbCBzdHJ1Y3R1cmUgdGhhdCdzIGluaXRpYWxpemVkIGF0IG1vdW50IHRpbWUuXG5cbkkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBvciB1c2VkIGluIGEgd2F5IHRoYXQgcmVxdWlyZXMgS01TQU4uIFN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgcG9pbnRlciBpdHNlbGYg4oCTIGlmIGl0J3MgaW52YWxpZCwgZnJlZWQgcHJlbWF0dXJlbHksIGV0Yy4gIFxuXG5UbyBiZSBleHRyYSBzdXJlLCBsZXQgbWUgbWVudGFsbHkgY2hlY2suIE5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIHJpZ2h0PyBObywgdGhhdCdzIG5vdCB3aGF0IEknbSBzZWVpbmcuIEFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZSwgYGlkbWFwYCBpcyBhIHBvaW50ZXIsIGFuZCBpdHMgdmFsdWUgaXMgaW5pdGlhbGl6ZWQuIEFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQ/IE5vLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIE5lZWRzS01TQU4gPSBmYWxzZS4gIFRoZSBwYXRjaCBzZXJpZXMganVzdCBhZGRzIGEgcG9pbnRlciBhcyBhbiBhcmd1bWVudCBhbmQgcHJvcGFnYXRlcyBpdC4gVGhlcmUncyBub3RoaW5nIGluIGhlcmUgdGhhdCBjcmVhdGVzIG5ldyBhbGxvY2F0aW9ucyBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCB3b3VsZCBpbmNyZWFzZSB0aGUgcmlzayBvZiBLTVNBTi1kZXRlY3RhYmxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiAgUmVndWxhciBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4gd2lsbCBiZSBzdWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3MSwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxNjo1ODo1MS4zNDAwNzQ3MzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgYSBgc3RydWN0IG1udF9pZG1hcCAqYCBhcmd1bWVudCB0byBzZXZlcmFsIExTTSBpbm9kZSBob29rcyAoY3JlYXRlLCBsaW5rLCBzeW1saW5rLCBta2RpciwgbWtub2QsIHBlcm1pc3Npb24pIGFuZCBwcm9wYWdhdGVzIGl0IGZyb20gdGhlIFZGUyBsYXllciB0byB0aGUgTFNNIGltcGxlbWVudGF0aW9ucyBhbmQgQlBGIGhvb2tzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIGhhbmRsaW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MsIHN1Y2ggYXMgZGVyZWZlcmVuY2luZyBhbiBpbnZhbGlkIG9yIGZyZWVkIGBpZG1hcGAgcG9pbnRlciwgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIGdlbmVyYWwga2VybmVsIHRlc3RpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyBhIGBzdHJ1Y3QgbW50X2lkbWFwICpgIGFyZ3VtZW50IHRvIHNldmVyYWwgTFNNIGlub2RlIGhvb2tzIChjcmVhdGUsIGxpbmssIHN5bWxpbmssIG1rZGlyLCBta25vZCwgcGVybWlzc2lvbikgYW5kIHByb3BhZ2F0ZXMgaXQgZnJvbSB0aGUgVkZTIGxheWVyIHRvIHRoZSBMU00gaW1wbGVtZW50YXRpb25zIGFuZCBCUEYgaG9va3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgaGFuZGxpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncywgc3VjaCBhcyBkZXJlZmVyZW5jaW5nIGFuIGludmFsaWQgb3IgZnJlZWQgYGlkbWFwYCBwb2ludGVyLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dzch[1] Phase: Succeeded StartedAt: 2026-08-24 16:59:03 +0000 UTC FinishedAt: 2026-08-24 16:59:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dzch[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 16:59:03 +0000 UTC FinishedAt: 2026-08-24 16:59:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dzch[2] Phase: Succeeded StartedAt: 2026-08-24 16:59:03 +0000 UTC FinishedAt: 2026-08-24 17:20:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dzch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","vfs_create","vfs_mkobj","vfs_mkdir","vfs_mknod","vfs_symlink","vfs_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"fbf1f054-896c-4ac0-82a1-06d3a8cc2380","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-24 16:59:03 +0000 UTC FinishedAt: 2026-08-24 17:20:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","vfs_create","vfs_mkobj","vfs_mkdir","vfs_mknod","vfs_symlink","vfs_link"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"fbf1f054-896c-4ac0-82a1-06d3a8cc2380","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5dzch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","vfs_create","vfs_mkobj","vfs_mkdir","vfs_mknod","vfs_symlink","vfs_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"fbf1f054-896c-4ac0-82a1-06d3a8cc2380","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 16:59:03 +0000 UTC FinishedAt: 2026-08-24 16:59:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dzch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","vfs_create","vfs_mkobj","vfs_mkdir","vfs_mknod","vfs_symlink","vfs_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"fbf1f054-896c-4ac0-82a1-06d3a8cc2380","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 16:59:03 +0000 UTC FinishedAt: 2026-08-24 16:59:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow5dzch/series-workflow5dzch-convert-artifact-3598966031/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dzch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","vfs_create","vfs_mkobj","vfs_mkdir","vfs_mknod","vfs_symlink","vfs_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"fbf1f054-896c-4ac0-82a1-06d3a8cc2380","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Failed StartedAt: 2026-08-24 16:59:13 +0000 UTC FinishedAt: 2026-08-24 17:20:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dzch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","vfs_create","vfs_mkobj","vfs_mkdir","vfs_mknod","vfs_symlink","vfs_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"fbf1f054-896c-4ac0-82a1-06d3a8cc2380","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Error StartedAt: 2026-08-24 16:59:13 +0000 UTC FinishedAt: 2026-08-24 17:20: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:*b1539453-50e1-425e-bf22-543e3e80ce51,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-workflow5dzch/series-workflow5dzch-convert-artifact-3598966031/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5dzch[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["security_inode_create","security_inode_link","security_inode_symlink","security_inode_mkdir","security_inode_mknod","vfs_create","vfs_mkobj","vfs_mkdir","vfs_mknod","vfs_symlink","vfs_link"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SECURITY","SECURITY_SELINUX","SECURITY_SMACK","BPF_LSM","CACHEFILES"],"series_id":"fbf1f054-896c-4ac0-82a1-06d3a8cc2380","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Error StartedAt: 2026-08-24 16:59:13 +0000 UTC FinishedAt: 2026-08-24 17:15: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:*b1539453-50e1-425e-bf22-543e3e80ce51,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-workflow5dzch/series-workflow5dzch-convert-artifact-3598966031/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil