Name: series-workflowbn4fq Phase: Failed StartedAt: 2026-09-03 18:12:03 +0000 UTC FinishedAt: 2026-09-03 18:38:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn4fq[0] Phase: Succeeded StartedAt: 2026-09-03 18:12:03 +0000 UTC FinishedAt: 2026-09-03 18:38:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn4fq[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 18:12:03 +0000 UTC FinishedAt: 2026-09-03 18:38:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE4OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyAmIzM5O2NvbnN0JiMzOTsgcXVhbGlmaWVycyB0byBwb2ludGVyIHBhcmFtZXRlcnMgYWNyb3NzIG1lbWNvbnRyb2wsIHN3YXAsIGFuZCBwYWdlIGNvdW50ZXIgaGVscGVyIGZ1bmN0aW9ucyB0byBpbXByb3ZlIGNvbnN0LWNvcnJlY3RuZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGV4ZWN1dGFibGUgbG9naWMsIHJ1bnRpbWUgYXNzZXJ0aW9ucywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxODozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE3NGRiYzZmNDcwNjQ1NmNiNTJmNDgzOGZkZTY4NDVjZmMwYjc2ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE4OjM3OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDk0NWQ3ZGJmMWJiMmMuLmUxOGI0NDk2NWQwNWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0zNjMsNyAmIzQzOzM2Myw3IEBAIGVudW0gb2JqZXh0X2ZsYWdzIHtcbiAgKlxuICAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgbWVtY2cgd29uJiMzOTt0IGJlIHJlbGVhc2VkLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9vbmNlKHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjZ3JvdXBfbXV0ZXgpKTtcbiBcdHJldHVybiBvYmpjZyA/IFJFQURfT05DRShvYmpjZy1cdTAwM2VtZW1jZykgOiBOVUxMO1xuQEAgLTM3Nyw3ICYjNDM7Mzc3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4gICogb3IgTlVMTC4gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGZvbGlvIGlzIGtub3duIHRvIGhhdmUgYVxuICAqIHByb3BlciBvYmplY3QgY2dyb3VwIHBvaW50ZXIuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGEgPSBmb2xpby1cdTAwM2VtZW1jZ19kYXRhO1xuIFxuQEAgLTQxNSw3ICYjNDM7NDE1LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBOb3RlOiBUaGUgY2FsbGVyIHNob3VsZCBob2xkIGFuIHJjdSByZWFkIGxvY2sgb3IgY2dyb3VwX211dGV4IHRvIHByb3RlY3RcbiAgKiBtZW1jZyBhc3NvY2lhdGVkIHdpdGggYSBmb2xpbyBmcm9tIGJlaW5nIHJlbGVhc2VkLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xuIFxuQEAgLTQyOCw3ICYjNDM7NDI4LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKlxuICAqIFJldHVybnMgdHJ1ZSBpZiBmb2xpbyBpcyBjaGFyZ2VkIHRvIGEgbWVtb3J5IGNncm91cCwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICovXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZm9saW8tXHUwMDNlbWVtY2dfZGF0YSAhPSAwO1xuIH1cbkBAIC00NDgsNyAmIzQzOzQ0OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19jaGFyZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gICogQSBjYWxsZXIgc2hvdWxkIGhvbGQgYW4gcmN1IHJlYWQgbG9jayB0byBwcm90ZWN0IG1lbWNnIGFzc29jaWF0ZWQgd2l0aCBhXG4gICogcGFnZSBmcm9tIGJlaW5nIHJlbGVhc2VkLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0LypcbiBcdCAqIEJlY2F1c2UgZm9saW8tXHUwMDNlbWVtY2dfZGF0YSBtaWdodCBiZSBjaGFuZ2VkIGFzeW5jaHJvbm91c2x5XG5AQCAtNDY1LDE0ICYjNDM7NDY1LDE0IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0aWYgKFBhZ2VUYWlsKHBhZ2UpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHJldHVybiBmb2xpb19tZW1jZ19jaGVjaygoc3RydWN0IGZvbGlvICopcGFnZSk7XG4mIzQzO1x0cmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKChjb25zdCBzdHJ1Y3QgZm9saW8gKilwYWdlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcbkBAIC00OTQsMTkgJiM0Mzs0OTQsMTkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JcbiAgKiB0aGF0IHRoZSBmb2xpbyBoYXMgYW4gYXNzb2NpYXRlZCBtZW1vcnkgY2dyb3VwLiBJdCYjMzk7cyBub3Qgc2FmZSB0byBjYWxsXG4gICogdGhpcyBmdW5jdGlvbiBhZ2FpbnN0IHNvbWUgdHlwZXMgb2YgZm9saW9zLCBlLmcuIHNsYWIgZm9saW9zLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19rbWVtKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19rbWVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZVRhaWwoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSksIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuIFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgXHUwMDI2IE1FTUNHX0RBVEFfT0JKRVhUUywgZm9saW8pO1xuIFx0cmV0dXJuIGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgXHUwMDI2IE1FTUNHX0RBVEFfS01FTTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdHJldHVybiBmb2xpb19tZW1jZ19rbWVtKHBhZ2VfZm9saW8ocGFnZSkpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIChtZW1jZyA9PSByb290X21lbV9jZ3JvdXApO1xuIH1cbkBAIC01MjIsNyAmIzQzOzUyMiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICAqIGFuZCBkbyBub3QgaG9ub3VyIHNjLVx1MDAzZW1lbWNnIGNhbiB1c2UgdGhpcyB0byBlYXJseS1yZXR1cm4gMCBpbiBwZXItbWVtY2dcbiAgKiBjb250ZXh0cy5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHJldHVybiAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKTtcbiB9XG5AQCAtNTM3LDggJiM0Mzs1MzcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9kaXNhYmxlZCh2b2lkKVxuIFx0cmV0dXJuICFjZ3JvdXBfc3Vic3lzX2VuYWJsZWQobWVtb3J5X2NncnBfc3Vic3lzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi1cdFx0XHRcdFx0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nICptaW4sXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nICpsb3csXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nICp1c2FnZSlcbkBAIC01OTIsOCAmIzQzOzU5Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0LypcbiBcdCAqIFRoZSByb290IG1lbWNnIGRvZXNuJiMzOTt0IGFjY291bnQgY2hhcmdlcywgYW5kIGRvZXNuJiMzOTt0IHN1cHBvcnRcbkBAIC02MDQsOCAmIzQzOzYwNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4gXHRcdG1lbWNnID09IHRhcmdldDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0aWYgKG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQodGFyZ2V0LCBtZW1jZykpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC02MTQsOCAmIzQzOzYxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuIFx0XHRwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnkpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi1cdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpZiAobWVtX2Nncm91cF91bnByb3RlY3RlZCh0YXJnZXQsIG1lbWNnKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTY4OCw3ICYjNDM7Njg4LDcgQEAgdm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KTtcbiAgKiBAcGdkYXQgY29tYmluYXRpb24uIFRoaXMgY2FuIGJlIHRoZSBub2RlIGxydXZlYywgaWYgdGhlIG1lbW9yeVxuICAqIGNvbnRyb2xsZXIgaXMgZGlzYWJsZWQuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICptZW1fY2dyb3VwX2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG5AQCAtNzI5LDcgJiM0Mzs3MjksNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKm1lbV9jZ3JvdXBfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiAgKiB0aGVpciBiaW5kaW5nIGlzIHN0YWJsZSBpZiB0aGUgcmV0dXJuZWQgbHJ1dmVjIG1hdGNoZXMgdGhlIG9uZSB0aGUgY2FsbGVyIGhhc1xuICAqIGxvY2tlZC4gVXNlZnVsIGZvciBsb2NrIGJhdGNoaW5nLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuIFxuQEAgLTc0MywxMSAmIzQzOzc0MywxMSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4gXG4gc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKTtcbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmZsYWdzKTtcbiBcbiBzdGF0aWMgaW5saW5lXG5AQCAtODA2LDcgJiM0Mzs4MDYsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKTtcbiB2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0ICAgaW50ICgqKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKTtcbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC04MTUsNyAmIzQzOzgxNSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKTtcbiBcbi1zdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIG1lbWNnID8gY2dyb3VwX2lkKG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXApIDogMDtcbiB9XG5AQCAtODI3LDcgJiM0Mzs4MjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3MobSkpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbiBcbkBAIC04NDQsMTMgJiM0Mzs4NDQsMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiAgKlxuICAqIFJldHVybnMgdGhlIHBhcmVudCBtZW1jZywgb3IgTlVMTCBpZiB0aGlzIGlzIHRoZSByb290LlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50X21lbV9jZ3JvdXAoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fY3NzKG1lbWNnLVx1MDAzZWNzcy5wYXJlbnQpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICpyb290KVxuIHtcbiBcdGlmIChyb290ID09IG1lbWNnKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC04NTgsNyAmIzQzOzg1OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqdGFza19tZW1jZztcbiBcdGJvb2wgbWF0Y2ggPSBmYWxzZTtcbkBAIC04NzEsOCAmIzQzOzg3MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRyZXR1cm4gbWF0Y2g7XG4gfVxuIFxuLXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1pbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpO1xuJiM0MztzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO2lub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG5AQCAtODg1LDcgJiM0Mzs4ODUsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpO1xuIFxuIHN0YXRpYyBpbmxpbmVcbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbkBAIC05MDIsOSAmIzQzOzkwMiw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4gXHRcdF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF9tYXNrKTtcbiB9XG4gXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiYjNDM7dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiBcbi12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbiBcbiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC05MTcsNyAmIzQzOzkxNyw3IEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdCAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbkBAIC05MzIsMTUgJiM0Mzs5MzIsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudCk7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuIGJvb2wgbWVtY2dfc3RhdF9pdGVtX3ZhbGlkKGludCBpZHgpO1xuIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTtcbi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO1x0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbiBcbiB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC05NTEsNyAmIzQzOzk1Miw3IEBAIHZvaWQgbW9kX2xydXZlY19rbWVtX3N0YXRlKHZvaWQgKnAsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKTtcbiB2b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBjb3VudCk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsIHVuc2lnbmVkIGxvbmcgbnIpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuQEAgLTEwMzYsNyAmIzQzOzEwMzcsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfd29ya3F1ZXVlKHZvaWQpO1xuIGV4dGVybiBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpO1xuICNlbHNlIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTA0NSw0NyAmIzQzOzEwNDYsNDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4gXG4gI2RlZmluZSByb290X21lbV9jZ3JvdXBcdFx0KE5VTEwpXG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QoY29uc3Qgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTExMCw4ICYjNDM7MTExMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19tZW1vcnlfZXZlbnRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLVx0XHRcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKm1pbixcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKmxvdyxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKnVzYWdlKVxuQEAgLTExMjQsMTkgJiM0MzsxMTI1LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi1cdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTExNzUsMjUgJiM0MzsxMTc2LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICptZW1fY2dyb3VwX2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiB7XG4gXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHJldHVybiBcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50X21lbV9jZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTIwOCw3ICYjNDM7MTIwOSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0xMjQxLDcgJiM0MzsxMjQyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XG4gXG5AQCAtMTI1MCw3ICYjNDM7MTI1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFxuQEAgLTEyNTksNyAmIzQzOzEyNjAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIFx1MDAyNnBnZGF0LVx1MDAzZV9fbHJ1dmVjO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbiB7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuQEAgLTEyODcsNyAmIzQzOzEyODgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zY2FuX3Rhc2tzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMjk5LDcgJiM0MzsxMzAwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMzE0LDcgJiM0MzsxMzE1LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTMyNSwxOSAmIzQzOzEzMjYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gXG4gc3RhdGljIGlubGluZVxuLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO3Vuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkXG4tbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7bWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiB9XG4gXG5AQCAtMTM2NiwxNyAmIzQzOzEzNjgsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTM5MSwxOSAmIzQzOzEzOTMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdFx0ICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIHtcbiBcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG5AQCAtMTQzMSw3ICYjNDM7MTQzMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsIHVuc2lnbmVkIGxvbmcgbnIpXG4ge1xuIH1cbkBAIC0xNDY1LDcgJiM0MzsxNDY3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfd29ya3F1ZXVlKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuQEAgLTE1MjgsOCAmIzQzOzE1MzAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1dmVjX3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZ1xuIH1cbiBcbiAvKiBUZXN0IHJlcXVpcmVzIGEgc3RhYmxlIGZvbGlvLVx1MDAzZW1lbWNnIGJpbmRpbmcsIHNlZSBmb2xpb19tZW1jZygpICovXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21hdGNoZXNfbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21hdGNoZXNfbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0cmV0dXJuIGxydXZlY19wZ2RhdChscnV2ZWMpID09IGZvbGlvX3BnZGF0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBscnV2ZWNfbWVtY2cobHJ1dmVjKSA9PSBmb2xpb19tZW1jZyhmb2xpbyk7XG5AQCAtMTY0Miw3ICYjNDM7MTY0NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3NldF9zb2NrZXRfcHJlc3N1cmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0d3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bWVtY2ctXHUwMDNlc29ja2V0X3ByZXNzdXJlX3NlcWxvY2ssIGZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgc2VxO1xuIFx0dTY0IHZhbDtcbkBAIC0xNjYwLDcgJiM0MzsxNjYyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXNvY2tldF9wcmVzc3VyZSwgamlmZmllcyAmIzQzOyBIWik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfZ2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfZ2V0X3NvY2tldF9wcmVzc3VyZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzb2NrZXRfcHJlc3N1cmUpO1xuIH1cbkBAIC0xNzczLDcgJiM0MzsxNzc1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuICAqIEEgaGVscGVyIGZvciBhY2Nlc3NpbmcgbWVtY2cmIzM5O3Mga21lbV9pZCwgdXNlZCBmb3IgZ2V0dGluZ1xuICAqIGNvcnJlc3BvbmRpbmcgTFJVIGxpc3RzLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gbWVtY2cgPyBtZW1jZy1cdTAwM2VrbWVtY2dfaWQgOiAtMTtcbiB9XG5AQCAtMTg0NSw3ICYjNDM7MTg0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIC0xO1xuIH1cbkBAIC0xODYxLDcgJiM0MzsxODYzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbm9fdCBwYWdlX2Nncm91cF9pbm8oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE4ODUsNyAmIzQzOzE4ODcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbiB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xuIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbi1ib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiYjNDM7Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbkBAIC0xODk5LDcgJiM0MzsxOTAxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuIFx0XHRcdFx0XHQgICAgIHNpemVfdCBzaXplKVxuIHtcbiB9XG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0LyogaWYgenN3YXAgaXMgZGlzYWJsZWQsIGRvIG5vdCBibG9jayBwYWdlcyBnb2luZyB0byB0aGUgc3dhcHBpbmcgZGV2aWNlICovXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC0xOTEyLDcgJiM0MzsxOTE0LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBib29sIG1lbV9jZ3JvdXBfb29tX3N5bmNocm9uaXplKGJvb2wgd2FpdCk7XG4gXG4tc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4gXHRyZXR1cm4gcC1cdTAwM2VtZW1jZ19pbl9vb207XG4gfVxuQEAgLTE5MzAsNyAmIzQzOzE5MzIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbiB9XG4gXG4gI2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovXG4tc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA4NGUyMzdmMmMxN2RiLi44ZTFlM2E1MDc1N2EzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTE2NTcsNyAmIzQzOzE2NTcsNyBAQCBleHRlcm4gdm9pZCBpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmblxuIFxuIGV4dGVybiB2b2lkIGxydXZlY19pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGdsaXN0X2RhdGEgKmxydXZlY19wZ2RhdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHBnbGlzdF9kYXRhICpscnV2ZWNfcGdkYXQoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIHtcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gXHRyZXR1cm4gbHJ1dmVjLVx1MDAzZXBnZGF0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG5pbmRleCAwN2I3Y2IxMjI0OWM3Li4yYmFmN2EyYjI5YjJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuQEAgLTYzLDEyICYjNDM7NjMsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfY291bnRlcl9pbml0KHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG4gXHRjb3VudGVyLVx1MDAzZXRyYWNrX2ZhaWxjbnQgPSBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChjb25zdCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuIHtcbiBcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmNvdW50ZXItXHUwMDNldXNhZ2UpO1xuIH1cbiBcbi1sb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XG4mIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihjb25zdCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jYW5jZWwoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCBmYzI5MGUyOWU0YTllLi44NDNkNzA2ODBiOGUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtNTA1LDkgJiM0Mzs1MDUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxuIFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiB9XG4gXG4tbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4tZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuJiM0Mztib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG5AQCAtNTE5LDE3ICYjNDM7NTE5LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIHZtX3N3YXBfZnVsbCgpO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDViOWUwZWJkNDJhZTAuLmY1NmU5NTg5NDhhYzAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTMzMSw3ICYjNDM7MzMxLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1jZ19icGZfZW5hYmxlZF9rZXkpO1xuICAqIElmIG1lbWNnIGlzIGJvdW5kIHRvIGEgdHJhZGl0aW9uYWwgaGllcmFyY2h5LCB0aGUgY3NzIG9mIHJvb3RfbWVtX2Nncm91cFxuICAqIGlzIHJldHVybmVkLlxuICAqL1xuLXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG5AQCAtMzU2LDcgJiM0MzszNTYsNyBAQCBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBhZnRlciBwYWdlX2Nncm91cF9pbm8oKSByZXR1cm5zLCBzbyBpdCBvbmx5IHNob3VsZCBiZSB1c2VkIGJ5IGNhbGxlcnMgdGhhdFxuICAqIGRvIG5vdCBjYXJlIChzdWNoIGFzIHByb2NmcyBpbnRlcmZhY2VzKS5cbiAgKi9cbi1pbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO2lub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHR1bnNpZ25lZCBsb25nIGlubyA9IDA7XG5AQCAtNDg5LDcgJiM0Mzs0ODksNyBAQCBzdHJ1Y3QgbHJ1dmVjX3N0YXRzIHtcbiBcdGxvbmcgc3RhdGVfcGVuZGluZ1tOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xuIH07XG4gXG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuIFx0bG9uZyB4O1xuQEAgLTUzMCw3ICYjNDM7NTMwLDcgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuICAqIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgZXZlbnQgY291bnRlcnMgYXJlIHN0b3JlZCBpblxuICAqIGVudW0gbm9kZV9zdGF0X2l0ZW0uXG4gICovXG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuQEAgLTU0Nyw3ICYjNDM7NTQ3LDcgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVbaV0pO1xuIH1cbiBcbi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47XG5AQCAtNzk5LDcgJiM0Mzs3OTksNyBAQCBzdGF0aWMgdm9pZCBmbHVzaF9tZW1jZ19zdGF0c19kd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2c3RhdHNfZmx1c2hfZHdvcmssIEZMVVNIX1RJTUUpO1xuIH1cbiBcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuIHtcbiBcdGxvbmcgeDtcbiBcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbkBAIC0xMDkxLDcgJiM0MzsxMDkxLDcgQEAgdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LFxuIFx0cHV0X2NwdSgpO1xuIH1cbiBcbi11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcbiYjNDM7dW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG4ge1xuIFx0aW50IGkgPSBtZW1jZ19ldmVudHNfaW5kZXgoZXZlbnQpO1xuIFxuQEAgLTEyMjAsNyAmIzQzOzEyMjAsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpXG4gICpcbiAgKiBTZWUgZm9saW9fbWVtY2coKSBmb3IgZm9saW8tXHUwMDNlb2JqY2cvbWVtY2cgYmluZGluZyBydWxlcy5cbiAgKi9cbi1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcbkBAIC0xNDQxLDcgJiM0MzsxNDQxLDcgQEAgdm9pZCBtZW1fY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuICAqXG4gICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuXG4gICovXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gXG5AQCAtMTQ2OSw3ICYjNDM7MTQ2OSw3IEBAIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzXG4gICogZGlzYWJsZWQgYW5kIHJjdSByZWFkIGxvY2sgaGVsZC5cbiAgKi9cbi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFxuQEAgLTE0OTgsNyAmIzQzOzE0OTgsNyBAQCBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBSZXR1cm46IFRoZSBscnV2ZWMgdGhpcyBmb2xpbyBpcyBvbiB3aXRoIGl0cyBsb2NrIGhlbGQgYW5kIGludGVycnVwdHNcbiAgKiBkaXNhYmxlZCBhbmQgcmN1IHJlYWQgbG9jayBoZWxkLlxuICAqL1xuLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHR1bnNpZ25lZCBsb25nICpmbGFncylcbiB7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5AQCAtMTcwOSw3ICYjNDM7MTcwOSw3IEBAIHN0YXRpYyBpbnQgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpbnQgaXRlbSlcbiBcdH1cbiB9XG4gXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4ge1xuIFx0cmV0dXJuIG1lbWNnX3BhZ2Vfc3RhdGUobWVtY2csIGl0ZW0pICpcbiBcdFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcbkBAIC0xODEyLDcgJiM0MzsxODEyLDggQEAgc3RhdGljIHZvaWQgbWVtb3J5X3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4gICogTk9URTogQG1lbWNnIGFuZCBAcCYjMzk7cyBtZW1fY2dyb3VwIGNhbiBiZSBkaWZmZXJlbnQgd2hlbiBoaWVyYXJjaHkgaXNcbiAgKiBlbmFibGVkXG4gICovXG4tdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbkBAIC0xODc3LDcgJiM0MzsxODc4LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAvKlxuICAqIFJldHVybiB0aGUgbWVtb3J5IChhbmQgc3dhcCwgaWYgY29uZmlndXJlZCkgbGltaXQgZm9yIGEgbWVtY2cuXG4gICovXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBtYXggPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNlbWVtb3J5Lm1heCk7XG4gXG5AQCAtNTgzOCw3ICYjNDM7NTgzOSw3IEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbi1sb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG5AQCAtNTg1NCw3ICYjNDM7NTg1NSw3IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICpcbiAgKiBSZXR1cm46IFJlbWFpbmluZyBjaGFyZ2VhYmxlIHBhZ2VzIGluIHRoZSBmb2xpbyYjMzk7cyBtZW1jZyBoaWVyYXJjaHkuXG4gICovXG4tbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0bG9uZyBtYXJnaW47XG5AQCAtNTg3MSw3ICYjNDM7NTg3Miw3IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBtYXJnaW47XG4gfVxuIFxuLWJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7Ym9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG5AQCAtNjEzOSw3ICYjNDM7NjE0MCw3IEBAIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLWJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO2Jvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0LyogaWYgenN3YXAgaXMgZGlzYWJsZWQsIGRvIG5vdCBibG9jayBwYWdlcyBnb2luZyB0byB0aGUgc3dhcHBpbmcgZGV2aWNlICovXG4gXHRpZiAoIXpzd2FwX2lzX2VuYWJsZWQoKSlcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXG5pbmRleCA0NTA1NDNmNGIzMThiLi44YzZmM2I0NTEzNmI0IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9jb3VudGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfY291bnRlci5jXG5AQCAtNTMsNyAmIzQzOzUzLDcgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLFxuICAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mXG4gICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cbiAgKi9cbi1sb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4ge1xuIFx0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uY1xuaW5kZXggMWRhNGZmNDg0ZjA5Ny4uNWY3NzU2ZTM3MGY3YSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pby5jXG5AQCAtMjU2LDEyICYjNDM7MjU2LDEzIEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQKVxuLXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZm9saW9fbWVtY2dfYmxrZ19jc3Moc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpmb2xpb19tZW1jZ19ibGtnX2Nzcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBjZ3JvdXBfZV9jc3MoZm9saW9fbWVtY2coZm9saW8pLVx1MDAzZWNzcy5jZ3JvdXAsIFx1MDAyNmlvX2NncnBfc3Vic3lzKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuJiM0MztzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4ge1xuIFx0Ym9vbCBjYW5fbWVyZ2UgPSB0cnVlO1xuIFxuQEAgLTI3Nyw3ICYjNDM7Mjc4LDggQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuIFx0cmV0dXJuIGNhbl9tZXJnZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sXG4mIzQzO1x0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcbiBcbkBAIC0yOTQsMTEgJiM0MzsyOTYsMTMgQEAgc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRjc3NfcHV0KGNzcyk7XG4gfVxuICNlbHNlXG4tc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuJiM0MztzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLFxuJiM0MztcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyBcdTAwMjZcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDBiNWQ1MDc3MzliY2IuLjk0NzE0ZDlkZDAwM2MgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTgyLDcgJiM0Mzs4Miw3IEBAIGVudW0gc3dhcF9jbHVzdGVyX2ZsYWdzIHtcbiBcbiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE4OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgJiMzOTtjb25zdCYjMzk7IHF1YWxpZmllcnMgdG8gcG9pbnRlciBwYXJhbWV0ZXJzIGFjcm9zcyBtZW1jb250cm9sLCBzd2FwLCBhbmQgcGFnZSBjb3VudGVyIGhlbHBlciBmdW5jdGlvbnMgdG8gaW1wcm92ZSBjb25zdC1jb3JyZWN0bmVzcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBleGVjdXRhYmxlIGxvZ2ljLCBydW50aW1lIGFzc2VydGlvbnMsIGNvbnRyb2wgZmxvdywgb3IgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNzRkYmM2ZjQ3MDY0NTZjYjUyZjQ4MzhmZGU2ODQ1Y2ZjMGI3NmRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxODozNzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggOTQ1ZDdkYmYxYmIyYy4uZTE4YjQ0OTY1ZDA1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTM2Myw3ICYjNDM7MzYzLDcgQEAgZW51bSBvYmpleHRfZmxhZ3MgewogICoKICAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgbWVtY2cgd29uJiMzOTt0IGJlIHJlbGVhc2VkLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKIHsKIAlsb2NrZGVwX2Fzc2VydF9vbmNlKHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8IGxvY2tkZXBfaXNfaGVsZCgmYW1wO2Nncm91cF9tdXRleCkpOwogCXJldHVybiBvYmpjZyA/IFJFQURfT05DRShvYmpjZy0mZ3Q7bWVtY2cpIDogTlVMTDsKQEAgLTM3Nyw3ICYjNDM7Mzc3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiAgKiBvciBOVUxMLiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZm9saW8gaXMga25vd24gdG8gaGF2ZSBhCiAgKiBwcm9wZXIgb2JqZWN0IGNncm91cCBwb2ludGVyLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpmb2xpb19vYmpjZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKmZvbGlvX29iamNnKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJdW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhID0gZm9saW8tJmd0O21lbWNnX2RhdGE7CiAKQEAgLTQxNSw3ICYjNDM7NDE1LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coc3RydWN0IGZvbGlvICpmb2xpbykKICAqIE5vdGU6IFRoZSBjYWxsZXIgc2hvdWxkIGhvbGQgYW4gcmN1IHJlYWQgbG9jayBvciBjZ3JvdXBfbXV0ZXggdG8gcHJvdGVjdAogICogbWVtY2cgYXNzb2NpYXRlZCB3aXRoIGEgZm9saW8gZnJvbSBiZWluZyByZWxlYXNlZC4KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTsKIApAQCAtNDI4LDcgJiM0Mzs0MjgsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICoKICAqIFJldHVybnMgdHJ1ZSBpZiBmb2xpbyBpcyBjaGFyZ2VkIHRvIGEgbWVtb3J5IGNncm91cCwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19jaGFyZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gZm9saW8tJmd0O21lbWNnX2RhdGEgIT0gMDsKIH0KQEAgLTQ0OCw3ICYjNDM7NDQ4LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoc3RydWN0IGZvbGlvICpmb2xpbykKICAqIEEgY2FsbGVyIHNob3VsZCBob2xkIGFuIHJjdSByZWFkIGxvY2sgdG8gcHJvdGVjdCBtZW1jZyBhc3NvY2lhdGVkIHdpdGggYQogICogcGFnZSBmcm9tIGJlaW5nIHJlbGVhc2VkLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZ19jaGVjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJLyoKIAkgKiBCZWNhdXNlIGZvbGlvLSZndDttZW1jZ19kYXRhIG1pZ2h0IGJlIGNoYW5nZWQgYXN5bmNocm9ub3VzbHkKQEAgLTQ2NSwxNCAmIzQzOzQ2NSwxNCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZ19jaGVjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFnZV9tZW1jZ19jaGVjayhzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYWdlX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewogCWlmIChQYWdlVGFpbChwYWdlKSkKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKChzdHJ1Y3QgZm9saW8gKilwYWdlKTsKJiM0MzsJcmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKChjb25zdCBzdHJ1Y3QgZm9saW8gKilwYWdlKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCkBAIC00OTQsMTkgJiM0Mzs0OTQsMTkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2IKICAqIHRoYXQgdGhlIGZvbGlvIGhhcyBhbiBhc3NvY2lhdGVkIG1lbW9yeSBjZ3JvdXAuIEl0JiMzOTtzIG5vdCBzYWZlIHRvIGNhbGwKICAqIHRoaXMgZnVuY3Rpb24gYWdhaW5zdCBzb21lIHR5cGVzIG9mIGZvbGlvcywgZS5nLiBzbGFiIGZvbGlvcy4KICAqLwotc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCVZNX0JVR19PTl9QR0ZMQUdTKFBhZ2VUYWlsKCZhbXA7Zm9saW8tJmd0O3BhZ2UpLCAmYW1wO2ZvbGlvLSZndDtwYWdlKTsKIAlWTV9CVUdfT05fRk9MSU8oZm9saW8tJmd0O21lbWNnX2RhdGEgJmFtcDsgTUVNQ0dfREFUQV9PQkpFWFRTLCBmb2xpbyk7CiAJcmV0dXJuIGZvbGlvLSZndDttZW1jZ19kYXRhICZhbXA7IE1FTUNHX0RBVEFfS01FTTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7c3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJcmV0dXJuIGZvbGlvX21lbWNnX2ttZW0ocGFnZV9mb2xpbyhwYWdlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiAobWVtY2cgPT0gcm9vdF9tZW1fY2dyb3VwKTsKIH0KQEAgLTUyMiw3ICYjNDM7NTIyLDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAgKiBhbmQgZG8gbm90IGhvbm91ciBzYy0mZ3Q7bWVtY2cgY2FuIHVzZSB0aGlzIHRvIGVhcmx5LXJldHVybiAwIGluIHBlci1tZW1jZwogICogY29udGV4dHMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QoY29uc3Qgc3RydWN0IHNocmlua19jb250cm9sICpzYykKIHsKIAlyZXR1cm4gIXNjLSZndDttZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtJmd0O21lbWNnKTsKIH0KQEAgLTUzNyw4ICYjNDM7NTM3LDggQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfZGlzYWJsZWQodm9pZCkKIAlyZXR1cm4gIWNncm91cF9zdWJzeXNfZW5hYmxlZChtZW1vcnlfY2dycF9zdWJzeXMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LAotCQkJCQkgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiYjNDM7CQkJCQkgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQkgdW5zaWduZWQgbG9uZyAqbWluLAogCQkJCQkgdW5zaWduZWQgbG9uZyAqbG93LAogCQkJCQkgdW5zaWduZWQgbG9uZyAqdXNhZ2UpCkBAIC01OTIsOCAmIzQzOzU5Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiAJCQkJICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LAotCQkJCQkgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LAomIzQzOwkJCQkJICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJLyoKIAkgKiBUaGUgcm9vdCBtZW1jZyBkb2VzbiYjMzk7dCBhY2NvdW50IGNoYXJnZXMsIGFuZCBkb2VzbiYjMzk7dCBzdXBwb3J0CkBAIC02MDQsOCAmIzQzOzYwNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCiAJCW1lbWNnID09IHRhcmdldDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCi0JCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCwKJiM0MzsJCQkJCWNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlpZiAobWVtX2Nncm91cF91bnByb3RlY3RlZCh0YXJnZXQsIG1lbWNnKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNjE0LDggJiM0Mzs2MTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCwKIAkJcGFnZV9jb3VudGVyX3JlYWQoJmFtcDttZW1jZy0mZ3Q7bWVtb3J5KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbWluKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCi0JCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCwKJiM0MzsJCQkJCWNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlpZiAobWVtX2Nncm91cF91bnByb3RlY3RlZCh0YXJnZXQsIG1lbWNnKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNjg4LDcgJiM0Mzs2ODgsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpOwogICogQHBnZGF0IGNvbWJpbmF0aW9uLiBUaGlzIGNhbiBiZSB0aGUgbm9kZSBscnV2ZWMsIGlmIHRoZSBtZW1vcnkKICAqIGNvbnRyb2xsZXIgaXMgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQkgICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7CkBAIC03MjksNyAmIzQzOzcyOSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogICogdGhlaXIgYmluZGluZyBpcyBzdGFibGUgaWYgdGhlIHJldHVybmVkIGxydXZlYyBtYXRjaGVzIHRoZSBvbmUgdGhlIGNhbGxlciBoYXMKICAqIGxvY2tlZC4gVXNlZnVsIGZvciBsb2NrIGJhdGNoaW5nLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlYyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwogCkBAIC03NDMsMTEgJiM0Mzs3NDMsMTEgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCiBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpOwogCi1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0MztzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAotc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCQkJCXVuc2lnbmVkIGxvbmcgKmZsYWdzKTsKIAogc3RhdGljIGlubGluZQpAQCAtODA2LDcgJiM0Mzs4MDYsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKTsKIHZvaWQgbWVtX2Nncm91cF9zY2FuX3Rhc2tzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCSAgIGludCAoKikoc3RydWN0IHRhc2tfc3RydWN0ICosIHZvaWQgKiksIHZvaWQgKmFyZyk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIDA7CkBAIC04MTUsNyAmIzQzOzgxNSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIH0KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7CiAKLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBtZW1jZyA/IGNncm91cF9pZChtZW1jZy0mZ3Q7Y3NzLmNncm91cCkgOiAwOwogfQpAQCAtODI3LDcgJiM0Mzs4MjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSkKIAlyZXR1cm4gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKG0pKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIApAQCAtODQ0LDEzICYjNDM7ODQ0LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAgKgogICogUmV0dXJucyB0aGUgcGFyZW50IG1lbWNnLCBvciBOVUxMIGlmIHRoaXMgaXMgdGhlIHJvb3QuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIG1lbV9jZ3JvdXBfZnJvbV9jc3MobWVtY2ctJmd0O2Nzcy5wYXJlbnQpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCSAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpyb290KQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICpyb290KQogewogCWlmIChyb290ID09IG1lbWNnKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTg1OCw3ICYjNDM7ODU4LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKnRhc2tfbWVtY2c7CiAJYm9vbCBtYXRjaCA9IGZhbHNlOwpAQCAtODcxLDggJiM0Mzs4NzEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXJldHVybiBtYXRjaDsKIH0KIAotc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwotaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKTsKJiM0MztzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTsKIAogc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKQEAgLTg4NSw3ICYjNDM7ODg1LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LAogCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKTsKIAogc3RhdGljIGlubGluZQotdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKJiM0Mzt1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQllbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKQEAgLTkwMiw5ICYjNDM7OTAyLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaykKIAkJX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spOwogfQogCi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwomIzQzO3Vuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiAKLXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiYjNDM7dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKQEAgLTkxNyw3ICYjNDM7OTE3LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogdm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgaW50IHZhbCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJCWVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgaW50IHZhbCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CkBAIC05MzIsMTUgJiM0Mzs5MzIsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLAogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudCk7Ci11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTsKLXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSk7CiYjNDM7dW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpOwomIzQzO3Vuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpOwomIzQzO3Vuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSk7CiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTsKIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTsKLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7Ci11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCWVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTsKJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJCSAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpOwotdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpOwogCiB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKQEAgLTk1MSw3ICYjNDM7OTUyLDcgQEAgdm9pZCBtb2RfbHJ1dmVjX2ttZW1fc3RhdGUodm9pZCAqcCwgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpOwogdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LAogCQkJdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19mb2xpb19ldmVudHMoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCWVudW0gdm1fZXZlbnRfaXRlbSBpZHgsIHVuc2lnbmVkIGxvbmcgbnIpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpAQCAtMTAzNiw3ICYjNDM7MTAzNyw3IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCk7CiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKTsKICNlbHNlIC8qIENPTkZJR19NRU1DRyAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTEwNDUsNDcgJiM0MzsxMDQ2LDQ3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQogCiAjZGVmaW5lIHJvb3RfbWVtX2Nncm91cAkJKE5VTEwpCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZ19jaGVjayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYWdlX21lbWNnX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQogewogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19rbWVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KGNvbnN0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiB7CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMTEwLDggJiM0MzsxMTExLDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX21lbW9yeV9ldmVudF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKLQkJCQkJIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICpyb290LAomIzQzOwkJCQkJIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJIHVuc2lnbmVkIGxvbmcgKm1pbiwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgKmxvdywKIAkJCQkJIHVuc2lnbmVkIGxvbmcgKnVzYWdlKQpAQCAtMTEyNCwxOSAmIzQzOzExMjUsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCi0JCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCiYjNDM7CQkJCQkgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LAotCQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCiYjNDM7CQkJCQljb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCwKLQkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LAomIzQzOwkJCQkJY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBmYWxzZTsKIH0KQEAgLTExNzUsMjUgJiM0MzsxMTc2LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KQogewogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKm1lbV9jZ3JvdXBfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKm1lbV9jZ3JvdXBfbHJ1dmVjKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJICAgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpCiB7CiAJcmV0dXJuICZhbXA7cGdkYXQtJmd0O19fbHJ1dmVjOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlYyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTsKIAlyZXR1cm4gJmFtcDtwZ2RhdC0mZ3Q7X19scnV2ZWM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MzsJCWNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyMDgsNyAmIzQzOzEyMDksNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZCkKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTEyNDEsNyAmIzQzOzEyNDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7CiAKQEAgLTEyNTAsNyAmIzQzOzEyNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICZhbXA7cGdkYXQtJmd0O19fbHJ1dmVjOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTsKIApAQCAtMTI1OSw3ICYjNDM7MTI2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICZhbXA7cGdkYXQtJmd0O19fbHJ1dmVjOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7CkBAIC0xMjg3LDcgJiM0MzsxMjg4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjk5LDcgJiM0MzsxMzAwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiAwOwogfQpAQCAtMTMxNCw3ICYjNDM7MTMxNSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9zZXEoc3RydWN0IHNlcV9maWxlICptKQogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xMzI1LDE5ICYjNDM7MTMyNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogfQogCiBzdGF0aWMgaW5saW5lCi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAomIzQzO3Vuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLW1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7bWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiYjNDM7CQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiB9CiAKQEAgLTEzNjYsMTcgJiM0MzsxMzY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogewogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCQllbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeCkKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKQogewogCXJldHVybiAwOwogfQpAQCAtMTM5MSwxOSAmIzQzOzEzOTMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkJICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpCiB7CiAJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJCQkJZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpCiB7CiAJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkJCSAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIHsKIAlyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpOwpAQCAtMTQzMSw3ICYjNDM7MTQzMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogewogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQllbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LCB1bnNpZ25lZCBsb25nIG5yKQogewogfQpAQCAtMTQ2NSw3ICYjNDM7MTQ2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAKQEAgLTE1MjgsOCAmIzQzOzE1MzAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1dmVjX3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZwogfQogCiAvKiBUZXN0IHJlcXVpcmVzIGEgc3RhYmxlIGZvbGlvLSZndDttZW1jZyBiaW5kaW5nLCBzZWUgZm9saW9fbWVtY2coKSAqLwotc3RhdGljIGlubGluZSBib29sIGZvbGlvX21hdGNoZXNfbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8sCi0JCXN0cnVjdCBscnV2ZWMgKmxydXZlYykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF0Y2hlc19scnV2ZWMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIHsKIAlyZXR1cm4gbHJ1dmVjX3BnZGF0KGxydXZlYykgPT0gZm9saW9fcGdkYXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgICAgbHJ1dmVjX21lbWNnKGxydXZlYykgPT0gZm9saW9fbWVtY2coZm9saW8pOwpAQCAtMTY0Miw3ICYjNDM7MTY0NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3NldF9zb2NrZXRfcHJlc3N1cmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZhbXA7bWVtY2ctJmd0O3NvY2tldF9wcmVzc3VyZV9zZXFsb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfZ2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAl1bnNpZ25lZCBpbnQgc2VxOwogCXU2NCB2YWw7CkBAIC0xNjYwLDcgJiM0MzsxNjYyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJV1JJVEVfT05DRShtZW1jZy0mZ3Q7c29ja2V0X3ByZXNzdXJlLCBqaWZmaWVzICYjNDM7IEhaKTsKIH0KIAotc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2dldF9zb2NrZXRfcHJlc3N1cmUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBSRUFEX09OQ0UobWVtY2ctJmd0O3NvY2tldF9wcmVzc3VyZSk7CiB9CkBAIC0xNzczLDcgJiM0MzsxNzc1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogICogQSBoZWxwZXIgZm9yIGFjY2Vzc2luZyBtZW1jZyYjMzk7cyBrbWVtX2lkLCB1c2VkIGZvciBnZXR0aW5nCiAgKiBjb3JyZXNwb25kaW5nIExSVSBsaXN0cy4KICAqLwotc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIG1lbWNnID8gbWVtY2ctJmd0O2ttZW1jZ19pZCA6IC0xOwogfQpAQCAtMTg0NSw3ICYjNDM7MTg0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIC0xOwogfQpAQCAtMTg2MSw3ICYjNDM7MTg2Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLAogewogfQogCi1zdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0MztzdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4ODUsNyAmIzQzOzE4ODcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpOwogdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTsKIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTsKLWJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwomIzQzO2Jvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiB7CkBAIC0xODk5LDcgJiM0MzsxOTAxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLAogCQkJCQkgICAgIHNpemVfdCBzaXplKQogewogfQotc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAkvKiBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgZG8gbm90IGJsb2NrIHBhZ2VzIGdvaW5nIHRvIHRoZSBzd2FwcGluZyBkZXZpY2UgKi8KIAlyZXR1cm4gdHJ1ZTsKQEAgLTE5MTIsNyAmIzQzOzE5MTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCiBib29sIG1lbV9jZ3JvdXBfb29tX3N5bmNocm9uaXplKGJvb2wgd2FpdCk7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyZXR1cm4gcC0mZ3Q7bWVtY2dfaW5fb29tOwogfQpAQCAtMTkzMCw3ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKQogfQogCiAjZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA4NGUyMzdmMmMxN2RiLi44ZTFlM2E1MDc1N2EzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTE2NTcsNyAmIzQzOzE2NTcsNyBAQCBleHRlcm4gdm9pZCBpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbgogCiBleHRlcm4gdm9pZCBscnV2ZWNfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbHJ1dmVjX3BnZGF0KHN0cnVjdCBscnV2ZWMgKmxydXZlYykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbHJ1dmVjX3BnZGF0KGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIHsKICNpZmRlZiBDT05GSUdfTUVNQ0cKIAlyZXR1cm4gbHJ1dmVjLSZndDtwZ2RhdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCmluZGV4IDA3YjdjYjEyMjQ5YzcuLjJiYWY3YTJiMjliMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaApAQCAtNjMsMTIgJiM0Mzs2MywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9jb3VudGVyX2luaXQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwKIAljb3VudGVyLSZndDt0cmFja19mYWlsY250ID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChjb25zdCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQogewogCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7Y291bnRlci0mZ3Q7dXNhZ2UpOwogfQogCi1sb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7CiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCBmYzI5MGUyOWU0YTllLi44NDNkNzA2ODBiOGUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtNTA1LDkgJiM0Mzs1MDUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcAogCV9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7CiB9CiAKLWxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7Ci1leHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwomIzQzO2Jvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKQEAgLTUxOSwxNyAmIzQzOzUxOSwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLAogewogfQogCi1zdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDsKIH0KIAotc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIHZtX3N3YXBfZnVsbCgpOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDViOWUwZWJkNDJhZTAuLmY1NmU5NTg5NDhhYzAgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTMzMSw3ICYjNDM7MzMxLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1jZ19icGZfZW5hYmxlZF9rZXkpOwogICogSWYgbWVtY2cgaXMgYm91bmQgdG8gYSB0cmFkaXRpb25hbCBoaWVyYXJjaHksIHRoZSBjc3Mgb2Ygcm9vdF9tZW1fY2dyb3VwCiAgKiBpcyByZXR1cm5lZC4KICAqLwotc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCkBAIC0zNTYsNyAmIzQzOzM1Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICogYWZ0ZXIgcGFnZV9jZ3JvdXBfaW5vKCkgcmV0dXJucywgc28gaXQgb25seSBzaG91bGQgYmUgdXNlZCBieSBjYWxsZXJzIHRoYXQKICAqIGRvIG5vdCBjYXJlIChzdWNoIGFzIHByb2NmcyBpbnRlcmZhY2VzKS4KICAqLwotaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO2lub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJdW5zaWduZWQgbG9uZyBpbm8gPSAwOwpAQCAtNDg5LDcgJiM0Mzs0ODksNyBAQCBzdHJ1Y3QgbHJ1dmVjX3N0YXRzIHsKIAlsb25nIHN0YXRlX3BlbmRpbmdbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTsKIH07CiAKLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuOwogCWxvbmcgeDsKQEAgLTUzMCw3ICYjNDM7NTMwLDcgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KQogICogbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBldmVudCBjb3VudGVycyBhcmUgc3RvcmVkIGluCiAgKiBlbnVtIG5vZGVfc3RhdF9pdGVtLgogICovCi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkJCQkgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjsKQEAgLTU0Nyw3ICYjNDM7NTQ3LDcgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXJldHVybiAodW5zaWduZWQgbG9uZylSRUFEX09OQ0UocG4tJmd0O2xydXZlY19zdGF0cy0mZ3Q7c3RhdGVbaV0pOwogfQogCi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47CkBAIC03OTksNyAmIzQzOzc5OSw3IEBAIHN0YXRpYyB2b2lkIGZsdXNoX21lbWNnX3N0YXRzX2R3b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIAlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgJmFtcDtzdGF0c19mbHVzaF9kd29yaywgRkxVU0hfVElNRSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpCiYjNDM7dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeCkKIHsKIAlsb25nIHg7CiAJaW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpOwpAQCAtMTA5MSw3ICYjNDM7MTA5MSw3IEBAIHZvaWQgY291bnRfbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSB2bV9ldmVudF9pdGVtIGlkeCwKIAlwdXRfY3B1KCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KQomIzQzO3Vuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KQogewogCWludCBpID0gbWVtY2dfZXZlbnRzX2luZGV4KGV2ZW50KTsKIApAQCAtMTIyMCw3ICYjNDM7MTIyMCw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZCkKICAqCiAgKiBTZWUgZm9saW9fbWVtY2coKSBmb3IgZm9saW8tJmd0O29iamNnL21lbWNnIGJpbmRpbmcgcnVsZXMuCiAgKi8KLXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAKQEAgLTE0NDEsNyAmIzQzOzE0NDEsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAgKgogICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuCiAgKi8KLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CiAKQEAgLTE0NjksNyAmIzQzOzE0NjksNyBAQCBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzCiAgKiBkaXNhYmxlZCBhbmQgcmN1IHJlYWQgbG9jayBoZWxkLgogICovCi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CiAKQEAgLTE0OTgsNyAmIzQzOzE0OTgsNyBAQCBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbykKICAqIFJldHVybjogVGhlIGxydXZlYyB0aGlzIGZvbGlvIGlzIG9uIHdpdGggaXRzIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cwogICogZGlzYWJsZWQgYW5kIHJjdSByZWFkIGxvY2sgaGVsZC4KICAqLwotc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzO3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwpAQCAtMTcwOSw3ICYjNDM7MTcwOSw3IEBAIHN0YXRpYyBpbnQgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpbnQgaXRlbSkKIAl9CiB9CiAKLXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSkKJiM0Mzt1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pCiB7CiAJcmV0dXJuIG1lbWNnX3BhZ2Vfc3RhdGUobWVtY2csIGl0ZW0pICoKIAkJbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTsKQEAgLTE4MTIsNyAmIzQzOzE4MTIsOCBAQCBzdGF0aWMgdm9pZCBtZW1vcnlfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcykKICAqIE5PVEU6IEBtZW1jZyBhbmQgQHAmIzM5O3MgbWVtX2Nncm91cCBjYW4gYmUgZGlmZmVyZW50IHdoZW4gaGllcmFyY2h5IGlzCiAgKiBlbmFibGVkCiAgKi8KLXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyY3VfcmVhZF9sb2NrKCk7CiAKQEAgLTE4NzcsNyAmIzQzOzE4NzgsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogLyoKICAqIFJldHVybiB0aGUgbWVtb3J5IChhbmQgc3dhcCwgaWYgY29uZmlndXJlZCkgbGltaXQgZm9yIGEgbWVtY2cuCiAgKi8KLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJdW5zaWduZWQgbG9uZyBtYXggPSBSRUFEX09OQ0UobWVtY2ctJmd0O21lbW9yeS5tYXgpOwogCkBAIC01ODM4LDcgJiM0Mzs1ODM5LDcgQEAgdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi1sb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJbG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTsKIApAQCAtNTg1NCw3ICYjNDM7NTg1NSw3IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAgKgogICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8mIzM5O3MgbWVtY2cgaGllcmFyY2h5LgogICovCi1sb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlsb25nIG1hcmdpbjsKQEAgLTU4NzEsNyAmIzQzOzU4NzIsNyBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIG1hcmdpbjsKIH0KIAotYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO2Jvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJYm9vbCByZXQgPSBmYWxzZTsKQEAgLTYxMzksNyAmIzQzOzYxNDAsNyBAQCB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSkKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mztib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCS8qIGlmIHpzd2FwIGlzIGRpc2FibGVkLCBkbyBub3QgYmxvY2sgcGFnZXMgZ29pbmcgdG8gdGhlIHN3YXBwaW5nIGRldmljZSAqLwogCWlmICghenN3YXBfaXNfZW5hYmxlZCgpKQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuYwppbmRleCA0NTA1NDNmNGIzMThiLi44YzZmM2I0NTEzNmI0IDEwMDY0NAotLS0gYS9tbS9wYWdlX2NvdW50ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuYwpAQCAtNTMsNyAmIzQzOzUzLDcgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLAogICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2YKICAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuCiAgKi8KLWxvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQomIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihjb25zdCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQogewogCWxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDsKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jCmluZGV4IDFkYTRmZjQ4NGYwOTcuLjVmNzc1NmUzNzBmN2EgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lvLmMKQEAgLTI1NiwxMiAmIzQzOzI1NiwxMyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApCi1zdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmZvbGlvX21lbWNnX2Jsa2dfY3NzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpmb2xpb19tZW1jZ19ibGtnX2Nzcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBjZ3JvdXBfZV9jc3MoZm9saW9fbWVtY2coZm9saW8pLSZndDtjc3MuY2dyb3VwLCAmYW1wO2lvX2NncnBfc3Vic3lzKTsKIH0KIAotc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKQomIzQzO3N0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pCiB7CiAJYm9vbCBjYW5fbWVyZ2UgPSB0cnVlOwogCkBAIC0yNzcsNyAmIzQzOzI3OCw4IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbykKIAlyZXR1cm4gY2FuX21lcmdlOwogfQogCi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJCQkJICBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CiAKQEAgLTI5NCwxMSAmIzQzOzI5NiwxMyBAQCBzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCWNzc19wdXQoY3NzKTsKIH0KICNlbHNlCi1zdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pCiYjNDM7c3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbykKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sCiYjNDM7CQkJCQkgIGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICZhbXA7JmFtcDsgQ09ORklHX0JMS19DR1JPVVAgKi8KZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaAppbmRleCAwYjVkNTA3NzM5YmNiLi45NDcxNGQ5ZGQwMDNjIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC04Miw3ICYjNDM7ODIsNyBAQCBlbnVtIHN3YXBfY2x1c3Rlcl9mbGFncyB7CiAKIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKIAotc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogI2lmZGVmIENPTkZJR19NRU1DR19WMQogCWlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSAmYW1wOyZhbXA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE4OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzE5CgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogNDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBgY29uc3RgIFF1YWxpZmljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIGFjcm9zcyBhIGJ1bmNoIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGludG8gaXQsIHNlZSB3aGF04oCZcyBnb2luZyBvbiwgYW5kIGRldGVybWluZSBpZiBpdCYjMzk7cyBzb21ldGhpbmcgd2UgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQgaW4gdGVybXMgb2YgZnV6emluZy4gVGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGEgYnVuY2ggb2YgZnVuY3Rpb24gc2lnbmF0dXJlcyBhcmUgZ2V0dGluZyBgY29uc3RgIHF1YWxpZmllcnMgYWRkZWQgdG8gcG9pbnRlciBwYXJhbWV0ZXJzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgc3RydWN0IG9ial9jZ3JvdXBgLCBgc3RydWN0IGZvbGlvYCwgYHN0cnVjdCBtZW1fY2dyb3VwYCwgYHN0cnVjdCBwYWdlX2NvdW50ZXJgLCBldGMuIEl0JiMzOTtzIGFjcm9zcyB0aGUgYm9hcmQg4oCTIGBtZW1jb250cm9sLmhgLCBgbW16b25lLmhgLCBgcGFnZV9jb3VudGVyLmhgLCBgc3dhcC5oYCBhbmQgdGhlIGFzc29jaWF0ZWQgYC5jYCBmaWxlcy4KClNvLCB0aGUgZmlyc3QgdGhpbmcgSSBkaWQgd2FzIHRvIHRob3JvdWdobHkgY2hlY2sgZm9yIGFueSAqYWN0dWFsKiBjb2RlIGNoYW5nZXMuIEkgd2FzIGxvb2tpbmcgZm9yOgoKKiAgICoqTG9naWMgY2hhbmdlczoqKiBEaWQgYW55IGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgZ2V0IGFsdGVyZWQ/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGNvbmRpdGlvbmFsIGNoYW5nZXMsIHZhcmlhYmxlIHJlbmFtZXMsIG9yIGRlbGV0ZWQgbGluZXMgb2YgY29kZT8KKiAgICoqQWxnb3JpdGhtaWMgY2hhbmdlczoqKiBBbnkgdHdlYWtzIHRvIGhvdyBkYXRhIGlzIHByb2Nlc3NlZCwgdGhhdCBjb3VsZCBpbXBhY3QgYmVoYXZpb3I/CiogICAqKk5ldyBjaGVja3MvQXNzZXJ0aW9uczoqKiBXZXJlIGFueSBuZXcgc2FmZXR5IGNoZWNrcyBpbnRyb2R1Y2VkPwoqICAgKipDaGFuZ2VkIGNvbnN0YW50czoqKiBIYXMgdGhlICp2YWx1ZSogb2YgYW55IGNvbnN0YW50cyBiZWVuIGFsdGVyZWQsIHdoaWNoIGNvdWxkIHN1YnRseSBzaGlmdCBiZWhhdmlvcj8KKiAgICoqQWx0ZXJlZCBjb250cm9sIGZsb3c6KiogSXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIG9yIHRoZSBicmFuY2hpbmcgd2l0aGluIHRoZSBjb2RlLCBub3cgZGlmZmVyZW50PwoKSSBtZXRpY3Vsb3VzbHkgd2VudCB0aHJvdWdoIGV2ZXJ5IGxpbmUgb2YgdGhlIGRpZmYuIEkgY2hlY2tlZCBmb3IgYW55ICYjMzQ7c3VycHJpc2VzLiYjMzQ7IEFmdGVyIG15IGxpbmUtYnktbGluZSBkaWZmIHJldmlldywgaXQgYmVjYW1lIGNsZWFyOiBFdmVyeSBzaW5nbGUgY2hhbmdlIGlzIGp1c3QgdGhlIGFkZGl0aW9uIG9mIGBjb25zdGAgcXVhbGlmaWVycyB0byBwb2ludGVyIHBhcmFtZXRlcnMuIFNvLCBmb3IgZXhhbXBsZSwgYHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZ2AgYmVjb21lcyBgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnYC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogRG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8KCkkgcmUtcmVhZCB0aGUgZnV6emluZyBndWlkZWxpbmVzIGFuZCBJIHRob3VnaHQgYWJvdXQgdGhlIGNvcmUgcHJpbmNpcGxlOiB3ZSBmdXp6IHRvIGZpbmQgY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIGxhdGVudCBidWdzIGludHJvZHVjZWQgYnkgKnRoZSBwYXRjaCBzZXJpZXMqLgoKSSBoYWQgdG8gYXNrIG15c2VsZjogRG9lcyBhZGRpbmcgYGNvbnN0YCB0byBwYXJhbWV0ZXJzIGFsdGVyIHRoZSBjb21waWxlZCBDIGxvZ2ljIG9yIGRhdGEgc3RydWN0dXJlcywgYWxnb3JpdGhtIGZsb3dzIG9yIGFueSBsb2dpYz8gTm8sIGluIEMsIGBjb25zdGAgb24gcG9pbnRlciBhcmd1bWVudHMgZG9lcyAqbm90KiBjaGFuZ2UgdGhlIGNhbGxpbmcgY29udmVudGlvbi4gVGhlIGNvbXBpbGVkIG1hY2hpbmUgY29kZSBpcyBpZGVudGljYWwuIFRoZXJlJiMzOTtzIG5vIGxheW91dCBjaGFuZ2UsIG5vIGxvZ2ljIGNoYW5nZSwgbm8gbmV3IGFzc2VydGlvbnMsIG5vIHJlc3RydWN0dXJlZCBmbG93LgoKSXMgdGhlcmUgYW55IGNoYW5jZSBvZiByZWdyZXNzaW9uIG9yIGEgYnVnIGludHJvZHVjZWQgYnkgYGNvbnN0YCBxdWFsaWZpY2F0aW9uPyBJbiBDLCBgY29uc3RgIGRvZXMgKm5vdCogYWZmZWN0IHRoZSBBQkkuIFRoZSBjb21waWxlZCBpbnN0cnVjdGlvbnMgcmVtYWluIGNvbXBsZXRlbHkgaWRlbnRpY2FsLgoKQ2FuIGZ1enppbmcgZGlzY292ZXIgYW55IGNyYXNoLCByZWdyZXNzaW9uLCBsYXRlbnQgYnVnLCBvciB0cmlnZ2VyZWQgYXNzZXJ0aW9uIGluIGEgcHVyZSBgY29uc3RgIGFubm90YXRpb24gcGF0Y2g/IE5vLiBGdXp6aW5nIHRoZSBiaW5hcnkgZG9lcyBub3QgZ2VuZXJhdGUgbmV3IGJlaGF2aW9yIGlmIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGxpdGVyYWxseSBpZGVudGljYWwuCgpCYXNlZCBvbiB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgKm5vdCogYSBwYXRjaCB0aGF0IHJlcXVpcmVzIGZ1enppbmcuIFRoZXJlIGFyZSBubyBleGVjdXRhYmxlIGNvZGUgY2hhbmdlcy4gVGhlIGNoYW5nZSBpcyBwdXJlbHkgYWJvdXQgY29tcGlsZXItZW5mb3JjZWQgY29uc3QtY29ycmVjdG5lc3MuCgpJIHdlbnQgYmFjayBhbmQgZG91YmxlLWNoZWNrZWQgdG8gZW5zdXJlIHRoZXJlIHdlcmVuJiMzOTt0ICphbnkqIHN1YnRsZSBjaGFuZ2VzIGJleW9uZCB0aGUgYGNvbnN0YCBhZGRpdGlvbnMuIEkgc2VhcmNoZWQgZm9yIHBvc3NpYmxlIGFjY2lkZW50YWwgbW9kaWZpY2F0aW9ucy4gSSBsb29rZWQgZm9yICphbnkqIGxvZ2ljIGNoYW5nZXMuIEkgbG9va2VkIGZvciAqYW55KiBuZXcgYXNzZXJ0aW9ucy4gSSByZXZpZXdlZCBhbGwgbGluZXMgb2YgdGhlIGRpZmYuCgpJIGNhbiBkZWZpbml0aXZlbHkgc2F5IHRoYXQgdGhlIHBhdGNoIGNvbnNpc3RzICplbnRpcmVseSogb2YgYGNvbnN0YCBxdWFsaWZpZXIgYWRkaXRpb25zIHRvIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIGFuZCBub3RoaW5nIG1vcmUuIFRoZXJlIGlzIG5vIGNoYW5nZSB0byBleGVjdXRhYmxlIGNvZGUuIFRoaXMgaXMsIGluIGVmZmVjdCwgYSAmIzM0O25vLW9wJiMzNDsgcGF0Y2ggZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzICYjMzk7Y29uc3QmIzM5OyBxdWFsaWZpZXJzIHRvIHBvaW50ZXIgcGFyYW1ldGVycyBhY3Jvc3MgbWVtY29udHJvbCwgc3dhcCwgYW5kIHBhZ2UgY291bnRlciBoZWxwZXIgZnVuY3Rpb25zIHRvIGltcHJvdmUgY29uc3QtY29ycmVjdG5lc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZXhlY3V0YWJsZSBsb2dpYywgcnVudGltZSBhc3NlcnRpb25zLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGxheW91dHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzICYjMzk7Y29uc3QmIzM5OyBxdWFsaWZpZXJzIHRvIHBvaW50ZXIgcGFyYW1ldGVycyBhY3Jvc3MgbWVtY29udHJvbCwgc3dhcCwgYW5kIHBhZ2UgY291bnRlciBoZWxwZXIgZnVuY3Rpb25zIHRvIGltcHJvdmUgY29uc3QtY29ycmVjdG5lc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZXhlY3V0YWJsZSBsb2dpYywgcnVudGltZSBhc3NlcnRpb25zLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGxheW91dHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE4OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxODozNzo1Ni44MDQ0NDg0NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI0Mjk3NzE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgJ2NvbnN0JyBxdWFsaWZpZXJzIHRvIHBvaW50ZXIgcGFyYW1ldGVycyBhY3Jvc3MgbWVtY29udHJvbCwgc3dhcCwgYW5kIHBhZ2UgY291bnRlciBoZWxwZXIgZnVuY3Rpb25zIHRvIGltcHJvdmUgY29uc3QtY29ycmVjdG5lc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZXhlY3V0YWJsZSBsb2dpYywgcnVudGltZSBhc3NlcnRpb25zLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGxheW91dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxODozNzo1Ni44MDQ0NTM4ODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDE1Njk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE3NGRiYzZmNDcwNjQ1NmNiNTJmNDgzOGZkZTY4NDVjZmMwYjc2ZGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxODozNzo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggOTQ1ZDdkYmYxYmIyYy4uZTE4YjQ0OTY1ZDA1YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuQEAgLTM2Myw3ICszNjMsNyBAQCBlbnVtIG9iamV4dF9mbGFncyB7XFxuICAqXFxuICAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgbWVtY2cgd29uJ3QgYmUgcmVsZWFzZWQuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuIHtcXG4gXFx0bG9ja2RlcF9hc3NlcnRfb25jZShyY3VfcmVhZF9sb2NrX2hlbGQoKSB8fCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmNncm91cF9tdXRleCkpO1xcbiBcXHRyZXR1cm4gb2JqY2cgPyBSRUFEX09OQ0Uob2JqY2ctXFx1MDAzZW1lbWNnKSA6IE5VTEw7XFxuQEAgLTM3Nyw3ICszNzcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4gICogb3IgTlVMTC4gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGZvbGlvIGlzIGtub3duIHRvIGhhdmUgYVxcbiAgKiBwcm9wZXIgb2JqZWN0IGNncm91cCBwb2ludGVyLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGEgPSBmb2xpby1cXHUwMDNlbWVtY2dfZGF0YTtcXG4gXFxuQEAgLTQxNSw3ICs0MTUsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpmb2xpb19vYmpjZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiBOb3RlOiBUaGUgY2FsbGVyIHNob3VsZCBob2xkIGFuIHJjdSByZWFkIGxvY2sgb3IgY2dyb3VwX211dGV4IHRvIHByb3RlY3RcXG4gICogbWVtY2cgYXNzb2NpYXRlZCB3aXRoIGEgZm9saW8gZnJvbSBiZWluZyByZWxlYXNlZC5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbiBcXG5AQCAtNDI4LDcgKzQyOCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuICAqXFxuICAqIFJldHVybnMgdHJ1ZSBpZiBmb2xpbyBpcyBjaGFyZ2VkIHRvIGEgbWVtb3J5IGNncm91cCwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBmb2xpby1cXHUwMDNlbWVtY2dfZGF0YSAhPSAwO1xcbiB9XFxuQEAgLTQ0OCw3ICs0NDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiBBIGNhbGxlciBzaG91bGQgaG9sZCBhbiByY3UgcmVhZCBsb2NrIHRvIHByb3RlY3QgbWVtY2cgYXNzb2NpYXRlZCB3aXRoIGFcXG4gICogcGFnZSBmcm9tIGJlaW5nIHJlbGVhc2VkLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBCZWNhdXNlIGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhIG1pZ2h0IGJlIGNoYW5nZWQgYXN5bmNocm9ub3VzbHlcXG5AQCAtNDY1LDE0ICs0NjUsMTQgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYWdlX21lbWNnX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYWdlX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuIFxcdGlmIChQYWdlVGFpbChwYWdlKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdHJldHVybiBmb2xpb19tZW1jZ19jaGVjaygoc3RydWN0IGZvbGlvICopcGFnZSk7XFxuK1xcdHJldHVybiBmb2xpb19tZW1jZ19jaGVjaygoY29uc3Qgc3RydWN0IGZvbGlvICopcGFnZSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcbkBAIC00OTQsMTkgKzQ5NCwxOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYlxcbiAgKiB0aGF0IHRoZSBmb2xpbyBoYXMgYW4gYXNzb2NpYXRlZCBtZW1vcnkgY2dyb3VwLiBJdCdzIG5vdCBzYWZlIHRvIGNhbGxcXG4gICogdGhpcyBmdW5jdGlvbiBhZ2FpbnN0IHNvbWUgdHlwZXMgb2YgZm9saW9zLCBlLmcuIHNsYWIgZm9saW9zLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRWTV9CVUdfT05fUEdGTEFHUyhQYWdlVGFpbChcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbiBcXHRWTV9CVUdfT05fRk9MSU8oZm9saW8tXFx1MDAzZW1lbWNnX2RhdGEgXFx1MDAyNiBNRU1DR19EQVRBX09CSkVYVFMsIGZvbGlvKTtcXG4gXFx0cmV0dXJuIGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhIFxcdTAwMjYgTUVNQ0dfREFUQV9LTUVNO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4rc3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4gXFx0cmV0dXJuIGZvbGlvX21lbWNnX2ttZW0ocGFnZV9mb2xpbyhwYWdlKSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gKG1lbWNnID09IHJvb3RfbWVtX2Nncm91cCk7XFxuIH1cXG5AQCAtNTIyLDcgKzUyMiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAgKiBhbmQgZG8gbm90IGhvbm91ciBzYy1cXHUwMDNlbWVtY2cgY2FuIHVzZSB0aGlzIHRvIGVhcmx5LXJldHVybiAwIGluIHBlci1tZW1jZ1xcbiAgKiBjb250ZXh0cy5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KGNvbnN0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0cmV0dXJuICFzYy1cXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVxcdTAwM2VtZW1jZyk7XFxuIH1cXG5AQCAtNTM3LDggKzUzNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2Rpc2FibGVkKHZvaWQpXFxuIFxcdHJldHVybiAhY2dyb3VwX3N1YnN5c19lbmFibGVkKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICptaW4sXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpsb3csXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICp1c2FnZSlcXG5AQCAtNTkyLDggKzU5Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIFRoZSByb290IG1lbWNnIGRvZXNuJ3QgYWNjb3VudCBjaGFyZ2VzLCBhbmQgZG9lc24ndCBzdXBwb3J0XFxuQEAgLTYwNCw4ICs2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbiBcXHRcXHRtZW1jZyA9PSB0YXJnZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQodGFyZ2V0LCBtZW1jZykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtNjE0LDggKzYxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbiBcXHRcXHRwYWdlX2NvdW50ZXJfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQodGFyZ2V0LCBtZW1jZykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XFxuICAqIEBwZ2RhdCBjb21iaW5hdGlvbi4gVGhpcyBjYW4gYmUgdGhlIG5vZGUgbHJ1dmVjLCBpZiB0aGUgbWVtb3J5XFxuICAqIGNvbnRyb2xsZXIgaXMgZGlzYWJsZWQuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKm1lbV9jZ3JvdXBfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICptZW1fY2dyb3VwX2xydXZlYyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG5AQCAtNzI5LDcgKzcyOSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiAgKiB0aGVpciBiaW5kaW5nIGlzIHN0YWJsZSBpZiB0aGUgcmV0dXJuZWQgbHJ1dmVjIG1hdGNoZXMgdGhlIG9uZSB0aGUgY2FsbGVyIGhhc1xcbiAgKiBsb2NrZWQuIFVzZWZ1bCBmb3IgbG9jayBiYXRjaGluZy5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xcbiBcXG5AQCAtNzQzLDExICs3NDMsMTEgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbiBcXG4gc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKTtcXG4gXFxuLXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbitzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpmbGFncyk7XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuQEAgLTgwNiw3ICs4MDYsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKTtcXG4gdm9pZCBtZW1fY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHRcXHQgICBpbnQgKCopKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB2b2lkICopLCB2b2lkICphcmcpO1xcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTgxNSw3ICs4MTUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIH1cXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gbWVtY2cgPyBjZ3JvdXBfaWQobWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXApIDogMDtcXG4gfVxcbkBAIC04MjcsNyArODI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIFxcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3MobSkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG4gXFxuQEAgLTg0NCwxMyArODQ0LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuICAqXFxuICAqIFJldHVybnMgdGhlIHBhcmVudCBtZW1jZywgb3IgTlVMTCBpZiB0aGlzIGlzIHRoZSByb290LlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50X21lbV9jZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIG1lbV9jZ3JvdXBfZnJvbV9jc3MobWVtY2ctXFx1MDAzZWNzcy5wYXJlbnQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tXFx0XFx0XFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdClcXG4ge1xcbiBcXHRpZiAocm9vdCA9PSBtZW1jZylcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTg1OCw3ICs4NTgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG1tX21hdGNoX2Nncm91cChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKnRhc2tfbWVtY2c7XFxuIFxcdGJvb2wgbWF0Y2ggPSBmYWxzZTtcXG5AQCAtODcxLDggKzg3MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiBtYXRjaDtcXG4gfVxcbiBcXG4tc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi1pbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2lub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuQEAgLTg4NSw3ICs4ODUsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuIFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpO1xcbiBcXG4gc3RhdGljIGlubGluZVxcbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbit1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG5AQCAtOTAyLDkgKzkwMiw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuIFxcdFxcdF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF9tYXNrKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4rdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gXFxuLXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK3ZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuIFxcbiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5AQCAtOTE3LDcgKzkxNyw3IEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gdm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHQgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgaW50IHZhbCk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG5AQCAtOTMyLDE1ICs5MzIsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpO1xcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcXG4rdW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpO1xcbit1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcXG4rdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcXG4gYm9vbCBtZW1jZ19zdGF0X2l0ZW1fdmFsaWQoaW50IGlkeCk7XFxuIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTtcXG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcXG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4rXFx0XFx0XFx0XFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4rdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcXG4gXFxuIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbkBAIC05NTEsNyArOTUyLDcgQEAgdm9pZCBtb2RfbHJ1dmVjX2ttZW1fc3RhdGUodm9pZCAqcCwgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpO1xcbiB2b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsIHVuc2lnbmVkIGxvbmcgbnIpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbkBAIC0xMDM2LDcgKzEwMzcsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfd29ya3F1ZXVlKHZvaWQpO1xcbiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKTtcXG4gI2Vsc2UgLyogQ09ORklHX01FTUNHICovXFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtMTA0NSw0NyArMTA0Niw0NyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4gXFxuICNkZWZpbmUgcm9vdF9tZW1fY2dyb3VwXFx0XFx0KE5VTEwpXFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFnZV9tZW1jZ19jaGVjayhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFnZV9tZW1jZ19jaGVjayhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuQEAgLTExMTAsOCArMTExMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19tZW1vcnlfZXZlbnRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4rXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKm1pbixcXG4gXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKmxvdyxcXG4gXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKnVzYWdlKVxcbkBAIC0xMTI0LDE5ICsxMTI1LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbiB7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbWluKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbWluKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtMTE3NSwyNSArMTE3NiwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKm1lbV9jZ3JvdXBfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICptZW1fY2dyb3VwX2xydXZlYyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbiB7XFxuIFxcdHJldHVybiBcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlYyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlYyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcdHJldHVybiBcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudF9tZW1fY2dyb3VwKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG1tX21hdGNoX2Nncm91cChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tXFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5AQCAtMTIwOCw3ICsxMjA5LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbkBAIC0xMjQxLDcgKzEyNDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcbkBAIC0xMjUwLDcgKzEyNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiBcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcbkBAIC0xMjU5LDcgKzEyNjAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gXFx1MDAyNnBnZGF0LVxcdTAwM2VfX2xydXZlYztcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nICpmbGFnc3ApXFxuIHtcXG4gXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcXG5AQCAtMTI4Nyw3ICsxMjg4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTI5OSw3ICsxMzAwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTMxNCw3ICsxMzE1LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTEzMjUsMTkgKzEzMjYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZVxcbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbit1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxcbi1tZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbittZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHtcXG4gfVxcbiBcXG5AQCAtMTM2NiwxNyArMTM2OCwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxcbiB7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTM5MSwxOSArMTM5MywxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuIFxcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuIHtcXG4gXFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4ge1xcbiBcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xcbkBAIC0xNDMxLDcgKzE0MzMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19mb2xpb19ldmVudHMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0ZW51bSB2bV9ldmVudF9pdGVtIGlkeCwgdW5zaWduZWQgbG9uZyBucilcXG4ge1xcbiB9XFxuQEAgLTE0NjUsNyArMTQ2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcbkBAIC0xNTI4LDggKzE1MzAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1dmVjX3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZ1xcbiB9XFxuIFxcbiAvKiBUZXN0IHJlcXVpcmVzIGEgc3RhYmxlIGZvbGlvLVxcdTAwM2VtZW1jZyBiaW5kaW5nLCBzZWUgZm9saW9fbWVtY2coKSAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF0Y2hlc19scnV2ZWMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF0Y2hlc19scnV2ZWMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiB7XFxuIFxcdHJldHVybiBscnV2ZWNfcGdkYXQobHJ1dmVjKSA9PSBmb2xpb19wZ2RhdChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICAgIGxydXZlY19tZW1jZyhscnV2ZWMpID09IGZvbGlvX21lbWNnKGZvbGlvKTtcXG5AQCAtMTY0Miw3ICsxNjQ0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdHdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc29ja2V0X3ByZXNzdXJlX3NlcWxvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgc2VxO1xcbiBcXHR1NjQgdmFsO1xcbkBAIC0xNjYwLDcgKzE2NjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gXFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlc29ja2V0X3ByZXNzdXJlLCBqaWZmaWVzICsgSFopO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2dldF9zb2NrZXRfcHJlc3N1cmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2dldF9zb2NrZXRfcHJlc3N1cmUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHJldHVybiBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXNvY2tldF9wcmVzc3VyZSk7XFxuIH1cXG5AQCAtMTc3Myw3ICsxNzc1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxcbiAgKiBBIGhlbHBlciBmb3IgYWNjZXNzaW5nIG1lbWNnJ3Mga21lbV9pZCwgdXNlZCBmb3IgZ2V0dGluZ1xcbiAgKiBjb3JyZXNwb25kaW5nIExSVSBsaXN0cy5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gbWVtY2cgPyBtZW1jZy1cXHUwMDNla21lbWNnX2lkIDogLTE7XFxuIH1cXG5AQCAtMTg0NSw3ICsxODQ3LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2ttZW1fb25saW5lKHZvaWQpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHJldHVybiAtMTtcXG4gfVxcbkBAIC0xODYxLDcgKzE4NjMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfb2JqY2dfZXZlbnRzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4rc3RhdGljIGlubGluZSBpbm9fdCBwYWdlX2Nncm91cF9pbm8oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTg4NSw3ICsxODg3LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xcbiB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xcbiB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSk7XFxuLWJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbitib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4ge1xcbkBAIC0xODk5LDcgKzE5MDEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IHNpemUpXFxuIHtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHQvKiBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgZG8gbm90IGJsb2NrIHBhZ2VzIGdvaW5nIHRvIHRoZSBzd2FwcGluZyBkZXZpY2UgKi9cXG4gXFx0cmV0dXJuIHRydWU7XFxuQEAgLTE5MTIsNyArMTkxNCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbiBib29sIG1lbV9jZ3JvdXBfb29tX3N5bmNocm9uaXplKGJvb2wgd2FpdCk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiB7XFxuIFxcdHJldHVybiBwLVxcdTAwM2VtZW1jZ19pbl9vb207XFxuIH1cXG5AQCAtMTkzMCw3ICsxOTMyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXFxuIH1cXG4gXFxuICNlbHNlIC8qIENPTkZJR19NRU1DR19WMSAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDg0ZTIzN2YyYzE3ZGIuLjhlMWUzYTUwNzU3YTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtMTY1Nyw3ICsxNjU3LDcgQEAgZXh0ZXJuIHZvaWQgaW5pdF9jdXJyZW50bHlfZW1wdHlfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm5cXG4gXFxuIGV4dGVybiB2b2lkIGxydXZlY19pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbHJ1dmVjX3BnZGF0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcGdsaXN0X2RhdGEgKmxydXZlY19wZ2RhdChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuIHtcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiBcXHRyZXR1cm4gbHJ1dmVjLVxcdTAwM2VwZ2RhdDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcXG5pbmRleCAwN2I3Y2IxMjI0OWM3Li4yYmFmN2EyYjI5YjJlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXFxuQEAgLTYzLDEyICs2MywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9jb3VudGVyX2luaXQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG4gXFx0Y291bnRlci1cXHUwMDNldHJhY2tfZmFpbGNudCA9IGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuIHtcXG4gXFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNmNvdW50ZXItXFx1MDAzZXVzYWdlKTtcXG4gfVxcbiBcXG4tbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpO1xcbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oY29uc3Qgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XFxuIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCBmYzI5MGUyOWU0YTllLi44NDNkNzA2ODBiOGUwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtNTA1LDkgKzUwNSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wXFxuIFxcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XFxuIH1cXG4gXFxuLWxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLWV4dGVybiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbitib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuQEAgLTUxOSwxNyArNTE5LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiB2bV9zd2FwX2Z1bGwoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA1YjllMGViZDQyYWUwLi5mNTZlOTU4OTQ4YWMwIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0zMzEsNyArMzMxLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1jZ19icGZfZW5hYmxlZF9rZXkpO1xcbiAgKiBJZiBtZW1jZyBpcyBib3VuZCB0byBhIHRyYWRpdGlvbmFsIGhpZXJhcmNoeSwgdGhlIGNzcyBvZiByb290X21lbV9jZ3JvdXBcXG4gICogaXMgcmV0dXJuZWQuXFxuICAqL1xcbi1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXG5AQCAtMzU2LDcgKzM1Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiBhZnRlciBwYWdlX2Nncm91cF9pbm8oKSByZXR1cm5zLCBzbyBpdCBvbmx5IHNob3VsZCBiZSB1c2VkIGJ5IGNhbGxlcnMgdGhhdFxcbiAgKiBkbyBub3QgY2FyZSAoc3VjaCBhcyBwcm9jZnMgaW50ZXJmYWNlcykuXFxuICAqL1xcbi1pbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK2lub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5vID0gMDtcXG5AQCAtNDg5LDcgKzQ4OSw3IEBAIHN0cnVjdCBscnV2ZWNfc3RhdHMge1xcbiBcXHRsb25nIHN0YXRlX3BlbmRpbmdbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcXG4gfTtcXG4gXFxuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4rdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcXG4gXFx0bG9uZyB4O1xcbkBAIC01MzAsNyArNTMwLDcgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiAgKiBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGV2ZW50IGNvdW50ZXJzIGFyZSBzdG9yZWQgaW5cXG4gICogZW51bSBub2RlX3N0YXRfaXRlbS5cXG4gICovXFxuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4rdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcXG5AQCAtNTQ3LDcgKzU0Nyw3IEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxuIH1cXG4gXFxuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xcbkBAIC03OTksNyArNzk5LDcgQEAgc3RhdGljIHZvaWQgZmx1c2hfbWVtY2dfc3RhdHNfZHdvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbiBcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXFx1MDAyNnN0YXRzX2ZsdXNoX2R3b3JrLCBGTFVTSF9USU1FKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4rdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4ge1xcbiBcXHRsb25nIHg7XFxuIFxcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcXG5AQCAtMTA5MSw3ICsxMDkxLDcgQEAgdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LFxcbiBcXHRwdXRfY3B1KCk7XFxuIH1cXG4gXFxuLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxcbit1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4ge1xcbiBcXHRpbnQgaSA9IG1lbWNnX2V2ZW50c19pbmRleChldmVudCk7XFxuIFxcbkBAIC0xMjIwLDcgKzEyMjAsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpXFxuICAqXFxuICAqIFNlZSBmb2xpb19tZW1jZygpIGZvciBmb2xpby1cXHUwMDNlb2JqY2cvbWVtY2cgYmluZGluZyBydWxlcy5cXG4gICovXFxuLXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXG5AQCAtMTQ0MSw3ICsxNDQxLDcgQEAgdm9pZCBtZW1fY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiAgKlxcbiAgKiBSZXR1cm46IFRoZSBscnV2ZWMgdGhpcyBmb2xpbyBpcyBvbiB3aXRoIGl0cyBsb2NrIGhlbGQgYW5kIHJjdSByZWFkIGxvY2sgaGVsZC5cXG4gICovXFxuLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbiBcXG5AQCAtMTQ2OSw3ICsxNDY5LDcgQEAgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4gICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzXFxuICAqIGRpc2FibGVkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuXFxuICAqL1xcbi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbiBcXG5AQCAtMTQ5OCw3ICsxNDk4LDcgQEAgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuICAqIFJldHVybjogVGhlIGxydXZlYyB0aGlzIGZvbGlvIGlzIG9uIHdpdGggaXRzIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0c1xcbiAgKiBkaXNhYmxlZCBhbmQgcmN1IHJlYWQgbG9jayBoZWxkLlxcbiAgKi9cXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5AQCAtMTcwOSw3ICsxNzA5LDcgQEAgc3RhdGljIGludCBtZW1jZ19wYWdlX3N0YXRlX291dHB1dF91bml0KGludCBpdGVtKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4rdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbiB7XFxuIFxcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlKG1lbWNnLCBpdGVtKSAqXFxuIFxcdFxcdG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0X3VuaXQoaXRlbSk7XFxuQEAgLTE4MTIsNyArMTgxMiw4IEBAIHN0YXRpYyB2b2lkIG1lbW9yeV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbiAgKiBOT1RFOiBAbWVtY2cgYW5kIEBwJ3MgbWVtX2Nncm91cCBjYW4gYmUgZGlmZmVyZW50IHdoZW4gaGllcmFyY2h5IGlzXFxuICAqIGVuYWJsZWRcXG4gICovXFxuLXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4rdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHtcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXG5AQCAtMTg3Nyw3ICsxODc4LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gLypcXG4gICogUmV0dXJuIHRoZSBtZW1vcnkgKGFuZCBzd2FwLCBpZiBjb25maWd1cmVkKSBsaW1pdCBmb3IgYSBtZW1jZy5cXG4gICovXFxuLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWF4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2VtZW1vcnkubWF4KTtcXG4gXFxuQEAgLTU4MzgsNyArNTgzOSw3IEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuLWxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0bG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG4gXFxuQEAgLTU4NTQsNyArNTg1NSw3IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuICAqXFxuICAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJ3MgbWVtY2cgaGllcmFyY2h5LlxcbiAgKi9cXG4tbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXHRsb25nIG1hcmdpbjtcXG5AQCAtNTg3MSw3ICs1ODcyLDcgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gbWFyZ2luO1xcbiB9XFxuIFxcbi1ib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK2Jvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuQEAgLTYxMzksNyArNjE0MCw3IEBAIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4tYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHQvKiBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgZG8gbm90IGJsb2NrIHBhZ2VzIGdvaW5nIHRvIHRoZSBzd2FwcGluZyBkZXZpY2UgKi9cXG4gXFx0aWYgKCF6c3dhcF9pc19lbmFibGVkKCkpXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5pbmRleCA0NTA1NDNmNGIzMThiLi44YzZmM2I0NTEzNmI0IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXFxuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5AQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcHJvdGVjdGVkX3VzYWdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmMsXFxuICAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mXFxuICAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuXFxuICAqL1xcbi1sb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuIHtcXG4gXFx0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jXFxuaW5kZXggMWRhNGZmNDg0ZjA5Ny4uNWY3NzU2ZTM3MGY3YSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2lvLmNcXG4rKysgYi9tbS9wYWdlX2lvLmNcXG5AQCAtMjU2LDEyICsyNTYsMTMgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIH1cXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQkxLX0NHUk9VUClcXG4tc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpmb2xpb19tZW1jZ19ibGtnX2NzcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmZvbGlvX21lbWNnX2Jsa2dfY3NzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIGNncm91cF9lX2Nzcyhmb2xpb19tZW1jZyhmb2xpbyktXFx1MDAzZWNzcy5jZ3JvdXAsIFxcdTAwMjZpb19jZ3JwX3N1YnN5cyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcXG4rc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcXG4ge1xcbiBcXHRib29sIGNhbl9tZXJnZSA9IHRydWU7XFxuIFxcbkBAIC0yNzcsNyArMjc4LDggQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbiBcXHRyZXR1cm4gY2FuX21lcmdlO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7XFxuIFxcbkBAIC0yOTQsMTEgKzI5NiwxMyBAQCBzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdGNzc19wdXQoY3NzKTtcXG4gfVxcbiAjZWxzZVxcbi1zdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXFxuK3N0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4tc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiB9XFxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uOTQ3MTRkOWRkMDAzYyAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmhcXG4rKysgYi9tbS9zd2FwLmhcXG5AQCAtODIsNyArODIsNyBAQCBlbnVtIHN3YXBfY2x1c3Rlcl9mbGFncyB7XFxuIFxcbiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gXFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE4OjM3OjU3LjIzOTM5NDI1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY4MDgwMTg1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgJ2NvbnN0JyBxdWFsaWZpZXJzIHRvIHBvaW50ZXIgcGFyYW1ldGVycyBhY3Jvc3MgbWVtY29udHJvbCwgc3dhcCwgYW5kIHBhZ2UgY291bnRlciBoZWxwZXIgZnVuY3Rpb25zIHRvIGltcHJvdmUgY29uc3QtY29ycmVjdG5lc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZXhlY3V0YWJsZSBsb2dpYywgcnVudGltZSBhc3NlcnRpb25zLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGxheW91dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3NGRiYzZmNDcwNjQ1NmNiNTJmNDgzOGZkZTY4NDVjZmMwYjc2ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE4OjM3OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggOTQ1ZDdkYmYxYmIyYy4uZTE4YjQ0OTY1ZDA1YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTM2Myw3ICszNjMsNyBAQCBlbnVtIG9iamV4dF9mbGFncyB7XG4gICpcbiAgKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIG1lbWNnIHdvbid0IGJlIHJlbGVhc2VkLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X29uY2UocmN1X3JlYWRfbG9ja19oZWxkKCkgfHwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmNncm91cF9tdXRleCkpO1xuIFx0cmV0dXJuIG9iamNnID8gUkVBRF9PTkNFKG9iamNnLVx1MDAzZW1lbWNnKSA6IE5VTEw7XG5AQCAtMzc3LDcgKzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuICAqIG9yIE5VTEwuIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBmb2xpbyBpcyBrbm93biB0byBoYXZlIGFcbiAgKiBwcm9wZXIgb2JqZWN0IGNncm91cCBwb2ludGVyLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKmZvbGlvX29iamNnKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGEgPSBmb2xpby1cdTAwM2VtZW1jZ19kYXRhO1xuIFxuQEAgLTQxNSw3ICs0MTUsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpmb2xpb19vYmpjZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIE5vdGU6IFRoZSBjYWxsZXIgc2hvdWxkIGhvbGQgYW4gcmN1IHJlYWQgbG9jayBvciBjZ3JvdXBfbXV0ZXggdG8gcHJvdGVjdFxuICAqIG1lbWNnIGFzc29jaWF0ZWQgd2l0aCBhIGZvbGlvIGZyb20gYmVpbmcgcmVsZWFzZWQuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcbiBcbkBAIC00MjgsNyArNDI4LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKlxuICAqIFJldHVybnMgdHJ1ZSBpZiBmb2xpbyBpcyBjaGFyZ2VkIHRvIGEgbWVtb3J5IGNncm91cCwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICovXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBmb2xpby1cdTAwM2VtZW1jZ19kYXRhICE9IDA7XG4gfVxuQEAgLTQ0OCw3ICs0NDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIEEgY2FsbGVyIHNob3VsZCBob2xkIGFuIHJjdSByZWFkIGxvY2sgdG8gcHJvdGVjdCBtZW1jZyBhc3NvY2lhdGVkIHdpdGggYVxuICAqIHBhZ2UgZnJvbSBiZWluZyByZWxlYXNlZC5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZ19jaGVjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0LypcbiBcdCAqIEJlY2F1c2UgZm9saW8tXHUwMDNlbWVtY2dfZGF0YSBtaWdodCBiZSBjaGFuZ2VkIGFzeW5jaHJvbm91c2x5XG5AQCAtNDY1LDE0ICs0NjUsMTQgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFnZV9tZW1jZ19jaGVjayhzdHJ1Y3QgcGFnZSAqcGFnZSlcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYWdlX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdGlmIChQYWdlVGFpbChwYWdlKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRyZXR1cm4gZm9saW9fbWVtY2dfY2hlY2soKHN0cnVjdCBmb2xpbyAqKXBhZ2UpO1xuK1x0cmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKChjb25zdCBzdHJ1Y3QgZm9saW8gKilwYWdlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuQEAgLTQ5NCwxOSArNDk0LDE5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iXG4gICogdGhhdCB0aGUgZm9saW8gaGFzIGFuIGFzc29jaWF0ZWQgbWVtb3J5IGNncm91cC4gSXQncyBub3Qgc2FmZSB0byBjYWxsXG4gICogdGhpcyBmdW5jdGlvbiBhZ2FpbnN0IHNvbWUgdHlwZXMgb2YgZm9saW9zLCBlLmcuIHNsYWIgZm9saW9zLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19rbWVtKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fUEdGTEFHUyhQYWdlVGFpbChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW8tXHUwMDNlbWVtY2dfZGF0YSBcdTAwMjYgTUVNQ0dfREFUQV9PQkpFWFRTLCBmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW8tXHUwMDNlbWVtY2dfZGF0YSBcdTAwMjYgTUVNQ0dfREFUQV9LTUVNO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcbitzdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gZm9saW9fbWVtY2dfa21lbShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIChtZW1jZyA9PSByb290X21lbV9jZ3JvdXApO1xuIH1cbkBAIC01MjIsNyArNTIyLDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICogYW5kIGRvIG5vdCBob25vdXIgc2MtXHUwMDNlbWVtY2cgY2FuIHVzZSB0aGlzIHRvIGVhcmx5LXJldHVybiAwIGluIHBlci1tZW1jZ1xuICAqIGNvbnRleHRzLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QoY29uc3Qgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRyZXR1cm4gIXNjLVx1MDAzZW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy1cdTAwM2VtZW1jZyk7XG4gfVxuQEAgLTUzNyw4ICs1MzcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9kaXNhYmxlZCh2b2lkKVxuIFx0cmV0dXJuICFjZ3JvdXBfc3Vic3lzX2VuYWJsZWQobWVtb3J5X2NncnBfc3Vic3lzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi1cdFx0XHRcdFx0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqbWluLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqbG93LFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqdXNhZ2UpXG5AQCAtNTkyLDggKzU5Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4rXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdC8qXG4gXHQgKiBUaGUgcm9vdCBtZW1jZyBkb2Vzbid0IGFjY291bnQgY2hhcmdlcywgYW5kIGRvZXNuJ3Qgc3VwcG9ydFxuQEAgLTYwNCw4ICs2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuIFx0XHRtZW1jZyA9PSB0YXJnZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4rXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpZiAobWVtX2Nncm91cF91bnByb3RlY3RlZCh0YXJnZXQsIG1lbWNnKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTYxNCw4ICs2MTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbiBcdFx0cGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbWluKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbitcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGlmIChtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHRhcmdldCwgbWVtY2cpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gICogQHBnZGF0IGNvbWJpbmF0aW9uLiBUaGlzIGNhbiBiZSB0aGUgbm9kZSBscnV2ZWMsIGlmIHRoZSBtZW1vcnlcbiAgKiBjb250cm9sbGVyIGlzIGRpc2FibGVkLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG5AQCAtNzI5LDcgKzcyOSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuICAqIHRoZWlyIGJpbmRpbmcgaXMgc3RhYmxlIGlmIHRoZSByZXR1cm5lZCBscnV2ZWMgbWF0Y2hlcyB0aGUgb25lIHRoZSBjYWxsZXIgaGFzXG4gICogbG9ja2VkLiBVc2VmdWwgZm9yIGxvY2sgYmF0Y2hpbmcuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWMoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlYyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbiBcbkBAIC03NDMsMTEgKzc0MywxMSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4gXG4gc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKTtcbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqZmxhZ3MpO1xuIFxuIHN0YXRpYyBpbmxpbmVcbkBAIC04MDYsNyArODA2LDcgQEAgdm9pZCBtZW1fY2dyb3VwX2l0ZXJfYnJlYWsoc3RydWN0IG1lbV9jZ3JvdXAgKiwgc3RydWN0IG1lbV9jZ3JvdXAgKik7XG4gdm9pZCBtZW1fY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdCAgIGludCAoKikoc3RydWN0IHRhc2tfc3RydWN0ICosIHZvaWQgKiksIHZvaWQgKmFyZyk7XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC04MTUsNyArODE1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIH1cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBtZW1jZyA/IGNncm91cF9pZChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwKSA6IDA7XG4gfVxuQEAgLTgyNyw3ICs4MjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3MobSkpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuQEAgLTg0NCwxMyArODQ0LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4gICpcbiAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgbWVtY2csIG9yIE5VTEwgaWYgdGhpcyBpcyB0aGUgcm9vdC5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50X21lbV9jZ3JvdXAoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fY3NzKG1lbWNnLVx1MDAzZWNzcy5wYXJlbnQpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdClcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdClcbiB7XG4gXHRpZiAocm9vdCA9PSBtZW1jZylcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtODU4LDcgKzg1OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICp0YXNrX21lbWNnO1xuIFx0Ym9vbCBtYXRjaCA9IGZhbHNlO1xuQEAgLTg3MSw4ICs4NzEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIG1hdGNoO1xuIH1cbiBcbi1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4taW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKTtcbitzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4raW5vX3QgcGFnZV9jZ3JvdXBfaW5vKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbit1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbkBAIC05MDIsOSArOTAyLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbiBcdFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xuIH1cbiBcbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuK3Vuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gXG4tdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbit2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbiBcbiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC05MTcsNyArOTE3LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0ICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbitzdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHRcdGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgaW50IHZhbClcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5AQCAtOTMyLDE1ICs5MzIsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuK3Vuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcbit1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcbit1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuIGJvb2wgbWVtY2dfc3RhdF9pdGVtX3ZhbGlkKGludCBpZHgpO1xuIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTtcbi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuIFxuIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuQEAgLTk1MSw3ICs5NTIsNyBAQCB2b2lkIG1vZF9scnV2ZWNfa21lbV9zdGF0ZSh2b2lkICpwLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgaW50IHZhbCk7XG4gdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19mb2xpb19ldmVudHMoc3RydWN0IGZvbGlvICpmb2xpbyxcbitzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsIHVuc2lnbmVkIGxvbmcgbnIpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuQEAgLTEwMzYsNyArMTAzNyw3IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCk7XG4gZXh0ZXJuIGludCBtZW1fY2dyb3VwX2luaXQodm9pZCk7XG4gI2Vsc2UgLyogQ09ORklHX01FTUNHICovXG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTEwNDUsNDcgKzEwNDYsNDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4gXG4gI2RlZmluZSByb290X21lbV9jZ3JvdXBcdFx0KE5VTEwpXG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19jaGFyZ2VkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZ19jaGVjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFnZV9tZW1jZ19jaGVjayhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19rbWVtKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKHN0cnVjdCBwYWdlICpwYWdlKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QoY29uc3Qgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTExMCw4ICsxMTExLDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX21lbW9yeV9ldmVudF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKm1pbixcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKmxvdyxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKnVzYWdlKVxuQEAgLTExMjQsMTkgKzExMjUsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuK1x0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbitcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbWluKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbitcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMTE3NSwyNSArMTE3NiwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiB7XG4gXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0cmV0dXJuIFx1MDAyNnBnZGF0LVx1MDAzZV9fbHJ1dmVjO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50X21lbV9jZ3JvdXAoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rXHRcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTIwOCw3ICsxMjA5LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTI0MSw3ICsxMjQyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcbkBAIC0xMjUwLDcgKzEyNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFxuQEAgLTEyNTksNyArMTI2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHR1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4ge1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbkBAIC0xMjg3LDcgKzEyODgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zY2FuX3Rhc2tzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTEyOTksNyArMTMwMCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMzE0LDcgKzEzMTUsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTEzMjUsMTkgKzEzMjYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gXG4gc3RhdGljIGlubGluZVxuLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuLW1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4rbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rXHRcdFx0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIH1cbiBcbkBAIC0xMzY2LDE3ICsxMzY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTEzOTEsMTkgKzEzOTMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiB7XG4gXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIHtcbiBcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdFx0ICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIHtcbiBcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG5AQCAtMTQzMSw3ICsxNDMzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rc3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LCB1bnNpZ25lZCBsb25nIG5yKVxuIHtcbiB9XG5AQCAtMTQ2NSw3ICsxNDY3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfd29ya3F1ZXVlKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG5AQCAtMTUyOCw4ICsxNTMwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGxydXZlY191bmxvY2tfaXJxcmVzdG9yZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmdcbiB9XG4gXG4gLyogVGVzdCByZXF1aXJlcyBhIHN0YWJsZSBmb2xpby1cdTAwM2VtZW1jZyBiaW5kaW5nLCBzZWUgZm9saW9fbWVtY2coKSAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tYXRjaGVzX2xydXZlYyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX21hdGNoZXNfbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gXHRyZXR1cm4gbHJ1dmVjX3BnZGF0KGxydXZlYykgPT0gZm9saW9fcGdkYXQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIGxydXZlY19tZW1jZyhscnV2ZWMpID09IGZvbGlvX21lbWNnKGZvbGlvKTtcbkBAIC0xNjQyLDcgKzE2NDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdHdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1lbWNnLVx1MDAzZXNvY2tldF9wcmVzc3VyZV9zZXFsb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfZ2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgc2VxO1xuIFx0dTY0IHZhbDtcbkBAIC0xNjYwLDcgKzE2NjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc29ja2V0X3ByZXNzdXJlLCBqaWZmaWVzICsgSFopO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2dldF9zb2NrZXRfcHJlc3N1cmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfZ2V0X3NvY2tldF9wcmVzc3VyZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzb2NrZXRfcHJlc3N1cmUpO1xuIH1cbkBAIC0xNzczLDcgKzE3NzUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG4gICogQSBoZWxwZXIgZm9yIGFjY2Vzc2luZyBtZW1jZydzIGttZW1faWQsIHVzZWQgZm9yIGdldHRpbmdcbiAgKiBjb3JyZXNwb25kaW5nIExSVSBsaXN0cy5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gbWVtY2cgPyBtZW1jZy1cdTAwM2VrbWVtY2dfaWQgOiAtMTtcbiB9XG5AQCAtMTg0NSw3ICsxODQ3LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2ttZW1fb25saW5lKHZvaWQpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtMTg2MSw3ICsxODYzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbitzdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTg4NSw3ICsxODg3LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbiB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSk7XG4tYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4rYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbkBAIC0xODk5LDcgKzE5MDEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4gXHRcdFx0XHRcdCAgICAgc2l6ZV90IHNpemUpXG4ge1xuIH1cbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdC8qIGlmIHpzd2FwIGlzIGRpc2FibGVkLCBkbyBub3QgYmxvY2sgcGFnZXMgZ29pbmcgdG8gdGhlIHN3YXBwaW5nIGRldmljZSAqL1xuIFx0cmV0dXJuIHRydWU7XG5AQCAtMTkxMiw3ICsxOTE0LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBib29sIG1lbV9jZ3JvdXBfb29tX3N5bmNocm9uaXplKGJvb2wgd2FpdCk7XG4gXG4tc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdHJldHVybiBwLVx1MDAzZW1lbWNnX2luX29vbTtcbiB9XG5AQCAtMTkzMCw3ICsxOTMyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4gfVxuIFxuICNlbHNlIC8qIENPTkZJR19NRU1DR19WMSAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA4NGUyMzdmMmMxN2RiLi44ZTFlM2E1MDc1N2EzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTE2NTcsNyArMTY1Nyw3IEBAIGV4dGVybiB2b2lkIGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuXG4gXG4gZXh0ZXJuIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbHJ1dmVjX3BnZGF0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbHJ1dmVjX3BnZGF0KGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0cmV0dXJuIGxydXZlYy1cdTAwM2VwZ2RhdDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuaW5kZXggMDdiN2NiMTIyNDljNy4uMmJhZjdhMmIyOWIyZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbkBAIC02MywxMiArNjMsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfY291bnRlcl9pbml0KHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG4gXHRjb3VudGVyLVx1MDAzZXRyYWNrX2ZhaWxjbnQgPSBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4ge1xuIFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2Y291bnRlci1cdTAwM2V1c2FnZSk7XG4gfVxuIFxuLWxvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTtcbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oY29uc3Qgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggZmMyOTBlMjllNGE5ZS4uODQzZDcwNjgwYjhlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTUwNSw5ICs1MDUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxuIFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiB9XG4gXG4tbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4tZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbitib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG5AQCAtNTE5LDE3ICs1MTksMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCxcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gdm1fc3dhcF9mdWxsKCk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNWI5ZTBlYmQ0MmFlMC4uZjU2ZTk1ODk0OGFjMCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzMxLDcgKzMzMSw3IEBAIEVYUE9SVF9TWU1CT0wobWVtY2dfYnBmX2VuYWJsZWRfa2V5KTtcbiAgKiBJZiBtZW1jZyBpcyBib3VuZCB0byBhIHRyYWRpdGlvbmFsIGhpZXJhcmNoeSwgdGhlIGNzcyBvZiByb290X21lbV9jZ3JvdXBcbiAgKiBpcyByZXR1cm5lZC5cbiAgKi9cbi1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbitzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG5AQCAtMzU2LDcgKzM1Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIGFmdGVyIHBhZ2VfY2dyb3VwX2lubygpIHJldHVybnMsIHNvIGl0IG9ubHkgc2hvdWxkIGJlIHVzZWQgYnkgY2FsbGVycyB0aGF0XG4gICogZG8gbm90IGNhcmUgKHN1Y2ggYXMgcHJvY2ZzIGludGVyZmFjZXMpLlxuICAqL1xuLWlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbitpbm9fdCBwYWdlX2Nncm91cF9pbm8oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0dW5zaWduZWQgbG9uZyBpbm8gPSAwO1xuQEAgLTQ4OSw3ICs0ODksNyBAQCBzdHJ1Y3QgbHJ1dmVjX3N0YXRzIHtcbiBcdGxvbmcgc3RhdGVfcGVuZGluZ1tOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xuIH07XG4gXG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47XG4gXHRsb25nIHg7XG5AQCAtNTMwLDcgKzUzMCw3IEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiAgKiBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGV2ZW50IGNvdW50ZXJzIGFyZSBzdG9yZWQgaW5cbiAgKiBlbnVtIG5vZGVfc3RhdF9pdGVtLlxuICAqL1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuQEAgLTU0Nyw3ICs1NDcsNyBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpUkVBRF9PTkNFKHBuLVx1MDAzZWxydXZlY19zdGF0cy1cdTAwM2VzdGF0ZVtpXSk7XG4gfVxuIFxuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuQEAgLTc5OSw3ICs3OTksNyBAQCBzdGF0aWMgdm9pZCBmbHVzaF9tZW1jZ19zdGF0c19kd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2c3RhdHNfZmx1c2hfZHdvcmssIEZMVVNIX1RJTUUpO1xuIH1cbiBcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuK3Vuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXG4ge1xuIFx0bG9uZyB4O1xuIFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuQEAgLTEwOTEsNyArMTA5MSw3IEBAIHZvaWQgY291bnRfbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSB2bV9ldmVudF9pdGVtIGlkeCxcbiBcdHB1dF9jcHUoKTtcbiB9XG4gXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG4rdW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG4ge1xuIFx0aW50IGkgPSBtZW1jZ19ldmVudHNfaW5kZXgoZXZlbnQpO1xuIFxuQEAgLTEyMjAsNyArMTIyMCw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcbiAgKlxuICAqIFNlZSBmb2xpb19tZW1jZygpIGZvciBmb2xpby1cdTAwM2VvYmpjZy9tZW1jZyBiaW5kaW5nIHJ1bGVzLlxuICAqL1xuLXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG5AQCAtMTQ0MSw3ICsxNDQxLDcgQEAgdm9pZCBtZW1fY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuICAqXG4gICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuXG4gICovXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbitzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcbkBAIC0xNDY5LDcgKzE0NjksNyBAQCBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIFJldHVybjogVGhlIGxydXZlYyB0aGlzIGZvbGlvIGlzIG9uIHdpdGggaXRzIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0c1xuICAqIGRpc2FibGVkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuXG4gICovXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFxuQEAgLTE0OTgsNyArMTQ5OCw3IEBAIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIFJldHVybjogVGhlIGxydXZlYyB0aGlzIGZvbGlvIGlzIG9uIHdpdGggaXRzIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0c1xuICAqIGRpc2FibGVkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuXG4gICovXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0dW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuQEAgLTE3MDksNyArMTcwOSw3IEBAIHN0YXRpYyBpbnQgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpbnQgaXRlbSlcbiBcdH1cbiB9XG4gXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuK3Vuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbiB7XG4gXHRyZXR1cm4gbWVtY2dfcGFnZV9zdGF0ZShtZW1jZywgaXRlbSkgKlxuIFx0XHRtZW1jZ19wYWdlX3N0YXRlX291dHB1dF91bml0KGl0ZW0pO1xuQEAgLTE4MTIsNyArMTgxMiw4IEBAIHN0YXRpYyB2b2lkIG1lbW9yeV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuICAqIE5PVEU6IEBtZW1jZyBhbmQgQHAncyBtZW1fY2dyb3VwIGNhbiBiZSBkaWZmZXJlbnQgd2hlbiBoaWVyYXJjaHkgaXNcbiAgKiBlbmFibGVkXG4gICovXG4tdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3ZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rXHRcdFx0XHQgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG5AQCAtMTg3Nyw3ICsxODc4LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAvKlxuICAqIFJldHVybiB0aGUgbWVtb3J5IChhbmQgc3dhcCwgaWYgY29uZmlndXJlZCkgbGltaXQgZm9yIGEgbWVtY2cuXG4gICovXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3Vuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1heCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2VtZW1vcnkubWF4KTtcbiBcbkBAIC01ODM4LDcgKzU4MzksNyBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4tbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG5AQCAtNTg1NCw3ICs1ODU1LDcgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAgKlxuICAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJ3MgbWVtY2cgaGllcmFyY2h5LlxuICAqL1xuLWxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0bG9uZyBtYXJnaW47XG5AQCAtNTg3MSw3ICs1ODcyLDcgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIG1hcmdpbjtcbiB9XG4gXG4tYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK2Jvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuQEAgLTYxMzksNyArNjE0MCw3IEBAIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLWJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHQvKiBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgZG8gbm90IGJsb2NrIHBhZ2VzIGdvaW5nIHRvIHRoZSBzd2FwcGluZyBkZXZpY2UgKi9cbiBcdGlmICghenN3YXBfaXNfZW5hYmxlZCgpKVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcbmluZGV4IDQ1MDU0M2Y0YjMxOGIuLjhjNmYzYjQ1MTM2YjQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcbkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYyxcbiAgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZlxuICAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuXG4gICovXG4tbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4ge1xuIFx0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uY1xuaW5kZXggMWRhNGZmNDg0ZjA5Ny4uNWY3NzU2ZTM3MGY3YSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaW8uY1xuKysrIGIvbW0vcGFnZV9pby5jXG5AQCAtMjU2LDEyICsyNTYsMTMgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG4tc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpmb2xpb19tZW1jZ19ibGtnX2NzcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZm9saW9fbWVtY2dfYmxrZ19jc3MoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gY2dyb3VwX2VfY3NzKGZvbGlvX21lbWNnKGZvbGlvKS1cdTAwM2Vjc3MuY2dyb3VwLCBcdTAwMjZpb19jZ3JwX3N1YnN5cyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbitzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiB7XG4gXHRib29sIGNhbl9tZXJnZSA9IHRydWU7XG4gXG5AQCAtMjc3LDcgKzI3OCw4IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiBcdHJldHVybiBjYW5fbWVyZ2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sXG4rXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzO1xuIFxuQEAgLTI5NCwxMSArMjk2LDEzIEBAIHN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0Y3NzX3B1dChjc3MpO1xuIH1cbiAjZWxzZVxuLXN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbitzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4tc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbyxcbitcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyBcdTAwMjZcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDBiNWQ1MDc3MzliY2IuLjk0NzE0ZDlkZDAwM2MgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTgyLDcgKzgyLDcgQEAgZW51bSBzd2FwX2NsdXN0ZXJfZmxhZ3Mge1xuIFxuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbiBcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcdTAwMjZcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE4OjM3OjU3LjIzOTM5NjUyOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODA3OTkzMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGBjb25zdGAgUXVhbGlmaWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgbWFraW5nIGNoYW5nZXMgYWNyb3NzIGEgYnVuY2ggb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byBpdCwgc2VlIHdoYXTigJlzIGdvaW5nIG9uLCBhbmQgZGV0ZXJtaW5lIGlmIGl0J3Mgc29tZXRoaW5nIHdlIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0IGluIHRlcm1zIG9mIGZ1enppbmcuIFRoZSBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBhIGJ1bmNoIG9mIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYXJlIGdldHRpbmcgYGNvbnN0YCBxdWFsaWZpZXJzIGFkZGVkIHRvIHBvaW50ZXIgcGFyYW1ldGVycy4gV2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgc3RydWN0IG9ial9jZ3JvdXBgLCBgc3RydWN0IGZvbGlvYCwgYHN0cnVjdCBtZW1fY2dyb3VwYCwgYHN0cnVjdCBwYWdlX2NvdW50ZXJgLCBldGMuIEl0J3MgYWNyb3NzIHRoZSBib2FyZCDigJMgYG1lbWNvbnRyb2wuaGAsIGBtbXpvbmUuaGAsIGBwYWdlX2NvdW50ZXIuaGAsIGBzd2FwLmhgIGFuZCB0aGUgYXNzb2NpYXRlZCBgLmNgIGZpbGVzLlxuXG5TbywgdGhlIGZpcnN0IHRoaW5nIEkgZGlkIHdhcyB0byB0aG9yb3VnaGx5IGNoZWNrIGZvciBhbnkgKmFjdHVhbCogY29kZSBjaGFuZ2VzLiBJIHdhcyBsb29raW5nIGZvcjpcblxuKiAgICoqTG9naWMgY2hhbmdlczoqKiBEaWQgYW55IGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgZ2V0IGFsdGVyZWQ/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGNvbmRpdGlvbmFsIGNoYW5nZXMsIHZhcmlhYmxlIHJlbmFtZXMsIG9yIGRlbGV0ZWQgbGluZXMgb2YgY29kZT9cbiogICAqKkFsZ29yaXRobWljIGNoYW5nZXM6KiogQW55IHR3ZWFrcyB0byBob3cgZGF0YSBpcyBwcm9jZXNzZWQsIHRoYXQgY291bGQgaW1wYWN0IGJlaGF2aW9yP1xuKiAgICoqTmV3IGNoZWNrcy9Bc3NlcnRpb25zOioqIFdlcmUgYW55IG5ldyBzYWZldHkgY2hlY2tzIGludHJvZHVjZWQ/XG4qICAgKipDaGFuZ2VkIGNvbnN0YW50czoqKiBIYXMgdGhlICp2YWx1ZSogb2YgYW55IGNvbnN0YW50cyBiZWVuIGFsdGVyZWQsIHdoaWNoIGNvdWxkIHN1YnRseSBzaGlmdCBiZWhhdmlvcj9cbiogICAqKkFsdGVyZWQgY29udHJvbCBmbG93OioqIElzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBvciB0aGUgYnJhbmNoaW5nIHdpdGhpbiB0aGUgY29kZSwgbm93IGRpZmZlcmVudD9cblxuSSBtZXRpY3Vsb3VzbHkgd2VudCB0aHJvdWdoIGV2ZXJ5IGxpbmUgb2YgdGhlIGRpZmYuIEkgY2hlY2tlZCBmb3IgYW55IFwic3VycHJpc2VzLlwiIEFmdGVyIG15IGxpbmUtYnktbGluZSBkaWZmIHJldmlldywgaXQgYmVjYW1lIGNsZWFyOiBFdmVyeSBzaW5nbGUgY2hhbmdlIGlzIGp1c3QgdGhlIGFkZGl0aW9uIG9mIGBjb25zdGAgcXVhbGlmaWVycyB0byBwb2ludGVyIHBhcmFtZXRlcnMuIFNvLCBmb3IgZXhhbXBsZSwgYHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZ2AgYmVjb21lcyBgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBEb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nP1xuXG5JIHJlLXJlYWQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyBhbmQgSSB0aG91Z2h0IGFib3V0IHRoZSBjb3JlIHByaW5jaXBsZTogd2UgZnV6eiB0byBmaW5kIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBsYXRlbnQgYnVncyBpbnRyb2R1Y2VkIGJ5ICp0aGUgcGF0Y2ggc2VyaWVzKi5cblxuSSBoYWQgdG8gYXNrIG15c2VsZjogRG9lcyBhZGRpbmcgYGNvbnN0YCB0byBwYXJhbWV0ZXJzIGFsdGVyIHRoZSBjb21waWxlZCBDIGxvZ2ljIG9yIGRhdGEgc3RydWN0dXJlcywgYWxnb3JpdGhtIGZsb3dzIG9yIGFueSBsb2dpYz8gTm8sIGluIEMsIGBjb25zdGAgb24gcG9pbnRlciBhcmd1bWVudHMgZG9lcyAqbm90KiBjaGFuZ2UgdGhlIGNhbGxpbmcgY29udmVudGlvbi4gVGhlIGNvbXBpbGVkIG1hY2hpbmUgY29kZSBpcyBpZGVudGljYWwuIFRoZXJlJ3Mgbm8gbGF5b3V0IGNoYW5nZSwgbm8gbG9naWMgY2hhbmdlLCBubyBuZXcgYXNzZXJ0aW9ucywgbm8gcmVzdHJ1Y3R1cmVkIGZsb3cuXG5cbklzIHRoZXJlIGFueSBjaGFuY2Ugb2YgcmVncmVzc2lvbiBvciBhIGJ1ZyBpbnRyb2R1Y2VkIGJ5IGBjb25zdGAgcXVhbGlmaWNhdGlvbj8gSW4gQywgYGNvbnN0YCBkb2VzICpub3QqIGFmZmVjdCB0aGUgQUJJLiBUaGUgY29tcGlsZWQgaW5zdHJ1Y3Rpb25zIHJlbWFpbiBjb21wbGV0ZWx5IGlkZW50aWNhbC5cblxuQ2FuIGZ1enppbmcgZGlzY292ZXIgYW55IGNyYXNoLCByZWdyZXNzaW9uLCBsYXRlbnQgYnVnLCBvciB0cmlnZ2VyZWQgYXNzZXJ0aW9uIGluIGEgcHVyZSBgY29uc3RgIGFubm90YXRpb24gcGF0Y2g/IE5vLiBGdXp6aW5nIHRoZSBiaW5hcnkgZG9lcyBub3QgZ2VuZXJhdGUgbmV3IGJlaGF2aW9yIGlmIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGxpdGVyYWxseSBpZGVudGljYWwuXG5cbkJhc2VkIG9uIHRoaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICpub3QqIGEgcGF0Y2ggdGhhdCByZXF1aXJlcyBmdXp6aW5nLiBUaGVyZSBhcmUgbm8gZXhlY3V0YWJsZSBjb2RlIGNoYW5nZXMuIFRoZSBjaGFuZ2UgaXMgcHVyZWx5IGFib3V0IGNvbXBpbGVyLWVuZm9yY2VkIGNvbnN0LWNvcnJlY3RuZXNzLlxuXG5JIHdlbnQgYmFjayBhbmQgZG91YmxlLWNoZWNrZWQgdG8gZW5zdXJlIHRoZXJlIHdlcmVuJ3QgKmFueSogc3VidGxlIGNoYW5nZXMgYmV5b25kIHRoZSBgY29uc3RgIGFkZGl0aW9ucy4gSSBzZWFyY2hlZCBmb3IgcG9zc2libGUgYWNjaWRlbnRhbCBtb2RpZmljYXRpb25zLiBJIGxvb2tlZCBmb3IgKmFueSogbG9naWMgY2hhbmdlcy4gSSBsb29rZWQgZm9yICphbnkqIG5ldyBhc3NlcnRpb25zLiBJIHJldmlld2VkIGFsbCBsaW5lcyBvZiB0aGUgZGlmZi5cblxuSSBjYW4gZGVmaW5pdGl2ZWx5IHNheSB0aGF0IHRoZSBwYXRjaCBjb25zaXN0cyAqZW50aXJlbHkqIG9mIGBjb25zdGAgcXVhbGlmaWVyIGFkZGl0aW9ucyB0byBmdW5jdGlvbiBzaWduYXR1cmVzLCBhbmQgbm90aGluZyBtb3JlLiBUaGVyZSBpcyBubyBjaGFuZ2UgdG8gZXhlY3V0YWJsZSBjb2RlLiBUaGlzIGlzLCBpbiBlZmZlY3QsIGEgXCJuby1vcFwiIHBhdGNoIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxOSwiT3V0cHV0VG9rZW5zIjo4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxODozODoxNC4wNDczOTI4ODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgJ2NvbnN0JyBxdWFsaWZpZXJzIHRvIHBvaW50ZXIgcGFyYW1ldGVycyBhY3Jvc3MgbWVtY29udHJvbCwgc3dhcCwgYW5kIHBhZ2UgY291bnRlciBoZWxwZXIgZnVuY3Rpb25zIHRvIGltcHJvdmUgY29uc3QtY29ycmVjdG5lc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZXhlY3V0YWJsZSBsb2dpYywgcnVudGltZSBhc3NlcnRpb25zLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGxheW91dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzICdjb25zdCcgcXVhbGlmaWVycyB0byBwb2ludGVyIHBhcmFtZXRlcnMgYWNyb3NzIG1lbWNvbnRyb2wsIHN3YXAsIGFuZCBwYWdlIGNvdW50ZXIgaGVscGVyIGZ1bmN0aW9ucyB0byBpbXByb3ZlIGNvbnN0LWNvcnJlY3RuZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGV4ZWN1dGFibGUgbG9naWMsIHJ1bnRpbWUgYXNzZXJ0aW9ucywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTg6Mzg6MTQuMDQ3NDE0NDkxWiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowbn4fq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 18:12:03 +0000 UTC FinishedAt: 2026-09-03 18:38:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE4OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG9ubHkgYWRkcyAmIzM5O2NvbnN0JiMzOTsgcXVhbGlmaWVycyB0byBwb2ludGVyIHBhcmFtZXRlcnMgYWNyb3NzIG1lbWNvbnRyb2wsIHN3YXAsIGFuZCBwYWdlIGNvdW50ZXIgaGVscGVyIGZ1bmN0aW9ucyB0byBpbXByb3ZlIGNvbnN0LWNvcnJlY3RuZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGV4ZWN1dGFibGUgbG9naWMsIHJ1bnRpbWUgYXNzZXJ0aW9ucywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxODozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE3NGRiYzZmNDcwNjQ1NmNiNTJmNDgzOGZkZTY4NDVjZmMwYjc2ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE4OjM3OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDk0NWQ3ZGJmMWJiMmMuLmUxOGI0NDk2NWQwNWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0zNjMsNyAmIzQzOzM2Myw3IEBAIGVudW0gb2JqZXh0X2ZsYWdzIHtcbiAgKlxuICAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgbWVtY2cgd29uJiMzOTt0IGJlIHJlbGVhc2VkLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiB7XG4gXHRsb2NrZGVwX2Fzc2VydF9vbmNlKHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZjZ3JvdXBfbXV0ZXgpKTtcbiBcdHJldHVybiBvYmpjZyA/IFJFQURfT05DRShvYmpjZy1cdTAwM2VtZW1jZykgOiBOVUxMO1xuQEAgLTM3Nyw3ICYjNDM7Mzc3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4gICogb3IgTlVMTC4gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGZvbGlvIGlzIGtub3duIHRvIGhhdmUgYVxuICAqIHByb3BlciBvYmplY3QgY2dyb3VwIHBvaW50ZXIuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGEgPSBmb2xpby1cdTAwM2VtZW1jZ19kYXRhO1xuIFxuQEAgLTQxNSw3ICYjNDM7NDE1LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBOb3RlOiBUaGUgY2FsbGVyIHNob3VsZCBob2xkIGFuIHJjdSByZWFkIGxvY2sgb3IgY2dyb3VwX211dGV4IHRvIHByb3RlY3RcbiAgKiBtZW1jZyBhc3NvY2lhdGVkIHdpdGggYSBmb2xpbyBmcm9tIGJlaW5nIHJlbGVhc2VkLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xuIFxuQEAgLTQyOCw3ICYjNDM7NDI4LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKlxuICAqIFJldHVybnMgdHJ1ZSBpZiBmb2xpbyBpcyBjaGFyZ2VkIHRvIGEgbWVtb3J5IGNncm91cCwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICovXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZm9saW8tXHUwMDNlbWVtY2dfZGF0YSAhPSAwO1xuIH1cbkBAIC00NDgsNyAmIzQzOzQ0OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19jaGFyZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gICogQSBjYWxsZXIgc2hvdWxkIGhvbGQgYW4gcmN1IHJlYWQgbG9jayB0byBwcm90ZWN0IG1lbWNnIGFzc29jaWF0ZWQgd2l0aCBhXG4gICogcGFnZSBmcm9tIGJlaW5nIHJlbGVhc2VkLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0LypcbiBcdCAqIEJlY2F1c2UgZm9saW8tXHUwMDNlbWVtY2dfZGF0YSBtaWdodCBiZSBjaGFuZ2VkIGFzeW5jaHJvbm91c2x5XG5AQCAtNDY1LDE0ICYjNDM7NDY1LDE0IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0aWYgKFBhZ2VUYWlsKHBhZ2UpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHJldHVybiBmb2xpb19tZW1jZ19jaGVjaygoc3RydWN0IGZvbGlvICopcGFnZSk7XG4mIzQzO1x0cmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKChjb25zdCBzdHJ1Y3QgZm9saW8gKilwYWdlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcbkBAIC00OTQsMTkgJiM0Mzs0OTQsMTkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JcbiAgKiB0aGF0IHRoZSBmb2xpbyBoYXMgYW4gYXNzb2NpYXRlZCBtZW1vcnkgY2dyb3VwLiBJdCYjMzk7cyBub3Qgc2FmZSB0byBjYWxsXG4gICogdGhpcyBmdW5jdGlvbiBhZ2FpbnN0IHNvbWUgdHlwZXMgb2YgZm9saW9zLCBlLmcuIHNsYWIgZm9saW9zLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19rbWVtKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19rbWVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZVRhaWwoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSksIFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuIFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgXHUwMDI2IE1FTUNHX0RBVEFfT0JKRVhUUywgZm9saW8pO1xuIFx0cmV0dXJuIGZvbGlvLVx1MDAzZW1lbWNnX2RhdGEgXHUwMDI2IE1FTUNHX0RBVEFfS01FTTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdHJldHVybiBmb2xpb19tZW1jZ19rbWVtKHBhZ2VfZm9saW8ocGFnZSkpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIChtZW1jZyA9PSByb290X21lbV9jZ3JvdXApO1xuIH1cbkBAIC01MjIsNyAmIzQzOzUyMiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICAqIGFuZCBkbyBub3QgaG9ub3VyIHNjLVx1MDAzZW1lbWNnIGNhbiB1c2UgdGhpcyB0byBlYXJseS1yZXR1cm4gMCBpbiBwZXItbWVtY2dcbiAgKiBjb250ZXh0cy5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHJldHVybiAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKTtcbiB9XG5AQCAtNTM3LDggJiM0Mzs1MzcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9kaXNhYmxlZCh2b2lkKVxuIFx0cmV0dXJuICFjZ3JvdXBfc3Vic3lzX2VuYWJsZWQobWVtb3J5X2NncnBfc3Vic3lzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi1cdFx0XHRcdFx0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbiYjNDM7XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nICptaW4sXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nICpsb3csXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nICp1c2FnZSlcbkBAIC01OTIsOCAmIzQzOzU5Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0LypcbiBcdCAqIFRoZSByb290IG1lbWNnIGRvZXNuJiMzOTt0IGFjY291bnQgY2hhcmdlcywgYW5kIGRvZXNuJiMzOTt0IHN1cHBvcnRcbkBAIC02MDQsOCAmIzQzOzYwNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4gXHRcdG1lbWNnID09IHRhcmdldDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0aWYgKG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQodGFyZ2V0LCBtZW1jZykpXG4gXHRcdHJldHVybiBmYWxzZTtcbkBAIC02MTQsOCAmIzQzOzYxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuIFx0XHRwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnkpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi1cdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpZiAobWVtX2Nncm91cF91bnByb3RlY3RlZCh0YXJnZXQsIG1lbWNnKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTY4OCw3ICYjNDM7Njg4LDcgQEAgdm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KTtcbiAgKiBAcGdkYXQgY29tYmluYXRpb24uIFRoaXMgY2FuIGJlIHRoZSBub2RlIGxydXZlYywgaWYgdGhlIG1lbW9yeVxuICAqIGNvbnRyb2xsZXIgaXMgZGlzYWJsZWQuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICptZW1fY2dyb3VwX2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG5AQCAtNzI5LDcgJiM0Mzs3MjksNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKm1lbV9jZ3JvdXBfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiAgKiB0aGVpciBiaW5kaW5nIGlzIHN0YWJsZSBpZiB0aGUgcmV0dXJuZWQgbHJ1dmVjIG1hdGNoZXMgdGhlIG9uZSB0aGUgY2FsbGVyIGhhc1xuICAqIGxvY2tlZC4gVXNlZnVsIGZvciBsb2NrIGJhdGNoaW5nLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xuIFxuQEAgLTc0MywxMSAmIzQzOzc0MywxMSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4gXG4gc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKTtcbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKmZsYWdzKTtcbiBcbiBzdGF0aWMgaW5saW5lXG5AQCAtODA2LDcgJiM0Mzs4MDYsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKTtcbiB2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0ICAgaW50ICgqKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKTtcbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC04MTUsNyAmIzQzOzgxNSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKTtcbiBcbi1zdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIG1lbWNnID8gY2dyb3VwX2lkKG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXApIDogMDtcbiB9XG5AQCAtODI3LDcgJiM0Mzs4MjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3MobSkpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbiBcbkBAIC04NDQsMTMgJiM0Mzs4NDQsMTMgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiAgKlxuICAqIFJldHVybnMgdGhlIHBhcmVudCBtZW1jZywgb3IgTlVMTCBpZiB0aGlzIGlzIHRoZSByb290LlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50X21lbV9jZ3JvdXAoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fY3NzKG1lbWNnLVx1MDAzZWNzcy5wYXJlbnQpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICpyb290KVxuIHtcbiBcdGlmIChyb290ID09IG1lbWNnKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC04NTgsNyAmIzQzOzg1OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqdGFza19tZW1jZztcbiBcdGJvb2wgbWF0Y2ggPSBmYWxzZTtcbkBAIC04NzEsOCAmIzQzOzg3MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRyZXR1cm4gbWF0Y2g7XG4gfVxuIFxuLXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1pbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpO1xuJiM0MztzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO2lub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG5AQCAtODg1LDcgJiM0Mzs4ODUsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpO1xuIFxuIHN0YXRpYyBpbmxpbmVcbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbkBAIC05MDIsOSAmIzQzOzkwMiw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXG4gXHRcdF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF9tYXNrKTtcbiB9XG4gXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiYjNDM7dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiBcbi12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbiBcbiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC05MTcsNyAmIzQzOzkxNyw3IEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdCAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbkBAIC05MzIsMTUgJiM0Mzs5MzIsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudCk7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuIGJvb2wgbWVtY2dfc3RhdF9pdGVtX3ZhbGlkKGludCBpZHgpO1xuIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTtcbi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO1x0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbiBcbiB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC05NTEsNyAmIzQzOzk1Miw3IEBAIHZvaWQgbW9kX2xydXZlY19rbWVtX3N0YXRlKHZvaWQgKnAsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKTtcbiB2b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBjb3VudCk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsIHVuc2lnbmVkIGxvbmcgbnIpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuQEAgLTEwMzYsNyAmIzQzOzEwMzcsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfd29ya3F1ZXVlKHZvaWQpO1xuIGV4dGVybiBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpO1xuICNlbHNlIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTA0NSw0NyAmIzQzOzEwNDYsNDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4gXG4gI2RlZmluZSByb290X21lbV9jZ3JvdXBcdFx0KE5VTEwpXG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QoY29uc3Qgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTExMCw4ICYjNDM7MTExMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19tZW1vcnlfZXZlbnRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuLVx0XHRcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKm1pbixcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKmxvdyxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKnVzYWdlKVxuQEAgLTExMjQsMTkgJiM0MzsxMTI1LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbi1cdFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTExNzUsMjUgJiM0MzsxMTc2LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICptZW1fY2dyb3VwX2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiB7XG4gXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHJldHVybiBcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50X21lbV9jZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTIwOCw3ICYjNDM7MTIwOSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC0xMjQxLDcgJiM0MzsxMjQyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XG4gXG5AQCAtMTI1MCw3ICYjNDM7MTI1MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBcdTAwMjZwZ2RhdC1cdTAwM2VfX2xydXZlYztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFxuQEAgLTEyNTksNyAmIzQzOzEyNjAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIFx1MDAyNnBnZGF0LVx1MDAzZV9fbHJ1dmVjO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbiB7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuQEAgLTEyODcsNyAmIzQzOzEyODgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zY2FuX3Rhc2tzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMjk5LDcgJiM0MzsxMzAwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMzE0LDcgJiM0MzsxMzE1LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTMyNSwxOSAmIzQzOzEzMjYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gXG4gc3RhdGljIGlubGluZVxuLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO3Vuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkXG4tbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7bWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiB9XG4gXG5AQCAtMTM2NiwxNyAmIzQzOzEzNjgsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTM5MSwxOSAmIzQzOzEzOTMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0XHRcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdFx0ICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIHtcbiBcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG5AQCAtMTQzMSw3ICYjNDM7MTQzMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsIHVuc2lnbmVkIGxvbmcgbnIpXG4ge1xuIH1cbkBAIC0xNDY1LDcgJiM0MzsxNDY3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfd29ya3F1ZXVlKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuQEAgLTE1MjgsOCAmIzQzOzE1MzAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1dmVjX3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZ1xuIH1cbiBcbiAvKiBUZXN0IHJlcXVpcmVzIGEgc3RhYmxlIGZvbGlvLVx1MDAzZW1lbWNnIGJpbmRpbmcsIHNlZSBmb2xpb19tZW1jZygpICovXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21hdGNoZXNfbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21hdGNoZXNfbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0cmV0dXJuIGxydXZlY19wZ2RhdChscnV2ZWMpID09IGZvbGlvX3BnZGF0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICBscnV2ZWNfbWVtY2cobHJ1dmVjKSA9PSBmb2xpb19tZW1jZyhmb2xpbyk7XG5AQCAtMTY0Miw3ICYjNDM7MTY0NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3NldF9zb2NrZXRfcHJlc3N1cmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0d3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bWVtY2ctXHUwMDNlc29ja2V0X3ByZXNzdXJlX3NlcWxvY2ssIGZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgc2VxO1xuIFx0dTY0IHZhbDtcbkBAIC0xNjYwLDcgJiM0MzsxNjYyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXNvY2tldF9wcmVzc3VyZSwgamlmZmllcyAmIzQzOyBIWik7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfZ2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfZ2V0X3NvY2tldF9wcmVzc3VyZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzb2NrZXRfcHJlc3N1cmUpO1xuIH1cbkBAIC0xNzczLDcgJiM0MzsxNzc1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuICAqIEEgaGVscGVyIGZvciBhY2Nlc3NpbmcgbWVtY2cmIzM5O3Mga21lbV9pZCwgdXNlZCBmb3IgZ2V0dGluZ1xuICAqIGNvcnJlc3BvbmRpbmcgTFJVIGxpc3RzLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gbWVtY2cgPyBtZW1jZy1cdTAwM2VrbWVtY2dfaWQgOiAtMTtcbiB9XG5AQCAtMTg0NSw3ICYjNDM7MTg0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIC0xO1xuIH1cbkBAIC0xODYxLDcgJiM0MzsxODYzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbm9fdCBwYWdlX2Nncm91cF9pbm8oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE4ODUsNyAmIzQzOzE4ODcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbiB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xuIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbi1ib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiYjNDM7Ym9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbkBAIC0xODk5LDcgJiM0MzsxOTAxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxuIFx0XHRcdFx0XHQgICAgIHNpemVfdCBzaXplKVxuIHtcbiB9XG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0LyogaWYgenN3YXAgaXMgZGlzYWJsZWQsIGRvIG5vdCBibG9jayBwYWdlcyBnb2luZyB0byB0aGUgc3dhcHBpbmcgZGV2aWNlICovXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC0xOTEyLDcgJiM0MzsxOTE0LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBib29sIG1lbV9jZ3JvdXBfb29tX3N5bmNocm9uaXplKGJvb2wgd2FpdCk7XG4gXG4tc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4gXHRyZXR1cm4gcC1cdTAwM2VtZW1jZ19pbl9vb207XG4gfVxuQEAgLTE5MzAsNyAmIzQzOzE5MzIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbiB9XG4gXG4gI2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovXG4tc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA4NGUyMzdmMmMxN2RiLi44ZTFlM2E1MDc1N2EzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTE2NTcsNyAmIzQzOzE2NTcsNyBAQCBleHRlcm4gdm9pZCBpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmblxuIFxuIGV4dGVybiB2b2lkIGxydXZlY19pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcGdsaXN0X2RhdGEgKmxydXZlY19wZ2RhdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHBnbGlzdF9kYXRhICpscnV2ZWNfcGdkYXQoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIHtcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gXHRyZXR1cm4gbHJ1dmVjLVx1MDAzZXBnZGF0O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXG5pbmRleCAwN2I3Y2IxMjI0OWM3Li4yYmFmN2EyYjI5YjJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuQEAgLTYzLDEyICYjNDM7NjMsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfY291bnRlcl9pbml0KHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG4gXHRjb3VudGVyLVx1MDAzZXRyYWNrX2ZhaWxjbnQgPSBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChjb25zdCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKVxuIHtcbiBcdHJldHVybiBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmNvdW50ZXItXHUwMDNldXNhZ2UpO1xuIH1cbiBcbi1sb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XG4mIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihjb25zdCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTtcbiB2b2lkIHBhZ2VfY291bnRlcl9jYW5jZWwoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGJvb2wgcGFnZV9jb3VudGVyX3RyeV9jaGFyZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCBmYzI5MGUyOWU0YTllLi44NDNkNzA2ODBiOGUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtNTA1LDkgJiM0Mzs1MDUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxuIFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiB9XG4gXG4tbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4tZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuJiM0Mztib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG5AQCAtNTE5LDE3ICYjNDM7NTE5LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIFBBR0VfQ09VTlRFUl9NQVg7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIHZtX3N3YXBfZnVsbCgpO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDViOWUwZWJkNDJhZTAuLmY1NmU5NTg5NDhhYzAgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTMzMSw3ICYjNDM7MzMxLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1jZ19icGZfZW5hYmxlZF9rZXkpO1xuICAqIElmIG1lbWNnIGlzIGJvdW5kIHRvIGEgdHJhZGl0aW9uYWwgaGllcmFyY2h5LCB0aGUgY3NzIG9mIHJvb3RfbWVtX2Nncm91cFxuICAqIGlzIHJldHVybmVkLlxuICAqL1xuLXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG5AQCAtMzU2LDcgJiM0MzszNTYsNyBAQCBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBhZnRlciBwYWdlX2Nncm91cF9pbm8oKSByZXR1cm5zLCBzbyBpdCBvbmx5IHNob3VsZCBiZSB1c2VkIGJ5IGNhbGxlcnMgdGhhdFxuICAqIGRvIG5vdCBjYXJlIChzdWNoIGFzIHByb2NmcyBpbnRlcmZhY2VzKS5cbiAgKi9cbi1pbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO2lub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHR1bnNpZ25lZCBsb25nIGlubyA9IDA7XG5AQCAtNDg5LDcgJiM0Mzs0ODksNyBAQCBzdHJ1Y3QgbHJ1dmVjX3N0YXRzIHtcbiBcdGxvbmcgc3RhdGVfcGVuZGluZ1tOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xuIH07XG4gXG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuIFx0bG9uZyB4O1xuQEAgLTUzMCw3ICYjNDM7NTMwLDcgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuICAqIG1vbm90b25pY2FsbHktaW5jcmVtZW50ZWQgZXZlbnQgY291bnRlcnMgYXJlIHN0b3JlZCBpblxuICAqIGVudW0gbm9kZV9zdGF0X2l0ZW0uXG4gICovXG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuQEAgLTU0Nyw3ICYjNDM7NTQ3LDcgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVbaV0pO1xuIH1cbiBcbi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47XG5AQCAtNzk5LDcgJiM0Mzs3OTksNyBAQCBzdGF0aWMgdm9pZCBmbHVzaF9tZW1jZ19zdGF0c19kd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2c3RhdHNfZmx1c2hfZHdvcmssIEZMVVNIX1RJTUUpO1xuIH1cbiBcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuIHtcbiBcdGxvbmcgeDtcbiBcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbkBAIC0xMDkxLDcgJiM0MzsxMDkxLDcgQEAgdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LFxuIFx0cHV0X2NwdSgpO1xuIH1cbiBcbi11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcbiYjNDM7dW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG4ge1xuIFx0aW50IGkgPSBtZW1jZ19ldmVudHNfaW5kZXgoZXZlbnQpO1xuIFxuQEAgLTEyMjAsNyAmIzQzOzEyMjAsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpXG4gICpcbiAgKiBTZWUgZm9saW9fbWVtY2coKSBmb3IgZm9saW8tXHUwMDNlb2JqY2cvbWVtY2cgYmluZGluZyBydWxlcy5cbiAgKi9cbi1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcbkBAIC0xNDQxLDcgJiM0MzsxNDQxLDcgQEAgdm9pZCBtZW1fY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuICAqXG4gICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuXG4gICovXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gXG5AQCAtMTQ2OSw3ICYjNDM7MTQ2OSw3IEBAIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzXG4gICogZGlzYWJsZWQgYW5kIHJjdSByZWFkIGxvY2sgaGVsZC5cbiAgKi9cbi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFxuQEAgLTE0OTgsNyAmIzQzOzE0OTgsNyBAQCBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiBSZXR1cm46IFRoZSBscnV2ZWMgdGhpcyBmb2xpbyBpcyBvbiB3aXRoIGl0cyBsb2NrIGhlbGQgYW5kIGludGVycnVwdHNcbiAgKiBkaXNhYmxlZCBhbmQgcmN1IHJlYWQgbG9jayBoZWxkLlxuICAqL1xuLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHR1bnNpZ25lZCBsb25nICpmbGFncylcbiB7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG5AQCAtMTcwOSw3ICYjNDM7MTcwOSw3IEBAIHN0YXRpYyBpbnQgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpbnQgaXRlbSlcbiBcdH1cbiB9XG4gXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4ge1xuIFx0cmV0dXJuIG1lbWNnX3BhZ2Vfc3RhdGUobWVtY2csIGl0ZW0pICpcbiBcdFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcbkBAIC0xODEyLDcgJiM0MzsxODEyLDggQEAgc3RhdGljIHZvaWQgbWVtb3J5X3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4gICogTk9URTogQG1lbWNnIGFuZCBAcCYjMzk7cyBtZW1fY2dyb3VwIGNhbiBiZSBkaWZmZXJlbnQgd2hlbiBoaWVyYXJjaHkgaXNcbiAgKiBlbmFibGVkXG4gICovXG4tdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbkBAIC0xODc3LDcgJiM0MzsxODc4LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAvKlxuICAqIFJldHVybiB0aGUgbWVtb3J5IChhbmQgc3dhcCwgaWYgY29uZmlndXJlZCkgbGltaXQgZm9yIGEgbWVtY2cuXG4gICovXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBtYXggPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNlbWVtb3J5Lm1heCk7XG4gXG5AQCAtNTgzOCw3ICYjNDM7NTgzOSw3IEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbi1sb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG5AQCAtNTg1NCw3ICYjNDM7NTg1NSw3IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICpcbiAgKiBSZXR1cm46IFJlbWFpbmluZyBjaGFyZ2VhYmxlIHBhZ2VzIGluIHRoZSBmb2xpbyYjMzk7cyBtZW1jZyBoaWVyYXJjaHkuXG4gICovXG4tbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0bG9uZyBtYXJnaW47XG5AQCAtNTg3MSw3ICYjNDM7NTg3Miw3IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBtYXJnaW47XG4gfVxuIFxuLWJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7Ym9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG5AQCAtNjEzOSw3ICYjNDM7NjE0MCw3IEBAIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLWJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO2Jvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0LyogaWYgenN3YXAgaXMgZGlzYWJsZWQsIGRvIG5vdCBibG9jayBwYWdlcyBnb2luZyB0byB0aGUgc3dhcHBpbmcgZGV2aWNlICovXG4gXHRpZiAoIXpzd2FwX2lzX2VuYWJsZWQoKSlcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jXG5pbmRleCA0NTA1NDNmNGIzMThiLi44YzZmM2I0NTEzNmI0IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9jb3VudGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfY291bnRlci5jXG5AQCAtNTMsNyAmIzQzOzUzLDcgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLFxuICAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mXG4gICogaXRzIGFuY2VzdG9ycy4gVGhlIHZhbHVlIG1heSBiZSBuZWdhdGl2ZSBkdXJpbmcgYSBjb25jdXJyZW50IGNoYXJnZS5cbiAgKi9cbi1sb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcbiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4ge1xuIFx0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uY1xuaW5kZXggMWRhNGZmNDg0ZjA5Ny4uNWY3NzU2ZTM3MGY3YSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pby5jXG5AQCAtMjU2LDEyICYjNDM7MjU2LDEzIEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQKVxuLXN0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZm9saW9fbWVtY2dfYmxrZ19jc3Moc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpmb2xpb19tZW1jZ19ibGtnX2Nzcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBjZ3JvdXBfZV9jc3MoZm9saW9fbWVtY2coZm9saW8pLVx1MDAzZWNzcy5jZ3JvdXAsIFx1MDAyNmlvX2NncnBfc3Vic3lzKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuJiM0MztzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4ge1xuIFx0Ym9vbCBjYW5fbWVyZ2UgPSB0cnVlO1xuIFxuQEAgLTI3Nyw3ICYjNDM7Mjc4LDggQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuIFx0cmV0dXJuIGNhbl9tZXJnZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sXG4mIzQzO1x0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcbiBcbkBAIC0yOTQsMTEgJiM0MzsyOTYsMTMgQEAgc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRjc3NfcHV0KGNzcyk7XG4gfVxuICNlbHNlXG4tc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuJiM0MztzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLFxuJiM0MztcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyBcdTAwMjZcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDBiNWQ1MDc3MzliY2IuLjk0NzE0ZDlkZDAwM2MgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTgyLDcgJiM0Mzs4Miw3IEBAIGVudW0gc3dhcF9jbHVzdGVyX2ZsYWdzIHtcbiBcbiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7XG4gXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE4OjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgJiMzOTtjb25zdCYjMzk7IHF1YWxpZmllcnMgdG8gcG9pbnRlciBwYXJhbWV0ZXJzIGFjcm9zcyBtZW1jb250cm9sLCBzd2FwLCBhbmQgcGFnZSBjb3VudGVyIGhlbHBlciBmdW5jdGlvbnMgdG8gaW1wcm92ZSBjb25zdC1jb3JyZWN0bmVzcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBleGVjdXRhYmxlIGxvZ2ljLCBydW50aW1lIGFzc2VydGlvbnMsIGNvbnRyb2wgZmxvdywgb3IgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNzRkYmM2ZjQ3MDY0NTZjYjUyZjQ4MzhmZGU2ODQ1Y2ZjMGI3NmRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxODozNzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggOTQ1ZDdkYmYxYmIyYy4uZTE4YjQ0OTY1ZDA1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTM2Myw3ICYjNDM7MzYzLDcgQEAgZW51bSBvYmpleHRfZmxhZ3MgewogICoKICAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgbWVtY2cgd29uJiMzOTt0IGJlIHJlbGVhc2VkLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKIHsKIAlsb2NrZGVwX2Fzc2VydF9vbmNlKHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8IGxvY2tkZXBfaXNfaGVsZCgmYW1wO2Nncm91cF9tdXRleCkpOwogCXJldHVybiBvYmpjZyA/IFJFQURfT05DRShvYmpjZy0mZ3Q7bWVtY2cpIDogTlVMTDsKQEAgLTM3Nyw3ICYjNDM7Mzc3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiAgKiBvciBOVUxMLiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZm9saW8gaXMga25vd24gdG8gaGF2ZSBhCiAgKiBwcm9wZXIgb2JqZWN0IGNncm91cCBwb2ludGVyLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpmb2xpb19vYmpjZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKmZvbGlvX29iamNnKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJdW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhID0gZm9saW8tJmd0O21lbWNnX2RhdGE7CiAKQEAgLTQxNSw3ICYjNDM7NDE1LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coc3RydWN0IGZvbGlvICpmb2xpbykKICAqIE5vdGU6IFRoZSBjYWxsZXIgc2hvdWxkIGhvbGQgYW4gcmN1IHJlYWQgbG9jayBvciBjZ3JvdXBfbXV0ZXggdG8gcHJvdGVjdAogICogbWVtY2cgYXNzb2NpYXRlZCB3aXRoIGEgZm9saW8gZnJvbSBiZWluZyByZWxlYXNlZC4KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTsKIApAQCAtNDI4LDcgJiM0Mzs0MjgsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICoKICAqIFJldHVybnMgdHJ1ZSBpZiBmb2xpbyBpcyBjaGFyZ2VkIHRvIGEgbWVtb3J5IGNncm91cCwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19jaGFyZ2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gZm9saW8tJmd0O21lbWNnX2RhdGEgIT0gMDsKIH0KQEAgLTQ0OCw3ICYjNDM7NDQ4LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoc3RydWN0IGZvbGlvICpmb2xpbykKICAqIEEgY2FsbGVyIHNob3VsZCBob2xkIGFuIHJjdSByZWFkIGxvY2sgdG8gcHJvdGVjdCBtZW1jZyBhc3NvY2lhdGVkIHdpdGggYQogICogcGFnZSBmcm9tIGJlaW5nIHJlbGVhc2VkLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZ19jaGVjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJLyoKIAkgKiBCZWNhdXNlIGZvbGlvLSZndDttZW1jZ19kYXRhIG1pZ2h0IGJlIGNoYW5nZWQgYXN5bmNocm9ub3VzbHkKQEAgLTQ2NSwxNCAmIzQzOzQ2NSwxNCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZ19jaGVjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFnZV9tZW1jZ19jaGVjayhzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYWdlX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQogewogCWlmIChQYWdlVGFpbChwYWdlKSkKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKChzdHJ1Y3QgZm9saW8gKilwYWdlKTsKJiM0MzsJcmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKChjb25zdCBzdHJ1Y3QgZm9saW8gKilwYWdlKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCkBAIC00OTQsMTkgJiM0Mzs0OTQsMTkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2IKICAqIHRoYXQgdGhlIGZvbGlvIGhhcyBhbiBhc3NvY2lhdGVkIG1lbW9yeSBjZ3JvdXAuIEl0JiMzOTtzIG5vdCBzYWZlIHRvIGNhbGwKICAqIHRoaXMgZnVuY3Rpb24gYWdhaW5zdCBzb21lIHR5cGVzIG9mIGZvbGlvcywgZS5nLiBzbGFiIGZvbGlvcy4KICAqLwotc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCVZNX0JVR19PTl9QR0ZMQUdTKFBhZ2VUYWlsKCZhbXA7Zm9saW8tJmd0O3BhZ2UpLCAmYW1wO2ZvbGlvLSZndDtwYWdlKTsKIAlWTV9CVUdfT05fRk9MSU8oZm9saW8tJmd0O21lbWNnX2RhdGEgJmFtcDsgTUVNQ0dfREFUQV9PQkpFWFRTLCBmb2xpbyk7CiAJcmV0dXJuIGZvbGlvLSZndDttZW1jZ19kYXRhICZhbXA7IE1FTUNHX0RBVEFfS01FTTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7c3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJcmV0dXJuIGZvbGlvX21lbWNnX2ttZW0ocGFnZV9mb2xpbyhwYWdlKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiAobWVtY2cgPT0gcm9vdF9tZW1fY2dyb3VwKTsKIH0KQEAgLTUyMiw3ICYjNDM7NTIyLDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAgKiBhbmQgZG8gbm90IGhvbm91ciBzYy0mZ3Q7bWVtY2cgY2FuIHVzZSB0aGlzIHRvIGVhcmx5LXJldHVybiAwIGluIHBlci1tZW1jZwogICogY29udGV4dHMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QoY29uc3Qgc3RydWN0IHNocmlua19jb250cm9sICpzYykKIHsKIAlyZXR1cm4gIXNjLSZndDttZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtJmd0O21lbWNnKTsKIH0KQEAgLTUzNyw4ICYjNDM7NTM3LDggQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfZGlzYWJsZWQodm9pZCkKIAlyZXR1cm4gIWNncm91cF9zdWJzeXNfZW5hYmxlZChtZW1vcnlfY2dycF9zdWJzeXMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LAotCQkJCQkgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiYjNDM7CQkJCQkgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQkgdW5zaWduZWQgbG9uZyAqbWluLAogCQkJCQkgdW5zaWduZWQgbG9uZyAqbG93LAogCQkJCQkgdW5zaWduZWQgbG9uZyAqdXNhZ2UpCkBAIC01OTIsOCAmIzQzOzU5Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiAJCQkJICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LAotCQkJCQkgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LAomIzQzOwkJCQkJICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJLyoKIAkgKiBUaGUgcm9vdCBtZW1jZyBkb2VzbiYjMzk7dCBhY2NvdW50IGNoYXJnZXMsIGFuZCBkb2VzbiYjMzk7dCBzdXBwb3J0CkBAIC02MDQsOCAmIzQzOzYwNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCiAJCW1lbWNnID09IHRhcmdldDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCi0JCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCwKJiM0MzsJCQkJCWNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlpZiAobWVtX2Nncm91cF91bnByb3RlY3RlZCh0YXJnZXQsIG1lbWNnKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNjE0LDggJiM0Mzs2MTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCwKIAkJcGFnZV9jb3VudGVyX3JlYWQoJmFtcDttZW1jZy0mZ3Q7bWVtb3J5KTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbWluKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCi0JCQkJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCwKJiM0MzsJCQkJCWNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlpZiAobWVtX2Nncm91cF91bnByb3RlY3RlZCh0YXJnZXQsIG1lbWNnKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNjg4LDcgJiM0Mzs2ODgsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfbWlncmF0ZShzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpOwogICogQHBnZGF0IGNvbWJpbmF0aW9uLiBUaGlzIGNhbiBiZSB0aGUgbm9kZSBscnV2ZWMsIGlmIHRoZSBtZW1vcnkKICAqIGNvbnRyb2xsZXIgaXMgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQkgICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7CkBAIC03MjksNyAmIzQzOzcyOSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogICogdGhlaXIgYmluZGluZyBpcyBzdGFibGUgaWYgdGhlIHJldHVybmVkIGxydXZlYyBtYXRjaGVzIHRoZSBvbmUgdGhlIGNhbGxlciBoYXMKICAqIGxvY2tlZC4gVXNlZnVsIGZvciBsb2NrIGJhdGNoaW5nLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlYyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pOwogCkBAIC03NDMsMTEgJiM0Mzs3NDMsMTEgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCiBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpOwogCi1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0MztzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAotc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCQkJCXVuc2lnbmVkIGxvbmcgKmZsYWdzKTsKIAogc3RhdGljIGlubGluZQpAQCAtODA2LDcgJiM0Mzs4MDYsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKTsKIHZvaWQgbWVtX2Nncm91cF9zY2FuX3Rhc2tzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCSAgIGludCAoKikoc3RydWN0IHRhc2tfc3RydWN0ICosIHZvaWQgKiksIHZvaWQgKmFyZyk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIDA7CkBAIC04MTUsNyAmIzQzOzgxNSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIH0KIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fcHJpdmF0ZV9pZCh1bnNpZ25lZCBzaG9ydCBpZCk7CiAKLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBtZW1jZyA/IGNncm91cF9pZChtZW1jZy0mZ3Q7Y3NzLmNncm91cCkgOiAwOwogfQpAQCAtODI3LDcgJiM0Mzs4MjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSkKIAlyZXR1cm4gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKG0pKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbHJ1dmVjX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIApAQCAtODQ0LDEzICYjNDM7ODQ0LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAgKgogICogUmV0dXJucyB0aGUgcGFyZW50IG1lbWNnLCBvciBOVUxMIGlmIHRoaXMgaXMgdGhlIHJvb3QuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIG1lbV9jZ3JvdXBfZnJvbV9jc3MobWVtY2ctJmd0O2Nzcy5wYXJlbnQpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCSAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpyb290KQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCSAgICAgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICpyb290KQogewogCWlmIChyb290ID09IG1lbWNnKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTg1OCw3ICYjNDM7ODU4LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfZGVzY2VuZGFudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKnRhc2tfbWVtY2c7CiAJYm9vbCBtYXRjaCA9IGZhbHNlOwpAQCAtODcxLDggJiM0Mzs4NzEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXJldHVybiBtYXRjaDsKIH0KIAotc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwotaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKTsKJiM0MztzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7aW5vX3QgcGFnZV9jZ3JvdXBfaW5vKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTsKIAogc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKQEAgLTg4NSw3ICYjNDM7ODg1LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LAogCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKTsKIAogc3RhdGljIGlubGluZQotdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKJiM0Mzt1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQllbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKQEAgLTkwMiw5ICYjNDM7OTAyLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaykKIAkJX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spOwogfQogCi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwomIzQzO3Vuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiAKLXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiYjNDM7dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKQEAgLTkxNyw3ICYjNDM7OTE3LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogdm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgaW50IHZhbCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJCWVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgaW50IHZhbCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CkBAIC05MzIsMTUgJiM0Mzs5MzIsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLAogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudCk7Ci11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTsKLXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSk7CiYjNDM7dW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpOwomIzQzO3Vuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpOwomIzQzO3Vuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSk7CiBib29sIG1lbWNnX3N0YXRfaXRlbV92YWxpZChpbnQgaWR4KTsKIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTsKLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7Ci11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCWVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTsKJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJCSAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpOwotdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpOwogCiB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKQEAgLTk1MSw3ICYjNDM7OTUyLDcgQEAgdm9pZCBtb2RfbHJ1dmVjX2ttZW1fc3RhdGUodm9pZCAqcCwgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpOwogdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LAogCQkJdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19mb2xpb19ldmVudHMoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCWVudW0gdm1fZXZlbnRfaXRlbSBpZHgsIHVuc2lnbmVkIGxvbmcgbnIpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpAQCAtMTAzNiw3ICYjNDM7MTAzNyw3IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCk7CiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKTsKICNlbHNlIC8qIENPTkZJR19NRU1DRyAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTEwNDUsNDcgJiM0MzsxMDQ2LDQ3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQogCiAjZGVmaW5lIHJvb3RfbWVtX2Nncm91cAkJKE5VTEwpCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZ19jaGVjayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYWdlX21lbWNnX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQogewogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19rbWVtKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KGNvbnN0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiB7CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMTEwLDggJiM0MzsxMTExLDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX21lbW9yeV9ldmVudF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCwKLQkJCQkJIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICpyb290LAomIzQzOwkJCQkJIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJIHVuc2lnbmVkIGxvbmcgKm1pbiwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgKmxvdywKIAkJCQkJIHVuc2lnbmVkIGxvbmcgKnVzYWdlKQpAQCAtMTEyNCwxOSAmIzQzOzExMjUsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCi0JCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCiYjNDM7CQkJCQkgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LAotCQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsCiYjNDM7CQkJCQljb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCwKLQkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LAomIzQzOwkJCQkJY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBmYWxzZTsKIH0KQEAgLTExNzUsMjUgJiM0MzsxMTc2LDI1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX21pZ3JhdGUoc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KQogewogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKm1lbV9jZ3JvdXBfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKm1lbV9jZ3JvdXBfbHJ1dmVjKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJICAgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpCiB7CiAJcmV0dXJuICZhbXA7cGdkYXQtJmd0O19fbHJ1dmVjOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlYyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTsKIAlyZXR1cm4gJmFtcDtwZ2RhdC0mZ3Q7X19scnV2ZWM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MzsJCWNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyMDgsNyAmIzQzOzEyMDksNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZCkKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTEyNDEsNyAmIzQzOzEyNDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7CiAKQEAgLTEyNTAsNyAmIzQzOzEyNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICZhbXA7cGdkYXQtJmd0O19fbHJ1dmVjOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTsKIApAQCAtMTI1OSw3ICYjNDM7MTI2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICZhbXA7cGdkYXQtJmd0O19fbHJ1dmVjOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQogewogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7CkBAIC0xMjg3LDcgJiM0MzsxMjg4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjk5LDcgJiM0MzsxMzAwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiAwOwogfQpAQCAtMTMxNCw3ICYjNDM7MTMxNSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9zZXEoc3RydWN0IHNlcV9maWxlICptKQogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xMzI1LDE5ICYjNDM7MTMyNiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogfQogCiBzdGF0aWMgaW5saW5lCi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAomIzQzO3Vuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLW1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7bWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiYjNDM7CQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiB9CiAKQEAgLTEzNjYsMTcgJiM0MzsxMzY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogewogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCQllbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeCkKJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKQogewogCXJldHVybiAwOwogfQpAQCAtMTM5MSwxOSAmIzQzOzEzOTMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkJICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpCiB7CiAJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZShscnV2ZWNfcGdkYXQobHJ1dmVjKSwgaWR4KTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCQkJCQkJZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpCiB7CiAJcmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkJCSAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIHsKIAlyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpOwpAQCAtMTQzMSw3ICYjNDM7MTQzMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogewogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQllbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LCB1bnNpZ25lZCBsb25nIG5yKQogewogfQpAQCAtMTQ2NSw3ICYjNDM7MTQ2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAKQEAgLTE1MjgsOCAmIzQzOzE1MzAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1dmVjX3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZwogfQogCiAvKiBUZXN0IHJlcXVpcmVzIGEgc3RhYmxlIGZvbGlvLSZndDttZW1jZyBiaW5kaW5nLCBzZWUgZm9saW9fbWVtY2coKSAqLwotc3RhdGljIGlubGluZSBib29sIGZvbGlvX21hdGNoZXNfbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8sCi0JCXN0cnVjdCBscnV2ZWMgKmxydXZlYykKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF0Y2hlc19scnV2ZWMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCWNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIHsKIAlyZXR1cm4gbHJ1dmVjX3BnZGF0KGxydXZlYykgPT0gZm9saW9fcGdkYXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgICAgbHJ1dmVjX21lbWNnKGxydXZlYykgPT0gZm9saW9fbWVtY2coZm9saW8pOwpAQCAtMTY0Miw3ICYjNDM7MTY0NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3NldF9zb2NrZXRfcHJlc3N1cmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZhbXA7bWVtY2ctJmd0O3NvY2tldF9wcmVzc3VyZV9zZXFsb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfZ2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7c3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAl1bnNpZ25lZCBpbnQgc2VxOwogCXU2NCB2YWw7CkBAIC0xNjYwLDcgJiM0MzsxNjYyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJV1JJVEVfT05DRShtZW1jZy0mZ3Q7c29ja2V0X3ByZXNzdXJlLCBqaWZmaWVzICYjNDM7IEhaKTsKIH0KIAotc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2dldF9zb2NrZXRfcHJlc3N1cmUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXJldHVybiBSRUFEX09OQ0UobWVtY2ctJmd0O3NvY2tldF9wcmVzc3VyZSk7CiB9CkBAIC0xNzczLDcgJiM0MzsxNzc1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQogICogQSBoZWxwZXIgZm9yIGFjY2Vzc2luZyBtZW1jZyYjMzk7cyBrbWVtX2lkLCB1c2VkIGZvciBnZXR0aW5nCiAgKiBjb3JyZXNwb25kaW5nIExSVSBsaXN0cy4KICAqLwotc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIG1lbWNnID8gbWVtY2ctJmd0O2ttZW1jZ19pZCA6IC0xOwogfQpAQCAtMTg0NSw3ICYjNDM7MTg0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKQogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJcmV0dXJuIC0xOwogfQpAQCAtMTg2MSw3ICYjNDM7MTg2Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9vYmpjZ19ldmVudHMoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLAogewogfQogCi1zdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0MztzdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4ODUsNyAmIzQzOzE4ODcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpOwogdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTsKIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTsKLWJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwomIzQzO2Jvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpCiB7CkBAIC0xODk5LDcgJiM0MzsxOTAxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLAogCQkJCQkgICAgIHNpemVfdCBzaXplKQogewogfQotc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAkvKiBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgZG8gbm90IGJsb2NrIHBhZ2VzIGdvaW5nIHRvIHRoZSBzd2FwcGluZyBkZXZpY2UgKi8KIAlyZXR1cm4gdHJ1ZTsKQEAgLTE5MTIsNyAmIzQzOzE5MTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCiBib29sIG1lbV9jZ3JvdXBfb29tX3N5bmNocm9uaXplKGJvb2wgd2FpdCk7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyZXR1cm4gcC0mZ3Q7bWVtY2dfaW5fb29tOwogfQpAQCAtMTkzMCw3ICYjNDM7MTkzMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKQogfQogCiAjZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA4NGUyMzdmMmMxN2RiLi44ZTFlM2E1MDc1N2EzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTE2NTcsNyAmIzQzOzE2NTcsNyBAQCBleHRlcm4gdm9pZCBpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbgogCiBleHRlcm4gdm9pZCBscnV2ZWNfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbHJ1dmVjX3BnZGF0KHN0cnVjdCBscnV2ZWMgKmxydXZlYykKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbHJ1dmVjX3BnZGF0KGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIHsKICNpZmRlZiBDT05GSUdfTUVNQ0cKIAlyZXR1cm4gbHJ1dmVjLSZndDtwZ2RhdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCmluZGV4IDA3YjdjYjEyMjQ5YzcuLjJiYWY3YTJiMjliMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaApAQCAtNjMsMTIgJiM0Mzs2MywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9jb3VudGVyX2luaXQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwKIAljb3VudGVyLSZndDt0cmFja19mYWlsY250ID0gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX2NvdW50ZXJfcmVhZChjb25zdCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQogewogCXJldHVybiBhdG9taWNfbG9uZ19yZWFkKCZhbXA7Y291bnRlci0mZ3Q7dXNhZ2UpOwogfQogCi1sb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7CiYjNDM7bG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogYm9vbCBwYWdlX2NvdW50ZXJfdHJ5X2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCBmYzI5MGUyOWU0YTllLi44NDNkNzA2ODBiOGUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtNTA1LDkgJiM0Mzs1MDUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcAogCV9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7CiB9CiAKLWxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7Ci1leHRlcm4gYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mztsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwomIzQzO2Jvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKQEAgLTUxOSwxNyAmIzQzOzUxOSwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLAogewogfQogCi1zdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlyZXR1cm4gUEFHRV9DT1VOVEVSX01BWDsKIH0KIAotc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJcmV0dXJuIHZtX3N3YXBfZnVsbCgpOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDViOWUwZWJkNDJhZTAuLmY1NmU5NTg5NDhhYzAgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTMzMSw3ICYjNDM7MzMxLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1jZ19icGZfZW5hYmxlZF9rZXkpOwogICogSWYgbWVtY2cgaXMgYm91bmQgdG8gYSB0cmFkaXRpb25hbCBoaWVyYXJjaHksIHRoZSBjc3Mgb2Ygcm9vdF9tZW1fY2dyb3VwCiAgKiBpcyByZXR1cm5lZC4KICAqLwotc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCkBAIC0zNTYsNyAmIzQzOzM1Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICogYWZ0ZXIgcGFnZV9jZ3JvdXBfaW5vKCkgcmV0dXJucywgc28gaXQgb25seSBzaG91bGQgYmUgdXNlZCBieSBjYWxsZXJzIHRoYXQKICAqIGRvIG5vdCBjYXJlIChzdWNoIGFzIHByb2NmcyBpbnRlcmZhY2VzKS4KICAqLwotaW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO2lub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJdW5zaWduZWQgbG9uZyBpbm8gPSAwOwpAQCAtNDg5LDcgJiM0Mzs0ODksNyBAQCBzdHJ1Y3QgbHJ1dmVjX3N0YXRzIHsKIAlsb25nIHN0YXRlX3BlbmRpbmdbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTsKIH07CiAKLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuOwogCWxvbmcgeDsKQEAgLTUzMCw3ICYjNDM7NTMwLDcgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KQogICogbW9ub3RvbmljYWxseS1pbmNyZW1lbnRlZCBldmVudCBjb3VudGVycyBhcmUgc3RvcmVkIGluCiAgKiBlbnVtIG5vZGVfc3RhdF9pdGVtLgogICovCi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkJCQkgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjsKQEAgLTU0Nyw3ICYjNDM7NTQ3LDcgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXJldHVybiAodW5zaWduZWQgbG9uZylSRUFEX09OQ0UocG4tJmd0O2xydXZlY19zdGF0cy0mZ3Q7c3RhdGVbaV0pOwogfQogCi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQkgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47CkBAIC03OTksNyAmIzQzOzc5OSw3IEBAIHN0YXRpYyB2b2lkIGZsdXNoX21lbWNnX3N0YXRzX2R3b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIAlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgJmFtcDtzdGF0c19mbHVzaF9kd29yaywgRkxVU0hfVElNRSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpCiYjNDM7dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeCkKIHsKIAlsb25nIHg7CiAJaW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpOwpAQCAtMTA5MSw3ICYjNDM7MTA5MSw3IEBAIHZvaWQgY291bnRfbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSB2bV9ldmVudF9pdGVtIGlkeCwKIAlwdXRfY3B1KCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KQomIzQzO3Vuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KQogewogCWludCBpID0gbWVtY2dfZXZlbnRzX2luZGV4KGV2ZW50KTsKIApAQCAtMTIyMCw3ICYjNDM7MTIyMCw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZCkKICAqCiAgKiBTZWUgZm9saW9fbWVtY2coKSBmb3IgZm9saW8tJmd0O29iamNnL21lbWNnIGJpbmRpbmcgcnVsZXMuCiAgKi8KLXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAKQEAgLTE0NDEsNyAmIzQzOzE0NDEsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAgKgogICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuCiAgKi8KLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CiAKQEAgLTE0NjksNyAmIzQzOzE0NjksNyBAQCBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzCiAgKiBkaXNhYmxlZCBhbmQgcmN1IHJlYWQgbG9jayBoZWxkLgogICovCi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CiAKQEAgLTE0OTgsNyAmIzQzOzE0OTgsNyBAQCBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbykKICAqIFJldHVybjogVGhlIGxydXZlYyB0aGlzIGZvbGlvIGlzIG9uIHdpdGggaXRzIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cwogICogZGlzYWJsZWQgYW5kIHJjdSByZWFkIGxvY2sgaGVsZC4KICAqLwotc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzO3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwpAQCAtMTcwOSw3ICYjNDM7MTcwOSw3IEBAIHN0YXRpYyBpbnQgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpbnQgaXRlbSkKIAl9CiB9CiAKLXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSkKJiM0Mzt1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pCiB7CiAJcmV0dXJuIG1lbWNnX3BhZ2Vfc3RhdGUobWVtY2csIGl0ZW0pICoKIAkJbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTsKQEAgLTE4MTIsNyAmIzQzOzE4MTIsOCBAQCBzdGF0aWMgdm9pZCBtZW1vcnlfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcykKICAqIE5PVEU6IEBtZW1jZyBhbmQgQHAmIzM5O3MgbWVtX2Nncm91cCBjYW4gYmUgZGlmZmVyZW50IHdoZW4gaGllcmFyY2h5IGlzCiAgKiBlbmFibGVkCiAgKi8KLXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKJiM0Mzt2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyY3VfcmVhZF9sb2NrKCk7CiAKQEAgLTE4NzcsNyAmIzQzOzE4NzgsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogLyoKICAqIFJldHVybiB0aGUgbWVtb3J5IChhbmQgc3dhcCwgaWYgY29uZmlndXJlZCkgbGltaXQgZm9yIGEgbWVtY2cuCiAgKi8KLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJdW5zaWduZWQgbG9uZyBtYXggPSBSRUFEX09OQ0UobWVtY2ctJmd0O21lbW9yeS5tYXgpOwogCkBAIC01ODM4LDcgJiM0Mzs1ODM5LDcgQEAgdm9pZCBfX21lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi1sb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO2xvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJbG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTsKIApAQCAtNTg1NCw3ICYjNDM7NTg1NSw3IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAgKgogICogUmV0dXJuOiBSZW1haW5pbmcgY2hhcmdlYWJsZSBwYWdlcyBpbiB0aGUgZm9saW8mIzM5O3MgbWVtY2cgaGllcmFyY2h5LgogICovCi1sb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7bG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlsb25nIG1hcmdpbjsKQEAgLTU4NzEsNyAmIzQzOzU4NzIsNyBAQCBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuIG1hcmdpbjsKIH0KIAotYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO2Jvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJYm9vbCByZXQgPSBmYWxzZTsKQEAgLTYxMzksNyAmIzQzOzYxNDAsNyBAQCB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSkKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mztib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCS8qIGlmIHpzd2FwIGlzIGRpc2FibGVkLCBkbyBub3QgYmxvY2sgcGFnZXMgZ29pbmcgdG8gdGhlIHN3YXBwaW5nIGRldmljZSAqLwogCWlmICghenN3YXBfaXNfZW5hYmxlZCgpKQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jb3VudGVyLmMgYi9tbS9wYWdlX2NvdW50ZXIuYwppbmRleCA0NTA1NDNmNGIzMThiLi44YzZmM2I0NTEzNmI0IDEwMDY0NAotLS0gYS9tbS9wYWdlX2NvdW50ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2NvdW50ZXIuYwpAQCAtNTMsNyAmIzQzOzUzLDcgQEAgc3RhdGljIHZvaWQgcHJvcGFnYXRlX3Byb3RlY3RlZF91c2FnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjLAogICogUmV0dXJuOiBUaGUgbWluaW11bSB2YWx1ZSBvZiBtYXggbWludXMgdXNhZ2UgYWNyb3NzIEBjb3VudGVyIGFuZCBhbGwgb2YKICAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuCiAgKi8KLWxvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQomIzQzO2xvbmcgcGFnZV9jb3VudGVyX21hcmdpbihjb25zdCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQogewogCWxvbmcgbWFyZ2luID0gUEFHRV9DT1VOVEVSX01BWDsKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jCmluZGV4IDFkYTRmZjQ4NGYwOTcuLjVmNzc1NmUzNzBmN2EgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lvLmMKQEAgLTI1NiwxMiAmIzQzOzI1NiwxMyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApCi1zdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmZvbGlvX21lbWNnX2Jsa2dfY3NzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpmb2xpb19tZW1jZ19ibGtnX2Nzcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXJldHVybiBjZ3JvdXBfZV9jc3MoZm9saW9fbWVtY2coZm9saW8pLSZndDtjc3MuY2dyb3VwLCAmYW1wO2lvX2NncnBfc3Vic3lzKTsKIH0KIAotc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKQomIzQzO3N0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pCiB7CiAJYm9vbCBjYW5fbWVyZ2UgPSB0cnVlOwogCkBAIC0yNzcsNyAmIzQzOzI3OCw4IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbykKIAlyZXR1cm4gY2FuX21lcmdlOwogfQogCi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJCQkJICBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CiAKQEAgLTI5NCwxMSAmIzQzOzI5NiwxMyBAQCBzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCWNzc19wdXQoY3NzKTsKIH0KICNlbHNlCi1zdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pCiYjNDM7c3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbykKIHsKIAlyZXR1cm4gdHJ1ZTsKIH0KLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sCiYjNDM7CQkJCQkgIGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICZhbXA7JmFtcDsgQ09ORklHX0JMS19DR1JPVVAgKi8KZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaAppbmRleCAwYjVkNTA3NzM5YmNiLi45NDcxNGQ5ZGQwMDNjIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC04Miw3ICYjNDM7ODIsNyBAQCBlbnVtIHN3YXBfY2x1c3Rlcl9mbGFncyB7CiAKIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKIAotc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogI2lmZGVmIENPTkZJR19NRU1DR19WMQogCWlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSAmYW1wOyZhbXA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE4OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzE5CgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogNDQyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBgY29uc3RgIFF1YWxpZmljYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIGFjcm9zcyBhIGJ1bmNoIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZGlnIGludG8gaXQsIHNlZSB3aGF04oCZcyBnb2luZyBvbiwgYW5kIGRldGVybWluZSBpZiBpdCYjMzk7cyBzb21ldGhpbmcgd2UgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQgaW4gdGVybXMgb2YgZnV6emluZy4gVGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGEgYnVuY2ggb2YgZnVuY3Rpb24gc2lnbmF0dXJlcyBhcmUgZ2V0dGluZyBgY29uc3RgIHF1YWxpZmllcnMgYWRkZWQgdG8gcG9pbnRlciBwYXJhbWV0ZXJzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgc3RydWN0IG9ial9jZ3JvdXBgLCBgc3RydWN0IGZvbGlvYCwgYHN0cnVjdCBtZW1fY2dyb3VwYCwgYHN0cnVjdCBwYWdlX2NvdW50ZXJgLCBldGMuIEl0JiMzOTtzIGFjcm9zcyB0aGUgYm9hcmQg4oCTIGBtZW1jb250cm9sLmhgLCBgbW16b25lLmhgLCBgcGFnZV9jb3VudGVyLmhgLCBgc3dhcC5oYCBhbmQgdGhlIGFzc29jaWF0ZWQgYC5jYCBmaWxlcy4KClNvLCB0aGUgZmlyc3QgdGhpbmcgSSBkaWQgd2FzIHRvIHRob3JvdWdobHkgY2hlY2sgZm9yIGFueSAqYWN0dWFsKiBjb2RlIGNoYW5nZXMuIEkgd2FzIGxvb2tpbmcgZm9yOgoKKiAgICoqTG9naWMgY2hhbmdlczoqKiBEaWQgYW55IGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgZ2V0IGFsdGVyZWQ/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGNvbmRpdGlvbmFsIGNoYW5nZXMsIHZhcmlhYmxlIHJlbmFtZXMsIG9yIGRlbGV0ZWQgbGluZXMgb2YgY29kZT8KKiAgICoqQWxnb3JpdGhtaWMgY2hhbmdlczoqKiBBbnkgdHdlYWtzIHRvIGhvdyBkYXRhIGlzIHByb2Nlc3NlZCwgdGhhdCBjb3VsZCBpbXBhY3QgYmVoYXZpb3I/CiogICAqKk5ldyBjaGVja3MvQXNzZXJ0aW9uczoqKiBXZXJlIGFueSBuZXcgc2FmZXR5IGNoZWNrcyBpbnRyb2R1Y2VkPwoqICAgKipDaGFuZ2VkIGNvbnN0YW50czoqKiBIYXMgdGhlICp2YWx1ZSogb2YgYW55IGNvbnN0YW50cyBiZWVuIGFsdGVyZWQsIHdoaWNoIGNvdWxkIHN1YnRseSBzaGlmdCBiZWhhdmlvcj8KKiAgICoqQWx0ZXJlZCBjb250cm9sIGZsb3c6KiogSXMgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIG9yIHRoZSBicmFuY2hpbmcgd2l0aGluIHRoZSBjb2RlLCBub3cgZGlmZmVyZW50PwoKSSBtZXRpY3Vsb3VzbHkgd2VudCB0aHJvdWdoIGV2ZXJ5IGxpbmUgb2YgdGhlIGRpZmYuIEkgY2hlY2tlZCBmb3IgYW55ICYjMzQ7c3VycHJpc2VzLiYjMzQ7IEFmdGVyIG15IGxpbmUtYnktbGluZSBkaWZmIHJldmlldywgaXQgYmVjYW1lIGNsZWFyOiBFdmVyeSBzaW5nbGUgY2hhbmdlIGlzIGp1c3QgdGhlIGFkZGl0aW9uIG9mIGBjb25zdGAgcXVhbGlmaWVycyB0byBwb2ludGVyIHBhcmFtZXRlcnMuIFNvLCBmb3IgZXhhbXBsZSwgYHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZ2AgYmVjb21lcyBgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnYC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogRG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8KCkkgcmUtcmVhZCB0aGUgZnV6emluZyBndWlkZWxpbmVzIGFuZCBJIHRob3VnaHQgYWJvdXQgdGhlIGNvcmUgcHJpbmNpcGxlOiB3ZSBmdXp6IHRvIGZpbmQgY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIGxhdGVudCBidWdzIGludHJvZHVjZWQgYnkgKnRoZSBwYXRjaCBzZXJpZXMqLgoKSSBoYWQgdG8gYXNrIG15c2VsZjogRG9lcyBhZGRpbmcgYGNvbnN0YCB0byBwYXJhbWV0ZXJzIGFsdGVyIHRoZSBjb21waWxlZCBDIGxvZ2ljIG9yIGRhdGEgc3RydWN0dXJlcywgYWxnb3JpdGhtIGZsb3dzIG9yIGFueSBsb2dpYz8gTm8sIGluIEMsIGBjb25zdGAgb24gcG9pbnRlciBhcmd1bWVudHMgZG9lcyAqbm90KiBjaGFuZ2UgdGhlIGNhbGxpbmcgY29udmVudGlvbi4gVGhlIGNvbXBpbGVkIG1hY2hpbmUgY29kZSBpcyBpZGVudGljYWwuIFRoZXJlJiMzOTtzIG5vIGxheW91dCBjaGFuZ2UsIG5vIGxvZ2ljIGNoYW5nZSwgbm8gbmV3IGFzc2VydGlvbnMsIG5vIHJlc3RydWN0dXJlZCBmbG93LgoKSXMgdGhlcmUgYW55IGNoYW5jZSBvZiByZWdyZXNzaW9uIG9yIGEgYnVnIGludHJvZHVjZWQgYnkgYGNvbnN0YCBxdWFsaWZpY2F0aW9uPyBJbiBDLCBgY29uc3RgIGRvZXMgKm5vdCogYWZmZWN0IHRoZSBBQkkuIFRoZSBjb21waWxlZCBpbnN0cnVjdGlvbnMgcmVtYWluIGNvbXBsZXRlbHkgaWRlbnRpY2FsLgoKQ2FuIGZ1enppbmcgZGlzY292ZXIgYW55IGNyYXNoLCByZWdyZXNzaW9uLCBsYXRlbnQgYnVnLCBvciB0cmlnZ2VyZWQgYXNzZXJ0aW9uIGluIGEgcHVyZSBgY29uc3RgIGFubm90YXRpb24gcGF0Y2g/IE5vLiBGdXp6aW5nIHRoZSBiaW5hcnkgZG9lcyBub3QgZ2VuZXJhdGUgbmV3IGJlaGF2aW9yIGlmIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGxpdGVyYWxseSBpZGVudGljYWwuCgpCYXNlZCBvbiB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgKm5vdCogYSBwYXRjaCB0aGF0IHJlcXVpcmVzIGZ1enppbmcuIFRoZXJlIGFyZSBubyBleGVjdXRhYmxlIGNvZGUgY2hhbmdlcy4gVGhlIGNoYW5nZSBpcyBwdXJlbHkgYWJvdXQgY29tcGlsZXItZW5mb3JjZWQgY29uc3QtY29ycmVjdG5lc3MuCgpJIHdlbnQgYmFjayBhbmQgZG91YmxlLWNoZWNrZWQgdG8gZW5zdXJlIHRoZXJlIHdlcmVuJiMzOTt0ICphbnkqIHN1YnRsZSBjaGFuZ2VzIGJleW9uZCB0aGUgYGNvbnN0YCBhZGRpdGlvbnMuIEkgc2VhcmNoZWQgZm9yIHBvc3NpYmxlIGFjY2lkZW50YWwgbW9kaWZpY2F0aW9ucy4gSSBsb29rZWQgZm9yICphbnkqIGxvZ2ljIGNoYW5nZXMuIEkgbG9va2VkIGZvciAqYW55KiBuZXcgYXNzZXJ0aW9ucy4gSSByZXZpZXdlZCBhbGwgbGluZXMgb2YgdGhlIGRpZmYuCgpJIGNhbiBkZWZpbml0aXZlbHkgc2F5IHRoYXQgdGhlIHBhdGNoIGNvbnNpc3RzICplbnRpcmVseSogb2YgYGNvbnN0YCBxdWFsaWZpZXIgYWRkaXRpb25zIHRvIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIGFuZCBub3RoaW5nIG1vcmUuIFRoZXJlIGlzIG5vIGNoYW5nZSB0byBleGVjdXRhYmxlIGNvZGUuIFRoaXMgaXMsIGluIGVmZmVjdCwgYSAmIzM0O25vLW9wJiMzNDsgcGF0Y2ggZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzICYjMzk7Y29uc3QmIzM5OyBxdWFsaWZpZXJzIHRvIHBvaW50ZXIgcGFyYW1ldGVycyBhY3Jvc3MgbWVtY29udHJvbCwgc3dhcCwgYW5kIHBhZ2UgY291bnRlciBoZWxwZXIgZnVuY3Rpb25zIHRvIGltcHJvdmUgY29uc3QtY29ycmVjdG5lc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZXhlY3V0YWJsZSBsb2dpYywgcnVudGltZSBhc3NlcnRpb25zLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGxheW91dHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzICYjMzk7Y29uc3QmIzM5OyBxdWFsaWZpZXJzIHRvIHBvaW50ZXIgcGFyYW1ldGVycyBhY3Jvc3MgbWVtY29udHJvbCwgc3dhcCwgYW5kIHBhZ2UgY291bnRlciBoZWxwZXIgZnVuY3Rpb25zIHRvIGltcHJvdmUgY29uc3QtY29ycmVjdG5lc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZXhlY3V0YWJsZSBsb2dpYywgcnVudGltZSBhc3NlcnRpb25zLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGxheW91dHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE4OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxODozNzo1Ni44MDQ0NDg0NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI0Mjk3NzE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgJ2NvbnN0JyBxdWFsaWZpZXJzIHRvIHBvaW50ZXIgcGFyYW1ldGVycyBhY3Jvc3MgbWVtY29udHJvbCwgc3dhcCwgYW5kIHBhZ2UgY291bnRlciBoZWxwZXIgZnVuY3Rpb25zIHRvIGltcHJvdmUgY29uc3QtY29ycmVjdG5lc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZXhlY3V0YWJsZSBsb2dpYywgcnVudGltZSBhc3NlcnRpb25zLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGxheW91dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxODozNzo1Ni44MDQ0NTM4ODdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDE1Njk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE3NGRiYzZmNDcwNjQ1NmNiNTJmNDgzOGZkZTY4NDVjZmMwYjc2ZGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAxODozNzo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggOTQ1ZDdkYmYxYmIyYy4uZTE4YjQ0OTY1ZDA1YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuQEAgLTM2Myw3ICszNjMsNyBAQCBlbnVtIG9iamV4dF9mbGFncyB7XFxuICAqXFxuICAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgbWVtY2cgd29uJ3QgYmUgcmVsZWFzZWQuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuIHtcXG4gXFx0bG9ja2RlcF9hc3NlcnRfb25jZShyY3VfcmVhZF9sb2NrX2hlbGQoKSB8fCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmNncm91cF9tdXRleCkpO1xcbiBcXHRyZXR1cm4gb2JqY2cgPyBSRUFEX09OQ0Uob2JqY2ctXFx1MDAzZW1lbWNnKSA6IE5VTEw7XFxuQEAgLTM3Nyw3ICszNzcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4gICogb3IgTlVMTC4gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGZvbGlvIGlzIGtub3duIHRvIGhhdmUgYVxcbiAgKiBwcm9wZXIgb2JqZWN0IGNncm91cCBwb2ludGVyLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGEgPSBmb2xpby1cXHUwMDNlbWVtY2dfZGF0YTtcXG4gXFxuQEAgLTQxNSw3ICs0MTUsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpmb2xpb19vYmpjZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiBOb3RlOiBUaGUgY2FsbGVyIHNob3VsZCBob2xkIGFuIHJjdSByZWFkIGxvY2sgb3IgY2dyb3VwX211dGV4IHRvIHByb3RlY3RcXG4gICogbWVtY2cgYXNzb2NpYXRlZCB3aXRoIGEgZm9saW8gZnJvbSBiZWluZyByZWxlYXNlZC5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbiBcXG5AQCAtNDI4LDcgKzQyOCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuICAqXFxuICAqIFJldHVybnMgdHJ1ZSBpZiBmb2xpbyBpcyBjaGFyZ2VkIHRvIGEgbWVtb3J5IGNncm91cCwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBmb2xpby1cXHUwMDNlbWVtY2dfZGF0YSAhPSAwO1xcbiB9XFxuQEAgLTQ0OCw3ICs0NDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiBBIGNhbGxlciBzaG91bGQgaG9sZCBhbiByY3UgcmVhZCBsb2NrIHRvIHByb3RlY3QgbWVtY2cgYXNzb2NpYXRlZCB3aXRoIGFcXG4gICogcGFnZSBmcm9tIGJlaW5nIHJlbGVhc2VkLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHQvKlxcbiBcXHQgKiBCZWNhdXNlIGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhIG1pZ2h0IGJlIGNoYW5nZWQgYXN5bmNocm9ub3VzbHlcXG5AQCAtNDY1LDE0ICs0NjUsMTQgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuIG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYWdlX21lbWNnX2NoZWNrKHN0cnVjdCBwYWdlICpwYWdlKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYWdlX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuIFxcdGlmIChQYWdlVGFpbChwYWdlKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdHJldHVybiBmb2xpb19tZW1jZ19jaGVjaygoc3RydWN0IGZvbGlvICopcGFnZSk7XFxuK1xcdHJldHVybiBmb2xpb19tZW1jZ19jaGVjaygoY29uc3Qgc3RydWN0IGZvbGlvICopcGFnZSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcbkBAIC00OTQsMTkgKzQ5NCwxOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX29iamNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYlxcbiAgKiB0aGF0IHRoZSBmb2xpbyBoYXMgYW4gYXNzb2NpYXRlZCBtZW1vcnkgY2dyb3VwLiBJdCdzIG5vdCBzYWZlIHRvIGNhbGxcXG4gICogdGhpcyBmdW5jdGlvbiBhZ2FpbnN0IHNvbWUgdHlwZXMgb2YgZm9saW9zLCBlLmcuIHNsYWIgZm9saW9zLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRWTV9CVUdfT05fUEdGTEFHUyhQYWdlVGFpbChcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpLCBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbiBcXHRWTV9CVUdfT05fRk9MSU8oZm9saW8tXFx1MDAzZW1lbWNnX2RhdGEgXFx1MDAyNiBNRU1DR19EQVRBX09CSkVYVFMsIGZvbGlvKTtcXG4gXFx0cmV0dXJuIGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhIFxcdTAwMjYgTUVNQ0dfREFUQV9LTUVNO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4rc3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4gXFx0cmV0dXJuIGZvbGlvX21lbWNnX2ttZW0ocGFnZV9mb2xpbyhwYWdlKSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gKG1lbWNnID09IHJvb3RfbWVtX2Nncm91cCk7XFxuIH1cXG5AQCAtNTIyLDcgKzUyMiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAgKiBhbmQgZG8gbm90IGhvbm91ciBzYy1cXHUwMDNlbWVtY2cgY2FuIHVzZSB0aGlzIHRvIGVhcmx5LXJldHVybiAwIGluIHBlci1tZW1jZ1xcbiAgKiBjb250ZXh0cy5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KGNvbnN0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0cmV0dXJuICFzYy1cXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVxcdTAwM2VtZW1jZyk7XFxuIH1cXG5AQCAtNTM3LDggKzUzNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2Rpc2FibGVkKHZvaWQpXFxuIFxcdHJldHVybiAhY2dyb3VwX3N1YnN5c19lbmFibGVkKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICptaW4sXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICpsb3csXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nICp1c2FnZSlcXG5AQCAtNTkyLDggKzU5Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXFxuIHZvaWQgbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIFRoZSByb290IG1lbWNnIGRvZXNuJ3QgYWNjb3VudCBjaGFyZ2VzLCBhbmQgZG9lc24ndCBzdXBwb3J0XFxuQEAgLTYwNCw4ICs2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbiBcXHRcXHRtZW1jZyA9PSB0YXJnZXQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQodGFyZ2V0LCBtZW1jZykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtNjE0LDggKzYxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbiBcXHRcXHRwYWdlX2NvdW50ZXJfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X21pbihjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfdW5wcm90ZWN0ZWQodGFyZ2V0LCBtZW1jZykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XFxuICAqIEBwZ2RhdCBjb21iaW5hdGlvbi4gVGhpcyBjYW4gYmUgdGhlIG5vZGUgbHJ1dmVjLCBpZiB0aGUgbWVtb3J5XFxuICAqIGNvbnRyb2xsZXIgaXMgZGlzYWJsZWQuXFxuICAqL1xcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKm1lbV9jZ3JvdXBfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICptZW1fY2dyb3VwX2xydXZlYyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG5AQCAtNzI5LDcgKzcyOSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiAgKiB0aGVpciBiaW5kaW5nIGlzIHN0YWJsZSBpZiB0aGUgcmV0dXJuZWQgbHJ1dmVjIG1hdGNoZXMgdGhlIG9uZSB0aGUgY2FsbGVyIGhhc1xcbiAgKiBsb2NrZWQuIFVzZWZ1bCBmb3IgbG9jayBiYXRjaGluZy5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZm9saW9fbWVtY2coZm9saW8pO1xcbiBcXG5AQCAtNzQzLDExICs3NDMsMTEgQEAgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbiBcXG4gc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKTtcXG4gXFxuLXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbitzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpmbGFncyk7XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuQEAgLTgwNiw3ICs4MDYsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfaXRlcl9icmVhayhzdHJ1Y3QgbWVtX2Nncm91cCAqLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKTtcXG4gdm9pZCBtZW1fY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHRcXHQgICBpbnQgKCopKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB2b2lkICopLCB2b2lkICphcmcpO1xcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTgxNSw3ICs4MTUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIH1cXG4gc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gbWVtY2cgPyBjZ3JvdXBfaWQobWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXApIDogMDtcXG4gfVxcbkBAIC04MjcsNyArODI3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIFxcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3MobSkpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG4gXFxuQEAgLTg0NCwxMyArODQ0LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuICAqXFxuICAqIFJldHVybnMgdGhlIHBhcmVudCBtZW1jZywgb3IgTlVMTCBpZiB0aGlzIGlzIHRoZSByb290LlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50X21lbV9jZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIG1lbV9jZ3JvdXBfZnJvbV9jc3MobWVtY2ctXFx1MDAzZWNzcy5wYXJlbnQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tXFx0XFx0XFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdClcXG4ge1xcbiBcXHRpZiAocm9vdCA9PSBtZW1jZylcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTg1OCw3ICs4NTgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG1tX21hdGNoX2Nncm91cChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKnRhc2tfbWVtY2c7XFxuIFxcdGJvb2wgbWF0Y2ggPSBmYWxzZTtcXG5AQCAtODcxLDggKzg3MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiBtYXRjaDtcXG4gfVxcbiBcXG4tc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi1pbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbitzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2lub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuQEAgLTg4NSw3ICs4ODUsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuIFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpO1xcbiBcXG4gc3RhdGljIGlubGluZVxcbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbit1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG5AQCAtOTAyLDkgKzkwMiw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuIFxcdFxcdF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF9tYXNrKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4rdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gXFxuLXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuK3ZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuIFxcbiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5AQCAtOTE3LDcgKzkxNyw3IEBAIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fZ3JvdXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gdm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHQgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgaW50IHZhbCk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG5AQCAtOTMyLDE1ICs5MzIsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpO1xcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcXG4rdW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpO1xcbit1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcXG4rdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcXG4gYm9vbCBtZW1jZ19zdGF0X2l0ZW1fdmFsaWQoaW50IGlkeCk7XFxuIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTtcXG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcXG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4rXFx0XFx0XFx0XFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xcbi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4rdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcXG4gXFxuIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbkBAIC05NTEsNyArOTUyLDcgQEAgdm9pZCBtb2RfbHJ1dmVjX2ttZW1fc3RhdGUodm9pZCAqcCwgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpO1xcbiB2b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsIHVuc2lnbmVkIGxvbmcgbnIpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbkBAIC0xMDM2LDcgKzEwMzcsNyBAQCB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfd29ya3F1ZXVlKHZvaWQpO1xcbiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKTtcXG4gI2Vsc2UgLyogQ09ORklHX01FTUNHICovXFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG5AQCAtMTA0NSw0NyArMTA0Niw0NyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpvYmpfY2dyb3VwX21lbWNnKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4gXFxuICNkZWZpbmUgcm9vdF9tZW1fY2dyb3VwXFx0XFx0KE5VTEwpXFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFnZV9tZW1jZ19jaGVjayhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFnZV9tZW1jZ19jaGVjayhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfa21lbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIFBhZ2VNZW1jZ0ttZW0oc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuQEAgLTExMTAsOCArMTExMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19tZW1vcnlfZXZlbnRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcXG4rXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKm1pbixcXG4gXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKmxvdyxcXG4gXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgKnVzYWdlKVxcbkBAIC0xMTI0LDE5ICsxMTI1LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxcbiB7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbWluKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbWluKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5AQCAtMTE3NSwyNSArMTE3NiwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKm1lbV9jZ3JvdXBfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICptZW1fY2dyb3VwX2xydXZlYyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbiB7XFxuIFxcdHJldHVybiBcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlYyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlYyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcdHJldHVybiBcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudF9tZW1fY2dyb3VwKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG1tX21hdGNoX2Nncm91cChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tXFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5AQCAtMTIwOCw3ICsxMjA5LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbkBAIC0xMjQxLDcgKzEyNDIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcbkBAIC0xMjUwLDcgKzEyNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiBcXHUwMDI2cGdkYXQtXFx1MDAzZV9fbHJ1dmVjO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcbkBAIC0xMjU5LDcgKzEyNjAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gXFx1MDAyNnBnZGF0LVxcdTAwM2VfX2xydXZlYztcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nICpmbGFnc3ApXFxuIHtcXG4gXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcXG5AQCAtMTI4Nyw3ICsxMjg4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTI5OSw3ICsxMzAwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTMxNCw3ICsxMzE1LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3NlcShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTEzMjUsMTkgKzEzMjYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZVxcbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbit1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxcbi1tZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbittZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHtcXG4gfVxcbiBcXG5AQCAtMTM2NiwxNyArMTM2OCwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxcbiB7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTM5MSwxOSArMTM5MywxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuIFxcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuIHtcXG4gXFx0cmV0dXJuIG5vZGVfcGFnZV9zdGF0ZV9tb25vdG9uaWMobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4ge1xcbiBcXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xcbkBAIC0xNDMxLDcgKzE0MzMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19mb2xpb19ldmVudHMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0ZW51bSB2bV9ldmVudF9pdGVtIGlkeCwgdW5zaWduZWQgbG9uZyBucilcXG4ge1xcbiB9XFxuQEAgLTE0NjUsNyArMTQ2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2ZsdXNoX3dvcmtxdWV1ZSh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcbkBAIC0xNTI4LDggKzE1MzAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1dmVjX3VubG9ja19pcnFyZXN0b3JlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZ1xcbiB9XFxuIFxcbiAvKiBUZXN0IHJlcXVpcmVzIGEgc3RhYmxlIGZvbGlvLVxcdTAwM2VtZW1jZyBiaW5kaW5nLCBzZWUgZm9saW9fbWVtY2coKSAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF0Y2hlc19scnV2ZWMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF0Y2hlc19scnV2ZWMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiB7XFxuIFxcdHJldHVybiBscnV2ZWNfcGdkYXQobHJ1dmVjKSA9PSBmb2xpb19wZ2RhdChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICAgIGxydXZlY19tZW1jZyhscnV2ZWMpID09IGZvbGlvX21lbWNnKGZvbGlvKTtcXG5AQCAtMTY0Miw3ICsxNjQ0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdHdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtZW1jZy1cXHUwMDNlc29ja2V0X3ByZXNzdXJlX3NlcWxvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgc2VxO1xcbiBcXHR1NjQgdmFsO1xcbkBAIC0xNjYwLDcgKzE2NjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gXFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlc29ja2V0X3ByZXNzdXJlLCBqaWZmaWVzICsgSFopO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2dldF9zb2NrZXRfcHJlc3N1cmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2dldF9zb2NrZXRfcHJlc3N1cmUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHJldHVybiBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXNvY2tldF9wcmVzc3VyZSk7XFxuIH1cXG5AQCAtMTc3Myw3ICsxNzc1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxcbiAgKiBBIGhlbHBlciBmb3IgYWNjZXNzaW5nIG1lbWNnJ3Mga21lbV9pZCwgdXNlZCBmb3IgZ2V0dGluZ1xcbiAgKiBjb3JyZXNwb25kaW5nIExSVSBsaXN0cy5cXG4gICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gbWVtY2cgPyBtZW1jZy1cXHUwMDNla21lbWNnX2lkIDogLTE7XFxuIH1cXG5AQCAtMTg0NSw3ICsxODQ3LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2ttZW1fb25saW5lKHZvaWQpXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHJldHVybiAtMTtcXG4gfVxcbkBAIC0xODYxLDcgKzE4NjMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfb2JqY2dfZXZlbnRzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4rc3RhdGljIGlubGluZSBpbm9fdCBwYWdlX2Nncm91cF9pbm8oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTg4NSw3ICsxODg3LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpO1xcbiB2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xcbiB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSk7XFxuLWJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbitib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4ge1xcbkBAIC0xODk5LDcgKzE5MDEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IHNpemUpXFxuIHtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHQvKiBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgZG8gbm90IGJsb2NrIHBhZ2VzIGdvaW5nIHRvIHRoZSBzd2FwcGluZyBkZXZpY2UgKi9cXG4gXFx0cmV0dXJuIHRydWU7XFxuQEAgLTE5MTIsNyArMTkxNCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbiBib29sIG1lbV9jZ3JvdXBfb29tX3N5bmNocm9uaXplKGJvb2wgd2FpdCk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiB7XFxuIFxcdHJldHVybiBwLVxcdTAwM2VtZW1jZ19pbl9vb207XFxuIH1cXG5AQCAtMTkzMCw3ICsxOTMyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXFxuIH1cXG4gXFxuICNlbHNlIC8qIENPTkZJR19NRU1DR19WMSAqL1xcbi1zdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDg0ZTIzN2YyYzE3ZGIuLjhlMWUzYTUwNzU3YTMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtMTY1Nyw3ICsxNjU3LDcgQEAgZXh0ZXJuIHZvaWQgaW5pdF9jdXJyZW50bHlfZW1wdHlfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm5cXG4gXFxuIGV4dGVybiB2b2lkIGxydXZlY19pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbHJ1dmVjX3BnZGF0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcGdsaXN0X2RhdGEgKmxydXZlY19wZ2RhdChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuIHtcXG4gI2lmZGVmIENPTkZJR19NRU1DR1xcbiBcXHRyZXR1cm4gbHJ1dmVjLVxcdTAwM2VwZ2RhdDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcXG5pbmRleCAwN2I3Y2IxMjI0OWM3Li4yYmFmN2EyYjI5YjJlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oXFxuQEAgLTYzLDEyICs2MywxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9jb3VudGVyX2luaXQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcixcXG4gXFx0Y291bnRlci1cXHUwMDNldHJhY2tfZmFpbGNudCA9IGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGFnZV9jb3VudGVyX3JlYWQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuIHtcXG4gXFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNmNvdW50ZXItXFx1MDAzZXVzYWdlKTtcXG4gfVxcbiBcXG4tbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpO1xcbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oY29uc3Qgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XFxuIHZvaWQgcGFnZV9jb3VudGVyX2NhbmNlbChzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gdm9pZCBwYWdlX2NvdW50ZXJfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCBmYzI5MGUyOWU0YTllLi44NDNkNzA2ODBiOGUwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtNTA1LDkgKzUwNSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wXFxuIFxcdF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKGlkLCBucl9wYWdlcyk7XFxuIH1cXG4gXFxuLWxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLWV4dGVybiBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbitib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3RyeV9jaGFyZ2Vfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuQEAgLTUxOSwxNyArNTE5LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsXFxuIHtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiB2bV9zd2FwX2Z1bGwoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCA1YjllMGViZDQyYWUwLi5mNTZlOTU4OTQ4YWMwIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0zMzEsNyArMzMxLDcgQEAgRVhQT1JUX1NZTUJPTChtZW1jZ19icGZfZW5hYmxlZF9rZXkpO1xcbiAgKiBJZiBtZW1jZyBpcyBib3VuZCB0byBhIHRyYWRpdGlvbmFsIGhpZXJhcmNoeSwgdGhlIGNzcyBvZiByb290X21lbV9jZ3JvdXBcXG4gICogaXMgcmV0dXJuZWQuXFxuICAqL1xcbi1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmdldF9tZW1fY2dyb3VwX2Nzc19mcm9tX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXG5AQCAtMzU2LDcgKzM1Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiBhZnRlciBwYWdlX2Nncm91cF9pbm8oKSByZXR1cm5zLCBzbyBpdCBvbmx5IHNob3VsZCBiZSB1c2VkIGJ5IGNhbGxlcnMgdGhhdFxcbiAgKiBkbyBub3QgY2FyZSAoc3VjaCBhcyBwcm9jZnMgaW50ZXJmYWNlcykuXFxuICAqL1xcbi1pbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK2lub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5vID0gMDtcXG5AQCAtNDg5LDcgKzQ4OSw3IEBAIHN0cnVjdCBscnV2ZWNfc3RhdHMge1xcbiBcXHRsb25nIHN0YXRlX3BlbmRpbmdbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcXG4gfTtcXG4gXFxuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcXG4rdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcXG4gXFx0bG9uZyB4O1xcbkBAIC01MzAsNyArNTMwLDcgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiAgKiBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGV2ZW50IGNvdW50ZXJzIGFyZSBzdG9yZWQgaW5cXG4gICogZW51bSBub2RlX3N0YXRfaXRlbS5cXG4gICovXFxuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4rdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxcbiB7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjtcXG5AQCAtNTQ3LDcgKzU0Nyw3IEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKVJFQURfT05DRShwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzLVxcdTAwM2VzdGF0ZVtpXSk7XFxuIH1cXG4gXFxuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xcbkBAIC03OTksNyArNzk5LDcgQEAgc3RhdGljIHZvaWQgZmx1c2hfbWVtY2dfc3RhdHNfZHdvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbiBcXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXFx1MDAyNnN0YXRzX2ZsdXNoX2R3b3JrLCBGTFVTSF9USU1FKTtcXG4gfVxcbiBcXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4rdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG4ge1xcbiBcXHRsb25nIHg7XFxuIFxcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcXG5AQCAtMTA5MSw3ICsxMDkxLDcgQEAgdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LFxcbiBcXHRwdXRfY3B1KCk7XFxuIH1cXG4gXFxuLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxcbit1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50cyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4ge1xcbiBcXHRpbnQgaSA9IG1lbWNnX2V2ZW50c19pbmRleChldmVudCk7XFxuIFxcbkBAIC0xMjIwLDcgKzEyMjAsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpXFxuICAqXFxuICAqIFNlZSBmb2xpb19tZW1jZygpIGZvciBmb2xpby1cXHUwMDNlb2JqY2cvbWVtY2cgYmluZGluZyBydWxlcy5cXG4gICovXFxuLXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXG5AQCAtMTQ0MSw3ICsxNDQxLDcgQEAgdm9pZCBtZW1fY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiAgKlxcbiAgKiBSZXR1cm46IFRoZSBscnV2ZWMgdGhpcyBmb2xpbyBpcyBvbiB3aXRoIGl0cyBsb2NrIGhlbGQgYW5kIHJjdSByZWFkIGxvY2sgaGVsZC5cXG4gICovXFxuLXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbiBcXG5AQCAtMTQ2OSw3ICsxNDY5LDcgQEAgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4gICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzXFxuICAqIGRpc2FibGVkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuXFxuICAqL1xcbi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcbiBcXG5AQCAtMTQ5OCw3ICsxNDk4LDcgQEAgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuICAqIFJldHVybjogVGhlIGxydXZlYyB0aGlzIGZvbGlvIGlzIG9uIHdpdGggaXRzIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0c1xcbiAgKiBkaXNhYmxlZCBhbmQgcmN1IHJlYWQgbG9jayBoZWxkLlxcbiAgKi9cXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5AQCAtMTcwOSw3ICsxNzA5LDcgQEAgc3RhdGljIGludCBtZW1jZ19wYWdlX3N0YXRlX291dHB1dF91bml0KGludCBpdGVtKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4rdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbiB7XFxuIFxcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlKG1lbWNnLCBpdGVtKSAqXFxuIFxcdFxcdG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0X3VuaXQoaXRlbSk7XFxuQEAgLTE4MTIsNyArMTgxMiw4IEBAIHN0YXRpYyB2b2lkIG1lbW9yeV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbiAgKiBOT1RFOiBAbWVtY2cgYW5kIEBwJ3MgbWVtX2Nncm91cCBjYW4gYmUgZGlmZmVyZW50IHdoZW4gaGllcmFyY2h5IGlzXFxuICAqIGVuYWJsZWRcXG4gICovXFxuLXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4rdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHtcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXG5AQCAtMTg3Nyw3ICsxODc4LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gLypcXG4gICogUmV0dXJuIHRoZSBtZW1vcnkgKGFuZCBzd2FwLCBpZiBjb25maWd1cmVkKSBsaW1pdCBmb3IgYSBtZW1jZy5cXG4gICovXFxuLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbWF4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2VtZW1vcnkubWF4KTtcXG4gXFxuQEAgLTU4MzgsNyArNTgzOSw3IEBAIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAodW5zaWduZWQgc2hvcnQgaWQsIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuLWxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuK2xvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0bG9uZyBucl9zd2FwX3BhZ2VzID0gZ2V0X25yX3N3YXBfcGFnZXMoKTtcXG4gXFxuQEAgLTU4NTQsNyArNTg1NSw3IEBAIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuICAqXFxuICAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJ3MgbWVtY2cgaGllcmFyY2h5LlxcbiAgKi9cXG4tbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiBcXHRsb25nIG1hcmdpbjtcXG5AQCAtNTg3MSw3ICs1ODcyLDcgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gbWFyZ2luO1xcbiB9XFxuIFxcbi1ib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK2Jvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuQEAgLTYxMzksNyArNjE0MCw3IEBAIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4tYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4rYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHQvKiBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgZG8gbm90IGJsb2NrIHBhZ2VzIGdvaW5nIHRvIHRoZSBzd2FwcGluZyBkZXZpY2UgKi9cXG4gXFx0aWYgKCF6c3dhcF9pc19lbmFibGVkKCkpXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5pbmRleCA0NTA1NDNmNGIzMThiLi44YzZmM2I0NTEzNmI0IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfY291bnRlci5jXFxuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcXG5AQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcHJvdGVjdGVkX3VzYWdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmMsXFxuICAqIFJldHVybjogVGhlIG1pbmltdW0gdmFsdWUgb2YgbWF4IG1pbnVzIHVzYWdlIGFjcm9zcyBAY291bnRlciBhbmQgYWxsIG9mXFxuICAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuXFxuICAqL1xcbi1sb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcilcXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXFxuIHtcXG4gXFx0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jXFxuaW5kZXggMWRhNGZmNDg0ZjA5Ny4uNWY3NzU2ZTM3MGY3YSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2lvLmNcXG4rKysgYi9tbS9wYWdlX2lvLmNcXG5AQCAtMjU2LDEyICsyNTYsMTMgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIH1cXG4gXFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQkxLX0NHUk9VUClcXG4tc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpmb2xpb19tZW1jZ19ibGtnX2NzcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmZvbGlvX21lbWNnX2Jsa2dfY3NzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIGNncm91cF9lX2Nzcyhmb2xpb19tZW1jZyhmb2xpbyktXFx1MDAzZWNzcy5jZ3JvdXAsIFxcdTAwMjZpb19jZ3JwX3N1YnN5cyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcXG4rc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2UoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcXG4ge1xcbiBcXHRib29sIGNhbl9tZXJnZSA9IHRydWU7XFxuIFxcbkBAIC0yNzcsNyArMjc4LDggQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbiBcXHRyZXR1cm4gY2FuX21lcmdlO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7XFxuIFxcbkBAIC0yOTQsMTEgKzI5NiwxMyBAQCBzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdGNzc19wdXQoY3NzKTtcXG4gfVxcbiAjZWxzZVxcbi1zdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXFxuK3N0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXFxuIHtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4tc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiB9XFxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uOTQ3MTRkOWRkMDAzYyAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmhcXG4rKysgYi9tbS9zd2FwLmhcXG5AQCAtODIsNyArODIsNyBAQCBlbnVtIHN3YXBfY2x1c3Rlcl9mbGFncyB7XFxuIFxcbiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbitzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gXFx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE4OjM3OjU3LjIzOTM5NDI1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTY4MDgwMTg1NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgJ2NvbnN0JyBxdWFsaWZpZXJzIHRvIHBvaW50ZXIgcGFyYW1ldGVycyBhY3Jvc3MgbWVtY29udHJvbCwgc3dhcCwgYW5kIHBhZ2UgY291bnRlciBoZWxwZXIgZnVuY3Rpb25zIHRvIGltcHJvdmUgY29uc3QtY29ycmVjdG5lc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZXhlY3V0YWJsZSBsb2dpYywgcnVudGltZSBhc3NlcnRpb25zLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGxheW91dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3NGRiYzZmNDcwNjQ1NmNiNTJmNDgzOGZkZTY4NDVjZmMwYjc2ZGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE4OjM3OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggOTQ1ZDdkYmYxYmIyYy4uZTE4YjQ0OTY1ZDA1YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTM2Myw3ICszNjMsNyBAQCBlbnVtIG9iamV4dF9mbGFncyB7XG4gICpcbiAgKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIG1lbWNnIHdvbid0IGJlIHJlbGVhc2VkLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X29uY2UocmN1X3JlYWRfbG9ja19oZWxkKCkgfHwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmNncm91cF9tdXRleCkpO1xuIFx0cmV0dXJuIG9iamNnID8gUkVBRF9PTkNFKG9iamNnLVx1MDAzZW1lbWNnKSA6IE5VTEw7XG5AQCAtMzc3LDcgKzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm9ial9jZ3JvdXBfbWVtY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuICAqIG9yIE5VTEwuIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBmb2xpbyBpcyBrbm93biB0byBoYXZlIGFcbiAgKiBwcm9wZXIgb2JqZWN0IGNncm91cCBwb2ludGVyLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKmZvbGlvX29iamNnKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZm9saW9fb2JqY2coY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGEgPSBmb2xpby1cdTAwM2VtZW1jZ19kYXRhO1xuIFxuQEAgLTQxNSw3ICs0MTUsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpmb2xpb19vYmpjZyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIE5vdGU6IFRoZSBjYWxsZXIgc2hvdWxkIGhvbGQgYW4gcmN1IHJlYWQgbG9jayBvciBjZ3JvdXBfbXV0ZXggdG8gcHJvdGVjdFxuICAqIG1lbWNnIGFzc29jaWF0ZWQgd2l0aCBhIGZvbGlvIGZyb20gYmVpbmcgcmVsZWFzZWQuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcbiBcbkBAIC00MjgsNyArNDI4LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKlxuICAqIFJldHVybnMgdHJ1ZSBpZiBmb2xpbyBpcyBjaGFyZ2VkIHRvIGEgbWVtb3J5IGNncm91cCwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICovXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2NoYXJnZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBmb2xpby1cdTAwM2VtZW1jZ19kYXRhICE9IDA7XG4gfVxuQEAgLTQ0OCw3ICs0NDgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIEEgY2FsbGVyIHNob3VsZCBob2xkIGFuIHJjdSByZWFkIGxvY2sgdG8gcHJvdGVjdCBtZW1jZyBhc3NvY2lhdGVkIHdpdGggYVxuICAqIHBhZ2UgZnJvbSBiZWluZyByZWxlYXNlZC5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZ19jaGVjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0LypcbiBcdCAqIEJlY2F1c2UgZm9saW8tXHUwMDNlbWVtY2dfZGF0YSBtaWdodCBiZSBjaGFuZ2VkIGFzeW5jaHJvbm91c2x5XG5AQCAtNDY1LDE0ICs0NjUsMTQgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2dfY2hlY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFnZV9tZW1jZ19jaGVjayhzdHJ1Y3QgcGFnZSAqcGFnZSlcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYWdlX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdGlmIChQYWdlVGFpbChwYWdlKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHRyZXR1cm4gZm9saW9fbWVtY2dfY2hlY2soKHN0cnVjdCBmb2xpbyAqKXBhZ2UpO1xuK1x0cmV0dXJuIGZvbGlvX21lbWNnX2NoZWNrKChjb25zdCBzdHJ1Y3QgZm9saW8gKilwYWdlKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFxuQEAgLTQ5NCwxOSArNDk0LDE5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fb2JqY2coc3RydWN0IG9ial9jZ3JvdXAgKm9iXG4gICogdGhhdCB0aGUgZm9saW8gaGFzIGFuIGFzc29jaWF0ZWQgbWVtb3J5IGNncm91cC4gSXQncyBub3Qgc2FmZSB0byBjYWxsXG4gICogdGhpcyBmdW5jdGlvbiBhZ2FpbnN0IHNvbWUgdHlwZXMgb2YgZm9saW9zLCBlLmcuIHNsYWIgZm9saW9zLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19rbWVtKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fUEdGTEFHUyhQYWdlVGFpbChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKSwgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gXHRWTV9CVUdfT05fRk9MSU8oZm9saW8tXHUwMDNlbWVtY2dfZGF0YSBcdTAwMjYgTUVNQ0dfREFUQV9PQkpFWFRTLCBmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW8tXHUwMDNlbWVtY2dfZGF0YSBcdTAwMjYgTUVNQ0dfREFUQV9LTUVNO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShzdHJ1Y3QgcGFnZSAqcGFnZSlcbitzdGF0aWMgaW5saW5lIGJvb2wgUGFnZU1lbWNnS21lbShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gZm9saW9fbWVtY2dfa21lbShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIChtZW1jZyA9PSByb290X21lbV9jZ3JvdXApO1xuIH1cbkBAIC01MjIsNyArNTIyLDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICogYW5kIGRvIG5vdCBob25vdXIgc2MtXHUwMDNlbWVtY2cgY2FuIHVzZSB0aGlzIHRvIGVhcmx5LXJldHVybiAwIGluIHBlci1tZW1jZ1xuICAqIGNvbnRleHRzLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QoY29uc3Qgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRyZXR1cm4gIXNjLVx1MDAzZW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy1cdTAwM2VtZW1jZyk7XG4gfVxuQEAgLTUzNyw4ICs1MzcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9kaXNhYmxlZCh2b2lkKVxuIFx0cmV0dXJuICFjZ3JvdXBfc3Vic3lzX2VuYWJsZWQobWVtb3J5X2NncnBfc3Vic3lzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbi1cdFx0XHRcdFx0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9wcm90ZWN0aW9uKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuK1x0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqbWluLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqbG93LFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyAqdXNhZ2UpXG5AQCAtNTkyLDggKzU5Miw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4gdm9pZCBtZW1fY2dyb3VwX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBtZW1fY2dyb3VwICpyb290LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3VucHJvdGVjdGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4rXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdC8qXG4gXHQgKiBUaGUgcm9vdCBtZW1jZyBkb2Vzbid0IGFjY291bnQgY2hhcmdlcywgYW5kIGRvZXNuJ3Qgc3VwcG9ydFxuQEAgLTYwNCw4ICs2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuIFx0XHRtZW1jZyA9PSB0YXJnZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2JlbG93X2xvdyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4rXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpZiAobWVtX2Nncm91cF91bnByb3RlY3RlZCh0YXJnZXQsIG1lbWNnKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTYxNCw4ICs2MTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbiBcdFx0cGFnZV9jb3VudGVyX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5KTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbWluKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbitcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGlmIChtZW1fY2dyb3VwX3VucHJvdGVjdGVkKHRhcmdldCwgbWVtY2cpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gICogQHBnZGF0IGNvbWJpbmF0aW9uLiBUaGlzIGNhbiBiZSB0aGUgbm9kZSBscnV2ZWMsIGlmIHRoZSBtZW1vcnlcbiAgKiBjb250cm9sbGVyIGlzIGRpc2FibGVkLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG5AQCAtNzI5LDcgKzcyOSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuICAqIHRoZWlyIGJpbmRpbmcgaXMgc3RhYmxlIGlmIHRoZSByZXR1cm5lZCBscnV2ZWMgbWF0Y2hlcyB0aGUgb25lIHRoZSBjYWxsZXIgaGFzXG4gICogbG9ja2VkLiBVc2VmdWwgZm9yIGxvY2sgYmF0Y2hpbmcuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWMoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlYyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbiBcbkBAIC03NDMsMTEgKzc0MywxMSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4gXG4gc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCh2b2lkKTtcbiBcbi1zdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBcbi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqZmxhZ3MpO1xuIFxuIHN0YXRpYyBpbmxpbmVcbkBAIC04MDYsNyArODA2LDcgQEAgdm9pZCBtZW1fY2dyb3VwX2l0ZXJfYnJlYWsoc3RydWN0IG1lbV9jZ3JvdXAgKiwgc3RydWN0IG1lbV9jZ3JvdXAgKik7XG4gdm9pZCBtZW1fY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdCAgIGludCAoKikoc3RydWN0IHRhc2tfc3RydWN0ICosIHZvaWQgKiksIHZvaWQgKmFyZyk7XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC04MTUsNyArODE1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBtZW1fY2dyb3VwX3ByaXZhdGVfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIH1cbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ByaXZhdGVfaWQodW5zaWduZWQgc2hvcnQgaWQpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBtZW1jZyA/IGNncm91cF9pZChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwKSA6IDA7XG4gfVxuQEAgLTgyNyw3ICs4MjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3MobSkpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuQEAgLTg0NCwxMyArODQ0LDEzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4gICpcbiAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgbWVtY2csIG9yIE5VTEwgaWYgdGhpcyBpcyB0aGUgcm9vdC5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50X21lbV9jZ3JvdXAoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBtZW1fY2dyb3VwX2Zyb21fY3NzKG1lbWNnLVx1MDAzZWNzcy5wYXJlbnQpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdClcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19kZXNjZW5kYW50KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdClcbiB7XG4gXHRpZiAocm9vdCA9PSBtZW1jZylcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtODU4LDcgKzg1OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX2Rlc2NlbmRhbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICp0YXNrX21lbWNnO1xuIFx0Ym9vbCBtYXRjaCA9IGZhbHNlO1xuQEAgLTg3MSw4ICs4NzEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIG1hdGNoO1xuIH1cbiBcbi1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4taW5vX3QgcGFnZV9jZ3JvdXBfaW5vKHN0cnVjdCBwYWdlICpwYWdlKTtcbitzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4raW5vX3QgcGFnZV9jZ3JvdXBfaW5vKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKTtcbiBcbiBzdGF0aWMgaW5saW5lXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbit1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbkBAIC05MDIsOSArOTAyLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbiBcdFx0X19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX21hc2spO1xuIH1cbiBcbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuK3Vuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gXG4tdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbit2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbiBcbiB2b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC05MTcsNyArOTE3LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9ncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0ICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGludCB2YWwpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbitzdGF0aWMgaW5saW5lIHZvaWQgbW9kX21lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0XHRcdGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgaW50IHZhbClcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG5AQCAtOTMyLDE1ICs5MzIsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuK3Vuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcbit1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcbit1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuIGJvb2wgbWVtY2dfc3RhdF9pdGVtX3ZhbGlkKGludCBpZHgpO1xuIGJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KTtcbi11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpO1xuIFxuIHZvaWQgbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuQEAgLTk1MSw3ICs5NTIsNyBAQCB2b2lkIG1vZF9scnV2ZWNfa21lbV9zdGF0ZSh2b2lkICpwLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgaW50IHZhbCk7XG4gdm9pZCBjb3VudF9tZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgY291bnQpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9tZW1jZ19mb2xpb19ldmVudHMoc3RydWN0IGZvbGlvICpmb2xpbyxcbitzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsIHVuc2lnbmVkIGxvbmcgbnIpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuQEAgLTEwMzYsNyArMTAzNyw3IEBAIHZvaWQgbWVtX2Nncm91cF9mbHVzaF93b3JrcXVldWUodm9pZCk7XG4gZXh0ZXJuIGludCBtZW1fY2dyb3VwX2luaXQodm9pZCk7XG4gI2Vsc2UgLyogQ09ORklHX01FTUNHICovXG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTEwNDUsNDcgKzEwNDYsNDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqb2JqX2Nncm91cF9tZW1jZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4gXG4gI2RlZmluZSByb290X21lbV9jZ3JvdXBcdFx0KE5VTEwpXG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZm9saW9fbWVtY2coc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWVtY2dfY2hhcmdlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19jaGFyZ2VkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpmb2xpb19tZW1jZ19jaGVjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmZvbGlvX21lbWNnX2NoZWNrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKnBhZ2VfbWVtY2dfY2hlY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFnZV9tZW1jZ19jaGVjayhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9vYmpjZyhjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tZW1jZ19rbWVtKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX21lbWNnX2ttZW0oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKHN0cnVjdCBwYWdlICpwYWdlKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBQYWdlTWVtY2dLbWVtKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QoY29uc3Qgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTExMCw4ICsxMTExLDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnX21lbW9yeV9ldmVudF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHJvdGVjdGlvbihjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdCxcbitcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKm1pbixcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKmxvdyxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgKnVzYWdlKVxuQEAgLTExMjQsMTkgKzExMjUsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF91bnByb3RlY3RlZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0LFxuK1x0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbG93KHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19sb3coY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbitcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfYmVsb3dfbWluKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXQsXG4tXHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9iZWxvd19taW4oY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldCxcbitcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5AQCAtMTE3NSwyNSArMTE3NiwyNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9taWdyYXRlKHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqbWVtX2Nncm91cF9scnV2ZWMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbiB7XG4gXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0cmV0dXJuIFx1MDAyNnBnZGF0LVx1MDAzZV9fbHJ1dmVjO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnRfbWVtX2Nncm91cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50X21lbV9jZ3JvdXAoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rXHRcdGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMTIwOCw3ICsxMjA5LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KHZvaWQpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMTI0MSw3ICsxMjQyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfcHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcbkBAIC0xMjUwLDcgKzEyNTEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnEoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFxuQEAgLTEyNTksNyArMTI2MCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gXHUwMDI2cGdkYXQtXHUwMDNlX19scnV2ZWM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHR1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4ge1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbkBAIC0xMjg3LDcgKzEyODgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zY2FuX3Rhc2tzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgbWVtX2Nncm91cF9wcml2YXRlX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG1lbV9jZ3JvdXBfcHJpdmF0ZV9pZChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTEyOTksNyArMTMwMCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9wcml2YXRlX2lkKHVuc2lnbmVkIHNob3J0IGlkKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfaWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMzE0LDcgKzEzMTUsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fc2VxKHN0cnVjdCBzZXFfZmlsZSAqbSlcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpscnV2ZWNfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmxydXZlY19tZW1jZyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTEzMjUsMTkgKzEzMjYsMjAgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB9XG4gXG4gc3RhdGljIGlubGluZVxuLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X21heChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuLW1lbV9jZ3JvdXBfcHJpbnRfb29tX2NvbnRleHQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4rbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rXHRcdFx0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIH1cbiBcbkBAIC0xMzY2LDE3ICsxMzY4LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1vZF9tZW1jZ19wYWdlX3N0YXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2RfbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRcdFx0ZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBpbnQgdmFsKVxuIHtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTEzOTEsMTkgKzEzOTMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiB7XG4gXHRyZXR1cm4gbm9kZV9wYWdlX3N0YXRlKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdFx0XHRcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIHtcbiBcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKGxydXZlY19wZ2RhdChscnV2ZWMpLCBpZHgpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdFx0ICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuIHtcbiBcdHJldHVybiBub2RlX3BhZ2Vfc3RhdGUobHJ1dmVjX3BnZGF0KGxydXZlYyksIGlkeCk7XG5AQCAtMTQzMSw3ICsxNDMzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbWVtY2dfZm9saW9fZXZlbnRzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rc3RhdGljIGlubGluZSB2b2lkIGNvdW50X21lbWNnX2ZvbGlvX2V2ZW50cyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4LCB1bnNpZ25lZCBsb25nIG5yKVxuIHtcbiB9XG5AQCAtMTQ2NSw3ICsxNDY3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZmx1c2hfd29ya3F1ZXVlKHZvaWQpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG5AQCAtMTUyOCw4ICsxNTMwLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGxydXZlY191bmxvY2tfaXJxcmVzdG9yZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmdcbiB9XG4gXG4gLyogVGVzdCByZXF1aXJlcyBhIHN0YWJsZSBmb2xpby1cdTAwM2VtZW1jZyBiaW5kaW5nLCBzZWUgZm9saW9fbWVtY2coKSAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tYXRjaGVzX2xydXZlYyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4rc3RhdGljIGlubGluZSBib29sIGZvbGlvX21hdGNoZXNfbHJ1dmVjKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gXHRyZXR1cm4gbHJ1dmVjX3BnZGF0KGxydXZlYykgPT0gZm9saW9fcGdkYXQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIGxydXZlY19tZW1jZyhscnV2ZWMpID09IGZvbGlvX21lbWNnKGZvbGlvKTtcbkBAIC0xNjQyLDcgKzE2NDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdHdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1lbWNnLVx1MDAzZXNvY2tldF9wcmVzc3VyZV9zZXFsb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfZ2V0X3NvY2tldF9wcmVzc3VyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSB1NjQgbWVtX2Nncm91cF9nZXRfc29ja2V0X3ByZXNzdXJlKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHR1bnNpZ25lZCBpbnQgc2VxO1xuIFx0dTY0IHZhbDtcbkBAIC0xNjYwLDcgKzE2NjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zZXRfc29ja2V0X3ByZXNzdXJlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc29ja2V0X3ByZXNzdXJlLCBqaWZmaWVzICsgSFopO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHU2NCBtZW1fY2dyb3VwX2dldF9zb2NrZXRfcHJlc3N1cmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfZ2V0X3NvY2tldF9wcmVzc3VyZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIFJFQURfT05DRShtZW1jZy1cdTAwM2Vzb2NrZXRfcHJlc3N1cmUpO1xuIH1cbkBAIC0xNzczLDcgKzE3NzUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXG4gICogQSBoZWxwZXIgZm9yIGFjY2Vzc2luZyBtZW1jZydzIGttZW1faWQsIHVzZWQgZm9yIGdldHRpbmdcbiAgKiBjb3JyZXNwb25kaW5nIExSVSBsaXN0cy5cbiAgKi9cbi1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitzdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRyZXR1cm4gbWVtY2cgPyBtZW1jZy1cdTAwM2VrbWVtY2dfaWQgOiAtMTtcbiB9XG5AQCAtMTg0NSw3ICsxODQ3LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2ttZW1fb25saW5lKHZvaWQpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbWNnX2ttZW1faWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtMTg2MSw3ICsxODYzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvdW50X29iamNnX2V2ZW50cyhzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbitzdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTg4NSw3ICsxODg3LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBib29sIG9ial9jZ3JvdXBfbWF5X3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyk7XG4gdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbiB2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSk7XG4tYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4rYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbkBAIC0xODk5LDcgKzE5MDEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4gXHRcdFx0XHRcdCAgICAgc2l6ZV90IHNpemUpXG4ge1xuIH1cbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdC8qIGlmIHpzd2FwIGlzIGRpc2FibGVkLCBkbyBub3QgYmxvY2sgcGFnZXMgZ29pbmcgdG8gdGhlIHN3YXBwaW5nIGRldmljZSAqL1xuIFx0cmV0dXJuIHRydWU7XG5AQCAtMTkxMiw3ICsxOTE0LDcgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBib29sIG1lbV9jZ3JvdXBfb29tX3N5bmNocm9uaXplKGJvb2wgd2FpdCk7XG4gXG4tc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdHJldHVybiBwLVx1MDAzZW1lbWNnX2luX29vbTtcbiB9XG5AQCAtMTkzMCw3ICsxOTMyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4gfVxuIFxuICNlbHNlIC8qIENPTkZJR19NRU1DR19WMSAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA4NGUyMzdmMmMxN2RiLi44ZTFlM2E1MDc1N2EzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTE2NTcsNyArMTY1Nyw3IEBAIGV4dGVybiB2b2lkIGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuXG4gXG4gZXh0ZXJuIHZvaWQgbHJ1dmVjX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiBcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbHJ1dmVjX3BnZGF0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbHJ1dmVjX3BnZGF0KGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiB7XG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0cmV0dXJuIGxydXZlYy1cdTAwM2VwZ2RhdDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaFxuaW5kZXggMDdiN2NiMTIyNDljNy4uMmJhZjdhMmIyOWIyZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmhcbkBAIC02MywxMiArNjMsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfY291bnRlcl9pbml0KHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG4gXHRjb3VudGVyLVx1MDAzZXRyYWNrX2ZhaWxjbnQgPSBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfY291bnRlcl9yZWFkKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4ge1xuIFx0cmV0dXJuIGF0b21pY19sb25nX3JlYWQoXHUwMDI2Y291bnRlci1cdTAwM2V1c2FnZSk7XG4gfVxuIFxuLWxvbmcgcGFnZV9jb3VudGVyX21hcmdpbihzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKTtcbitsb25nIHBhZ2VfY291bnRlcl9tYXJnaW4oY29uc3Qgc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcik7XG4gdm9pZCBwYWdlX2NvdW50ZXJfY2FuY2VsKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIHZvaWQgcGFnZV9jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBib29sIHBhZ2VfY291bnRlcl90cnlfY2hhcmdlKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggZmMyOTBlMjllNGE5ZS4uODQzZDcwNjgwYjhlMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTUwNSw5ICs1MDUsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcFxuIFx0X19tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoaWQsIG5yX3BhZ2VzKTtcbiB9XG4gXG4tbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4tZXh0ZXJuIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbitib29sIG1lbV9jZ3JvdXBfc3dhcF9mdWxsKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG5AQCAtNTE5LDE3ICs1MTksMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcCh1bnNpZ25lZCBzaG9ydCBpZCxcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHJldHVybiBQQUdFX0NPVU5URVJfTUFYO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGxvbmcgbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rc3RhdGljIGlubGluZSBsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBnZXRfbnJfc3dhcF9wYWdlcygpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gdm1fc3dhcF9mdWxsKCk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggNWI5ZTBlYmQ0MmFlMC4uZjU2ZTk1ODk0OGFjMCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMzMxLDcgKzMzMSw3IEBAIEVYUE9SVF9TWU1CT0wobWVtY2dfYnBmX2VuYWJsZWRfa2V5KTtcbiAgKiBJZiBtZW1jZyBpcyBib3VuZCB0byBhIHRyYWRpdGlvbmFsIGhpZXJhcmNoeSwgdGhlIGNzcyBvZiByb290X21lbV9jZ3JvdXBcbiAgKiBpcyByZXR1cm5lZC5cbiAgKi9cbi1zdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbitzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZ2V0X21lbV9jZ3JvdXBfY3NzX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG5AQCAtMzU2LDcgKzM1Niw3IEBAIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpnZXRfbWVtX2Nncm91cF9jc3NfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIGFmdGVyIHBhZ2VfY2dyb3VwX2lubygpIHJldHVybnMsIHNvIGl0IG9ubHkgc2hvdWxkIGJlIHVzZWQgYnkgY2FsbGVycyB0aGF0XG4gICogZG8gbm90IGNhcmUgKHN1Y2ggYXMgcHJvY2ZzIGludGVyZmFjZXMpLlxuICAqL1xuLWlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcbitpbm9fdCBwYWdlX2Nncm91cF9pbm8oY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0dW5zaWduZWQgbG9uZyBpbm8gPSAwO1xuQEAgLTQ4OSw3ICs0ODksNyBAQCBzdHJ1Y3QgbHJ1dmVjX3N0YXRzIHtcbiBcdGxvbmcgc3RhdGVfcGVuZGluZ1tOUl9NRU1DR19OT0RFX1NUQVRfSVRFTVNdO1xuIH07XG4gXG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG47XG4gXHRsb25nIHg7XG5AQCAtNTMwLDcgKzUzMCw3IEBAIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbiAgKiBtb25vdG9uaWNhbGx5LWluY3JlbWVudGVkIGV2ZW50IGNvdW50ZXJzIGFyZSBzdG9yZWQgaW5cbiAgKiBlbnVtIG5vZGVfc3RhdF9pdGVtLlxuICAqL1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbit1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRcdCAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuQEAgLTU0Nyw3ICs1NDcsNyBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpUkVBRF9PTkNFKHBuLVx1MDAzZWxydXZlY19zdGF0cy1cdTAwM2VzdGF0ZVtpXSk7XG4gfVxuIFxuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuO1xuQEAgLTc5OSw3ICs3OTksNyBAQCBzdGF0aWMgdm9pZCBmbHVzaF9tZW1jZ19zdGF0c19kd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX2RmbF93cSwgXHUwMDI2c3RhdHNfZmx1c2hfZHdvcmssIEZMVVNIX1RJTUUpO1xuIH1cbiBcbi11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuK3Vuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZShjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXG4ge1xuIFx0bG9uZyB4O1xuIFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuQEAgLTEwOTEsNyArMTA5MSw3IEBAIHZvaWQgY291bnRfbWVtY2dfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSB2bV9ldmVudF9pdGVtIGlkeCxcbiBcdHB1dF9jcHUoKTtcbiB9XG4gXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG4rdW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG4ge1xuIFx0aW50IGkgPSBtZW1jZ19ldmVudHNfaW5kZXgoZXZlbnQpO1xuIFxuQEAgLTEyMjAsNyArMTIyMCw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQodm9pZClcbiAgKlxuICAqIFNlZSBmb2xpb19tZW1jZygpIGZvciBmb2xpby1cdTAwM2VvYmpjZy9tZW1jZyBiaW5kaW5nIHJ1bGVzLlxuICAqL1xuLXN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXG5AQCAtMTQ0MSw3ICsxNDQxLDcgQEAgdm9pZCBtZW1fY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuICAqXG4gICogUmV0dXJuOiBUaGUgbHJ1dmVjIHRoaXMgZm9saW8gaXMgb24gd2l0aCBpdHMgbG9jayBoZWxkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuXG4gICovXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbitzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcbkBAIC0xNDY5LDcgKzE0NjksNyBAQCBzdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIFJldHVybjogVGhlIGxydXZlYyB0aGlzIGZvbGlvIGlzIG9uIHdpdGggaXRzIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0c1xuICAqIGRpc2FibGVkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuXG4gICovXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFxuQEAgLTE0OTgsNyArMTQ5OCw3IEBAIHN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIFJldHVybjogVGhlIGxydXZlYyB0aGlzIGZvbGlvIGlzIG9uIHdpdGggaXRzIGxvY2sgaGVsZCBhbmQgaW50ZXJydXB0c1xuICAqIGRpc2FibGVkIGFuZCByY3UgcmVhZCBsb2NrIGhlbGQuXG4gICovXG4tc3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK3N0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0dW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuQEAgLTE3MDksNyArMTcwOSw3IEBAIHN0YXRpYyBpbnQgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpbnQgaXRlbSlcbiBcdH1cbiB9XG4gXG4tdW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxuK3Vuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbiB7XG4gXHRyZXR1cm4gbWVtY2dfcGFnZV9zdGF0ZShtZW1jZywgaXRlbSkgKlxuIFx0XHRtZW1jZ19wYWdlX3N0YXRlX291dHB1dF91bml0KGl0ZW0pO1xuQEAgLTE4MTIsNyArMTgxMiw4IEBAIHN0YXRpYyB2b2lkIG1lbW9yeV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuICAqIE5PVEU6IEBtZW1jZyBhbmQgQHAncyBtZW1fY2dyb3VwIGNhbiBiZSBkaWZmZXJlbnQgd2hlbiBoaWVyYXJjaHkgaXNcbiAgKiBlbmFibGVkXG4gICovXG4tdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9jb250ZXh0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3ZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fY29udGV4dChjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rXHRcdFx0XHQgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG5AQCAtMTg3Nyw3ICsxODc4LDcgQEAgdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAvKlxuICAqIFJldHVybiB0aGUgbWVtb3J5IChhbmQgc3dhcCwgaWYgY29uZmlndXJlZCkgbGltaXQgZm9yIGEgbWVtY2cuXG4gICovXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3Vuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbWF4KGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1heCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2VtZW1vcnkubWF4KTtcbiBcbkBAIC01ODM4LDcgKzU4MzksNyBAQCB2b2lkIF9fbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHVuc2lnbmVkIHNob3J0IGlkLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4tbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X25yX3N3YXBfcGFnZXMoY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGxvbmcgbnJfc3dhcF9wYWdlcyA9IGdldF9ucl9zd2FwX3BhZ2VzKCk7XG4gXG5AQCAtNTg1NCw3ICs1ODU1LDcgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9ucl9zd2FwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAgKlxuICAqIFJldHVybjogUmVtYWluaW5nIGNoYXJnZWFibGUgcGFnZXMgaW4gdGhlIGZvbGlvJ3MgbWVtY2cgaGllcmFyY2h5LlxuICAqL1xuLWxvbmcgbWVtX2Nncm91cF9nZXRfZm9saW9fc3dhcF9tYXJnaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbitsb25nIG1lbV9jZ3JvdXBfZ2V0X2ZvbGlvX3N3YXBfbWFyZ2luKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0bG9uZyBtYXJnaW47XG5AQCAtNTg3MSw3ICs1ODcyLDcgQEAgbG9uZyBtZW1fY2dyb3VwX2dldF9mb2xpb19zd2FwX21hcmdpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIG1hcmdpbjtcbiB9XG4gXG4tYm9vbCBtZW1fY2dyb3VwX3N3YXBfZnVsbChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK2Jvb2wgbWVtX2Nncm91cF9zd2FwX2Z1bGwoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuQEAgLTYxMzksNyArNjE0MCw3IEBAIHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLWJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4rYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHQvKiBpZiB6c3dhcCBpcyBkaXNhYmxlZCwgZG8gbm90IGJsb2NrIHBhZ2VzIGdvaW5nIHRvIHRoZSBzd2FwcGluZyBkZXZpY2UgKi9cbiBcdGlmICghenN3YXBfaXNfZW5hYmxlZCgpKVxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfY291bnRlci5jIGIvbW0vcGFnZV9jb3VudGVyLmNcbmluZGV4IDQ1MDU0M2Y0YjMxOGIuLjhjNmYzYjQ1MTM2YjQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2NvdW50ZXIuY1xuKysrIGIvbW0vcGFnZV9jb3VudGVyLmNcbkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9wcm90ZWN0ZWRfdXNhZ2Uoc3RydWN0IHBhZ2VfY291bnRlciAqYyxcbiAgKiBSZXR1cm46IFRoZSBtaW5pbXVtIHZhbHVlIG9mIG1heCBtaW51cyB1c2FnZSBhY3Jvc3MgQGNvdW50ZXIgYW5kIGFsbCBvZlxuICAqIGl0cyBhbmNlc3RvcnMuIFRoZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUgZHVyaW5nIGEgY29uY3VycmVudCBjaGFyZ2UuXG4gICovXG4tbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4rbG9uZyBwYWdlX2NvdW50ZXJfbWFyZ2luKGNvbnN0IHN0cnVjdCBwYWdlX2NvdW50ZXIgKmNvdW50ZXIpXG4ge1xuIFx0bG9uZyBtYXJnaW4gPSBQQUdFX0NPVU5URVJfTUFYO1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uY1xuaW5kZXggMWRhNGZmNDg0ZjA5Ny4uNWY3NzU2ZTM3MGY3YSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaW8uY1xuKysrIGIvbW0vcGFnZV9pby5jXG5AQCAtMjU2LDEyICsyNTYsMTMgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG4tc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpmb2xpb19tZW1jZ19ibGtnX2NzcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZm9saW9fbWVtY2dfYmxrZ19jc3MoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRyZXR1cm4gY2dyb3VwX2VfY3NzKGZvbGlvX21lbWNnKGZvbGlvKS1cdTAwM2Vjc3MuY2dyb3VwLCBcdTAwMjZpb19jZ3JwX3N1YnN5cyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbitzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiB7XG4gXHRib29sIGNhbl9tZXJnZSA9IHRydWU7XG4gXG5AQCAtMjc3LDcgKzI3OCw4IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiBcdHJldHVybiBjYW5fbWVyZ2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sXG4rXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzO1xuIFxuQEAgLTI5NCwxMSArMjk2LDEzIEBAIHN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0Y3NzX3B1dChjc3MpO1xuIH1cbiAjZWxzZVxuLXN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbitzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4tc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbyxcbitcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyBcdTAwMjZcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDBiNWQ1MDc3MzliY2IuLjk0NzE0ZDlkZDAwM2MgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTgyLDcgKzgyLDcgQEAgZW51bSBzd2FwX2NsdXN0ZXJfZmxhZ3Mge1xuIFxuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbiBcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcdTAwMjZcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE4OjM3OjU3LjIzOTM5NjUyOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2ODA3OTkzMDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIGBjb25zdGAgUXVhbGlmaWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgbWFraW5nIGNoYW5nZXMgYWNyb3NzIGEgYnVuY2ggb2YgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkaWcgaW50byBpdCwgc2VlIHdoYXTigJlzIGdvaW5nIG9uLCBhbmQgZGV0ZXJtaW5lIGlmIGl0J3Mgc29tZXRoaW5nIHdlIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0IGluIHRlcm1zIG9mIGZ1enppbmcuIFRoZSBjaGFuZ2Ugc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBhIGJ1bmNoIG9mIGZ1bmN0aW9uIHNpZ25hdHVyZXMgYXJlIGdldHRpbmcgYGNvbnN0YCBxdWFsaWZpZXJzIGFkZGVkIHRvIHBvaW50ZXIgcGFyYW1ldGVycy4gV2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgc3RydWN0IG9ial9jZ3JvdXBgLCBgc3RydWN0IGZvbGlvYCwgYHN0cnVjdCBtZW1fY2dyb3VwYCwgYHN0cnVjdCBwYWdlX2NvdW50ZXJgLCBldGMuIEl0J3MgYWNyb3NzIHRoZSBib2FyZCDigJMgYG1lbWNvbnRyb2wuaGAsIGBtbXpvbmUuaGAsIGBwYWdlX2NvdW50ZXIuaGAsIGBzd2FwLmhgIGFuZCB0aGUgYXNzb2NpYXRlZCBgLmNgIGZpbGVzLlxuXG5TbywgdGhlIGZpcnN0IHRoaW5nIEkgZGlkIHdhcyB0byB0aG9yb3VnaGx5IGNoZWNrIGZvciBhbnkgKmFjdHVhbCogY29kZSBjaGFuZ2VzLiBJIHdhcyBsb29raW5nIGZvcjpcblxuKiAgICoqTG9naWMgY2hhbmdlczoqKiBEaWQgYW55IGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgZ2V0IGFsdGVyZWQ/IEFyZSB0aGVyZSBhbnkgaGlkZGVuIGNvbmRpdGlvbmFsIGNoYW5nZXMsIHZhcmlhYmxlIHJlbmFtZXMsIG9yIGRlbGV0ZWQgbGluZXMgb2YgY29kZT9cbiogICAqKkFsZ29yaXRobWljIGNoYW5nZXM6KiogQW55IHR3ZWFrcyB0byBob3cgZGF0YSBpcyBwcm9jZXNzZWQsIHRoYXQgY291bGQgaW1wYWN0IGJlaGF2aW9yP1xuKiAgICoqTmV3IGNoZWNrcy9Bc3NlcnRpb25zOioqIFdlcmUgYW55IG5ldyBzYWZldHkgY2hlY2tzIGludHJvZHVjZWQ/XG4qICAgKipDaGFuZ2VkIGNvbnN0YW50czoqKiBIYXMgdGhlICp2YWx1ZSogb2YgYW55IGNvbnN0YW50cyBiZWVuIGFsdGVyZWQsIHdoaWNoIGNvdWxkIHN1YnRseSBzaGlmdCBiZWhhdmlvcj9cbiogICAqKkFsdGVyZWQgY29udHJvbCBmbG93OioqIElzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBvciB0aGUgYnJhbmNoaW5nIHdpdGhpbiB0aGUgY29kZSwgbm93IGRpZmZlcmVudD9cblxuSSBtZXRpY3Vsb3VzbHkgd2VudCB0aHJvdWdoIGV2ZXJ5IGxpbmUgb2YgdGhlIGRpZmYuIEkgY2hlY2tlZCBmb3IgYW55IFwic3VycHJpc2VzLlwiIEFmdGVyIG15IGxpbmUtYnktbGluZSBkaWZmIHJldmlldywgaXQgYmVjYW1lIGNsZWFyOiBFdmVyeSBzaW5nbGUgY2hhbmdlIGlzIGp1c3QgdGhlIGFkZGl0aW9uIG9mIGBjb25zdGAgcXVhbGlmaWVycyB0byBwb2ludGVyIHBhcmFtZXRlcnMuIFNvLCBmb3IgZXhhbXBsZSwgYHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZ2AgYmVjb21lcyBgY29uc3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBEb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nP1xuXG5JIHJlLXJlYWQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcyBhbmQgSSB0aG91Z2h0IGFib3V0IHRoZSBjb3JlIHByaW5jaXBsZTogd2UgZnV6eiB0byBmaW5kIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBvciBsYXRlbnQgYnVncyBpbnRyb2R1Y2VkIGJ5ICp0aGUgcGF0Y2ggc2VyaWVzKi5cblxuSSBoYWQgdG8gYXNrIG15c2VsZjogRG9lcyBhZGRpbmcgYGNvbnN0YCB0byBwYXJhbWV0ZXJzIGFsdGVyIHRoZSBjb21waWxlZCBDIGxvZ2ljIG9yIGRhdGEgc3RydWN0dXJlcywgYWxnb3JpdGhtIGZsb3dzIG9yIGFueSBsb2dpYz8gTm8sIGluIEMsIGBjb25zdGAgb24gcG9pbnRlciBhcmd1bWVudHMgZG9lcyAqbm90KiBjaGFuZ2UgdGhlIGNhbGxpbmcgY29udmVudGlvbi4gVGhlIGNvbXBpbGVkIG1hY2hpbmUgY29kZSBpcyBpZGVudGljYWwuIFRoZXJlJ3Mgbm8gbGF5b3V0IGNoYW5nZSwgbm8gbG9naWMgY2hhbmdlLCBubyBuZXcgYXNzZXJ0aW9ucywgbm8gcmVzdHJ1Y3R1cmVkIGZsb3cuXG5cbklzIHRoZXJlIGFueSBjaGFuY2Ugb2YgcmVncmVzc2lvbiBvciBhIGJ1ZyBpbnRyb2R1Y2VkIGJ5IGBjb25zdGAgcXVhbGlmaWNhdGlvbj8gSW4gQywgYGNvbnN0YCBkb2VzICpub3QqIGFmZmVjdCB0aGUgQUJJLiBUaGUgY29tcGlsZWQgaW5zdHJ1Y3Rpb25zIHJlbWFpbiBjb21wbGV0ZWx5IGlkZW50aWNhbC5cblxuQ2FuIGZ1enppbmcgZGlzY292ZXIgYW55IGNyYXNoLCByZWdyZXNzaW9uLCBsYXRlbnQgYnVnLCBvciB0cmlnZ2VyZWQgYXNzZXJ0aW9uIGluIGEgcHVyZSBgY29uc3RgIGFubm90YXRpb24gcGF0Y2g/IE5vLiBGdXp6aW5nIHRoZSBiaW5hcnkgZG9lcyBub3QgZ2VuZXJhdGUgbmV3IGJlaGF2aW9yIGlmIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGxpdGVyYWxseSBpZGVudGljYWwuXG5cbkJhc2VkIG9uIHRoaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIGlzICpub3QqIGEgcGF0Y2ggdGhhdCByZXF1aXJlcyBmdXp6aW5nLiBUaGVyZSBhcmUgbm8gZXhlY3V0YWJsZSBjb2RlIGNoYW5nZXMuIFRoZSBjaGFuZ2UgaXMgcHVyZWx5IGFib3V0IGNvbXBpbGVyLWVuZm9yY2VkIGNvbnN0LWNvcnJlY3RuZXNzLlxuXG5JIHdlbnQgYmFjayBhbmQgZG91YmxlLWNoZWNrZWQgdG8gZW5zdXJlIHRoZXJlIHdlcmVuJ3QgKmFueSogc3VidGxlIGNoYW5nZXMgYmV5b25kIHRoZSBgY29uc3RgIGFkZGl0aW9ucy4gSSBzZWFyY2hlZCBmb3IgcG9zc2libGUgYWNjaWRlbnRhbCBtb2RpZmljYXRpb25zLiBJIGxvb2tlZCBmb3IgKmFueSogbG9naWMgY2hhbmdlcy4gSSBsb29rZWQgZm9yICphbnkqIG5ldyBhc3NlcnRpb25zLiBJIHJldmlld2VkIGFsbCBsaW5lcyBvZiB0aGUgZGlmZi5cblxuSSBjYW4gZGVmaW5pdGl2ZWx5IHNheSB0aGF0IHRoZSBwYXRjaCBjb25zaXN0cyAqZW50aXJlbHkqIG9mIGBjb25zdGAgcXVhbGlmaWVyIGFkZGl0aW9ucyB0byBmdW5jdGlvbiBzaWduYXR1cmVzLCBhbmQgbm90aGluZyBtb3JlLiBUaGVyZSBpcyBubyBjaGFuZ2UgdG8gZXhlY3V0YWJsZSBjb2RlLiBUaGlzIGlzLCBpbiBlZmZlY3QsIGEgXCJuby1vcFwiIHBhdGNoIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxOSwiT3V0cHV0VG9rZW5zIjo4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxODozODoxNC4wNDczOTI4ODFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBvbmx5IGFkZHMgJ2NvbnN0JyBxdWFsaWZpZXJzIHRvIHBvaW50ZXIgcGFyYW1ldGVycyBhY3Jvc3MgbWVtY29udHJvbCwgc3dhcCwgYW5kIHBhZ2UgY291bnRlciBoZWxwZXIgZnVuY3Rpb25zIHRvIGltcHJvdmUgY29uc3QtY29ycmVjdG5lc3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgZXhlY3V0YWJsZSBsb2dpYywgcnVudGltZSBhc3NlcnRpb25zLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlIGxheW91dHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgb25seSBhZGRzICdjb25zdCcgcXVhbGlmaWVycyB0byBwb2ludGVyIHBhcmFtZXRlcnMgYWNyb3NzIG1lbWNvbnRyb2wsIHN3YXAsIGFuZCBwYWdlIGNvdW50ZXIgaGVscGVyIGZ1bmN0aW9ucyB0byBpbXByb3ZlIGNvbnN0LWNvcnJlY3RuZXNzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGV4ZWN1dGFibGUgbG9naWMsIHJ1bnRpbWUgYXNzZXJ0aW9ucywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZSBsYXlvdXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTg6Mzg6MTQuMDQ3NDE0NDkxWiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowbn4fq[1] Phase: Running StartedAt: 2026-09-03 18:38:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbn4fq[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-03 18:38:25 +0000 UTC FinishedAt: 2026-09-03 18:38:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}