Name: series-workfloww4xs2 Phase: Succeeded StartedAt: 2026-09-03 14:23:55 +0000 UTC FinishedAt: 2026-09-03 18:32:20 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[0] Phase: Succeeded StartedAt: 2026-09-03 14:23:55 +0000 UTC FinishedAt: 2026-09-03 14:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 14:23:55 +0000 UTC FinishedAt: 2026-09-03 14:43:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "14811b1d9ba0a1658adf136a1173a150d82c74d6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "LRU_GEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "14811b1d9ba0a1658adf136a1173a150d82c74d6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "LRU_GEN" ], "series_id": "547a9786-308b-4ebf-bdfe-7bc02d03eb9c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_soft_limit_write", "mem_cgroup_soft_limit_read", "memcg1_uncharge_batch", "memcg1_commit_charge", "__memcg1_swapout", "lru_gen_rotate_memcg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWQmIzM0OywKICAgICYjMzQ7bWVtY2cxX3VuY2hhcmdlX2JhdGNoJiMzNDssCiAgICAmIzM0O21lbWNnMV9jb21taXRfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9yb3RhdGVfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVtb3ZlcyB0aGUgbGVnYWN5IGNncm91cCB2MSBzb2Z0LWxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtZW1jb250cm9sLCBtZW1jb250cm9sLXYxLCBhbmQgdm1zY2FuKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgZGVsZXRlcyB0aGUgc29mdCBsaW1pdCBSQi10cmVlIHRyYWNraW5nIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucywgYW5kIHRyYWNlcG9pbnRzLlxuMi4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBzb2Z0X2xpbWl0YCBhbmQgYHRhcmdldHNgIGZpZWxkcyBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBzaW1wbGlmeWluZyBwZXItY3B1IGV2ZW50IHJhdGVsaW1pdGluZyB0byBqdXN0IGB0aHJlc2hvbGRfdGFyZ2V0YC5cbjMuIEl0IHJlbW92ZXMgdGhlIHVudXNlZCBgbmlkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYCBhbmQgdW51c2VkIHNjYW5uaW5nIHN0YXRpc3RpY3MgdmFyaWFibGVzIGZyb20gcmVjbGFpbSBwYXRocyAoYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCkuXG5cblRoZSBjaGFuZ2VzIGNvbnNpc3Qgc3RyaWN0bHkgb2YgZGVhZC9kZXByZWNhdGVkIGNvZGUgcmVtb3ZhbCBhbmQgc3RydWN0dXJhbCBzaW1wbGlmaWNhdGlvbnMuIE5vIG5ldyBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBkZXByZWNhdGVzIGFuZCByZW1vdmVzIHRoZSBtZW1jZyB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFuZCBpdHMgYXNzb2NpYXRlZCByYnRyZWUgdHJhY2tpbmcuIFRoaXMgbW9kaWZpZXMgYWN0aXZlIE1NIGxvZ2ljIGluIG1lbWNnIHYxIGV2ZW50IHJhdGUtbGltaXRpbmcgYW5kIHVuY2hhcmdpbmcsIE11bHRpLUdlbiBMUlUgcm90YXRpb24sIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gdm1zY2FuLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmEwZGFjZGQ5NTZkZWY3NGVlMDA2MDUxZWQ4NjkyZDk1ZDU5YmJjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6NDI6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZGE2MjVkMmVkYjNiYS4uYzc5OTkyNjQzNTU2MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk1LDIwICYjNDM7OTUsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XG4gXHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzXHRcdFx0KmxydXZlY19zdGF0cztcbiBcdHN0cnVjdCBzaHJpbmtlcl9pbmZvIF9fcmN1XHQqc2hyaW5rZXJfaW5mbztcbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4tXHQvKlxuLVx0ICogTWVtY2ctdjEgb25seSBzdHVmZiBpbiBtaWRkbGUgYXMgYnVmZmVyIGJldHdlZW4gcmVhZCBtb3N0bHkgZmllbGRzXG4tXHQgKiBhbmQgdXBkYXRlIG9mdGVuIGZpZWxkcyB0byBhdm9pZCBmYWxzZSBzaGFyaW5nLiBJZiB2MSBzdHVmZiBpc1xuLVx0ICogbm90IHByZXNlbnQsIGFuIGV4cGxpY2l0IHBhZGRpbmcgaXMgbmVlZGVkLlxuLVx0ICovXG4tXG4tXHRzdHJ1Y3QgcmJfbm9kZVx0XHR0cmVlX25vZGU7XHQvKiBSQiB0cmVlIG5vZGUgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0dXNhZ2VfaW5fZXhjZXNzOy8qIFNldCB0byB0aGUgdmFsdWUgYnkgd2hpY2ggKi9cbi1cdFx0XHRcdFx0XHQvKiB0aGUgc29mdCBsaW1pdCBpcyBleGNlZWRlZCovXG4tXHRib29sXHRcdFx0b25fdHJlZTtcbi0jZWxzZVxuIFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDFfKTtcbi0jZW5kaWZcbiBcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG5AQCAtMjkzLDggJiM0MzsyODAsNiBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXG4gXHRzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHUgX19wZXJjcHUgKmV2ZW50c19wZXJjcHU7XG4gXG4tXHR1bnNpZ25lZCBsb25nIHNvZnRfbGltaXQ7XG4tXG4gXHQvKiBwcm90ZWN0ZWQgYnkgbWVtY2dfb29tX2xvY2sgKi9cbiBcdGJvb2wgb29tX2xvY2s7XG4gXHRpbnQgdW5kZXJfb29tO1xuQEAgLTE5MjQsMTAgJiM0MzsxOTA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIC8qIENncm91cCB2MS1yZWxhdGVkIGRlY2xhcmF0aW9ucyAqL1xuIFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxuLVx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCk7XG4tXG4gYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5AQCAtMTk0OCwxNCAmIzQzOzE5MjksNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbiB9XG4gXG4gI2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovXG4tc3RhdGljIGlubGluZVxuLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tXHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICp0b3RhbF9zY2FubmVkKVxuLXtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggNjdjODRhOGE3MjU4My4uODRlMjM3ZjJjMTdkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC02MzgsMzUgJiM0Mzs2MzgsMzIgQEAgc3RydWN0IGxydV9nZW5fbW1fd2FsayB7XG4gICogRm9yIGVhY2ggbm9kZSwgbWVtY2dzIGFyZSBkaXZpZGVkIGludG8gdHdvIGdlbmVyYXRpb25zOiB0aGUgb2xkIGFuZCB0aGVcbiAgKiB5b3VuZy4gRm9yIGVhY2ggZ2VuZXJhdGlvbiwgbWVtY2dzIGFyZSByYW5kb21seSBzaGFyZGVkIGludG8gbXVsdGlwbGUgYmluc1xuICAqIHRvIGltcHJvdmUgc2NhbGFiaWxpdHkuIEZvciBlYWNoIGJpbiwgdGhlIGhsaXN0X251bGxzIGlzIHZpcnR1YWxseSBkaXZpZGVkXG4tICogaW50byB0aHJlZSBzZWdtZW50czogdGhlIGhlYWQsIHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC5cbiYjNDM7ICogaW50byB0d28gc2VnbWVudHM6IHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC5cbiAgKlxuICAqIEFuIG9ubGluaW5nIG1lbWNnIGlzIGFkZGVkIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkIGdlbmVyYXRpb24uXG4gICogVGhlIGV2aWN0aW9uIHN0YXJ0cyBhdCB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLiBUaGVcbiAgKiBwZXItbm9kZSBtZW1jZyBnZW5lcmF0aW9uIGNvdW50ZXIsIHdob3NlIHJlbWluZGVyIChtb2QgTUVNQ0dfTlJfR0VOUykgaW5kZXhlc1xuICAqIHRoZSBvbGQgZ2VuZXJhdGlvbiwgaXMgaW5jcmVtZW50ZWQgd2hlbiBhbGwgaXRzIGJpbnMgYmVjb21lIGVtcHR5LlxuICAqXG4tICogVGhlcmUgYXJlIGZvdXIgb3BlcmF0aW9uczpcbi0gKiAxLiBNRU1DR19MUlVfSEVBRCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4tICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcJiMzNDtzZWdcJiMzNDsgdG8gXCYjMzQ7aGVhZFwmIzM0Oztcbi0gKiAyLiBNRU1DR19MUlVfVEFJTCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4mIzQzOyAqIFRoZXJlIGFyZSB0aHJlZSBvcGVyYXRpb25zOlxuJiM0MzsgKiAxLiBNRU1DR19MUlVfVEFJTCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4gICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcJiMzNDtzZWdcJiMzNDsgdG8gXCYjMzQ7dGFpbFwmIzM0Oztcbi0gKiAzLiBNRU1DR19MUlVfT0xELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkXG4mIzQzOyAqIDIuIE1FTUNHX0xSVV9PTEQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGRcbiAgKiAgICBnZW5lcmF0aW9uLCB1cGRhdGVzIGl0cyBcJiMzNDtnZW5cJiMzNDsgdG8gXCYjMzQ7b2xkXCYjMzQ7IGFuZCByZXNldHMgaXRzIFwmIzM0O3NlZ1wmIzM0OyB0byBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuLSAqIDQuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlXG4mIzQzOyAqIDMuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlXG4gICogICAgeW91bmcgZ2VuZXJhdGlvbiwgdXBkYXRlcyBpdHMgXCYjMzQ7Z2VuXCYjMzQ7IHRvIFwmIzM0O3lvdW5nXCYjMzQ7IGFuZCByZXNldHMgaXRzIFwmIzM0O3NlZ1wmIzM0OyB0b1xuICAqICAgIFwmIzM0O2RlZmF1bHRcJiMzNDsuXG4gICpcbiAgKiBUaGUgZXZlbnRzIHRoYXQgdHJpZ2dlciB0aGUgYWJvdmUgb3BlcmF0aW9ucyBhcmU6XG4tICogMS4gRXhjZWVkaW5nIHRoZSBzb2Z0IGxpbWl0LCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfSEVBRDtcbi0gKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbG93LCB3aGljaCB0cmlnZ2Vyc1xuJiM0MzsgKiAxLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbG93LCB3aGljaCB0cmlnZ2Vyc1xuICAqICAgIE1FTUNHX0xSVV9UQUlMO1xuLSAqIDMuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4mIzQzOyAqIDIuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4gICogICAgdGhyZXNob2xkLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfVEFJTDtcbi0gKiA0LiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemVcbiYjNDM7ICogMy4gVGhlIHNlY29uZCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4gICogICAgdGhyZXNob2xkLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4tICogNS4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4tICogNi4gRmluaXNoaW5nIHRoZSBhZ2luZyBvbiB0aGUgZXZpY3Rpb24gcGF0aCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xuLSAqIDcuIE9mZmxpbmluZyBhIG1lbWNnLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfT0xELlxuJiM0MzsgKiA0LiBBdHRlbXB0aW5nIHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBtaW4sIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcbiYjNDM7ICogNS4gRmluaXNoaW5nIHRoZSBhZ2luZyBvbiB0aGUgZXZpY3Rpb24gcGF0aCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xuJiM0MzsgKiA2LiBPZmZsaW5pbmcgYSBtZW1jZywgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX09MRC5cbiAgKlxuICAqIE5vdGVzOlxuICAqIDEuIE1lbWNnIExSVSBvbmx5IGFwcGxpZXMgdG8gZ2xvYmFsIHJlY2xhaW0sIGFuZCB0aGUgcm91bmQtcm9iaW4gaW5jcmVtZW50aW5nXG5AQCAtNjk5LDcgJiM0Mzs2OTYsNiBAQCB2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4tdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuIHZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcbiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcbiB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbkBAIC03NDAsMTAgJiM0Mzs3MzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuaW5kZXggYjRiZjdiOGRlZjFmNS4uOGE4NzI5OTBiNGJlZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuQEAgLTIxNCwxMyAmIzQzOzIxNCw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19yZWNsYWltX2JlXG4gXG4gXHRUUF9BUkdTKGdmcF9mbGFncywgb3JkZXIsIG1lbWNnKVxuICk7XG4tXG4tREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2JlZ2luLFxuLVxuLVx0VFBfUFJPVE8oZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyksXG4tXG4tXHRUUF9BUkdTKGdmcF9mbGFncywgb3JkZXIsIG1lbWNnKVxuLSk7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIERFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSxcbkBAIC0yNjAsMTMgJiM0MzsyNTMsNiBAQCBERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3JlY2xhaW1fZW5kLFxuIFxuIFx0VFBfQVJHUyhucl9yZWNsYWltZWQsIG1lbWNnKVxuICk7XG4tXG4tREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9lbmRfdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9lbmQsXG4tXG4tXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSxcbi1cbi1cdFRQX0FSR1MobnJfcmVjbGFpbWVkLCBtZW1jZylcbi0pO1xuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiBUUkFDRV9FVkVOVChtbV9zaHJpbmtfc2xhYl9zdGFydCxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggNWNjMjIwZGI5MDc2Ni4uZTE2ZjEyNTBiMjVjOCAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC03OCwxMCAmIzQzOzc4LDYgQEAgdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXG4gXHRcdFx0XHRcdCAgIGludCAqc3dhcHBpbmVzcyk7XG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuLVx0XHRcdFx0ICAgICBwZ19kYXRhX3QgKnBnZGF0LFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcbiBcbiAjaWZkZWYgQ09ORklHX05VTUFcbiBleHRlcm4gaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW87XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCAwNWVmNTVjYWU0ZGM2Li5iZjJjN2Q1M2IwMWIxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC0xNywzMCAmIzQzOzE3LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttZW1jb250cm9sLXYxLmhcJiMzNDtcbiBcbi0vKlxuLSAqIENncm91cHMgYWJvdmUgdGhlaXIgbGltaXRzIGFyZSBtYWludGFpbmVkIGluIGEgUkItVHJlZSwgaW5kZXBlbmRlbnQgb2Zcbi0gKiB0aGVpciBoaWVyYXJjaHkgcmVwcmVzZW50YXRpb25cbi0gKi9cbi1cbi1zdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlIHtcbi1cdHN0cnVjdCByYl9yb290IHJiX3Jvb3Q7XG4tXHRzdHJ1Y3QgcmJfbm9kZSAqcmJfcmlnaHRtb3N0O1xuLVx0c3BpbmxvY2tfdCBsb2NrO1xuLX07XG4tXG4tc3RydWN0IG1lbV9jZ3JvdXBfdHJlZSB7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICpyYl90cmVlX3Blcl9ub2RlW01BWF9OVU1OT0RFU107XG4tfTtcbi1cbi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZSBzb2Z0X2xpbWl0X3RyZWUgX19yZWFkX21vc3RseTtcbi1cbi0vKlxuLSAqIE1heGltdW0gbG9vcHMgaW4gbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0oKSwgdXNlZCBmb3Igc29mdFxuLSAqIGxpbWl0IHJlY2xhaW0gdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcywgaWYgdGhleSBldmVyIG9jY3VyLlxuLSAqL1xuLSNkZWZpbmVcdE1FTV9DR1JPVVBfTUFYX1JFQ0xBSU1fTE9PUFNcdFx0MTAwXG4tI2RlZmluZVx0TUVNX0NHUk9VUF9NQVhfU09GVF9MSU1JVF9SRUNMQUlNX0xPT1BTXHQyXG4tXG4gLyogZm9yIE9PTSAqL1xuIHN0cnVjdCBtZW1fY2dyb3VwX2V2ZW50ZmRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG5AQCAtMTA2LDMwMSAmIzQzOzgyLDYgQEAgc3RhdGljIHN0cnVjdCBsb2NrZGVwX21hcCBtZW1jZ19vb21fbG9ja19kZXBfbWFwID0ge1xuIFxuIERFRklORV9TUElOTE9DSyhtZW1jZ19vb21fbG9jayk7XG4gXG4tc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6LFxuLVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBuZXdfdXNhZ2VfaW5fZXhjZXNzKVxuLXtcbi1cdHN0cnVjdCByYl9ub2RlICoqcCA9IFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdC5yYl9ub2RlO1xuLVx0c3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXpfbm9kZTtcbi1cdGJvb2wgcmlnaHRtb3N0ID0gdHJ1ZTtcbi1cbi1cdGlmIChtei1cdTAwM2Vvbl90cmVlKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MgPSBuZXdfdXNhZ2VfaW5fZXhjZXNzO1xuLVx0aWYgKCFtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MpXG4tXHRcdHJldHVybjtcbi1cdHdoaWxlICgqcCkge1xuLVx0XHRwYXJlbnQgPSAqcDtcbi1cdFx0bXpfbm9kZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsXG4tXHRcdFx0XHRcdHRyZWVfbm9kZSk7XG4tXHRcdGlmIChtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MgXHUwMDNjIG16X25vZGUtXHUwMDNldXNhZ2VfaW5fZXhjZXNzKSB7XG4tXHRcdFx0cCA9IFx1MDAyNigqcCktXHUwMDNlcmJfbGVmdDtcbi1cdFx0XHRyaWdodG1vc3QgPSBmYWxzZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwID0gXHUwMDI2KCpwKS1cdTAwM2VyYl9yaWdodDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0aWYgKHJpZ2h0bW9zdClcbi1cdFx0bWN0ei1cdTAwM2VyYl9yaWdodG1vc3QgPSBcdTAwMjZtei1cdTAwM2V0cmVlX25vZGU7XG4tXG4tXHRyYl9saW5rX25vZGUoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlLCBwYXJlbnQsIHApO1xuLVx0cmJfaW5zZXJ0X2NvbG9yKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSwgXHUwMDI2bWN0ei1cdTAwM2VyYl9yb290KTtcbi1cdG16LVx1MDAzZW9uX3RyZWUgPSB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteixcbi1cdFx0XHRcdFx0IHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0aWYgKCFtei1cdTAwM2Vvbl90cmVlKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlID09IG1jdHotXHUwMDNlcmJfcmlnaHRtb3N0KVxuLVx0XHRtY3R6LVx1MDAzZXJiX3JpZ2h0bW9zdCA9IHJiX3ByZXYoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlKTtcbi1cbi1cdHJiX2VyYXNlKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSwgXHUwMDI2bWN0ei1cdTAwM2VyYl9yb290KTtcbi1cdG16LVx1MDAzZW9uX3RyZWUgPSBmYWxzZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0X19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLX1cbi1cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzb2Z0X2xpbWl0X2V4Y2VzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSk7XG4tXHR1bnNpZ25lZCBsb25nIHNvZnRfbGltaXQgPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNlc29mdF9saW1pdCk7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2VzcyA9IDA7XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIHNvZnRfbGltaXQpXG4tXHRcdGV4Y2VzcyA9IG5yX3BhZ2VzIC0gc29mdF9saW1pdDtcbi1cbi1cdHJldHVybiBleGNlc3M7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIG1lbWNnMV91cGRhdGVfdHJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBleGNlc3M7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6O1xuLVxuLVx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG4tXHRcdGlmIChzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZykpXG4tXHRcdFx0bHJ1X2dlbl9zb2Z0X3JlY2xhaW0obWVtY2csIG5pZCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdG1jdHogPSBzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtuaWRdO1xuLVx0aWYgKCFtY3R6KVxuLVx0XHRyZXR1cm47XG4tXHQvKlxuLVx0ICogTmVjZXNzYXJ5IHRvIHVwZGF0ZSBhbGwgYW5jZXN0b3JzIHdoZW4gaGllcmFyY2h5IGlzIHVzZWQuXG4tXHQgKiBiZWNhdXNlIHRoZWlyIGV2ZW50IGNvdW50ZXIgaXMgbm90IHRvdWNoZWQuXG4tXHQgKi9cbi1cdGZvciAoOyBtZW1jZzsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpIHtcbi1cdFx0bXogPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdO1xuLVx0XHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZyk7XG4tXHRcdC8qXG4tXHRcdCAqIFdlIGhhdmUgdG8gdXBkYXRlIHRoZSB0cmVlIGlmIG16IGlzIG9uIFJCLXRyZWUgb3Jcbi1cdFx0ICogbWVtIGlzIG92ZXIgaXRzIHNvZnRsaW1pdC5cbi1cdFx0ICovXG4tXHRcdGlmIChleGNlc3MgfHwgbXotXHUwMDNlb25fdHJlZSkge1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0ei1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdFx0LyogaWYgb24tdHJlZSwgcmVtb3ZlIGl0ICovXG4tXHRcdFx0aWYgKG16LVx1MDAzZW9uX3RyZWUpXG4tXHRcdFx0XHRfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEluc2VydCBhZ2Fpbi4gbXotXHUwMDNldXNhZ2VfaW5fZXhjZXNzIHdpbGwgYmUgdXBkYXRlZC5cbi1cdFx0XHQgKiBJZiBleGNlc3MgaXMgMCwgbm8gdHJlZSBvcHMuXG4tXHRcdFx0ICovXG4tXHRcdFx0X19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChteiwgbWN0eiwgZXhjZXNzKTtcbi1cdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHR9XG4tXHR9XG4tfVxuLVxuLXZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6O1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0aW50IG5pZDtcbi1cbi1cdGZvcl9lYWNoX25vZGUobmlkKSB7XG4tXHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXTtcbi1cdFx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW25pZF07XG4tXHRcdGlmIChtY3R6KVxuLVx0XHRcdG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdH1cbi19XG4tXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpcbi1fX21lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUoc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eilcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXG4tcmV0cnk6XG4tXHRteiA9IE5VTEw7XG4tXHRpZiAoIW1jdHotXHUwMDNlcmJfcmlnaHRtb3N0KVxuLVx0XHRnb3RvIGRvbmU7XHRcdC8qIE5vdGhpbmcgdG8gcmVjbGFpbSBmcm9tICovXG4tXG4tXHRteiA9IHJiX2VudHJ5KG1jdHotXHUwMDNlcmJfcmlnaHRtb3N0LFxuLVx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgdHJlZV9ub2RlKTtcbi1cdC8qXG4tXHQgKiBSZW1vdmUgdGhlIG5vZGUgbm93IGJ1dCBzb21lb25lIGVsc2UgY2FuIGFkZCBpdCBiYWNrLFxuLVx0ICogd2Ugd2lsbCB0byBhZGQgaXQgYmFjayBhdCB0aGUgZW5kIG9mIHJlY2xhaW0gdG8gaXRzIGNvcnJlY3Rcbi1cdCAqIHBvc2l0aW9uIGluIHRoZSB0cmVlLlxuLVx0ICovXG4tXHRfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdGlmICghc29mdF9saW1pdF9leGNlc3MobXotXHUwMDNlbWVtY2cpIHx8XG4tXHQgICAgIWNzc190cnlnZXQoXHUwMDI2bXotXHUwMDNlbWVtY2ctXHUwMDNlY3NzKSlcbi1cdFx0Z290byByZXRyeTtcbi1kb25lOlxuLVx0cmV0dXJuIG16O1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKlxuLW1lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUoc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eilcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXHRteiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZtY3R6LVx1MDAzZWxvY2spO1xuLVx0cmV0dXJuIG16O1xuLX1cbi1cbi1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxuLVx0XHRcdFx0ICAgcGdfZGF0YV90ICpwZ2RhdCxcbi1cdFx0XHRcdCAgIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZClcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqdmljdGltID0gTlVMTDtcbi1cdGludCB0b3RhbCA9IDA7XG4tXHRpbnQgbG9vcCA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2Vzcztcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHJlY2xhaW0gPSB7XG4tXHRcdC5wZ2RhdCA9IHBnZGF0LFxuLVx0fTtcbi1cbi1cdGV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpO1xuLVxuLVx0d2hpbGUgKDEpIHtcbi1cdFx0dmljdGltID0gbWVtX2Nncm91cF9pdGVyKHJvb3RfbWVtY2csIHZpY3RpbSwgXHUwMDI2cmVjbGFpbSk7XG4tXHRcdGlmICghdmljdGltKSB7XG4tXHRcdFx0bG9vcCYjNDM7JiM0Mzs7XG4tXHRcdFx0aWYgKGxvb3AgXHUwMDNlPSAyKSB7XG4tXHRcdFx0XHQvKlxuLVx0XHRcdFx0ICogSWYgd2UgaGF2ZSBub3QgYmVlbiBhYmxlIHRvIHJlY2xhaW1cbi1cdFx0XHRcdCAqIGFueXRoaW5nLCBpdCBtaWdodCBiZWNhdXNlIHRoZXJlIGFyZVxuLVx0XHRcdFx0ICogbm8gcmVjbGFpbWFibGUgcGFnZXMgdW5kZXIgdGhpcyBoaWVyYXJjaHlcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0aWYgKCF0b3RhbClcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHQvKlxuLVx0XHRcdFx0ICogV2Ugd2FudCB0byBkbyBtb3JlIHRhcmdldGVkIHJlY2xhaW0uXG4tXHRcdFx0XHQgKiBleGNlc3MgXHUwMDNlXHUwMDNlIDIgaXMgbm90IHRvIGV4Y2Vzc2l2ZSBzbyBhcyB0b1xuLVx0XHRcdFx0ICogcmVjbGFpbSB0b28gbXVjaCwgbm9yIHRvbyBsZXNzIHRoYXQgd2Uga2VlcFxuLVx0XHRcdFx0ICogY29taW5nIGJhY2sgdG8gcmVjbGFpbSBmcm9tIHRoaXMgY2dyb3VwXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGlmICh0b3RhbCBcdTAwM2U9IChleGNlc3MgXHUwMDNlXHUwMDNlIDIpIHx8XG4tXHRcdFx0XHRcdChsb29wIFx1MDAzZSBNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTKSlcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXHRcdHRvdGFsICYjNDM7PSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxuLVx0XHRcdFx0XHRwZ2RhdCwgXHUwMDI2bnJfc2Nhbm5lZCk7XG4tXHRcdCp0b3RhbF9zY2FubmVkICYjNDM7PSBucl9zY2FubmVkO1xuLVx0XHRpZiAoIXNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpKVxuLVx0XHRcdGJyZWFrO1xuLVx0fVxuLVx0bWVtX2Nncm91cF9pdGVyX2JyZWFrKHJvb3RfbWVtY2csIHZpY3RpbSk7XG4tXHRyZXR1cm4gdG90YWw7XG4tfVxuLVxuLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tXHRcdFx0XHRcdCAgICBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSAwO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LCAqbmV4dF9teiA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcbi1cdGludCBsb29wID0gMDtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2Vzcztcbi1cbi1cdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRpZiAob3JkZXIgXHUwMDNlIDApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuLVxuLVx0Lypcbi1cdCAqIERvIG5vdCBldmVuIGJvdGhlciB0byBjaGVjayB0aGUgbGFyZ2VzdCBub2RlIGlmIHRoZSByb290XG4tXHQgKiBpcyBlbXB0eS4gRG8gaXQgbG9ja2xlc3MgdG8gcHJldmVudCBsb2NrIGJvdW5jaW5nLiBSYWNlc1xuLVx0ICogYXJlIGFjY2VwdGFibGUgYXMgc29mdCBsaW1pdCBpcyBiZXN0IGVmZm9ydCBhbnl3YXkuXG4tXHQgKi9cbi1cdGlmICghbWN0eiB8fCBSQl9FTVBUWV9ST09UKFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0Lypcbi1cdCAqIFRoaXMgbG9vcCBjYW4gcnVuIGEgd2hpbGUsIHNwZWNpYWxseSBpZiBtZW1fY2dyb3VwJiMzOTtzIGNvbnRpbnVvdXNseVxuLVx0ICoga2VlcCBleGNlZWRpbmcgdGhlaXIgc29mdCBsaW1pdCBhbmQgcHV0dGluZyB0aGUgc3lzdGVtIHVuZGVyXG4tXHQgKiBwcmVzc3VyZVxuLVx0ICovXG4tXHRkbyB7XG4tXHRcdGlmIChuZXh0X216KVxuLVx0XHRcdG16ID0gbmV4dF9tejtcbi1cdFx0ZWxzZVxuLVx0XHRcdG16ID0gbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTtcbi1cdFx0aWYgKCFteilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0cmVjbGFpbWVkID0gbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0obXotXHUwMDNlbWVtY2csIHBnZGF0LFxuLVx0XHRcdFx0XHRcdCAgICBnZnBfbWFzaywgdG90YWxfc2Nhbm5lZCk7XG4tXHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuLVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIElmIHdlIGZhaWxlZCB0byByZWNsYWltIGFueXRoaW5nIGZyb20gdGhpcyBtZW1vcnkgY2dyb3VwXG4tXHRcdCAqIGl0IGlzIHRpbWUgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBjZ3JvdXBcbi1cdFx0ICovXG4tXHRcdG5leHRfbXogPSBOVUxMO1xuLVx0XHRpZiAoIXJlY2xhaW1lZClcbi1cdFx0XHRuZXh0X216ID0gX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopO1xuLVxuLVx0XHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhtei1cdTAwM2VtZW1jZyk7XG4tXHRcdC8qXG4tXHRcdCAqIE9uZSBzY2hvb2wgb2YgdGhvdWdodCBzYXlzIHRoYXQgd2Ugc2hvdWxkIG5vdCBhZGRcbi1cdFx0ICogYmFjayB0aGUgbm9kZSB0byB0aGUgdHJlZSBpZiByZWNsYWltIHJldHVybnMgMC5cbi1cdFx0ICogQnV0IG91ciByZWNsYWltIGNvdWxkIHJldHVybiAwLCBzaW1wbHkgYmVjYXVzZSBkdWVcbi1cdFx0ICogdG8gcHJpb3JpdHkgd2UgYXJlIGV4cG9zaW5nIGEgc21hbGxlciBzdWJzZXQgb2Zcbi1cdFx0ICogbWVtb3J5IHRvIHJlY2xhaW0gZnJvbS4gQ29uc2lkZXIgdGhpcyBhcyBhIGxvbmdlclxuLVx0XHQgKiB0ZXJtIFRPRE8uXG4tXHRcdCAqL1xuLVx0XHQvKiBJZiBleGNlc3MgPT0gMCwgbm8gdHJlZSBvcHMgKi9cbi1cdFx0X19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChteiwgbWN0eiwgZXhjZXNzKTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXHRcdGNzc19wdXQoXHUwMDI2bXotXHUwMDNlbWVtY2ctXHUwMDNlY3NzKTtcbi1cdFx0bG9vcCYjNDM7JiM0Mzs7XG4tXHRcdC8qXG4tXHRcdCAqIENvdWxkIG5vdCByZWNsYWltIGFueXRoaW5nIGFuZCB0aGVyZSBhcmUgbm8gbW9yZVxuLVx0XHQgKiBtZW0gY2dyb3VwcyB0byB0cnkgb3Igd2Ugc2VlbSB0byBiZSBsb29waW5nIHdpdGhvdXRcbi1cdFx0ICogcmVjbGFpbWluZyBhbnl0aGluZy5cbi1cdFx0ICovXG4tXHRcdGlmICghbnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNlxuLVx0XHRcdChuZXh0X216ID09IE5VTEwgfHxcbi1cdFx0XHRsb29wIFx1MDAzZSBNRU1fQ0dST1VQX01BWF9TT0ZUX0xJTUlUX1JFQ0xBSU1fTE9PUFMpKVxuLVx0XHRcdGJyZWFrO1xuLVx0fSB3aGlsZSAoIW5yX3JlY2xhaW1lZCk7XG4tXHRpZiAobmV4dF9teilcbi1cdFx0Y3NzX3B1dChcdTAwMjZuZXh0X216LVx1MDAzZW1lbWNnLVx1MDAzZWNzcyk7XG4tXHRyZXR1cm4gbnJfcmVjbGFpbWVkO1xuLX1cbi1cbiBzdGF0aWMgdTY0IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcmVhZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxuIFx0XHRcdFx0c3RydWN0IGNmdHlwZSAqY2Z0KVxuIHtcbkBAIC01MTEsNyAmIzQzOzE5Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdH1cbiB9XG4gXG4tLyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgXHUwMDI2IHNvZnRsaW1pdCB0cmVlIHVwZGF0ZXMgKi9cbiYjNDM7LyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgKi9cbiBcbiAvKlxuICAqIFBlciBtZW1jZyBldmVudCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IHBhZ2Vpbi9wYWdlb3V0LiBXaXRoIFRIUCxcbkBAIC01MTksMTUgJiM0MzsyMDAsOSBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RocmVzaG9sZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICogdG8gdHJpZ2dlciBzb21lIHBlcmlvZGljIGV2ZW50cy4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGJldHRlclxuICAqIHRoYW4gdXNpbmcgamlmZmllcyBldGMuIHRvIGhhbmRsZSBwZXJpb2RpYyBtZW1jZyBldmVudC5cbiAgKi9cbi1lbnVtIG1lbV9jZ3JvdXBfZXZlbnRzX3RhcmdldCB7XG4tXHRNRU1fQ0dST1VQX1RBUkdFVF9USFJFU0gsXG4tXHRNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQsXG4tXHRNRU1fQ0dST1VQX05UQVJHRVRTLFxuLX07XG4tXG4gc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1IHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZV9ldmVudHM7XG4tXHR1bnNpZ25lZCBsb25nIHRhcmdldHNbTUVNX0NHUk9VUF9OVEFSR0VUU107XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aHJlc2hvbGRfdGFyZ2V0O1xuIH07XG4gXG4gc3RhdGljIHZvaWQgbWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKVxuQEAgLTU0NCw1MyAmIzQzOzIxOSwyOSBAQCBzdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpXG4gfVxuIFxuICNkZWZpbmUgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUIDEyOFxuLSNkZWZpbmUgU09GVExJTUlUX0VWRU5UU19UQVJHRVQgMTAyNFxuIFxuLXN0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0ZW51bSBtZW1fY2dyb3VwX2V2ZW50c190YXJnZXQgdGFyZ2V0KVxuJiM0MztzdGF0aWMgYm9vbCBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHZhbCwgbmV4dDtcbiBcbiBcdHZhbCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZW5yX3BhZ2VfZXZlbnRzKTtcbi1cdG5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0YXJnZXRzW3RhcmdldF0pO1xuJiM0MztcdG5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0aHJlc2hvbGRfdGFyZ2V0KTtcbiBcdC8qIGZyb20gdGltZV9hZnRlcigpIGluIGppZmZpZXMuaCAqL1xuIFx0aWYgKChsb25nKShuZXh0IC0gdmFsKSBcdTAwM2MgMCkge1xuLVx0XHRzd2l0Y2ggKHRhcmdldCkge1xuLVx0XHRjYXNlIE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSDpcbi1cdFx0XHRuZXh0ID0gdmFsICYjNDM7IFRIUkVTSE9MRFNfRVZFTlRTX1RBUkdFVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQ6XG4tXHRcdFx0bmV4dCA9IHZhbCAmIzQzOyBTT0ZUTElNSVRfRVZFTlRTX1RBUkdFVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNldGFyZ2V0c1t0YXJnZXRdLCBuZXh0KTtcbiYjNDM7XHRcdF9fdGhpc19jcHVfd3JpdGUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0aHJlc2hvbGRfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdCB2YWwgJiM0MzsgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUKTtcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLS8qXG4tICogQ2hlY2sgZXZlbnRzIGluIG9yZGVyLlxuLSAqXG4tICovXG4tc3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4mIzQzO3N0YXRpYyB2b2lkIG1lbWNnMV9jaGVja19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogdGhyZXNob2xkIGV2ZW50IGlzIHRyaWdnZXJlZCBpbiBmaW5lciBncmFpbiB0aGFuIHNvZnQgbGltaXQgKi9cbi1cdGlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLFxuLVx0XHRcdFx0XHRcdE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCkpKSB7XG4tXHRcdGJvb2wgZG9fc29mdGxpbWl0O1xuLVxuLVx0XHRkb19zb2Z0bGltaXQgPSBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLFxuLVx0XHRcdFx0XHRcdE1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVCk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KG1lbWNnMV9ldmVudF9yYXRlbGltaXQobWVtY2cpKSlcbiBcdFx0bWVtX2Nncm91cF90aHJlc2hvbGQobWVtY2cpO1xuLVx0XHRpZiAodW5saWtlbHkoZG9fc29mdGxpbWl0KSlcbi1cdFx0XHRtZW1jZzFfdXBkYXRlX3RyZWUobWVtY2csIG5pZCk7XG4tXHR9XG4gfVxuIFxuIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuQEAgLTU5OSw3ICYjNDM7MjUwLDcgQEAgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gXHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4tXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcbiYjNDM7XHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG5AQCAtNjcyLDcgJiM0MzszMjMsNyBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiBcdFZNX1dBUk5fT05fSVJRU19FTkFCTEVEKCk7XG4gXHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIFx0cHJlZW1wdF9lbmFibGVfbmVzdGVkKCk7XG4tXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcbiYjNDM7XHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xuQEAgLTcyNiwxNCAmIzQzOzM3NywxNCBAQCB2b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiAjZW5kaWZcbiBcbiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcbi1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSwgaW50IG5pZClcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnkpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGNvdW50X21lbWNnX2V2ZW50cyhtZW1jZywgUEdQR09VVCwgcGdwZ291dCk7XG4gXHRfX3RoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZW5yX3BhZ2VfZXZlbnRzLCBucl9tZW1vcnkpO1xuLVx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgbmlkKTtcbiYjNDM7XHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG5AQCAtMjU2NiwyMiAmIzQzOzIyMTcsMyBAQCB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0ZnJlZV9wZXJjcHUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdSk7XG4gfVxuLVxuLXN0YXRpYyBpbnQgX19pbml0IG1lbWNnMV9pbml0KHZvaWQpXG4te1xuLVx0aW50IG5vZGU7XG4tXG4tXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcbi1cdFx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqcnRwbjtcbi1cbi1cdFx0cnRwbiA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKnJ0cG4pLCBHRlBfS0VSTkVMLCBub2RlKTtcbi1cbi1cdFx0cnRwbi1cdTAwM2VyYl9yb290ID0gUkJfUk9PVDtcbi1cdFx0cnRwbi1cdTAwM2VyYl9yaWdodG1vc3QgPSBOVUxMO1xuLVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZydHBuLVx1MDAzZWxvY2spO1xuLVx0XHRzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtub2RlXSA9IHJ0cG47XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tc3Vic3lzX2luaXRjYWxsKG1lbWNnMV9pbml0KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmhcbmluZGV4IDFlMzk0MjY5YzYxM2QuLmI5YTIxZjBmZDJjM2EgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuaFxuQEAgLTQxLDEyICYjNDM7NDEsNiBAQCBib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi12b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzb2Z0X2xpbWl0LCBQQUdFX0NPVU5URVJfTUFYKTtcbi19XG4gXG4gc3RydWN0IGNncm91cF90YXNrc2V0O1xuIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5AQCAtNjUsNyAmIzQzOzU5LDcgQEAgdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiBcbiB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gdm9pZCBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXG4tXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnksIGludCBuaWQpO1xuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7XG4gXG4gdm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcyk7XG4gdm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbkBAIC05OCw4ICYjNDM7OTIsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHsgcmV0dXJuIHRydWU7XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9tZW1jZ19pbml0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXG5AQCAtMTE1LDcgJiM0MzsxMDcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcbi1cdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKSB7fVxuJiM0MztcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcykge31cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IGJmZDBhNzRmYWM5MjMuLjMwNjM2YjlkOTY3MzkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTQyNTcsNyAmIzQzOzQyNTcsNiBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKG1lbWNnKTtcbiBcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xuLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xuICNpZmRlZiBDT05GSUdfWlNXQVBcbiBcdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG4gXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XG5AQCAtNDQyOSw3ICYjNDM7NDQyOCw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcbiBcdHZtcHJlc3N1cmVfY2xlYW51cChcdTAwMjZtZW1jZy1cdTAwM2V2bXByZXNzdXJlKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bWVtY2ctXHUwMDNlaGlnaF93b3JrKTtcbi1cdG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhtZW1jZyk7XG4gXHRmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpO1xuIFx0bWVtX2Nncm91cF9mcmVlKG1lbWNnKTtcbiB9XG5AQCAtNDQ2NSw3ICYjNDM7NDQ2Myw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRwYWdlX2NvdW50ZXJfc2V0X21pbihcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIDApO1xuIFx0cGFnZV9jb3VudGVyX3NldF9sb3coXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCAwKTtcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xuLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xuIFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xuIFx0bWVtY2dfd2JfZG9tYWluX3NpemVfY2hhbmdlZChtZW1jZyk7XG4gfVxuQEAgLTUzMzEsNyAmIzQzOzUzMjgsNiBAQCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5O1xuIFx0dW5zaWduZWQgbG9uZyBwZ3Bnb3V0O1xuIFx0dW5zaWduZWQgbG9uZyBucl9rbWVtO1xuLVx0aW50IG5pZDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmNoYXJnZV9nYXRoZXJfY2xlYXIoc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG5AQCAtNTM1NCw3ICYjNDM7NTM1MCw3IEBAIHN0YXRpYyB2b2lkIHVuY2hhcmdlX2JhdGNoKGNvbnN0IHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuIFx0XHRtZW1jZzFfb29tX3JlY292ZXIobWVtY2cpO1xuIFx0fVxuIFxuLVx0bWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy1cdTAwM2VwZ3Bnb3V0LCB1Zy1cdTAwM2Vucl9tZW1vcnksIHVnLVx1MDAzZW5pZCk7XG4mIzQzO1x0bWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy1cdTAwM2VwZ3Bnb3V0LCB1Zy1cdTAwM2Vucl9tZW1vcnkpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHQvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIHVuY2hhcmdlX2ZvbGlvICovXG5AQCAtNTM4Myw3ICYjNDM7NTM3OSw2IEBAIHN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuIFx0XHRcdHVuY2hhcmdlX2dhdGhlcl9jbGVhcih1Zyk7XG4gXHRcdH1cbiBcdFx0dWctXHUwMDNlb2JqY2cgPSBvYmpjZztcbi1cdFx0dWctXHUwMDNlbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbiBcbiBcdFx0LyogcGFpcnMgd2l0aCBvYmpfY2dyb3VwX3B1dCBpbiB1bmNoYXJnZV9iYXRjaCAqL1xuIFx0XHRvYmpfY2dyb3VwX2dldChvYmpjZyk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmRkMTMyOTlhMDRhOS4uZGViMDg3YzU3MDA3ZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTQzNzMsNyAmIzQzOzQzNzMsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gLyogc2VlIHRoZSBjb21tZW50IG9uIE1FTUNHX05SX0dFTlMgKi9cbiBlbnVtIHtcbiBcdE1FTUNHX0xSVV9OT1AsXG4tXHRNRU1DR19MUlVfSEVBRCxcbiBcdE1FTUNHX0xSVV9UQUlMLFxuIFx0TUVNQ0dfTFJVX09MRCxcbiBcdE1FTUNHX0xSVV9ZT1VORyxcbkBAIC00Mzk1LDkgJiM0Mzs0Mzk0LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4gXHRuZXcgPSBvbGQgPSBscnV2ZWMtXHUwMDNlbHJ1Z2VuLmdlbjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXG4tXHRpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQpXG4tXHRcdHNlZyA9IE1FTUNHX0xSVV9IRUFEO1xuLVx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpXG4mIzQzO1x0aWYgKG9wID09IE1FTUNHX0xSVV9UQUlMKVxuIFx0XHRzZWcgPSBNRU1DR19MUlVfVEFJTDtcbiBcdGVsc2UgaWYgKG9wID09IE1FTUNHX0xSVV9PTEQpXG4gXHRcdG5ldyA9IGdldF9tZW1jZ19nZW4ocGdkYXQtXHUwMDNlbWVtY2dfbHJ1LnNlcSk7XG5AQCAtNDQxMSw3ICYjNDM7NDQwOCw3IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuIFxuIFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QpO1xuIFxuLVx0aWYgKG9wID09IE1FTUNHX0xSVV9IRUFEIHx8IG9wID09IE1FTUNHX0xSVV9PTEQpXG4mIzQzO1x0aWYgKG9wID09IE1FTUNHX0xSVV9PTEQpXG4gXHRcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QsIFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XG4gXHRlbHNlXG4gXHRcdGhsaXN0X251bGxzX2FkZF90YWlsX3JjdShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QsIFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XG5AQCAtNDQ4OSwxNSAmIzQzOzQ0ODYsNiBAQCB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHR9XG4gfVxuIFxuLXZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLXtcbi1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG4tXG4tXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xuLVx0aWYgKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpXG4tXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xuLX1cbi1cbiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuIHtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG5AQCAtNjQzOSw4ICYjNDM7NjQyNyw2IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3Qgem9uZXJlZiAqejtcbiBcdHN0cnVjdCB6b25lICp6b25lO1xuLVx0dW5zaWduZWQgbG9uZyBucl9zb2Z0X3JlY2xhaW1lZDtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9zY2FubmVkO1xuIFx0Z2ZwX3Qgb3JpZ19tYXNrO1xuIFx0cGdfZGF0YV90ICpsYXN0X3BnZGF0ID0gTlVMTDtcbiBcdHBnX2RhdGFfdCAqZmlyc3RfcGdkYXQgPSBOVUxMO1xuQEAgLTY0ODIsMzUgJiM0Mzs2NDY4LDE3IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdFx0XHRcdHNjLVx1MDAzZWNvbXBhY3Rpb25fcmVhZHkgPSB0cnVlO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlXG4tXHRcdFx0ICogem9uZWxpc3QgaXMgb3JkZXJlZCBieSB6b25lIChub3QgdGhlIGRlZmF1bHQpIHRoZW4gYVxuLVx0XHRcdCAqIG5vZGUgbWF5IGJlIHNocnVuayBtdWx0aXBsZSB0aW1lcyBidXQgaW4gdGhhdCBjYXNlXG4tXHRcdFx0ICogdGhlIHVzZXIgcHJlZmVycyBsb3dlciB6b25lcyBiZWluZyBwcmVzZXJ2ZWQuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUaGlzIHN0ZWFscyBwYWdlcyBmcm9tIG1lbW9yeSBjZ3JvdXBzIG92ZXIgc29mdGxpbWl0XG4tXHRcdFx0ICogYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXMgYW5kXG4tXHRcdFx0ICogc2Nhbm5lZCBwYWdlcy4gVGhpcyB3b3JrcyBmb3IgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZVxuLVx0XHRcdCAqIGFuZCBiYWxhbmNpbmcsIG5vdCBmb3IgYSBtZW1jZyYjMzk7cyBsaW1pdC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRucl9zb2Z0X3NjYW5uZWQgPSAwO1xuLVx0XHRcdG5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbSh6b25lLVx1MDAzZXpvbmVfcGdkYXQsXG4tXHRcdFx0XHRcdFx0XHRcdCAgICAgIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnJfc29mdF9zY2FubmVkKTtcbi1cdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IG5yX3NvZnRfcmVjbGFpbWVkO1xuLVx0XHRcdHNjLVx1MDAzZW5yX3NjYW5uZWQgJiM0Mzs9IG5yX3NvZnRfc2Nhbm5lZDtcbi1cdFx0XHQvKiBuZWVkIHNvbWUgY2hlY2sgZm9yIGF2b2lkIG1vcmUgc2hyaW5rX3pvbmUoKSAqL1xuIFx0XHR9XG4gXG4gXHRcdGlmICghZmlyc3RfcGdkYXQpXG4gXHRcdFx0Zmlyc3RfcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG4gXG4tXHRcdC8qIFNlZSBjb21tZW50IGFib3V0IHNhbWUgY2hlY2sgZm9yIGdsb2JhbCByZWNsYWltIGFib3ZlICovXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlIHpvbmVsaXN0IGlzXG4mIzQzO1x0XHQgKiBvcmRlcmVkIGJ5IHpvbmUgKG5vdCB0aGUgZGVmYXVsdCkgdGhlbiBhIG5vZGUgbWF5IGJlIHNocnVua1xuJiM0MztcdFx0ICogbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZSB0aGUgdXNlciBwcmVmZXJzIGxvd2VyIHpvbmVzXG4mIzQzO1x0XHQgKiBiZWluZyBwcmVzZXJ2ZWQuXG4mIzQzO1x0XHQgKi9cbiBcdFx0aWYgKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRsYXN0X3BnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xuQEAgLTY4MjUsNDcgJiM0Mzs2NzkzLDYgQEAgdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4gXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFxuLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi1cdFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpXG4te1xuLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG4tXHRcdC5ucl90b19yZWNsYWltID0gU1dBUF9DTFVTVEVSX01BWCxcbi1cdFx0LnRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2csXG4tXHRcdC5tYXlfd3JpdGVwYWdlID0gMSxcbi1cdFx0Lm1heV91bm1hcCA9IDEsXG4tXHRcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXG4tXHRcdC5tYXlfc3dhcCA9ICFub3N3YXAsXG4tXHR9O1xuLVxuLVx0V0FSTl9PTl9PTkNFKCFjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUpO1xuLVxuLVx0c2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcbi1cdFx0XHQoR0ZQX0hJR0hVU0VSX01PVkFCTEUgXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKTtcbi1cbi1cdHRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbihzYy5nZnBfbWFzayxcbi1cdFx0XHRcdFx0XHQgICAgICBzYy5vcmRlcixcbi1cdFx0XHRcdFx0XHQgICAgICBtZW1jZyk7XG4tXG4tXHQvKlxuLVx0ICogTk9URTogQWx0aG91Z2ggd2UgY2FuIGdldCB0aGUgcHJpb3JpdHkgZmllbGQsIHVzaW5nIGl0XG4tXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbi1cdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbi1cdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAmIzM5O3MgYXMgd2VsbC4gV2UgaGFja1xuLVx0ICogdGhlIHByaW9yaXR5IGFuZCBtYWtlIGl0IHplcm8uXG4tXHQgKi9cbi1cdHNocmlua19scnV2ZWMobHJ1dmVjLCBcdTAwMjZzYyk7XG4tXG4tXHR0cmFjZV9tbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fZW5kKHNjLm5yX3JlY2xhaW1lZCwgbWVtY2cpO1xuLVxuLVx0Km5yX3NjYW5uZWQgPSBzYy5ucl9zY2FubmVkO1xuLVxuLVx0cmV0dXJuIHNjLm5yX3JlY2xhaW1lZDtcbi19XG4tXG4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXG5AQCAtNzE3MSw4ICYjNDM7NzA5OCw2IEBAIGNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gc3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiB7XG4gXHRpbnQgaTtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3NvZnRfc2Nhbm5lZDtcbiBcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBucl9ib29zdF9yZWNsYWltO1xuIFx0dW5zaWduZWQgbG9uZyB6b25lX2Jvb3N0c1tNQVhfTlJfWk9ORVNdID0geyAwLCB9O1xuQEAgLTcyNzgsMTIgJiM0Mzs3MjAzLDcgQEAgc3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiBcdFx0ICovXG4gXHRcdGtzd2FwZF9hZ2Vfbm9kZShwZ2RhdCwgXHUwMDI2c2MpO1xuIFxuLVx0XHQvKiBDYWxsIHNvZnQgbGltaXQgcmVjbGFpbSBiZWZvcmUgY2FsbGluZyBzaHJpbmtfbm9kZS4gKi9cbiBcdFx0c2MubnJfc2Nhbm5lZCA9IDA7XG4tXHRcdG5yX3NvZnRfc2Nhbm5lZCA9IDA7XG4tXHRcdG5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ2RhdCwgc2Mub3JkZXIsXG4tXHRcdFx0XHRcdFx0XHQgICAgICBzYy5nZnBfbWFzaywgXHUwMDI2bnJfc29mdF9zY2FubmVkKTtcbi1cdFx0c2MubnJfcmVjbGFpbWVkICYjNDM7PSBucl9zb2Z0X3JlY2xhaW1lZDtcbiBcbiBcdFx0LypcbiBcdFx0ICogVGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8gcmFpc2UgdGhlIHNjYW5uaW5nIHByaW9yaXR5IGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZCYjMzQ7LAogICAgJiMzNDttZW1jZzFfdW5jaGFyZ2VfYmF0Y2gmIzM0OywKICAgICYjMzQ7bWVtY2cxX2NvbW1pdF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JvdGF0ZV9tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZhMGRhY2RkOTU2ZGVmNzRlZTAwNjA1MWVkODY5MmQ5NWQ1OWJiYzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjQyOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBkYTYyNWQyZWRiM2JhLi5jNzk5OTI2NDM1NTYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtOTUsMjAgJiM0Mzs5NSw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAlzdHJ1Y3QgbHJ1dmVjX3N0YXRzCQkJKmxydXZlY19zdGF0czsKIAlzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyBfX3JjdQkqc2hyaW5rZXJfaW5mbzsKIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQotCS8qCi0JICogTWVtY2ctdjEgb25seSBzdHVmZiBpbiBtaWRkbGUgYXMgYnVmZmVyIGJldHdlZW4gcmVhZCBtb3N0bHkgZmllbGRzCi0JICogYW5kIHVwZGF0ZSBvZnRlbiBmaWVsZHMgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZy4gSWYgdjEgc3R1ZmYgaXMKLQkgKiBub3QgcHJlc2VudCwgYW4gZXhwbGljaXQgcGFkZGluZyBpcyBuZWVkZWQuCi0JICovCi0KLQlzdHJ1Y3QgcmJfbm9kZQkJdHJlZV9ub2RlOwkvKiBSQiB0cmVlIG5vZGUgKi8KLQl1bnNpZ25lZCBsb25nCQl1c2FnZV9pbl9leGNlc3M7LyogU2V0IHRvIHRoZSB2YWx1ZSBieSB3aGljaCAqLwotCQkJCQkJLyogdGhlIHNvZnQgbGltaXQgaXMgZXhjZWVkZWQqLwotCWJvb2wJCQlvbl90cmVlOwotI2Vsc2UKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMV8pOwotI2VuZGlmCiAKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CkBAIC0yOTMsOCAmIzQzOzI4MCw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHsKIAogCXN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSBfX3BlcmNwdSAqZXZlbnRzX3BlcmNwdTsKIAotCXVuc2lnbmVkIGxvbmcgc29mdF9saW1pdDsKLQogCS8qIHByb3RlY3RlZCBieSBtZW1jZ19vb21fbG9jayAqLwogCWJvb2wgb29tX2xvY2s7CiAJaW50IHVuZGVyX29vbTsKQEAgLTE5MjQsMTAgJiM0MzsxOTA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogLyogQ2dyb3VwIHYxLXJlbGF0ZWQgZGVjbGFyYXRpb25zICovCiAKICNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsCi0JCQkJCWdmcF90IGdmcF9tYXNrLAotCQkJCQl1bnNpZ25lZCBsb25nICp0b3RhbF9zY2FubmVkKTsKLQogYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMTk0OCwxNCAmIzQzOzE5MjksNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZCkKIH0KIAogI2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovCi1zdGF0aWMgaW5saW5lCi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLAotCQkJCQlnZnBfdCBnZnBfbWFzaywKLQkJCQkJdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA2N2M4NGE4YTcyNTgzLi44NGUyMzdmMmMxN2RiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTYzOCwzNSAmIzQzOzYzOCwzMiBAQCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHsKICAqIEZvciBlYWNoIG5vZGUsIG1lbWNncyBhcmUgZGl2aWRlZCBpbnRvIHR3byBnZW5lcmF0aW9uczogdGhlIG9sZCBhbmQgdGhlCiAgKiB5b3VuZy4gRm9yIGVhY2ggZ2VuZXJhdGlvbiwgbWVtY2dzIGFyZSByYW5kb21seSBzaGFyZGVkIGludG8gbXVsdGlwbGUgYmlucwogICogdG8gaW1wcm92ZSBzY2FsYWJpbGl0eS4gRm9yIGVhY2ggYmluLCB0aGUgaGxpc3RfbnVsbHMgaXMgdmlydHVhbGx5IGRpdmlkZWQKLSAqIGludG8gdGhyZWUgc2VnbWVudHM6IHRoZSBoZWFkLCB0aGUgdGFpbCBhbmQgdGhlIGRlZmF1bHQuCiYjNDM7ICogaW50byB0d28gc2VnbWVudHM6IHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC4KICAqCiAgKiBBbiBvbmxpbmluZyBtZW1jZyBpcyBhZGRlZCB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLgogICogVGhlIGV2aWN0aW9uIHN0YXJ0cyBhdCB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLiBUaGUKICAqIHBlci1ub2RlIG1lbWNnIGdlbmVyYXRpb24gY291bnRlciwgd2hvc2UgcmVtaW5kZXIgKG1vZCBNRU1DR19OUl9HRU5TKSBpbmRleGVzCiAgKiB0aGUgb2xkIGdlbmVyYXRpb24sIGlzIGluY3JlbWVudGVkIHdoZW4gYWxsIGl0cyBiaW5zIGJlY29tZSBlbXB0eS4KICAqCi0gKiBUaGVyZSBhcmUgZm91ciBvcGVyYXRpb25zOgotICogMS4gTUVNQ0dfTFJVX0hFQUQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIGl0cwotICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyAmIzM0O3NlZyYjMzQ7IHRvICYjMzQ7aGVhZCYjMzQ7OwotICogMi4gTUVNQ0dfTFJVX1RBSUwsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIHRhaWwgb2YgYSByYW5kb20gYmluIGluIGl0cwomIzQzOyAqIFRoZXJlIGFyZSB0aHJlZSBvcGVyYXRpb25zOgomIzQzOyAqIDEuIE1FTUNHX0xSVV9UQUlMLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHMKICAqICAgIGN1cnJlbnQgZ2VuZXJhdGlvbiAob2xkIG9yIHlvdW5nKSBhbmQgdXBkYXRlcyBpdHMgJiMzNDtzZWcmIzM0OyB0byAmIzM0O3RhaWwmIzM0OzsKLSAqIDMuIE1FTUNHX0xSVV9PTEQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGQKJiM0MzsgKiAyLiBNRU1DR19MUlVfT0xELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkCiAgKiAgICBnZW5lcmF0aW9uLCB1cGRhdGVzIGl0cyAmIzM0O2dlbiYjMzQ7IHRvICYjMzQ7b2xkJiMzNDsgYW5kIHJlc2V0cyBpdHMgJiMzNDtzZWcmIzM0OyB0byAmIzM0O2RlZmF1bHQmIzM0OzsKLSAqIDQuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlCiYjNDM7ICogMy4gTUVNQ0dfTFJVX1lPVU5HLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUKICAqICAgIHlvdW5nIGdlbmVyYXRpb24sIHVwZGF0ZXMgaXRzICYjMzQ7Z2VuJiMzNDsgdG8gJiMzNDt5b3VuZyYjMzQ7IGFuZCByZXNldHMgaXRzICYjMzQ7c2VnJiMzNDsgdG8KICAqICAgICYjMzQ7ZGVmYXVsdCYjMzQ7LgogICoKICAqIFRoZSBldmVudHMgdGhhdCB0cmlnZ2VyIHRoZSBhYm92ZSBvcGVyYXRpb25zIGFyZToKLSAqIDEuIEV4Y2VlZGluZyB0aGUgc29mdCBsaW1pdCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX0hFQUQ7Ci0gKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbG93LCB3aGljaCB0cmlnZ2VycwomIzQzOyAqIDEuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzCiAgKiAgICBNRU1DR19MUlVfVEFJTDsKLSAqIDMuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplCiYjNDM7ICogMi4gVGhlIGZpcnN0IGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1RBSUw7Ci0gKiA0LiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKJiM0MzsgKiAzLiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HOwotICogNS4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7Ci0gKiA2LiBGaW5pc2hpbmcgdGhlIGFnaW5nIG9uIHRoZSBldmljdGlvbiBwYXRoLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7Ci0gKiA3LiBPZmZsaW5pbmcgYSBtZW1jZywgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX09MRC4KJiM0MzsgKiA0LiBBdHRlbXB0aW5nIHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBtaW4sIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORzsKJiM0MzsgKiA1LiBGaW5pc2hpbmcgdGhlIGFnaW5nIG9uIHRoZSBldmljdGlvbiBwYXRoLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7CiYjNDM7ICogNi4gT2ZmbGluaW5nIGEgbWVtY2csIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9PTEQuCiAgKgogICogTm90ZXM6CiAgKiAxLiBNZW1jZyBMUlUgb25seSBhcHBsaWVzIHRvIGdsb2JhbCByZWNsYWltLCBhbmQgdGhlIHJvdW5kLXJvYmluIGluY3JlbWVudGluZwpAQCAtNjk5LDcgJiM0Mzs2OTYsNiBAQCB2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogdm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogdm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7Ci12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7CiB2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7CiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTsKIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpOwpAQCAtNzQwLDEwICYjNDM7NzM2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCi17Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCmluZGV4IGI0YmY3YjhkZWYxZjUuLjhhODcyOTkwYjRiZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCkBAIC0yMTQsMTMgJiM0MzsyMTQsNiBAQCBERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9iZQogCiAJVFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZykKICk7Ci0KLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbiwKLQotCVRQX1BST1RPKGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLAotCi0JVFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZykKLSk7CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKIERFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwKQEAgLTI2MCwxMyAmIzQzOzI1Myw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsCiAKIAlUUF9BUkdTKG5yX3JlY2xhaW1lZCwgbWVtY2cpCiApOwotCi1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZCwKLQotCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLAotCi0JVFBfQVJHUyhucl9yZWNsYWltZWQsIG1lbWNnKQotKTsKICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi8KIAogVFJBQ0VfRVZFTlQobW1fc2hyaW5rX3NsYWJfc3RhcnQsCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA1Y2MyMjBkYjkwNzY2Li5lMTZmMTI1MGIyNWM4IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTc4LDEwICYjNDM7NzgsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQkgICBnZnBfdCBnZnBfbWFzaywKIAkJCQkJICAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucywKIAkJCQkJICAgaW50ICpzd2FwcGluZXNzKTsKLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsCi0JCQkJICAgICBwZ19kYXRhX3QgKnBnZGF0LAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCk7CiAKICNpZmRlZiBDT05GSUdfTlVNQQogZXh0ZXJuIGludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jCmluZGV4IDA1ZWY1NWNhZTRkYzYuLmJmMmM3ZDUzYjAxYjEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmMKQEAgLTE3LDMwICYjNDM7MTcsNiBAQAogI2luY2x1ZGUgJiMzNDtzd2FwX3RhYmxlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttZW1jb250cm9sLXYxLmgmIzM0OwogCi0vKgotICogQ2dyb3VwcyBhYm92ZSB0aGVpciBsaW1pdHMgYXJlIG1haW50YWluZWQgaW4gYSBSQi1UcmVlLCBpbmRlcGVuZGVudCBvZgotICogdGhlaXIgaGllcmFyY2h5IHJlcHJlc2VudGF0aW9uCi0gKi8KLQotc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSB7Ci0Jc3RydWN0IHJiX3Jvb3QgcmJfcm9vdDsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmJfcmlnaHRtb3N0OwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KLXN0cnVjdCBtZW1fY2dyb3VwX3RyZWUgewotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKnJiX3RyZWVfcGVyX25vZGVbTUFYX05VTU5PREVTXTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlIHNvZnRfbGltaXRfdHJlZSBfX3JlYWRfbW9zdGx5OwotCi0vKgotICogTWF4aW11bSBsb29wcyBpbiBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbSgpLCB1c2VkIGZvciBzb2Z0Ci0gKiBsaW1pdCByZWNsYWltIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMsIGlmIHRoZXkgZXZlciBvY2N1ci4KLSAqLwotI2RlZmluZQlNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTCQkxMDAKLSNkZWZpbmUJTUVNX0NHUk9VUF9NQVhfU09GVF9MSU1JVF9SRUNMQUlNX0xPT1BTCTIKLQogLyogZm9yIE9PTSAqLwogc3RydWN0IG1lbV9jZ3JvdXBfZXZlbnRmZF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0xMDYsMzAxICYjNDM7ODIsNiBAQCBzdGF0aWMgc3RydWN0IGxvY2tkZXBfbWFwIG1lbWNnX29vbV9sb2NrX2RlcF9tYXAgPSB7CiAKIERFRklORV9TUElOTE9DSyhtZW1jZ19vb21fbG9jayk7CiAKLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LAotCQkJCQkgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eiwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgbmV3X3VzYWdlX2luX2V4Y2VzcykKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmYW1wO21jdHotJmd0O3JiX3Jvb3QucmJfbm9kZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXpfbm9kZTsKLQlib29sIHJpZ2h0bW9zdCA9IHRydWU7Ci0KLQlpZiAobXotJmd0O29uX3RyZWUpCi0JCXJldHVybjsKLQotCW16LSZndDt1c2FnZV9pbl9leGNlc3MgPSBuZXdfdXNhZ2VfaW5fZXhjZXNzOwotCWlmICghbXotJmd0O3VzYWdlX2luX2V4Y2VzcykKLQkJcmV0dXJuOwotCXdoaWxlICgqcCkgewotCQlwYXJlbnQgPSAqcDsKLQkJbXpfbm9kZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsCi0JCQkJCXRyZWVfbm9kZSk7Ci0JCWlmIChtei0mZ3Q7dXNhZ2VfaW5fZXhjZXNzICZsdDsgbXpfbm9kZS0mZ3Q7dXNhZ2VfaW5fZXhjZXNzKSB7Ci0JCQlwID0gJmFtcDsoKnApLSZndDtyYl9sZWZ0OwotCQkJcmlnaHRtb3N0ID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlwID0gJmFtcDsoKnApLSZndDtyYl9yaWdodDsKLQkJfQotCX0KLQotCWlmIChyaWdodG1vc3QpCi0JCW1jdHotJmd0O3JiX3JpZ2h0bW9zdCA9ICZhbXA7bXotJmd0O3RyZWVfbm9kZTsKLQotCXJiX2xpbmtfbm9kZSgmYW1wO216LSZndDt0cmVlX25vZGUsIHBhcmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZhbXA7bXotJmd0O3RyZWVfbm9kZSwgJmFtcDttY3R6LSZndDtyYl9yb290KTsKLQltei0mZ3Q7b25fdHJlZSA9IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LAotCQkJCQkgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eikKLXsKLQlpZiAoIW16LSZndDtvbl90cmVlKQotCQlyZXR1cm47Ci0KLQlpZiAoJmFtcDttei0mZ3Q7dHJlZV9ub2RlID09IG1jdHotJmd0O3JiX3JpZ2h0bW9zdCkKLQkJbWN0ei0mZ3Q7cmJfcmlnaHRtb3N0ID0gcmJfcHJldigmYW1wO216LSZndDt0cmVlX25vZGUpOwotCi0JcmJfZXJhc2UoJmFtcDttei0mZ3Q7dHJlZV9ub2RlLCAmYW1wO21jdHotJmd0O3JiX3Jvb3QpOwotCW16LSZndDtvbl90cmVlID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteiwKLQkJCQkgICAgICAgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3R6LSZndDtsb2NrLCBmbGFncyk7Ci0JX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHotJmd0O2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc29mdF9saW1pdF9leGNlc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBwYWdlX2NvdW50ZXJfcmVhZCgmYW1wO21lbWNnLSZndDttZW1vcnkpOwotCXVuc2lnbmVkIGxvbmcgc29mdF9saW1pdCA9IFJFQURfT05DRShtZW1jZy0mZ3Q7c29mdF9saW1pdCk7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3MgPSAwOwotCi0JaWYgKG5yX3BhZ2VzICZndDsgc29mdF9saW1pdCkKLQkJZXhjZXNzID0gbnJfcGFnZXMgLSBzb2Z0X2xpbWl0OwotCi0JcmV0dXJuIGV4Y2VzczsKLX0KLQotc3RhdGljIHZvaWQgbWVtY2cxX3VwZGF0ZV90cmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGV4Y2VzczsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejsKLQotCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgewotCQlpZiAoc29mdF9saW1pdF9leGNlc3MobWVtY2cpKQotCQkJbHJ1X2dlbl9zb2Z0X3JlY2xhaW0obWVtY2csIG5pZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbmlkXTsKLQlpZiAoIW1jdHopCi0JCXJldHVybjsKLQkvKgotCSAqIE5lY2Vzc2FyeSB0byB1cGRhdGUgYWxsIGFuY2VzdG9ycyB3aGVuIGhpZXJhcmNoeSBpcyB1c2VkLgotCSAqIGJlY2F1c2UgdGhlaXIgZXZlbnQgY291bnRlciBpcyBub3QgdG91Y2hlZC4KLQkgKi8KLQlmb3IgKDsgbWVtY2c7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSB7Ci0JCW16ID0gbWVtY2ctJmd0O25vZGVpbmZvW25pZF07Ci0JCWV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKG1lbWNnKTsKLQkJLyoKLQkJICogV2UgaGF2ZSB0byB1cGRhdGUgdGhlIHRyZWUgaWYgbXogaXMgb24gUkItdHJlZSBvcgotCQkgKiBtZW0gaXMgb3ZlciBpdHMgc29mdGxpbWl0LgotCQkgKi8KLQkJaWYgKGV4Y2VzcyB8fCBtei0mZ3Q7b25fdHJlZSkgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3R6LSZndDtsb2NrLCBmbGFncyk7Ci0JCQkvKiBpZiBvbi10cmVlLCByZW1vdmUgaXQgKi8KLQkJCWlmIChtei0mZ3Q7b25fdHJlZSkKLQkJCQlfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTsKLQkJCS8qCi0JCQkgKiBJbnNlcnQgYWdhaW4uIG16LSZndDt1c2FnZV9pbl9leGNlc3Mgd2lsbCBiZSB1cGRhdGVkLgotCQkJICogSWYgZXhjZXNzIGlzIDAsIG5vIHRyZWUgb3BzLgotCQkJICovCi0JCQlfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG16LCBtY3R6LCBleGNlc3MpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHotJmd0O2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KLX0KLQotdm9pZCBtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCWludCBuaWQ7Ci0KLQlmb3JfZWFjaF9ub2RlKG5pZCkgewotCQlteiA9IG1lbWNnLSZndDtub2RlaW5mb1tuaWRdOwotCQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbmlkXTsKLQkJaWYgKG1jdHopCi0JCQltZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKgotX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCi1yZXRyeToKLQlteiA9IE5VTEw7Ci0JaWYgKCFtY3R6LSZndDtyYl9yaWdodG1vc3QpCi0JCWdvdG8gZG9uZTsJCS8qIE5vdGhpbmcgdG8gcmVjbGFpbSBmcm9tICovCi0KLQlteiA9IHJiX2VudHJ5KG1jdHotJmd0O3JiX3JpZ2h0bW9zdCwKLQkJICAgICAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIHRyZWVfbm9kZSk7Ci0JLyoKLQkgKiBSZW1vdmUgdGhlIG5vZGUgbm93IGJ1dCBzb21lb25lIGVsc2UgY2FuIGFkZCBpdCBiYWNrLAotCSAqIHdlIHdpbGwgdG8gYWRkIGl0IGJhY2sgYXQgdGhlIGVuZCBvZiByZWNsYWltIHRvIGl0cyBjb3JyZWN0Ci0JICogcG9zaXRpb24gaW4gdGhlIHRyZWUuCi0JICovCi0JX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0JaWYgKCFzb2Z0X2xpbWl0X2V4Y2Vzcyhtei0mZ3Q7bWVtY2cpIHx8Ci0JICAgICFjc3NfdHJ5Z2V0KCZhbXA7bXotJmd0O21lbWNnLSZndDtjc3MpKQotCQlnb3RvIHJldHJ5OwotZG9uZToKLQlyZXR1cm4gbXo7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqCi1tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCW16ID0gX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopOwotCXNwaW5fdW5sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCXJldHVybiBtejsKLX0KLQotc3RhdGljIGludCBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZywKLQkJCQkgICBwZ19kYXRhX3QgKnBnZGF0LAotCQkJCSAgIGdmcF90IGdmcF9tYXNrLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKnZpY3RpbSA9IE5VTEw7Ci0JaW50IHRvdGFsID0gMDsKLQlpbnQgbG9vcCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3M7Ci0JdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwotCXN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHJlY2xhaW0gPSB7Ci0JCS5wZ2RhdCA9IHBnZGF0LAotCX07Ci0KLQlleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhyb290X21lbWNnKTsKLQotCXdoaWxlICgxKSB7Ci0JCXZpY3RpbSA9IG1lbV9jZ3JvdXBfaXRlcihyb290X21lbWNnLCB2aWN0aW0sICZhbXA7cmVjbGFpbSk7Ci0JCWlmICghdmljdGltKSB7Ci0JCQlsb29wJiM0MzsmIzQzOzsKLQkJCWlmIChsb29wICZndDs9IDIpIHsKLQkJCQkvKgotCQkJCSAqIElmIHdlIGhhdmUgbm90IGJlZW4gYWJsZSB0byByZWNsYWltCi0JCQkJICogYW55dGhpbmcsIGl0IG1pZ2h0IGJlY2F1c2UgdGhlcmUgYXJlCi0JCQkJICogbm8gcmVjbGFpbWFibGUgcGFnZXMgdW5kZXIgdGhpcyBoaWVyYXJjaHkKLQkJCQkgKi8KLQkJCQlpZiAoIXRvdGFsKQotCQkJCQlicmVhazsKLQkJCQkvKgotCQkJCSAqIFdlIHdhbnQgdG8gZG8gbW9yZSB0YXJnZXRlZCByZWNsYWltLgotCQkJCSAqIGV4Y2VzcyAmZ3Q7Jmd0OyAyIGlzIG5vdCB0byBleGNlc3NpdmUgc28gYXMgdG8KLQkJCQkgKiByZWNsYWltIHRvbyBtdWNoLCBub3IgdG9vIGxlc3MgdGhhdCB3ZSBrZWVwCi0JCQkJICogY29taW5nIGJhY2sgdG8gcmVjbGFpbSBmcm9tIHRoaXMgY2dyb3VwCi0JCQkJICovCi0JCQkJaWYgKHRvdGFsICZndDs9IChleGNlc3MgJmd0OyZndDsgMikgfHwKLQkJCQkJKGxvb3AgJmd0OyBNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTKSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQl0b3RhbCAmIzQzOz0gbWVtX2Nncm91cF9zaHJpbmtfbm9kZSh2aWN0aW0sIGdmcF9tYXNrLCBmYWxzZSwKLQkJCQkJcGdkYXQsICZhbXA7bnJfc2Nhbm5lZCk7Ci0JCSp0b3RhbF9zY2FubmVkICYjNDM7PSBucl9zY2FubmVkOwotCQlpZiAoIXNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpKQotCQkJYnJlYWs7Ci0JfQotCW1lbV9jZ3JvdXBfaXRlcl9icmVhayhyb290X21lbWNnLCB2aWN0aW0pOwotCXJldHVybiB0b3RhbDsKLX0KLQotdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwKLQkJCQkJICAgIGdmcF90IGdmcF9tYXNrLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCkKLXsKLQl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCA9IDA7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LCAqbmV4dF9teiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyByZWNsYWltZWQ7Ci0JaW50IGxvb3AgPSAwOwotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3M7Ci0KLQlpZiAobHJ1X2dlbl9lbmFibGVkKCkpCi0JCXJldHVybiAwOwotCi0JaWYgKG9yZGVyICZndDsgMCkKLQkJcmV0dXJuIDA7Ci0KLQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbcGdkYXQtJmd0O25vZGVfaWRdOwotCi0JLyoKLQkgKiBEbyBub3QgZXZlbiBib3RoZXIgdG8gY2hlY2sgdGhlIGxhcmdlc3Qgbm9kZSBpZiB0aGUgcm9vdAotCSAqIGlzIGVtcHR5LiBEbyBpdCBsb2NrbGVzcyB0byBwcmV2ZW50IGxvY2sgYm91bmNpbmcuIFJhY2VzCi0JICogYXJlIGFjY2VwdGFibGUgYXMgc29mdCBsaW1pdCBpcyBiZXN0IGVmZm9ydCBhbnl3YXkuCi0JICovCi0JaWYgKCFtY3R6IHx8IFJCX0VNUFRZX1JPT1QoJmFtcDttY3R6LSZndDtyYl9yb290KSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFRoaXMgbG9vcCBjYW4gcnVuIGEgd2hpbGUsIHNwZWNpYWxseSBpZiBtZW1fY2dyb3VwJiMzOTtzIGNvbnRpbnVvdXNseQotCSAqIGtlZXAgZXhjZWVkaW5nIHRoZWlyIHNvZnQgbGltaXQgYW5kIHB1dHRpbmcgdGhlIHN5c3RlbSB1bmRlcgotCSAqIHByZXNzdXJlCi0JICovCi0JZG8gewotCQlpZiAobmV4dF9teikKLQkJCW16ID0gbmV4dF9tejsKLQkJZWxzZQotCQkJbXogPSBtZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopOwotCQlpZiAoIW16KQotCQkJYnJlYWs7Ci0KLQkJcmVjbGFpbWVkID0gbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0obXotJmd0O21lbWNnLCBwZ2RhdCwKLQkJCQkJCSAgICBnZnBfbWFzaywgdG90YWxfc2Nhbm5lZCk7Ci0JCW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkOwotCQlzcGluX2xvY2tfaXJxKCZhbXA7bWN0ei0mZ3Q7bG9jayk7Ci0KLQkJLyoKLQkJICogSWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW55dGhpbmcgZnJvbSB0aGlzIG1lbW9yeSBjZ3JvdXAKLQkJICogaXQgaXMgdGltZSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNncm91cAotCQkgKi8KLQkJbmV4dF9teiA9IE5VTEw7Ci0JCWlmICghcmVjbGFpbWVkKQotCQkJbmV4dF9teiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTsKLQotCQlleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhtei0mZ3Q7bWVtY2cpOwotCQkvKgotCQkgKiBPbmUgc2Nob29sIG9mIHRob3VnaHQgc2F5cyB0aGF0IHdlIHNob3VsZCBub3QgYWRkCi0JCSAqIGJhY2sgdGhlIG5vZGUgdG8gdGhlIHRyZWUgaWYgcmVjbGFpbSByZXR1cm5zIDAuCi0JCSAqIEJ1dCBvdXIgcmVjbGFpbSBjb3VsZCByZXR1cm4gMCwgc2ltcGx5IGJlY2F1c2UgZHVlCi0JCSAqIHRvIHByaW9yaXR5IHdlIGFyZSBleHBvc2luZyBhIHNtYWxsZXIgc3Vic2V0IG9mCi0JCSAqIG1lbW9yeSB0byByZWNsYWltIGZyb20uIENvbnNpZGVyIHRoaXMgYXMgYSBsb25nZXIKLQkJICogdGVybSBUT0RPLgotCQkgKi8KLQkJLyogSWYgZXhjZXNzID09IDAsIG5vIHRyZWUgb3BzICovCi0JCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXosIG1jdHosIGV4Y2Vzcyk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCQljc3NfcHV0KCZhbXA7bXotJmd0O21lbWNnLSZndDtjc3MpOwotCQlsb29wJiM0MzsmIzQzOzsKLQkJLyoKLQkJICogQ291bGQgbm90IHJlY2xhaW0gYW55dGhpbmcgYW5kIHRoZXJlIGFyZSBubyBtb3JlCi0JCSAqIG1lbSBjZ3JvdXBzIHRvIHRyeSBvciB3ZSBzZWVtIHRvIGJlIGxvb3Bpbmcgd2l0aG91dAotCQkgKiByZWNsYWltaW5nIGFueXRoaW5nLgotCQkgKi8KLQkJaWYgKCFucl9yZWNsYWltZWQgJmFtcDsmYW1wOwotCQkJKG5leHRfbXogPT0gTlVMTCB8fAotCQkJbG9vcCAmZ3Q7IE1FTV9DR1JPVVBfTUFYX1NPRlRfTElNSVRfUkVDTEFJTV9MT09QUykpCi0JCQlicmVhazsKLQl9IHdoaWxlICghbnJfcmVjbGFpbWVkKTsKLQlpZiAobmV4dF9teikKLQkJY3NzX3B1dCgmYW1wO25leHRfbXotJmd0O21lbWNnLSZndDtjc3MpOwotCXJldHVybiBucl9yZWNsYWltZWQ7Ci19Ci0KIHN0YXRpYyB1NjQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCiAJCQkJc3RydWN0IGNmdHlwZSAqY2Z0KQogewpAQCAtNTExLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RocmVzaG9sZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJfQogfQogCi0vKiBDZ3JvdXAxOiB0aHJlc2hvbGQgbm90aWZpY2F0aW9ucyAmYW1wOyBzb2Z0bGltaXQgdHJlZSB1cGRhdGVzICovCiYjNDM7LyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgKi8KIAogLyoKICAqIFBlciBtZW1jZyBldmVudCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IHBhZ2Vpbi9wYWdlb3V0LiBXaXRoIFRIUCwKQEAgLTUxOSwxNSAmIzQzOzIwMCw5IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKICAqIHRvIHRyaWdnZXIgc29tZSBwZXJpb2RpYyBldmVudHMuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBiZXR0ZXIKICAqIHRoYW4gdXNpbmcgamlmZmllcyBldGMuIHRvIGhhbmRsZSBwZXJpb2RpYyBtZW1jZyBldmVudC4KICAqLwotZW51bSBtZW1fY2dyb3VwX2V2ZW50c190YXJnZXQgewotCU1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCwKLQlNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQsCi0JTUVNX0NHUk9VUF9OVEFSR0VUUywKLX07Ci0KIHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlX2V2ZW50czsKLQl1bnNpZ25lZCBsb25nIHRhcmdldHNbTUVNX0NHUk9VUF9OVEFSR0VUU107CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX3RhcmdldDsKIH07CiAKIHN0YXRpYyB2b2lkIG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcykKQEAgLTU0NCw1MyAmIzQzOzIxOSwyOSBAQCBzdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpCiB9CiAKICNkZWZpbmUgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUIDEyOAotI2RlZmluZSBTT0ZUTElNSVRfRVZFTlRTX1RBUkdFVCAxMDI0CiAKLXN0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCWVudW0gbWVtX2Nncm91cF9ldmVudHNfdGFyZ2V0IHRhcmdldCkKJiM0MztzdGF0aWMgYm9vbCBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCwgbmV4dDsKIAogCXZhbCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7bnJfcGFnZV9ldmVudHMpOwotCW5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctJmd0O2V2ZW50c19wZXJjcHUtJmd0O3RhcmdldHNbdGFyZ2V0XSk7CiYjNDM7CW5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctJmd0O2V2ZW50c19wZXJjcHUtJmd0O3RocmVzaG9sZF90YXJnZXQpOwogCS8qIGZyb20gdGltZV9hZnRlcigpIGluIGppZmZpZXMuaCAqLwogCWlmICgobG9uZykobmV4dCAtIHZhbCkgJmx0OyAwKSB7Ci0JCXN3aXRjaCAodGFyZ2V0KSB7Ci0JCWNhc2UgTUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNIOgotCQkJbmV4dCA9IHZhbCAmIzQzOyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQ6Ci0JCQluZXh0ID0gdmFsICYjNDM7IFNPRlRMSU1JVF9FVkVOVFNfVEFSR0VUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLSZndDtldmVudHNfcGVyY3B1LSZndDt0YXJnZXRzW3RhcmdldF0sIG5leHQpOwomIzQzOwkJX190aGlzX2NwdV93cml0ZShtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7dGhyZXNob2xkX3RhcmdldCwKJiM0MzsJCQkJIHZhbCAmIzQzOyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKgotICogQ2hlY2sgZXZlbnRzIGluIG9yZGVyLgotICoKLSAqLwotc3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCiYjNDM7c3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQogCQlyZXR1cm47CiAKLQkvKiB0aHJlc2hvbGQgZXZlbnQgaXMgdHJpZ2dlcmVkIGluIGZpbmVyIGdyYWluIHRoYW4gc29mdCBsaW1pdCAqLwotCWlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLAotCQkJCQkJTUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNIKSkpIHsKLQkJYm9vbCBkb19zb2Z0bGltaXQ7Ci0KLQkJZG9fc29mdGxpbWl0ID0gbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZywKLQkJCQkJCU1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVCk7CiYjNDM7CWlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnKSkpCiAJCW1lbV9jZ3JvdXBfdGhyZXNob2xkKG1lbWNnKTsKLQkJaWYgKHVubGlrZWx5KGRvX3NvZnRsaW1pdCkpCi0JCQltZW1jZzFfdXBkYXRlX3RyZWUobWVtY2csIG5pZCk7Ci0JfQogfQogCiB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKQEAgLTU5OSw3ICYjNDM7MjUwLDcgQEAgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKG1lbWNnLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwotCW1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpOwomIzQzOwltZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTY3Miw3ICYjNDM7MzIzLDcgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiAJVk1fV0FSTl9PTl9JUlFTX0VOQUJMRUQoKTsKIAltZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCXByZWVtcHRfZW5hYmxlX25lc3RlZCgpOwotCW1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpOwomIzQzOwltZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogCW9ial9jZ3JvdXBfcHV0KG9iamNnKTsKQEAgLTcyNiwxNCAmIzQzOzM3NywxNCBAQCB2b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbykKICNlbmRpZgogCiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKQomIzQzOwkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY291bnRfbWVtY2dfZXZlbnRzKG1lbWNnLCBQR1BHT1VULCBwZ3Bnb3V0KTsKIAlfX3RoaXNfY3B1X2FkZChtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7bnJfcGFnZV9ldmVudHMsIG5yX21lbW9yeSk7Ci0JbWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgbmlkKTsKJiM0MzsJbWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0yNTY2LDIyICYjNDM7MjIxNywzIEBAIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlmcmVlX3BlcmNwdShtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdSk7CiB9Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1lbWNnMV9pbml0KHZvaWQpCi17Ci0JaW50IG5vZGU7Ci0KLQlmb3JfZWFjaF9ub2RlKG5vZGUpIHsKLQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqcnRwbjsKLQotCQlydHBuID0ga3phbGxvY19ub2RlKHNpemVvZigqcnRwbiksIEdGUF9LRVJORUwsIG5vZGUpOwotCi0JCXJ0cG4tJmd0O3JiX3Jvb3QgPSBSQl9ST09UOwotCQlydHBuLSZndDtyYl9yaWdodG1vc3QgPSBOVUxMOwotCQlzcGluX2xvY2tfaW5pdCgmYW1wO3J0cG4tJmd0O2xvY2spOwotCQlzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtub2RlXSA9IHJ0cG47Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1zdWJzeXNfaW5pdGNhbGwobWVtY2cxX2luaXQpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oCmluZGV4IDFlMzk0MjY5YzYxM2QuLmI5YTIxZjBmZDJjM2EgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmgKQEAgLTQxLDEyICYjNDM7NDEsNiBAQCBib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiAKIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKLXZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JV1JJVEVfT05DRShtZW1jZy0mZ3Q7c29mdF9saW1pdCwgUEFHRV9DT1VOVEVSX01BWCk7Ci19CiAKIHN0cnVjdCBjZ3JvdXBfdGFza3NldDsKIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CkBAIC02NSw3ICYjNDM7NTksNyBAQCB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCiB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKTsKJiM0MzsJCQkgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7CiAKIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpOwogdm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTsKQEAgLTk4LDggJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfYWxsb2NfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgeyByZXR1cm4gdHJ1ZTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQogc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpCkBAIC0xMTUsNyAmIzQzOzEwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKSB7fQomIzQzOwkJCQkJIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KSB7fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpIHt9CiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBiZmQwYTc0ZmFjOTIzLi4zMDYzNmI5ZDk2NzM5IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00MjU3LDcgJiM0Mzs0MjU3LDYgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAJCXJldHVybiBFUlJfQ0FTVChtZW1jZyk7CiAKIAlwYWdlX2NvdW50ZXJfc2V0X2hpZ2goJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTsKLQltZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7CiAjaWZkZWYgQ09ORklHX1pTV0FQCiAJbWVtY2ctJmd0O3pzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJV1JJVEVfT05DRShtZW1jZy0mZ3Q7enN3YXBfd3JpdGViYWNrLCB0cnVlKTsKQEAgLTQ0MjksNyAmIzQzOzQ0MjgsNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAKIAl2bXByZXNzdXJlX2NsZWFudXAoJmFtcDttZW1jZy0mZ3Q7dm1wcmVzc3VyZSk7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO21lbWNnLSZndDtoaWdoX3dvcmspOwotCW1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhtZW1jZyk7CiAJZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTsKIAltZW1fY2dyb3VwX2ZyZWUobWVtY2cpOwogfQpAQCAtNDQ2NSw3ICYjNDM7NDQ2Myw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJcGFnZV9jb3VudGVyX3NldF9taW4oJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LCAwKTsKIAlwYWdlX2NvdW50ZXJfc2V0X2xvdygmYW1wO21lbWNnLSZndDttZW1vcnksIDApOwogCXBhZ2VfY291bnRlcl9zZXRfaGlnaCgmYW1wO21lbWNnLSZndDttZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpOwotCW1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTsKIAlwYWdlX2NvdW50ZXJfc2V0X2hpZ2goJmFtcDttZW1jZy0mZ3Q7c3dhcCwgUEFHRV9DT1VOVEVSX01BWCk7CiAJbWVtY2dfd2JfZG9tYWluX3NpemVfY2hhbmdlZChtZW1jZyk7CiB9CkBAIC01MzMxLDcgJiM0Mzs1MzI4LDYgQEAgc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7CiAJdW5zaWduZWQgbG9uZyBucl9tZW1vcnk7CiAJdW5zaWduZWQgbG9uZyBwZ3Bnb3V0OwogCXVuc2lnbmVkIGxvbmcgbnJfa21lbTsKLQlpbnQgbmlkOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHVuY2hhcmdlX2dhdGhlcl9jbGVhcihzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZykKQEAgLTUzNTQsNyAmIzQzOzUzNTAsNyBAQCBzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZykKIAkJbWVtY2cxX29vbV9yZWNvdmVyKG1lbWNnKTsKIAl9CiAKLQltZW1jZzFfdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHVnLSZndDtwZ3Bnb3V0LCB1Zy0mZ3Q7bnJfbWVtb3J5LCB1Zy0mZ3Q7bmlkKTsKJiM0MzsJbWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy0mZ3Q7cGdwZ291dCwgdWctJmd0O25yX21lbW9yeSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIHVuY2hhcmdlX2ZvbGlvICovCkBAIC01MzgzLDcgJiM0Mzs1Mzc5LDYgQEAgc3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpCiAJCQl1bmNoYXJnZV9nYXRoZXJfY2xlYXIodWcpOwogCQl9CiAJCXVnLSZndDtvYmpjZyA9IG9iamNnOwotCQl1Zy0mZ3Q7bmlkID0gZm9saW9fbmlkKGZvbGlvKTsKIAogCQkvKiBwYWlycyB3aXRoIG9ial9jZ3JvdXBfcHV0IGluIHVuY2hhcmdlX2JhdGNoICovCiAJCW9ial9jZ3JvdXBfZ2V0KG9iamNnKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZmRkMTMyOTlhMDRhOS4uZGViMDg3YzU3MDA3ZCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQzNzMsNyAmIzQzOzQzNzMsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqLwogZW51bSB7CiAJTUVNQ0dfTFJVX05PUCwKLQlNRU1DR19MUlVfSEVBRCwKIAlNRU1DR19MUlVfVEFJTCwKIAlNRU1DR19MUlVfT0xELAogCU1FTUNHX0xSVV9ZT1VORywKQEAgLTQzOTUsOSAmIzQzOzQzOTQsNyBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcCkKIAluZXcgPSBvbGQgPSBscnV2ZWMtJmd0O2xydWdlbi5nZW47CiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqLwotCWlmIChvcCA9PSBNRU1DR19MUlVfSEVBRCkKLQkJc2VnID0gTUVNQ0dfTFJVX0hFQUQ7Ci0JZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpCiYjNDM7CWlmIChvcCA9PSBNRU1DR19MUlVfVEFJTCkKIAkJc2VnID0gTUVNQ0dfTFJVX1RBSUw7CiAJZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX09MRCkKIAkJbmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC0mZ3Q7bWVtY2dfbHJ1LnNlcSk7CkBAIC00NDExLDcgJiM0Mzs0NDA4LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApCiAKIAlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bHJ1dmVjLSZndDtscnVnZW4ubGlzdCk7CiAKLQlpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQgfHwgb3AgPT0gTUVNQ0dfTFJVX09MRCkKJiM0MzsJaWYgKG9wID09IE1FTUNHX0xSVV9PTEQpCiAJCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuLmxpc3QsICZhbXA7cGdkYXQtJmd0O21lbWNnX2xydS5maWZvW25ld11bYmluXSk7CiAJZWxzZQogCQlobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5saXN0LCAmYW1wO3BnZGF0LSZndDttZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pOwpAQCAtNDQ4OSwxNSAmIzQzOzQ0ODYsNiBAQCB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJfQogfQogCi12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCkKLXsKLQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpOwotCi0JLyogc2VlIHRoZSBjb21tZW50IG9uIE1FTUNHX05SX0dFTlMgKi8KLQlpZiAoUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpCi0JCWxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpOwotfQotCiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKQogewogCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7CkBAIC02NDM5LDggJiM0Mzs2NDI3LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCXN0cnVjdCB6b25lcmVmICp6OwogCXN0cnVjdCB6b25lICp6b25lOwotCXVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7Ci0JdW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7CiAJZ2ZwX3Qgb3JpZ19tYXNrOwogCXBnX2RhdGFfdCAqbGFzdF9wZ2RhdCA9IE5VTEw7CiAJcGdfZGF0YV90ICpmaXJzdF9wZ2RhdCA9IE5VTEw7CkBAIC02NDgyLDM1ICYjNDM7NjQ2OCwxNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJCQkJc2MtJmd0O2NvbXBhY3Rpb25fcmVhZHkgPSB0cnVlOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCi0JCQkvKgotCQkJICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlCi0JCQkgKiB6b25lbGlzdCBpcyBvcmRlcmVkIGJ5IHpvbmUgKG5vdCB0aGUgZGVmYXVsdCkgdGhlbiBhCi0JCQkgKiBub2RlIG1heSBiZSBzaHJ1bmsgbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZQotCQkJICogdGhlIHVzZXIgcHJlZmVycyBsb3dlciB6b25lcyBiZWluZyBwcmVzZXJ2ZWQuCi0JCQkgKi8KLQkJCWlmICh6b25lLSZndDt6b25lX3BnZGF0ID09IGxhc3RfcGdkYXQpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkgKiBUaGlzIHN0ZWFscyBwYWdlcyBmcm9tIG1lbW9yeSBjZ3JvdXBzIG92ZXIgc29mdGxpbWl0Ci0JCQkgKiBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlcyBhbmQKLQkJCSAqIHNjYW5uZWQgcGFnZXMuIFRoaXMgd29ya3MgZm9yIGdsb2JhbCBtZW1vcnkgcHJlc3N1cmUKLQkJCSAqIGFuZCBiYWxhbmNpbmcsIG5vdCBmb3IgYSBtZW1jZyYjMzk7cyBsaW1pdC4KLQkJCSAqLwotCQkJbnJfc29mdF9zY2FubmVkID0gMDsKLQkJCW5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbSh6b25lLSZndDt6b25lX3BnZGF0LAotCQkJCQkJCQkgICAgICBzYy0mZ3Q7b3JkZXIsIHNjLSZndDtnZnBfbWFzaywKLQkJCQkJCQkJICAgICAgJmFtcDtucl9zb2Z0X3NjYW5uZWQpOwotCQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gbnJfc29mdF9yZWNsYWltZWQ7Ci0JCQlzYy0mZ3Q7bnJfc2Nhbm5lZCAmIzQzOz0gbnJfc29mdF9zY2FubmVkOwotCQkJLyogbmVlZCBzb21lIGNoZWNrIGZvciBhdm9pZCBtb3JlIHNocmlua196b25lKCkgKi8KIAkJfQogCiAJCWlmICghZmlyc3RfcGdkYXQpCiAJCQlmaXJzdF9wZ2RhdCA9IHpvbmUtJmd0O3pvbmVfcGdkYXQ7CiAKLQkJLyogU2VlIGNvbW1lbnQgYWJvdXQgc2FtZSBjaGVjayBmb3IgZ2xvYmFsIHJlY2xhaW0gYWJvdmUgKi8KJiM0MzsJCS8qCiYjNDM7CQkgKiBTaHJpbmsgZWFjaCBub2RlIGluIHRoZSB6b25lbGlzdCBvbmNlLiBJZiB0aGUgem9uZWxpc3QgaXMKJiM0MzsJCSAqIG9yZGVyZWQgYnkgem9uZSAobm90IHRoZSBkZWZhdWx0KSB0aGVuIGEgbm9kZSBtYXkgYmUgc2hydW5rCiYjNDM7CQkgKiBtdWx0aXBsZSB0aW1lcyBidXQgaW4gdGhhdCBjYXNlIHRoZSB1c2VyIHByZWZlcnMgbG93ZXIgem9uZXMKJiM0MzsJCSAqIGJlaW5nIHByZXNlcnZlZC4KJiM0MzsJCSAqLwogCQlpZiAoem9uZS0mZ3Q7em9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KQogCQkJY29udGludWU7CiAJCWxhc3RfcGdkYXQgPSB6b25lLSZndDt6b25lX3BnZGF0OwpAQCAtNjgyNSw0NyAmIzQzOzY3OTMsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlciwKIAogI2lmZGVmIENPTkZJR19NRU1DRwogCi0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovCi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLAotCQkJCQkJcGdfZGF0YV90ICpwZ2RhdCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpCi17Ci0Jc3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0gewotCQkubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsCi0JCS50YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnLAotCQkubWF5X3dyaXRlcGFnZSA9IDEsCi0JCS5tYXlfdW5tYXAgPSAxLAotCQkucmVjbGFpbV9pZHggPSBNQVhfTlJfWk9ORVMgLSAxLAotCQkubWF5X3N3YXAgPSAhbm9zd2FwLAotCX07Ci0KLQlXQVJOX09OX09OQ0UoIWN1cnJlbnQtJmd0O3JlY2xhaW1fc3RhdGUpOwotCi0Jc2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSykgfAotCQkJKEdGUF9ISUdIVVNFUl9NT1ZBQkxFICZhbXA7IH5HRlBfUkVDTEFJTV9NQVNLKTsKLQotCXRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbihzYy5nZnBfbWFzaywKLQkJCQkJCSAgICAgIHNjLm9yZGVyLAotCQkJCQkJICAgICAgbWVtY2cpOwotCi0JLyoKLQkgKiBOT1RFOiBBbHRob3VnaCB3ZSBjYW4gZ2V0IHRoZSBwcmlvcml0eSBmaWVsZCwgdXNpbmcgaXQKLQkgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi4KLQkgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0Ci0JICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrCi0JICogdGhlIHByaW9yaXR5IGFuZCBtYWtlIGl0IHplcm8uCi0JICovCi0Jc2hyaW5rX2xydXZlYyhscnV2ZWMsICZhbXA7c2MpOwotCi0JdHJhY2VfbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZChzYy5ucl9yZWNsYWltZWQsIG1lbWNnKTsKLQotCSpucl9zY2FubmVkID0gc2MubnJfc2Nhbm5lZDsKLQotCXJldHVybiBzYy5ucl9yZWNsYWltZWQ7Ci19Ci0KIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiAJCQkJCSAgIGdmcF90IGdmcF9tYXNrLApAQCAtNzE3MSw4ICYjNDM7NzA5OCw2IEBAIGNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpCiBzdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KQogewogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7Ci0JdW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7CiAJdW5zaWduZWQgbG9uZyBwZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBucl9ib29zdF9yZWNsYWltOwogCXVuc2lnbmVkIGxvbmcgem9uZV9ib29zdHNbTUFYX05SX1pPTkVTXSA9IHsgMCwgfTsKQEAgLTcyNzgsMTIgJiM0Mzs3MjAzLDcgQEAgc3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCkKIAkJICovCiAJCWtzd2FwZF9hZ2Vfbm9kZShwZ2RhdCwgJmFtcDtzYyk7CiAKLQkJLyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovCiAJCXNjLm5yX3NjYW5uZWQgPSAwOwotCQlucl9zb2Z0X3NjYW5uZWQgPSAwOwotCQlucl9zb2Z0X3JlY2xhaW1lZCA9IG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdkYXQsIHNjLm9yZGVyLAotCQkJCQkJCSAgICAgIHNjLmdmcF9tYXNrLCAmYW1wO25yX3NvZnRfc2Nhbm5lZCk7Ci0JCXNjLm5yX3JlY2xhaW1lZCAmIzQzOz0gbnJfc29mdF9yZWNsYWltZWQ7CiAKIAkJLyoKIAkJICogVGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8gcmFpc2UgdGhlIHNjYW5uaW5nIHByaW9yaXR5IGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTEyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbWNnIHYxIFNvZnQgTGltaXQgUmVtb3ZhbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0ZWQgYXQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbWVtY2cgKG1lbW9yeSBjZ3JvdXApIHN1YnN5c3RlbS4gSXQmIzM5O3MgdG91Y2hpbmcgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oYCwgYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtY29udHJvbC12MS5jYCwgYG1tL21lbWNvbnRyb2wtdjEuaGAsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL3Ztc2Nhbi5jYC4gIEZyb20gYSBxdWljayBzY2FuLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWxldGluZywgb3IgYXQgbGVhc3Qgc2lnbmlmaWNhbnRseSByZXdvcmtpbmcsIHRoZSBtZW1jZyB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0gbG9naWMgYW5kIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiAgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBpcyBhIGNvbXBsZXRlIHJlbW92YWwgb3IgYSByZWZhY3RvcmluZy4KCkxldCBtZSBleGFtaW5lIHRoZSBkaWZmIGluIGRldGFpbC4KCiogICBJbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBpdCYjMzk7cyByZW1vdmluZyBlbGVtZW50cyByZWxhdGVkIHRvIHRoZSBzb2Z0IGxpbWl0IHRyZWUsIGxpa2UgYHRyZWVfbm9kZWAsIGB1c2FnZV9pbl9leGNlc3NgLCBgb25fdHJlZWAgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIHdoZW4gYENPTkZJR19NRU1DR19WMWAgaXMgZW5hYmxlZC4gQWxzbywgdGhlIGBzb2Z0X2xpbWl0YCBpdHNlbGYgaXMgZ29uZSBmcm9tIHRoZSBgc3RydWN0IG1lbV9jZ3JvdXBgIGRlZmluaXRpb24uIEFuZCB0aGUgZGVjbGFyYXRpb24gb2YgYG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW1gIGlzIGFsc28gZ29uZS4KKiAgIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBzZWVzIHNvbWUgY29tbWVudCB1cGRhdGVzIGFuZCByZW1vdmFsIG9mIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAuCiogICBUaGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSBnZXRzIGNsZWFuZWQgdXAgdG9vLCB3aXRoIGBtbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fYmVnaW5gIGFuZCBgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZGAgdHJhY2UgZXZlbnRzIGJlaW5nIHJlbW92ZWQgZnJvbSBgaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhgLgoqICAgYG1tL2ludGVybmFsLmhgIHJlbW92ZXMgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLgoqICAgYG1tL21lbWNvbnRyb2wtdjEuY2AgaXMgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMgbGllLiAgSXQmIzM5O3MgcmVtb3ZpbmcgYW4gZXh0ZW5zaXZlIHNldCBvZiBmdW5jdGlvbnMsIGluY2x1ZGluZyBgc29mdF9saW1pdF90cmVlYCwgcmVjbGFpbS1yZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkYCwgYF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWRgLCBhbmQgdGhlIG1haW4gcmVjbGFpbSBmdW5jdGlvbiBgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW1gLCBhcyB3ZWxsIGFzIHNldmVyYWwgdHJlZS1yZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBfX21lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGVgIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYG1lbWNnMV9pbml0YC4gSXQgbG9va3MgbGlrZSBzb21lIG9mIHRoZSBldmVudCBoYW5kbGluZyBpbiBgbWVtY2cxX2V2ZW50c19wZXJjcHVgIGhhcyBhbHNvIGJlZW4gc2ltcGxpZmllZCwgYXMgaGFzIGBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0YC4gVGhlIHBhcmFtZXRlciBsaXN0cyBmb3IgYG1lbWNnMV9jaGVja19ldmVudHNgLCBgbWVtY2cxX2NvbW1pdF9jaGFyZ2VgLCBgX19tZW1jZzFfc3dhcG91dGAsIGFuZCBgbWVtY2cxX3VuY2hhcmdlX2JhdGNoYCBhcmUgYWxsIGNoYW5nZWQuCiogICBgbW0vbWVtY29udHJvbC12MS5oYCBoYXMgZGVjbGFyYXRpb25zIGFuZCBpbmxpbmUgZnVuY3Rpb24gdXBkYXRlcy4KKiAgIEluIGBtbS9tZW1jb250cm9sLmNgLCBgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXRgIGlzIHJlbW92ZWQgZnJvbSBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIGFuZCBgbWVtX2Nncm91cF9jc3NfcmVzZXRgLiBMaWtld2lzZSwgYG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlc2AgaXMgcmVtb3ZlZCBmcm9tIGBtZW1fY2dyb3VwX2Nzc19mcmVlYC4gU2V2ZXJhbCBwYXJhbWV0ZXJzIGFyZSByZW1vdmVkIGluIGEgZmV3IHBsYWNlcyB0b28uIFRoZSBgdW5jaGFyZ2VfYmF0Y2hgIGZ1bmN0aW9uIGhhcyBiZWVuIHVwZGF0ZWQsIGFuZCB0aGUgYHVnLSZndDtuaWQgPSBmb2xpb19uaWQoZm9saW8pO2AgaXMgcmVtb3ZlZCBmcm9tIGB1bmNoYXJnZV9mb2xpb2AuCiogICBGaW5hbGx5LCBgbW0vdm1zY2FuLmNgIHJlbW92ZXMgYE1FTUNHX0xSVV9IRUFEYCBoYW5kbGluZyBmcm9tIGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2AsIGFuZCBhbHNvIHJlbW92ZXMgYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgcmVtb3ZlcyBzb2Z0IGxpbWl0IHJlY2xhaW0gZnJvbSBgc2hyaW5rX3pvbmVzYCBhbmQgYGJhbGFuY2VfcGdkYXRgLCBhcyB3ZWxsIGFzIHRoZSBhbHJlYWR5IGRlbGV0ZWQgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLgoKVGhpcyBpcyBleHRlbnNpdmUuIEl0IHNlZW1zIGxpa2UgYSBjbGVhbiBzd2VlcCBvZiB0aGUgdjEgc29mdCBsaW1pdCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpc24mIzM5O3QganVzdCBhIHBhcnRpYWwgcmVtb3ZhbCBvciBhIHJlZmFjdG9yaW5nIHdpdGggdGhlIGNvZGUgbW92ZWQgZWxzZXdoZXJlLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgc2luZ2xlIGNvbW1pdCBvciBwYXJ0IG9mIGEgbGFyZ2VyIHBhdGNoIHNlcmllcy4gSSBuZWVkIHRvIHNlZSBpZiBhbnkgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIG1haW50YWluZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIElzIGBjZ3JvdXAubWVtb3J5LnNvZnRfbGltaXRfaW5fYnl0ZXNgIHN0aWxsIGluIGBtbS9tZW1jb250cm9sLXYxLmNgPyBHb3R0YSBjaGVjayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0X2xpbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xNTI4PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9oaWVyYXJjaHlfd3JpdGUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTU0MC1cbm1tL21lbWNvbnRyb2wtdjEuYzoxNTQxOnN0YXRpYyB1NjQgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQyLVx0XHRcdFx0ICAgICAgc3RydWN0IGNmdHlwZSAqY2Z0KVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQ2LVxubW0vbWVtY29udHJvbC12MS5jOjE1NDc6c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQ4LVx0XHRcdFx0XHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE1NTYtXG5tbS9tZW1jb250cm9sLXYxLmM6MTU1NzpcdHByX3dhcm5fb25jZShcJiMzNDtzb2Z0X2xpbWl0X2luX2J5dGVzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gXCYjMzQ7XG5tbS9tZW1jb250cm9sLXYxLmMtMTU1OC1cdFx0ICAgICBcJiMzNDtXcml0aW5nIGFueSB2YWx1ZSB0byB0aGlzIGZpbGUgaGFzIG5vIGVmZmVjdC4gXCYjMzQ7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIwMjg9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMDQ2LVx0e1xubW0vbWVtY29udHJvbC12MS5jOjIwNDc6XHRcdC5uYW1lID0gXCYjMzQ7c29mdF9saW1pdF9pbl9ieXRlc1wmIzM0Oyxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMDQ4Olx0XHQud3JpdGUgPSBtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGUsXG5tbS9tZW1jb250cm9sLXYxLmM6MjA0OTpcdFx0LnJlYWRfdTY0ID0gbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWQsXG5tbS9tZW1jb250cm9sLXYxLmMtMjA1MC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCAodjEpKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gaW52ZXN0aWdhdGUgaG93IHNvZnQgbGltaXRzIGFyZSBoYW5kbGVkIHdpdGhpbiBtZW1vcnkgY2dyb3Vwcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhvc2UgdmFsdWVzLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UgY29kZSwgYW5kIHNpbmNlIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1lbW9yeSBjb250cm9sLCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgdGhlIHJlbGV2YW50IGZpbGVzIHdpbGwgYmUgaW4gYG1tL2AuIEJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIGNncm91cHMsIGFuZCBsb29raW5nIGJhY2ssIEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gdGhlIGZpbGUgSSB3YW50IHRvIGluc3BlY3QgaXMgYG1tL21lbWNvbnRyb2wtdjEuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF9yZWFkYCBhbmQgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAgd2lsbCBiZSBrZXkgZnVuY3Rpb25zIChvciBwb3NzaWJseSBtYWNyb3MsIHdoaWNoIGlzIHdoeSBJIG5lZWQgdG8gKmNoZWNrKiksIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZm9jdXMgbXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLiBUaGUgJiMzOTt2MSYjMzk7IGluIHRoZSBmaWxlbmFtZSBzdHJvbmdseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBvbGRlciwgbm93LWRlcHJlY2F0ZWQsIG1lbW9yeSBjZ3JvdXAgaGllcmFyY2h5OyB0aGlzIGlzIGltcG9ydGFudCBjb250ZXh0IGJlY2F1c2UgaXQgaW5mbHVlbmNlcyBob3cgdGhlIGxpbWl0cyBhcmUgbWFuYWdlZCBjb21wYXJlZCB0byB0aGUgbmV3ZXIgY2dyb3VwIHYyLiBLbm93aW5nIHRoaXMsIEkgZXhwZWN0IHRvIHNlZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGlzIGxlZ2FjeSBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXNlIGFyZSBkZWZpbmVkIGFuZCBob3cgdGhleSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU0MDpcdFxuMTU0MTpcdHN0YXRpYyB1NjQgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbjE1NDI6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBjZnR5cGUgKmNmdClcbjE1NDM6XHR7XG4xNTQ0Olx0XHRyZXR1cm4gKHU2NClQQUdFX0NPVU5URVJfTUFYICogUEFHRV9TSVpFO1xuMTU0NTpcdH1cbjE1NDY6XHRcbjE1NDc6XHRzdGF0aWMgc3NpemVfdCBtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuMTU0ODpcdFx0XHRcdFx0XHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4xNTQ5Olx0e1xuMTU1MDpcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbjE1NTE6XHRcdGludCByZXQ7XG4xNTUyOlx0XG4xNTUzOlx0XHRyZXQgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2Uoc3Ryc3RyaXAoYnVmKSwgXCYjMzQ7LTFcJiMzNDssIFx1MDAyNm5yX3BhZ2VzKTtcbjE1NTQ6XHRcdGlmIChyZXQpXG4xNTU1Olx0XHRcdHJldHVybiByZXQ7XG4xNTU2Olx0XG4xNTU3Olx0XHRwcl93YXJuX29uY2UoXCYjMzQ7c29mdF9saW1pdF9pbl9ieXRlcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIFwmIzM0O1xuMTU1ODpcdFx0XHQgICAgIFwmIzM0O1dyaXRpbmcgYW55IHZhbHVlIHRvIHRoaXMgZmlsZSBoYXMgbm8gZWZmZWN0LiBcJiMzNDtcbjE1NTk6XHRcdFx0ICAgICBcJiMzNDtQbGVhc2UgcmVwb3J0IHlvdXIgdXNlY2FzZSB0byBsaW51eC1tbUBrdmFjay5vcmcgaWYgeW91IFwmIzM0O1xuMTU2MDpcdFx0XHQgICAgIFwmIzM0O2RlcGVuZCBvbiB0aGlzIGZ1bmN0aW9uYWxpdHkuXFxuXCYjMzQ7KTtcbjE1NjE6XHRcbjE1NjI6XHRcdHJldHVybiBuYnl0ZXM7XG4xNTYzOlx0fVxuMTU2NDpcdFxuMTU2NTpcdHN0YXRpYyB1NjQgbWVtX2Nncm91cF9yZWFkX3U2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxuMTU2NjpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnQpXG4xNTY3Olx0e1xuMTU2ODpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2Nzcyhjc3MpO1xuMTU2OTpcdFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg5MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBjYW4gc2VlIHRoZSBjaGFuZ2VzIHRvdWNoIHNvbWUgdmVyeSBzZW5zaXRpdmUgYXJlYXM6IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgbWVtb3J5IGNncm91cHMgKG1lbWNnIHYxKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIGFmZmVjdHMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBhbmQgdGh1cyB3b3J0aCBmdXp6aW5nLgoKTXkgYW5hbHlzaXMgbG9va3MgbGlrZSB0aGlzOgoKRmlyc3QsIGxldCYjMzk7cyBkaXNzZWN0IHdoZXJlIHRoZSBwYXRjaCBpcyBtYWtpbmcgY2hhbmdlczoKMS4gICoqTWVtb3J5IE1hbmFnZW1lbnQgQ29yZToqKiBJdCYjMzk7cyByaWdodCBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtZW1jZyB2MSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHBhZ2UgcmVjbGFpbSBhbmQgdGhlIFZNIHNjYW5uZXIgKHZtc2NhbikgYW5kIHRoZSBMUlUgKGxydVxfZ2VuKS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnIGltbWVkaWF0ZWx5LgoKMi4gICoqRXhlY3V0YWJsZSBMb2dpYyBDaGFuZ2VzOioqIExvb2tpbmcgYXQgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zLCBJIHNlZSB0aGV5JiMzOTt2ZSBhZGp1c3RlZCB0aGUgZXZlbnQgcmF0ZS1saW1pdGluZyBpbiBgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdGAuIEl0IGFsc28gaXMgdHdlYWtpbmcgaG93IHRocmVzaG9sZHMgYXJlIGNoZWNrZWQuIFRoZSB1bmNoYXJnZSBiYXRjaCBsb2dpYyBoYXMgaGFkIHNvbWUgdXBkYXRlcywgcmVtb3ZpbmcgcGVyLWJhdGNoIG5pZCB0cmFja2luZyBhbmQgcGFzc2luZy4gVGhlIExSVSBnZW4gcm90YXRpb24gbG9naWMgaW4gYGxydV9nZW5fcm90YXRlX21lbWNnYCBoYXMgY2hhbmdlZC4gYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCBoYXZlIHJlbW92ZWQgc29mdCBsaW1pdCByZWNsYWltIGNhbGxzLiAgRmluYWxseSwgd2Ugc2VlIGFsdGVyYXRpb25zIGluIHNvZnQgbGltaXQgZmlsZSBoYW5kbGluZyB2aWEgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAgYW5kIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZGAuIFRoZXNlIGFyZSBhbGwgaGlnaGx5IGNyaXRpY2FsIGFyZWFzLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaXQgc2F0aXNmaWVzIHRoZSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgY3JpdGVyaWEsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IHJlYWxseSBjbGlja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNyaXRlcmlhIHRoYXQgc3RhdGUgJiMzNDtyZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7IHdpdGhpbiBzcGVjaWZpYyBjb3JlIHN1YnN5c3RlbXMsIGxpa2UgbWVtb3J5IG1hbmFnZW1lbnQuIFNpbmNlIHRoaXMgcGF0Y2ggdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkmIzM5O20gc2VlaW5nIGxvZ2ljIG1vZGlmaWNhdGlvbnMsIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogV29ydGhGdXp6aW5nIGlzIGB0cnVlYC4KCkFuZCwgYSBmaW5hbCBpbXBvcnRhbnQgcG9pbnQ6IEkmIzM5O20gbm90IGdvaW5nIHRvIGJsaW5kbHkgdHJ1c3QgYW55ICYjMzQ7Tm8gRnVuY3Rpb25hbCBDaGFuZ2UmIzM0OyBvciAmIzM0O1JlZmFjdG9yaW5nJiMzNDsgY2xhaW1zLiBUaG9zZSBhcmUgb2Z0ZW4gbWlzbGVhZGluZy4gUmVhcnJhbmdpbmcgbG9naWMsIGFkZGluZyBoZWxwZXIgZnVuY3Rpb25zLCBvciBjaGFuZ2luZyBob3cgc3RhdGUgaXMgaGFuZGxlZCBpbiB0aGVzZSBjb3JlIHN1YnN5c3RlbXMgaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3Igc3VidGxlIGJ1Z3Mgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBzdWJ0bGUgc2hpZnRzIGluIHNlbWFudGljcyB0aGF0IG5lZWQgY2hlY2tpbmcuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbi4gU28sIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGBFbmFibGVDb25maWdzYC4gVGhpcyBsaWtlbHkgaGluZ2VzIG9uIGBNRU1DR2AsIGBNRU1DR19WMWAsIGFuZCBgTFJVX0dFTmAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcywgZXNwZWNpYWxseSBpbiBgbW0vYCwgb3IgbWF5YmUganVzdCBncmVwIHRvIGRldGVybWluZSBleGFjdGx5IHdoYXQgY29uZmlncyBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSB0aGUgY29kZSBiZWluZyBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1DR19WMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA0Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTEyMz12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTExMzAtICogY2dyb3VwIHYxIHVzZXJzcGFjZSB2bXByZXNzdXJlIGludGVyZmFjZSAobWVtb3J5LnByZXNzdXJlX2xldmVsIC9cbm1tL21lbWNvbnRyb2wtdjEuYzoxMTMxOiAqIGNncm91cC5ldmVudF9jb250cm9sKS4gS2VwdCBoZXJlIHNvIHYyLW9ubHkga2VybmVscyAoQ09ORklHX01FTUNHX1YxPW4pXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMi0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0yNT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaC0yOC0vKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovXG5tbS9tZW1jb250cm9sLXYxLmg6Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC12MS5oLTMwLVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD04Nj1leHRlcm4gc3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdO1xubW0vbWVtY29udHJvbC12MS5oLTg3LVxubW0vbWVtY29udHJvbC12MS5oOjg4OiNlbHNlXHQvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbm1tL21lbWNvbnRyb2wtdjEuaC04OS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHt9XG5tbS9tZW1jb250cm9sLXYxLmgtMTE5LVxubW0vbWVtY29udHJvbC12MS5oOjEyMDojZW5kaWZcdC8qIENPTkZJR19NRU1DR19WMSAqL1xubW0vbWVtY29udHJvbC12MS5oLTEyMS1cbi0tXG5tbS9tZW1jb250cm9sLmM9MjE1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjM0LVxubW0vbWVtY29udHJvbC5jOjIzNTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMjM2LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU3Mi1cbm1tL21lbWNvbnRyb2wuYzo1NzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MDAtXHRQR1BHSU4sXG4tLVxubW0vbWVtY29udHJvbC5jPTgzMj1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jLTg0Ny1cbm1tL21lbWNvbnRyb2wuYzo4NDg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxuLS1cbm1tL21lbWNvbnRyb2wuYz05MTY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkyOC1cbm1tL21lbWNvbnRyb2wuYzo5Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXG4tLVxubW0vbWVtY29udHJvbC5jPTExMDQ9Ym9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTExMTEtXG5tbS9tZW1jb250cm9sLmM6MTExMjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTcxMj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MTctXG5tbS9tZW1jb250cm9sLmM6MTcxODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTcxOS11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jPTE3Mzg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc4NC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkmIzQzOyYjNDM7KSB7XG5tbS9tZW1jb250cm9sLmM6MTc4NTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTc4Ni1cdFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XG4tLVxubW0vbWVtY29udHJvbC5jPTE4MzY9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTg1Ny1cdFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XG5tbS9tZW1jb250cm9sLmM6MTg1ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTg1OS1cdGVsc2Uge1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MjQ3PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjY3LVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBcdTAwMjZwYXJlbnQtXHUwMDNlc3dhcCwgZmFsc2UpO1xubW0vbWVtY29udHJvbC5jOjQyNjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQyNjktXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MjgxLVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDI4MjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDI4My1cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgTlVMTCwgZmFsc2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NDQ4PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ0NTgtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NDQ1OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDQ2MC1cdHBhZ2VfY291bnRlcl9zZXRfbWF4KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIFBBR0VfQ09VTlRFUl9NQVgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTg2PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE5Ny1cdC5kZmxfY2Z0eXBlcyA9IG1lbW9yeV9maWxlcyxcbm1tL21lbWNvbnRyb2wuYzo1MTk4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy01MTk5LVx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXG4tLVxubW0vbWVtY29udHJvbC5jPTYxOTY9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjIwMS1cdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcbm1tL21lbWNvbnRyb2wuYzo2MjAyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MjAzLVx0V0FSTl9PTihjZ3JvdXBfYWRkX2xlZ2FjeV9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgbWVtc3dfZmlsZXMpKTtcbi0tXG5tbS9zd2FwLmg9ODU9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3N3YXAuaC04Ni17XG5tbS9zd2FwLmg6ODc6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vc3dhcC5oLTg4LVx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTYzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTUVNQ0cgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBNRU1DR2AgYW5kIGBNRU1DR19WMWAgYXJlIGRlZmluZWQgd2l0aGluIHRoaXMga2VybmVsLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgbGFpZCBvdXQgaW4gb25lIG9mIHRoZSBLY29uZmlnIGZpbGVzLCBsaWtlbHkgaW4gZWl0aGVyIGBpbml0L0tjb25maWdgIG9yIGBtbS9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGluaXRpYWwgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIGZpbGVzIGRpcmVjdGx5LiBIb3BlZnVsbHksIHRoZSBkZWZpbml0aW9uIGlzIGNsZWFyIGFuZCBJIGNhbiBxdWlja2x5IGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gKGluaXQvS2NvbmZpZykqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIHNwZWNpZmljIHNldHRpbmdzLCBzbyBsZXQmIzM5O3MganVtcCByaWdodCBpbnRvIGBpbml0L0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBlbnRyaWVzIGFyb3VuZCBsaW5lcyAxMDg1IHRocm91Z2ggMTEyMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQvZGlzYWJsZWQgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwOTA6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA5MTpcdFx0aGVscFxuMTA5MjpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDk5Olx0XHRkZWZhdWx0IHlcbjExMDA6XHRcbjExMDE6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjExMDI6XHRcdGJvb2xcbjExMDM6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMDQ6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjExMDU6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjExMDY6XHRcdGRlZmF1bHQgeVxuMTEwNzpcdFxuMTEwODpcdGNvbmZpZyBNRU1DR19WMVxuMTEwOTpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTEwOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTExOlx0XHRkZWZhdWx0IG5cbjExMTI6XHRcdGhlbHBcbjExMTM6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTE0Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTE1Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTExNjpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbjExMTc6XHRcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXG4xMTE4Olx0XG4xMTE5Olx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbjExMjA6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTEyMTpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4xMTIyOlx0XG4xMTIzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjExMjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzMjgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNQ0dfVjFgIGp1bXAgb3V0IGF0IG1lIGFzIGZ1bmRhbWVudGFsLiBUaGVzZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiBtZW1vcnkgY29udHJvbCBncm91cHMsIHNvIG5hdHVyYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW1wYWN0LiBUaGVuLCBJIHNlZSB0aGlzIGNoYW5nZSBpbiBgbW0vdm1zY2FuLmNgIHJlbGF0ZWQgdG8gYGxydV9nZW5fcm90YXRlX21lbWNnYCwgYW5kIEkga25vdyBJIGhhdmUgdG8gY2hlY2sgdGhlIGBMUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gR2l2ZW4gaXRzIG5hbWUgYW5kIHdoZXJlIGl0JiMzOTtzIHJlZmVyZW5jZWQsIGl0JiMzOTtzIG9idmlvdXNseSBnb2luZyB0byBjb250cm9sIHRoZSBnZW5lcmF0aW9uYWwgTFJVIGltcGxlbWVudGF0aW9uIGZvciBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gbWVtY2dzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlZmluaXRpb24gYW5kIHNldHRpbmdzLCBzbyBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYG1tL0tjb25maWdgIHRvIGRvIHRoYXQuIEkga25vdyB3aGVyZSB0byBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzODg9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTM5OC0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxMzk5OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDAtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MDctXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDA5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMy1cbm1tL0tjb25maWc6MTQxNDpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDE1LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjItXG5tbS9LY29uZmlnOjE0MjM6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjQtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNb2RpZmllZCBNZW1vcnkgQ29udHJvbCBMb2dpYyBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgKmFjdHVhbGx5KiByZWxldmFudCBlbnRyeSBwb2ludHMgdG8gdGhlIGNoYW5nZWQgbG9naWMgZm9yIGZ1enppbmcgcHVycG9zZXMuIEZpcnN0LCBJJiMzOTttIGNoZWNraW5nIHRoZSBgRm9jdXNTeW1ib2xzYC4uLiByaWdodC4KCkkgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBhbHRlcmVkIG9yIGFyZSBkaXJlY3QgZW50cnlwb2ludHMgdG8gdGhlIG1vZGlmaWVkIGxvZ2ljLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGRpZmYgcmV2aWV3LCBmb2N1c2luZyBvbiB3aGF0IHdhcyBjaGFuZ2VkLiBJIHNlZSB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGRpZmY6CgpJbiBgbW0vbWVtY29udHJvbC12MS5jYCwgSSYjMzk7dmUgZ290IGEgbGlzdC4KCkluIGBtbS9tZW1jb250cm9sLmNgLCB0aGVyZSYjMzk7cyBhIGxpc3QuCgpBbmQgaW4gYG1tL3Ztc2Nhbi5jYCwgYSBmZXcgbW9yZS4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGhlcmUsIHNlY3Rpb24gZm91ciB0byBiZSBleGFjdC4gVGhleSYjMzk7cmUgdGVsbGluZyBtZSB0byBhdm9pZCBsaXN0aW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocywgYW5kIGluc3RlYWQsIHRvIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gU28sIG1lbW9yeSBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBjb3JlIHN5bmNocm9uaXphdGlvbj8gTm90IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gSSBuZWVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRpbmcgdGhlIGFsdGVyZWQgbG9naWMgb3IgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGZlYXR1cmUuIEFsc28sIGlmIHRoZXJlIGFyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucywgSSBoYXZlIHRvIGZpbmQgbm9uLXN0YXRpYyBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgKnVzZSogdGhlbS4gR290IGl0LgoKU28sIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBleGFtaW5lIHRob3NlIG5vbi1zdGF0aWMgc3ltYm9scyBpbiBgbW0vbWVtY29udHJvbC12MS5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHNlZSB3aGljaCBvbmVzIGFyZSBnb29kIHRhcmdldHMuIGBtZW1jZzFfY29tbWl0X2NoYXJnZWAgc2VlbXMgcmVsZXZhbnQsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGNhbGxlZCBvbiBldmVyeSBwYWdlIGNoYXJnZSB1bmRlciB2MSwgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhlIHYxIGNoYW5nZXMuIGBfX21lbWNnMV9zd2Fwb3V0YCBpcyBhbm90aGVyLCBhbG9uZyB3aXRoIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgLiBOb3csIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGVgIGFuZCBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgIC0gdGhleSBhcmUgZGVmaW5lZCBpbiBgY2Z0eXBlYCwgc28gdGhleSB3aWxsIGFjdHVhbGx5IGJlIHN5bWJvbHMgaW4gdGhlIGJpbmFyeSwgdGhhdCBpcyBwZXJmZWN0ISBBbmQgZXZlbiB0aG91Z2ggYGxydV9nZW5fcm90YXRlX21lbWNnYCBpcyBzdGF0aWMgaW4gYHZtc2Nhbi5jYCwgaXQmIzM5O3Mgc3RpbGwgYSBzeW1ib2wuIFRoYXQmIzM5O3MgZ29vZC4KCldhaXQgYSBzZWNvbmQsIHN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcywgdW5sZXNzIHRoZXkmIzM5O3JlIGlubGluZWQsICphcmUqIHN5bWJvbHMgaW4gdm1saW51eC4gR29vZCBjYXRjaC4gU28gZnVuY3Rpb25zIGxpa2UgYGxydV9nZW5fcm90YXRlX21lbWNnLmlzcmEuMGAgb3IganVzdCBgbHJ1X2dlbl9yb3RhdGVfbWVtY2dgIGFyZSBzeW1ib2xzLiBIb3dldmVyLCB0aG9zZSBub24tc3RhdGljIGVudHJ5cG9pbnRzIG9yIGRpcmVjdCBgY2Z0eXBlYCBoYW5kbGVycyBsaWtlIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGVgLCBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgLCBgbWVtY2cxX3VuY2hhcmdlX2JhdGNoYCwgYG1lbWNnMV9jb21taXRfY2hhcmdlYCwgYW5kIGBfX21lbWNnMV9zd2Fwb3V0YCBhcmUgZXhjZWxsZW50IHRhcmdldHMuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB3aGF0IGNhbGxzIGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2AgaW4gYG1tL3Ztc2Nhbi5jYC4gR290dGEgZmluZCB0aG9zZSBjYWxsZXJzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3JvdGF0ZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQzNzQ9ZW51bSB7XG4tLVxubW0vdm1zY2FuLmMtNDM4MC1cbm1tL3Ztc2Nhbi5jOjQzODE6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG5tbS92bXNjYW4uYy00MzgyLXtcbi0tXG5tbS92bXNjYW4uYz00NDUyPXZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy00NDU4LVxubW0vdm1zY2FuLmM6NDQ1OTpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfT0xEKTtcbm1tL3Ztc2Nhbi5jLTQ0NjAtXHR9XG4tLVxubW0vdm1zY2FuLmM9NTEyNj1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTQ2LVx0XHRpZiAob3ApIHtcbm1tL3Ztc2Nhbi5jOjUxNDc6XHRcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XG5tbS92bXNjYW4uYy01MTQ4LVx0XHRcdG9wID0gMDtcbi0tXG5tbS92bXNjYW4uYy01MTc4LVx0aWYgKG9wKVxubW0vdm1zY2FuLmM6NTE3OTpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XG5tbS92bXNjYW4uYy01MTgwLVxuLS1cbm1tL3Ztc2Nhbi5jLTUxODUtXG5tbS92bXNjYW4uYzo1MTg2Olx0LyogcmVzdGFydCBpZiByYWNlZCB3aXRoIGxydV9nZW5fcm90YXRlX21lbWNnKCkgKi9cbm1tL3Ztc2Nhbi5jLTUxODctXHRpZiAoZ2VuICE9IGdldF9udWxsc192YWx1ZShwb3MpKVxuLS1cbm1tL3Ztc2Nhbi5jPTUxOTY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTIwOS1cdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jOjUyMTA6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbm1tL3Ztc2Nhbi5jLTUyMTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDE1CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDM5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIENvZGUgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIHYxIHNvZnQgbGltaXQgcmVjbGFpbSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIGFzc29jaWF0ZWQgdHJlZSB0cmFja2luZyBsb2dpYy4gSSB3YW50IHRvIHplcm8gaW4gb24gaG93IHRoZSBzcGVjaWZpYyBoYW5kbGVycyBmb3IgYGNncm91cC5tZW1vcnkuc29mdF9saW1pdF9pbl9ieXRlc2AsIG5hbWVseSBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlYCBhbmQgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF9yZWFkYCwgYXJlIGFmZmVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gdGhlIG1lbWNnLXYxIGV2ZW50IGNoZWNrZXJzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgLCBgbWVtY2cxX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgIHRvIGFzc2VzcyBpZiBhbnkgY3JpdGljYWwgbG9naWMgb3IgYm91bmRhcnkgY29uZGl0aW9ucyBhcmUgYmVpbmcgYWx0ZXJlZCBpbiB0ZXJtcyBvZiB1bmNoYXJnaW5nIGFuZCBzd2FwcGluZy4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlcGVuZGVudCBvbiBgQ09ORklHX01FTUNHYCwgYENPTkZJR19NRU1DR19WMWAsIGFuZCBgQ09ORklHX0xSVV9HRU5gLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhhdCB0aGVzZSBhcmUgZW5hYmxlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCB0byBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UuCgpUbyBzdW1tYXJpemUsIHRoaXMgY2hhbmdlIGFwcGVhcnMgdG8gYmUgY2VudGVyZWQgb24gcmVtb3ZpbmcgbGVnYWN5IHYxIHNvZnQgbGltaXQgcmVjbGFpbSBhbmQgdHJlZSB0cmFja2luZywgYW5kLCB3aXRoIHRoZSBrZXkgdG91Y2hwb2ludHMgYmVpbmcgZXZlbnQgY2hlY2tpbmcvcmF0ZS1saW1pdGluZywgdW5jaGFyZ2luZywgcGFnZSByZWNsYWltIGxvb3BzLCBhbmQgbXVsdGktZ2VuIExSVSByb3RhdGlvbi4gVGhlc2UgY29tcG9uZW50cyBhcmUgYWxsIHRpZ2h0bHkgY291cGxlZCwgc28gYW55IGNoYW5nZSBpbiB0aGVzZSBmdW5jdGlvbnMgbXVzdCBiZSB2aWV3ZWQgaG9saXN0aWNhbGx5LgoKR2l2ZW4gdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIHRvdWNoIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBzdWJzeXN0ZW0gY29kZSBwYXRocywgSSBhbSBkZWVtaW5nIHRoaXMgcGF0Y2ggYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAuIEkgaGF2ZSB0aGUgZm9sbG93aW5nIHN5bWJvbHMgaW4gbXkgc2lnaHQ6Ci0gYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAKLSBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgCi0gYG1lbWNnMV91bmNoYXJnZV9iYXRjaGAKLSBgbWVtY2cxX2NvbW1pdF9jaGFyZ2VgCi0gYF9fbWVtY2cxX3N3YXBvdXRgCi0gYGxydV9nZW5fcm90YXRlX21lbWNnYAoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhpcyBhbmFseXNpcyBkb2N1bWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZCYjMzQ7LAogICAgJiMzNDttZW1jZzFfdW5jaGFyZ2VfYmF0Y2gmIzM0OywKICAgICYjMzQ7bWVtY2cxX2NvbW1pdF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JvdGF0ZV9tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZCYjMzQ7LAogICAgJiMzNDttZW1jZzFfdW5jaGFyZ2VfYmF0Y2gmIzM0OywKICAgICYjMzQ7bWVtY2cxX2NvbW1pdF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JvdGF0ZV9tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZW1vdmVzIHRoZSBsZWdhY3kgY2dyb3VwIHYxIHNvZnQtbGltaXQgcmVjbGFpbSBtZWNoYW5pc20gYWNyb3NzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1lbWNvbnRyb2wsIG1lbWNvbnRyb2wtdjEsIGFuZCB2bXNjYW4pLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBkZWxldGVzIHRoZSBzb2Z0IGxpbWl0IFJCLXRyZWUgdHJhY2tpbmcgc3RydWN0dXJlcywgZnVuY3Rpb25zLCBhbmQgdHJhY2Vwb2ludHMuXG4yLiBJdCByZW1vdmVzIHRoZSB1bnVzZWQgYHNvZnRfbGltaXRgIGFuZCBgdGFyZ2V0c2AgZmllbGRzIGZyb20gYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdWAsIHNpbXBsaWZ5aW5nIHBlci1jcHUgZXZlbnQgcmF0ZWxpbWl0aW5nIHRvIGp1c3QgYHRocmVzaG9sZF90YXJnZXRgLlxuMy4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBuaWRgIGZpZWxkIGZyb20gYHN0cnVjdCB1bmNoYXJnZV9nYXRoZXJgIGFuZCB1bnVzZWQgc2Nhbm5pbmcgc3RhdGlzdGljcyB2YXJpYWJsZXMgZnJvbSByZWNsYWltIHBhdGhzIChgc2hyaW5rX3pvbmVzYCBhbmQgYGJhbGFuY2VfcGdkYXRgKS5cblxuVGhlIGNoYW5nZXMgY29uc2lzdCBzdHJpY3RseSBvZiBkZWFkL2RlcHJlY2F0ZWQgY29kZSByZW1vdmFsIGFuZCBzdHJ1Y3R1cmFsIHNpbXBsaWZpY2F0aW9ucy4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZhMGRhY2RkOTU2ZGVmNzRlZTAwNjA1MWVkODY5MmQ5NWQ1OWJiYzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjQyOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBkYTYyNWQyZWRiM2JhLi5jNzk5OTI2NDM1NTYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtOTUsMjAgJiM0Mzs5NSw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAlzdHJ1Y3QgbHJ1dmVjX3N0YXRzCQkJKmxydXZlY19zdGF0czsKIAlzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyBfX3JjdQkqc2hyaW5rZXJfaW5mbzsKIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQotCS8qCi0JICogTWVtY2ctdjEgb25seSBzdHVmZiBpbiBtaWRkbGUgYXMgYnVmZmVyIGJldHdlZW4gcmVhZCBtb3N0bHkgZmllbGRzCi0JICogYW5kIHVwZGF0ZSBvZnRlbiBmaWVsZHMgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZy4gSWYgdjEgc3R1ZmYgaXMKLQkgKiBub3QgcHJlc2VudCwgYW4gZXhwbGljaXQgcGFkZGluZyBpcyBuZWVkZWQuCi0JICovCi0KLQlzdHJ1Y3QgcmJfbm9kZQkJdHJlZV9ub2RlOwkvKiBSQiB0cmVlIG5vZGUgKi8KLQl1bnNpZ25lZCBsb25nCQl1c2FnZV9pbl9leGNlc3M7LyogU2V0IHRvIHRoZSB2YWx1ZSBieSB3aGljaCAqLwotCQkJCQkJLyogdGhlIHNvZnQgbGltaXQgaXMgZXhjZWVkZWQqLwotCWJvb2wJCQlvbl90cmVlOwotI2Vsc2UKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMV8pOwotI2VuZGlmCiAKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CkBAIC0yOTMsOCAmIzQzOzI4MCw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHsKIAogCXN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSBfX3BlcmNwdSAqZXZlbnRzX3BlcmNwdTsKIAotCXVuc2lnbmVkIGxvbmcgc29mdF9saW1pdDsKLQogCS8qIHByb3RlY3RlZCBieSBtZW1jZ19vb21fbG9jayAqLwogCWJvb2wgb29tX2xvY2s7CiAJaW50IHVuZGVyX29vbTsKQEAgLTE5MjQsMTAgJiM0MzsxOTA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogLyogQ2dyb3VwIHYxLXJlbGF0ZWQgZGVjbGFyYXRpb25zICovCiAKICNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsCi0JCQkJCWdmcF90IGdmcF9tYXNrLAotCQkJCQl1bnNpZ25lZCBsb25nICp0b3RhbF9zY2FubmVkKTsKLQogYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMTk0OCwxNCAmIzQzOzE5MjksNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZCkKIH0KIAogI2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovCi1zdGF0aWMgaW5saW5lCi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLAotCQkJCQlnZnBfdCBnZnBfbWFzaywKLQkJCQkJdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA2N2M4NGE4YTcyNTgzLi44NGUyMzdmMmMxN2RiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTYzOCwzNSAmIzQzOzYzOCwzMiBAQCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHsKICAqIEZvciBlYWNoIG5vZGUsIG1lbWNncyBhcmUgZGl2aWRlZCBpbnRvIHR3byBnZW5lcmF0aW9uczogdGhlIG9sZCBhbmQgdGhlCiAgKiB5b3VuZy4gRm9yIGVhY2ggZ2VuZXJhdGlvbiwgbWVtY2dzIGFyZSByYW5kb21seSBzaGFyZGVkIGludG8gbXVsdGlwbGUgYmlucwogICogdG8gaW1wcm92ZSBzY2FsYWJpbGl0eS4gRm9yIGVhY2ggYmluLCB0aGUgaGxpc3RfbnVsbHMgaXMgdmlydHVhbGx5IGRpdmlkZWQKLSAqIGludG8gdGhyZWUgc2VnbWVudHM6IHRoZSBoZWFkLCB0aGUgdGFpbCBhbmQgdGhlIGRlZmF1bHQuCiYjNDM7ICogaW50byB0d28gc2VnbWVudHM6IHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC4KICAqCiAgKiBBbiBvbmxpbmluZyBtZW1jZyBpcyBhZGRlZCB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLgogICogVGhlIGV2aWN0aW9uIHN0YXJ0cyBhdCB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLiBUaGUKICAqIHBlci1ub2RlIG1lbWNnIGdlbmVyYXRpb24gY291bnRlciwgd2hvc2UgcmVtaW5kZXIgKG1vZCBNRU1DR19OUl9HRU5TKSBpbmRleGVzCiAgKiB0aGUgb2xkIGdlbmVyYXRpb24sIGlzIGluY3JlbWVudGVkIHdoZW4gYWxsIGl0cyBiaW5zIGJlY29tZSBlbXB0eS4KICAqCi0gKiBUaGVyZSBhcmUgZm91ciBvcGVyYXRpb25zOgotICogMS4gTUVNQ0dfTFJVX0hFQUQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIGl0cwotICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyAmIzM0O3NlZyYjMzQ7IHRvICYjMzQ7aGVhZCYjMzQ7OwotICogMi4gTUVNQ0dfTFJVX1RBSUwsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIHRhaWwgb2YgYSByYW5kb20gYmluIGluIGl0cwomIzQzOyAqIFRoZXJlIGFyZSB0aHJlZSBvcGVyYXRpb25zOgomIzQzOyAqIDEuIE1FTUNHX0xSVV9UQUlMLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHMKICAqICAgIGN1cnJlbnQgZ2VuZXJhdGlvbiAob2xkIG9yIHlvdW5nKSBhbmQgdXBkYXRlcyBpdHMgJiMzNDtzZWcmIzM0OyB0byAmIzM0O3RhaWwmIzM0OzsKLSAqIDMuIE1FTUNHX0xSVV9PTEQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGQKJiM0MzsgKiAyLiBNRU1DR19MUlVfT0xELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkCiAgKiAgICBnZW5lcmF0aW9uLCB1cGRhdGVzIGl0cyAmIzM0O2dlbiYjMzQ7IHRvICYjMzQ7b2xkJiMzNDsgYW5kIHJlc2V0cyBpdHMgJiMzNDtzZWcmIzM0OyB0byAmIzM0O2RlZmF1bHQmIzM0OzsKLSAqIDQuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlCiYjNDM7ICogMy4gTUVNQ0dfTFJVX1lPVU5HLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUKICAqICAgIHlvdW5nIGdlbmVyYXRpb24sIHVwZGF0ZXMgaXRzICYjMzQ7Z2VuJiMzNDsgdG8gJiMzNDt5b3VuZyYjMzQ7IGFuZCByZXNldHMgaXRzICYjMzQ7c2VnJiMzNDsgdG8KICAqICAgICYjMzQ7ZGVmYXVsdCYjMzQ7LgogICoKICAqIFRoZSBldmVudHMgdGhhdCB0cmlnZ2VyIHRoZSBhYm92ZSBvcGVyYXRpb25zIGFyZToKLSAqIDEuIEV4Y2VlZGluZyB0aGUgc29mdCBsaW1pdCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX0hFQUQ7Ci0gKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbG93LCB3aGljaCB0cmlnZ2VycwomIzQzOyAqIDEuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzCiAgKiAgICBNRU1DR19MUlVfVEFJTDsKLSAqIDMuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplCiYjNDM7ICogMi4gVGhlIGZpcnN0IGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1RBSUw7Ci0gKiA0LiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKJiM0MzsgKiAzLiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HOwotICogNS4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7Ci0gKiA2LiBGaW5pc2hpbmcgdGhlIGFnaW5nIG9uIHRoZSBldmljdGlvbiBwYXRoLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7Ci0gKiA3LiBPZmZsaW5pbmcgYSBtZW1jZywgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX09MRC4KJiM0MzsgKiA0LiBBdHRlbXB0aW5nIHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBtaW4sIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORzsKJiM0MzsgKiA1LiBGaW5pc2hpbmcgdGhlIGFnaW5nIG9uIHRoZSBldmljdGlvbiBwYXRoLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7CiYjNDM7ICogNi4gT2ZmbGluaW5nIGEgbWVtY2csIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9PTEQuCiAgKgogICogTm90ZXM6CiAgKiAxLiBNZW1jZyBMUlUgb25seSBhcHBsaWVzIHRvIGdsb2JhbCByZWNsYWltLCBhbmQgdGhlIHJvdW5kLXJvYmluIGluY3JlbWVudGluZwpAQCAtNjk5LDcgJiM0Mzs2OTYsNiBAQCB2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogdm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogdm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7Ci12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7CiB2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7CiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTsKIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpOwpAQCAtNzQwLDEwICYjNDM7NzM2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCi17Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCmluZGV4IGI0YmY3YjhkZWYxZjUuLjhhODcyOTkwYjRiZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCkBAIC0yMTQsMTMgJiM0MzsyMTQsNiBAQCBERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9iZQogCiAJVFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZykKICk7Ci0KLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbiwKLQotCVRQX1BST1RPKGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLAotCi0JVFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZykKLSk7CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKIERFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwKQEAgLTI2MCwxMyAmIzQzOzI1Myw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsCiAKIAlUUF9BUkdTKG5yX3JlY2xhaW1lZCwgbWVtY2cpCiApOwotCi1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZCwKLQotCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLAotCi0JVFBfQVJHUyhucl9yZWNsYWltZWQsIG1lbWNnKQotKTsKICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi8KIAogVFJBQ0VfRVZFTlQobW1fc2hyaW5rX3NsYWJfc3RhcnQsCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA1Y2MyMjBkYjkwNzY2Li5lMTZmMTI1MGIyNWM4IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTc4LDEwICYjNDM7NzgsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQkgICBnZnBfdCBnZnBfbWFzaywKIAkJCQkJICAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucywKIAkJCQkJICAgaW50ICpzd2FwcGluZXNzKTsKLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsCi0JCQkJICAgICBwZ19kYXRhX3QgKnBnZGF0LAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCk7CiAKICNpZmRlZiBDT05GSUdfTlVNQQogZXh0ZXJuIGludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jCmluZGV4IDA1ZWY1NWNhZTRkYzYuLmJmMmM3ZDUzYjAxYjEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmMKQEAgLTE3LDMwICYjNDM7MTcsNiBAQAogI2luY2x1ZGUgJiMzNDtzd2FwX3RhYmxlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttZW1jb250cm9sLXYxLmgmIzM0OwogCi0vKgotICogQ2dyb3VwcyBhYm92ZSB0aGVpciBsaW1pdHMgYXJlIG1haW50YWluZWQgaW4gYSBSQi1UcmVlLCBpbmRlcGVuZGVudCBvZgotICogdGhlaXIgaGllcmFyY2h5IHJlcHJlc2VudGF0aW9uCi0gKi8KLQotc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSB7Ci0Jc3RydWN0IHJiX3Jvb3QgcmJfcm9vdDsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmJfcmlnaHRtb3N0OwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KLXN0cnVjdCBtZW1fY2dyb3VwX3RyZWUgewotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKnJiX3RyZWVfcGVyX25vZGVbTUFYX05VTU5PREVTXTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlIHNvZnRfbGltaXRfdHJlZSBfX3JlYWRfbW9zdGx5OwotCi0vKgotICogTWF4aW11bSBsb29wcyBpbiBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbSgpLCB1c2VkIGZvciBzb2Z0Ci0gKiBsaW1pdCByZWNsYWltIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMsIGlmIHRoZXkgZXZlciBvY2N1ci4KLSAqLwotI2RlZmluZQlNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTCQkxMDAKLSNkZWZpbmUJTUVNX0NHUk9VUF9NQVhfU09GVF9MSU1JVF9SRUNMQUlNX0xPT1BTCTIKLQogLyogZm9yIE9PTSAqLwogc3RydWN0IG1lbV9jZ3JvdXBfZXZlbnRmZF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0xMDYsMzAxICYjNDM7ODIsNiBAQCBzdGF0aWMgc3RydWN0IGxvY2tkZXBfbWFwIG1lbWNnX29vbV9sb2NrX2RlcF9tYXAgPSB7CiAKIERFRklORV9TUElOTE9DSyhtZW1jZ19vb21fbG9jayk7CiAKLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LAotCQkJCQkgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eiwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgbmV3X3VzYWdlX2luX2V4Y2VzcykKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmYW1wO21jdHotJmd0O3JiX3Jvb3QucmJfbm9kZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXpfbm9kZTsKLQlib29sIHJpZ2h0bW9zdCA9IHRydWU7Ci0KLQlpZiAobXotJmd0O29uX3RyZWUpCi0JCXJldHVybjsKLQotCW16LSZndDt1c2FnZV9pbl9leGNlc3MgPSBuZXdfdXNhZ2VfaW5fZXhjZXNzOwotCWlmICghbXotJmd0O3VzYWdlX2luX2V4Y2VzcykKLQkJcmV0dXJuOwotCXdoaWxlICgqcCkgewotCQlwYXJlbnQgPSAqcDsKLQkJbXpfbm9kZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsCi0JCQkJCXRyZWVfbm9kZSk7Ci0JCWlmIChtei0mZ3Q7dXNhZ2VfaW5fZXhjZXNzICZsdDsgbXpfbm9kZS0mZ3Q7dXNhZ2VfaW5fZXhjZXNzKSB7Ci0JCQlwID0gJmFtcDsoKnApLSZndDtyYl9sZWZ0OwotCQkJcmlnaHRtb3N0ID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlwID0gJmFtcDsoKnApLSZndDtyYl9yaWdodDsKLQkJfQotCX0KLQotCWlmIChyaWdodG1vc3QpCi0JCW1jdHotJmd0O3JiX3JpZ2h0bW9zdCA9ICZhbXA7bXotJmd0O3RyZWVfbm9kZTsKLQotCXJiX2xpbmtfbm9kZSgmYW1wO216LSZndDt0cmVlX25vZGUsIHBhcmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZhbXA7bXotJmd0O3RyZWVfbm9kZSwgJmFtcDttY3R6LSZndDtyYl9yb290KTsKLQltei0mZ3Q7b25fdHJlZSA9IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LAotCQkJCQkgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eikKLXsKLQlpZiAoIW16LSZndDtvbl90cmVlKQotCQlyZXR1cm47Ci0KLQlpZiAoJmFtcDttei0mZ3Q7dHJlZV9ub2RlID09IG1jdHotJmd0O3JiX3JpZ2h0bW9zdCkKLQkJbWN0ei0mZ3Q7cmJfcmlnaHRtb3N0ID0gcmJfcHJldigmYW1wO216LSZndDt0cmVlX25vZGUpOwotCi0JcmJfZXJhc2UoJmFtcDttei0mZ3Q7dHJlZV9ub2RlLCAmYW1wO21jdHotJmd0O3JiX3Jvb3QpOwotCW16LSZndDtvbl90cmVlID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteiwKLQkJCQkgICAgICAgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3R6LSZndDtsb2NrLCBmbGFncyk7Ci0JX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHotJmd0O2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc29mdF9saW1pdF9leGNlc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBwYWdlX2NvdW50ZXJfcmVhZCgmYW1wO21lbWNnLSZndDttZW1vcnkpOwotCXVuc2lnbmVkIGxvbmcgc29mdF9saW1pdCA9IFJFQURfT05DRShtZW1jZy0mZ3Q7c29mdF9saW1pdCk7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3MgPSAwOwotCi0JaWYgKG5yX3BhZ2VzICZndDsgc29mdF9saW1pdCkKLQkJZXhjZXNzID0gbnJfcGFnZXMgLSBzb2Z0X2xpbWl0OwotCi0JcmV0dXJuIGV4Y2VzczsKLX0KLQotc3RhdGljIHZvaWQgbWVtY2cxX3VwZGF0ZV90cmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGV4Y2VzczsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejsKLQotCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgewotCQlpZiAoc29mdF9saW1pdF9leGNlc3MobWVtY2cpKQotCQkJbHJ1X2dlbl9zb2Z0X3JlY2xhaW0obWVtY2csIG5pZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbmlkXTsKLQlpZiAoIW1jdHopCi0JCXJldHVybjsKLQkvKgotCSAqIE5lY2Vzc2FyeSB0byB1cGRhdGUgYWxsIGFuY2VzdG9ycyB3aGVuIGhpZXJhcmNoeSBpcyB1c2VkLgotCSAqIGJlY2F1c2UgdGhlaXIgZXZlbnQgY291bnRlciBpcyBub3QgdG91Y2hlZC4KLQkgKi8KLQlmb3IgKDsgbWVtY2c7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSB7Ci0JCW16ID0gbWVtY2ctJmd0O25vZGVpbmZvW25pZF07Ci0JCWV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKG1lbWNnKTsKLQkJLyoKLQkJICogV2UgaGF2ZSB0byB1cGRhdGUgdGhlIHRyZWUgaWYgbXogaXMgb24gUkItdHJlZSBvcgotCQkgKiBtZW0gaXMgb3ZlciBpdHMgc29mdGxpbWl0LgotCQkgKi8KLQkJaWYgKGV4Y2VzcyB8fCBtei0mZ3Q7b25fdHJlZSkgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3R6LSZndDtsb2NrLCBmbGFncyk7Ci0JCQkvKiBpZiBvbi10cmVlLCByZW1vdmUgaXQgKi8KLQkJCWlmIChtei0mZ3Q7b25fdHJlZSkKLQkJCQlfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTsKLQkJCS8qCi0JCQkgKiBJbnNlcnQgYWdhaW4uIG16LSZndDt1c2FnZV9pbl9leGNlc3Mgd2lsbCBiZSB1cGRhdGVkLgotCQkJICogSWYgZXhjZXNzIGlzIDAsIG5vIHRyZWUgb3BzLgotCQkJICovCi0JCQlfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG16LCBtY3R6LCBleGNlc3MpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHotJmd0O2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KLX0KLQotdm9pZCBtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCWludCBuaWQ7Ci0KLQlmb3JfZWFjaF9ub2RlKG5pZCkgewotCQlteiA9IG1lbWNnLSZndDtub2RlaW5mb1tuaWRdOwotCQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbmlkXTsKLQkJaWYgKG1jdHopCi0JCQltZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKgotX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCi1yZXRyeToKLQlteiA9IE5VTEw7Ci0JaWYgKCFtY3R6LSZndDtyYl9yaWdodG1vc3QpCi0JCWdvdG8gZG9uZTsJCS8qIE5vdGhpbmcgdG8gcmVjbGFpbSBmcm9tICovCi0KLQlteiA9IHJiX2VudHJ5KG1jdHotJmd0O3JiX3JpZ2h0bW9zdCwKLQkJICAgICAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIHRyZWVfbm9kZSk7Ci0JLyoKLQkgKiBSZW1vdmUgdGhlIG5vZGUgbm93IGJ1dCBzb21lb25lIGVsc2UgY2FuIGFkZCBpdCBiYWNrLAotCSAqIHdlIHdpbGwgdG8gYWRkIGl0IGJhY2sgYXQgdGhlIGVuZCBvZiByZWNsYWltIHRvIGl0cyBjb3JyZWN0Ci0JICogcG9zaXRpb24gaW4gdGhlIHRyZWUuCi0JICovCi0JX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0JaWYgKCFzb2Z0X2xpbWl0X2V4Y2Vzcyhtei0mZ3Q7bWVtY2cpIHx8Ci0JICAgICFjc3NfdHJ5Z2V0KCZhbXA7bXotJmd0O21lbWNnLSZndDtjc3MpKQotCQlnb3RvIHJldHJ5OwotZG9uZToKLQlyZXR1cm4gbXo7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqCi1tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCW16ID0gX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopOwotCXNwaW5fdW5sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCXJldHVybiBtejsKLX0KLQotc3RhdGljIGludCBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZywKLQkJCQkgICBwZ19kYXRhX3QgKnBnZGF0LAotCQkJCSAgIGdmcF90IGdmcF9tYXNrLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKnZpY3RpbSA9IE5VTEw7Ci0JaW50IHRvdGFsID0gMDsKLQlpbnQgbG9vcCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3M7Ci0JdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwotCXN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHJlY2xhaW0gPSB7Ci0JCS5wZ2RhdCA9IHBnZGF0LAotCX07Ci0KLQlleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhyb290X21lbWNnKTsKLQotCXdoaWxlICgxKSB7Ci0JCXZpY3RpbSA9IG1lbV9jZ3JvdXBfaXRlcihyb290X21lbWNnLCB2aWN0aW0sICZhbXA7cmVjbGFpbSk7Ci0JCWlmICghdmljdGltKSB7Ci0JCQlsb29wJiM0MzsmIzQzOzsKLQkJCWlmIChsb29wICZndDs9IDIpIHsKLQkJCQkvKgotCQkJCSAqIElmIHdlIGhhdmUgbm90IGJlZW4gYWJsZSB0byByZWNsYWltCi0JCQkJICogYW55dGhpbmcsIGl0IG1pZ2h0IGJlY2F1c2UgdGhlcmUgYXJlCi0JCQkJICogbm8gcmVjbGFpbWFibGUgcGFnZXMgdW5kZXIgdGhpcyBoaWVyYXJjaHkKLQkJCQkgKi8KLQkJCQlpZiAoIXRvdGFsKQotCQkJCQlicmVhazsKLQkJCQkvKgotCQkJCSAqIFdlIHdhbnQgdG8gZG8gbW9yZSB0YXJnZXRlZCByZWNsYWltLgotCQkJCSAqIGV4Y2VzcyAmZ3Q7Jmd0OyAyIGlzIG5vdCB0byBleGNlc3NpdmUgc28gYXMgdG8KLQkJCQkgKiByZWNsYWltIHRvbyBtdWNoLCBub3IgdG9vIGxlc3MgdGhhdCB3ZSBrZWVwCi0JCQkJICogY29taW5nIGJhY2sgdG8gcmVjbGFpbSBmcm9tIHRoaXMgY2dyb3VwCi0JCQkJICovCi0JCQkJaWYgKHRvdGFsICZndDs9IChleGNlc3MgJmd0OyZndDsgMikgfHwKLQkJCQkJKGxvb3AgJmd0OyBNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTKSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQl0b3RhbCAmIzQzOz0gbWVtX2Nncm91cF9zaHJpbmtfbm9kZSh2aWN0aW0sIGdmcF9tYXNrLCBmYWxzZSwKLQkJCQkJcGdkYXQsICZhbXA7bnJfc2Nhbm5lZCk7Ci0JCSp0b3RhbF9zY2FubmVkICYjNDM7PSBucl9zY2FubmVkOwotCQlpZiAoIXNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpKQotCQkJYnJlYWs7Ci0JfQotCW1lbV9jZ3JvdXBfaXRlcl9icmVhayhyb290X21lbWNnLCB2aWN0aW0pOwotCXJldHVybiB0b3RhbDsKLX0KLQotdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwKLQkJCQkJICAgIGdmcF90IGdmcF9tYXNrLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCkKLXsKLQl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCA9IDA7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LCAqbmV4dF9teiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyByZWNsYWltZWQ7Ci0JaW50IGxvb3AgPSAwOwotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3M7Ci0KLQlpZiAobHJ1X2dlbl9lbmFibGVkKCkpCi0JCXJldHVybiAwOwotCi0JaWYgKG9yZGVyICZndDsgMCkKLQkJcmV0dXJuIDA7Ci0KLQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbcGdkYXQtJmd0O25vZGVfaWRdOwotCi0JLyoKLQkgKiBEbyBub3QgZXZlbiBib3RoZXIgdG8gY2hlY2sgdGhlIGxhcmdlc3Qgbm9kZSBpZiB0aGUgcm9vdAotCSAqIGlzIGVtcHR5LiBEbyBpdCBsb2NrbGVzcyB0byBwcmV2ZW50IGxvY2sgYm91bmNpbmcuIFJhY2VzCi0JICogYXJlIGFjY2VwdGFibGUgYXMgc29mdCBsaW1pdCBpcyBiZXN0IGVmZm9ydCBhbnl3YXkuCi0JICovCi0JaWYgKCFtY3R6IHx8IFJCX0VNUFRZX1JPT1QoJmFtcDttY3R6LSZndDtyYl9yb290KSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFRoaXMgbG9vcCBjYW4gcnVuIGEgd2hpbGUsIHNwZWNpYWxseSBpZiBtZW1fY2dyb3VwJiMzOTtzIGNvbnRpbnVvdXNseQotCSAqIGtlZXAgZXhjZWVkaW5nIHRoZWlyIHNvZnQgbGltaXQgYW5kIHB1dHRpbmcgdGhlIHN5c3RlbSB1bmRlcgotCSAqIHByZXNzdXJlCi0JICovCi0JZG8gewotCQlpZiAobmV4dF9teikKLQkJCW16ID0gbmV4dF9tejsKLQkJZWxzZQotCQkJbXogPSBtZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopOwotCQlpZiAoIW16KQotCQkJYnJlYWs7Ci0KLQkJcmVjbGFpbWVkID0gbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0obXotJmd0O21lbWNnLCBwZ2RhdCwKLQkJCQkJCSAgICBnZnBfbWFzaywgdG90YWxfc2Nhbm5lZCk7Ci0JCW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkOwotCQlzcGluX2xvY2tfaXJxKCZhbXA7bWN0ei0mZ3Q7bG9jayk7Ci0KLQkJLyoKLQkJICogSWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW55dGhpbmcgZnJvbSB0aGlzIG1lbW9yeSBjZ3JvdXAKLQkJICogaXQgaXMgdGltZSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNncm91cAotCQkgKi8KLQkJbmV4dF9teiA9IE5VTEw7Ci0JCWlmICghcmVjbGFpbWVkKQotCQkJbmV4dF9teiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTsKLQotCQlleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhtei0mZ3Q7bWVtY2cpOwotCQkvKgotCQkgKiBPbmUgc2Nob29sIG9mIHRob3VnaHQgc2F5cyB0aGF0IHdlIHNob3VsZCBub3QgYWRkCi0JCSAqIGJhY2sgdGhlIG5vZGUgdG8gdGhlIHRyZWUgaWYgcmVjbGFpbSByZXR1cm5zIDAuCi0JCSAqIEJ1dCBvdXIgcmVjbGFpbSBjb3VsZCByZXR1cm4gMCwgc2ltcGx5IGJlY2F1c2UgZHVlCi0JCSAqIHRvIHByaW9yaXR5IHdlIGFyZSBleHBvc2luZyBhIHNtYWxsZXIgc3Vic2V0IG9mCi0JCSAqIG1lbW9yeSB0byByZWNsYWltIGZyb20uIENvbnNpZGVyIHRoaXMgYXMgYSBsb25nZXIKLQkJICogdGVybSBUT0RPLgotCQkgKi8KLQkJLyogSWYgZXhjZXNzID09IDAsIG5vIHRyZWUgb3BzICovCi0JCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXosIG1jdHosIGV4Y2Vzcyk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCQljc3NfcHV0KCZhbXA7bXotJmd0O21lbWNnLSZndDtjc3MpOwotCQlsb29wJiM0MzsmIzQzOzsKLQkJLyoKLQkJICogQ291bGQgbm90IHJlY2xhaW0gYW55dGhpbmcgYW5kIHRoZXJlIGFyZSBubyBtb3JlCi0JCSAqIG1lbSBjZ3JvdXBzIHRvIHRyeSBvciB3ZSBzZWVtIHRvIGJlIGxvb3Bpbmcgd2l0aG91dAotCQkgKiByZWNsYWltaW5nIGFueXRoaW5nLgotCQkgKi8KLQkJaWYgKCFucl9yZWNsYWltZWQgJmFtcDsmYW1wOwotCQkJKG5leHRfbXogPT0gTlVMTCB8fAotCQkJbG9vcCAmZ3Q7IE1FTV9DR1JPVVBfTUFYX1NPRlRfTElNSVRfUkVDTEFJTV9MT09QUykpCi0JCQlicmVhazsKLQl9IHdoaWxlICghbnJfcmVjbGFpbWVkKTsKLQlpZiAobmV4dF9teikKLQkJY3NzX3B1dCgmYW1wO25leHRfbXotJmd0O21lbWNnLSZndDtjc3MpOwotCXJldHVybiBucl9yZWNsYWltZWQ7Ci19Ci0KIHN0YXRpYyB1NjQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCiAJCQkJc3RydWN0IGNmdHlwZSAqY2Z0KQogewpAQCAtNTExLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RocmVzaG9sZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJfQogfQogCi0vKiBDZ3JvdXAxOiB0aHJlc2hvbGQgbm90aWZpY2F0aW9ucyAmYW1wOyBzb2Z0bGltaXQgdHJlZSB1cGRhdGVzICovCiYjNDM7LyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgKi8KIAogLyoKICAqIFBlciBtZW1jZyBldmVudCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IHBhZ2Vpbi9wYWdlb3V0LiBXaXRoIFRIUCwKQEAgLTUxOSwxNSAmIzQzOzIwMCw5IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKICAqIHRvIHRyaWdnZXIgc29tZSBwZXJpb2RpYyBldmVudHMuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBiZXR0ZXIKICAqIHRoYW4gdXNpbmcgamlmZmllcyBldGMuIHRvIGhhbmRsZSBwZXJpb2RpYyBtZW1jZyBldmVudC4KICAqLwotZW51bSBtZW1fY2dyb3VwX2V2ZW50c190YXJnZXQgewotCU1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCwKLQlNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQsCi0JTUVNX0NHUk9VUF9OVEFSR0VUUywKLX07Ci0KIHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlX2V2ZW50czsKLQl1bnNpZ25lZCBsb25nIHRhcmdldHNbTUVNX0NHUk9VUF9OVEFSR0VUU107CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX3RhcmdldDsKIH07CiAKIHN0YXRpYyB2b2lkIG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcykKQEAgLTU0NCw1MyAmIzQzOzIxOSwyOSBAQCBzdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpCiB9CiAKICNkZWZpbmUgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUIDEyOAotI2RlZmluZSBTT0ZUTElNSVRfRVZFTlRTX1RBUkdFVCAxMDI0CiAKLXN0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCWVudW0gbWVtX2Nncm91cF9ldmVudHNfdGFyZ2V0IHRhcmdldCkKJiM0MztzdGF0aWMgYm9vbCBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCwgbmV4dDsKIAogCXZhbCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7bnJfcGFnZV9ldmVudHMpOwotCW5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctJmd0O2V2ZW50c19wZXJjcHUtJmd0O3RhcmdldHNbdGFyZ2V0XSk7CiYjNDM7CW5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctJmd0O2V2ZW50c19wZXJjcHUtJmd0O3RocmVzaG9sZF90YXJnZXQpOwogCS8qIGZyb20gdGltZV9hZnRlcigpIGluIGppZmZpZXMuaCAqLwogCWlmICgobG9uZykobmV4dCAtIHZhbCkgJmx0OyAwKSB7Ci0JCXN3aXRjaCAodGFyZ2V0KSB7Ci0JCWNhc2UgTUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNIOgotCQkJbmV4dCA9IHZhbCAmIzQzOyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQ6Ci0JCQluZXh0ID0gdmFsICYjNDM7IFNPRlRMSU1JVF9FVkVOVFNfVEFSR0VUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLSZndDtldmVudHNfcGVyY3B1LSZndDt0YXJnZXRzW3RhcmdldF0sIG5leHQpOwomIzQzOwkJX190aGlzX2NwdV93cml0ZShtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7dGhyZXNob2xkX3RhcmdldCwKJiM0MzsJCQkJIHZhbCAmIzQzOyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKgotICogQ2hlY2sgZXZlbnRzIGluIG9yZGVyLgotICoKLSAqLwotc3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCiYjNDM7c3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQogCQlyZXR1cm47CiAKLQkvKiB0aHJlc2hvbGQgZXZlbnQgaXMgdHJpZ2dlcmVkIGluIGZpbmVyIGdyYWluIHRoYW4gc29mdCBsaW1pdCAqLwotCWlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLAotCQkJCQkJTUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNIKSkpIHsKLQkJYm9vbCBkb19zb2Z0bGltaXQ7Ci0KLQkJZG9fc29mdGxpbWl0ID0gbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZywKLQkJCQkJCU1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVCk7CiYjNDM7CWlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnKSkpCiAJCW1lbV9jZ3JvdXBfdGhyZXNob2xkKG1lbWNnKTsKLQkJaWYgKHVubGlrZWx5KGRvX3NvZnRsaW1pdCkpCi0JCQltZW1jZzFfdXBkYXRlX3RyZWUobWVtY2csIG5pZCk7Ci0JfQogfQogCiB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKQEAgLTU5OSw3ICYjNDM7MjUwLDcgQEAgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKG1lbWNnLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwotCW1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpOwomIzQzOwltZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTY3Miw3ICYjNDM7MzIzLDcgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiAJVk1fV0FSTl9PTl9JUlFTX0VOQUJMRUQoKTsKIAltZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCXByZWVtcHRfZW5hYmxlX25lc3RlZCgpOwotCW1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpOwomIzQzOwltZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogCW9ial9jZ3JvdXBfcHV0KG9iamNnKTsKQEAgLTcyNiwxNCAmIzQzOzM3NywxNCBAQCB2b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbykKICNlbmRpZgogCiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKQomIzQzOwkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY291bnRfbWVtY2dfZXZlbnRzKG1lbWNnLCBQR1BHT1VULCBwZ3Bnb3V0KTsKIAlfX3RoaXNfY3B1X2FkZChtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7bnJfcGFnZV9ldmVudHMsIG5yX21lbW9yeSk7Ci0JbWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgbmlkKTsKJiM0MzsJbWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0yNTY2LDIyICYjNDM7MjIxNywzIEBAIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlmcmVlX3BlcmNwdShtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdSk7CiB9Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1lbWNnMV9pbml0KHZvaWQpCi17Ci0JaW50IG5vZGU7Ci0KLQlmb3JfZWFjaF9ub2RlKG5vZGUpIHsKLQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqcnRwbjsKLQotCQlydHBuID0ga3phbGxvY19ub2RlKHNpemVvZigqcnRwbiksIEdGUF9LRVJORUwsIG5vZGUpOwotCi0JCXJ0cG4tJmd0O3JiX3Jvb3QgPSBSQl9ST09UOwotCQlydHBuLSZndDtyYl9yaWdodG1vc3QgPSBOVUxMOwotCQlzcGluX2xvY2tfaW5pdCgmYW1wO3J0cG4tJmd0O2xvY2spOwotCQlzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtub2RlXSA9IHJ0cG47Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1zdWJzeXNfaW5pdGNhbGwobWVtY2cxX2luaXQpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oCmluZGV4IDFlMzk0MjY5YzYxM2QuLmI5YTIxZjBmZDJjM2EgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmgKQEAgLTQxLDEyICYjNDM7NDEsNiBAQCBib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiAKIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKLXZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JV1JJVEVfT05DRShtZW1jZy0mZ3Q7c29mdF9saW1pdCwgUEFHRV9DT1VOVEVSX01BWCk7Ci19CiAKIHN0cnVjdCBjZ3JvdXBfdGFza3NldDsKIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CkBAIC02NSw3ICYjNDM7NTksNyBAQCB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCiB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKTsKJiM0MzsJCQkgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7CiAKIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpOwogdm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTsKQEAgLTk4LDggJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfYWxsb2NfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgeyByZXR1cm4gdHJ1ZTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQogc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpCkBAIC0xMTUsNyAmIzQzOzEwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKSB7fQomIzQzOwkJCQkJIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KSB7fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpIHt9CiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBiZmQwYTc0ZmFjOTIzLi4zMDYzNmI5ZDk2NzM5IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00MjU3LDcgJiM0Mzs0MjU3LDYgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAJCXJldHVybiBFUlJfQ0FTVChtZW1jZyk7CiAKIAlwYWdlX2NvdW50ZXJfc2V0X2hpZ2goJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTsKLQltZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7CiAjaWZkZWYgQ09ORklHX1pTV0FQCiAJbWVtY2ctJmd0O3pzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJV1JJVEVfT05DRShtZW1jZy0mZ3Q7enN3YXBfd3JpdGViYWNrLCB0cnVlKTsKQEAgLTQ0MjksNyAmIzQzOzQ0MjgsNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAKIAl2bXByZXNzdXJlX2NsZWFudXAoJmFtcDttZW1jZy0mZ3Q7dm1wcmVzc3VyZSk7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO21lbWNnLSZndDtoaWdoX3dvcmspOwotCW1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhtZW1jZyk7CiAJZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTsKIAltZW1fY2dyb3VwX2ZyZWUobWVtY2cpOwogfQpAQCAtNDQ2NSw3ICYjNDM7NDQ2Myw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJcGFnZV9jb3VudGVyX3NldF9taW4oJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LCAwKTsKIAlwYWdlX2NvdW50ZXJfc2V0X2xvdygmYW1wO21lbWNnLSZndDttZW1vcnksIDApOwogCXBhZ2VfY291bnRlcl9zZXRfaGlnaCgmYW1wO21lbWNnLSZndDttZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpOwotCW1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTsKIAlwYWdlX2NvdW50ZXJfc2V0X2hpZ2goJmFtcDttZW1jZy0mZ3Q7c3dhcCwgUEFHRV9DT1VOVEVSX01BWCk7CiAJbWVtY2dfd2JfZG9tYWluX3NpemVfY2hhbmdlZChtZW1jZyk7CiB9CkBAIC01MzMxLDcgJiM0Mzs1MzI4LDYgQEAgc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7CiAJdW5zaWduZWQgbG9uZyBucl9tZW1vcnk7CiAJdW5zaWduZWQgbG9uZyBwZ3Bnb3V0OwogCXVuc2lnbmVkIGxvbmcgbnJfa21lbTsKLQlpbnQgbmlkOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHVuY2hhcmdlX2dhdGhlcl9jbGVhcihzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZykKQEAgLTUzNTQsNyAmIzQzOzUzNTAsNyBAQCBzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZykKIAkJbWVtY2cxX29vbV9yZWNvdmVyKG1lbWNnKTsKIAl9CiAKLQltZW1jZzFfdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHVnLSZndDtwZ3Bnb3V0LCB1Zy0mZ3Q7bnJfbWVtb3J5LCB1Zy0mZ3Q7bmlkKTsKJiM0MzsJbWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy0mZ3Q7cGdwZ291dCwgdWctJmd0O25yX21lbW9yeSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIHVuY2hhcmdlX2ZvbGlvICovCkBAIC01MzgzLDcgJiM0Mzs1Mzc5LDYgQEAgc3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpCiAJCQl1bmNoYXJnZV9nYXRoZXJfY2xlYXIodWcpOwogCQl9CiAJCXVnLSZndDtvYmpjZyA9IG9iamNnOwotCQl1Zy0mZ3Q7bmlkID0gZm9saW9fbmlkKGZvbGlvKTsKIAogCQkvKiBwYWlycyB3aXRoIG9ial9jZ3JvdXBfcHV0IGluIHVuY2hhcmdlX2JhdGNoICovCiAJCW9ial9jZ3JvdXBfZ2V0KG9iamNnKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZmRkMTMyOTlhMDRhOS4uZGViMDg3YzU3MDA3ZCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQzNzMsNyAmIzQzOzQzNzMsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqLwogZW51bSB7CiAJTUVNQ0dfTFJVX05PUCwKLQlNRU1DR19MUlVfSEVBRCwKIAlNRU1DR19MUlVfVEFJTCwKIAlNRU1DR19MUlVfT0xELAogCU1FTUNHX0xSVV9ZT1VORywKQEAgLTQzOTUsOSAmIzQzOzQzOTQsNyBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcCkKIAluZXcgPSBvbGQgPSBscnV2ZWMtJmd0O2xydWdlbi5nZW47CiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqLwotCWlmIChvcCA9PSBNRU1DR19MUlVfSEVBRCkKLQkJc2VnID0gTUVNQ0dfTFJVX0hFQUQ7Ci0JZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpCiYjNDM7CWlmIChvcCA9PSBNRU1DR19MUlVfVEFJTCkKIAkJc2VnID0gTUVNQ0dfTFJVX1RBSUw7CiAJZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX09MRCkKIAkJbmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC0mZ3Q7bWVtY2dfbHJ1LnNlcSk7CkBAIC00NDExLDcgJiM0Mzs0NDA4LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApCiAKIAlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bHJ1dmVjLSZndDtscnVnZW4ubGlzdCk7CiAKLQlpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQgfHwgb3AgPT0gTUVNQ0dfTFJVX09MRCkKJiM0MzsJaWYgKG9wID09IE1FTUNHX0xSVV9PTEQpCiAJCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuLmxpc3QsICZhbXA7cGdkYXQtJmd0O21lbWNnX2xydS5maWZvW25ld11bYmluXSk7CiAJZWxzZQogCQlobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5saXN0LCAmYW1wO3BnZGF0LSZndDttZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pOwpAQCAtNDQ4OSwxNSAmIzQzOzQ0ODYsNiBAQCB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJfQogfQogCi12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCkKLXsKLQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpOwotCi0JLyogc2VlIHRoZSBjb21tZW50IG9uIE1FTUNHX05SX0dFTlMgKi8KLQlpZiAoUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpCi0JCWxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpOwotfQotCiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKQogewogCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7CkBAIC02NDM5LDggJiM0Mzs2NDI3LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCXN0cnVjdCB6b25lcmVmICp6OwogCXN0cnVjdCB6b25lICp6b25lOwotCXVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7Ci0JdW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7CiAJZ2ZwX3Qgb3JpZ19tYXNrOwogCXBnX2RhdGFfdCAqbGFzdF9wZ2RhdCA9IE5VTEw7CiAJcGdfZGF0YV90ICpmaXJzdF9wZ2RhdCA9IE5VTEw7CkBAIC02NDgyLDM1ICYjNDM7NjQ2OCwxNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJCQkJc2MtJmd0O2NvbXBhY3Rpb25fcmVhZHkgPSB0cnVlOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCi0JCQkvKgotCQkJICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlCi0JCQkgKiB6b25lbGlzdCBpcyBvcmRlcmVkIGJ5IHpvbmUgKG5vdCB0aGUgZGVmYXVsdCkgdGhlbiBhCi0JCQkgKiBub2RlIG1heSBiZSBzaHJ1bmsgbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZQotCQkJICogdGhlIHVzZXIgcHJlZmVycyBsb3dlciB6b25lcyBiZWluZyBwcmVzZXJ2ZWQuCi0JCQkgKi8KLQkJCWlmICh6b25lLSZndDt6b25lX3BnZGF0ID09IGxhc3RfcGdkYXQpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkgKiBUaGlzIHN0ZWFscyBwYWdlcyBmcm9tIG1lbW9yeSBjZ3JvdXBzIG92ZXIgc29mdGxpbWl0Ci0JCQkgKiBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlcyBhbmQKLQkJCSAqIHNjYW5uZWQgcGFnZXMuIFRoaXMgd29ya3MgZm9yIGdsb2JhbCBtZW1vcnkgcHJlc3N1cmUKLQkJCSAqIGFuZCBiYWxhbmNpbmcsIG5vdCBmb3IgYSBtZW1jZyYjMzk7cyBsaW1pdC4KLQkJCSAqLwotCQkJbnJfc29mdF9zY2FubmVkID0gMDsKLQkJCW5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbSh6b25lLSZndDt6b25lX3BnZGF0LAotCQkJCQkJCQkgICAgICBzYy0mZ3Q7b3JkZXIsIHNjLSZndDtnZnBfbWFzaywKLQkJCQkJCQkJICAgICAgJmFtcDtucl9zb2Z0X3NjYW5uZWQpOwotCQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gbnJfc29mdF9yZWNsYWltZWQ7Ci0JCQlzYy0mZ3Q7bnJfc2Nhbm5lZCAmIzQzOz0gbnJfc29mdF9zY2FubmVkOwotCQkJLyogbmVlZCBzb21lIGNoZWNrIGZvciBhdm9pZCBtb3JlIHNocmlua196b25lKCkgKi8KIAkJfQogCiAJCWlmICghZmlyc3RfcGdkYXQpCiAJCQlmaXJzdF9wZ2RhdCA9IHpvbmUtJmd0O3pvbmVfcGdkYXQ7CiAKLQkJLyogU2VlIGNvbW1lbnQgYWJvdXQgc2FtZSBjaGVjayBmb3IgZ2xvYmFsIHJlY2xhaW0gYWJvdmUgKi8KJiM0MzsJCS8qCiYjNDM7CQkgKiBTaHJpbmsgZWFjaCBub2RlIGluIHRoZSB6b25lbGlzdCBvbmNlLiBJZiB0aGUgem9uZWxpc3QgaXMKJiM0MzsJCSAqIG9yZGVyZWQgYnkgem9uZSAobm90IHRoZSBkZWZhdWx0KSB0aGVuIGEgbm9kZSBtYXkgYmUgc2hydW5rCiYjNDM7CQkgKiBtdWx0aXBsZSB0aW1lcyBidXQgaW4gdGhhdCBjYXNlIHRoZSB1c2VyIHByZWZlcnMgbG93ZXIgem9uZXMKJiM0MzsJCSAqIGJlaW5nIHByZXNlcnZlZC4KJiM0MzsJCSAqLwogCQlpZiAoem9uZS0mZ3Q7em9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KQogCQkJY29udGludWU7CiAJCWxhc3RfcGdkYXQgPSB6b25lLSZndDt6b25lX3BnZGF0OwpAQCAtNjgyNSw0NyAmIzQzOzY3OTMsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlciwKIAogI2lmZGVmIENPTkZJR19NRU1DRwogCi0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovCi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLAotCQkJCQkJcGdfZGF0YV90ICpwZ2RhdCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpCi17Ci0Jc3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0gewotCQkubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsCi0JCS50YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnLAotCQkubWF5X3dyaXRlcGFnZSA9IDEsCi0JCS5tYXlfdW5tYXAgPSAxLAotCQkucmVjbGFpbV9pZHggPSBNQVhfTlJfWk9ORVMgLSAxLAotCQkubWF5X3N3YXAgPSAhbm9zd2FwLAotCX07Ci0KLQlXQVJOX09OX09OQ0UoIWN1cnJlbnQtJmd0O3JlY2xhaW1fc3RhdGUpOwotCi0Jc2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSykgfAotCQkJKEdGUF9ISUdIVVNFUl9NT1ZBQkxFICZhbXA7IH5HRlBfUkVDTEFJTV9NQVNLKTsKLQotCXRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbihzYy5nZnBfbWFzaywKLQkJCQkJCSAgICAgIHNjLm9yZGVyLAotCQkJCQkJICAgICAgbWVtY2cpOwotCi0JLyoKLQkgKiBOT1RFOiBBbHRob3VnaCB3ZSBjYW4gZ2V0IHRoZSBwcmlvcml0eSBmaWVsZCwgdXNpbmcgaXQKLQkgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi4KLQkgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0Ci0JICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrCi0JICogdGhlIHByaW9yaXR5IGFuZCBtYWtlIGl0IHplcm8uCi0JICovCi0Jc2hyaW5rX2xydXZlYyhscnV2ZWMsICZhbXA7c2MpOwotCi0JdHJhY2VfbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZChzYy5ucl9yZWNsYWltZWQsIG1lbWNnKTsKLQotCSpucl9zY2FubmVkID0gc2MubnJfc2Nhbm5lZDsKLQotCXJldHVybiBzYy5ucl9yZWNsYWltZWQ7Ci19Ci0KIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiAJCQkJCSAgIGdmcF90IGdmcF9tYXNrLApAQCAtNzE3MSw4ICYjNDM7NzA5OCw2IEBAIGNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpCiBzdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KQogewogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7Ci0JdW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7CiAJdW5zaWduZWQgbG9uZyBwZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBucl9ib29zdF9yZWNsYWltOwogCXVuc2lnbmVkIGxvbmcgem9uZV9ib29zdHNbTUFYX05SX1pPTkVTXSA9IHsgMCwgfTsKQEAgLTcyNzgsMTIgJiM0Mzs3MjAzLDcgQEAgc3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCkKIAkJICovCiAJCWtzd2FwZF9hZ2Vfbm9kZShwZ2RhdCwgJmFtcDtzYyk7CiAKLQkJLyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovCiAJCXNjLm5yX3NjYW5uZWQgPSAwOwotCQlucl9zb2Z0X3NjYW5uZWQgPSAwOwotCQlucl9zb2Z0X3JlY2xhaW1lZCA9IG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdkYXQsIHNjLm9yZGVyLAotCQkJCQkJCSAgICAgIHNjLmdmcF9tYXNrLCAmYW1wO25yX3NvZnRfc2Nhbm5lZCk7Ci0JCXNjLm5yX3JlY2xhaW1lZCAmIzQzOz0gbnJfc29mdF9yZWNsYWltZWQ7CiAKIAkJLyoKIAkJICogVGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8gcmFpc2UgdGhlIHNjYW5uaW5nIHByaW9yaXR5IGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcyNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gSXQgYXBwZWFycyB0aGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IHJlbW92aW5nLCBvciBhdCBsZWFzdCBzaWduaWZpY2FudGx5IGNsZWFuaW5nIHVwLCBzb2Z0IGxpbWl0IHJlY2xhaW0gZnVuY3Rpb25hbGl0eSBmcm9tIG1lbWNnIHYxLiBUaGUgY2hhbmdlcyBhcmUgcXVpdGUgZXh0ZW5zaXZlLiBJJiMzOTttIHNlZWluZyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBgc29mdF9saW1pdF90cmVlYCwgYHVzYWdlX2luX2V4Y2Vzc2AsIGFuZCB0aGUgYHNvZnRfbGltaXRgIGZpZWxkIHdpdGhpbiBgbWVtX2Nncm91cGAgZ2V0dGluZyBheGVkLiBLZXkgZnVuY3Rpb25zIGxpa2UgYG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW1gLCBgbWVtY2cxX3VwZGF0ZV90cmVlYCwgYW5kIHNldmVyYWwgb3RoZXJzIGFyZSBiZWluZyBkZXByZWNhdGVkIHRvby4KClNwZWNpZmljYWxseSwgSSBhbSBzZWVpbmcgdGhlc2Uga2V5IGNoYW5nZXM6Ci0gYHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGVgIGFuZCBgc29mdF9saW1pdF90cmVlYCBhcmUgZ29uZSBmcm9tIGBtbS9tZW1jb250cm9sLXYxLmNgLgotIE1lbWJlcnMgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCAoYHRyZWVfbm9kZWAsIGB1c2FnZV9pbl9leGNlc3NgLCBgb25fdHJlZWApIGFyZSBnb25lLCBub3cgd2l0aCBzb21lIHBhZGRpbmcgYWRqdXN0bWVudHMuCi0gVGhlIGBzb2Z0X2xpbWl0YCBmaWVsZCBpcyBhbHNvIGdvbmUgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgLgotIFJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBiZWluZyByZW1vdmVkLCBzdWNoIGFzIGBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltYCwgYG1lbWNnMV91cGRhdGVfdHJlZWAsIGBfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkYCwgYF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWRgLCBgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW1gIGFtb25nIG90aGVycy4KLSBUaGUgYG1lbWNnMV9ldmVudHNfcGVyY3B1YCBzdHJ1Y3QgaGFzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCB3aGVyZSBgdGFyZ2V0c1tNRU1fQ0dST1VQX05UQVJHRVRTXWAgaXMgcmVwbGFjZWQgYnkgYHVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX3RhcmdldGAuCi0gYG1lbWNnMV9ldmVudF9yYXRlbGltaXRgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIGB0aHJlc2hvbGRfdGFyZ2V0YCBpbnN0ZWFkIG9mIGFuIGFycmF5IGluZGV4LgotIFRoZSBgbmlkYCBhcmd1bWVudCBpcyBhbHNvIHJlbW92ZWQgZnJvbSBzZXZlcmFsIGtleSBmdW5jdGlvbnMgKGBtZW1jZzFfY2hlY2tfZXZlbnRzYCwgYG1lbWNnMV91bmNoYXJnZV9iYXRjaGApIGFuZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYC4KLSBXaXRoaW4gYG1tL3Ztc2Nhbi5jYCwgdGhlIHNvZnQgbGltaXQgcmVjbGFpbSBsb2dpYyBpcyBiZWluZyByZW1vdmVkIGZyb20gYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCwgd2l0aCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgTUVNQ0dfTFJVX0hFQURgIGFsc28gYmVpbmcgcmVtb3ZlZC4KLSBGaW5hbGx5LCB0aGUgYXNzb2NpYXRlZCB0cmFjZSBldmVudHMgKGBtbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fYmVnaW5gIGFuZCBgZW5kYCkgaW4gYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oYCwgYW5kIGRlY2xhcmF0aW9ucyBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBhcmUgYWxzbyBiZWluZyByZW1vdmVkLgoKU28sIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgbWV0aWN1bG91cyBzZWFyY2ggdG8gZW5zdXJlIHRoYXQgYW55IHJlbWFpbmluZyB1c2FnZSBvZiBgdGhyZXNob2xkX3RhcmdldGAgb3IgYW55IHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgZXNwZWNpYWxseSByZWxhdGVkIHRvIGBtZW1jZzFfZXZlbnRzX3BlcmNwdWAsIGFyZSBwcm9wZXJseSBoYW5kbGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY2xlYW51cCBpcyB0cnVseSBjb21wcmVoZW5zaXZlLCB0aGF0IHRoZXJlIGFyZSBubyByZW1uYW50cyB0aGF0IGNvdWxkIGxlYWQgdG8gc3VidGxlIGlzc3Vlcy4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgS01TQU4sIGFzIHdlIG5lZWQgdG8gYmUgdmVyeSByaWdvcm91cyBpbiBob3cgdGhlc2UgY2hhbmdlcyBtaWdodCBleHBvc2UgbWVtb3J5IGNvcnJ1cHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2ZW50c19wZXJjcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTE4ND1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RocmVzaG9sZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTIwMi0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyMDM6c3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1IHtcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDQtXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VfZXZlbnRzO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMDg9c3RhdGljIHZvaWQgbWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTctXG5tbS9tZW1jb250cm9sLXYxLmM6MjE4Olx0X190aGlzX2NwdV9hZGQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2Vucl9wYWdlX2V2ZW50cywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC12MS5jLTIxOS19XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIyMz1zdGF0aWMgYm9vbCBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjI2LVxubW0vbWVtY29udHJvbC12MS5jOjIyNzpcdHZhbCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZW5yX3BhZ2VfZXZlbnRzKTtcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjg6XHRuZXh0ID0gX190aGlzX2NwdV9yZWFkKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNldGhyZXNob2xkX3RhcmdldCk7XG5tbS9tZW1jb250cm9sLXYxLmMtMjI5LVx0LyogZnJvbSB0aW1lX2FmdGVyKCkgaW4gamlmZmllcy5oICovXG5tbS9tZW1jb250cm9sLXYxLmMtMjMwLVx0aWYgKChsb25nKShuZXh0IC0gdmFsKSBcdTAwM2MgMCkge1xubW0vbWVtY29udHJvbC12MS5jOjIzMTpcdFx0X190aGlzX2NwdV93cml0ZShtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZXRocmVzaG9sZF90YXJnZXQsXG5tbS9tZW1jb250cm9sLXYxLmMtMjMyLVx0XHRcdFx0IHZhbCAmIzQzOyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0zNzk9dm9pZCBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTM4NS1cdGNvdW50X21lbWNnX2V2ZW50cyhtZW1jZywgUEdQR09VVCwgcGdwZ291dCk7XG5tbS9tZW1jb250cm9sLXYxLmM6Mzg2Olx0X190aGlzX2NwdV9hZGQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2Vucl9wYWdlX2V2ZW50cywgbnJfbWVtb3J5KTtcbm1tL21lbWNvbnRyb2wtdjEuYy0zODctXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjIwOT1ib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC12MS5jLTIyMTAte1xubW0vbWVtY29udHJvbC12MS5jOjIyMTE6XHRtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1ID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHUsXG5tbS9tZW1jb250cm9sLXYxLmMtMjIxMi1cdFx0XHRcdFx0XHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xubW0vbWVtY29udHJvbC12MS5jOjIyMTM6XHRyZXR1cm4gISFtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1O1xubW0vbWVtY29udHJvbC12MS5jLTIyMTQtfVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMjE2PXZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjE3LXtcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjE4Olx0ZnJlZV9wZXJjcHUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMjIxOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Nzc3CgkJCQkJCQlvdXRwdXQ6IDIzMQoJCQkJCQkJdGhvdWdodHM6IDY5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBGZWF0dXJlIFJlbW92YWwgLSBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjYXJlZnVsbHkgcmV2aWV3ZWQgdGhpcyBwYXRjaCwgYW5kIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgcXVpdGUgc3RyYWlnaHRmb3J3YXJkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLgoKSW5pdGlhbGx5LCBJIHdhbnRlZCB0byBjb25maXJtIHRoYXQgYW55IHBlci1DUFUgbWVtb3J5IGFsbG9jYXRpb24gdXNlZCB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeS4gYGFsbG9jX3BlcmNwdV9nZnBgIChhbmQgYnkgZXh0ZW5zaW9uIGBhbGxvY19wZXJjcHVgKSBhcmUgemVyb2luZyBhbGxvY2F0b3JzLiBJIHNwZWNpZmljYWxseSBjaGVja2VkIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpUaGUgcGF0Y2ggaXRzZWxmIGZvY3VzZXMgb24gdGhlIHJlbW92YWwgb2YgdGhlIGNncm91cCB2MSBzb2Z0IGxpbWl0IGZlYXR1cmUuIFRoaXMgaW5jbHVkZXM6CgoqICAgUmVtb3Zpbmcgb2Jzb2xldGUgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBsZWdhY3kgZmVhdHVyZS4KKiAgIERlbGV0aW5nIHVudXNlZCBsb2NhbCB2YXJpYWJsZXMgaW4gZnVuY3Rpb25zIGxpa2UgYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YC4KKiAgIEVsaW1pbmF0aW5nIHRoZSBgbmlkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYC4KKiAgIENsZWFuaW5nIHVwIGNvbW1lbnRzIGFuZCBlbnVtcyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuCgpHaXZlbiB0aGVzZSBjaGFuZ2VzLCBJIHBlcmZvcm1lZCBhIHRob3JvdWdoIGFuYWx5c2lzIHRvIHJ1bGUgb3V0IGFueSBwb3RlbnRpYWwgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBJIGxvb2tlZCBmb3I6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIE5vLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gTm8uCjMuICBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIE5vLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBOby4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgY2xlYW4tdXAgYW5kIHNpbXBsaWZpY2F0aW9uIHBhdGNoIHJlbW92aW5nIGRlYWQgY29kZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcmVtb3ZpbmcgY29kZSByZWxhdGVkIHRvIHRoZSBsZWdhY3kgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIGxvZ2ljLCB3aGljaCBtZWFucyBzaW1wbGlmeWluZyB2YXJpb3VzIHN0cnVjdHMuIEkgYW0gbm90IGludHJvZHVjaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgYW5kL29yIGNvbXBsZXggc3RydWN0dXJlcyB0aGF0IGFyZSBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgemVyb2VkLgoKVGhpcyBwYXRjaCBpcyBqdXN0IHJlbW92aW5nIGNvZGUgdGhhdCBoYWQgYmVlbiBkZXByZWNhdGVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgbm8gS01TQU4gaXMgbmVlZGVkLgoKSSYjMzk7dmUgYWxzbyBkb3VibGUtY2hlY2tlZCBhZ2FpbnN0IHRoZSBLTVNBTiBndWlkYW5jZToKCiogICBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuCiogICBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCAod2hpY2ggaXMgYWxtb3N0IG5vbmUhKSBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLgoqICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgYWJvdXQgcmVtb3Zpbmcgb2xkIGNvZGUgYW5kIHNpbXBsaWZ5aW5nIGV4aXN0aW5nIHN0cnVjdHVyZXMsIGFuZCB0aGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGFsbG9jYXRpb25zIG9yIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoZXJlJiMzOTtzIG5vIGp1c3RpZmljYXRpb24gZm9yIEtNU0FOIGhlcmUuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVtb3ZlcyB0aGUgbGVnYWN5IGNncm91cCB2MSBzb2Z0LWxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtZW1jb250cm9sLCBtZW1jb250cm9sLXYxLCBhbmQgdm1zY2FuKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgZGVsZXRlcyB0aGUgc29mdCBsaW1pdCBSQi10cmVlIHRyYWNraW5nIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucywgYW5kIHRyYWNlcG9pbnRzLlxuMi4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBzb2Z0X2xpbWl0YCBhbmQgYHRhcmdldHNgIGZpZWxkcyBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBzaW1wbGlmeWluZyBwZXItY3B1IGV2ZW50IHJhdGVsaW1pdGluZyB0byBqdXN0IGB0aHJlc2hvbGRfdGFyZ2V0YC5cbjMuIEl0IHJlbW92ZXMgdGhlIHVudXNlZCBgbmlkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYCBhbmQgdW51c2VkIHNjYW5uaW5nIHN0YXRpc3RpY3MgdmFyaWFibGVzIGZyb20gcmVjbGFpbSBwYXRocyAoYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCkuXG5cblRoZSBjaGFuZ2VzIGNvbnNpc3Qgc3RyaWN0bHkgb2YgZGVhZC9kZXByZWNhdGVkIGNvZGUgcmVtb3ZhbCBhbmQgc3RydWN0dXJhbCBzaW1wbGlmaWNhdGlvbnMuIE5vIG5ldyBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVtb3ZlcyB0aGUgbGVnYWN5IGNncm91cCB2MSBzb2Z0LWxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtZW1jb250cm9sLCBtZW1jb250cm9sLXYxLCBhbmQgdm1zY2FuKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgZGVsZXRlcyB0aGUgc29mdCBsaW1pdCBSQi10cmVlIHRyYWNraW5nIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucywgYW5kIHRyYWNlcG9pbnRzLlxuMi4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBzb2Z0X2xpbWl0YCBhbmQgYHRhcmdldHNgIGZpZWxkcyBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBzaW1wbGlmeWluZyBwZXItY3B1IGV2ZW50IHJhdGVsaW1pdGluZyB0byBqdXN0IGB0aHJlc2hvbGRfdGFyZ2V0YC5cbjMuIEl0IHJlbW92ZXMgdGhlIHVudXNlZCBgbmlkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYCBhbmQgdW51c2VkIHNjYW5uaW5nIHN0YXRpc3RpY3MgdmFyaWFibGVzIGZyb20gcmVjbGFpbSBwYXRocyAoYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCkuXG5cblRoZSBjaGFuZ2VzIGNvbnNpc3Qgc3RyaWN0bHkgb2YgZGVhZC9kZXByZWNhdGVkIGNvZGUgcmVtb3ZhbCBhbmQgc3RydWN0dXJhbCBzaW1wbGlmaWNhdGlvbnMuIE5vIG5ldyBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjA1LjI3NDczMTAxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODA5MjkzNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiLFxuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZVwiLFxuICAgIFwibWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRcIixcbiAgICBcIm1lbWNnMV91bmNoYXJnZV9iYXRjaFwiLFxuICAgIFwibWVtY2cxX2NvbW1pdF9jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcImxydV9nZW5fcm90YXRlX21lbWNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVtb3ZlcyB0aGUgbGVnYWN5IGNncm91cCB2MSBzb2Z0LWxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtZW1jb250cm9sLCBtZW1jb250cm9sLXYxLCBhbmQgdm1zY2FuKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGRlbGV0ZXMgdGhlIHNvZnQgbGltaXQgUkItdHJlZSB0cmFja2luZyBzdHJ1Y3R1cmVzLCBmdW5jdGlvbnMsIGFuZCB0cmFjZXBvaW50cy5cXG4yLiBJdCByZW1vdmVzIHRoZSB1bnVzZWQgYHNvZnRfbGltaXRgIGFuZCBgdGFyZ2V0c2AgZmllbGRzIGZyb20gYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdWAsIHNpbXBsaWZ5aW5nIHBlci1jcHUgZXZlbnQgcmF0ZWxpbWl0aW5nIHRvIGp1c3QgYHRocmVzaG9sZF90YXJnZXRgLlxcbjMuIEl0IHJlbW92ZXMgdGhlIHVudXNlZCBgbmlkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYCBhbmQgdW51c2VkIHNjYW5uaW5nIHN0YXRpc3RpY3MgdmFyaWFibGVzIGZyb20gcmVjbGFpbSBwYXRocyAoYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCkuXFxuXFxuVGhlIGNoYW5nZXMgY29uc2lzdCBzdHJpY3RseSBvZiBkZWFkL2RlcHJlY2F0ZWQgY29kZSByZW1vdmFsIGFuZCBzdHJ1Y3R1cmFsIHNpbXBsaWZpY2F0aW9ucy4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MDUuMjc0NzM4Mzc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDQzODc2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YTBkYWNkZDk1NmRlZjc0ZWUwMDYwNTFlZDg2OTJkOTVkNTliYmMyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6NDI6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IGRhNjI1ZDJlZGIzYmEuLmM3OTk5MjY0MzU1NjAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC05NSwyMCArOTUsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XFxuIFxcdHN0cnVjdCBscnV2ZWNfc3RhdHNcXHRcXHRcXHQqbHJ1dmVjX3N0YXRzO1xcbiBcXHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyBfX3JjdVxcdCpzaHJpbmtlcl9pbmZvO1xcbiBcXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbi1cXHQvKlxcbi1cXHQgKiBNZW1jZy12MSBvbmx5IHN0dWZmIGluIG1pZGRsZSBhcyBidWZmZXIgYmV0d2VlbiByZWFkIG1vc3RseSBmaWVsZHNcXG4tXFx0ICogYW5kIHVwZGF0ZSBvZnRlbiBmaWVsZHMgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZy4gSWYgdjEgc3R1ZmYgaXNcXG4tXFx0ICogbm90IHByZXNlbnQsIGFuIGV4cGxpY2l0IHBhZGRpbmcgaXMgbmVlZGVkLlxcbi1cXHQgKi9cXG4tXFxuLVxcdHN0cnVjdCByYl9ub2RlXFx0XFx0dHJlZV9ub2RlO1xcdC8qIFJCIHRyZWUgbm9kZSAqL1xcbi1cXHR1bnNpZ25lZCBsb25nXFx0XFx0dXNhZ2VfaW5fZXhjZXNzOy8qIFNldCB0byB0aGUgdmFsdWUgYnkgd2hpY2ggKi9cXG4tXFx0XFx0XFx0XFx0XFx0XFx0LyogdGhlIHNvZnQgbGltaXQgaXMgZXhjZWVkZWQqL1xcbi1cXHRib29sXFx0XFx0XFx0b25fdHJlZTtcXG4tI2Vsc2VcXG4gXFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDFfKTtcXG4tI2VuZGlmXFxuIFxcbiBcXHQvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi9cXG4gXFx0c3RydWN0IGxydXZlY1xcdFxcdGxydXZlYztcXG5AQCAtMjkzLDggKzI4MCw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcXG4gXFxuIFxcdHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSBfX3BlcmNwdSAqZXZlbnRzX3BlcmNwdTtcXG4gXFxuLVxcdHVuc2lnbmVkIGxvbmcgc29mdF9saW1pdDtcXG4tXFxuIFxcdC8qIHByb3RlY3RlZCBieSBtZW1jZ19vb21fbG9jayAqL1xcbiBcXHRib29sIG9vbV9sb2NrO1xcbiBcXHRpbnQgdW5kZXJfb29tO1xcbkBAIC0xOTI0LDEwICsxOTA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAvKiBDZ3JvdXAgdjEtcmVsYXRlZCBkZWNsYXJhdGlvbnMgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4tdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG4tXFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssXFxuLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpO1xcbi1cXG4gYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG5AQCAtMTk0OCwxNCArMTkyOSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbiB9XFxuIFxcbiAjZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG4tc3RhdGljIGlubGluZVxcbi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZClcXG4te1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuaW5kZXggNjdjODRhOGE3MjU4My4uODRlMjM3ZjJjMTdkYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbkBAIC02MzgsMzUgKzYzOCwzMiBAQCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHtcXG4gICogRm9yIGVhY2ggbm9kZSwgbWVtY2dzIGFyZSBkaXZpZGVkIGludG8gdHdvIGdlbmVyYXRpb25zOiB0aGUgb2xkIGFuZCB0aGVcXG4gICogeW91bmcuIEZvciBlYWNoIGdlbmVyYXRpb24sIG1lbWNncyBhcmUgcmFuZG9tbHkgc2hhcmRlZCBpbnRvIG11bHRpcGxlIGJpbnNcXG4gICogdG8gaW1wcm92ZSBzY2FsYWJpbGl0eS4gRm9yIGVhY2ggYmluLCB0aGUgaGxpc3RfbnVsbHMgaXMgdmlydHVhbGx5IGRpdmlkZWRcXG4tICogaW50byB0aHJlZSBzZWdtZW50czogdGhlIGhlYWQsIHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC5cXG4rICogaW50byB0d28gc2VnbWVudHM6IHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC5cXG4gICpcXG4gICogQW4gb25saW5pbmcgbWVtY2cgaXMgYWRkZWQgdG8gdGhlIHRhaWwgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGQgZ2VuZXJhdGlvbi5cXG4gICogVGhlIGV2aWN0aW9uIHN0YXJ0cyBhdCB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLiBUaGVcXG4gICogcGVyLW5vZGUgbWVtY2cgZ2VuZXJhdGlvbiBjb3VudGVyLCB3aG9zZSByZW1pbmRlciAobW9kIE1FTUNHX05SX0dFTlMpIGluZGV4ZXNcXG4gICogdGhlIG9sZCBnZW5lcmF0aW9uLCBpcyBpbmNyZW1lbnRlZCB3aGVuIGFsbCBpdHMgYmlucyBiZWNvbWUgZW1wdHkuXFxuICAqXFxuLSAqIFRoZXJlIGFyZSBmb3VyIG9wZXJhdGlvbnM6XFxuLSAqIDEuIE1FTUNHX0xSVV9IRUFELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHNcXG4tICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcXFwic2VnXFxcIiB0byBcXFwiaGVhZFxcXCI7XFxuLSAqIDIuIE1FTUNHX0xSVV9UQUlMLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHNcXG4rICogVGhlcmUgYXJlIHRocmVlIG9wZXJhdGlvbnM6XFxuKyAqIDEuIE1FTUNHX0xSVV9UQUlMLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHNcXG4gICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcXFwic2VnXFxcIiB0byBcXFwidGFpbFxcXCI7XFxuLSAqIDMuIE1FTUNHX0xSVV9PTEQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGRcXG4rICogMi4gTUVNQ0dfTFJVX09MRCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZFxcbiAgKiAgICBnZW5lcmF0aW9uLCB1cGRhdGVzIGl0cyBcXFwiZ2VuXFxcIiB0byBcXFwib2xkXFxcIiBhbmQgcmVzZXRzIGl0cyBcXFwic2VnXFxcIiB0byBcXFwiZGVmYXVsdFxcXCI7XFxuLSAqIDQuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlXFxuKyAqIDMuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlXFxuICAqICAgIHlvdW5nIGdlbmVyYXRpb24sIHVwZGF0ZXMgaXRzIFxcXCJnZW5cXFwiIHRvIFxcXCJ5b3VuZ1xcXCIgYW5kIHJlc2V0cyBpdHMgXFxcInNlZ1xcXCIgdG9cXG4gICogICAgXFxcImRlZmF1bHRcXFwiLlxcbiAgKlxcbiAgKiBUaGUgZXZlbnRzIHRoYXQgdHJpZ2dlciB0aGUgYWJvdmUgb3BlcmF0aW9ucyBhcmU6XFxuLSAqIDEuIEV4Y2VlZGluZyB0aGUgc29mdCBsaW1pdCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX0hFQUQ7XFxuLSAqIDIuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzXFxuKyAqIDEuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzXFxuICAqICAgIE1FTUNHX0xSVV9UQUlMO1xcbi0gKiAzLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgb2ZmbGluZWQgb3IgYmVsb3cgcmVjbGFpbWFibGUgc2l6ZVxcbisgKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgb2ZmbGluZWQgb3IgYmVsb3cgcmVjbGFpbWFibGUgc2l6ZVxcbiAgKiAgICB0aHJlc2hvbGQsIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9UQUlMO1xcbi0gKiA0LiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemVcXG4rICogMy4gVGhlIHNlY29uZCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXFxuICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xcbi0gKiA1LiBBdHRlbXB0aW5nIHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBtaW4sIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcXG4tICogNi4gRmluaXNoaW5nIHRoZSBhZ2luZyBvbiB0aGUgZXZpY3Rpb24gcGF0aCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xcbi0gKiA3LiBPZmZsaW5pbmcgYSBtZW1jZywgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX09MRC5cXG4rICogNC4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XFxuKyAqIDUuIEZpbmlzaGluZyB0aGUgYWdpbmcgb24gdGhlIGV2aWN0aW9uIHBhdGgsIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcXG4rICogNi4gT2ZmbGluaW5nIGEgbWVtY2csIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9PTEQuXFxuICAqXFxuICAqIE5vdGVzOlxcbiAgKiAxLiBNZW1jZyBMUlUgb25seSBhcHBsaWVzIHRvIGdsb2JhbCByZWNsYWltLCBhbmQgdGhlIHJvdW5kLXJvYmluIGluY3JlbWVudGluZ1xcbkBAIC02OTksNyArNjk2LDYgQEAgdm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gdm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiB2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbi12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XFxuIHZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcXG4gYm9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XFxuIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xcbkBAIC03NDAsMTAgKzczNiw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLXtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSB2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4ge1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcXG5pbmRleCBiNGJmN2I4ZGVmMWY1Li44YTg3Mjk5MGI0YmVlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcXG5AQCAtMjE0LDEzICsyMTQsNiBAQCBERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9iZVxcbiBcXG4gXFx0VFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZylcXG4gKTtcXG4tXFxuLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbixcXG4tXFxuLVxcdFRQX1BST1RPKGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLFxcbi1cXG4tXFx0VFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZylcXG4tKTtcXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4gREVDTEFSRV9FVkVOVF9DTEFTUyhtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLFxcbkBAIC0yNjAsMTMgKzI1Myw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsXFxuIFxcbiBcXHRUUF9BUkdTKG5yX3JlY2xhaW1lZCwgbWVtY2cpXFxuICk7XFxuLVxcbi1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZCxcXG4tXFxuLVxcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLFxcbi1cXG4tXFx0VFBfQVJHUyhucl9yZWNsYWltZWQsIG1lbWNnKVxcbi0pO1xcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuIFxcbiBUUkFDRV9FVkVOVChtbV9zaHJpbmtfc2xhYl9zdGFydCxcXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCA1Y2MyMjBkYjkwNzY2Li5lMTZmMTI1MGIyNWM4IDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTc4LDEwICs3OCw2IEBAIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBpbnQgKnN3YXBwaW5lc3MpO1xcbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi1cXHRcXHRcXHRcXHQgICAgIGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG4tXFx0XFx0XFx0XFx0ICAgICBwZ19kYXRhX3QgKnBnZGF0LFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19OVU1BXFxuIGV4dGVybiBpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbztcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXFxuaW5kZXggMDVlZjU1Y2FlNGRjNi4uYmYyYzdkNTNiMDFiMSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmNcXG5AQCAtMTcsMzAgKzE3LDYgQEBcXG4gI2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm1lbWNvbnRyb2wtdjEuaFxcXCJcXG4gXFxuLS8qXFxuLSAqIENncm91cHMgYWJvdmUgdGhlaXIgbGltaXRzIGFyZSBtYWludGFpbmVkIGluIGEgUkItVHJlZSwgaW5kZXBlbmRlbnQgb2ZcXG4tICogdGhlaXIgaGllcmFyY2h5IHJlcHJlc2VudGF0aW9uXFxuLSAqL1xcbi1cXG4tc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSB7XFxuLVxcdHN0cnVjdCByYl9yb290IHJiX3Jvb3Q7XFxuLVxcdHN0cnVjdCByYl9ub2RlICpyYl9yaWdodG1vc3Q7XFxuLVxcdHNwaW5sb2NrX3QgbG9jaztcXG4tfTtcXG4tXFxuLXN0cnVjdCBtZW1fY2dyb3VwX3RyZWUge1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICpyYl90cmVlX3Blcl9ub2RlW01BWF9OVU1OT0RFU107XFxuLX07XFxuLVxcbi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZSBzb2Z0X2xpbWl0X3RyZWUgX19yZWFkX21vc3RseTtcXG4tXFxuLS8qXFxuLSAqIE1heGltdW0gbG9vcHMgaW4gbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0oKSwgdXNlZCBmb3Igc29mdFxcbi0gKiBsaW1pdCByZWNsYWltIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMsIGlmIHRoZXkgZXZlciBvY2N1ci5cXG4tICovXFxuLSNkZWZpbmVcXHRNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTXFx0XFx0MTAwXFxuLSNkZWZpbmVcXHRNRU1fQ0dST1VQX01BWF9TT0ZUX0xJTUlUX1JFQ0xBSU1fTE9PUFNcXHQyXFxuLVxcbiAvKiBmb3IgT09NICovXFxuIHN0cnVjdCBtZW1fY2dyb3VwX2V2ZW50ZmRfbGlzdCB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG5AQCAtMTA2LDMwMSArODIsNiBAQCBzdGF0aWMgc3RydWN0IGxvY2tkZXBfbWFwIG1lbWNnX29vbV9sb2NrX2RlcF9tYXAgPSB7XFxuIFxcbiBERUZJTkVfU1BJTkxPQ0sobWVtY2dfb29tX2xvY2spO1xcbiBcXG4tc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosXFxuLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6LFxcbi1cXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBuZXdfdXNhZ2VfaW5fZXhjZXNzKVxcbi17XFxuLVxcdHN0cnVjdCByYl9ub2RlICoqcCA9IFxcdTAwMjZtY3R6LVxcdTAwM2VyYl9yb290LnJiX25vZGU7XFxuLVxcdHN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXpfbm9kZTtcXG4tXFx0Ym9vbCByaWdodG1vc3QgPSB0cnVlO1xcbi1cXG4tXFx0aWYgKG16LVxcdTAwM2Vvbl90cmVlKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRtei1cXHUwMDNldXNhZ2VfaW5fZXhjZXNzID0gbmV3X3VzYWdlX2luX2V4Y2VzcztcXG4tXFx0aWYgKCFtei1cXHUwMDNldXNhZ2VfaW5fZXhjZXNzKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcdHdoaWxlICgqcCkge1xcbi1cXHRcXHRwYXJlbnQgPSAqcDtcXG4tXFx0XFx0bXpfbm9kZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdHRyZWVfbm9kZSk7XFxuLVxcdFxcdGlmIChtei1cXHUwMDNldXNhZ2VfaW5fZXhjZXNzIFxcdTAwM2MgbXpfbm9kZS1cXHUwMDNldXNhZ2VfaW5fZXhjZXNzKSB7XFxuLVxcdFxcdFxcdHAgPSBcXHUwMDI2KCpwKS1cXHUwMDNlcmJfbGVmdDtcXG4tXFx0XFx0XFx0cmlnaHRtb3N0ID0gZmFsc2U7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHAgPSBcXHUwMDI2KCpwKS1cXHUwMDNlcmJfcmlnaHQ7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHJpZ2h0bW9zdClcXG4tXFx0XFx0bWN0ei1cXHUwMDNlcmJfcmlnaHRtb3N0ID0gXFx1MDAyNm16LVxcdTAwM2V0cmVlX25vZGU7XFxuLVxcbi1cXHRyYl9saW5rX25vZGUoXFx1MDAyNm16LVxcdTAwM2V0cmVlX25vZGUsIHBhcmVudCwgcCk7XFxuLVxcdHJiX2luc2VydF9jb2xvcihcXHUwMDI2bXotXFx1MDAzZXRyZWVfbm9kZSwgXFx1MDAyNm1jdHotXFx1MDAzZXJiX3Jvb3QpO1xcbi1cXHRtei1cXHUwMDNlb25fdHJlZSA9IHRydWU7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eilcXG4te1xcbi1cXHRpZiAoIW16LVxcdTAwM2Vvbl90cmVlKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRpZiAoXFx1MDAyNm16LVxcdTAwM2V0cmVlX25vZGUgPT0gbWN0ei1cXHUwMDNlcmJfcmlnaHRtb3N0KVxcbi1cXHRcXHRtY3R6LVxcdTAwM2VyYl9yaWdodG1vc3QgPSByYl9wcmV2KFxcdTAwMjZtei1cXHUwMDNldHJlZV9ub2RlKTtcXG4tXFxuLVxcdHJiX2VyYXNlKFxcdTAwMjZtei1cXHUwMDNldHJlZV9ub2RlLCBcXHUwMDI2bWN0ei1cXHUwMDNlcmJfcm9vdCk7XFxuLVxcdG16LVxcdTAwM2Vvbl90cmVlID0gZmFsc2U7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFxuLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZtY3R6LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXosIG1jdHopO1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtY3R6LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNvZnRfbGltaXRfZXhjZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnkpO1xcbi1cXHR1bnNpZ25lZCBsb25nIHNvZnRfbGltaXQgPSBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXNvZnRfbGltaXQpO1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4Y2VzcyA9IDA7XFxuLVxcbi1cXHRpZiAobnJfcGFnZXMgXFx1MDAzZSBzb2Z0X2xpbWl0KVxcbi1cXHRcXHRleGNlc3MgPSBucl9wYWdlcyAtIHNvZnRfbGltaXQ7XFxuLVxcbi1cXHRyZXR1cm4gZXhjZXNzO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBtZW1jZzFfdXBkYXRlX3RyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgZXhjZXNzO1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7XFxuLVxcbi1cXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcXG4tXFx0XFx0aWYgKHNvZnRfbGltaXRfZXhjZXNzKG1lbWNnKSlcXG4tXFx0XFx0XFx0bHJ1X2dlbl9zb2Z0X3JlY2xhaW0obWVtY2csIG5pZCk7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4tXFx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW25pZF07XFxuLVxcdGlmICghbWN0eilcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHQvKlxcbi1cXHQgKiBOZWNlc3NhcnkgdG8gdXBkYXRlIGFsbCBhbmNlc3RvcnMgd2hlbiBoaWVyYXJjaHkgaXMgdXNlZC5cXG4tXFx0ICogYmVjYXVzZSB0aGVpciBldmVudCBjb3VudGVyIGlzIG5vdCB0b3VjaGVkLlxcbi1cXHQgKi9cXG4tXFx0Zm9yICg7IG1lbWNnOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSkge1xcbi1cXHRcXHRteiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdO1xcbi1cXHRcXHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZyk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFdlIGhhdmUgdG8gdXBkYXRlIHRoZSB0cmVlIGlmIG16IGlzIG9uIFJCLXRyZWUgb3JcXG4tXFx0XFx0ICogbWVtIGlzIG92ZXIgaXRzIHNvZnRsaW1pdC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChleGNlc3MgfHwgbXotXFx1MDAzZW9uX3RyZWUpIHtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFxuLVxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZtY3R6LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdFxcdC8qIGlmIG9uLXRyZWUsIHJlbW92ZSBpdCAqL1xcbi1cXHRcXHRcXHRpZiAobXotXFx1MDAzZW9uX3RyZWUpXFxuLVxcdFxcdFxcdFxcdF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXosIG1jdHopO1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBJbnNlcnQgYWdhaW4uIG16LVxcdTAwM2V1c2FnZV9pbl9leGNlc3Mgd2lsbCBiZSB1cGRhdGVkLlxcbi1cXHRcXHRcXHQgKiBJZiBleGNlc3MgaXMgMCwgbm8gdHJlZSBvcHMuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG16LCBtY3R6LCBleGNlc3MpO1xcbi1cXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtY3R6LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi19XFxuLVxcbi12b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLXtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbi1cXHRpbnQgbmlkO1xcbi1cXG4tXFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG4tXFx0XFx0bXogPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bbmlkXTtcXG4tXFx0XFx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW25pZF07XFxuLVxcdFxcdGlmIChtY3R6KVxcbi1cXHRcXHRcXHRtZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XFxuLVxcdH1cXG4tfVxcbi1cXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpcXG4tX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXFxuLXtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbi1cXG4tcmV0cnk6XFxuLVxcdG16ID0gTlVMTDtcXG4tXFx0aWYgKCFtY3R6LVxcdTAwM2VyYl9yaWdodG1vc3QpXFxuLVxcdFxcdGdvdG8gZG9uZTtcXHRcXHQvKiBOb3RoaW5nIHRvIHJlY2xhaW0gZnJvbSAqL1xcbi1cXG4tXFx0bXogPSByYl9lbnRyeShtY3R6LVxcdTAwM2VyYl9yaWdodG1vc3QsXFxuLVxcdFxcdCAgICAgIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCB0cmVlX25vZGUpO1xcbi1cXHQvKlxcbi1cXHQgKiBSZW1vdmUgdGhlIG5vZGUgbm93IGJ1dCBzb21lb25lIGVsc2UgY2FuIGFkZCBpdCBiYWNrLFxcbi1cXHQgKiB3ZSB3aWxsIHRvIGFkZCBpdCBiYWNrIGF0IHRoZSBlbmQgb2YgcmVjbGFpbSB0byBpdHMgY29ycmVjdFxcbi1cXHQgKiBwb3NpdGlvbiBpbiB0aGUgdHJlZS5cXG4tXFx0ICovXFxuLVxcdF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXosIG1jdHopO1xcbi1cXHRpZiAoIXNvZnRfbGltaXRfZXhjZXNzKG16LVxcdTAwM2VtZW1jZykgfHxcXG4tXFx0ICAgICFjc3NfdHJ5Z2V0KFxcdTAwMjZtei1cXHUwMDNlbWVtY2ctXFx1MDAzZWNzcykpXFxuLVxcdFxcdGdvdG8gcmV0cnk7XFxuLWRvbmU6XFxuLVxcdHJldHVybiBtejtcXG4tfVxcbi1cXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpcXG4tbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6KVxcbi17XFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG4tXFxuLVxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNm1jdHotXFx1MDAzZWxvY2spO1xcbi1cXHRteiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTtcXG4tXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZtY3R6LVxcdTAwM2Vsb2NrKTtcXG4tXFx0cmV0dXJuIG16O1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxcbi1cXHRcXHRcXHRcXHQgICBwZ19kYXRhX3QgKnBnZGF0LFxcbi1cXHRcXHRcXHRcXHQgICBnZnBfdCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZClcXG4te1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqdmljdGltID0gTlVMTDtcXG4tXFx0aW50IHRvdGFsID0gMDtcXG4tXFx0aW50IGxvb3AgPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4Y2VzcztcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSByZWNsYWltID0ge1xcbi1cXHRcXHQucGdkYXQgPSBwZ2RhdCxcXG4tXFx0fTtcXG4tXFxuLVxcdGV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpO1xcbi1cXG4tXFx0d2hpbGUgKDEpIHtcXG4tXFx0XFx0dmljdGltID0gbWVtX2Nncm91cF9pdGVyKHJvb3RfbWVtY2csIHZpY3RpbSwgXFx1MDAyNnJlY2xhaW0pO1xcbi1cXHRcXHRpZiAoIXZpY3RpbSkge1xcbi1cXHRcXHRcXHRsb29wKys7XFxuLVxcdFxcdFxcdGlmIChsb29wIFxcdTAwM2U9IDIpIHtcXG4tXFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0ICogSWYgd2UgaGF2ZSBub3QgYmVlbiBhYmxlIHRvIHJlY2xhaW1cXG4tXFx0XFx0XFx0XFx0ICogYW55dGhpbmcsIGl0IG1pZ2h0IGJlY2F1c2UgdGhlcmUgYXJlXFxuLVxcdFxcdFxcdFxcdCAqIG5vIHJlY2xhaW1hYmxlIHBhZ2VzIHVuZGVyIHRoaXMgaGllcmFyY2h5XFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRpZiAoIXRvdGFsKVxcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0ICogV2Ugd2FudCB0byBkbyBtb3JlIHRhcmdldGVkIHJlY2xhaW0uXFxuLVxcdFxcdFxcdFxcdCAqIGV4Y2VzcyBcXHUwMDNlXFx1MDAzZSAyIGlzIG5vdCB0byBleGNlc3NpdmUgc28gYXMgdG9cXG4tXFx0XFx0XFx0XFx0ICogcmVjbGFpbSB0b28gbXVjaCwgbm9yIHRvbyBsZXNzIHRoYXQgd2Uga2VlcFxcbi1cXHRcXHRcXHRcXHQgKiBjb21pbmcgYmFjayB0byByZWNsYWltIGZyb20gdGhpcyBjZ3JvdXBcXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdGlmICh0b3RhbCBcXHUwMDNlPSAoZXhjZXNzIFxcdTAwM2VcXHUwMDNlIDIpIHx8XFxuLVxcdFxcdFxcdFxcdFxcdChsb29wIFxcdTAwM2UgTUVNX0NHUk9VUF9NQVhfUkVDTEFJTV9MT09QUykpXFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHRvdGFsICs9IG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUodmljdGltLCBnZnBfbWFzaywgZmFsc2UsXFxuLVxcdFxcdFxcdFxcdFxcdHBnZGF0LCBcXHUwMDI2bnJfc2Nhbm5lZCk7XFxuLVxcdFxcdCp0b3RhbF9zY2FubmVkICs9IG5yX3NjYW5uZWQ7XFxuLVxcdFxcdGlmICghc29mdF9saW1pdF9leGNlc3Mocm9vdF9tZW1jZykpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcdG1lbV9jZ3JvdXBfaXRlcl9icmVhayhyb290X21lbWNnLCB2aWN0aW0pO1xcbi1cXHRyZXR1cm4gdG90YWw7XFxuLX1cXG4tXFxuLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSAwO1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosICpuZXh0X216ID0gTlVMTDtcXG4tXFx0dW5zaWduZWQgbG9uZyByZWNsYWltZWQ7XFxuLVxcdGludCBsb29wID0gMDtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejtcXG4tXFx0dW5zaWduZWQgbG9uZyBleGNlc3M7XFxuLVxcbi1cXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0aWYgKG9yZGVyIFxcdTAwM2UgMClcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRtY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogRG8gbm90IGV2ZW4gYm90aGVyIHRvIGNoZWNrIHRoZSBsYXJnZXN0IG5vZGUgaWYgdGhlIHJvb3RcXG4tXFx0ICogaXMgZW1wdHkuIERvIGl0IGxvY2tsZXNzIHRvIHByZXZlbnQgbG9jayBib3VuY2luZy4gUmFjZXNcXG4tXFx0ICogYXJlIGFjY2VwdGFibGUgYXMgc29mdCBsaW1pdCBpcyBiZXN0IGVmZm9ydCBhbnl3YXkuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIW1jdHogfHwgUkJfRU1QVFlfUk9PVChcXHUwMDI2bWN0ei1cXHUwMDNlcmJfcm9vdCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogVGhpcyBsb29wIGNhbiBydW4gYSB3aGlsZSwgc3BlY2lhbGx5IGlmIG1lbV9jZ3JvdXAncyBjb250aW51b3VzbHlcXG4tXFx0ICoga2VlcCBleGNlZWRpbmcgdGhlaXIgc29mdCBsaW1pdCBhbmQgcHV0dGluZyB0aGUgc3lzdGVtIHVuZGVyXFxuLVxcdCAqIHByZXNzdXJlXFxuLVxcdCAqL1xcbi1cXHRkbyB7XFxuLVxcdFxcdGlmIChuZXh0X216KVxcbi1cXHRcXHRcXHRteiA9IG5leHRfbXo7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bXogPSBtZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopO1xcbi1cXHRcXHRpZiAoIW16KVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdHJlY2xhaW1lZCA9IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKG16LVxcdTAwM2VtZW1jZywgcGdkYXQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgdG90YWxfc2Nhbm5lZCk7XFxuLVxcdFxcdG5yX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XFxuLVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNm1jdHotXFx1MDAzZWxvY2spO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW55dGhpbmcgZnJvbSB0aGlzIG1lbW9yeSBjZ3JvdXBcXG4tXFx0XFx0ICogaXQgaXMgdGltZSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNncm91cFxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0bmV4dF9teiA9IE5VTEw7XFxuLVxcdFxcdGlmICghcmVjbGFpbWVkKVxcbi1cXHRcXHRcXHRuZXh0X216ID0gX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopO1xcbi1cXG4tXFx0XFx0ZXhjZXNzID0gc29mdF9saW1pdF9leGNlc3MobXotXFx1MDAzZW1lbWNnKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogT25lIHNjaG9vbCBvZiB0aG91Z2h0IHNheXMgdGhhdCB3ZSBzaG91bGQgbm90IGFkZFxcbi1cXHRcXHQgKiBiYWNrIHRoZSBub2RlIHRvIHRoZSB0cmVlIGlmIHJlY2xhaW0gcmV0dXJucyAwLlxcbi1cXHRcXHQgKiBCdXQgb3VyIHJlY2xhaW0gY291bGQgcmV0dXJuIDAsIHNpbXBseSBiZWNhdXNlIGR1ZVxcbi1cXHRcXHQgKiB0byBwcmlvcml0eSB3ZSBhcmUgZXhwb3NpbmcgYSBzbWFsbGVyIHN1YnNldCBvZlxcbi1cXHRcXHQgKiBtZW1vcnkgdG8gcmVjbGFpbSBmcm9tLiBDb25zaWRlciB0aGlzIGFzIGEgbG9uZ2VyXFxuLVxcdFxcdCAqIHRlcm0gVE9ETy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdC8qIElmIGV4Y2VzcyA9PSAwLCBubyB0cmVlIG9wcyAqL1xcbi1cXHRcXHRfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG16LCBtY3R6LCBleGNlc3MpO1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNm1jdHotXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRjc3NfcHV0KFxcdTAwMjZtei1cXHUwMDNlbWVtY2ctXFx1MDAzZWNzcyk7XFxuLVxcdFxcdGxvb3ArKztcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQ291bGQgbm90IHJlY2xhaW0gYW55dGhpbmcgYW5kIHRoZXJlIGFyZSBubyBtb3JlXFxuLVxcdFxcdCAqIG1lbSBjZ3JvdXBzIHRvIHRyeSBvciB3ZSBzZWVtIHRvIGJlIGxvb3Bpbmcgd2l0aG91dFxcbi1cXHRcXHQgKiByZWNsYWltaW5nIGFueXRoaW5nLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFucl9yZWNsYWltZWQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0KG5leHRfbXogPT0gTlVMTCB8fFxcbi1cXHRcXHRcXHRsb29wIFxcdTAwM2UgTUVNX0NHUk9VUF9NQVhfU09GVF9MSU1JVF9SRUNMQUlNX0xPT1BTKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdH0gd2hpbGUgKCFucl9yZWNsYWltZWQpO1xcbi1cXHRpZiAobmV4dF9teilcXG4tXFx0XFx0Y3NzX3B1dChcXHUwMDI2bmV4dF9tei1cXHUwMDNlbWVtY2ctXFx1MDAzZWNzcyk7XFxuLVxcdHJldHVybiBucl9yZWNsYWltZWQ7XFxuLX1cXG4tXFxuIHN0YXRpYyB1NjQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBjZnR5cGUgKmNmdClcXG4ge1xcbkBAIC01MTEsNyArMTkyLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF90aHJlc2hvbGQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXHR9XFxuIH1cXG4gXFxuLS8qIENncm91cDE6IHRocmVzaG9sZCBub3RpZmljYXRpb25zIFxcdTAwMjYgc29mdGxpbWl0IHRyZWUgdXBkYXRlcyAqL1xcbisvKiBDZ3JvdXAxOiB0aHJlc2hvbGQgbm90aWZpY2F0aW9ucyAqL1xcbiBcXG4gLypcXG4gICogUGVyIG1lbWNnIGV2ZW50IGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYXQgZXZlcnkgcGFnZWluL3BhZ2VvdXQuIFdpdGggVEhQLFxcbkBAIC01MTksMTUgKzIwMCw5IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gICogdG8gdHJpZ2dlciBzb21lIHBlcmlvZGljIGV2ZW50cy4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGJldHRlclxcbiAgKiB0aGFuIHVzaW5nIGppZmZpZXMgZXRjLiB0byBoYW5kbGUgcGVyaW9kaWMgbWVtY2cgZXZlbnQuXFxuICAqL1xcbi1lbnVtIG1lbV9jZ3JvdXBfZXZlbnRzX3RhcmdldCB7XFxuLVxcdE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCxcXG4tXFx0TUVNX0NHUk9VUF9UQVJHRVRfU09GVExJTUlULFxcbi1cXHRNRU1fQ0dST1VQX05UQVJHRVRTLFxcbi19O1xcbi1cXG4gc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1IHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlX2V2ZW50cztcXG4tXFx0dW5zaWduZWQgbG9uZyB0YXJnZXRzW01FTV9DR1JPVVBfTlRBUkdFVFNdO1xcbitcXHR1bnNpZ25lZCBsb25nIHRocmVzaG9sZF90YXJnZXQ7XFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpXFxuQEAgLTU0NCw1MyArMjE5LDI5IEBAIHN0YXRpYyB2b2lkIG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcylcXG4gfVxcbiBcXG4gI2RlZmluZSBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQgMTI4XFxuLSNkZWZpbmUgU09GVExJTUlUX0VWRU5UU19UQVJHRVQgMTAyNFxcbiBcXG4tc3RhdGljIGJvb2wgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdGVudW0gbWVtX2Nncm91cF9ldmVudHNfdGFyZ2V0IHRhcmdldClcXG4rc3RhdGljIGJvb2wgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyB2YWwsIG5leHQ7XFxuIFxcbiBcXHR2YWwgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctXFx1MDAzZWV2ZW50c19wZXJjcHUtXFx1MDAzZW5yX3BhZ2VfZXZlbnRzKTtcXG4tXFx0bmV4dCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdS1cXHUwMDNldGFyZ2V0c1t0YXJnZXRdKTtcXG4rXFx0bmV4dCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdS1cXHUwMDNldGhyZXNob2xkX3RhcmdldCk7XFxuIFxcdC8qIGZyb20gdGltZV9hZnRlcigpIGluIGppZmZpZXMuaCAqL1xcbiBcXHRpZiAoKGxvbmcpKG5leHQgLSB2YWwpIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRzd2l0Y2ggKHRhcmdldCkge1xcbi1cXHRcXHRjYXNlIE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSDpcXG4tXFx0XFx0XFx0bmV4dCA9IHZhbCArIFRIUkVTSE9MRFNfRVZFTlRTX1RBUkdFVDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgTUVNX0NHUk9VUF9UQVJHRVRfU09GVExJTUlUOlxcbi1cXHRcXHRcXHRuZXh0ID0gdmFsICsgU09GVExJTUlUX0VWRU5UU19UQVJHRVQ7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLVxcdTAwM2VldmVudHNfcGVyY3B1LVxcdTAwM2V0YXJnZXRzW3RhcmdldF0sIG5leHQpO1xcbitcXHRcXHRfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLVxcdTAwM2VldmVudHNfcGVyY3B1LVxcdTAwM2V0aHJlc2hvbGRfdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHQgdmFsICsgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUKTtcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBDaGVjayBldmVudHMgaW4gb3JkZXIuXFxuLSAqXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBtZW1jZzFfY2hlY2tfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4rc3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHQvKiB0aHJlc2hvbGQgZXZlbnQgaXMgdHJpZ2dlcmVkIGluIGZpbmVyIGdyYWluIHRoYW4gc29mdCBsaW1pdCAqL1xcbi1cXHRpZiAodW5saWtlbHkobWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0TUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNIKSkpIHtcXG4tXFx0XFx0Ym9vbCBkb19zb2Z0bGltaXQ7XFxuLVxcbi1cXHRcXHRkb19zb2Z0bGltaXQgPSBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQpO1xcbitcXHRpZiAodW5saWtlbHkobWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZykpKVxcbiBcXHRcXHRtZW1fY2dyb3VwX3RocmVzaG9sZChtZW1jZyk7XFxuLVxcdFxcdGlmICh1bmxpa2VseShkb19zb2Z0bGltaXQpKVxcbi1cXHRcXHRcXHRtZW1jZzFfdXBkYXRlX3RyZWUobWVtY2csIG5pZCk7XFxuLVxcdH1cXG4gfVxcbiBcXG4gdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuQEAgLTU5OSw3ICsyNTAsNyBAQCB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gXFxuIFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gXFx0bWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKG1lbWNnLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbi1cXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcXG4rXFx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7XFxuIFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gfVxcbiBcXG5AQCAtNjcyLDcgKzMyMyw3IEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbiBcXHRWTV9XQVJOX09OX0lSUVNfRU5BQkxFRCgpO1xcbiBcXHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbiBcXHRwcmVlbXB0X2VuYWJsZV9uZXN0ZWQoKTtcXG4tXFx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XFxuK1xcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2cpO1xcbiBcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcXG5AQCAtNzI2LDE0ICszNzcsMTQgQEAgdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuICNlbmRpZlxcbiBcXG4gdm9pZCBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXFxuLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKVxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbiBcXHRjb3VudF9tZW1jZ19ldmVudHMobWVtY2csIFBHUEdPVVQsIHBncGdvdXQpO1xcbiBcXHRfX3RoaXNfY3B1X2FkZChtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdS1cXHUwMDNlbnJfcGFnZV9ldmVudHMsIG5yX21lbW9yeSk7XFxuLVxcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIG5pZCk7XFxuK1xcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2cpO1xcbiBcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuIH1cXG4gXFxuQEAgLTI1NjYsMjIgKzIyMTcsMyBAQCB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0ZnJlZV9wZXJjcHUobWVtY2ctXFx1MDAzZWV2ZW50c19wZXJjcHUpO1xcbiB9XFxuLVxcbi1zdGF0aWMgaW50IF9faW5pdCBtZW1jZzFfaW5pdCh2b2lkKVxcbi17XFxuLVxcdGludCBub2RlO1xcbi1cXG4tXFx0Zm9yX2VhY2hfbm9kZShub2RlKSB7XFxuLVxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKnJ0cG47XFxuLVxcbi1cXHRcXHRydHBuID0ga3phbGxvY19ub2RlKHNpemVvZigqcnRwbiksIEdGUF9LRVJORUwsIG5vZGUpO1xcbi1cXG4tXFx0XFx0cnRwbi1cXHUwMDNlcmJfcm9vdCA9IFJCX1JPT1Q7XFxuLVxcdFxcdHJ0cG4tXFx1MDAzZXJiX3JpZ2h0bW9zdCA9IE5VTEw7XFxuLVxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZydHBuLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0c29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbm9kZV0gPSBydHBuO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1zdWJzeXNfaW5pdGNhbGwobWVtY2cxX2luaXQpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmhcXG5pbmRleCAxZTM5NDI2OWM2MTNkLi5iOWEyMWYwZmQyYzNhIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuaFxcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuaFxcbkBAIC00MSwxMiArNDEsNiBAQCBib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gdm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gXFxuIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tdm9pZCBtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLXtcXG4tXFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlc29mdF9saW1pdCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuLX1cXG4gXFxuIHN0cnVjdCBjZ3JvdXBfdGFza3NldDtcXG4gdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5AQCAtNjUsNyArNTksNyBAQCB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiBcXG4gdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcXG4tXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnksIGludCBuaWQpO1xcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7XFxuIFxcbiB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKTtcXG4gdm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcXG5AQCAtOTgsOCArOTIsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHsgcmV0dXJuIHRydWU7XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9tZW1jZ19pbml0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcXG5AQCAtMTE1LDcgKzEwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXFxuLVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSwgaW50IG5pZCkge31cXG4rXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KSB7fVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKSB7fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggYmZkMGE3NGZhYzkyMy4uMzA2MzZiOWQ5NjczOSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNDI1Nyw3ICs0MjU3LDYgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuIFxcdFxcdHJldHVybiBFUlJfQ0FTVChtZW1jZyk7XFxuIFxcbiBcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xcbi1cXHRtZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7XFxuICNpZmRlZiBDT05GSUdfWlNXQVBcXG4gXFx0bWVtY2ctXFx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XFxuIFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XFxuQEAgLTQ0MjksNyArNDQyOCw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFxuIFxcdHZtcHJlc3N1cmVfY2xlYW51cChcXHUwMDI2bWVtY2ctXFx1MDAzZXZtcHJlc3N1cmUpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZtZW1jZy1cXHUwMDNlaGlnaF93b3JrKTtcXG4tXFx0bWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKG1lbWNnKTtcXG4gXFx0ZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTtcXG4gXFx0bWVtX2Nncm91cF9mcmVlKG1lbWNnKTtcXG4gfVxcbkBAIC00NDY1LDcgKzQ0NjMsNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiBcXHRwYWdlX2NvdW50ZXJfc2V0X21pbihcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgMCk7XFxuIFxcdHBhZ2VfY291bnRlcl9zZXRfbG93KFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCAwKTtcXG4gXFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTtcXG4tXFx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xcbiBcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcXG4gXFx0bWVtY2dfd2JfZG9tYWluX3NpemVfY2hhbmdlZChtZW1jZyk7XFxuIH1cXG5AQCAtNTMzMSw3ICs1MzI4LDYgQEAgc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5O1xcbiBcXHR1bnNpZ25lZCBsb25nIHBncGdvdXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfa21lbTtcXG4tXFx0aW50IG5pZDtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmNoYXJnZV9nYXRoZXJfY2xlYXIoc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXFxuQEAgLTUzNTQsNyArNTM1MCw3IEBAIHN0YXRpYyB2b2lkIHVuY2hhcmdlX2JhdGNoKGNvbnN0IHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxcbiBcXHRcXHRtZW1jZzFfb29tX3JlY292ZXIobWVtY2cpO1xcbiBcXHR9XFxuIFxcbi1cXHRtZW1jZzFfdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHVnLVxcdTAwM2VwZ3Bnb3V0LCB1Zy1cXHUwMDNlbnJfbWVtb3J5LCB1Zy1cXHUwMDNlbmlkKTtcXG4rXFx0bWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy1cXHUwMDNlcGdwZ291dCwgdWctXFx1MDAzZW5yX21lbW9yeSk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0LyogZHJvcCByZWZlcmVuY2UgZnJvbSB1bmNoYXJnZV9mb2xpbyAqL1xcbkBAIC01MzgzLDcgKzUzNzksNiBAQCBzdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG4gXFx0XFx0XFx0dW5jaGFyZ2VfZ2F0aGVyX2NsZWFyKHVnKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR1Zy1cXHUwMDNlb2JqY2cgPSBvYmpjZztcXG4tXFx0XFx0dWctXFx1MDAzZW5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuIFxcbiBcXHRcXHQvKiBwYWlycyB3aXRoIG9ial9jZ3JvdXBfcHV0IGluIHVuY2hhcmdlX2JhdGNoICovXFxuIFxcdFxcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGZkZDEzMjk5YTA0YTkuLmRlYjA4N2M1NzAwN2QgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC00MzczLDcgKzQzNzMsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXFxuIGVudW0ge1xcbiBcXHRNRU1DR19MUlVfTk9QLFxcbi1cXHRNRU1DR19MUlVfSEVBRCxcXG4gXFx0TUVNQ0dfTFJVX1RBSUwsXFxuIFxcdE1FTUNHX0xSVV9PTEQsXFxuIFxcdE1FTUNHX0xSVV9ZT1VORyxcXG5AQCAtNDM5NSw5ICs0Mzk0LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuIFxcdG5ldyA9IG9sZCA9IGxydXZlYy1cXHUwMDNlbHJ1Z2VuLmdlbjtcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXFxuLVxcdGlmIChvcCA9PSBNRU1DR19MUlVfSEVBRClcXG4tXFx0XFx0c2VnID0gTUVNQ0dfTFJVX0hFQUQ7XFxuLVxcdGVsc2UgaWYgKG9wID09IE1FTUNHX0xSVV9UQUlMKVxcbitcXHRpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpXFxuIFxcdFxcdHNlZyA9IE1FTUNHX0xSVV9UQUlMO1xcbiBcXHRlbHNlIGlmIChvcCA9PSBNRU1DR19MUlVfT0xEKVxcbiBcXHRcXHRuZXcgPSBnZXRfbWVtY2dfZ2VuKHBnZGF0LVxcdTAwM2VtZW1jZ19scnUuc2VxKTtcXG5AQCAtNDQxMSw3ICs0NDA4LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuIFxcbiBcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbi5saXN0KTtcXG4gXFxuLVxcdGlmIChvcCA9PSBNRU1DR19MUlVfSEVBRCB8fCBvcCA9PSBNRU1DR19MUlVfT0xEKVxcbitcXHRpZiAob3AgPT0gTUVNQ0dfTFJVX09MRClcXG4gXFx0XFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbi5saXN0LCBcXHUwMDI2cGdkYXQtXFx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0aGxpc3RfbnVsbHNfYWRkX3RhaWxfcmN1KFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbi5saXN0LCBcXHUwMDI2cGdkYXQtXFx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XFxuQEAgLTQ0ODksMTUgKzQ0ODYsNiBAQCB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdH1cXG4gfVxcbiBcXG4tdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLXtcXG4tXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG4tXFxuLVxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXFxuLVxcdGlmIChSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcXG4tXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfSEVBRCk7XFxuLX1cXG4tXFxuIGJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuIHtcXG4gXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5AQCAtNjQzOSw4ICs2NDI3LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiB7XFxuIFxcdHN0cnVjdCB6b25lcmVmICp6O1xcbiBcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9zb2Z0X3JlY2xhaW1lZDtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7XFxuIFxcdGdmcF90IG9yaWdfbWFzaztcXG4gXFx0cGdfZGF0YV90ICpsYXN0X3BnZGF0ID0gTlVMTDtcXG4gXFx0cGdfZGF0YV90ICpmaXJzdF9wZ2RhdCA9IE5VTEw7XFxuQEAgLTY0ODIsMzUgKzY0NjgsMTcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiBcXHRcXHRcXHRcXHRzYy1cXHUwMDNlY29tcGFjdGlvbl9yZWFkeSA9IHRydWU7XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBTaHJpbmsgZWFjaCBub2RlIGluIHRoZSB6b25lbGlzdCBvbmNlLiBJZiB0aGVcXG4tXFx0XFx0XFx0ICogem9uZWxpc3QgaXMgb3JkZXJlZCBieSB6b25lIChub3QgdGhlIGRlZmF1bHQpIHRoZW4gYVxcbi1cXHRcXHRcXHQgKiBub2RlIG1heSBiZSBzaHJ1bmsgbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZVxcbi1cXHRcXHRcXHQgKiB0aGUgdXNlciBwcmVmZXJzIGxvd2VyIHpvbmVzIGJlaW5nIHByZXNlcnZlZC5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmICh6b25lLVxcdTAwM2V6b25lX3BnZGF0ID09IGxhc3RfcGdkYXQpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVGhpcyBzdGVhbHMgcGFnZXMgZnJvbSBtZW1vcnkgY2dyb3VwcyBvdmVyIHNvZnRsaW1pdFxcbi1cXHRcXHRcXHQgKiBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlcyBhbmRcXG4tXFx0XFx0XFx0ICogc2Nhbm5lZCBwYWdlcy4gVGhpcyB3b3JrcyBmb3IgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZVxcbi1cXHRcXHRcXHQgKiBhbmQgYmFsYW5jaW5nLCBub3QgZm9yIGEgbWVtY2cncyBsaW1pdC5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdG5yX3NvZnRfc2Nhbm5lZCA9IDA7XFxuLVxcdFxcdFxcdG5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbSh6b25lLVxcdTAwM2V6b25lX3BnZGF0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzYy1cXHUwMDNlb3JkZXIsIHNjLVxcdTAwM2VnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5yX3NvZnRfc2Nhbm5lZCk7XFxuLVxcdFxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gbnJfc29mdF9yZWNsYWltZWQ7XFxuLVxcdFxcdFxcdHNjLVxcdTAwM2Vucl9zY2FubmVkICs9IG5yX3NvZnRfc2Nhbm5lZDtcXG4tXFx0XFx0XFx0LyogbmVlZCBzb21lIGNoZWNrIGZvciBhdm9pZCBtb3JlIHNocmlua196b25lKCkgKi9cXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKCFmaXJzdF9wZ2RhdClcXG4gXFx0XFx0XFx0Zmlyc3RfcGdkYXQgPSB6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbiBcXG4tXFx0XFx0LyogU2VlIGNvbW1lbnQgYWJvdXQgc2FtZSBjaGVjayBmb3IgZ2xvYmFsIHJlY2xhaW0gYWJvdmUgKi9cXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlIHpvbmVsaXN0IGlzXFxuK1xcdFxcdCAqIG9yZGVyZWQgYnkgem9uZSAobm90IHRoZSBkZWZhdWx0KSB0aGVuIGEgbm9kZSBtYXkgYmUgc2hydW5rXFxuK1xcdFxcdCAqIG11bHRpcGxlIHRpbWVzIGJ1dCBpbiB0aGF0IGNhc2UgdGhlIHVzZXIgcHJlZmVycyBsb3dlciB6b25lc1xcbitcXHRcXHQgKiBiZWluZyBwcmVzZXJ2ZWQuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRpZiAoem9uZS1cXHUwMDNlem9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0bGFzdF9wZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxuQEAgLTY4MjUsNDcgKzY3OTMsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gXFxuLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRwZ19kYXRhX3QgKnBnZGF0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKVxcbi17XFxuLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuLVxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XFxuLVxcdFxcdC5ucl90b19yZWNsYWltID0gU1dBUF9DTFVTVEVSX01BWCxcXG4tXFx0XFx0LnRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2csXFxuLVxcdFxcdC5tYXlfd3JpdGVwYWdlID0gMSxcXG4tXFx0XFx0Lm1heV91bm1hcCA9IDEsXFxuLVxcdFxcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXFxuLVxcdFxcdC5tYXlfc3dhcCA9ICFub3N3YXAsXFxuLVxcdH07XFxuLVxcbi1cXHRXQVJOX09OX09OQ0UoIWN1cnJlbnQtXFx1MDAzZXJlY2xhaW1fc3RhdGUpO1xcbi1cXG4tXFx0c2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgXFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKSB8XFxuLVxcdFxcdFxcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKTtcXG4tXFxuLVxcdHRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbihzYy5nZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2Mub3JkZXIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG1lbWNnKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIE5PVEU6IEFsdGhvdWdoIHdlIGNhbiBnZXQgdGhlIHByaW9yaXR5IGZpZWxkLCB1c2luZyBpdFxcbi1cXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cXG4tXFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxuLVxcdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAncyBhcyB3ZWxsLiBXZSBoYWNrXFxuLVxcdCAqIHRoZSBwcmlvcml0eSBhbmQgbWFrZSBpdCB6ZXJvLlxcbi1cXHQgKi9cXG4tXFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFxcdTAwMjZzYyk7XFxuLVxcbi1cXHR0cmFjZV9tbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fZW5kKHNjLm5yX3JlY2xhaW1lZCwgbWVtY2cpO1xcbi1cXG4tXFx0Km5yX3NjYW5uZWQgPSBzYy5ucl9zY2FubmVkO1xcbi1cXG4tXFx0cmV0dXJuIHNjLm5yX3JlY2xhaW1lZDtcXG4tfVxcbi1cXG4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXFxuQEAgLTcxNzEsOCArNzA5OCw2IEBAIGNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuIHN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuIHtcXG4gXFx0aW50IGk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9zY2FubmVkO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9ib29zdF9yZWNsYWltO1xcbiBcXHR1bnNpZ25lZCBsb25nIHpvbmVfYm9vc3RzW01BWF9OUl9aT05FU10gPSB7IDAsIH07XFxuQEAgLTcyNzgsMTIgKzcyMDMsNyBAQCBzdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0a3N3YXBkX2FnZV9ub2RlKHBnZGF0LCBcXHUwMDI2c2MpO1xcbiBcXG4tXFx0XFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXFxuIFxcdFxcdHNjLm5yX3NjYW5uZWQgPSAwO1xcbi1cXHRcXHRucl9zb2Z0X3NjYW5uZWQgPSAwO1xcbi1cXHRcXHRucl9zb2Z0X3JlY2xhaW1lZCA9IG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdkYXQsIHNjLm9yZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzYy5nZnBfbWFzaywgXFx1MDAyNm5yX3NvZnRfc2Nhbm5lZCk7XFxuLVxcdFxcdHNjLm5yX3JlY2xhaW1lZCArPSBucl9zb2Z0X3JlY2xhaW1lZDtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIHJhaXNlIHRoZSBzY2FubmluZyBwcmlvcml0eSBpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0MjowNS45MjAxNTkwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDgyODEzNjU2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZFwiLFxuICAgIFwibWVtY2cxX3VuY2hhcmdlX2JhdGNoXCIsXG4gICAgXCJtZW1jZzFfY29tbWl0X2NoYXJnZVwiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiLFxuICAgIFwibHJ1X2dlbl9yb3RhdGVfbWVtY2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YTBkYWNkZDk1NmRlZjc0ZWUwMDYwNTFlZDg2OTJkOTVkNTliYmMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNDo0MjowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGRhNjI1ZDJlZGIzYmEuLmM3OTk5MjY0MzU1NjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC05NSwyMCArOTUsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XG4gXHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzXHRcdFx0KmxydXZlY19zdGF0cztcbiBcdHN0cnVjdCBzaHJpbmtlcl9pbmZvIF9fcmN1XHQqc2hyaW5rZXJfaW5mbztcbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4tXHQvKlxuLVx0ICogTWVtY2ctdjEgb25seSBzdHVmZiBpbiBtaWRkbGUgYXMgYnVmZmVyIGJldHdlZW4gcmVhZCBtb3N0bHkgZmllbGRzXG4tXHQgKiBhbmQgdXBkYXRlIG9mdGVuIGZpZWxkcyB0byBhdm9pZCBmYWxzZSBzaGFyaW5nLiBJZiB2MSBzdHVmZiBpc1xuLVx0ICogbm90IHByZXNlbnQsIGFuIGV4cGxpY2l0IHBhZGRpbmcgaXMgbmVlZGVkLlxuLVx0ICovXG4tXG4tXHRzdHJ1Y3QgcmJfbm9kZVx0XHR0cmVlX25vZGU7XHQvKiBSQiB0cmVlIG5vZGUgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0dXNhZ2VfaW5fZXhjZXNzOy8qIFNldCB0byB0aGUgdmFsdWUgYnkgd2hpY2ggKi9cbi1cdFx0XHRcdFx0XHQvKiB0aGUgc29mdCBsaW1pdCBpcyBleGNlZWRlZCovXG4tXHRib29sXHRcdFx0b25fdHJlZTtcbi0jZWxzZVxuIFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDFfKTtcbi0jZW5kaWZcbiBcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG5AQCAtMjkzLDggKzI4MCw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiBcbiBcdHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSBfX3BlcmNwdSAqZXZlbnRzX3BlcmNwdTtcbiBcbi1cdHVuc2lnbmVkIGxvbmcgc29mdF9saW1pdDtcbi1cbiBcdC8qIHByb3RlY3RlZCBieSBtZW1jZ19vb21fbG9jayAqL1xuIFx0Ym9vbCBvb21fbG9jaztcbiBcdGludCB1bmRlcl9vb207XG5AQCAtMTkyNCwxMCArMTkwOSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAvKiBDZ3JvdXAgdjEtcmVsYXRlZCBkZWNsYXJhdGlvbnMgKi9cbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4tdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi1cdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpO1xuLVxuIGJvb2wgbWVtX2Nncm91cF9vb21fc3luY2hyb25pemUoYm9vbCB3YWl0KTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuQEAgLTE5NDgsMTQgKzE5MjksNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbiB9XG4gXG4gI2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovXG4tc3RhdGljIGlubGluZVxuLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tXHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICp0b3RhbF9zY2FubmVkKVxuLXtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggNjdjODRhOGE3MjU4My4uODRlMjM3ZjJjMTdkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC02MzgsMzUgKzYzOCwzMiBAQCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHtcbiAgKiBGb3IgZWFjaCBub2RlLCBtZW1jZ3MgYXJlIGRpdmlkZWQgaW50byB0d28gZ2VuZXJhdGlvbnM6IHRoZSBvbGQgYW5kIHRoZVxuICAqIHlvdW5nLiBGb3IgZWFjaCBnZW5lcmF0aW9uLCBtZW1jZ3MgYXJlIHJhbmRvbWx5IHNoYXJkZWQgaW50byBtdWx0aXBsZSBiaW5zXG4gICogdG8gaW1wcm92ZSBzY2FsYWJpbGl0eS4gRm9yIGVhY2ggYmluLCB0aGUgaGxpc3RfbnVsbHMgaXMgdmlydHVhbGx5IGRpdmlkZWRcbi0gKiBpbnRvIHRocmVlIHNlZ21lbnRzOiB0aGUgaGVhZCwgdGhlIHRhaWwgYW5kIHRoZSBkZWZhdWx0LlxuKyAqIGludG8gdHdvIHNlZ21lbnRzOiB0aGUgdGFpbCBhbmQgdGhlIGRlZmF1bHQuXG4gICpcbiAgKiBBbiBvbmxpbmluZyBtZW1jZyBpcyBhZGRlZCB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLlxuICAqIFRoZSBldmljdGlvbiBzdGFydHMgYXQgdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGQgZ2VuZXJhdGlvbi4gVGhlXG4gICogcGVyLW5vZGUgbWVtY2cgZ2VuZXJhdGlvbiBjb3VudGVyLCB3aG9zZSByZW1pbmRlciAobW9kIE1FTUNHX05SX0dFTlMpIGluZGV4ZXNcbiAgKiB0aGUgb2xkIGdlbmVyYXRpb24sIGlzIGluY3JlbWVudGVkIHdoZW4gYWxsIGl0cyBiaW5zIGJlY29tZSBlbXB0eS5cbiAgKlxuLSAqIFRoZXJlIGFyZSBmb3VyIG9wZXJhdGlvbnM6XG4tICogMS4gTUVNQ0dfTFJVX0hFQUQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIGl0c1xuLSAqICAgIGN1cnJlbnQgZ2VuZXJhdGlvbiAob2xkIG9yIHlvdW5nKSBhbmQgdXBkYXRlcyBpdHMgXCJzZWdcIiB0byBcImhlYWRcIjtcbi0gKiAyLiBNRU1DR19MUlVfVEFJTCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4rICogVGhlcmUgYXJlIHRocmVlIG9wZXJhdGlvbnM6XG4rICogMS4gTUVNQ0dfTFJVX1RBSUwsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIHRhaWwgb2YgYSByYW5kb20gYmluIGluIGl0c1xuICAqICAgIGN1cnJlbnQgZ2VuZXJhdGlvbiAob2xkIG9yIHlvdW5nKSBhbmQgdXBkYXRlcyBpdHMgXCJzZWdcIiB0byBcInRhaWxcIjtcbi0gKiAzLiBNRU1DR19MUlVfT0xELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkXG4rICogMi4gTUVNQ0dfTFJVX09MRCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZFxuICAqICAgIGdlbmVyYXRpb24sIHVwZGF0ZXMgaXRzIFwiZ2VuXCIgdG8gXCJvbGRcIiBhbmQgcmVzZXRzIGl0cyBcInNlZ1wiIHRvIFwiZGVmYXVsdFwiO1xuLSAqIDQuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlXG4rICogMy4gTUVNQ0dfTFJVX1lPVU5HLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGVcbiAgKiAgICB5b3VuZyBnZW5lcmF0aW9uLCB1cGRhdGVzIGl0cyBcImdlblwiIHRvIFwieW91bmdcIiBhbmQgcmVzZXRzIGl0cyBcInNlZ1wiIHRvXG4gICogICAgXCJkZWZhdWx0XCIuXG4gICpcbiAgKiBUaGUgZXZlbnRzIHRoYXQgdHJpZ2dlciB0aGUgYWJvdmUgb3BlcmF0aW9ucyBhcmU6XG4tICogMS4gRXhjZWVkaW5nIHRoZSBzb2Z0IGxpbWl0LCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfSEVBRDtcbi0gKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbG93LCB3aGljaCB0cmlnZ2Vyc1xuKyAqIDEuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzXG4gICogICAgTUVNQ0dfTFJVX1RBSUw7XG4tICogMy4gVGhlIGZpcnN0IGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemVcbisgKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgb2ZmbGluZWQgb3IgYmVsb3cgcmVjbGFpbWFibGUgc2l6ZVxuICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1RBSUw7XG4tICogNC4gVGhlIHNlY29uZCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4rICogMy4gVGhlIHNlY29uZCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4gICogICAgdGhyZXNob2xkLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4tICogNS4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4tICogNi4gRmluaXNoaW5nIHRoZSBhZ2luZyBvbiB0aGUgZXZpY3Rpb24gcGF0aCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xuLSAqIDcuIE9mZmxpbmluZyBhIG1lbWNnLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfT0xELlxuKyAqIDQuIEF0dGVtcHRpbmcgdG8gcmVjbGFpbSBhIG1lbWNnIGJlbG93IG1pbiwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xuKyAqIDUuIEZpbmlzaGluZyB0aGUgYWdpbmcgb24gdGhlIGV2aWN0aW9uIHBhdGgsIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcbisgKiA2LiBPZmZsaW5pbmcgYSBtZW1jZywgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX09MRC5cbiAgKlxuICAqIE5vdGVzOlxuICAqIDEuIE1lbWNnIExSVSBvbmx5IGFwcGxpZXMgdG8gZ2xvYmFsIHJlY2xhaW0sIGFuZCB0aGUgcm91bmQtcm9iaW4gaW5jcmVtZW50aW5nXG5AQCAtNjk5LDcgKzY5Niw2IEBAIHZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gdm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gdm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG4gdm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuIGJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuQEAgLTc0MCwxMCArNzM2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLXtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcbmluZGV4IGI0YmY3YjhkZWYxZjUuLjhhODcyOTkwYjRiZWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcbkBAIC0yMTQsMTMgKzIxNCw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19yZWNsYWltX2JlXG4gXG4gXHRUUF9BUkdTKGdmcF9mbGFncywgb3JkZXIsIG1lbWNnKVxuICk7XG4tXG4tREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2JlZ2luLFxuLVxuLVx0VFBfUFJPVE8oZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyksXG4tXG4tXHRUUF9BUkdTKGdmcF9mbGFncywgb3JkZXIsIG1lbWNnKVxuLSk7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIERFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSxcbkBAIC0yNjAsMTMgKzI1Myw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsXG4gXG4gXHRUUF9BUkdTKG5yX3JlY2xhaW1lZCwgbWVtY2cpXG4gKTtcbi1cbi1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZCxcbi1cbi1cdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLFxuLVxuLVx0VFBfQVJHUyhucl9yZWNsYWltZWQsIG1lbWNnKVxuLSk7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIFRSQUNFX0VWRU5UKG1tX3Nocmlua19zbGFiX3N0YXJ0LFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCA1Y2MyMjBkYjkwNzY2Li5lMTZmMTI1MGIyNWM4IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTc4LDEwICs3OCw2IEBAIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCAgIGdmcF90IGdmcF9tYXNrLFxuIFx0XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zLFxuIFx0XHRcdFx0XHQgICBpbnQgKnN3YXBwaW5lc3MpO1xuLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHQgICAgIGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi1cdFx0XHRcdCAgICAgcGdfZGF0YV90ICpwZ2RhdCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCk7XG4gXG4gI2lmZGVmIENPTkZJR19OVU1BXG4gZXh0ZXJuIGludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuY1xuaW5kZXggMDVlZjU1Y2FlNGRjNi4uYmYyYzdkNTNiMDFiMSAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xuKysrIGIvbW0vbWVtY29udHJvbC12MS5jXG5AQCAtMTcsMzAgKzE3LDYgQEBcbiAjaW5jbHVkZSBcInN3YXBfdGFibGUuaFwiXG4gI2luY2x1ZGUgXCJtZW1jb250cm9sLXYxLmhcIlxuIFxuLS8qXG4tICogQ2dyb3VwcyBhYm92ZSB0aGVpciBsaW1pdHMgYXJlIG1haW50YWluZWQgaW4gYSBSQi1UcmVlLCBpbmRlcGVuZGVudCBvZlxuLSAqIHRoZWlyIGhpZXJhcmNoeSByZXByZXNlbnRhdGlvblxuLSAqL1xuLVxuLXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUge1xuLVx0c3RydWN0IHJiX3Jvb3QgcmJfcm9vdDtcbi1cdHN0cnVjdCByYl9ub2RlICpyYl9yaWdodG1vc3Q7XG4tXHRzcGlubG9ja190IGxvY2s7XG4tfTtcbi1cbi1zdHJ1Y3QgbWVtX2Nncm91cF90cmVlIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKnJiX3RyZWVfcGVyX25vZGVbTUFYX05VTU5PREVTXTtcbi19O1xuLVxuLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlIHNvZnRfbGltaXRfdHJlZSBfX3JlYWRfbW9zdGx5O1xuLVxuLS8qXG4tICogTWF4aW11bSBsb29wcyBpbiBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbSgpLCB1c2VkIGZvciBzb2Z0XG4tICogbGltaXQgcmVjbGFpbSB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLCBpZiB0aGV5IGV2ZXIgb2NjdXIuXG4tICovXG4tI2RlZmluZVx0TUVNX0NHUk9VUF9NQVhfUkVDTEFJTV9MT09QU1x0XHQxMDBcbi0jZGVmaW5lXHRNRU1fQ0dST1VQX01BWF9TT0ZUX0xJTUlUX1JFQ0xBSU1fTE9PUFNcdDJcbi1cbiAvKiBmb3IgT09NICovXG4gc3RydWN0IG1lbV9jZ3JvdXBfZXZlbnRmZF9saXN0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbkBAIC0xMDYsMzAxICs4Miw2IEBAIHN0YXRpYyBzdHJ1Y3QgbG9ja2RlcF9tYXAgbWVtY2dfb29tX2xvY2tfZGVwX21hcCA9IHtcbiBcbiBERUZJTkVfU1BJTkxPQ0sobWVtY2dfb29tX2xvY2spO1xuIFxuLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LFxuLVx0XHRcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eixcbi1cdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbmV3X3VzYWdlX2luX2V4Y2Vzcylcbi17XG4tXHRzdHJ1Y3QgcmJfbm9kZSAqKnAgPSBcdTAwMjZtY3R6LVx1MDAzZXJiX3Jvb3QucmJfbm9kZTtcbi1cdHN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16X25vZGU7XG4tXHRib29sIHJpZ2h0bW9zdCA9IHRydWU7XG4tXG4tXHRpZiAobXotXHUwMDNlb25fdHJlZSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0bXotXHUwMDNldXNhZ2VfaW5fZXhjZXNzID0gbmV3X3VzYWdlX2luX2V4Y2Vzcztcbi1cdGlmICghbXotXHUwMDNldXNhZ2VfaW5fZXhjZXNzKVxuLVx0XHRyZXR1cm47XG4tXHR3aGlsZSAoKnApIHtcbi1cdFx0cGFyZW50ID0gKnA7XG4tXHRcdG16X25vZGUgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLFxuLVx0XHRcdFx0XHR0cmVlX25vZGUpO1xuLVx0XHRpZiAobXotXHUwMDNldXNhZ2VfaW5fZXhjZXNzIFx1MDAzYyBtel9ub2RlLVx1MDAzZXVzYWdlX2luX2V4Y2Vzcykge1xuLVx0XHRcdHAgPSBcdTAwMjYoKnApLVx1MDAzZXJiX2xlZnQ7XG4tXHRcdFx0cmlnaHRtb3N0ID0gZmFsc2U7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cCA9IFx1MDAyNigqcCktXHUwMDNlcmJfcmlnaHQ7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmIChyaWdodG1vc3QpXG4tXHRcdG1jdHotXHUwMDNlcmJfcmlnaHRtb3N0ID0gXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlO1xuLVxuLVx0cmJfbGlua19ub2RlKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSwgcGFyZW50LCBwKTtcbi1cdHJiX2luc2VydF9jb2xvcihcdTAwMjZtei1cdTAwM2V0cmVlX25vZGUsIFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdCk7XG4tXHRtei1cdTAwM2Vvbl90cmVlID0gdHJ1ZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6KVxuLXtcbi1cdGlmICghbXotXHUwMDNlb25fdHJlZSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0aWYgKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSA9PSBtY3R6LVx1MDAzZXJiX3JpZ2h0bW9zdClcbi1cdFx0bWN0ei1cdTAwM2VyYl9yaWdodG1vc3QgPSByYl9wcmV2KFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSk7XG4tXG4tXHRyYl9lcmFzZShcdTAwMjZtei1cdTAwM2V0cmVlX25vZGUsIFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdCk7XG4tXHRtei1cdTAwM2Vvbl90cmVlID0gZmFsc2U7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3R6LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXosIG1jdHopO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtY3R6LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi19XG4tXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc29mdF9saW1pdF9leGNlc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnkpO1xuLVx0dW5zaWduZWQgbG9uZyBzb2Z0X2xpbWl0ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXNvZnRfbGltaXQpO1xuLVx0dW5zaWduZWQgbG9uZyBleGNlc3MgPSAwO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSBzb2Z0X2xpbWl0KVxuLVx0XHRleGNlc3MgPSBucl9wYWdlcyAtIHNvZnRfbGltaXQ7XG4tXG4tXHRyZXR1cm4gZXhjZXNzO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBtZW1jZzFfdXBkYXRlX3RyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgZXhjZXNzO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejtcbi1cbi1cdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xuLVx0XHRpZiAoc29mdF9saW1pdF9leGNlc3MobWVtY2cpKVxuLVx0XHRcdGxydV9nZW5fc29mdF9yZWNsYWltKG1lbWNnLCBuaWQpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRtY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbmlkXTtcbi1cdGlmICghbWN0eilcbi1cdFx0cmV0dXJuO1xuLVx0Lypcbi1cdCAqIE5lY2Vzc2FyeSB0byB1cGRhdGUgYWxsIGFuY2VzdG9ycyB3aGVuIGhpZXJhcmNoeSBpcyB1c2VkLlxuLVx0ICogYmVjYXVzZSB0aGVpciBldmVudCBjb3VudGVyIGlzIG5vdCB0b3VjaGVkLlxuLVx0ICovXG4tXHRmb3IgKDsgbWVtY2c7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSB7XG4tXHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXTtcbi1cdFx0ZXhjZXNzID0gc29mdF9saW1pdF9leGNlc3MobWVtY2cpO1xuLVx0XHQvKlxuLVx0XHQgKiBXZSBoYXZlIHRvIHVwZGF0ZSB0aGUgdHJlZSBpZiBteiBpcyBvbiBSQi10cmVlIG9yXG4tXHRcdCAqIG1lbSBpcyBvdmVyIGl0cyBzb2Z0bGltaXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZXhjZXNzIHx8IG16LVx1MDAzZW9uX3RyZWUpIHtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRcdC8qIGlmIG9uLXRyZWUsIHJlbW92ZSBpdCAqL1xuLVx0XHRcdGlmIChtei1cdTAwM2Vvbl90cmVlKVxuLVx0XHRcdFx0X19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBJbnNlcnQgYWdhaW4uIG16LVx1MDAzZXVzYWdlX2luX2V4Y2VzcyB3aWxsIGJlIHVwZGF0ZWQuXG4tXHRcdFx0ICogSWYgZXhjZXNzIGlzIDAsIG5vIHRyZWUgb3BzLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXosIG1jdHosIGV4Y2Vzcyk7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtY3R6LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0fVxuLVx0fVxuLX1cbi1cbi12b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdGludCBuaWQ7XG4tXG4tXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuLVx0XHRteiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF07XG4tXHRcdG1jdHogPSBzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtuaWRdO1xuLVx0XHRpZiAobWN0eilcbi1cdFx0XHRtZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XG4tXHR9XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqXG4tX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVxuLXJldHJ5OlxuLVx0bXogPSBOVUxMO1xuLVx0aWYgKCFtY3R6LVx1MDAzZXJiX3JpZ2h0bW9zdClcbi1cdFx0Z290byBkb25lO1x0XHQvKiBOb3RoaW5nIHRvIHJlY2xhaW0gZnJvbSAqL1xuLVxuLVx0bXogPSByYl9lbnRyeShtY3R6LVx1MDAzZXJiX3JpZ2h0bW9zdCxcbi1cdFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIHRyZWVfbm9kZSk7XG4tXHQvKlxuLVx0ICogUmVtb3ZlIHRoZSBub2RlIG5vdyBidXQgc29tZW9uZSBlbHNlIGNhbiBhZGQgaXQgYmFjayxcbi1cdCAqIHdlIHdpbGwgdG8gYWRkIGl0IGJhY2sgYXQgdGhlIGVuZCBvZiByZWNsYWltIHRvIGl0cyBjb3JyZWN0XG4tXHQgKiBwb3NpdGlvbiBpbiB0aGUgdHJlZS5cbi1cdCAqL1xuLVx0X19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XG4tXHRpZiAoIXNvZnRfbGltaXRfZXhjZXNzKG16LVx1MDAzZW1lbWNnKSB8fFxuLVx0ICAgICFjc3NfdHJ5Z2V0KFx1MDAyNm16LVx1MDAzZW1lbWNnLVx1MDAzZWNzcykpXG4tXHRcdGdvdG8gcmV0cnk7XG4tZG9uZTpcbi1cdHJldHVybiBtejtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpcbi1tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVxuLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZtY3R6LVx1MDAzZWxvY2spO1xuLVx0bXogPSBfX21lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUobWN0eik7XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2bWN0ei1cdTAwM2Vsb2NrKTtcbi1cdHJldHVybiBtejtcbi19XG4tXG4tc3RhdGljIGludCBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyxcbi1cdFx0XHRcdCAgIHBnX2RhdGFfdCAqcGdkYXQsXG4tXHRcdFx0XHQgICBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpXG4te1xuLVx0c3RydWN0IG1lbV9jZ3JvdXAgKnZpY3RpbSA9IE5VTEw7XG4tXHRpbnQgdG90YWwgPSAwO1xuLVx0aW50IGxvb3AgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBleGNlc3M7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSByZWNsYWltID0ge1xuLVx0XHQucGdkYXQgPSBwZ2RhdCxcbi1cdH07XG4tXG4tXHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhyb290X21lbWNnKTtcbi1cbi1cdHdoaWxlICgxKSB7XG4tXHRcdHZpY3RpbSA9IG1lbV9jZ3JvdXBfaXRlcihyb290X21lbWNnLCB2aWN0aW0sIFx1MDAyNnJlY2xhaW0pO1xuLVx0XHRpZiAoIXZpY3RpbSkge1xuLVx0XHRcdGxvb3ArKztcbi1cdFx0XHRpZiAobG9vcCBcdTAwM2U9IDIpIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBJZiB3ZSBoYXZlIG5vdCBiZWVuIGFibGUgdG8gcmVjbGFpbVxuLVx0XHRcdFx0ICogYW55dGhpbmcsIGl0IG1pZ2h0IGJlY2F1c2UgdGhlcmUgYXJlXG4tXHRcdFx0XHQgKiBubyByZWNsYWltYWJsZSBwYWdlcyB1bmRlciB0aGlzIGhpZXJhcmNoeVxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRpZiAoIXRvdGFsKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBXZSB3YW50IHRvIGRvIG1vcmUgdGFyZ2V0ZWQgcmVjbGFpbS5cbi1cdFx0XHRcdCAqIGV4Y2VzcyBcdTAwM2VcdTAwM2UgMiBpcyBub3QgdG8gZXhjZXNzaXZlIHNvIGFzIHRvXG4tXHRcdFx0XHQgKiByZWNsYWltIHRvbyBtdWNoLCBub3IgdG9vIGxlc3MgdGhhdCB3ZSBrZWVwXG4tXHRcdFx0XHQgKiBjb21pbmcgYmFjayB0byByZWNsYWltIGZyb20gdGhpcyBjZ3JvdXBcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0aWYgKHRvdGFsIFx1MDAzZT0gKGV4Y2VzcyBcdTAwM2VcdTAwM2UgMikgfHxcbi1cdFx0XHRcdFx0KGxvb3AgXHUwMDNlIE1FTV9DR1JPVVBfTUFYX1JFQ0xBSU1fTE9PUFMpKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cdFx0dG90YWwgKz0gbWVtX2Nncm91cF9zaHJpbmtfbm9kZSh2aWN0aW0sIGdmcF9tYXNrLCBmYWxzZSxcbi1cdFx0XHRcdFx0cGdkYXQsIFx1MDAyNm5yX3NjYW5uZWQpO1xuLVx0XHQqdG90YWxfc2Nhbm5lZCArPSBucl9zY2FubmVkO1xuLVx0XHRpZiAoIXNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpKVxuLVx0XHRcdGJyZWFrO1xuLVx0fVxuLVx0bWVtX2Nncm91cF9pdGVyX2JyZWFrKHJvb3RfbWVtY2csIHZpY3RpbSk7XG4tXHRyZXR1cm4gdG90YWw7XG4tfVxuLVxuLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tXHRcdFx0XHRcdCAgICBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSAwO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LCAqbmV4dF9teiA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcbi1cdGludCBsb29wID0gMDtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2Vzcztcbi1cbi1cdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRpZiAob3JkZXIgXHUwMDNlIDApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuLVxuLVx0Lypcbi1cdCAqIERvIG5vdCBldmVuIGJvdGhlciB0byBjaGVjayB0aGUgbGFyZ2VzdCBub2RlIGlmIHRoZSByb290XG4tXHQgKiBpcyBlbXB0eS4gRG8gaXQgbG9ja2xlc3MgdG8gcHJldmVudCBsb2NrIGJvdW5jaW5nLiBSYWNlc1xuLVx0ICogYXJlIGFjY2VwdGFibGUgYXMgc29mdCBsaW1pdCBpcyBiZXN0IGVmZm9ydCBhbnl3YXkuXG4tXHQgKi9cbi1cdGlmICghbWN0eiB8fCBSQl9FTVBUWV9ST09UKFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0Lypcbi1cdCAqIFRoaXMgbG9vcCBjYW4gcnVuIGEgd2hpbGUsIHNwZWNpYWxseSBpZiBtZW1fY2dyb3VwJ3MgY29udGludW91c2x5XG4tXHQgKiBrZWVwIGV4Y2VlZGluZyB0aGVpciBzb2Z0IGxpbWl0IGFuZCBwdXR0aW5nIHRoZSBzeXN0ZW0gdW5kZXJcbi1cdCAqIHByZXNzdXJlXG4tXHQgKi9cbi1cdGRvIHtcbi1cdFx0aWYgKG5leHRfbXopXG4tXHRcdFx0bXogPSBuZXh0X216O1xuLVx0XHRlbHNlXG4tXHRcdFx0bXogPSBtZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopO1xuLVx0XHRpZiAoIW16KVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHRyZWNsYWltZWQgPSBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbShtei1cdTAwM2VtZW1jZywgcGdkYXQsXG4tXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCB0b3RhbF9zY2FubmVkKTtcbi1cdFx0bnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZtY3R6LVx1MDAzZWxvY2spO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBJZiB3ZSBmYWlsZWQgdG8gcmVjbGFpbSBhbnl0aGluZyBmcm9tIHRoaXMgbWVtb3J5IGNncm91cFxuLVx0XHQgKiBpdCBpcyB0aW1lIHRvIG1vdmUgb24gdG8gdGhlIG5leHQgY2dyb3VwXG4tXHRcdCAqL1xuLVx0XHRuZXh0X216ID0gTlVMTDtcbi1cdFx0aWYgKCFyZWNsYWltZWQpXG4tXHRcdFx0bmV4dF9teiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTtcbi1cbi1cdFx0ZXhjZXNzID0gc29mdF9saW1pdF9leGNlc3MobXotXHUwMDNlbWVtY2cpO1xuLVx0XHQvKlxuLVx0XHQgKiBPbmUgc2Nob29sIG9mIHRob3VnaHQgc2F5cyB0aGF0IHdlIHNob3VsZCBub3QgYWRkXG4tXHRcdCAqIGJhY2sgdGhlIG5vZGUgdG8gdGhlIHRyZWUgaWYgcmVjbGFpbSByZXR1cm5zIDAuXG4tXHRcdCAqIEJ1dCBvdXIgcmVjbGFpbSBjb3VsZCByZXR1cm4gMCwgc2ltcGx5IGJlY2F1c2UgZHVlXG4tXHRcdCAqIHRvIHByaW9yaXR5IHdlIGFyZSBleHBvc2luZyBhIHNtYWxsZXIgc3Vic2V0IG9mXG4tXHRcdCAqIG1lbW9yeSB0byByZWNsYWltIGZyb20uIENvbnNpZGVyIHRoaXMgYXMgYSBsb25nZXJcbi1cdFx0ICogdGVybSBUT0RPLlxuLVx0XHQgKi9cbi1cdFx0LyogSWYgZXhjZXNzID09IDAsIG5vIHRyZWUgb3BzICovXG4tXHRcdF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXosIG1jdHosIGV4Y2Vzcyk7XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZtY3R6LVx1MDAzZWxvY2spO1xuLVx0XHRjc3NfcHV0KFx1MDAyNm16LVx1MDAzZW1lbWNnLVx1MDAzZWNzcyk7XG4tXHRcdGxvb3ArKztcbi1cdFx0Lypcbi1cdFx0ICogQ291bGQgbm90IHJlY2xhaW0gYW55dGhpbmcgYW5kIHRoZXJlIGFyZSBubyBtb3JlXG4tXHRcdCAqIG1lbSBjZ3JvdXBzIHRvIHRyeSBvciB3ZSBzZWVtIHRvIGJlIGxvb3Bpbmcgd2l0aG91dFxuLVx0XHQgKiByZWNsYWltaW5nIGFueXRoaW5nLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFucl9yZWNsYWltZWQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KG5leHRfbXogPT0gTlVMTCB8fFxuLVx0XHRcdGxvb3AgXHUwMDNlIE1FTV9DR1JPVVBfTUFYX1NPRlRfTElNSVRfUkVDTEFJTV9MT09QUykpXG4tXHRcdFx0YnJlYWs7XG4tXHR9IHdoaWxlICghbnJfcmVjbGFpbWVkKTtcbi1cdGlmIChuZXh0X216KVxuLVx0XHRjc3NfcHV0KFx1MDAyNm5leHRfbXotXHUwMDNlbWVtY2ctXHUwMDNlY3NzKTtcbi1cdHJldHVybiBucl9yZWNsYWltZWQ7XG4tfVxuLVxuIHN0YXRpYyB1NjQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4gXHRcdFx0XHRzdHJ1Y3QgY2Z0eXBlICpjZnQpXG4ge1xuQEAgLTUxMSw3ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RocmVzaG9sZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHR9XG4gfVxuIFxuLS8qIENncm91cDE6IHRocmVzaG9sZCBub3RpZmljYXRpb25zIFx1MDAyNiBzb2Z0bGltaXQgdHJlZSB1cGRhdGVzICovXG4rLyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgKi9cbiBcbiAvKlxuICAqIFBlciBtZW1jZyBldmVudCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IHBhZ2Vpbi9wYWdlb3V0LiBXaXRoIFRIUCxcbkBAIC01MTksMTUgKzIwMCw5IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAgKiB0byB0cmlnZ2VyIHNvbWUgcGVyaW9kaWMgZXZlbnRzLiBUaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgYmV0dGVyXG4gICogdGhhbiB1c2luZyBqaWZmaWVzIGV0Yy4gdG8gaGFuZGxlIHBlcmlvZGljIG1lbWNnIGV2ZW50LlxuICAqL1xuLWVudW0gbWVtX2Nncm91cF9ldmVudHNfdGFyZ2V0IHtcbi1cdE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCxcbi1cdE1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVCxcbi1cdE1FTV9DR1JPVVBfTlRBUkdFVFMsXG4tfTtcbi1cbiBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHUge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlX2V2ZW50cztcbi1cdHVuc2lnbmVkIGxvbmcgdGFyZ2V0c1tNRU1fQ0dST1VQX05UQVJHRVRTXTtcbitcdHVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX3RhcmdldDtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcylcbkBAIC01NDQsNTMgKzIxOSwyOSBAQCBzdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpXG4gfVxuIFxuICNkZWZpbmUgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUIDEyOFxuLSNkZWZpbmUgU09GVExJTUlUX0VWRU5UU19UQVJHRVQgMTAyNFxuIFxuLXN0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0ZW51bSBtZW1fY2dyb3VwX2V2ZW50c190YXJnZXQgdGFyZ2V0KVxuK3N0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsLCBuZXh0O1xuIFxuIFx0dmFsID0gX190aGlzX2NwdV9yZWFkKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNlbnJfcGFnZV9ldmVudHMpO1xuLVx0bmV4dCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZXRhcmdldHNbdGFyZ2V0XSk7XG4rXHRuZXh0ID0gX190aGlzX2NwdV9yZWFkKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNldGhyZXNob2xkX3RhcmdldCk7XG4gXHQvKiBmcm9tIHRpbWVfYWZ0ZXIoKSBpbiBqaWZmaWVzLmggKi9cbiBcdGlmICgobG9uZykobmV4dCAtIHZhbCkgXHUwMDNjIDApIHtcbi1cdFx0c3dpdGNoICh0YXJnZXQpIHtcbi1cdFx0Y2FzZSBNRU1fQ0dST1VQX1RBUkdFVF9USFJFU0g6XG4tXHRcdFx0bmV4dCA9IHZhbCArIFRIUkVTSE9MRFNfRVZFTlRTX1RBUkdFVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQ6XG4tXHRcdFx0bmV4dCA9IHZhbCArIFNPRlRMSU1JVF9FVkVOVFNfVEFSR0VUO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdF9fdGhpc19jcHVfd3JpdGUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0YXJnZXRzW3RhcmdldF0sIG5leHQpO1xuK1x0XHRfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNldGhyZXNob2xkX3RhcmdldCxcbitcdFx0XHRcdCB2YWwgKyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQpO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tLypcbi0gKiBDaGVjayBldmVudHMgaW4gb3JkZXIuXG4tICpcbi0gKi9cbi1zdGF0aWMgdm9pZCBtZW1jZzFfY2hlY2tfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbitzdGF0aWMgdm9pZCBtZW1jZzFfY2hlY2tfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qIHRocmVzaG9sZCBldmVudCBpcyB0cmlnZ2VyZWQgaW4gZmluZXIgZ3JhaW4gdGhhbiBzb2Z0IGxpbWl0ICovXG4tXHRpZiAodW5saWtlbHkobWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZyxcbi1cdFx0XHRcdFx0XHRNRU1fQ0dST1VQX1RBUkdFVF9USFJFU0gpKSkge1xuLVx0XHRib29sIGRvX3NvZnRsaW1pdDtcbi1cbi1cdFx0ZG9fc29mdGxpbWl0ID0gbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZyxcbi1cdFx0XHRcdFx0XHRNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQpO1xuK1x0aWYgKHVubGlrZWx5KG1lbWNnMV9ldmVudF9yYXRlbGltaXQobWVtY2cpKSlcbiBcdFx0bWVtX2Nncm91cF90aHJlc2hvbGQobWVtY2cpO1xuLVx0XHRpZiAodW5saWtlbHkoZG9fc29mdGxpbWl0KSlcbi1cdFx0XHRtZW1jZzFfdXBkYXRlX3RyZWUobWVtY2csIG5pZCk7XG4tXHR9XG4gfVxuIFxuIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuQEAgLTU5OSw3ICsyNTAsNyBAQCB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhtZW1jZywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbi1cdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpO1xuK1x0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7XG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuIFxuQEAgLTY3Miw3ICszMjMsNyBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiBcdFZNX1dBUk5fT05fSVJRU19FTkFCTEVEKCk7XG4gXHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIFx0cHJlZW1wdF9lbmFibGVfbmVzdGVkKCk7XG4tXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcbitcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2cpO1xuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG5AQCAtNzI2LDE0ICszNzcsMTQgQEAgdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gI2VuZGlmXG4gXG4gdm9pZCBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXG4tXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnksIGludCBuaWQpXG4rXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnkpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGNvdW50X21lbWNnX2V2ZW50cyhtZW1jZywgUEdQR09VVCwgcGdwZ291dCk7XG4gXHRfX3RoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZW5yX3BhZ2VfZXZlbnRzLCBucl9tZW1vcnkpO1xuLVx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgbmlkKTtcbitcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2cpO1xuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbkBAIC0yNTY2LDIyICsyMjE3LDMgQEAgdm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGZyZWVfcGVyY3B1KG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUpO1xuIH1cbi1cbi1zdGF0aWMgaW50IF9faW5pdCBtZW1jZzFfaW5pdCh2b2lkKVxuLXtcbi1cdGludCBub2RlO1xuLVxuLVx0Zm9yX2VhY2hfbm9kZShub2RlKSB7XG4tXHRcdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKnJ0cG47XG4tXG4tXHRcdHJ0cG4gPSBremFsbG9jX25vZGUoc2l6ZW9mKCpydHBuKSwgR0ZQX0tFUk5FTCwgbm9kZSk7XG4tXG4tXHRcdHJ0cG4tXHUwMDNlcmJfcm9vdCA9IFJCX1JPT1Q7XG4tXHRcdHJ0cG4tXHUwMDNlcmJfcmlnaHRtb3N0ID0gTlVMTDtcbi1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cnRwbi1cdTAwM2Vsb2NrKTtcbi1cdFx0c29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbm9kZV0gPSBydHBuO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLXN1YnN5c19pbml0Y2FsbChtZW1jZzFfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXG5pbmRleCAxZTM5NDI2OWM2MTNkLi5iOWEyMWYwZmQyYzNhIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5oXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmhcbkBAIC00MSwxMiArNDEsNiBAQCBib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi12b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzb2Z0X2xpbWl0LCBQQUdFX0NPVU5URVJfTUFYKTtcbi19XG4gXG4gc3RydWN0IGNncm91cF90YXNrc2V0O1xuIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5AQCAtNjUsNyArNTksNyBAQCB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcbi1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSwgaW50IG5pZCk7XG4rXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnkpO1xuIFxuIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpO1xuIHZvaWQgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCk7XG5AQCAtOTgsOCArOTIsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHsgcmV0dXJuIHRydWU7XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9tZW1jZ19pbml0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXG5AQCAtMTE1LDcgKzEwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBwZ3Bnb3V0LFxuLVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBucl9tZW1vcnksIGludCBuaWQpIHt9XG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSkge31cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpIHt9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCBiZmQwYTc0ZmFjOTIzLi4zMDYzNmI5ZDk2NzM5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00MjU3LDcgKzQyNTcsNiBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKG1lbWNnKTtcbiBcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xuLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xuICNpZmRlZiBDT05GSUdfWlNXQVBcbiBcdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG4gXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XG5AQCAtNDQyOSw3ICs0NDI4LDYgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFxuIFx0dm1wcmVzc3VyZV9jbGVhbnVwKFx1MDAyNm1lbWNnLVx1MDAzZXZtcHJlc3N1cmUpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZtZW1jZy1cdTAwM2VoaWdoX3dvcmspO1xuLVx0bWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKG1lbWNnKTtcbiBcdGZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZyk7XG4gXHRtZW1fY2dyb3VwX2ZyZWUobWVtY2cpO1xuIH1cbkBAIC00NDY1LDcgKzQ0NjMsNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0cGFnZV9jb3VudGVyX3NldF9taW4oXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCAwKTtcbiBcdHBhZ2VfY291bnRlcl9zZXRfbG93KFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgMCk7XG4gXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTtcbi1cdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcbiBcdG1lbWNnX3diX2RvbWFpbl9zaXplX2NoYW5nZWQobWVtY2cpO1xuIH1cbkBAIC01MzMxLDcgKzUzMjgsNiBAQCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5O1xuIFx0dW5zaWduZWQgbG9uZyBwZ3Bnb3V0O1xuIFx0dW5zaWduZWQgbG9uZyBucl9rbWVtO1xuLVx0aW50IG5pZDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmNoYXJnZV9nYXRoZXJfY2xlYXIoc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG5AQCAtNTM1NCw3ICs1MzUwLDcgQEAgc3RhdGljIHZvaWQgdW5jaGFyZ2VfYmF0Y2goY29uc3Qgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG4gXHRcdG1lbWNnMV9vb21fcmVjb3ZlcihtZW1jZyk7XG4gXHR9XG4gXG4tXHRtZW1jZzFfdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHVnLVx1MDAzZXBncGdvdXQsIHVnLVx1MDAzZW5yX21lbW9yeSwgdWctXHUwMDNlbmlkKTtcbitcdG1lbWNnMV91bmNoYXJnZV9iYXRjaChtZW1jZywgdWctXHUwMDNlcGdwZ291dCwgdWctXHUwMDNlbnJfbWVtb3J5KTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0LyogZHJvcCByZWZlcmVuY2UgZnJvbSB1bmNoYXJnZV9mb2xpbyAqL1xuQEAgLTUzODMsNyArNTM3OSw2IEBAIHN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuIFx0XHRcdHVuY2hhcmdlX2dhdGhlcl9jbGVhcih1Zyk7XG4gXHRcdH1cbiBcdFx0dWctXHUwMDNlb2JqY2cgPSBvYmpjZztcbi1cdFx0dWctXHUwMDNlbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbiBcbiBcdFx0LyogcGFpcnMgd2l0aCBvYmpfY2dyb3VwX3B1dCBpbiB1bmNoYXJnZV9iYXRjaCAqL1xuIFx0XHRvYmpfY2dyb3VwX2dldChvYmpjZyk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmRkMTMyOTlhMDRhOS4uZGViMDg3YzU3MDA3ZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQzNzMsNyArNDM3Myw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiAvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xuIGVudW0ge1xuIFx0TUVNQ0dfTFJVX05PUCxcbi1cdE1FTUNHX0xSVV9IRUFELFxuIFx0TUVNQ0dfTFJVX1RBSUwsXG4gXHRNRU1DR19MUlVfT0xELFxuIFx0TUVNQ0dfTFJVX1lPVU5HLFxuQEAgLTQzOTUsOSArNDM5NCw3IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuIFx0bmV3ID0gb2xkID0gbHJ1dmVjLVx1MDAzZWxydWdlbi5nZW47XG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xuLVx0aWYgKG9wID09IE1FTUNHX0xSVV9IRUFEKVxuLVx0XHRzZWcgPSBNRU1DR19MUlVfSEVBRDtcbi1cdGVsc2UgaWYgKG9wID09IE1FTUNHX0xSVV9UQUlMKVxuK1x0aWYgKG9wID09IE1FTUNHX0xSVV9UQUlMKVxuIFx0XHRzZWcgPSBNRU1DR19MUlVfVEFJTDtcbiBcdGVsc2UgaWYgKG9wID09IE1FTUNHX0xSVV9PTEQpXG4gXHRcdG5ldyA9IGdldF9tZW1jZ19nZW4ocGdkYXQtXHUwMDNlbWVtY2dfbHJ1LnNlcSk7XG5AQCAtNDQxMSw3ICs0NDA4LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4gXG4gXHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW4ubGlzdCk7XG4gXG4tXHRpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQgfHwgb3AgPT0gTUVNQ0dfTFJVX09MRClcbitcdGlmIChvcCA9PSBNRU1DR19MUlVfT0xEKVxuIFx0XHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0LCBcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pO1xuIFx0ZWxzZVxuIFx0XHRobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0LCBcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pO1xuQEAgLTQ0ODksMTUgKzQ0ODYsNiBAQCB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHR9XG4gfVxuIFxuLXZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLXtcbi1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG4tXG4tXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xuLVx0aWYgKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpXG4tXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xuLX1cbi1cbiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuIHtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG5AQCAtNjQzOSw4ICs2NDI3LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHN0cnVjdCB6b25lcmVmICp6O1xuIFx0c3RydWN0IHpvbmUgKnpvbmU7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3NvZnRfcmVjbGFpbWVkO1xuLVx0dW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7XG4gXHRnZnBfdCBvcmlnX21hc2s7XG4gXHRwZ19kYXRhX3QgKmxhc3RfcGdkYXQgPSBOVUxMO1xuIFx0cGdfZGF0YV90ICpmaXJzdF9wZ2RhdCA9IE5VTEw7XG5AQCAtNjQ4MiwzNSArNjQ2OCwxNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRcdFx0XHRzYy1cdTAwM2Vjb21wYWN0aW9uX3JlYWR5ID0gdHJ1ZTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFNocmluayBlYWNoIG5vZGUgaW4gdGhlIHpvbmVsaXN0IG9uY2UuIElmIHRoZVxuLVx0XHRcdCAqIHpvbmVsaXN0IGlzIG9yZGVyZWQgYnkgem9uZSAobm90IHRoZSBkZWZhdWx0KSB0aGVuIGFcbi1cdFx0XHQgKiBub2RlIG1heSBiZSBzaHJ1bmsgbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZVxuLVx0XHRcdCAqIHRoZSB1c2VyIHByZWZlcnMgbG93ZXIgem9uZXMgYmVpbmcgcHJlc2VydmVkLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICh6b25lLVx1MDAzZXpvbmVfcGdkYXQgPT0gbGFzdF9wZ2RhdClcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVGhpcyBzdGVhbHMgcGFnZXMgZnJvbSBtZW1vcnkgY2dyb3VwcyBvdmVyIHNvZnRsaW1pdFxuLVx0XHRcdCAqIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVjbGFpbWVkIHBhZ2VzIGFuZFxuLVx0XHRcdCAqIHNjYW5uZWQgcGFnZXMuIFRoaXMgd29ya3MgZm9yIGdsb2JhbCBtZW1vcnkgcHJlc3N1cmVcbi1cdFx0XHQgKiBhbmQgYmFsYW5jaW5nLCBub3QgZm9yIGEgbWVtY2cncyBsaW1pdC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRucl9zb2Z0X3NjYW5uZWQgPSAwO1xuLVx0XHRcdG5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbSh6b25lLVx1MDAzZXpvbmVfcGdkYXQsXG4tXHRcdFx0XHRcdFx0XHRcdCAgICAgIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnJfc29mdF9zY2FubmVkKTtcbi1cdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgKz0gbnJfc29mdF9yZWNsYWltZWQ7XG4tXHRcdFx0c2MtXHUwMDNlbnJfc2Nhbm5lZCArPSBucl9zb2Z0X3NjYW5uZWQ7XG4tXHRcdFx0LyogbmVlZCBzb21lIGNoZWNrIGZvciBhdm9pZCBtb3JlIHNocmlua196b25lKCkgKi9cbiBcdFx0fVxuIFxuIFx0XHRpZiAoIWZpcnN0X3BnZGF0KVxuIFx0XHRcdGZpcnN0X3BnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xuIFxuLVx0XHQvKiBTZWUgY29tbWVudCBhYm91dCBzYW1lIGNoZWNrIGZvciBnbG9iYWwgcmVjbGFpbSBhYm92ZSAqL1xuK1x0XHQvKlxuK1x0XHQgKiBTaHJpbmsgZWFjaCBub2RlIGluIHRoZSB6b25lbGlzdCBvbmNlLiBJZiB0aGUgem9uZWxpc3QgaXNcbitcdFx0ICogb3JkZXJlZCBieSB6b25lIChub3QgdGhlIGRlZmF1bHQpIHRoZW4gYSBub2RlIG1heSBiZSBzaHJ1bmtcbitcdFx0ICogbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZSB0aGUgdXNlciBwcmVmZXJzIGxvd2VyIHpvbmVzXG4rXHRcdCAqIGJlaW5nIHByZXNlcnZlZC5cbitcdFx0ICovXG4gXHRcdGlmICh6b25lLVx1MDAzZXpvbmVfcGdkYXQgPT0gbGFzdF9wZ2RhdClcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbkBAIC02ODI1LDQ3ICs2NzkzLDYgQEAgdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4gXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFxuLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi1cdFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpXG4te1xuLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG4tXHRcdC5ucl90b19yZWNsYWltID0gU1dBUF9DTFVTVEVSX01BWCxcbi1cdFx0LnRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2csXG4tXHRcdC5tYXlfd3JpdGVwYWdlID0gMSxcbi1cdFx0Lm1heV91bm1hcCA9IDEsXG4tXHRcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXG4tXHRcdC5tYXlfc3dhcCA9ICFub3N3YXAsXG4tXHR9O1xuLVxuLVx0V0FSTl9PTl9PTkNFKCFjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUpO1xuLVxuLVx0c2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcbi1cdFx0XHQoR0ZQX0hJR0hVU0VSX01PVkFCTEUgXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKTtcbi1cbi1cdHRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbihzYy5nZnBfbWFzayxcbi1cdFx0XHRcdFx0XHQgICAgICBzYy5vcmRlcixcbi1cdFx0XHRcdFx0XHQgICAgICBtZW1jZyk7XG4tXG4tXHQvKlxuLVx0ICogTk9URTogQWx0aG91Z2ggd2UgY2FuIGdldCB0aGUgcHJpb3JpdHkgZmllbGQsIHVzaW5nIGl0XG4tXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbi1cdCAqIGlmIHdlIGRvbid0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxuLVx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCdzIGFzIHdlbGwuIFdlIGhhY2tcbi1cdCAqIHRoZSBwcmlvcml0eSBhbmQgbWFrZSBpdCB6ZXJvLlxuLVx0ICovXG4tXHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXHUwMDI2c2MpO1xuLVxuLVx0dHJhY2VfbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZChzYy5ucl9yZWNsYWltZWQsIG1lbWNnKTtcbi1cbi1cdCpucl9zY2FubmVkID0gc2MubnJfc2Nhbm5lZDtcbi1cbi1cdHJldHVybiBzYy5ucl9yZWNsYWltZWQ7XG4tfVxuLVxuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRcdFx0XHRcdCAgIGdmcF90IGdmcF9tYXNrLFxuQEAgLTcxNzEsOCArNzA5OCw2IEBAIGNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gc3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiB7XG4gXHRpbnQgaTtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3NvZnRfc2Nhbm5lZDtcbiBcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBucl9ib29zdF9yZWNsYWltO1xuIFx0dW5zaWduZWQgbG9uZyB6b25lX2Jvb3N0c1tNQVhfTlJfWk9ORVNdID0geyAwLCB9O1xuQEAgLTcyNzgsMTIgKzcyMDMsNyBAQCBzdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuIFx0XHQgKi9cbiBcdFx0a3N3YXBkX2FnZV9ub2RlKHBnZGF0LCBcdTAwMjZzYyk7XG4gXG4tXHRcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xuIFx0XHRzYy5ucl9zY2FubmVkID0gMDtcbi1cdFx0bnJfc29mdF9zY2FubmVkID0gMDtcbi1cdFx0bnJfc29mdF9yZWNsYWltZWQgPSBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnZGF0LCBzYy5vcmRlcixcbi1cdFx0XHRcdFx0XHRcdCAgICAgIHNjLmdmcF9tYXNrLCBcdTAwMjZucl9zb2Z0X3NjYW5uZWQpO1xuLVx0XHRzYy5ucl9yZWNsYWltZWQgKz0gbnJfc29mdF9yZWNsYWltZWQ7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIHJhaXNlIHRoZSBzY2FubmluZyBwcmlvcml0eSBpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MDUuOTIwMTYxNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTY5MjI5MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtY2cgdjEgU29mdCBMaW1pdCBSZW1vdmFsKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGVkIGF0IHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG1lbWNnIChtZW1vcnkgY2dyb3VwKSBzdWJzeXN0ZW0uIEl0J3MgdG91Y2hpbmcgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oYCwgYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtY29udHJvbC12MS5jYCwgYG1tL21lbWNvbnRyb2wtdjEuaGAsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL3Ztc2Nhbi5jYC4gIEZyb20gYSBxdWljayBzY2FuLCBpdCBsb29rcyBsaWtlIHdlJ3JlIGRlbGV0aW5nLCBvciBhdCBsZWFzdCBzaWduaWZpY2FudGx5IHJld29ya2luZywgdGhlIG1lbWNnIHYxIHNvZnQgbGltaXQgcmVjbGFpbSBsb2dpYyBhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMuICBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGlzIGEgY29tcGxldGUgcmVtb3ZhbCBvciBhIHJlZmFjdG9yaW5nLlxuXG5MZXQgbWUgZXhhbWluZSB0aGUgZGlmZiBpbiBkZXRhaWwuXG5cbiogICBJbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBpdCdzIHJlbW92aW5nIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhlIHNvZnQgbGltaXQgdHJlZSwgbGlrZSBgdHJlZV9ub2RlYCwgYHVzYWdlX2luX2V4Y2Vzc2AsIGBvbl90cmVlYCBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAgd2hlbiBgQ09ORklHX01FTUNHX1YxYCBpcyBlbmFibGVkLiBBbHNvLCB0aGUgYHNvZnRfbGltaXRgIGl0c2VsZiBpcyBnb25lIGZyb20gdGhlIGBzdHJ1Y3QgbWVtX2Nncm91cGAgZGVmaW5pdGlvbi4gQW5kIHRoZSBkZWNsYXJhdGlvbiBvZiBgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbWAgaXMgYWxzbyBnb25lLlxuKiAgIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBzZWVzIHNvbWUgY29tbWVudCB1cGRhdGVzIGFuZCByZW1vdmFsIG9mIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAuXG4qICAgVGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgZ2V0cyBjbGVhbmVkIHVwIHRvbywgd2l0aCBgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2JlZ2luYCBhbmQgYG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9lbmRgIHRyYWNlIGV2ZW50cyBiZWluZyByZW1vdmVkIGZyb20gYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oYC5cbiogICBgbW0vaW50ZXJuYWwuaGAgcmVtb3ZlcyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAuXG4qICAgYG1tL21lbWNvbnRyb2wtdjEuY2AgaXMgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMgbGllLiAgSXQncyByZW1vdmluZyBhbiBleHRlbnNpdmUgc2V0IG9mIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBzb2Z0X2xpbWl0X3RyZWVgLCByZWNsYWltLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWRgLCBgX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZGAsIGFuZCB0aGUgbWFpbiByZWNsYWltIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbWAsIGFzIHdlbGwgYXMgc2V2ZXJhbCB0cmVlLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZWAgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBgbWVtY2cxX2luaXRgLiBJdCBsb29rcyBsaWtlIHNvbWUgb2YgdGhlIGV2ZW50IGhhbmRsaW5nIGluIGBtZW1jZzFfZXZlbnRzX3BlcmNwdWAgaGFzIGFsc28gYmVlbiBzaW1wbGlmaWVkLCBhcyBoYXMgYG1lbWNnMV9ldmVudF9yYXRlbGltaXRgLiBUaGUgcGFyYW1ldGVyIGxpc3RzIGZvciBgbWVtY2cxX2NoZWNrX2V2ZW50c2AsIGBtZW1jZzFfY29tbWl0X2NoYXJnZWAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYW5kIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgIGFyZSBhbGwgY2hhbmdlZC5cbiogICBgbW0vbWVtY29udHJvbC12MS5oYCBoYXMgZGVjbGFyYXRpb25zIGFuZCBpbmxpbmUgZnVuY3Rpb24gdXBkYXRlcy5cbiogICBJbiBgbW0vbWVtY29udHJvbC5jYCwgYG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0YCBpcyByZW1vdmVkIGZyb20gYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCBhbmQgYG1lbV9jZ3JvdXBfY3NzX3Jlc2V0YC4gTGlrZXdpc2UsIGBtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXNgIGlzIHJlbW92ZWQgZnJvbSBgbWVtX2Nncm91cF9jc3NfZnJlZWAuIFNldmVyYWwgcGFyYW1ldGVycyBhcmUgcmVtb3ZlZCBpbiBhIGZldyBwbGFjZXMgdG9vLiBUaGUgYHVuY2hhcmdlX2JhdGNoYCBmdW5jdGlvbiBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgdGhlIGB1Zy1cdTAwM2VuaWQgPSBmb2xpb19uaWQoZm9saW8pO2AgaXMgcmVtb3ZlZCBmcm9tIGB1bmNoYXJnZV9mb2xpb2AuXG4qICAgRmluYWxseSwgYG1tL3Ztc2Nhbi5jYCByZW1vdmVzIGBNRU1DR19MUlVfSEVBRGAgaGFuZGxpbmcgZnJvbSBgbHJ1X2dlbl9yb3RhdGVfbWVtY2dgLCBhbmQgYWxzbyByZW1vdmVzIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIHJlbW92ZXMgc29mdCBsaW1pdCByZWNsYWltIGZyb20gYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCwgYXMgd2VsbCBhcyB0aGUgYWxyZWFkeSBkZWxldGVkIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC5cblxuVGhpcyBpcyBleHRlbnNpdmUuIEl0IHNlZW1zIGxpa2UgYSBjbGVhbiBzd2VlcCBvZiB0aGUgdjEgc29mdCBsaW1pdCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpc24ndCBqdXN0IGEgcGFydGlhbCByZW1vdmFsIG9yIGEgcmVmYWN0b3Jpbmcgd2l0aCB0aGUgY29kZSBtb3ZlZCBlbHNld2hlcmUuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIHNpbmdsZSBjb21taXQgb3IgcGFydCBvZiBhIGxhcmdlciBwYXRjaCBzZXJpZXMuIEkgbmVlZCB0byBzZWUgaWYgYW55IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBtYWludGFpbmVkIGluIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBJcyBgY2dyb3VwLm1lbW9yeS5zb2Z0X2xpbWl0X2luX2J5dGVzYCBzdGlsbCBpbiBgbW0vbWVtY29udHJvbC12MS5jYD8gR290dGEgY2hlY2shXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTEyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjEzLjQ4OTM5NDM0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwMzE4NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdF9saW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC12MS5jPTE1Mjg9c3RhdGljIGludCBtZW1fY2dyb3VwX2hpZXJhcmNoeV93cml0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE1NDAtXFxubW0vbWVtY29udHJvbC12MS5jOjE1NDE6c3RhdGljIHU2NCBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBjZnR5cGUgKmNmdClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQ2LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNTQ3OnN0YXRpYyBzc2l6ZV90IG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxubW0vbWVtY29udHJvbC12MS5jLTE1NDgtXFx0XFx0XFx0XFx0XFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE1NTYtXFxubW0vbWVtY29udHJvbC12MS5jOjE1NTc6XFx0cHJfd2Fybl9vbmNlKFxcXCJzb2Z0X2xpbWl0X2luX2J5dGVzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gXFxcIlxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTU4LVxcdFxcdCAgICAgXFxcIldyaXRpbmcgYW55IHZhbHVlIHRvIHRoaXMgZmlsZSBoYXMgbm8gZWZmZWN0LiBcXFwiXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjAyOD1zdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjA0Ni1cXHR7XFxubW0vbWVtY29udHJvbC12MS5jOjIwNDc6XFx0XFx0Lm5hbWUgPSBcXFwic29mdF9saW1pdF9pbl9ieXRlc1xcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjIwNDg6XFx0XFx0LndyaXRlID0gbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMDQ5OlxcdFxcdC5yZWFkX3U2NCA9IG1lbV9jZ3JvdXBfc29mdF9saW1pdF9yZWFkLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDUwLVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjEzLjU5MzQzNzI2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NTAzNzUwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IHF1ZXJ5LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCAodjEpKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBpbnZlc3RpZ2F0ZSBob3cgc29mdCBsaW1pdHMgYXJlIGhhbmRsZWQgd2l0aGluIG1lbW9yeSBjZ3JvdXBzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcmVhZGluZyBhbmQgd3JpdGluZyB0aG9zZSB2YWx1ZXMuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlLCBhbmQgc2luY2Ugd2UncmUgdGFsa2luZyBhYm91dCBtZW1vcnkgY29udHJvbCwgSSdtIHByZXR0eSBzdXJlIHRoYXQgdGhlIHJlbGV2YW50IGZpbGVzIHdpbGwgYmUgaW4gYG1tL2AuIEJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIGNncm91cHMsIGFuZCBsb29raW5nIGJhY2ssIEknbSBmYWlybHkgY2VydGFpbiB0aGUgZmlsZSBJIHdhbnQgdG8gaW5zcGVjdCBpcyBgbW0vbWVtY29udHJvbC12MS5jYC4gSSBoYXZlIGEgZmVlbGluZyBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgIGFuZCBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlYCB3aWxsIGJlIGtleSBmdW5jdGlvbnMgKG9yIHBvc3NpYmx5IG1hY3Jvcywgd2hpY2ggaXMgd2h5IEkgbmVlZCB0byAqY2hlY2sqKSwgc28gdGhhdCdzIHdoZXJlIEknbGwgZm9jdXMgbXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLiBUaGUgJ3YxJyBpbiB0aGUgZmlsZW5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBvbGRlciwgbm93LWRlcHJlY2F0ZWQsIG1lbW9yeSBjZ3JvdXAgaGllcmFyY2h5OyB0aGlzIGlzIGltcG9ydGFudCBjb250ZXh0IGJlY2F1c2UgaXQgaW5mbHVlbmNlcyBob3cgdGhlIGxpbWl0cyBhcmUgbWFuYWdlZCBjb21wYXJlZCB0byB0aGUgbmV3ZXIgY2dyb3VwIHYyLiBLbm93aW5nIHRoaXMsIEkgZXhwZWN0IHRvIHNlZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGlzIGxlZ2FjeSBhcmNoaXRlY3R1cmUuIExldCdzIHNlZSBob3cgdGhlc2UgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjE3LjM0MzgxNTc5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLXYxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU0MDpcXHRcXG4xNTQxOlxcdHN0YXRpYyB1NjQgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4xNTQyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBjZnR5cGUgKmNmdClcXG4xNTQzOlxcdHtcXG4xNTQ0OlxcdFxcdHJldHVybiAodTY0KVBBR0VfQ09VTlRFUl9NQVggKiBQQUdFX1NJWkU7XFxuMTU0NTpcXHR9XFxuMTU0NjpcXHRcXG4xNTQ3OlxcdHN0YXRpYyBzc2l6ZV90IG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuMTU0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuMTU0OTpcXHR7XFxuMTU1MDpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbjE1NTE6XFx0XFx0aW50IHJldDtcXG4xNTUyOlxcdFxcbjE1NTM6XFx0XFx0cmV0ID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKHN0cnN0cmlwKGJ1ZiksIFxcXCItMVxcXCIsIFxcdTAwMjZucl9wYWdlcyk7XFxuMTU1NDpcXHRcXHRpZiAocmV0KVxcbjE1NTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNTU2OlxcdFxcbjE1NTc6XFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJzb2Z0X2xpbWl0X2luX2J5dGVzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gXFxcIlxcbjE1NTg6XFx0XFx0XFx0ICAgICBcXFwiV3JpdGluZyBhbnkgdmFsdWUgdG8gdGhpcyBmaWxlIGhhcyBubyBlZmZlY3QuIFxcXCJcXG4xNTU5OlxcdFxcdFxcdCAgICAgXFxcIlBsZWFzZSByZXBvcnQgeW91ciB1c2VjYXNlIHRvIGxpbnV4LW1tQGt2YWNrLm9yZyBpZiB5b3UgXFxcIlxcbjE1NjA6XFx0XFx0XFx0ICAgICBcXFwiZGVwZW5kIG9uIHRoaXMgZnVuY3Rpb25hbGl0eS5cXFxcblxcXCIpO1xcbjE1NjE6XFx0XFxuMTU2MjpcXHRcXHRyZXR1cm4gbmJ5dGVzO1xcbjE1NjM6XFx0fVxcbjE1NjQ6XFx0XFxuMTU2NTpcXHRzdGF0aWMgdTY0IG1lbV9jZ3JvdXBfcmVhZF91NjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4xNTY2OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnQpXFxuMTU2NzpcXHR7XFxuMTU2ODpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XFxuMTU2OTpcXHRcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0MjoxNy4zNDQwMTk2MTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDkyNTIwMzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBjYW4gc2VlIHRoZSBjaGFuZ2VzIHRvdWNoIHNvbWUgdmVyeSBzZW5zaXRpdmUgYXJlYXM6IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgbWVtb3J5IGNncm91cHMgKG1lbWNnIHYxKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIGFmZmVjdHMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBhbmQgdGh1cyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBhbmFseXNpcyBsb29rcyBsaWtlIHRoaXM6XG5cbkZpcnN0LCBsZXQncyBkaXNzZWN0IHdoZXJlIHRoZSBwYXRjaCBpcyBtYWtpbmcgY2hhbmdlczpcbjEuICAqKk1lbW9yeSBNYW5hZ2VtZW50IENvcmU6KiogSXQncyByaWdodCBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBXZSdyZSB0YWxraW5nIGFib3V0IG1lbWNnIHYxIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggcGFnZSByZWNsYWltIGFuZCB0aGUgVk0gc2Nhbm5lciAodm1zY2FuKSBhbmQgdGhlIExSVSAobHJ1XFxfZ2VuKS4gVGhhdCdzIGEgcmVkIGZsYWcgaW1tZWRpYXRlbHkuXG5cbjIuICAqKkV4ZWN1dGFibGUgTG9naWMgQ2hhbmdlczoqKiBMb29raW5nIGF0IHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucywgSSBzZWUgdGhleSd2ZSBhZGp1c3RlZCB0aGUgZXZlbnQgcmF0ZS1saW1pdGluZyBpbiBgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdGAuIEl0IGFsc28gaXMgdHdlYWtpbmcgaG93IHRocmVzaG9sZHMgYXJlIGNoZWNrZWQuIFRoZSB1bmNoYXJnZSBiYXRjaCBsb2dpYyBoYXMgaGFkIHNvbWUgdXBkYXRlcywgcmVtb3ZpbmcgcGVyLWJhdGNoIG5pZCB0cmFja2luZyBhbmQgcGFzc2luZy4gVGhlIExSVSBnZW4gcm90YXRpb24gbG9naWMgaW4gYGxydV9nZW5fcm90YXRlX21lbWNnYCBoYXMgY2hhbmdlZC4gYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCBoYXZlIHJlbW92ZWQgc29mdCBsaW1pdCByZWNsYWltIGNhbGxzLiAgRmluYWxseSwgd2Ugc2VlIGFsdGVyYXRpb25zIGluIHNvZnQgbGltaXQgZmlsZSBoYW5kbGluZyB2aWEgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAgYW5kIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZGAuIFRoZXNlIGFyZSBhbGwgaGlnaGx5IGNyaXRpY2FsIGFyZWFzLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpdCBzYXRpc2ZpZXMgdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjcml0ZXJpYSwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgcmVhbGx5IGNsaWNrcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBjcml0ZXJpYSB0aGF0IHN0YXRlIFwicmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGVcIiB3aXRoaW4gc3BlY2lmaWMgY29yZSBzdWJzeXN0ZW1zLCBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50LiBTaW5jZSB0aGlzIHBhdGNoIHRvdWNoZXMgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJJ20gc2VlaW5nIGxvZ2ljIG1vZGlmaWNhdGlvbnMsIGl0J3MgcHJldHR5IGNsZWFyOiBXb3J0aEZ1enppbmcgaXMgYHRydWVgLlxuXG5BbmQsIGEgZmluYWwgaW1wb3J0YW50IHBvaW50OiBJJ20gbm90IGdvaW5nIHRvIGJsaW5kbHkgdHJ1c3QgYW55IFwiTm8gRnVuY3Rpb25hbCBDaGFuZ2VcIiBvciBcIlJlZmFjdG9yaW5nXCIgY2xhaW1zLiBUaG9zZSBhcmUgb2Z0ZW4gbWlzbGVhZGluZy4gUmVhcnJhbmdpbmcgbG9naWMsIGFkZGluZyBoZWxwZXIgZnVuY3Rpb25zLCBvciBjaGFuZ2luZyBob3cgc3RhdGUgaXMgaGFuZGxlZCBpbiB0aGVzZSBjb3JlIHN1YnN5c3RlbXMgaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3Igc3VidGxlIGJ1Z3Mgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBzdWJ0bGUgc2hpZnRzIGluIHNlbWFudGljcyB0aGF0IG5lZWQgY2hlY2tpbmcuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9uLiBTbywgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGlzIGxpa2VseSBoaW5nZXMgb24gYE1FTUNHYCwgYE1FTUNHX1YxYCwgYW5kIGBMUlVfR0VOYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZXMsIGVzcGVjaWFsbHkgaW4gYG1tL2AsIG9yIG1heWJlIGp1c3QgZ3JlcCB0byBkZXRlcm1pbmUgZXhhY3RseSB3aGF0IGNvbmZpZ3MgYXJlIG5lY2Vzc2FyeSB0byBlbmFibGUgdGhlIGNvZGUgYmVpbmcgbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODkyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MjguMjY5MjI3NjQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDEyOTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRU1DR19WMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlLTEwNS1vYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMTIzPXZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMTMwLSAqIGNncm91cCB2MSB1c2Vyc3BhY2Ugdm1wcmVzc3VyZSBpbnRlcmZhY2UgKG1lbW9yeS5wcmVzc3VyZV9sZXZlbCAvXFxubW0vbWVtY29udHJvbC12MS5jOjExMzE6ICogY2dyb3VwLmV2ZW50X2NvbnRyb2wpLiBLZXB0IGhlcmUgc28gdjItb25seSBrZXJuZWxzIChDT05GSUdfTUVNQ0dfVjE9bilcXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMi0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTI1PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtMjgtLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaDoyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC12MS5oLTMwLVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTg2PWV4dGVybiBzdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW107XFxubW0vbWVtY29udHJvbC12MS5oLTg3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDo4ODojZWxzZVxcdC8qIENPTkZJR19NRU1DR19WMSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaC04OS1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0xMTg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykge31cXG5tbS9tZW1jb250cm9sLXYxLmgtMTE5LVxcbm1tL21lbWNvbnRyb2wtdjEuaDoxMjA6I2VuZGlmXFx0LyogQ09ORklHX01FTUNHX1YxICovXFxubW0vbWVtY29udHJvbC12MS5oLTEyMS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzNC1cXG5tbS9tZW1jb250cm9sLmM6MjM1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMjM2LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzItXFxubW0vbWVtY29udHJvbC5jOjU3MzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcXG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNjAwLVxcdFBHUEdJTixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04MzI9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTg0Ny1cXG5tbS9tZW1jb250cm9sLmM6ODQ4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtODQ5LS8qXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTE2PXZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTkyOC1cXG5tbS9tZW1jb250cm9sLmM6OTI5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtOTMwLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMTA0PWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExMTEtXFxubW0vbWVtY29udHJvbC5jOjExMTI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xMTEzLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE3MTI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3MTctXFxubW0vbWVtY29udHJvbC5jOjE3MTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzE5LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzM4PXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTc4NC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSsrKSB7XFxubW0vbWVtY29udHJvbC5jOjE3ODU6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzg2LVxcdFxcdGlmIChtZW1jZ192bV9ldmVudF9zdGF0W2ldID09IFBHUEdJTiB8fFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE4MzY9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODU3LVxcdFxcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX1NXQVBfTUFYXSkpO1xcbm1tL21lbWNvbnRyb2wuYzoxODU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTg1OS1cXHRlbHNlIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MjQ3PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyNjctXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBcXHUwMDI2cGFyZW50LVxcdTAwM2Vzd2FwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQyNjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00MjY5LVxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjgxLVxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgTlVMTCwgZmFsc2UpO1xcbm1tL21lbWNvbnRyb2wuYzo0MjgyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNDI4My1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NDQ4PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDQ1OC0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NDQ1OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQ0NjAtXFx0cGFnZV9jb3VudGVyX3NldF9tYXgoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBQQUdFX0NPVU5URVJfTUFYKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTg2PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTk3LVxcdC5kZmxfY2Z0eXBlcyA9IG1lbW9yeV9maWxlcyxcXG5tbS9tZW1jb250cm9sLmM6NTE5ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTUxOTktXFx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjE5Nj1zdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYyMDEtXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcXG5tbS9tZW1jb250cm9sLmM6NjIwMjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTYyMDMtXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2xlZ2FjeV9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIG1lbXN3X2ZpbGVzKSk7XFxuLS1cXG5tbS9zd2FwLmg9ODU9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9zd2FwLmgtODYte1xcbm1tL3N3YXAuaDo4NzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vc3dhcC5oLTg4LVxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0MjoyOC43OTMzNjQyNzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzkwMzIxMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIE1FTUNHIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCBhcmUgZGVmaW5lZCB3aXRoaW4gdGhpcyBrZXJuZWwuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBiZSBsYWlkIG91dCBpbiBvbmUgb2YgdGhlIEtjb25maWcgZmlsZXMsIGxpa2VseSBpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaW5pdGlhbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSBmaWxlcyBkaXJlY3RseS4gSG9wZWZ1bGx5LCB0aGUgZGVmaW5pdGlvbiBpcyBjbGVhciBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTYzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MzUuNTgzNjg5OTEzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ5Njk3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjM1LjY4ODY2NDgzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTc5MDI2NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gKGluaXQvS2NvbmZpZykqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHNvbWUgc3BlY2lmaWMgc2V0dGluZ3MsIHNvIGxldCdzIGp1bXAgcmlnaHQgaW50byBgaW5pdC9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBlbnRyaWVzIGFyb3VuZCBsaW5lcyAxMDg1IHRocm91Z2ggMTEyMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQvZGlzYWJsZWQgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTY3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MzcuNjY3Njk1MTU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDkwOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwOTE6XFx0XFx0aGVscFxcbjEwOTI6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG4xMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTEwNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMTA2OlxcdFxcdGRlZmF1bHQgeVxcbjExMDc6XFx0XFxuMTEwODpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTA5OlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTExMDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTExMTpcXHRcXHRkZWZhdWx0IG5cXG4xMTEyOlxcdFxcdGhlbHBcXG4xMTEzOlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTExNDpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTExNTpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTExNjpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMTc6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuMTEyMDpcXHRcXHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcXG4xMTIxOlxcdFxcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMTI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0MjozNy42Njc5MjkzMDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzMDMzMzAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYCBqdW1wIG91dCBhdCBtZSBhcyBmdW5kYW1lbnRhbC4gVGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3Mgb2YgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCBzbyBuYXR1cmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC4gVGhlbiwgSSBzZWUgdGhpcyBjaGFuZ2UgaW4gYG1tL3Ztc2Nhbi5jYCByZWxhdGVkIHRvIGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2AsIGFuZCBJIGtub3cgSSBoYXZlIHRvIGNoZWNrIHRoZSBgTFJVX0dFTmAgY29uZmlndXJhdGlvbiBvcHRpb24uIEdpdmVuIGl0cyBuYW1lIGFuZCB3aGVyZSBpdCdzIHJlZmVyZW5jZWQsIGl0J3Mgb2J2aW91c2x5IGdvaW5nIHRvIGNvbnRyb2wgdGhlIGdlbmVyYXRpb25hbCBMUlUgaW1wbGVtZW50YXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiBtZW1jZ3MuIEknbGwgbmVlZCB0byBjb25maXJtIGl0cyBkZWZpbml0aW9uIGFuZCBzZXR0aW5ncywgc28gSSdsbCBoZWFkIG92ZXIgdG8gYG1tL0tjb25maWdgIHRvIGRvIHRoYXQuIEkga25vdyB3aGVyZSB0byBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMyOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MzkuNzk4MjY0OTM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTA2OTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzg4PWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTM5OC0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTM5OTpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwMC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDA3LVxcbm1tL0tjb25maWc6MTQwODpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDA5LVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDEzLVxcbm1tL0tjb25maWc6MTQxNDpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQxNS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjItXFxubW0vS2NvbmZpZzoxNDIzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyNC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjM5Ljg5MzM0Mzc2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTkyMjQyMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNb2RpZmllZCBNZW1vcnkgQ29udHJvbCBMb2dpYyBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlICphY3R1YWxseSogcmVsZXZhbnQgZW50cnkgcG9pbnRzIHRvIHRoZSBjaGFuZ2VkIGxvZ2ljIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBGaXJzdCwgSSdtIGNoZWNraW5nIHRoZSBgRm9jdXNTeW1ib2xzYC4uLiByaWdodC5cblxuSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGFsdGVyZWQgb3IgYXJlIGRpcmVjdCBlbnRyeXBvaW50cyB0byB0aGUgbW9kaWZpZWQgbG9naWMuIExldCdzIHN0YXJ0IHdpdGggYSBkaWZmIHJldmlldywgZm9jdXNpbmcgb24gd2hhdCB3YXMgY2hhbmdlZC4gSSBzZWUgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBkaWZmOlxuXG5JbiBgbW0vbWVtY29udHJvbC12MS5jYCwgSSd2ZSBnb3QgYSBsaXN0LlxuXG5JbiBgbW0vbWVtY29udHJvbC5jYCwgdGhlcmUncyBhIGxpc3QuXG5cbkFuZCBpbiBgbW0vdm1zY2FuLmNgLCBhIGZldyBtb3JlLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGhlcmUsIHNlY3Rpb24gZm91ciB0byBiZSBleGFjdC4gVGhleSdyZSB0ZWxsaW5nIG1lIHRvIGF2b2lkIGxpc3RpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLCBhbmQgaW5zdGVhZCwgdG8gdGFyZ2V0IHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5cG9pbnRzLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgbWVtb3J5IGFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGNvcmUgc3luY2hyb25pemF0aW9uPyBOb3Qgd2hhdCBJJ20gbG9va2luZyBmb3IuIEkgbmVlZCBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBhbHRlcmVkIGxvZ2ljIG9yIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBmZWF0dXJlLiBBbHNvLCBpZiB0aGVyZSBhcmUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMsIEkgaGF2ZSB0byBmaW5kIG5vbi1zdGF0aWMgY2FsbGVyIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICp1c2UqIHRoZW0uIEdvdCBpdC5cblxuU28sIGxldCdzIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhvc2Ugbm9uLXN0YXRpYyBzeW1ib2xzIGluIGBtbS9tZW1jb250cm9sLXYxLmNgIGFnYWluLiBJIG5lZWQgdG8gc2VlIHdoaWNoIG9uZXMgYXJlIGdvb2QgdGFyZ2V0cy4gYG1lbWNnMV9jb21taXRfY2hhcmdlYCBzZWVtcyByZWxldmFudCwgZXZlbiB0aG91Z2ggaXQncyBjYWxsZWQgb24gZXZlcnkgcGFnZSBjaGFyZ2UgdW5kZXIgdjEsIGl0J3Mgc3BlY2lmaWMgdG8gdGhlIHYxIGNoYW5nZXMuIGBfX21lbWNnMV9zd2Fwb3V0YCBpcyBhbm90aGVyLCBhbG9uZyB3aXRoIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgLiBOb3csIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGVgIGFuZCBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgIC0gdGhleSBhcmUgZGVmaW5lZCBpbiBgY2Z0eXBlYCwgc28gdGhleSB3aWxsIGFjdHVhbGx5IGJlIHN5bWJvbHMgaW4gdGhlIGJpbmFyeSwgdGhhdCBpcyBwZXJmZWN0ISBBbmQgZXZlbiB0aG91Z2ggYGxydV9nZW5fcm90YXRlX21lbWNnYCBpcyBzdGF0aWMgaW4gYHZtc2Nhbi5jYCwgaXQncyBzdGlsbCBhIHN5bWJvbC4gVGhhdCdzIGdvb2QuXG5cbldhaXQgYSBzZWNvbmQsIHN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcywgdW5sZXNzIHRoZXkncmUgaW5saW5lZCwgKmFyZSogc3ltYm9scyBpbiB2bWxpbnV4LiBHb29kIGNhdGNoLiBTbyBmdW5jdGlvbnMgbGlrZSBgbHJ1X2dlbl9yb3RhdGVfbWVtY2cuaXNyYS4wYCBvciBqdXN0IGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2AgYXJlIHN5bWJvbHMuIEhvd2V2ZXIsIHRob3NlIG5vbi1zdGF0aWMgZW50cnlwb2ludHMgb3IgZGlyZWN0IGBjZnR5cGVgIGhhbmRsZXJzIGxpa2UgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAsIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZGAsIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgLCBgbWVtY2cxX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgIGFyZSBleGNlbGxlbnQgdGFyZ2V0cy5cblxuTm93LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB3aGF0IGNhbGxzIGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2AgaW4gYG1tL3Ztc2Nhbi5jYC4gR290dGEgZmluZCB0aG9zZSBjYWxsZXJzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjgzNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0Mjo0Ni40ODU1OTI5MTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NzE5MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fcm90YXRlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQzNzQ9ZW51bSB7XFxuLS1cXG5tbS92bXNjYW4uYy00MzgwLVxcbm1tL3Ztc2Nhbi5jOjQzODE6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxubW0vdm1zY2FuLmMtNDM4Mi17XFxuLS1cXG5tbS92bXNjYW4uYz00NDUyPXZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NTgtXFxubW0vdm1zY2FuLmM6NDQ1OTpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9PTEQpO1xcbm1tL3Ztc2Nhbi5jLTQ0NjAtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9NTEyNj1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNDYtXFx0XFx0aWYgKG9wKSB7XFxubW0vdm1zY2FuLmM6NTE0NzpcXHRcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcXG5tbS92bXNjYW4uYy01MTQ4LVxcdFxcdFxcdG9wID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNzgtXFx0aWYgKG9wKVxcbm1tL3Ztc2Nhbi5jOjUxNzk6XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XFxubW0vdm1zY2FuLmMtNTE4MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxODUtXFxubW0vdm1zY2FuLmM6NTE4NjpcXHQvKiByZXN0YXJ0IGlmIHJhY2VkIHdpdGggbHJ1X2dlbl9yb3RhdGVfbWVtY2coKSAqL1xcbm1tL3Ztc2Nhbi5jLTUxODctXFx0aWYgKGdlbiAhPSBnZXRfbnVsbHNfdmFsdWUocG9zKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxOTY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MjA5LVxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYzo1MjEwOlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5tbS92bXNjYW4uYy01MjExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0Mjo0Ni41NTUzMTk5MTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUyMDU1MzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0gaW1wbGVtZW50YXRpb24gYW5kIHRoZSBhc3NvY2lhdGVkIHRyZWUgdHJhY2tpbmcgbG9naWMuIEkgd2FudCB0byB6ZXJvIGluIG9uIGhvdyB0aGUgc3BlY2lmaWMgaGFuZGxlcnMgZm9yIGBjZ3JvdXAubWVtb3J5LnNvZnRfbGltaXRfaW5fYnl0ZXNgLCBuYW1lbHkgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAgYW5kIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZGAsIGFyZSBhZmZlY3RlZC4gSSdsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBtZW1jZy12MSBldmVudCBjaGVja2Vycy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgLCBgbWVtY2cxX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgIHRvIGFzc2VzcyBpZiBhbnkgY3JpdGljYWwgbG9naWMgb3IgYm91bmRhcnkgY29uZGl0aW9ucyBhcmUgYmVpbmcgYWx0ZXJlZCBpbiB0ZXJtcyBvZiB1bmNoYXJnaW5nIGFuZCBzd2FwcGluZy5cblxuSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZXBlbmRlbnQgb24gYENPTkZJR19NRU1DR2AsIGBDT05GSUdfTUVNQ0dfVjFgLCBhbmQgYENPTkZJR19MUlVfR0VOYC4gSSdsbCBkb3VibGUtY2hlY2sgdGhhdCB0aGVzZSBhcmUgZW5hYmxlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCB0byBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UuXG5cblRvIHN1bW1hcml6ZSwgdGhpcyBjaGFuZ2UgYXBwZWFycyB0byBiZSBjZW50ZXJlZCBvbiByZW1vdmluZyBsZWdhY3kgdjEgc29mdCBsaW1pdCByZWNsYWltIGFuZCB0cmVlIHRyYWNraW5nLCBhbmQsIHdpdGggdGhlIGtleSB0b3VjaHBvaW50cyBiZWluZyBldmVudCBjaGVja2luZy9yYXRlLWxpbWl0aW5nLCB1bmNoYXJnaW5nLCBwYWdlIHJlY2xhaW0gbG9vcHMsIGFuZCBtdWx0aS1nZW4gTFJVIHJvdGF0aW9uLiBUaGVzZSBjb21wb25lbnRzIGFyZSBhbGwgdGlnaHRseSBjb3VwbGVkLCBzbyBhbnkgY2hhbmdlIGluIHRoZXNlIGZ1bmN0aW9ucyBtdXN0IGJlIHZpZXdlZCBob2xpc3RpY2FsbHkuXG5cbkdpdmVuIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgc3Vic3lzdGVtIGNvZGUgcGF0aHMsIEkgYW0gZGVlbWluZyB0aGlzIHBhdGNoIGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLiBJIGhhdmUgdGhlIGZvbGxvd2luZyBzeW1ib2xzIGluIG15IHNpZ2h0OlxuLSBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlYFxuLSBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgXG4tIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgXG4tIGBtZW1jZzFfY29tbWl0X2NoYXJnZWBcbi0gYF9fbWVtY2cxX3N3YXBvdXRgXG4tIGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2BcblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gTGV0J3MgZ2V0IHRoaXMgYW5hbHlzaXMgZG9jdW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwMTUsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjU0LjA3NTg3Nzg1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTY0Mjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZFwiLFxuICAgIFwibWVtY2cxX3VuY2hhcmdlX2JhdGNoXCIsXG4gICAgXCJtZW1jZzFfY29tbWl0X2NoYXJnZVwiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiLFxuICAgIFwibHJ1X2dlbl9yb3RhdGVfbWVtY2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIixcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGVcIixcbiAgICBcIm1lbV9jZ3JvdXBfc29mdF9saW1pdF9yZWFkXCIsXG4gICAgXCJtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hcIixcbiAgICBcIm1lbWNnMV9jb21taXRfY2hhcmdlXCIsXG4gICAgXCJfX21lbWNnMV9zd2Fwb3V0XCIsXG4gICAgXCJscnVfZ2VuX3JvdGF0ZV9tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBkZXByZWNhdGVzIGFuZCByZW1vdmVzIHRoZSBtZW1jZyB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFuZCBpdHMgYXNzb2NpYXRlZCByYnRyZWUgdHJhY2tpbmcuIFRoaXMgbW9kaWZpZXMgYWN0aXZlIE1NIGxvZ2ljIGluIG1lbWNnIHYxIGV2ZW50IHJhdGUtbGltaXRpbmcgYW5kIHVuY2hhcmdpbmcsIE11bHRpLUdlbiBMUlUgcm90YXRpb24sIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gdm1zY2FuLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0Mjo1NC4yMDE1Mjk1MjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODgyNDc5MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6NTQuMjAyMDI2MTkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI4ODE5NzY2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZW1vdmVzIHRoZSBsZWdhY3kgY2dyb3VwIHYxIHNvZnQtbGltaXQgcmVjbGFpbSBtZWNoYW5pc20gYWNyb3NzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1lbWNvbnRyb2wsIG1lbWNvbnRyb2wtdjEsIGFuZCB2bXNjYW4pLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgZGVsZXRlcyB0aGUgc29mdCBsaW1pdCBSQi10cmVlIHRyYWNraW5nIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucywgYW5kIHRyYWNlcG9pbnRzLlxcbjIuIEl0IHJlbW92ZXMgdGhlIHVudXNlZCBgc29mdF9saW1pdGAgYW5kIGB0YXJnZXRzYCBmaWVsZHMgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1YCwgc2ltcGxpZnlpbmcgcGVyLWNwdSBldmVudCByYXRlbGltaXRpbmcgdG8ganVzdCBgdGhyZXNob2xkX3RhcmdldGAuXFxuMy4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBuaWRgIGZpZWxkIGZyb20gYHN0cnVjdCB1bmNoYXJnZV9nYXRoZXJgIGFuZCB1bnVzZWQgc2Nhbm5pbmcgc3RhdGlzdGljcyB2YXJpYWJsZXMgZnJvbSByZWNsYWltIHBhdGhzIChgc2hyaW5rX3pvbmVzYCBhbmQgYGJhbGFuY2VfcGdkYXRgKS5cXG5cXG5UaGUgY2hhbmdlcyBjb25zaXN0IHN0cmljdGx5IG9mIGRlYWQvZGVwcmVjYXRlZCBjb2RlIHJlbW92YWwgYW5kIHN0cnVjdHVyYWwgc2ltcGxpZmljYXRpb25zLiBObyBuZXcgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBtYW5pcHVsYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZhMGRhY2RkOTU2ZGVmNzRlZTAwNjA1MWVkODY5MmQ5NWQ1OWJiYzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjQyOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZGE2MjVkMmVkYjNiYS4uYzc5OTkyNjQzNTU2MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk1LDIwICs5NSw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdHN0cnVjdCBscnV2ZWNfc3RhdHNcdFx0XHQqbHJ1dmVjX3N0YXRzO1xuIFx0c3RydWN0IHNocmlua2VyX2luZm8gX19yY3VcdCpzaHJpbmtlcl9pbmZvO1xuIFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbi1cdC8qXG4tXHQgKiBNZW1jZy12MSBvbmx5IHN0dWZmIGluIG1pZGRsZSBhcyBidWZmZXIgYmV0d2VlbiByZWFkIG1vc3RseSBmaWVsZHNcbi1cdCAqIGFuZCB1cGRhdGUgb2Z0ZW4gZmllbGRzIHRvIGF2b2lkIGZhbHNlIHNoYXJpbmcuIElmIHYxIHN0dWZmIGlzXG4tXHQgKiBub3QgcHJlc2VudCwgYW4gZXhwbGljaXQgcGFkZGluZyBpcyBuZWVkZWQuXG4tXHQgKi9cbi1cbi1cdHN0cnVjdCByYl9ub2RlXHRcdHRyZWVfbm9kZTtcdC8qIFJCIHRyZWUgbm9kZSAqL1xuLVx0dW5zaWduZWQgbG9uZ1x0XHR1c2FnZV9pbl9leGNlc3M7LyogU2V0IHRvIHRoZSB2YWx1ZSBieSB3aGljaCAqL1xuLVx0XHRcdFx0XHRcdC8qIHRoZSBzb2Z0IGxpbWl0IGlzIGV4Y2VlZGVkKi9cbi1cdGJvb2xcdFx0XHRvbl90cmVlO1xuLSNlbHNlXG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMV8pO1xuLSNlbmRpZlxuIFxuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbkBAIC0yOTMsOCArMjgwLDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuIFxuIFx0c3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1IF9fcGVyY3B1ICpldmVudHNfcGVyY3B1O1xuIFxuLVx0dW5zaWduZWQgbG9uZyBzb2Z0X2xpbWl0O1xuLVxuIFx0LyogcHJvdGVjdGVkIGJ5IG1lbWNnX29vbV9sb2NrICovXG4gXHRib29sIG9vbV9sb2NrO1xuIFx0aW50IHVuZGVyX29vbTtcbkBAIC0xOTI0LDEwICsxOTA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIC8qIENncm91cCB2MS1yZWxhdGVkIGRlY2xhcmF0aW9ucyAqL1xuIFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxuLVx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCk7XG4tXG4gYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5AQCAtMTk0OCwxNCArMTkyOSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxuIH1cbiBcbiAjZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbi1zdGF0aWMgaW5saW5lXG4tdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi1cdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA2N2M4NGE4YTcyNTgzLi44NGUyMzdmMmMxN2RiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTYzOCwzNSArNjM4LDMyIEBAIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsge1xuICAqIEZvciBlYWNoIG5vZGUsIG1lbWNncyBhcmUgZGl2aWRlZCBpbnRvIHR3byBnZW5lcmF0aW9uczogdGhlIG9sZCBhbmQgdGhlXG4gICogeW91bmcuIEZvciBlYWNoIGdlbmVyYXRpb24sIG1lbWNncyBhcmUgcmFuZG9tbHkgc2hhcmRlZCBpbnRvIG11bHRpcGxlIGJpbnNcbiAgKiB0byBpbXByb3ZlIHNjYWxhYmlsaXR5LiBGb3IgZWFjaCBiaW4sIHRoZSBobGlzdF9udWxscyBpcyB2aXJ0dWFsbHkgZGl2aWRlZFxuLSAqIGludG8gdGhyZWUgc2VnbWVudHM6IHRoZSBoZWFkLCB0aGUgdGFpbCBhbmQgdGhlIGRlZmF1bHQuXG4rICogaW50byB0d28gc2VnbWVudHM6IHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC5cbiAgKlxuICAqIEFuIG9ubGluaW5nIG1lbWNnIGlzIGFkZGVkIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkIGdlbmVyYXRpb24uXG4gICogVGhlIGV2aWN0aW9uIHN0YXJ0cyBhdCB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLiBUaGVcbiAgKiBwZXItbm9kZSBtZW1jZyBnZW5lcmF0aW9uIGNvdW50ZXIsIHdob3NlIHJlbWluZGVyIChtb2QgTUVNQ0dfTlJfR0VOUykgaW5kZXhlc1xuICAqIHRoZSBvbGQgZ2VuZXJhdGlvbiwgaXMgaW5jcmVtZW50ZWQgd2hlbiBhbGwgaXRzIGJpbnMgYmVjb21lIGVtcHR5LlxuICAqXG4tICogVGhlcmUgYXJlIGZvdXIgb3BlcmF0aW9uczpcbi0gKiAxLiBNRU1DR19MUlVfSEVBRCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4tICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcInNlZ1wiIHRvIFwiaGVhZFwiO1xuLSAqIDIuIE1FTUNHX0xSVV9UQUlMLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHNcbisgKiBUaGVyZSBhcmUgdGhyZWUgb3BlcmF0aW9uczpcbisgKiAxLiBNRU1DR19MUlVfVEFJTCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4gICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcInNlZ1wiIHRvIFwidGFpbFwiO1xuLSAqIDMuIE1FTUNHX0xSVV9PTEQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGRcbisgKiAyLiBNRU1DR19MUlVfT0xELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkXG4gICogICAgZ2VuZXJhdGlvbiwgdXBkYXRlcyBpdHMgXCJnZW5cIiB0byBcIm9sZFwiIGFuZCByZXNldHMgaXRzIFwic2VnXCIgdG8gXCJkZWZhdWx0XCI7XG4tICogNC4gTUVNQ0dfTFJVX1lPVU5HLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGVcbisgKiAzLiBNRU1DR19MUlVfWU9VTkcsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIHRhaWwgb2YgYSByYW5kb20gYmluIGluIHRoZVxuICAqICAgIHlvdW5nIGdlbmVyYXRpb24sIHVwZGF0ZXMgaXRzIFwiZ2VuXCIgdG8gXCJ5b3VuZ1wiIGFuZCByZXNldHMgaXRzIFwic2VnXCIgdG9cbiAgKiAgICBcImRlZmF1bHRcIi5cbiAgKlxuICAqIFRoZSBldmVudHMgdGhhdCB0cmlnZ2VyIHRoZSBhYm92ZSBvcGVyYXRpb25zIGFyZTpcbi0gKiAxLiBFeGNlZWRpbmcgdGhlIHNvZnQgbGltaXQsIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9IRUFEO1xuLSAqIDIuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzXG4rICogMS4gVGhlIGZpcnN0IGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIGJlbG93IGxvdywgd2hpY2ggdHJpZ2dlcnNcbiAgKiAgICBNRU1DR19MUlVfVEFJTDtcbi0gKiAzLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgb2ZmbGluZWQgb3IgYmVsb3cgcmVjbGFpbWFibGUgc2l6ZVxuKyAqIDIuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4gICogICAgdGhyZXNob2xkLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfVEFJTDtcbi0gKiA0LiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemVcbisgKiAzLiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemVcbiAgKiAgICB0aHJlc2hvbGQsIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcbi0gKiA1LiBBdHRlbXB0aW5nIHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBtaW4sIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcbi0gKiA2LiBGaW5pc2hpbmcgdGhlIGFnaW5nIG9uIHRoZSBldmljdGlvbiBwYXRoLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4tICogNy4gT2ZmbGluaW5nIGEgbWVtY2csIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9PTEQuXG4rICogNC4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4rICogNS4gRmluaXNoaW5nIHRoZSBhZ2luZyBvbiB0aGUgZXZpY3Rpb24gcGF0aCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xuKyAqIDYuIE9mZmxpbmluZyBhIG1lbWNnLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfT0xELlxuICAqXG4gICogTm90ZXM6XG4gICogMS4gTWVtY2cgTFJVIG9ubHkgYXBwbGllcyB0byBnbG9iYWwgcmVjbGFpbSwgYW5kIHRoZSByb3VuZC1yb2JpbiBpbmNyZW1lbnRpbmdcbkBAIC02OTksNyArNjk2LDYgQEAgdm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gdm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLXZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcbiB2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG4gYm9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG4gdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7XG5AQCAtNzQwLDEwICs3MzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuaW5kZXggYjRiZjdiOGRlZjFmNS4uOGE4NzI5OTBiNGJlZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuQEAgLTIxNCwxMyArMjE0LDYgQEAgREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3JlY2xhaW1fYmVcbiBcbiBcdFRQX0FSR1MoZ2ZwX2ZsYWdzLCBvcmRlciwgbWVtY2cpXG4gKTtcbi1cbi1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fYmVnaW4sXG4tXG4tXHRUUF9QUk9UTyhnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlciwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSxcbi1cbi1cdFRQX0FSR1MoZ2ZwX2ZsYWdzLCBvcmRlciwgbWVtY2cpXG4tKTtcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4gREVDTEFSRV9FVkVOVF9DTEFTUyhtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLFxuQEAgLTI2MCwxMyArMjUzLDYgQEAgREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9lbmRfdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19yZWNsYWltX2VuZCxcbiBcbiBcdFRQX0FSR1MobnJfcmVjbGFpbWVkLCBtZW1jZylcbiApO1xuLVxuLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fZW5kLFxuLVxuLVx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyksXG4tXG4tXHRUUF9BUkdTKG5yX3JlY2xhaW1lZCwgbWVtY2cpXG4tKTtcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4gVFJBQ0VfRVZFTlQobW1fc2hyaW5rX3NsYWJfc3RhcnQsXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDVjYzIyMGRiOTA3NjYuLmUxNmYxMjUwYjI1YzggMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtNzgsMTAgKzc4LDYgQEAgdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXG4gXHRcdFx0XHRcdCAgIGludCAqc3dhcHBpbmVzcyk7XG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuLVx0XHRcdFx0ICAgICBwZ19kYXRhX3QgKnBnZGF0LFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcbiBcbiAjaWZkZWYgQ09ORklHX05VTUFcbiBleHRlcm4gaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW87XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCAwNWVmNTVjYWU0ZGM2Li5iZjJjN2Q1M2IwMWIxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC0xNywzMCArMTcsNiBAQFxuICNpbmNsdWRlIFwic3dhcF90YWJsZS5oXCJcbiAjaW5jbHVkZSBcIm1lbWNvbnRyb2wtdjEuaFwiXG4gXG4tLypcbi0gKiBDZ3JvdXBzIGFib3ZlIHRoZWlyIGxpbWl0cyBhcmUgbWFpbnRhaW5lZCBpbiBhIFJCLVRyZWUsIGluZGVwZW5kZW50IG9mXG4tICogdGhlaXIgaGllcmFyY2h5IHJlcHJlc2VudGF0aW9uXG4tICovXG4tXG4tc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSB7XG4tXHRzdHJ1Y3QgcmJfcm9vdCByYl9yb290O1xuLVx0c3RydWN0IHJiX25vZGUgKnJiX3JpZ2h0bW9zdDtcbi1cdHNwaW5sb2NrX3QgbG9jaztcbi19O1xuLVxuLXN0cnVjdCBtZW1fY2dyb3VwX3RyZWUge1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqcmJfdHJlZV9wZXJfbm9kZVtNQVhfTlVNTk9ERVNdO1xuLX07XG4tXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3RyZWUgc29mdF9saW1pdF90cmVlIF9fcmVhZF9tb3N0bHk7XG4tXG4tLypcbi0gKiBNYXhpbXVtIGxvb3BzIGluIG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKCksIHVzZWQgZm9yIHNvZnRcbi0gKiBsaW1pdCByZWNsYWltIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMsIGlmIHRoZXkgZXZlciBvY2N1ci5cbi0gKi9cbi0jZGVmaW5lXHRNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTXHRcdDEwMFxuLSNkZWZpbmVcdE1FTV9DR1JPVVBfTUFYX1NPRlRfTElNSVRfUkVDTEFJTV9MT09QU1x0MlxuLVxuIC8qIGZvciBPT00gKi9cbiBzdHJ1Y3QgbWVtX2Nncm91cF9ldmVudGZkX2xpc3Qge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuQEAgLTEwNiwzMDEgKzgyLDYgQEAgc3RhdGljIHN0cnVjdCBsb2NrZGVwX21hcCBtZW1jZ19vb21fbG9ja19kZXBfbWFwID0ge1xuIFxuIERFRklORV9TUElOTE9DSyhtZW1jZ19vb21fbG9jayk7XG4gXG4tc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6LFxuLVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBuZXdfdXNhZ2VfaW5fZXhjZXNzKVxuLXtcbi1cdHN0cnVjdCByYl9ub2RlICoqcCA9IFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdC5yYl9ub2RlO1xuLVx0c3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXpfbm9kZTtcbi1cdGJvb2wgcmlnaHRtb3N0ID0gdHJ1ZTtcbi1cbi1cdGlmIChtei1cdTAwM2Vvbl90cmVlKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MgPSBuZXdfdXNhZ2VfaW5fZXhjZXNzO1xuLVx0aWYgKCFtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MpXG4tXHRcdHJldHVybjtcbi1cdHdoaWxlICgqcCkge1xuLVx0XHRwYXJlbnQgPSAqcDtcbi1cdFx0bXpfbm9kZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsXG4tXHRcdFx0XHRcdHRyZWVfbm9kZSk7XG4tXHRcdGlmIChtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MgXHUwMDNjIG16X25vZGUtXHUwMDNldXNhZ2VfaW5fZXhjZXNzKSB7XG4tXHRcdFx0cCA9IFx1MDAyNigqcCktXHUwMDNlcmJfbGVmdDtcbi1cdFx0XHRyaWdodG1vc3QgPSBmYWxzZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwID0gXHUwMDI2KCpwKS1cdTAwM2VyYl9yaWdodDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0aWYgKHJpZ2h0bW9zdClcbi1cdFx0bWN0ei1cdTAwM2VyYl9yaWdodG1vc3QgPSBcdTAwMjZtei1cdTAwM2V0cmVlX25vZGU7XG4tXG4tXHRyYl9saW5rX25vZGUoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlLCBwYXJlbnQsIHApO1xuLVx0cmJfaW5zZXJ0X2NvbG9yKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSwgXHUwMDI2bWN0ei1cdTAwM2VyYl9yb290KTtcbi1cdG16LVx1MDAzZW9uX3RyZWUgPSB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteixcbi1cdFx0XHRcdFx0IHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0aWYgKCFtei1cdTAwM2Vvbl90cmVlKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlID09IG1jdHotXHUwMDNlcmJfcmlnaHRtb3N0KVxuLVx0XHRtY3R6LVx1MDAzZXJiX3JpZ2h0bW9zdCA9IHJiX3ByZXYoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlKTtcbi1cbi1cdHJiX2VyYXNlKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSwgXHUwMDI2bWN0ei1cdTAwM2VyYl9yb290KTtcbi1cdG16LVx1MDAzZW9uX3RyZWUgPSBmYWxzZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0X19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLX1cbi1cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzb2Z0X2xpbWl0X2V4Y2VzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSk7XG4tXHR1bnNpZ25lZCBsb25nIHNvZnRfbGltaXQgPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNlc29mdF9saW1pdCk7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2VzcyA9IDA7XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIHNvZnRfbGltaXQpXG4tXHRcdGV4Y2VzcyA9IG5yX3BhZ2VzIC0gc29mdF9saW1pdDtcbi1cbi1cdHJldHVybiBleGNlc3M7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIG1lbWNnMV91cGRhdGVfdHJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBleGNlc3M7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6O1xuLVxuLVx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG4tXHRcdGlmIChzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZykpXG4tXHRcdFx0bHJ1X2dlbl9zb2Z0X3JlY2xhaW0obWVtY2csIG5pZCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdG1jdHogPSBzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtuaWRdO1xuLVx0aWYgKCFtY3R6KVxuLVx0XHRyZXR1cm47XG4tXHQvKlxuLVx0ICogTmVjZXNzYXJ5IHRvIHVwZGF0ZSBhbGwgYW5jZXN0b3JzIHdoZW4gaGllcmFyY2h5IGlzIHVzZWQuXG4tXHQgKiBiZWNhdXNlIHRoZWlyIGV2ZW50IGNvdW50ZXIgaXMgbm90IHRvdWNoZWQuXG4tXHQgKi9cbi1cdGZvciAoOyBtZW1jZzsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpIHtcbi1cdFx0bXogPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdO1xuLVx0XHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZyk7XG4tXHRcdC8qXG4tXHRcdCAqIFdlIGhhdmUgdG8gdXBkYXRlIHRoZSB0cmVlIGlmIG16IGlzIG9uIFJCLXRyZWUgb3Jcbi1cdFx0ICogbWVtIGlzIG92ZXIgaXRzIHNvZnRsaW1pdC5cbi1cdFx0ICovXG4tXHRcdGlmIChleGNlc3MgfHwgbXotXHUwMDNlb25fdHJlZSkge1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0ei1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdFx0LyogaWYgb24tdHJlZSwgcmVtb3ZlIGl0ICovXG4tXHRcdFx0aWYgKG16LVx1MDAzZW9uX3RyZWUpXG4tXHRcdFx0XHRfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEluc2VydCBhZ2Fpbi4gbXotXHUwMDNldXNhZ2VfaW5fZXhjZXNzIHdpbGwgYmUgdXBkYXRlZC5cbi1cdFx0XHQgKiBJZiBleGNlc3MgaXMgMCwgbm8gdHJlZSBvcHMuXG4tXHRcdFx0ICovXG4tXHRcdFx0X19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChteiwgbWN0eiwgZXhjZXNzKTtcbi1cdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHR9XG4tXHR9XG4tfVxuLVxuLXZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6O1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0aW50IG5pZDtcbi1cbi1cdGZvcl9lYWNoX25vZGUobmlkKSB7XG4tXHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXTtcbi1cdFx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW25pZF07XG4tXHRcdGlmIChtY3R6KVxuLVx0XHRcdG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdH1cbi19XG4tXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpcbi1fX21lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUoc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eilcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXG4tcmV0cnk6XG4tXHRteiA9IE5VTEw7XG4tXHRpZiAoIW1jdHotXHUwMDNlcmJfcmlnaHRtb3N0KVxuLVx0XHRnb3RvIGRvbmU7XHRcdC8qIE5vdGhpbmcgdG8gcmVjbGFpbSBmcm9tICovXG4tXG4tXHRteiA9IHJiX2VudHJ5KG1jdHotXHUwMDNlcmJfcmlnaHRtb3N0LFxuLVx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgdHJlZV9ub2RlKTtcbi1cdC8qXG4tXHQgKiBSZW1vdmUgdGhlIG5vZGUgbm93IGJ1dCBzb21lb25lIGVsc2UgY2FuIGFkZCBpdCBiYWNrLFxuLVx0ICogd2Ugd2lsbCB0byBhZGQgaXQgYmFjayBhdCB0aGUgZW5kIG9mIHJlY2xhaW0gdG8gaXRzIGNvcnJlY3Rcbi1cdCAqIHBvc2l0aW9uIGluIHRoZSB0cmVlLlxuLVx0ICovXG4tXHRfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdGlmICghc29mdF9saW1pdF9leGNlc3MobXotXHUwMDNlbWVtY2cpIHx8XG4tXHQgICAgIWNzc190cnlnZXQoXHUwMDI2bXotXHUwMDNlbWVtY2ctXHUwMDNlY3NzKSlcbi1cdFx0Z290byByZXRyeTtcbi1kb25lOlxuLVx0cmV0dXJuIG16O1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKlxuLW1lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUoc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eilcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXHRteiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZtY3R6LVx1MDAzZWxvY2spO1xuLVx0cmV0dXJuIG16O1xuLX1cbi1cbi1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxuLVx0XHRcdFx0ICAgcGdfZGF0YV90ICpwZ2RhdCxcbi1cdFx0XHRcdCAgIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZClcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqdmljdGltID0gTlVMTDtcbi1cdGludCB0b3RhbCA9IDA7XG4tXHRpbnQgbG9vcCA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2Vzcztcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHJlY2xhaW0gPSB7XG4tXHRcdC5wZ2RhdCA9IHBnZGF0LFxuLVx0fTtcbi1cbi1cdGV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpO1xuLVxuLVx0d2hpbGUgKDEpIHtcbi1cdFx0dmljdGltID0gbWVtX2Nncm91cF9pdGVyKHJvb3RfbWVtY2csIHZpY3RpbSwgXHUwMDI2cmVjbGFpbSk7XG4tXHRcdGlmICghdmljdGltKSB7XG4tXHRcdFx0bG9vcCsrO1xuLVx0XHRcdGlmIChsb29wIFx1MDAzZT0gMikge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIElmIHdlIGhhdmUgbm90IGJlZW4gYWJsZSB0byByZWNsYWltXG4tXHRcdFx0XHQgKiBhbnl0aGluZywgaXQgbWlnaHQgYmVjYXVzZSB0aGVyZSBhcmVcbi1cdFx0XHRcdCAqIG5vIHJlY2xhaW1hYmxlIHBhZ2VzIHVuZGVyIHRoaXMgaGllcmFyY2h5XG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGlmICghdG90YWwpXG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIFdlIHdhbnQgdG8gZG8gbW9yZSB0YXJnZXRlZCByZWNsYWltLlxuLVx0XHRcdFx0ICogZXhjZXNzIFx1MDAzZVx1MDAzZSAyIGlzIG5vdCB0byBleGNlc3NpdmUgc28gYXMgdG9cbi1cdFx0XHRcdCAqIHJlY2xhaW0gdG9vIG11Y2gsIG5vciB0b28gbGVzcyB0aGF0IHdlIGtlZXBcbi1cdFx0XHRcdCAqIGNvbWluZyBiYWNrIHRvIHJlY2xhaW0gZnJvbSB0aGlzIGNncm91cFxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRpZiAodG90YWwgXHUwMDNlPSAoZXhjZXNzIFx1MDAzZVx1MDAzZSAyKSB8fFxuLVx0XHRcdFx0XHQobG9vcCBcdTAwM2UgTUVNX0NHUk9VUF9NQVhfUkVDTEFJTV9MT09QUykpXG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVx0XHR0b3RhbCArPSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxuLVx0XHRcdFx0XHRwZ2RhdCwgXHUwMDI2bnJfc2Nhbm5lZCk7XG4tXHRcdCp0b3RhbF9zY2FubmVkICs9IG5yX3NjYW5uZWQ7XG4tXHRcdGlmICghc29mdF9saW1pdF9leGNlc3Mocm9vdF9tZW1jZykpXG4tXHRcdFx0YnJlYWs7XG4tXHR9XG4tXHRtZW1fY2dyb3VwX2l0ZXJfYnJlYWsocm9vdF9tZW1jZywgdmljdGltKTtcbi1cdHJldHVybiB0b3RhbDtcbi19XG4tXG4tdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi1cdFx0XHRcdFx0ICAgIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZClcbi17XG4tXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCA9IDA7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosICpuZXh0X216ID0gTlVMTDtcbi1cdHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkO1xuLVx0aW50IGxvb3AgPSAwO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejtcbi1cdHVuc2lnbmVkIGxvbmcgZXhjZXNzO1xuLVxuLVx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGlmIChvcmRlciBcdTAwM2UgMClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbcGdkYXQtXHUwMDNlbm9kZV9pZF07XG4tXG4tXHQvKlxuLVx0ICogRG8gbm90IGV2ZW4gYm90aGVyIHRvIGNoZWNrIHRoZSBsYXJnZXN0IG5vZGUgaWYgdGhlIHJvb3Rcbi1cdCAqIGlzIGVtcHR5LiBEbyBpdCBsb2NrbGVzcyB0byBwcmV2ZW50IGxvY2sgYm91bmNpbmcuIFJhY2VzXG4tXHQgKiBhcmUgYWNjZXB0YWJsZSBhcyBzb2Z0IGxpbWl0IGlzIGJlc3QgZWZmb3J0IGFueXdheS5cbi1cdCAqL1xuLVx0aWYgKCFtY3R6IHx8IFJCX0VNUFRZX1JPT1QoXHUwMDI2bWN0ei1cdTAwM2VyYl9yb290KSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHQvKlxuLVx0ICogVGhpcyBsb29wIGNhbiBydW4gYSB3aGlsZSwgc3BlY2lhbGx5IGlmIG1lbV9jZ3JvdXAncyBjb250aW51b3VzbHlcbi1cdCAqIGtlZXAgZXhjZWVkaW5nIHRoZWlyIHNvZnQgbGltaXQgYW5kIHB1dHRpbmcgdGhlIHN5c3RlbSB1bmRlclxuLVx0ICogcHJlc3N1cmVcbi1cdCAqL1xuLVx0ZG8ge1xuLVx0XHRpZiAobmV4dF9teilcbi1cdFx0XHRteiA9IG5leHRfbXo7XG4tXHRcdGVsc2Vcbi1cdFx0XHRteiA9IG1lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUobWN0eik7XG4tXHRcdGlmICghbXopXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdHJlY2xhaW1lZCA9IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKG16LVx1MDAzZW1lbWNnLCBwZ2RhdCxcbi1cdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2ssIHRvdGFsX3NjYW5uZWQpO1xuLVx0XHRucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xuLVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIElmIHdlIGZhaWxlZCB0byByZWNsYWltIGFueXRoaW5nIGZyb20gdGhpcyBtZW1vcnkgY2dyb3VwXG4tXHRcdCAqIGl0IGlzIHRpbWUgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBjZ3JvdXBcbi1cdFx0ICovXG4tXHRcdG5leHRfbXogPSBOVUxMO1xuLVx0XHRpZiAoIXJlY2xhaW1lZClcbi1cdFx0XHRuZXh0X216ID0gX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopO1xuLVxuLVx0XHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhtei1cdTAwM2VtZW1jZyk7XG4tXHRcdC8qXG4tXHRcdCAqIE9uZSBzY2hvb2wgb2YgdGhvdWdodCBzYXlzIHRoYXQgd2Ugc2hvdWxkIG5vdCBhZGRcbi1cdFx0ICogYmFjayB0aGUgbm9kZSB0byB0aGUgdHJlZSBpZiByZWNsYWltIHJldHVybnMgMC5cbi1cdFx0ICogQnV0IG91ciByZWNsYWltIGNvdWxkIHJldHVybiAwLCBzaW1wbHkgYmVjYXVzZSBkdWVcbi1cdFx0ICogdG8gcHJpb3JpdHkgd2UgYXJlIGV4cG9zaW5nIGEgc21hbGxlciBzdWJzZXQgb2Zcbi1cdFx0ICogbWVtb3J5IHRvIHJlY2xhaW0gZnJvbS4gQ29uc2lkZXIgdGhpcyBhcyBhIGxvbmdlclxuLVx0XHQgKiB0ZXJtIFRPRE8uXG4tXHRcdCAqL1xuLVx0XHQvKiBJZiBleGNlc3MgPT0gMCwgbm8gdHJlZSBvcHMgKi9cbi1cdFx0X19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChteiwgbWN0eiwgZXhjZXNzKTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXHRcdGNzc19wdXQoXHUwMDI2bXotXHUwMDNlbWVtY2ctXHUwMDNlY3NzKTtcbi1cdFx0bG9vcCsrO1xuLVx0XHQvKlxuLVx0XHQgKiBDb3VsZCBub3QgcmVjbGFpbSBhbnl0aGluZyBhbmQgdGhlcmUgYXJlIG5vIG1vcmVcbi1cdFx0ICogbWVtIGNncm91cHMgdG8gdHJ5IG9yIHdlIHNlZW0gdG8gYmUgbG9vcGluZyB3aXRob3V0XG4tXHRcdCAqIHJlY2xhaW1pbmcgYW55dGhpbmcuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIW5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQobmV4dF9teiA9PSBOVUxMIHx8XG4tXHRcdFx0bG9vcCBcdTAwM2UgTUVNX0NHUk9VUF9NQVhfU09GVF9MSU1JVF9SRUNMQUlNX0xPT1BTKSlcbi1cdFx0XHRicmVhaztcbi1cdH0gd2hpbGUgKCFucl9yZWNsYWltZWQpO1xuLVx0aWYgKG5leHRfbXopXG4tXHRcdGNzc19wdXQoXHUwMDI2bmV4dF9tei1cdTAwM2VtZW1jZy1cdTAwM2Vjc3MpO1xuLVx0cmV0dXJuIG5yX3JlY2xhaW1lZDtcbi19XG4tXG4gc3RhdGljIHU2NCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3JlYWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbiBcdFx0XHRcdHN0cnVjdCBjZnR5cGUgKmNmdClcbiB7XG5AQCAtNTExLDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdH1cbiB9XG4gXG4tLyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgXHUwMDI2IHNvZnRsaW1pdCB0cmVlIHVwZGF0ZXMgKi9cbisvKiBDZ3JvdXAxOiB0aHJlc2hvbGQgbm90aWZpY2F0aW9ucyAqL1xuIFxuIC8qXG4gICogUGVyIG1lbWNnIGV2ZW50IGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYXQgZXZlcnkgcGFnZWluL3BhZ2VvdXQuIFdpdGggVEhQLFxuQEAgLTUxOSwxNSArMjAwLDkgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF90aHJlc2hvbGQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICAqIHRvIHRyaWdnZXIgc29tZSBwZXJpb2RpYyBldmVudHMuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBiZXR0ZXJcbiAgKiB0aGFuIHVzaW5nIGppZmZpZXMgZXRjLiB0byBoYW5kbGUgcGVyaW9kaWMgbWVtY2cgZXZlbnQuXG4gICovXG4tZW51bSBtZW1fY2dyb3VwX2V2ZW50c190YXJnZXQge1xuLVx0TUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNILFxuLVx0TUVNX0NHUk9VUF9UQVJHRVRfU09GVExJTUlULFxuLVx0TUVNX0NHUk9VUF9OVEFSR0VUUyxcbi19O1xuLVxuIHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VfZXZlbnRzO1xuLVx0dW5zaWduZWQgbG9uZyB0YXJnZXRzW01FTV9DR1JPVVBfTlRBUkdFVFNdO1xuK1x0dW5zaWduZWQgbG9uZyB0aHJlc2hvbGRfdGFyZ2V0O1xuIH07XG4gXG4gc3RhdGljIHZvaWQgbWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKVxuQEAgLTU0NCw1MyArMjE5LDI5IEBAIHN0YXRpYyB2b2lkIG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcylcbiB9XG4gXG4gI2RlZmluZSBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQgMTI4XG4tI2RlZmluZSBTT0ZUTElNSVRfRVZFTlRTX1RBUkdFVCAxMDI0XG4gXG4tc3RhdGljIGJvb2wgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRlbnVtIG1lbV9jZ3JvdXBfZXZlbnRzX3RhcmdldCB0YXJnZXQpXG4rc3RhdGljIGJvb2wgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWwsIG5leHQ7XG4gXG4gXHR2YWwgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2Vucl9wYWdlX2V2ZW50cyk7XG4tXHRuZXh0ID0gX190aGlzX2NwdV9yZWFkKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNldGFyZ2V0c1t0YXJnZXRdKTtcbitcdG5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0aHJlc2hvbGRfdGFyZ2V0KTtcbiBcdC8qIGZyb20gdGltZV9hZnRlcigpIGluIGppZmZpZXMuaCAqL1xuIFx0aWYgKChsb25nKShuZXh0IC0gdmFsKSBcdTAwM2MgMCkge1xuLVx0XHRzd2l0Y2ggKHRhcmdldCkge1xuLVx0XHRjYXNlIE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSDpcbi1cdFx0XHRuZXh0ID0gdmFsICsgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIE1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVDpcbi1cdFx0XHRuZXh0ID0gdmFsICsgU09GVExJTUlUX0VWRU5UU19UQVJHRVQ7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0X190aGlzX2NwdV93cml0ZShtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZXRhcmdldHNbdGFyZ2V0XSwgbmV4dCk7XG4rXHRcdF9fdGhpc19jcHVfd3JpdGUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0aHJlc2hvbGRfdGFyZ2V0LFxuK1x0XHRcdFx0IHZhbCArIFRIUkVTSE9MRFNfRVZFTlRTX1RBUkdFVCk7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi0vKlxuLSAqIENoZWNrIGV2ZW50cyBpbiBvcmRlci5cbi0gKlxuLSAqL1xuLXN0YXRpYyB2b2lkIG1lbWNnMV9jaGVja19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuK3N0YXRpYyB2b2lkIG1lbWNnMV9jaGVja19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogdGhyZXNob2xkIGV2ZW50IGlzIHRyaWdnZXJlZCBpbiBmaW5lciBncmFpbiB0aGFuIHNvZnQgbGltaXQgKi9cbi1cdGlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLFxuLVx0XHRcdFx0XHRcdE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCkpKSB7XG4tXHRcdGJvb2wgZG9fc29mdGxpbWl0O1xuLVxuLVx0XHRkb19zb2Z0bGltaXQgPSBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLFxuLVx0XHRcdFx0XHRcdE1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVCk7XG4rXHRpZiAodW5saWtlbHkobWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZykpKVxuIFx0XHRtZW1fY2dyb3VwX3RocmVzaG9sZChtZW1jZyk7XG4tXHRcdGlmICh1bmxpa2VseShkb19zb2Z0bGltaXQpKVxuLVx0XHRcdG1lbWNnMV91cGRhdGVfdHJlZShtZW1jZywgbmlkKTtcbi1cdH1cbiB9XG4gXG4gdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5AQCAtNTk5LDcgKzI1MCw3IEBAIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFxuIFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIFx0bWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKG1lbWNnLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuLVx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XG4rXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG5AQCAtNjcyLDcgKzMyMyw3IEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIFx0Vk1fV0FSTl9PTl9JUlFTX0VOQUJMRUQoKTtcbiBcdG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhtZW1jZywgLWZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXHRwcmVlbXB0X2VuYWJsZV9uZXN0ZWQoKTtcbi1cdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpO1xuK1x0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbkBAIC03MjYsMTQgKzM3NywxNCBAQCB2b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiAjZW5kaWZcbiBcbiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcbi1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSwgaW50IG5pZClcbitcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIFx0Y291bnRfbWVtY2dfZXZlbnRzKG1lbWNnLCBQR1BHT1VULCBwZ3Bnb3V0KTtcbiBcdF9fdGhpc19jcHVfYWRkKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNlbnJfcGFnZV9ldmVudHMsIG5yX21lbW9yeSk7XG4tXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBuaWQpO1xuK1x0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7XG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuIFxuQEAgLTI1NjYsMjIgKzIyMTcsMyBAQCB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0ZnJlZV9wZXJjcHUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdSk7XG4gfVxuLVxuLXN0YXRpYyBpbnQgX19pbml0IG1lbWNnMV9pbml0KHZvaWQpXG4te1xuLVx0aW50IG5vZGU7XG4tXG4tXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcbi1cdFx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqcnRwbjtcbi1cbi1cdFx0cnRwbiA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKnJ0cG4pLCBHRlBfS0VSTkVMLCBub2RlKTtcbi1cbi1cdFx0cnRwbi1cdTAwM2VyYl9yb290ID0gUkJfUk9PVDtcbi1cdFx0cnRwbi1cdTAwM2VyYl9yaWdodG1vc3QgPSBOVUxMO1xuLVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZydHBuLVx1MDAzZWxvY2spO1xuLVx0XHRzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtub2RlXSA9IHJ0cG47XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tc3Vic3lzX2luaXRjYWxsKG1lbWNnMV9pbml0KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmhcbmluZGV4IDFlMzk0MjY5YzYxM2QuLmI5YTIxZjBmZDJjM2EgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuaFxuQEAgLTQxLDEyICs0MSw2IEBAIGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gXG4gdm9pZCBtZW1jZzFfbWVtY2dfaW5pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLXZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXNvZnRfbGltaXQsIFBBR0VfQ09VTlRFUl9NQVgpO1xuLX1cbiBcbiBzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQ7XG4gdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC02NSw3ICs1OSw3IEBAIHZvaWQgbWVtY2cxX29vbV9yZWNvdmVyKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gXG4gdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBwZ3Bnb3V0LFxuLVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKTtcbitcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7XG4gXG4gdm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcyk7XG4gdm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbkBAIC05OCw4ICs5Miw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfYWxsb2NfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgeyByZXR1cm4gdHJ1ZTtcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbkBAIC0xMTUsNyArMTA3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXG4tXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSwgaW50IG5pZCkge31cbitcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcykge31cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IGJmZDBhNzRmYWM5MjMuLjMwNjM2YjlkOTY3MzkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTQyNTcsNyArNDI1Nyw2IEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuIFx0XHRyZXR1cm4gRVJSX0NBU1QobWVtY2cpO1xuIFxuIFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgUEFHRV9DT1VOVEVSX01BWCk7XG4tXHRtZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7XG4gI2lmZGVmIENPTkZJR19aU1dBUFxuIFx0bWVtY2ctXHUwMDNlenN3YXBfbWF4ID0gUEFHRV9DT1VOVEVSX01BWDtcbiBcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlenN3YXBfd3JpdGViYWNrLCB0cnVlKTtcbkBAIC00NDI5LDcgKzQ0MjgsNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXG4gXHR2bXByZXNzdXJlX2NsZWFudXAoXHUwMDI2bWVtY2ctXHUwMDNldm1wcmVzc3VyZSk7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm1lbWNnLVx1MDAzZWhpZ2hfd29yayk7XG4tXHRtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXMobWVtY2cpO1xuIFx0ZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTtcbiBcdG1lbV9jZ3JvdXBfZnJlZShtZW1jZyk7XG4gfVxuQEAgLTQ0NjUsNyArNDQ2Myw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRwYWdlX2NvdW50ZXJfc2V0X21pbihcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIDApO1xuIFx0cGFnZV9jb3VudGVyX3NldF9sb3coXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCAwKTtcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xuLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xuIFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xuIFx0bWVtY2dfd2JfZG9tYWluX3NpemVfY2hhbmdlZChtZW1jZyk7XG4gfVxuQEAgLTUzMzEsNyArNTMyOCw2IEBAIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIge1xuIFx0dW5zaWduZWQgbG9uZyBucl9tZW1vcnk7XG4gXHR1bnNpZ25lZCBsb25nIHBncGdvdXQ7XG4gXHR1bnNpZ25lZCBsb25nIG5yX2ttZW07XG4tXHRpbnQgbmlkO1xuIH07XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHVuY2hhcmdlX2dhdGhlcl9jbGVhcihzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcbkBAIC01MzU0LDcgKzUzNTAsNyBAQCBzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcbiBcdFx0bWVtY2cxX29vbV9yZWNvdmVyKG1lbWNnKTtcbiBcdH1cbiBcbi1cdG1lbWNnMV91bmNoYXJnZV9iYXRjaChtZW1jZywgdWctXHUwMDNlcGdwZ291dCwgdWctXHUwMDNlbnJfbWVtb3J5LCB1Zy1cdTAwM2VuaWQpO1xuK1x0bWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy1cdTAwM2VwZ3Bnb3V0LCB1Zy1cdTAwM2Vucl9tZW1vcnkpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHQvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIHVuY2hhcmdlX2ZvbGlvICovXG5AQCAtNTM4Myw3ICs1Mzc5LDYgQEAgc3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG4gXHRcdFx0dW5jaGFyZ2VfZ2F0aGVyX2NsZWFyKHVnKTtcbiBcdFx0fVxuIFx0XHR1Zy1cdTAwM2VvYmpjZyA9IG9iamNnO1xuLVx0XHR1Zy1cdTAwM2VuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xuIFxuIFx0XHQvKiBwYWlycyB3aXRoIG9ial9jZ3JvdXBfcHV0IGluIHVuY2hhcmdlX2JhdGNoICovXG4gXHRcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmZGQxMzI5OWEwNGE5Li5kZWIwODdjNTcwMDdkIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDM3Myw3ICs0MzczLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXG4gZW51bSB7XG4gXHRNRU1DR19MUlVfTk9QLFxuLVx0TUVNQ0dfTFJVX0hFQUQsXG4gXHRNRU1DR19MUlVfVEFJTCxcbiBcdE1FTUNHX0xSVV9PTEQsXG4gXHRNRU1DR19MUlVfWU9VTkcsXG5AQCAtNDM5NSw5ICs0Mzk0LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4gXHRuZXcgPSBvbGQgPSBscnV2ZWMtXHUwMDNlbHJ1Z2VuLmdlbjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXG4tXHRpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQpXG4tXHRcdHNlZyA9IE1FTUNHX0xSVV9IRUFEO1xuLVx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpXG4rXHRpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpXG4gXHRcdHNlZyA9IE1FTUNHX0xSVV9UQUlMO1xuIFx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX09MRClcbiBcdFx0bmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC1cdTAwM2VtZW1jZ19scnUuc2VxKTtcbkBAIC00NDExLDcgKzQ0MDgsNyBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbiBcbiBcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0KTtcbiBcbi1cdGlmIChvcCA9PSBNRU1DR19MUlVfSEVBRCB8fCBvcCA9PSBNRU1DR19MUlVfT0xEKVxuK1x0aWYgKG9wID09IE1FTUNHX0xSVV9PTEQpXG4gXHRcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QsIFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XG4gXHRlbHNlXG4gXHRcdGhsaXN0X251bGxzX2FkZF90YWlsX3JjdShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QsIFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XG5AQCAtNDQ4OSwxNSArNDQ4Niw2IEBAIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdH1cbiB9XG4gXG4tdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbi1cbi1cdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXG4tXHRpZiAoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcbi1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfSEVBRCk7XG4tfVxuLVxuIGJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4ge1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbkBAIC02NDM5LDggKzY0MjcsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0c3RydWN0IHpvbmVyZWYgKno7XG4gXHRzdHJ1Y3Qgem9uZSAqem9uZTtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3NvZnRfc2Nhbm5lZDtcbiBcdGdmcF90IG9yaWdfbWFzaztcbiBcdHBnX2RhdGFfdCAqbGFzdF9wZ2RhdCA9IE5VTEw7XG4gXHRwZ19kYXRhX3QgKmZpcnN0X3BnZGF0ID0gTlVMTDtcbkBAIC02NDgyLDM1ICs2NDY4LDE3IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdFx0XHRcdHNjLVx1MDAzZWNvbXBhY3Rpb25fcmVhZHkgPSB0cnVlO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlXG4tXHRcdFx0ICogem9uZWxpc3QgaXMgb3JkZXJlZCBieSB6b25lIChub3QgdGhlIGRlZmF1bHQpIHRoZW4gYVxuLVx0XHRcdCAqIG5vZGUgbWF5IGJlIHNocnVuayBtdWx0aXBsZSB0aW1lcyBidXQgaW4gdGhhdCBjYXNlXG4tXHRcdFx0ICogdGhlIHVzZXIgcHJlZmVycyBsb3dlciB6b25lcyBiZWluZyBwcmVzZXJ2ZWQuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUaGlzIHN0ZWFscyBwYWdlcyBmcm9tIG1lbW9yeSBjZ3JvdXBzIG92ZXIgc29mdGxpbWl0XG4tXHRcdFx0ICogYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXMgYW5kXG4tXHRcdFx0ICogc2Nhbm5lZCBwYWdlcy4gVGhpcyB3b3JrcyBmb3IgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZVxuLVx0XHRcdCAqIGFuZCBiYWxhbmNpbmcsIG5vdCBmb3IgYSBtZW1jZydzIGxpbWl0LlxuLVx0XHRcdCAqL1xuLVx0XHRcdG5yX3NvZnRfc2Nhbm5lZCA9IDA7XG4tXHRcdFx0bnJfc29mdF9yZWNsYWltZWQgPSBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCxcbi1cdFx0XHRcdFx0XHRcdFx0ICAgICAgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZWdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZucl9zb2Z0X3NjYW5uZWQpO1xuLVx0XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCArPSBucl9zb2Z0X3JlY2xhaW1lZDtcbi1cdFx0XHRzYy1cdTAwM2Vucl9zY2FubmVkICs9IG5yX3NvZnRfc2Nhbm5lZDtcbi1cdFx0XHQvKiBuZWVkIHNvbWUgY2hlY2sgZm9yIGF2b2lkIG1vcmUgc2hyaW5rX3pvbmUoKSAqL1xuIFx0XHR9XG4gXG4gXHRcdGlmICghZmlyc3RfcGdkYXQpXG4gXHRcdFx0Zmlyc3RfcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG4gXG4tXHRcdC8qIFNlZSBjb21tZW50IGFib3V0IHNhbWUgY2hlY2sgZm9yIGdsb2JhbCByZWNsYWltIGFib3ZlICovXG4rXHRcdC8qXG4rXHRcdCAqIFNocmluayBlYWNoIG5vZGUgaW4gdGhlIHpvbmVsaXN0IG9uY2UuIElmIHRoZSB6b25lbGlzdCBpc1xuK1x0XHQgKiBvcmRlcmVkIGJ5IHpvbmUgKG5vdCB0aGUgZGVmYXVsdCkgdGhlbiBhIG5vZGUgbWF5IGJlIHNocnVua1xuK1x0XHQgKiBtdWx0aXBsZSB0aW1lcyBidXQgaW4gdGhhdCBjYXNlIHRoZSB1c2VyIHByZWZlcnMgbG93ZXIgem9uZXNcbitcdFx0ICogYmVpbmcgcHJlc2VydmVkLlxuK1x0XHQgKi9cbiBcdFx0aWYgKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRsYXN0X3BnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xuQEAgLTY4MjUsNDcgKzY3OTMsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gXG4tLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xuLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuLVx0XHRcdFx0XHRcdHBnX2RhdGFfdCAqcGdkYXQsXG4tXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZClcbi17XG4tXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcbi1cdFx0Lm5yX3RvX3JlY2xhaW0gPSBTV0FQX0NMVVNURVJfTUFYLFxuLVx0XHQudGFyZ2V0X21lbV9jZ3JvdXAgPSBtZW1jZyxcbi1cdFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxuLVx0XHQubWF5X3VubWFwID0gMSxcbi1cdFx0LnJlY2xhaW1faWR4ID0gTUFYX05SX1pPTkVTIC0gMSxcbi1cdFx0Lm1heV9zd2FwID0gIW5vc3dhcCxcbi1cdH07XG4tXG4tXHRXQVJOX09OX09OQ0UoIWN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZSk7XG4tXG4tXHRzYy5nZnBfbWFzayA9IChnZnBfbWFzayBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxuLVx0XHRcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcdTAwMjYgfkdGUF9SRUNMQUlNX01BU0spO1xuLVxuLVx0dHJhY2VfbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2JlZ2luKHNjLmdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdCAgICAgIHNjLm9yZGVyLFxuLVx0XHRcdFx0XHRcdCAgICAgIG1lbWNnKTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFOiBBbHRob3VnaCB3ZSBjYW4gZ2V0IHRoZSBwcmlvcml0eSBmaWVsZCwgdXNpbmcgaXRcbi1cdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxuLVx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XG4tXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xuLVx0ICogdGhlIHByaW9yaXR5IGFuZCBtYWtlIGl0IHplcm8uXG4tXHQgKi9cbi1cdHNocmlua19scnV2ZWMobHJ1dmVjLCBcdTAwMjZzYyk7XG4tXG4tXHR0cmFjZV9tbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fZW5kKHNjLm5yX3JlY2xhaW1lZCwgbWVtY2cpO1xuLVxuLVx0Km5yX3NjYW5uZWQgPSBzYy5ucl9zY2FubmVkO1xuLVxuLVx0cmV0dXJuIHNjLm5yX3JlY2xhaW1lZDtcbi19XG4tXG4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXG5AQCAtNzE3MSw4ICs3MDk4LDYgQEAgY2xlYXJfcmVjbGFpbV9hY3RpdmUocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiBzdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuIHtcbiBcdGludCBpO1xuLVx0dW5zaWduZWQgbG9uZyBucl9zb2Z0X3JlY2xhaW1lZDtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9zY2FubmVkO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHR1bnNpZ25lZCBsb25nIG5yX2Jvb3N0X3JlY2xhaW07XG4gXHR1bnNpZ25lZCBsb25nIHpvbmVfYm9vc3RzW01BWF9OUl9aT05FU10gPSB7IDAsIH07XG5AQCAtNzI3OCwxMiArNzIwMyw3IEBAIHN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdCAqL1xuIFx0XHRrc3dhcGRfYWdlX25vZGUocGdkYXQsIFx1MDAyNnNjKTtcbiBcbi1cdFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXG4gXHRcdHNjLm5yX3NjYW5uZWQgPSAwO1xuLVx0XHRucl9zb2Z0X3NjYW5uZWQgPSAwO1xuLVx0XHRucl9zb2Z0X3JlY2xhaW1lZCA9IG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdkYXQsIHNjLm9yZGVyLFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgc2MuZ2ZwX21hc2ssIFx1MDAyNm5yX3NvZnRfc2Nhbm5lZCk7XG4tXHRcdHNjLm5yX3JlY2xhaW1lZCArPSBucl9zb2Z0X3JlY2xhaW1lZDtcbiBcbiBcdFx0LypcbiBcdFx0ICogVGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8gcmFpc2UgdGhlIHNjYW5uaW5nIHByaW9yaXR5IGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0Mjo1NC4yMDIwMjcyMjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU2NTA3NTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHNlZWluZy4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBicmVhayBkb3duIHRoZSBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuIEl0IGFwcGVhcnMgdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSByZW1vdmluZywgb3IgYXQgbGVhc3Qgc2lnbmlmaWNhbnRseSBjbGVhbmluZyB1cCwgc29mdCBsaW1pdCByZWNsYWltIGZ1bmN0aW9uYWxpdHkgZnJvbSBtZW1jZyB2MS4gVGhlIGNoYW5nZXMgYXJlIHF1aXRlIGV4dGVuc2l2ZS4gSSdtIHNlZWluZyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBgc29mdF9saW1pdF90cmVlYCwgYHVzYWdlX2luX2V4Y2Vzc2AsIGFuZCB0aGUgYHNvZnRfbGltaXRgIGZpZWxkIHdpdGhpbiBgbWVtX2Nncm91cGAgZ2V0dGluZyBheGVkLiBLZXkgZnVuY3Rpb25zIGxpa2UgYG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW1gLCBgbWVtY2cxX3VwZGF0ZV90cmVlYCwgYW5kIHNldmVyYWwgb3RoZXJzIGFyZSBiZWluZyBkZXByZWNhdGVkIHRvby5cblxuU3BlY2lmaWNhbGx5LCBJIGFtIHNlZWluZyB0aGVzZSBrZXkgY2hhbmdlczpcbi0gYHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGVgIGFuZCBgc29mdF9saW1pdF90cmVlYCBhcmUgZ29uZSBmcm9tIGBtbS9tZW1jb250cm9sLXYxLmNgLlxuLSBNZW1iZXJzIGluIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAgKGB0cmVlX25vZGVgLCBgdXNhZ2VfaW5fZXhjZXNzYCwgYG9uX3RyZWVgKSBhcmUgZ29uZSwgbm93IHdpdGggc29tZSBwYWRkaW5nIGFkanVzdG1lbnRzLlxuLSBUaGUgYHNvZnRfbGltaXRgIGZpZWxkIGlzIGFsc28gZ29uZSBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAuXG4tIFJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBiZWluZyByZW1vdmVkLCBzdWNoIGFzIGBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltYCwgYG1lbWNnMV91cGRhdGVfdHJlZWAsIGBfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkYCwgYF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWRgLCBgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW1gIGFtb25nIG90aGVycy5cbi0gVGhlIGBtZW1jZzFfZXZlbnRzX3BlcmNwdWAgc3RydWN0IGhhcyBhIHNpZ25pZmljYW50IGNoYW5nZSwgd2hlcmUgYHRhcmdldHNbTUVNX0NHUk9VUF9OVEFSR0VUU11gIGlzIHJlcGxhY2VkIGJ5IGB1bnNpZ25lZCBsb25nIHRocmVzaG9sZF90YXJnZXRgLlxuLSBgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdGAgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYHRocmVzaG9sZF90YXJnZXRgIGluc3RlYWQgb2YgYW4gYXJyYXkgaW5kZXguXG4tIFRoZSBgbmlkYCBhcmd1bWVudCBpcyBhbHNvIHJlbW92ZWQgZnJvbSBzZXZlcmFsIGtleSBmdW5jdGlvbnMgKGBtZW1jZzFfY2hlY2tfZXZlbnRzYCwgYG1lbWNnMV91bmNoYXJnZV9iYXRjaGApIGFuZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYC5cbi0gV2l0aGluIGBtbS92bXNjYW4uY2AsIHRoZSBzb2Z0IGxpbWl0IHJlY2xhaW0gbG9naWMgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIGBzaHJpbmtfem9uZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGAsIHdpdGggYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgYE1FTUNHX0xSVV9IRUFEYCBhbHNvIGJlaW5nIHJlbW92ZWQuXG4tIEZpbmFsbHksIHRoZSBhc3NvY2lhdGVkIHRyYWNlIGV2ZW50cyAoYG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbmAgYW5kIGBlbmRgKSBpbiBgaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhgLCBhbmQgZGVjbGFyYXRpb25zIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGFyZSBhbHNvIGJlaW5nIHJlbW92ZWQuXG5cblNvLCB0aGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIG1ldGljdWxvdXMgc2VhcmNoIHRvIGVuc3VyZSB0aGF0IGFueSByZW1haW5pbmcgdXNhZ2Ugb2YgYHRocmVzaG9sZF90YXJnZXRgIG9yIGFueSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBhcmUgcHJvcGVybHkgaGFuZGxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNsZWFudXAgaXMgdHJ1bHkgY29tcHJlaGVuc2l2ZSwgdGhhdCB0aGVyZSBhcmUgbm8gcmVtbmFudHMgdGhhdCBjb3VsZCBsZWFkIHRvIHN1YnRsZSBpc3N1ZXMuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIEtNU0FOLCBhcyB3ZSBuZWVkIHRvIGJlIHZlcnkgcmlnb3JvdXMgaW4gaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgZXhwb3NlIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcyNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjU5Ljc2NzEwODI0MloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMzA2NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV2ZW50c19wZXJjcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xODQ9c3RhdGljIHZvaWQgbWVtX2Nncm91cF90aHJlc2hvbGQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTIwMi0gKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6MjAzOnN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSB7XFxubW0vbWVtY29udHJvbC12MS5jLTIwNC1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VfZXZlbnRzO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIwOD1zdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTg6XFx0X190aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZWV2ZW50c19wZXJjcHUtXFx1MDAzZW5yX3BhZ2VfZXZlbnRzLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC12MS5jLTIxOS19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjIzPXN0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTIyNi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MjI3OlxcdHZhbCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdS1cXHUwMDNlbnJfcGFnZV9ldmVudHMpO1xcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjg6XFx0bmV4dCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdS1cXHUwMDNldGhyZXNob2xkX3RhcmdldCk7XFxubW0vbWVtY29udHJvbC12MS5jLTIyOS1cXHQvKiBmcm9tIHRpbWVfYWZ0ZXIoKSBpbiBqaWZmaWVzLmggKi9cXG5tbS9tZW1jb250cm9sLXYxLmMtMjMwLVxcdGlmICgobG9uZykobmV4dCAtIHZhbCkgXFx1MDAzYyAwKSB7XFxubW0vbWVtY29udHJvbC12MS5jOjIzMTpcXHRcXHRfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLVxcdTAwM2VldmVudHNfcGVyY3B1LVxcdTAwM2V0aHJlc2hvbGRfdGFyZ2V0LFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMzItXFx0XFx0XFx0XFx0IHZhbCArIFRIUkVTSE9MRFNfRVZFTlRTX1RBUkdFVCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9Mzc5PXZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBwZ3Bnb3V0LFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTM4NS1cXHRjb3VudF9tZW1jZ19ldmVudHMobWVtY2csIFBHUEdPVVQsIHBncGdvdXQpO1xcbm1tL21lbWNvbnRyb2wtdjEuYzozODY6XFx0X190aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZWV2ZW50c19wZXJjcHUtXFx1MDAzZW5yX3BhZ2VfZXZlbnRzLCBucl9tZW1vcnkpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0zODctXFx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjIwOT1ib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjEwLXtcXG5tbS9tZW1jb250cm9sLXYxLmM6MjIxMTpcXHRtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1LFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjEyLVxcdFxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUxfQUNDT1VOVCk7XFxubW0vbWVtY29udHJvbC12MS5jOjIyMTM6XFx0cmV0dXJuICEhbWVtY2ctXFx1MDAzZWV2ZW50c19wZXJjcHU7XFxubW0vbWVtY29udHJvbC12MS5jLTIyMTQtfVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIyMTY9dm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjE3LXtcXG5tbS9tZW1jb250cm9sLXYxLmM6MjIxODpcXHRmcmVlX3BlcmNwdShtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdSk7XFxubW0vbWVtY29udHJvbC12MS5jLTIyMTktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0Mjo1OS44NzA0MjQ2MzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIxMzU0NDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBGZWF0dXJlIFJlbW92YWwgLSBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIHNvIEkndmUgY2FyZWZ1bGx5IHJldmlld2VkIHRoaXMgcGF0Y2gsIGFuZCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgcXVpdGUgc3RyYWlnaHRmb3J3YXJkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLlxuXG5Jbml0aWFsbHksIEkgd2FudGVkIHRvIGNvbmZpcm0gdGhhdCBhbnkgcGVyLUNQVSBtZW1vcnkgYWxsb2NhdGlvbiB1c2VkIHplcm8taW5pdGlhbGl6ZWQgbWVtb3J5LiBgYWxsb2NfcGVyY3B1X2dmcGAgKGFuZCBieSBleHRlbnNpb24gYGFsbG9jX3BlcmNwdWApIGFyZSB6ZXJvaW5nIGFsbG9jYXRvcnMuIEkgc3BlY2lmaWNhbGx5IGNoZWNrZWQgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIHRoZSByZW1vdmFsIG9mIHRoZSBjZ3JvdXAgdjEgc29mdCBsaW1pdCBmZWF0dXJlLiBUaGlzIGluY2x1ZGVzOlxuXG4qICAgUmVtb3Zpbmcgb2Jzb2xldGUgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBsZWdhY3kgZmVhdHVyZS5cbiogICBEZWxldGluZyB1bnVzZWQgbG9jYWwgdmFyaWFibGVzIGluIGZ1bmN0aW9ucyBsaWtlIGBzaHJpbmtfem9uZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGAuXG4qICAgRWxpbWluYXRpbmcgdGhlIGBuaWRgIGZpZWxkIGZyb20gYHN0cnVjdCB1bmNoYXJnZV9nYXRoZXJgLlxuKiAgIENsZWFuaW5nIHVwIGNvbW1lbnRzIGFuZCBlbnVtcyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuXG5cbkdpdmVuIHRoZXNlIGNoYW5nZXMsIEkgcGVyZm9ybWVkIGEgdGhvcm91Z2ggYW5hbHlzaXMgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBLTVNBTi1zcGVjaWZpYyBpc3N1ZXMuIEkgbG9va2VkIGZvcjpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBOby5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBOby5cbjMuICBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIE5vLlxuNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gTm8uXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgY2xlYW4tdXAgYW5kIHNpbXBsaWZpY2F0aW9uIHBhdGNoIHJlbW92aW5nIGRlYWQgY29kZS4gSXQncyBlc3NlbnRpYWxseSByZW1vdmluZyBjb2RlIHJlbGF0ZWQgdG8gdGhlIGxlZ2FjeSBtZW1jZyB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0gbG9naWMsIHdoaWNoIG1lYW5zIHNpbXBsaWZ5aW5nIHZhcmlvdXMgc3RydWN0cy4gSSBhbSBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBhbGxvY2F0aW9ucyBhbmQvb3IgY29tcGxleCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCBvciB6ZXJvZWQuXG5cblRoaXMgcGF0Y2ggaXMganVzdCByZW1vdmluZyBjb2RlIHRoYXQgaGFkIGJlZW4gZGVwcmVjYXRlZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIG5vIEtNU0FOIGlzIG5lZWRlZC5cblxuSSd2ZSBhbHNvIGRvdWJsZS1jaGVja2VkIGFnYWluc3QgdGhlIEtNU0FOIGd1aWRhbmNlOlxuXG4qICAgVGhlIHBhdGNoIGRvZXNuJ3QgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuXG4qICAgQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgKHdoaWNoIGlzIGFsbW9zdCBub25lISkgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZC5cbiogICBUaGlzIHBhdGNoIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGlzIGVudGlyZWx5IGFib3V0IHJlbW92aW5nIG9sZCBjb2RlIGFuZCBzaW1wbGlmeWluZyBleGlzdGluZyBzdHJ1Y3R1cmVzLCBhbmQgdGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGFsbG9jYXRpb25zIG9yIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoZXJlJ3Mgbm8ganVzdGlmaWNhdGlvbiBmb3IgS01TQU4gaGVyZS4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NzcsIk91dHB1dFRva2VucyI6MjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQzOjA3LjA4Mzk3Mzk3M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlbW92ZXMgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgc29mdC1saW1pdCByZWNsYWltIG1lY2hhbmlzbSBhY3Jvc3MgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobWVtY29udHJvbCwgbWVtY29udHJvbC12MSwgYW5kIHZtc2NhbikuIFNwZWNpZmljYWxseTpcXG4xLiBJdCBkZWxldGVzIHRoZSBzb2Z0IGxpbWl0IFJCLXRyZWUgdHJhY2tpbmcgc3RydWN0dXJlcywgZnVuY3Rpb25zLCBhbmQgdHJhY2Vwb2ludHMuXFxuMi4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBzb2Z0X2xpbWl0YCBhbmQgYHRhcmdldHNgIGZpZWxkcyBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBzaW1wbGlmeWluZyBwZXItY3B1IGV2ZW50IHJhdGVsaW1pdGluZyB0byBqdXN0IGB0aHJlc2hvbGRfdGFyZ2V0YC5cXG4zLiBJdCByZW1vdmVzIHRoZSB1bnVzZWQgYG5pZGAgZmllbGQgZnJvbSBgc3RydWN0IHVuY2hhcmdlX2dhdGhlcmAgYW5kIHVudXNlZCBzY2FubmluZyBzdGF0aXN0aWNzIHZhcmlhYmxlcyBmcm9tIHJlY2xhaW0gcGF0aHMgKGBzaHJpbmtfem9uZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGApLlxcblxcblRoZSBjaGFuZ2VzIGNvbnNpc3Qgc3RyaWN0bHkgb2YgZGVhZC9kZXByZWNhdGVkIGNvZGUgcmVtb3ZhbCBhbmQgc3RydWN0dXJhbCBzaW1wbGlmaWNhdGlvbnMuIE5vIG5ldyBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlbW92ZXMgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgc29mdC1saW1pdCByZWNsYWltIG1lY2hhbmlzbSBhY3Jvc3MgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobWVtY29udHJvbCwgbWVtY29udHJvbC12MSwgYW5kIHZtc2NhbikuIFNwZWNpZmljYWxseTpcXG4xLiBJdCBkZWxldGVzIHRoZSBzb2Z0IGxpbWl0IFJCLXRyZWUgdHJhY2tpbmcgc3RydWN0dXJlcywgZnVuY3Rpb25zLCBhbmQgdHJhY2Vwb2ludHMuXFxuMi4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBzb2Z0X2xpbWl0YCBhbmQgYHRhcmdldHNgIGZpZWxkcyBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBzaW1wbGlmeWluZyBwZXItY3B1IGV2ZW50IHJhdGVsaW1pdGluZyB0byBqdXN0IGB0aHJlc2hvbGRfdGFyZ2V0YC5cXG4zLiBJdCByZW1vdmVzIHRoZSB1bnVzZWQgYG5pZGAgZmllbGQgZnJvbSBgc3RydWN0IHVuY2hhcmdlX2dhdGhlcmAgYW5kIHVudXNlZCBzY2FubmluZyBzdGF0aXN0aWNzIHZhcmlhYmxlcyBmcm9tIHJlY2xhaW0gcGF0aHMgKGBzaHJpbmtfem9uZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGApLlxcblxcblRoZSBjaGFuZ2VzIGNvbnNpc3Qgc3RyaWN0bHkgb2YgZGVhZC9kZXByZWNhdGVkIGNvZGUgcmVtb3ZhbCBhbmQgc3RydWN0dXJhbCBzaW1wbGlmaWNhdGlvbnMuIE5vIG5ldyBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workfloww4xs2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 14:23:55 +0000 UTC FinishedAt: 2026-09-03 14:43:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "14811b1d9ba0a1658adf136a1173a150d82c74d6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "LRU_GEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "14811b1d9ba0a1658adf136a1173a150d82c74d6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1", "LRU_GEN" ], "series_id": "547a9786-308b-4ebf-bdfe-7bc02d03eb9c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_soft_limit_write", "mem_cgroup_soft_limit_read", "memcg1_uncharge_batch", "memcg1_commit_charge", "__memcg1_swapout", "lru_gen_rotate_memcg" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDssCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGUmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWQmIzM0OywKICAgICYjMzQ7bWVtY2cxX3VuY2hhcmdlX2JhdGNoJiMzNDssCiAgICAmIzM0O21lbWNnMV9jb21taXRfY2hhcmdlJiMzNDssCiAgICAmIzM0O19fbWVtY2cxX3N3YXBvdXQmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9yb3RhdGVfbWVtY2cmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVtb3ZlcyB0aGUgbGVnYWN5IGNncm91cCB2MSBzb2Z0LWxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtZW1jb250cm9sLCBtZW1jb250cm9sLXYxLCBhbmQgdm1zY2FuKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgZGVsZXRlcyB0aGUgc29mdCBsaW1pdCBSQi10cmVlIHRyYWNraW5nIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucywgYW5kIHRyYWNlcG9pbnRzLlxuMi4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBzb2Z0X2xpbWl0YCBhbmQgYHRhcmdldHNgIGZpZWxkcyBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBzaW1wbGlmeWluZyBwZXItY3B1IGV2ZW50IHJhdGVsaW1pdGluZyB0byBqdXN0IGB0aHJlc2hvbGRfdGFyZ2V0YC5cbjMuIEl0IHJlbW92ZXMgdGhlIHVudXNlZCBgbmlkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYCBhbmQgdW51c2VkIHNjYW5uaW5nIHN0YXRpc3RpY3MgdmFyaWFibGVzIGZyb20gcmVjbGFpbSBwYXRocyAoYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCkuXG5cblRoZSBjaGFuZ2VzIGNvbnNpc3Qgc3RyaWN0bHkgb2YgZGVhZC9kZXByZWNhdGVkIGNvZGUgcmVtb3ZhbCBhbmQgc3RydWN0dXJhbCBzaW1wbGlmaWNhdGlvbnMuIE5vIG5ldyBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBkZXByZWNhdGVzIGFuZCByZW1vdmVzIHRoZSBtZW1jZyB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFuZCBpdHMgYXNzb2NpYXRlZCByYnRyZWUgdHJhY2tpbmcuIFRoaXMgbW9kaWZpZXMgYWN0aXZlIE1NIGxvZ2ljIGluIG1lbWNnIHYxIGV2ZW50IHJhdGUtbGltaXRpbmcgYW5kIHVuY2hhcmdpbmcsIE11bHRpLUdlbiBMUlUgcm90YXRpb24sIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gdm1zY2FuLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmEwZGFjZGQ5NTZkZWY3NGVlMDA2MDUxZWQ4NjkyZDk1ZDU5YmJjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6NDI6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZGE2MjVkMmVkYjNiYS4uYzc5OTkyNjQzNTU2MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk1LDIwICYjNDM7OTUsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XG4gXHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzXHRcdFx0KmxydXZlY19zdGF0cztcbiBcdHN0cnVjdCBzaHJpbmtlcl9pbmZvIF9fcmN1XHQqc2hyaW5rZXJfaW5mbztcbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4tXHQvKlxuLVx0ICogTWVtY2ctdjEgb25seSBzdHVmZiBpbiBtaWRkbGUgYXMgYnVmZmVyIGJldHdlZW4gcmVhZCBtb3N0bHkgZmllbGRzXG4tXHQgKiBhbmQgdXBkYXRlIG9mdGVuIGZpZWxkcyB0byBhdm9pZCBmYWxzZSBzaGFyaW5nLiBJZiB2MSBzdHVmZiBpc1xuLVx0ICogbm90IHByZXNlbnQsIGFuIGV4cGxpY2l0IHBhZGRpbmcgaXMgbmVlZGVkLlxuLVx0ICovXG4tXG4tXHRzdHJ1Y3QgcmJfbm9kZVx0XHR0cmVlX25vZGU7XHQvKiBSQiB0cmVlIG5vZGUgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0dXNhZ2VfaW5fZXhjZXNzOy8qIFNldCB0byB0aGUgdmFsdWUgYnkgd2hpY2ggKi9cbi1cdFx0XHRcdFx0XHQvKiB0aGUgc29mdCBsaW1pdCBpcyBleGNlZWRlZCovXG4tXHRib29sXHRcdFx0b25fdHJlZTtcbi0jZWxzZVxuIFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDFfKTtcbi0jZW5kaWZcbiBcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG5AQCAtMjkzLDggJiM0MzsyODAsNiBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7XG4gXG4gXHRzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHUgX19wZXJjcHUgKmV2ZW50c19wZXJjcHU7XG4gXG4tXHR1bnNpZ25lZCBsb25nIHNvZnRfbGltaXQ7XG4tXG4gXHQvKiBwcm90ZWN0ZWQgYnkgbWVtY2dfb29tX2xvY2sgKi9cbiBcdGJvb2wgb29tX2xvY2s7XG4gXHRpbnQgdW5kZXJfb29tO1xuQEAgLTE5MjQsMTAgJiM0MzsxOTA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIC8qIENncm91cCB2MS1yZWxhdGVkIGRlY2xhcmF0aW9ucyAqL1xuIFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxuLVx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCk7XG4tXG4gYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5AQCAtMTk0OCwxNCAmIzQzOzE5MjksNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbiB9XG4gXG4gI2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovXG4tc3RhdGljIGlubGluZVxuLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tXHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICp0b3RhbF9zY2FubmVkKVxuLXtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggNjdjODRhOGE3MjU4My4uODRlMjM3ZjJjMTdkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC02MzgsMzUgJiM0Mzs2MzgsMzIgQEAgc3RydWN0IGxydV9nZW5fbW1fd2FsayB7XG4gICogRm9yIGVhY2ggbm9kZSwgbWVtY2dzIGFyZSBkaXZpZGVkIGludG8gdHdvIGdlbmVyYXRpb25zOiB0aGUgb2xkIGFuZCB0aGVcbiAgKiB5b3VuZy4gRm9yIGVhY2ggZ2VuZXJhdGlvbiwgbWVtY2dzIGFyZSByYW5kb21seSBzaGFyZGVkIGludG8gbXVsdGlwbGUgYmluc1xuICAqIHRvIGltcHJvdmUgc2NhbGFiaWxpdHkuIEZvciBlYWNoIGJpbiwgdGhlIGhsaXN0X251bGxzIGlzIHZpcnR1YWxseSBkaXZpZGVkXG4tICogaW50byB0aHJlZSBzZWdtZW50czogdGhlIGhlYWQsIHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC5cbiYjNDM7ICogaW50byB0d28gc2VnbWVudHM6IHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC5cbiAgKlxuICAqIEFuIG9ubGluaW5nIG1lbWNnIGlzIGFkZGVkIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkIGdlbmVyYXRpb24uXG4gICogVGhlIGV2aWN0aW9uIHN0YXJ0cyBhdCB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLiBUaGVcbiAgKiBwZXItbm9kZSBtZW1jZyBnZW5lcmF0aW9uIGNvdW50ZXIsIHdob3NlIHJlbWluZGVyIChtb2QgTUVNQ0dfTlJfR0VOUykgaW5kZXhlc1xuICAqIHRoZSBvbGQgZ2VuZXJhdGlvbiwgaXMgaW5jcmVtZW50ZWQgd2hlbiBhbGwgaXRzIGJpbnMgYmVjb21lIGVtcHR5LlxuICAqXG4tICogVGhlcmUgYXJlIGZvdXIgb3BlcmF0aW9uczpcbi0gKiAxLiBNRU1DR19MUlVfSEVBRCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4tICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcJiMzNDtzZWdcJiMzNDsgdG8gXCYjMzQ7aGVhZFwmIzM0Oztcbi0gKiAyLiBNRU1DR19MUlVfVEFJTCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4mIzQzOyAqIFRoZXJlIGFyZSB0aHJlZSBvcGVyYXRpb25zOlxuJiM0MzsgKiAxLiBNRU1DR19MUlVfVEFJTCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4gICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcJiMzNDtzZWdcJiMzNDsgdG8gXCYjMzQ7dGFpbFwmIzM0Oztcbi0gKiAzLiBNRU1DR19MUlVfT0xELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkXG4mIzQzOyAqIDIuIE1FTUNHX0xSVV9PTEQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGRcbiAgKiAgICBnZW5lcmF0aW9uLCB1cGRhdGVzIGl0cyBcJiMzNDtnZW5cJiMzNDsgdG8gXCYjMzQ7b2xkXCYjMzQ7IGFuZCByZXNldHMgaXRzIFwmIzM0O3NlZ1wmIzM0OyB0byBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuLSAqIDQuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlXG4mIzQzOyAqIDMuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlXG4gICogICAgeW91bmcgZ2VuZXJhdGlvbiwgdXBkYXRlcyBpdHMgXCYjMzQ7Z2VuXCYjMzQ7IHRvIFwmIzM0O3lvdW5nXCYjMzQ7IGFuZCByZXNldHMgaXRzIFwmIzM0O3NlZ1wmIzM0OyB0b1xuICAqICAgIFwmIzM0O2RlZmF1bHRcJiMzNDsuXG4gICpcbiAgKiBUaGUgZXZlbnRzIHRoYXQgdHJpZ2dlciB0aGUgYWJvdmUgb3BlcmF0aW9ucyBhcmU6XG4tICogMS4gRXhjZWVkaW5nIHRoZSBzb2Z0IGxpbWl0LCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfSEVBRDtcbi0gKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbG93LCB3aGljaCB0cmlnZ2Vyc1xuJiM0MzsgKiAxLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbG93LCB3aGljaCB0cmlnZ2Vyc1xuICAqICAgIE1FTUNHX0xSVV9UQUlMO1xuLSAqIDMuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4mIzQzOyAqIDIuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4gICogICAgdGhyZXNob2xkLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfVEFJTDtcbi0gKiA0LiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemVcbiYjNDM7ICogMy4gVGhlIHNlY29uZCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4gICogICAgdGhyZXNob2xkLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4tICogNS4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4tICogNi4gRmluaXNoaW5nIHRoZSBhZ2luZyBvbiB0aGUgZXZpY3Rpb24gcGF0aCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xuLSAqIDcuIE9mZmxpbmluZyBhIG1lbWNnLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfT0xELlxuJiM0MzsgKiA0LiBBdHRlbXB0aW5nIHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBtaW4sIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcbiYjNDM7ICogNS4gRmluaXNoaW5nIHRoZSBhZ2luZyBvbiB0aGUgZXZpY3Rpb24gcGF0aCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xuJiM0MzsgKiA2LiBPZmZsaW5pbmcgYSBtZW1jZywgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX09MRC5cbiAgKlxuICAqIE5vdGVzOlxuICAqIDEuIE1lbWNnIExSVSBvbmx5IGFwcGxpZXMgdG8gZ2xvYmFsIHJlY2xhaW0sIGFuZCB0aGUgcm91bmQtcm9iaW4gaW5jcmVtZW50aW5nXG5AQCAtNjk5LDcgJiM0Mzs2OTYsNiBAQCB2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4tdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuIHZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcbiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcbiB2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcbkBAIC03NDAsMTAgJiM0Mzs3MzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuaW5kZXggYjRiZjdiOGRlZjFmNS4uOGE4NzI5OTBiNGJlZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuQEAgLTIxNCwxMyAmIzQzOzIxNCw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19yZWNsYWltX2JlXG4gXG4gXHRUUF9BUkdTKGdmcF9mbGFncywgb3JkZXIsIG1lbWNnKVxuICk7XG4tXG4tREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2JlZ2luLFxuLVxuLVx0VFBfUFJPVE8oZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyksXG4tXG4tXHRUUF9BUkdTKGdmcF9mbGFncywgb3JkZXIsIG1lbWNnKVxuLSk7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIERFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSxcbkBAIC0yNjAsMTMgJiM0MzsyNTMsNiBAQCBERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3JlY2xhaW1fZW5kLFxuIFxuIFx0VFBfQVJHUyhucl9yZWNsYWltZWQsIG1lbWNnKVxuICk7XG4tXG4tREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9lbmRfdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9lbmQsXG4tXG4tXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSxcbi1cbi1cdFRQX0FSR1MobnJfcmVjbGFpbWVkLCBtZW1jZylcbi0pO1xuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiBUUkFDRV9FVkVOVChtbV9zaHJpbmtfc2xhYl9zdGFydCxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggNWNjMjIwZGI5MDc2Ni4uZTE2ZjEyNTBiMjVjOCAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC03OCwxMCAmIzQzOzc4LDYgQEAgdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXG4gXHRcdFx0XHRcdCAgIGludCAqc3dhcHBpbmVzcyk7XG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuLVx0XHRcdFx0ICAgICBwZ19kYXRhX3QgKnBnZGF0LFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcbiBcbiAjaWZkZWYgQ09ORklHX05VTUFcbiBleHRlcm4gaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW87XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCAwNWVmNTVjYWU0ZGM2Li5iZjJjN2Q1M2IwMWIxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC0xNywzMCAmIzQzOzE3LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtzd2FwX3RhYmxlLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDttZW1jb250cm9sLXYxLmhcJiMzNDtcbiBcbi0vKlxuLSAqIENncm91cHMgYWJvdmUgdGhlaXIgbGltaXRzIGFyZSBtYWludGFpbmVkIGluIGEgUkItVHJlZSwgaW5kZXBlbmRlbnQgb2Zcbi0gKiB0aGVpciBoaWVyYXJjaHkgcmVwcmVzZW50YXRpb25cbi0gKi9cbi1cbi1zdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlIHtcbi1cdHN0cnVjdCByYl9yb290IHJiX3Jvb3Q7XG4tXHRzdHJ1Y3QgcmJfbm9kZSAqcmJfcmlnaHRtb3N0O1xuLVx0c3BpbmxvY2tfdCBsb2NrO1xuLX07XG4tXG4tc3RydWN0IG1lbV9jZ3JvdXBfdHJlZSB7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICpyYl90cmVlX3Blcl9ub2RlW01BWF9OVU1OT0RFU107XG4tfTtcbi1cbi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZSBzb2Z0X2xpbWl0X3RyZWUgX19yZWFkX21vc3RseTtcbi1cbi0vKlxuLSAqIE1heGltdW0gbG9vcHMgaW4gbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0oKSwgdXNlZCBmb3Igc29mdFxuLSAqIGxpbWl0IHJlY2xhaW0gdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcywgaWYgdGhleSBldmVyIG9jY3VyLlxuLSAqL1xuLSNkZWZpbmVcdE1FTV9DR1JPVVBfTUFYX1JFQ0xBSU1fTE9PUFNcdFx0MTAwXG4tI2RlZmluZVx0TUVNX0NHUk9VUF9NQVhfU09GVF9MSU1JVF9SRUNMQUlNX0xPT1BTXHQyXG4tXG4gLyogZm9yIE9PTSAqL1xuIHN0cnVjdCBtZW1fY2dyb3VwX2V2ZW50ZmRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG5AQCAtMTA2LDMwMSAmIzQzOzgyLDYgQEAgc3RhdGljIHN0cnVjdCBsb2NrZGVwX21hcCBtZW1jZ19vb21fbG9ja19kZXBfbWFwID0ge1xuIFxuIERFRklORV9TUElOTE9DSyhtZW1jZ19vb21fbG9jayk7XG4gXG4tc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6LFxuLVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBuZXdfdXNhZ2VfaW5fZXhjZXNzKVxuLXtcbi1cdHN0cnVjdCByYl9ub2RlICoqcCA9IFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdC5yYl9ub2RlO1xuLVx0c3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXpfbm9kZTtcbi1cdGJvb2wgcmlnaHRtb3N0ID0gdHJ1ZTtcbi1cbi1cdGlmIChtei1cdTAwM2Vvbl90cmVlKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MgPSBuZXdfdXNhZ2VfaW5fZXhjZXNzO1xuLVx0aWYgKCFtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MpXG4tXHRcdHJldHVybjtcbi1cdHdoaWxlICgqcCkge1xuLVx0XHRwYXJlbnQgPSAqcDtcbi1cdFx0bXpfbm9kZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsXG4tXHRcdFx0XHRcdHRyZWVfbm9kZSk7XG4tXHRcdGlmIChtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MgXHUwMDNjIG16X25vZGUtXHUwMDNldXNhZ2VfaW5fZXhjZXNzKSB7XG4tXHRcdFx0cCA9IFx1MDAyNigqcCktXHUwMDNlcmJfbGVmdDtcbi1cdFx0XHRyaWdodG1vc3QgPSBmYWxzZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwID0gXHUwMDI2KCpwKS1cdTAwM2VyYl9yaWdodDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0aWYgKHJpZ2h0bW9zdClcbi1cdFx0bWN0ei1cdTAwM2VyYl9yaWdodG1vc3QgPSBcdTAwMjZtei1cdTAwM2V0cmVlX25vZGU7XG4tXG4tXHRyYl9saW5rX25vZGUoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlLCBwYXJlbnQsIHApO1xuLVx0cmJfaW5zZXJ0X2NvbG9yKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSwgXHUwMDI2bWN0ei1cdTAwM2VyYl9yb290KTtcbi1cdG16LVx1MDAzZW9uX3RyZWUgPSB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteixcbi1cdFx0XHRcdFx0IHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0aWYgKCFtei1cdTAwM2Vvbl90cmVlKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlID09IG1jdHotXHUwMDNlcmJfcmlnaHRtb3N0KVxuLVx0XHRtY3R6LVx1MDAzZXJiX3JpZ2h0bW9zdCA9IHJiX3ByZXYoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlKTtcbi1cbi1cdHJiX2VyYXNlKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSwgXHUwMDI2bWN0ei1cdTAwM2VyYl9yb290KTtcbi1cdG16LVx1MDAzZW9uX3RyZWUgPSBmYWxzZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0X19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLX1cbi1cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzb2Z0X2xpbWl0X2V4Y2VzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSk7XG4tXHR1bnNpZ25lZCBsb25nIHNvZnRfbGltaXQgPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNlc29mdF9saW1pdCk7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2VzcyA9IDA7XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIHNvZnRfbGltaXQpXG4tXHRcdGV4Y2VzcyA9IG5yX3BhZ2VzIC0gc29mdF9saW1pdDtcbi1cbi1cdHJldHVybiBleGNlc3M7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIG1lbWNnMV91cGRhdGVfdHJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBleGNlc3M7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6O1xuLVxuLVx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG4tXHRcdGlmIChzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZykpXG4tXHRcdFx0bHJ1X2dlbl9zb2Z0X3JlY2xhaW0obWVtY2csIG5pZCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdG1jdHogPSBzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtuaWRdO1xuLVx0aWYgKCFtY3R6KVxuLVx0XHRyZXR1cm47XG4tXHQvKlxuLVx0ICogTmVjZXNzYXJ5IHRvIHVwZGF0ZSBhbGwgYW5jZXN0b3JzIHdoZW4gaGllcmFyY2h5IGlzIHVzZWQuXG4tXHQgKiBiZWNhdXNlIHRoZWlyIGV2ZW50IGNvdW50ZXIgaXMgbm90IHRvdWNoZWQuXG4tXHQgKi9cbi1cdGZvciAoOyBtZW1jZzsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpIHtcbi1cdFx0bXogPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdO1xuLVx0XHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZyk7XG4tXHRcdC8qXG4tXHRcdCAqIFdlIGhhdmUgdG8gdXBkYXRlIHRoZSB0cmVlIGlmIG16IGlzIG9uIFJCLXRyZWUgb3Jcbi1cdFx0ICogbWVtIGlzIG92ZXIgaXRzIHNvZnRsaW1pdC5cbi1cdFx0ICovXG4tXHRcdGlmIChleGNlc3MgfHwgbXotXHUwMDNlb25fdHJlZSkge1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0ei1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdFx0LyogaWYgb24tdHJlZSwgcmVtb3ZlIGl0ICovXG4tXHRcdFx0aWYgKG16LVx1MDAzZW9uX3RyZWUpXG4tXHRcdFx0XHRfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEluc2VydCBhZ2Fpbi4gbXotXHUwMDNldXNhZ2VfaW5fZXhjZXNzIHdpbGwgYmUgdXBkYXRlZC5cbi1cdFx0XHQgKiBJZiBleGNlc3MgaXMgMCwgbm8gdHJlZSBvcHMuXG4tXHRcdFx0ICovXG4tXHRcdFx0X19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChteiwgbWN0eiwgZXhjZXNzKTtcbi1cdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHR9XG4tXHR9XG4tfVxuLVxuLXZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6O1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0aW50IG5pZDtcbi1cbi1cdGZvcl9lYWNoX25vZGUobmlkKSB7XG4tXHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXTtcbi1cdFx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW25pZF07XG4tXHRcdGlmIChtY3R6KVxuLVx0XHRcdG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdH1cbi19XG4tXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpcbi1fX21lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUoc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eilcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXG4tcmV0cnk6XG4tXHRteiA9IE5VTEw7XG4tXHRpZiAoIW1jdHotXHUwMDNlcmJfcmlnaHRtb3N0KVxuLVx0XHRnb3RvIGRvbmU7XHRcdC8qIE5vdGhpbmcgdG8gcmVjbGFpbSBmcm9tICovXG4tXG4tXHRteiA9IHJiX2VudHJ5KG1jdHotXHUwMDNlcmJfcmlnaHRtb3N0LFxuLVx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgdHJlZV9ub2RlKTtcbi1cdC8qXG4tXHQgKiBSZW1vdmUgdGhlIG5vZGUgbm93IGJ1dCBzb21lb25lIGVsc2UgY2FuIGFkZCBpdCBiYWNrLFxuLVx0ICogd2Ugd2lsbCB0byBhZGQgaXQgYmFjayBhdCB0aGUgZW5kIG9mIHJlY2xhaW0gdG8gaXRzIGNvcnJlY3Rcbi1cdCAqIHBvc2l0aW9uIGluIHRoZSB0cmVlLlxuLVx0ICovXG4tXHRfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdGlmICghc29mdF9saW1pdF9leGNlc3MobXotXHUwMDNlbWVtY2cpIHx8XG4tXHQgICAgIWNzc190cnlnZXQoXHUwMDI2bXotXHUwMDNlbWVtY2ctXHUwMDNlY3NzKSlcbi1cdFx0Z290byByZXRyeTtcbi1kb25lOlxuLVx0cmV0dXJuIG16O1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKlxuLW1lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUoc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eilcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXHRteiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZtY3R6LVx1MDAzZWxvY2spO1xuLVx0cmV0dXJuIG16O1xuLX1cbi1cbi1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxuLVx0XHRcdFx0ICAgcGdfZGF0YV90ICpwZ2RhdCxcbi1cdFx0XHRcdCAgIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZClcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqdmljdGltID0gTlVMTDtcbi1cdGludCB0b3RhbCA9IDA7XG4tXHRpbnQgbG9vcCA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2Vzcztcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHJlY2xhaW0gPSB7XG4tXHRcdC5wZ2RhdCA9IHBnZGF0LFxuLVx0fTtcbi1cbi1cdGV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpO1xuLVxuLVx0d2hpbGUgKDEpIHtcbi1cdFx0dmljdGltID0gbWVtX2Nncm91cF9pdGVyKHJvb3RfbWVtY2csIHZpY3RpbSwgXHUwMDI2cmVjbGFpbSk7XG4tXHRcdGlmICghdmljdGltKSB7XG4tXHRcdFx0bG9vcCYjNDM7JiM0Mzs7XG4tXHRcdFx0aWYgKGxvb3AgXHUwMDNlPSAyKSB7XG4tXHRcdFx0XHQvKlxuLVx0XHRcdFx0ICogSWYgd2UgaGF2ZSBub3QgYmVlbiBhYmxlIHRvIHJlY2xhaW1cbi1cdFx0XHRcdCAqIGFueXRoaW5nLCBpdCBtaWdodCBiZWNhdXNlIHRoZXJlIGFyZVxuLVx0XHRcdFx0ICogbm8gcmVjbGFpbWFibGUgcGFnZXMgdW5kZXIgdGhpcyBoaWVyYXJjaHlcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0aWYgKCF0b3RhbClcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHQvKlxuLVx0XHRcdFx0ICogV2Ugd2FudCB0byBkbyBtb3JlIHRhcmdldGVkIHJlY2xhaW0uXG4tXHRcdFx0XHQgKiBleGNlc3MgXHUwMDNlXHUwMDNlIDIgaXMgbm90IHRvIGV4Y2Vzc2l2ZSBzbyBhcyB0b1xuLVx0XHRcdFx0ICogcmVjbGFpbSB0b28gbXVjaCwgbm9yIHRvbyBsZXNzIHRoYXQgd2Uga2VlcFxuLVx0XHRcdFx0ICogY29taW5nIGJhY2sgdG8gcmVjbGFpbSBmcm9tIHRoaXMgY2dyb3VwXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGlmICh0b3RhbCBcdTAwM2U9IChleGNlc3MgXHUwMDNlXHUwMDNlIDIpIHx8XG4tXHRcdFx0XHRcdChsb29wIFx1MDAzZSBNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTKSlcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXHRcdHRvdGFsICYjNDM7PSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxuLVx0XHRcdFx0XHRwZ2RhdCwgXHUwMDI2bnJfc2Nhbm5lZCk7XG4tXHRcdCp0b3RhbF9zY2FubmVkICYjNDM7PSBucl9zY2FubmVkO1xuLVx0XHRpZiAoIXNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpKVxuLVx0XHRcdGJyZWFrO1xuLVx0fVxuLVx0bWVtX2Nncm91cF9pdGVyX2JyZWFrKHJvb3RfbWVtY2csIHZpY3RpbSk7XG4tXHRyZXR1cm4gdG90YWw7XG4tfVxuLVxuLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tXHRcdFx0XHRcdCAgICBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSAwO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LCAqbmV4dF9teiA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcbi1cdGludCBsb29wID0gMDtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2Vzcztcbi1cbi1cdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRpZiAob3JkZXIgXHUwMDNlIDApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuLVxuLVx0Lypcbi1cdCAqIERvIG5vdCBldmVuIGJvdGhlciB0byBjaGVjayB0aGUgbGFyZ2VzdCBub2RlIGlmIHRoZSByb290XG4tXHQgKiBpcyBlbXB0eS4gRG8gaXQgbG9ja2xlc3MgdG8gcHJldmVudCBsb2NrIGJvdW5jaW5nLiBSYWNlc1xuLVx0ICogYXJlIGFjY2VwdGFibGUgYXMgc29mdCBsaW1pdCBpcyBiZXN0IGVmZm9ydCBhbnl3YXkuXG4tXHQgKi9cbi1cdGlmICghbWN0eiB8fCBSQl9FTVBUWV9ST09UKFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0Lypcbi1cdCAqIFRoaXMgbG9vcCBjYW4gcnVuIGEgd2hpbGUsIHNwZWNpYWxseSBpZiBtZW1fY2dyb3VwJiMzOTtzIGNvbnRpbnVvdXNseVxuLVx0ICoga2VlcCBleGNlZWRpbmcgdGhlaXIgc29mdCBsaW1pdCBhbmQgcHV0dGluZyB0aGUgc3lzdGVtIHVuZGVyXG4tXHQgKiBwcmVzc3VyZVxuLVx0ICovXG4tXHRkbyB7XG4tXHRcdGlmIChuZXh0X216KVxuLVx0XHRcdG16ID0gbmV4dF9tejtcbi1cdFx0ZWxzZVxuLVx0XHRcdG16ID0gbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTtcbi1cdFx0aWYgKCFteilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0cmVjbGFpbWVkID0gbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0obXotXHUwMDNlbWVtY2csIHBnZGF0LFxuLVx0XHRcdFx0XHRcdCAgICBnZnBfbWFzaywgdG90YWxfc2Nhbm5lZCk7XG4tXHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuLVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIElmIHdlIGZhaWxlZCB0byByZWNsYWltIGFueXRoaW5nIGZyb20gdGhpcyBtZW1vcnkgY2dyb3VwXG4tXHRcdCAqIGl0IGlzIHRpbWUgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBjZ3JvdXBcbi1cdFx0ICovXG4tXHRcdG5leHRfbXogPSBOVUxMO1xuLVx0XHRpZiAoIXJlY2xhaW1lZClcbi1cdFx0XHRuZXh0X216ID0gX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopO1xuLVxuLVx0XHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhtei1cdTAwM2VtZW1jZyk7XG4tXHRcdC8qXG4tXHRcdCAqIE9uZSBzY2hvb2wgb2YgdGhvdWdodCBzYXlzIHRoYXQgd2Ugc2hvdWxkIG5vdCBhZGRcbi1cdFx0ICogYmFjayB0aGUgbm9kZSB0byB0aGUgdHJlZSBpZiByZWNsYWltIHJldHVybnMgMC5cbi1cdFx0ICogQnV0IG91ciByZWNsYWltIGNvdWxkIHJldHVybiAwLCBzaW1wbHkgYmVjYXVzZSBkdWVcbi1cdFx0ICogdG8gcHJpb3JpdHkgd2UgYXJlIGV4cG9zaW5nIGEgc21hbGxlciBzdWJzZXQgb2Zcbi1cdFx0ICogbWVtb3J5IHRvIHJlY2xhaW0gZnJvbS4gQ29uc2lkZXIgdGhpcyBhcyBhIGxvbmdlclxuLVx0XHQgKiB0ZXJtIFRPRE8uXG4tXHRcdCAqL1xuLVx0XHQvKiBJZiBleGNlc3MgPT0gMCwgbm8gdHJlZSBvcHMgKi9cbi1cdFx0X19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChteiwgbWN0eiwgZXhjZXNzKTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXHRcdGNzc19wdXQoXHUwMDI2bXotXHUwMDNlbWVtY2ctXHUwMDNlY3NzKTtcbi1cdFx0bG9vcCYjNDM7JiM0Mzs7XG4tXHRcdC8qXG4tXHRcdCAqIENvdWxkIG5vdCByZWNsYWltIGFueXRoaW5nIGFuZCB0aGVyZSBhcmUgbm8gbW9yZVxuLVx0XHQgKiBtZW0gY2dyb3VwcyB0byB0cnkgb3Igd2Ugc2VlbSB0byBiZSBsb29waW5nIHdpdGhvdXRcbi1cdFx0ICogcmVjbGFpbWluZyBhbnl0aGluZy5cbi1cdFx0ICovXG4tXHRcdGlmICghbnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNlxuLVx0XHRcdChuZXh0X216ID09IE5VTEwgfHxcbi1cdFx0XHRsb29wIFx1MDAzZSBNRU1fQ0dST1VQX01BWF9TT0ZUX0xJTUlUX1JFQ0xBSU1fTE9PUFMpKVxuLVx0XHRcdGJyZWFrO1xuLVx0fSB3aGlsZSAoIW5yX3JlY2xhaW1lZCk7XG4tXHRpZiAobmV4dF9teilcbi1cdFx0Y3NzX3B1dChcdTAwMjZuZXh0X216LVx1MDAzZW1lbWNnLVx1MDAzZWNzcyk7XG4tXHRyZXR1cm4gbnJfcmVjbGFpbWVkO1xuLX1cbi1cbiBzdGF0aWMgdTY0IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcmVhZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxuIFx0XHRcdFx0c3RydWN0IGNmdHlwZSAqY2Z0KVxuIHtcbkBAIC01MTEsNyAmIzQzOzE5Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdH1cbiB9XG4gXG4tLyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgXHUwMDI2IHNvZnRsaW1pdCB0cmVlIHVwZGF0ZXMgKi9cbiYjNDM7LyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgKi9cbiBcbiAvKlxuICAqIFBlciBtZW1jZyBldmVudCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IHBhZ2Vpbi9wYWdlb3V0LiBXaXRoIFRIUCxcbkBAIC01MTksMTUgJiM0MzsyMDAsOSBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RocmVzaG9sZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gICogdG8gdHJpZ2dlciBzb21lIHBlcmlvZGljIGV2ZW50cy4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGJldHRlclxuICAqIHRoYW4gdXNpbmcgamlmZmllcyBldGMuIHRvIGhhbmRsZSBwZXJpb2RpYyBtZW1jZyBldmVudC5cbiAgKi9cbi1lbnVtIG1lbV9jZ3JvdXBfZXZlbnRzX3RhcmdldCB7XG4tXHRNRU1fQ0dST1VQX1RBUkdFVF9USFJFU0gsXG4tXHRNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQsXG4tXHRNRU1fQ0dST1VQX05UQVJHRVRTLFxuLX07XG4tXG4gc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1IHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZV9ldmVudHM7XG4tXHR1bnNpZ25lZCBsb25nIHRhcmdldHNbTUVNX0NHUk9VUF9OVEFSR0VUU107XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aHJlc2hvbGRfdGFyZ2V0O1xuIH07XG4gXG4gc3RhdGljIHZvaWQgbWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKVxuQEAgLTU0NCw1MyAmIzQzOzIxOSwyOSBAQCBzdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpXG4gfVxuIFxuICNkZWZpbmUgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUIDEyOFxuLSNkZWZpbmUgU09GVExJTUlUX0VWRU5UU19UQVJHRVQgMTAyNFxuIFxuLXN0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0ZW51bSBtZW1fY2dyb3VwX2V2ZW50c190YXJnZXQgdGFyZ2V0KVxuJiM0MztzdGF0aWMgYm9vbCBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHZhbCwgbmV4dDtcbiBcbiBcdHZhbCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZW5yX3BhZ2VfZXZlbnRzKTtcbi1cdG5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0YXJnZXRzW3RhcmdldF0pO1xuJiM0MztcdG5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0aHJlc2hvbGRfdGFyZ2V0KTtcbiBcdC8qIGZyb20gdGltZV9hZnRlcigpIGluIGppZmZpZXMuaCAqL1xuIFx0aWYgKChsb25nKShuZXh0IC0gdmFsKSBcdTAwM2MgMCkge1xuLVx0XHRzd2l0Y2ggKHRhcmdldCkge1xuLVx0XHRjYXNlIE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSDpcbi1cdFx0XHRuZXh0ID0gdmFsICYjNDM7IFRIUkVTSE9MRFNfRVZFTlRTX1RBUkdFVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQ6XG4tXHRcdFx0bmV4dCA9IHZhbCAmIzQzOyBTT0ZUTElNSVRfRVZFTlRTX1RBUkdFVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHRfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNldGFyZ2V0c1t0YXJnZXRdLCBuZXh0KTtcbiYjNDM7XHRcdF9fdGhpc19jcHVfd3JpdGUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0aHJlc2hvbGRfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdCB2YWwgJiM0MzsgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUKTtcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLS8qXG4tICogQ2hlY2sgZXZlbnRzIGluIG9yZGVyLlxuLSAqXG4tICovXG4tc3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4mIzQzO3N0YXRpYyB2b2lkIG1lbWNnMV9jaGVja19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogdGhyZXNob2xkIGV2ZW50IGlzIHRyaWdnZXJlZCBpbiBmaW5lciBncmFpbiB0aGFuIHNvZnQgbGltaXQgKi9cbi1cdGlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLFxuLVx0XHRcdFx0XHRcdE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCkpKSB7XG4tXHRcdGJvb2wgZG9fc29mdGxpbWl0O1xuLVxuLVx0XHRkb19zb2Z0bGltaXQgPSBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLFxuLVx0XHRcdFx0XHRcdE1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVCk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KG1lbWNnMV9ldmVudF9yYXRlbGltaXQobWVtY2cpKSlcbiBcdFx0bWVtX2Nncm91cF90aHJlc2hvbGQobWVtY2cpO1xuLVx0XHRpZiAodW5saWtlbHkoZG9fc29mdGxpbWl0KSlcbi1cdFx0XHRtZW1jZzFfdXBkYXRlX3RyZWUobWVtY2csIG5pZCk7XG4tXHR9XG4gfVxuIFxuIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuQEAgLTU5OSw3ICYjNDM7MjUwLDcgQEAgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXG4gXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4gXHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4tXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcbiYjNDM7XHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG5AQCAtNjcyLDcgJiM0MzszMjMsNyBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiBcdFZNX1dBUk5fT05fSVJRU19FTkFCTEVEKCk7XG4gXHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIFx0cHJlZW1wdF9lbmFibGVfbmVzdGVkKCk7XG4tXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcbiYjNDM7XHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0b2JqX2Nncm91cF9wdXQob2JqY2cpO1xuQEAgLTcyNiwxNCAmIzQzOzM3NywxNCBAQCB2b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiAjZW5kaWZcbiBcbiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcbi1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSwgaW50IG5pZClcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnkpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGNvdW50X21lbWNnX2V2ZW50cyhtZW1jZywgUEdQR09VVCwgcGdwZ291dCk7XG4gXHRfX3RoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZW5yX3BhZ2VfZXZlbnRzLCBucl9tZW1vcnkpO1xuLVx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgbmlkKTtcbiYjNDM7XHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG5AQCAtMjU2NiwyMiAmIzQzOzIyMTcsMyBAQCB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0ZnJlZV9wZXJjcHUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdSk7XG4gfVxuLVxuLXN0YXRpYyBpbnQgX19pbml0IG1lbWNnMV9pbml0KHZvaWQpXG4te1xuLVx0aW50IG5vZGU7XG4tXG4tXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcbi1cdFx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqcnRwbjtcbi1cbi1cdFx0cnRwbiA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKnJ0cG4pLCBHRlBfS0VSTkVMLCBub2RlKTtcbi1cbi1cdFx0cnRwbi1cdTAwM2VyYl9yb290ID0gUkJfUk9PVDtcbi1cdFx0cnRwbi1cdTAwM2VyYl9yaWdodG1vc3QgPSBOVUxMO1xuLVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZydHBuLVx1MDAzZWxvY2spO1xuLVx0XHRzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtub2RlXSA9IHJ0cG47XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tc3Vic3lzX2luaXRjYWxsKG1lbWNnMV9pbml0KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmhcbmluZGV4IDFlMzk0MjY5YzYxM2QuLmI5YTIxZjBmZDJjM2EgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuaFxuQEAgLTQxLDEyICYjNDM7NDEsNiBAQCBib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi12b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzb2Z0X2xpbWl0LCBQQUdFX0NPVU5URVJfTUFYKTtcbi19XG4gXG4gc3RydWN0IGNncm91cF90YXNrc2V0O1xuIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5AQCAtNjUsNyAmIzQzOzU5LDcgQEAgdm9pZCBtZW1jZzFfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiBcbiB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gdm9pZCBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXG4tXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnksIGludCBuaWQpO1xuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7XG4gXG4gdm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcyk7XG4gdm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbkBAIC05OCw4ICYjNDM7OTIsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHsgcmV0dXJuIHRydWU7XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9tZW1jZ19pbml0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXG5AQCAtMTE1LDcgJiM0MzsxMDcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcbi1cdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKSB7fVxuJiM0MztcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcykge31cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IGJmZDBhNzRmYWM5MjMuLjMwNjM2YjlkOTY3MzkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTQyNTcsNyAmIzQzOzQyNTcsNiBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKG1lbWNnKTtcbiBcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xuLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xuICNpZmRlZiBDT05GSUdfWlNXQVBcbiBcdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG4gXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XG5AQCAtNDQyOSw3ICYjNDM7NDQyOCw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBcbiBcdHZtcHJlc3N1cmVfY2xlYW51cChcdTAwMjZtZW1jZy1cdTAwM2V2bXByZXNzdXJlKTtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bWVtY2ctXHUwMDNlaGlnaF93b3JrKTtcbi1cdG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhtZW1jZyk7XG4gXHRmcmVlX3Nocmlua2VyX2luZm8obWVtY2cpO1xuIFx0bWVtX2Nncm91cF9mcmVlKG1lbWNnKTtcbiB9XG5AQCAtNDQ2NSw3ICYjNDM7NDQ2Myw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRwYWdlX2NvdW50ZXJfc2V0X21pbihcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIDApO1xuIFx0cGFnZV9jb3VudGVyX3NldF9sb3coXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCAwKTtcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xuLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xuIFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xuIFx0bWVtY2dfd2JfZG9tYWluX3NpemVfY2hhbmdlZChtZW1jZyk7XG4gfVxuQEAgLTUzMzEsNyAmIzQzOzUzMjgsNiBAQCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5O1xuIFx0dW5zaWduZWQgbG9uZyBwZ3Bnb3V0O1xuIFx0dW5zaWduZWQgbG9uZyBucl9rbWVtO1xuLVx0aW50IG5pZDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmNoYXJnZV9nYXRoZXJfY2xlYXIoc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG5AQCAtNTM1NCw3ICYjNDM7NTM1MCw3IEBAIHN0YXRpYyB2b2lkIHVuY2hhcmdlX2JhdGNoKGNvbnN0IHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuIFx0XHRtZW1jZzFfb29tX3JlY292ZXIobWVtY2cpO1xuIFx0fVxuIFxuLVx0bWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy1cdTAwM2VwZ3Bnb3V0LCB1Zy1cdTAwM2Vucl9tZW1vcnksIHVnLVx1MDAzZW5pZCk7XG4mIzQzO1x0bWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy1cdTAwM2VwZ3Bnb3V0LCB1Zy1cdTAwM2Vucl9tZW1vcnkpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHQvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIHVuY2hhcmdlX2ZvbGlvICovXG5AQCAtNTM4Myw3ICYjNDM7NTM3OSw2IEBAIHN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuIFx0XHRcdHVuY2hhcmdlX2dhdGhlcl9jbGVhcih1Zyk7XG4gXHRcdH1cbiBcdFx0dWctXHUwMDNlb2JqY2cgPSBvYmpjZztcbi1cdFx0dWctXHUwMDNlbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbiBcbiBcdFx0LyogcGFpcnMgd2l0aCBvYmpfY2dyb3VwX3B1dCBpbiB1bmNoYXJnZV9iYXRjaCAqL1xuIFx0XHRvYmpfY2dyb3VwX2dldChvYmpjZyk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmRkMTMyOTlhMDRhOS4uZGViMDg3YzU3MDA3ZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTQzNzMsNyAmIzQzOzQzNzMsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gLyogc2VlIHRoZSBjb21tZW50IG9uIE1FTUNHX05SX0dFTlMgKi9cbiBlbnVtIHtcbiBcdE1FTUNHX0xSVV9OT1AsXG4tXHRNRU1DR19MUlVfSEVBRCxcbiBcdE1FTUNHX0xSVV9UQUlMLFxuIFx0TUVNQ0dfTFJVX09MRCxcbiBcdE1FTUNHX0xSVV9ZT1VORyxcbkBAIC00Mzk1LDkgJiM0Mzs0Mzk0LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4gXHRuZXcgPSBvbGQgPSBscnV2ZWMtXHUwMDNlbHJ1Z2VuLmdlbjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXG4tXHRpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQpXG4tXHRcdHNlZyA9IE1FTUNHX0xSVV9IRUFEO1xuLVx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpXG4mIzQzO1x0aWYgKG9wID09IE1FTUNHX0xSVV9UQUlMKVxuIFx0XHRzZWcgPSBNRU1DR19MUlVfVEFJTDtcbiBcdGVsc2UgaWYgKG9wID09IE1FTUNHX0xSVV9PTEQpXG4gXHRcdG5ldyA9IGdldF9tZW1jZ19nZW4ocGdkYXQtXHUwMDNlbWVtY2dfbHJ1LnNlcSk7XG5AQCAtNDQxMSw3ICYjNDM7NDQwOCw3IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuIFxuIFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QpO1xuIFxuLVx0aWYgKG9wID09IE1FTUNHX0xSVV9IRUFEIHx8IG9wID09IE1FTUNHX0xSVV9PTEQpXG4mIzQzO1x0aWYgKG9wID09IE1FTUNHX0xSVV9PTEQpXG4gXHRcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QsIFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XG4gXHRlbHNlXG4gXHRcdGhsaXN0X251bGxzX2FkZF90YWlsX3JjdShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QsIFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XG5AQCAtNDQ4OSwxNSAmIzQzOzQ0ODYsNiBAQCB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHR9XG4gfVxuIFxuLXZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLXtcbi1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG4tXG4tXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xuLVx0aWYgKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpXG4tXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xuLX1cbi1cbiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuIHtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG5AQCAtNjQzOSw4ICYjNDM7NjQyNyw2IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3Qgem9uZXJlZiAqejtcbiBcdHN0cnVjdCB6b25lICp6b25lO1xuLVx0dW5zaWduZWQgbG9uZyBucl9zb2Z0X3JlY2xhaW1lZDtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9zY2FubmVkO1xuIFx0Z2ZwX3Qgb3JpZ19tYXNrO1xuIFx0cGdfZGF0YV90ICpsYXN0X3BnZGF0ID0gTlVMTDtcbiBcdHBnX2RhdGFfdCAqZmlyc3RfcGdkYXQgPSBOVUxMO1xuQEAgLTY0ODIsMzUgJiM0Mzs2NDY4LDE3IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdFx0XHRcdHNjLVx1MDAzZWNvbXBhY3Rpb25fcmVhZHkgPSB0cnVlO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlXG4tXHRcdFx0ICogem9uZWxpc3QgaXMgb3JkZXJlZCBieSB6b25lIChub3QgdGhlIGRlZmF1bHQpIHRoZW4gYVxuLVx0XHRcdCAqIG5vZGUgbWF5IGJlIHNocnVuayBtdWx0aXBsZSB0aW1lcyBidXQgaW4gdGhhdCBjYXNlXG4tXHRcdFx0ICogdGhlIHVzZXIgcHJlZmVycyBsb3dlciB6b25lcyBiZWluZyBwcmVzZXJ2ZWQuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUaGlzIHN0ZWFscyBwYWdlcyBmcm9tIG1lbW9yeSBjZ3JvdXBzIG92ZXIgc29mdGxpbWl0XG4tXHRcdFx0ICogYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXMgYW5kXG4tXHRcdFx0ICogc2Nhbm5lZCBwYWdlcy4gVGhpcyB3b3JrcyBmb3IgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZVxuLVx0XHRcdCAqIGFuZCBiYWxhbmNpbmcsIG5vdCBmb3IgYSBtZW1jZyYjMzk7cyBsaW1pdC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRucl9zb2Z0X3NjYW5uZWQgPSAwO1xuLVx0XHRcdG5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbSh6b25lLVx1MDAzZXpvbmVfcGdkYXQsXG4tXHRcdFx0XHRcdFx0XHRcdCAgICAgIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnJfc29mdF9zY2FubmVkKTtcbi1cdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IG5yX3NvZnRfcmVjbGFpbWVkO1xuLVx0XHRcdHNjLVx1MDAzZW5yX3NjYW5uZWQgJiM0Mzs9IG5yX3NvZnRfc2Nhbm5lZDtcbi1cdFx0XHQvKiBuZWVkIHNvbWUgY2hlY2sgZm9yIGF2b2lkIG1vcmUgc2hyaW5rX3pvbmUoKSAqL1xuIFx0XHR9XG4gXG4gXHRcdGlmICghZmlyc3RfcGdkYXQpXG4gXHRcdFx0Zmlyc3RfcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG4gXG4tXHRcdC8qIFNlZSBjb21tZW50IGFib3V0IHNhbWUgY2hlY2sgZm9yIGdsb2JhbCByZWNsYWltIGFib3ZlICovXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlIHpvbmVsaXN0IGlzXG4mIzQzO1x0XHQgKiBvcmRlcmVkIGJ5IHpvbmUgKG5vdCB0aGUgZGVmYXVsdCkgdGhlbiBhIG5vZGUgbWF5IGJlIHNocnVua1xuJiM0MztcdFx0ICogbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZSB0aGUgdXNlciBwcmVmZXJzIGxvd2VyIHpvbmVzXG4mIzQzO1x0XHQgKiBiZWluZyBwcmVzZXJ2ZWQuXG4mIzQzO1x0XHQgKi9cbiBcdFx0aWYgKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRsYXN0X3BnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xuQEAgLTY4MjUsNDcgJiM0Mzs2NzkzLDYgQEAgdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4gXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFxuLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi1cdFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpXG4te1xuLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG4tXHRcdC5ucl90b19yZWNsYWltID0gU1dBUF9DTFVTVEVSX01BWCxcbi1cdFx0LnRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2csXG4tXHRcdC5tYXlfd3JpdGVwYWdlID0gMSxcbi1cdFx0Lm1heV91bm1hcCA9IDEsXG4tXHRcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXG4tXHRcdC5tYXlfc3dhcCA9ICFub3N3YXAsXG4tXHR9O1xuLVxuLVx0V0FSTl9PTl9PTkNFKCFjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUpO1xuLVxuLVx0c2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcbi1cdFx0XHQoR0ZQX0hJR0hVU0VSX01PVkFCTEUgXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKTtcbi1cbi1cdHRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbihzYy5nZnBfbWFzayxcbi1cdFx0XHRcdFx0XHQgICAgICBzYy5vcmRlcixcbi1cdFx0XHRcdFx0XHQgICAgICBtZW1jZyk7XG4tXG4tXHQvKlxuLVx0ICogTk9URTogQWx0aG91Z2ggd2UgY2FuIGdldCB0aGUgcHJpb3JpdHkgZmllbGQsIHVzaW5nIGl0XG4tXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbi1cdCAqIGlmIHdlIGRvbiYjMzk7dCByZWNsYWltIGhlcmUsIHRoZSBzaHJpbmtfbm9kZSBmcm9tIGJhbGFuY2VfcGdkYXRcbi1cdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAmIzM5O3MgYXMgd2VsbC4gV2UgaGFja1xuLVx0ICogdGhlIHByaW9yaXR5IGFuZCBtYWtlIGl0IHplcm8uXG4tXHQgKi9cbi1cdHNocmlua19scnV2ZWMobHJ1dmVjLCBcdTAwMjZzYyk7XG4tXG4tXHR0cmFjZV9tbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fZW5kKHNjLm5yX3JlY2xhaW1lZCwgbWVtY2cpO1xuLVxuLVx0Km5yX3NjYW5uZWQgPSBzYy5ucl9zY2FubmVkO1xuLVxuLVx0cmV0dXJuIHNjLm5yX3JlY2xhaW1lZDtcbi19XG4tXG4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXG5AQCAtNzE3MSw4ICYjNDM7NzA5OCw2IEBAIGNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gc3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiB7XG4gXHRpbnQgaTtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3NvZnRfc2Nhbm5lZDtcbiBcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBucl9ib29zdF9yZWNsYWltO1xuIFx0dW5zaWduZWQgbG9uZyB6b25lX2Jvb3N0c1tNQVhfTlJfWk9ORVNdID0geyAwLCB9O1xuQEAgLTcyNzgsMTIgJiM0Mzs3MjAzLDcgQEAgc3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiBcdFx0ICovXG4gXHRcdGtzd2FwZF9hZ2Vfbm9kZShwZ2RhdCwgXHUwMDI2c2MpO1xuIFxuLVx0XHQvKiBDYWxsIHNvZnQgbGltaXQgcmVjbGFpbSBiZWZvcmUgY2FsbGluZyBzaHJpbmtfbm9kZS4gKi9cbiBcdFx0c2MubnJfc2Nhbm5lZCA9IDA7XG4tXHRcdG5yX3NvZnRfc2Nhbm5lZCA9IDA7XG4tXHRcdG5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ2RhdCwgc2Mub3JkZXIsXG4tXHRcdFx0XHRcdFx0XHQgICAgICBzYy5nZnBfbWFzaywgXHUwMDI2bnJfc29mdF9zY2FubmVkKTtcbi1cdFx0c2MubnJfcmVjbGFpbWVkICYjNDM7PSBucl9zb2Z0X3JlY2xhaW1lZDtcbiBcbiBcdFx0LypcbiBcdFx0ICogVGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8gcmFpc2UgdGhlIHNjYW5uaW5nIHByaW9yaXR5IGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZCYjMzQ7LAogICAgJiMzNDttZW1jZzFfdW5jaGFyZ2VfYmF0Y2gmIzM0OywKICAgICYjMzQ7bWVtY2cxX2NvbW1pdF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JvdGF0ZV9tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZhMGRhY2RkOTU2ZGVmNzRlZTAwNjA1MWVkODY5MmQ5NWQ1OWJiYzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjQyOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBkYTYyNWQyZWRiM2JhLi5jNzk5OTI2NDM1NTYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtOTUsMjAgJiM0Mzs5NSw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAlzdHJ1Y3QgbHJ1dmVjX3N0YXRzCQkJKmxydXZlY19zdGF0czsKIAlzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyBfX3JjdQkqc2hyaW5rZXJfaW5mbzsKIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQotCS8qCi0JICogTWVtY2ctdjEgb25seSBzdHVmZiBpbiBtaWRkbGUgYXMgYnVmZmVyIGJldHdlZW4gcmVhZCBtb3N0bHkgZmllbGRzCi0JICogYW5kIHVwZGF0ZSBvZnRlbiBmaWVsZHMgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZy4gSWYgdjEgc3R1ZmYgaXMKLQkgKiBub3QgcHJlc2VudCwgYW4gZXhwbGljaXQgcGFkZGluZyBpcyBuZWVkZWQuCi0JICovCi0KLQlzdHJ1Y3QgcmJfbm9kZQkJdHJlZV9ub2RlOwkvKiBSQiB0cmVlIG5vZGUgKi8KLQl1bnNpZ25lZCBsb25nCQl1c2FnZV9pbl9leGNlc3M7LyogU2V0IHRvIHRoZSB2YWx1ZSBieSB3aGljaCAqLwotCQkJCQkJLyogdGhlIHNvZnQgbGltaXQgaXMgZXhjZWVkZWQqLwotCWJvb2wJCQlvbl90cmVlOwotI2Vsc2UKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMV8pOwotI2VuZGlmCiAKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CkBAIC0yOTMsOCAmIzQzOzI4MCw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHsKIAogCXN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSBfX3BlcmNwdSAqZXZlbnRzX3BlcmNwdTsKIAotCXVuc2lnbmVkIGxvbmcgc29mdF9saW1pdDsKLQogCS8qIHByb3RlY3RlZCBieSBtZW1jZ19vb21fbG9jayAqLwogCWJvb2wgb29tX2xvY2s7CiAJaW50IHVuZGVyX29vbTsKQEAgLTE5MjQsMTAgJiM0MzsxOTA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogLyogQ2dyb3VwIHYxLXJlbGF0ZWQgZGVjbGFyYXRpb25zICovCiAKICNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsCi0JCQkJCWdmcF90IGdmcF9tYXNrLAotCQkJCQl1bnNpZ25lZCBsb25nICp0b3RhbF9zY2FubmVkKTsKLQogYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMTk0OCwxNCAmIzQzOzE5MjksNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZCkKIH0KIAogI2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovCi1zdGF0aWMgaW5saW5lCi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLAotCQkJCQlnZnBfdCBnZnBfbWFzaywKLQkJCQkJdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA2N2M4NGE4YTcyNTgzLi44NGUyMzdmMmMxN2RiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTYzOCwzNSAmIzQzOzYzOCwzMiBAQCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHsKICAqIEZvciBlYWNoIG5vZGUsIG1lbWNncyBhcmUgZGl2aWRlZCBpbnRvIHR3byBnZW5lcmF0aW9uczogdGhlIG9sZCBhbmQgdGhlCiAgKiB5b3VuZy4gRm9yIGVhY2ggZ2VuZXJhdGlvbiwgbWVtY2dzIGFyZSByYW5kb21seSBzaGFyZGVkIGludG8gbXVsdGlwbGUgYmlucwogICogdG8gaW1wcm92ZSBzY2FsYWJpbGl0eS4gRm9yIGVhY2ggYmluLCB0aGUgaGxpc3RfbnVsbHMgaXMgdmlydHVhbGx5IGRpdmlkZWQKLSAqIGludG8gdGhyZWUgc2VnbWVudHM6IHRoZSBoZWFkLCB0aGUgdGFpbCBhbmQgdGhlIGRlZmF1bHQuCiYjNDM7ICogaW50byB0d28gc2VnbWVudHM6IHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC4KICAqCiAgKiBBbiBvbmxpbmluZyBtZW1jZyBpcyBhZGRlZCB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLgogICogVGhlIGV2aWN0aW9uIHN0YXJ0cyBhdCB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLiBUaGUKICAqIHBlci1ub2RlIG1lbWNnIGdlbmVyYXRpb24gY291bnRlciwgd2hvc2UgcmVtaW5kZXIgKG1vZCBNRU1DR19OUl9HRU5TKSBpbmRleGVzCiAgKiB0aGUgb2xkIGdlbmVyYXRpb24sIGlzIGluY3JlbWVudGVkIHdoZW4gYWxsIGl0cyBiaW5zIGJlY29tZSBlbXB0eS4KICAqCi0gKiBUaGVyZSBhcmUgZm91ciBvcGVyYXRpb25zOgotICogMS4gTUVNQ0dfTFJVX0hFQUQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIGl0cwotICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyAmIzM0O3NlZyYjMzQ7IHRvICYjMzQ7aGVhZCYjMzQ7OwotICogMi4gTUVNQ0dfTFJVX1RBSUwsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIHRhaWwgb2YgYSByYW5kb20gYmluIGluIGl0cwomIzQzOyAqIFRoZXJlIGFyZSB0aHJlZSBvcGVyYXRpb25zOgomIzQzOyAqIDEuIE1FTUNHX0xSVV9UQUlMLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHMKICAqICAgIGN1cnJlbnQgZ2VuZXJhdGlvbiAob2xkIG9yIHlvdW5nKSBhbmQgdXBkYXRlcyBpdHMgJiMzNDtzZWcmIzM0OyB0byAmIzM0O3RhaWwmIzM0OzsKLSAqIDMuIE1FTUNHX0xSVV9PTEQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGQKJiM0MzsgKiAyLiBNRU1DR19MUlVfT0xELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkCiAgKiAgICBnZW5lcmF0aW9uLCB1cGRhdGVzIGl0cyAmIzM0O2dlbiYjMzQ7IHRvICYjMzQ7b2xkJiMzNDsgYW5kIHJlc2V0cyBpdHMgJiMzNDtzZWcmIzM0OyB0byAmIzM0O2RlZmF1bHQmIzM0OzsKLSAqIDQuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlCiYjNDM7ICogMy4gTUVNQ0dfTFJVX1lPVU5HLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUKICAqICAgIHlvdW5nIGdlbmVyYXRpb24sIHVwZGF0ZXMgaXRzICYjMzQ7Z2VuJiMzNDsgdG8gJiMzNDt5b3VuZyYjMzQ7IGFuZCByZXNldHMgaXRzICYjMzQ7c2VnJiMzNDsgdG8KICAqICAgICYjMzQ7ZGVmYXVsdCYjMzQ7LgogICoKICAqIFRoZSBldmVudHMgdGhhdCB0cmlnZ2VyIHRoZSBhYm92ZSBvcGVyYXRpb25zIGFyZToKLSAqIDEuIEV4Y2VlZGluZyB0aGUgc29mdCBsaW1pdCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX0hFQUQ7Ci0gKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbG93LCB3aGljaCB0cmlnZ2VycwomIzQzOyAqIDEuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzCiAgKiAgICBNRU1DR19MUlVfVEFJTDsKLSAqIDMuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplCiYjNDM7ICogMi4gVGhlIGZpcnN0IGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1RBSUw7Ci0gKiA0LiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKJiM0MzsgKiAzLiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HOwotICogNS4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7Ci0gKiA2LiBGaW5pc2hpbmcgdGhlIGFnaW5nIG9uIHRoZSBldmljdGlvbiBwYXRoLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7Ci0gKiA3LiBPZmZsaW5pbmcgYSBtZW1jZywgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX09MRC4KJiM0MzsgKiA0LiBBdHRlbXB0aW5nIHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBtaW4sIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORzsKJiM0MzsgKiA1LiBGaW5pc2hpbmcgdGhlIGFnaW5nIG9uIHRoZSBldmljdGlvbiBwYXRoLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7CiYjNDM7ICogNi4gT2ZmbGluaW5nIGEgbWVtY2csIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9PTEQuCiAgKgogICogTm90ZXM6CiAgKiAxLiBNZW1jZyBMUlUgb25seSBhcHBsaWVzIHRvIGdsb2JhbCByZWNsYWltLCBhbmQgdGhlIHJvdW5kLXJvYmluIGluY3JlbWVudGluZwpAQCAtNjk5LDcgJiM0Mzs2OTYsNiBAQCB2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogdm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogdm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7Ci12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7CiB2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7CiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTsKIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpOwpAQCAtNzQwLDEwICYjNDM7NzM2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCi17Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCmluZGV4IGI0YmY3YjhkZWYxZjUuLjhhODcyOTkwYjRiZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCkBAIC0yMTQsMTMgJiM0MzsyMTQsNiBAQCBERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9iZQogCiAJVFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZykKICk7Ci0KLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbiwKLQotCVRQX1BST1RPKGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLAotCi0JVFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZykKLSk7CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKIERFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwKQEAgLTI2MCwxMyAmIzQzOzI1Myw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsCiAKIAlUUF9BUkdTKG5yX3JlY2xhaW1lZCwgbWVtY2cpCiApOwotCi1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZCwKLQotCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLAotCi0JVFBfQVJHUyhucl9yZWNsYWltZWQsIG1lbWNnKQotKTsKICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi8KIAogVFJBQ0VfRVZFTlQobW1fc2hyaW5rX3NsYWJfc3RhcnQsCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA1Y2MyMjBkYjkwNzY2Li5lMTZmMTI1MGIyNWM4IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTc4LDEwICYjNDM7NzgsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQkgICBnZnBfdCBnZnBfbWFzaywKIAkJCQkJICAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucywKIAkJCQkJICAgaW50ICpzd2FwcGluZXNzKTsKLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsCi0JCQkJICAgICBwZ19kYXRhX3QgKnBnZGF0LAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCk7CiAKICNpZmRlZiBDT05GSUdfTlVNQQogZXh0ZXJuIGludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jCmluZGV4IDA1ZWY1NWNhZTRkYzYuLmJmMmM3ZDUzYjAxYjEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmMKQEAgLTE3LDMwICYjNDM7MTcsNiBAQAogI2luY2x1ZGUgJiMzNDtzd2FwX3RhYmxlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttZW1jb250cm9sLXYxLmgmIzM0OwogCi0vKgotICogQ2dyb3VwcyBhYm92ZSB0aGVpciBsaW1pdHMgYXJlIG1haW50YWluZWQgaW4gYSBSQi1UcmVlLCBpbmRlcGVuZGVudCBvZgotICogdGhlaXIgaGllcmFyY2h5IHJlcHJlc2VudGF0aW9uCi0gKi8KLQotc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSB7Ci0Jc3RydWN0IHJiX3Jvb3QgcmJfcm9vdDsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmJfcmlnaHRtb3N0OwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KLXN0cnVjdCBtZW1fY2dyb3VwX3RyZWUgewotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKnJiX3RyZWVfcGVyX25vZGVbTUFYX05VTU5PREVTXTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlIHNvZnRfbGltaXRfdHJlZSBfX3JlYWRfbW9zdGx5OwotCi0vKgotICogTWF4aW11bSBsb29wcyBpbiBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbSgpLCB1c2VkIGZvciBzb2Z0Ci0gKiBsaW1pdCByZWNsYWltIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMsIGlmIHRoZXkgZXZlciBvY2N1ci4KLSAqLwotI2RlZmluZQlNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTCQkxMDAKLSNkZWZpbmUJTUVNX0NHUk9VUF9NQVhfU09GVF9MSU1JVF9SRUNMQUlNX0xPT1BTCTIKLQogLyogZm9yIE9PTSAqLwogc3RydWN0IG1lbV9jZ3JvdXBfZXZlbnRmZF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0xMDYsMzAxICYjNDM7ODIsNiBAQCBzdGF0aWMgc3RydWN0IGxvY2tkZXBfbWFwIG1lbWNnX29vbV9sb2NrX2RlcF9tYXAgPSB7CiAKIERFRklORV9TUElOTE9DSyhtZW1jZ19vb21fbG9jayk7CiAKLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LAotCQkJCQkgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eiwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgbmV3X3VzYWdlX2luX2V4Y2VzcykKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmYW1wO21jdHotJmd0O3JiX3Jvb3QucmJfbm9kZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXpfbm9kZTsKLQlib29sIHJpZ2h0bW9zdCA9IHRydWU7Ci0KLQlpZiAobXotJmd0O29uX3RyZWUpCi0JCXJldHVybjsKLQotCW16LSZndDt1c2FnZV9pbl9leGNlc3MgPSBuZXdfdXNhZ2VfaW5fZXhjZXNzOwotCWlmICghbXotJmd0O3VzYWdlX2luX2V4Y2VzcykKLQkJcmV0dXJuOwotCXdoaWxlICgqcCkgewotCQlwYXJlbnQgPSAqcDsKLQkJbXpfbm9kZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsCi0JCQkJCXRyZWVfbm9kZSk7Ci0JCWlmIChtei0mZ3Q7dXNhZ2VfaW5fZXhjZXNzICZsdDsgbXpfbm9kZS0mZ3Q7dXNhZ2VfaW5fZXhjZXNzKSB7Ci0JCQlwID0gJmFtcDsoKnApLSZndDtyYl9sZWZ0OwotCQkJcmlnaHRtb3N0ID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlwID0gJmFtcDsoKnApLSZndDtyYl9yaWdodDsKLQkJfQotCX0KLQotCWlmIChyaWdodG1vc3QpCi0JCW1jdHotJmd0O3JiX3JpZ2h0bW9zdCA9ICZhbXA7bXotJmd0O3RyZWVfbm9kZTsKLQotCXJiX2xpbmtfbm9kZSgmYW1wO216LSZndDt0cmVlX25vZGUsIHBhcmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZhbXA7bXotJmd0O3RyZWVfbm9kZSwgJmFtcDttY3R6LSZndDtyYl9yb290KTsKLQltei0mZ3Q7b25fdHJlZSA9IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LAotCQkJCQkgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eikKLXsKLQlpZiAoIW16LSZndDtvbl90cmVlKQotCQlyZXR1cm47Ci0KLQlpZiAoJmFtcDttei0mZ3Q7dHJlZV9ub2RlID09IG1jdHotJmd0O3JiX3JpZ2h0bW9zdCkKLQkJbWN0ei0mZ3Q7cmJfcmlnaHRtb3N0ID0gcmJfcHJldigmYW1wO216LSZndDt0cmVlX25vZGUpOwotCi0JcmJfZXJhc2UoJmFtcDttei0mZ3Q7dHJlZV9ub2RlLCAmYW1wO21jdHotJmd0O3JiX3Jvb3QpOwotCW16LSZndDtvbl90cmVlID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteiwKLQkJCQkgICAgICAgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3R6LSZndDtsb2NrLCBmbGFncyk7Ci0JX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHotJmd0O2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc29mdF9saW1pdF9leGNlc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBwYWdlX2NvdW50ZXJfcmVhZCgmYW1wO21lbWNnLSZndDttZW1vcnkpOwotCXVuc2lnbmVkIGxvbmcgc29mdF9saW1pdCA9IFJFQURfT05DRShtZW1jZy0mZ3Q7c29mdF9saW1pdCk7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3MgPSAwOwotCi0JaWYgKG5yX3BhZ2VzICZndDsgc29mdF9saW1pdCkKLQkJZXhjZXNzID0gbnJfcGFnZXMgLSBzb2Z0X2xpbWl0OwotCi0JcmV0dXJuIGV4Y2VzczsKLX0KLQotc3RhdGljIHZvaWQgbWVtY2cxX3VwZGF0ZV90cmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGV4Y2VzczsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejsKLQotCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgewotCQlpZiAoc29mdF9saW1pdF9leGNlc3MobWVtY2cpKQotCQkJbHJ1X2dlbl9zb2Z0X3JlY2xhaW0obWVtY2csIG5pZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbmlkXTsKLQlpZiAoIW1jdHopCi0JCXJldHVybjsKLQkvKgotCSAqIE5lY2Vzc2FyeSB0byB1cGRhdGUgYWxsIGFuY2VzdG9ycyB3aGVuIGhpZXJhcmNoeSBpcyB1c2VkLgotCSAqIGJlY2F1c2UgdGhlaXIgZXZlbnQgY291bnRlciBpcyBub3QgdG91Y2hlZC4KLQkgKi8KLQlmb3IgKDsgbWVtY2c7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSB7Ci0JCW16ID0gbWVtY2ctJmd0O25vZGVpbmZvW25pZF07Ci0JCWV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKG1lbWNnKTsKLQkJLyoKLQkJICogV2UgaGF2ZSB0byB1cGRhdGUgdGhlIHRyZWUgaWYgbXogaXMgb24gUkItdHJlZSBvcgotCQkgKiBtZW0gaXMgb3ZlciBpdHMgc29mdGxpbWl0LgotCQkgKi8KLQkJaWYgKGV4Y2VzcyB8fCBtei0mZ3Q7b25fdHJlZSkgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3R6LSZndDtsb2NrLCBmbGFncyk7Ci0JCQkvKiBpZiBvbi10cmVlLCByZW1vdmUgaXQgKi8KLQkJCWlmIChtei0mZ3Q7b25fdHJlZSkKLQkJCQlfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTsKLQkJCS8qCi0JCQkgKiBJbnNlcnQgYWdhaW4uIG16LSZndDt1c2FnZV9pbl9leGNlc3Mgd2lsbCBiZSB1cGRhdGVkLgotCQkJICogSWYgZXhjZXNzIGlzIDAsIG5vIHRyZWUgb3BzLgotCQkJICovCi0JCQlfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG16LCBtY3R6LCBleGNlc3MpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHotJmd0O2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KLX0KLQotdm9pZCBtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCWludCBuaWQ7Ci0KLQlmb3JfZWFjaF9ub2RlKG5pZCkgewotCQlteiA9IG1lbWNnLSZndDtub2RlaW5mb1tuaWRdOwotCQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbmlkXTsKLQkJaWYgKG1jdHopCi0JCQltZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKgotX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCi1yZXRyeToKLQlteiA9IE5VTEw7Ci0JaWYgKCFtY3R6LSZndDtyYl9yaWdodG1vc3QpCi0JCWdvdG8gZG9uZTsJCS8qIE5vdGhpbmcgdG8gcmVjbGFpbSBmcm9tICovCi0KLQlteiA9IHJiX2VudHJ5KG1jdHotJmd0O3JiX3JpZ2h0bW9zdCwKLQkJICAgICAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIHRyZWVfbm9kZSk7Ci0JLyoKLQkgKiBSZW1vdmUgdGhlIG5vZGUgbm93IGJ1dCBzb21lb25lIGVsc2UgY2FuIGFkZCBpdCBiYWNrLAotCSAqIHdlIHdpbGwgdG8gYWRkIGl0IGJhY2sgYXQgdGhlIGVuZCBvZiByZWNsYWltIHRvIGl0cyBjb3JyZWN0Ci0JICogcG9zaXRpb24gaW4gdGhlIHRyZWUuCi0JICovCi0JX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0JaWYgKCFzb2Z0X2xpbWl0X2V4Y2Vzcyhtei0mZ3Q7bWVtY2cpIHx8Ci0JICAgICFjc3NfdHJ5Z2V0KCZhbXA7bXotJmd0O21lbWNnLSZndDtjc3MpKQotCQlnb3RvIHJldHJ5OwotZG9uZToKLQlyZXR1cm4gbXo7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqCi1tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCW16ID0gX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopOwotCXNwaW5fdW5sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCXJldHVybiBtejsKLX0KLQotc3RhdGljIGludCBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZywKLQkJCQkgICBwZ19kYXRhX3QgKnBnZGF0LAotCQkJCSAgIGdmcF90IGdmcF9tYXNrLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKnZpY3RpbSA9IE5VTEw7Ci0JaW50IHRvdGFsID0gMDsKLQlpbnQgbG9vcCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3M7Ci0JdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwotCXN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHJlY2xhaW0gPSB7Ci0JCS5wZ2RhdCA9IHBnZGF0LAotCX07Ci0KLQlleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhyb290X21lbWNnKTsKLQotCXdoaWxlICgxKSB7Ci0JCXZpY3RpbSA9IG1lbV9jZ3JvdXBfaXRlcihyb290X21lbWNnLCB2aWN0aW0sICZhbXA7cmVjbGFpbSk7Ci0JCWlmICghdmljdGltKSB7Ci0JCQlsb29wJiM0MzsmIzQzOzsKLQkJCWlmIChsb29wICZndDs9IDIpIHsKLQkJCQkvKgotCQkJCSAqIElmIHdlIGhhdmUgbm90IGJlZW4gYWJsZSB0byByZWNsYWltCi0JCQkJICogYW55dGhpbmcsIGl0IG1pZ2h0IGJlY2F1c2UgdGhlcmUgYXJlCi0JCQkJICogbm8gcmVjbGFpbWFibGUgcGFnZXMgdW5kZXIgdGhpcyBoaWVyYXJjaHkKLQkJCQkgKi8KLQkJCQlpZiAoIXRvdGFsKQotCQkJCQlicmVhazsKLQkJCQkvKgotCQkJCSAqIFdlIHdhbnQgdG8gZG8gbW9yZSB0YXJnZXRlZCByZWNsYWltLgotCQkJCSAqIGV4Y2VzcyAmZ3Q7Jmd0OyAyIGlzIG5vdCB0byBleGNlc3NpdmUgc28gYXMgdG8KLQkJCQkgKiByZWNsYWltIHRvbyBtdWNoLCBub3IgdG9vIGxlc3MgdGhhdCB3ZSBrZWVwCi0JCQkJICogY29taW5nIGJhY2sgdG8gcmVjbGFpbSBmcm9tIHRoaXMgY2dyb3VwCi0JCQkJICovCi0JCQkJaWYgKHRvdGFsICZndDs9IChleGNlc3MgJmd0OyZndDsgMikgfHwKLQkJCQkJKGxvb3AgJmd0OyBNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTKSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQl0b3RhbCAmIzQzOz0gbWVtX2Nncm91cF9zaHJpbmtfbm9kZSh2aWN0aW0sIGdmcF9tYXNrLCBmYWxzZSwKLQkJCQkJcGdkYXQsICZhbXA7bnJfc2Nhbm5lZCk7Ci0JCSp0b3RhbF9zY2FubmVkICYjNDM7PSBucl9zY2FubmVkOwotCQlpZiAoIXNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpKQotCQkJYnJlYWs7Ci0JfQotCW1lbV9jZ3JvdXBfaXRlcl9icmVhayhyb290X21lbWNnLCB2aWN0aW0pOwotCXJldHVybiB0b3RhbDsKLX0KLQotdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwKLQkJCQkJICAgIGdmcF90IGdmcF9tYXNrLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCkKLXsKLQl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCA9IDA7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LCAqbmV4dF9teiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyByZWNsYWltZWQ7Ci0JaW50IGxvb3AgPSAwOwotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3M7Ci0KLQlpZiAobHJ1X2dlbl9lbmFibGVkKCkpCi0JCXJldHVybiAwOwotCi0JaWYgKG9yZGVyICZndDsgMCkKLQkJcmV0dXJuIDA7Ci0KLQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbcGdkYXQtJmd0O25vZGVfaWRdOwotCi0JLyoKLQkgKiBEbyBub3QgZXZlbiBib3RoZXIgdG8gY2hlY2sgdGhlIGxhcmdlc3Qgbm9kZSBpZiB0aGUgcm9vdAotCSAqIGlzIGVtcHR5LiBEbyBpdCBsb2NrbGVzcyB0byBwcmV2ZW50IGxvY2sgYm91bmNpbmcuIFJhY2VzCi0JICogYXJlIGFjY2VwdGFibGUgYXMgc29mdCBsaW1pdCBpcyBiZXN0IGVmZm9ydCBhbnl3YXkuCi0JICovCi0JaWYgKCFtY3R6IHx8IFJCX0VNUFRZX1JPT1QoJmFtcDttY3R6LSZndDtyYl9yb290KSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFRoaXMgbG9vcCBjYW4gcnVuIGEgd2hpbGUsIHNwZWNpYWxseSBpZiBtZW1fY2dyb3VwJiMzOTtzIGNvbnRpbnVvdXNseQotCSAqIGtlZXAgZXhjZWVkaW5nIHRoZWlyIHNvZnQgbGltaXQgYW5kIHB1dHRpbmcgdGhlIHN5c3RlbSB1bmRlcgotCSAqIHByZXNzdXJlCi0JICovCi0JZG8gewotCQlpZiAobmV4dF9teikKLQkJCW16ID0gbmV4dF9tejsKLQkJZWxzZQotCQkJbXogPSBtZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopOwotCQlpZiAoIW16KQotCQkJYnJlYWs7Ci0KLQkJcmVjbGFpbWVkID0gbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0obXotJmd0O21lbWNnLCBwZ2RhdCwKLQkJCQkJCSAgICBnZnBfbWFzaywgdG90YWxfc2Nhbm5lZCk7Ci0JCW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkOwotCQlzcGluX2xvY2tfaXJxKCZhbXA7bWN0ei0mZ3Q7bG9jayk7Ci0KLQkJLyoKLQkJICogSWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW55dGhpbmcgZnJvbSB0aGlzIG1lbW9yeSBjZ3JvdXAKLQkJICogaXQgaXMgdGltZSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNncm91cAotCQkgKi8KLQkJbmV4dF9teiA9IE5VTEw7Ci0JCWlmICghcmVjbGFpbWVkKQotCQkJbmV4dF9teiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTsKLQotCQlleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhtei0mZ3Q7bWVtY2cpOwotCQkvKgotCQkgKiBPbmUgc2Nob29sIG9mIHRob3VnaHQgc2F5cyB0aGF0IHdlIHNob3VsZCBub3QgYWRkCi0JCSAqIGJhY2sgdGhlIG5vZGUgdG8gdGhlIHRyZWUgaWYgcmVjbGFpbSByZXR1cm5zIDAuCi0JCSAqIEJ1dCBvdXIgcmVjbGFpbSBjb3VsZCByZXR1cm4gMCwgc2ltcGx5IGJlY2F1c2UgZHVlCi0JCSAqIHRvIHByaW9yaXR5IHdlIGFyZSBleHBvc2luZyBhIHNtYWxsZXIgc3Vic2V0IG9mCi0JCSAqIG1lbW9yeSB0byByZWNsYWltIGZyb20uIENvbnNpZGVyIHRoaXMgYXMgYSBsb25nZXIKLQkJICogdGVybSBUT0RPLgotCQkgKi8KLQkJLyogSWYgZXhjZXNzID09IDAsIG5vIHRyZWUgb3BzICovCi0JCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXosIG1jdHosIGV4Y2Vzcyk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCQljc3NfcHV0KCZhbXA7bXotJmd0O21lbWNnLSZndDtjc3MpOwotCQlsb29wJiM0MzsmIzQzOzsKLQkJLyoKLQkJICogQ291bGQgbm90IHJlY2xhaW0gYW55dGhpbmcgYW5kIHRoZXJlIGFyZSBubyBtb3JlCi0JCSAqIG1lbSBjZ3JvdXBzIHRvIHRyeSBvciB3ZSBzZWVtIHRvIGJlIGxvb3Bpbmcgd2l0aG91dAotCQkgKiByZWNsYWltaW5nIGFueXRoaW5nLgotCQkgKi8KLQkJaWYgKCFucl9yZWNsYWltZWQgJmFtcDsmYW1wOwotCQkJKG5leHRfbXogPT0gTlVMTCB8fAotCQkJbG9vcCAmZ3Q7IE1FTV9DR1JPVVBfTUFYX1NPRlRfTElNSVRfUkVDTEFJTV9MT09QUykpCi0JCQlicmVhazsKLQl9IHdoaWxlICghbnJfcmVjbGFpbWVkKTsKLQlpZiAobmV4dF9teikKLQkJY3NzX3B1dCgmYW1wO25leHRfbXotJmd0O21lbWNnLSZndDtjc3MpOwotCXJldHVybiBucl9yZWNsYWltZWQ7Ci19Ci0KIHN0YXRpYyB1NjQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCiAJCQkJc3RydWN0IGNmdHlwZSAqY2Z0KQogewpAQCAtNTExLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RocmVzaG9sZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJfQogfQogCi0vKiBDZ3JvdXAxOiB0aHJlc2hvbGQgbm90aWZpY2F0aW9ucyAmYW1wOyBzb2Z0bGltaXQgdHJlZSB1cGRhdGVzICovCiYjNDM7LyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgKi8KIAogLyoKICAqIFBlciBtZW1jZyBldmVudCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IHBhZ2Vpbi9wYWdlb3V0LiBXaXRoIFRIUCwKQEAgLTUxOSwxNSAmIzQzOzIwMCw5IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKICAqIHRvIHRyaWdnZXIgc29tZSBwZXJpb2RpYyBldmVudHMuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBiZXR0ZXIKICAqIHRoYW4gdXNpbmcgamlmZmllcyBldGMuIHRvIGhhbmRsZSBwZXJpb2RpYyBtZW1jZyBldmVudC4KICAqLwotZW51bSBtZW1fY2dyb3VwX2V2ZW50c190YXJnZXQgewotCU1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCwKLQlNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQsCi0JTUVNX0NHUk9VUF9OVEFSR0VUUywKLX07Ci0KIHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlX2V2ZW50czsKLQl1bnNpZ25lZCBsb25nIHRhcmdldHNbTUVNX0NHUk9VUF9OVEFSR0VUU107CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX3RhcmdldDsKIH07CiAKIHN0YXRpYyB2b2lkIG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcykKQEAgLTU0NCw1MyAmIzQzOzIxOSwyOSBAQCBzdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpCiB9CiAKICNkZWZpbmUgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUIDEyOAotI2RlZmluZSBTT0ZUTElNSVRfRVZFTlRTX1RBUkdFVCAxMDI0CiAKLXN0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCWVudW0gbWVtX2Nncm91cF9ldmVudHNfdGFyZ2V0IHRhcmdldCkKJiM0MztzdGF0aWMgYm9vbCBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCwgbmV4dDsKIAogCXZhbCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7bnJfcGFnZV9ldmVudHMpOwotCW5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctJmd0O2V2ZW50c19wZXJjcHUtJmd0O3RhcmdldHNbdGFyZ2V0XSk7CiYjNDM7CW5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctJmd0O2V2ZW50c19wZXJjcHUtJmd0O3RocmVzaG9sZF90YXJnZXQpOwogCS8qIGZyb20gdGltZV9hZnRlcigpIGluIGppZmZpZXMuaCAqLwogCWlmICgobG9uZykobmV4dCAtIHZhbCkgJmx0OyAwKSB7Ci0JCXN3aXRjaCAodGFyZ2V0KSB7Ci0JCWNhc2UgTUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNIOgotCQkJbmV4dCA9IHZhbCAmIzQzOyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQ6Ci0JCQluZXh0ID0gdmFsICYjNDM7IFNPRlRMSU1JVF9FVkVOVFNfVEFSR0VUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLSZndDtldmVudHNfcGVyY3B1LSZndDt0YXJnZXRzW3RhcmdldF0sIG5leHQpOwomIzQzOwkJX190aGlzX2NwdV93cml0ZShtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7dGhyZXNob2xkX3RhcmdldCwKJiM0MzsJCQkJIHZhbCAmIzQzOyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKgotICogQ2hlY2sgZXZlbnRzIGluIG9yZGVyLgotICoKLSAqLwotc3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCiYjNDM7c3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQogCQlyZXR1cm47CiAKLQkvKiB0aHJlc2hvbGQgZXZlbnQgaXMgdHJpZ2dlcmVkIGluIGZpbmVyIGdyYWluIHRoYW4gc29mdCBsaW1pdCAqLwotCWlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLAotCQkJCQkJTUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNIKSkpIHsKLQkJYm9vbCBkb19zb2Z0bGltaXQ7Ci0KLQkJZG9fc29mdGxpbWl0ID0gbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZywKLQkJCQkJCU1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVCk7CiYjNDM7CWlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnKSkpCiAJCW1lbV9jZ3JvdXBfdGhyZXNob2xkKG1lbWNnKTsKLQkJaWYgKHVubGlrZWx5KGRvX3NvZnRsaW1pdCkpCi0JCQltZW1jZzFfdXBkYXRlX3RyZWUobWVtY2csIG5pZCk7Ci0JfQogfQogCiB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKQEAgLTU5OSw3ICYjNDM7MjUwLDcgQEAgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKG1lbWNnLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwotCW1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpOwomIzQzOwltZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTY3Miw3ICYjNDM7MzIzLDcgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiAJVk1fV0FSTl9PTl9JUlFTX0VOQUJMRUQoKTsKIAltZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCXByZWVtcHRfZW5hYmxlX25lc3RlZCgpOwotCW1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpOwomIzQzOwltZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogCW9ial9jZ3JvdXBfcHV0KG9iamNnKTsKQEAgLTcyNiwxNCAmIzQzOzM3NywxNCBAQCB2b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbykKICNlbmRpZgogCiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKQomIzQzOwkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY291bnRfbWVtY2dfZXZlbnRzKG1lbWNnLCBQR1BHT1VULCBwZ3Bnb3V0KTsKIAlfX3RoaXNfY3B1X2FkZChtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7bnJfcGFnZV9ldmVudHMsIG5yX21lbW9yeSk7Ci0JbWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgbmlkKTsKJiM0MzsJbWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0yNTY2LDIyICYjNDM7MjIxNywzIEBAIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlmcmVlX3BlcmNwdShtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdSk7CiB9Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1lbWNnMV9pbml0KHZvaWQpCi17Ci0JaW50IG5vZGU7Ci0KLQlmb3JfZWFjaF9ub2RlKG5vZGUpIHsKLQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqcnRwbjsKLQotCQlydHBuID0ga3phbGxvY19ub2RlKHNpemVvZigqcnRwbiksIEdGUF9LRVJORUwsIG5vZGUpOwotCi0JCXJ0cG4tJmd0O3JiX3Jvb3QgPSBSQl9ST09UOwotCQlydHBuLSZndDtyYl9yaWdodG1vc3QgPSBOVUxMOwotCQlzcGluX2xvY2tfaW5pdCgmYW1wO3J0cG4tJmd0O2xvY2spOwotCQlzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtub2RlXSA9IHJ0cG47Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1zdWJzeXNfaW5pdGNhbGwobWVtY2cxX2luaXQpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oCmluZGV4IDFlMzk0MjY5YzYxM2QuLmI5YTIxZjBmZDJjM2EgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmgKQEAgLTQxLDEyICYjNDM7NDEsNiBAQCBib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiAKIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKLXZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JV1JJVEVfT05DRShtZW1jZy0mZ3Q7c29mdF9saW1pdCwgUEFHRV9DT1VOVEVSX01BWCk7Ci19CiAKIHN0cnVjdCBjZ3JvdXBfdGFza3NldDsKIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CkBAIC02NSw3ICYjNDM7NTksNyBAQCB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCiB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKTsKJiM0MzsJCQkgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7CiAKIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpOwogdm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTsKQEAgLTk4LDggJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfYWxsb2NfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgeyByZXR1cm4gdHJ1ZTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQogc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpCkBAIC0xMTUsNyAmIzQzOzEwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKSB7fQomIzQzOwkJCQkJIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KSB7fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpIHt9CiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBiZmQwYTc0ZmFjOTIzLi4zMDYzNmI5ZDk2NzM5IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00MjU3LDcgJiM0Mzs0MjU3LDYgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAJCXJldHVybiBFUlJfQ0FTVChtZW1jZyk7CiAKIAlwYWdlX2NvdW50ZXJfc2V0X2hpZ2goJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTsKLQltZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7CiAjaWZkZWYgQ09ORklHX1pTV0FQCiAJbWVtY2ctJmd0O3pzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJV1JJVEVfT05DRShtZW1jZy0mZ3Q7enN3YXBfd3JpdGViYWNrLCB0cnVlKTsKQEAgLTQ0MjksNyAmIzQzOzQ0MjgsNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAKIAl2bXByZXNzdXJlX2NsZWFudXAoJmFtcDttZW1jZy0mZ3Q7dm1wcmVzc3VyZSk7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO21lbWNnLSZndDtoaWdoX3dvcmspOwotCW1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhtZW1jZyk7CiAJZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTsKIAltZW1fY2dyb3VwX2ZyZWUobWVtY2cpOwogfQpAQCAtNDQ2NSw3ICYjNDM7NDQ2Myw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJcGFnZV9jb3VudGVyX3NldF9taW4oJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LCAwKTsKIAlwYWdlX2NvdW50ZXJfc2V0X2xvdygmYW1wO21lbWNnLSZndDttZW1vcnksIDApOwogCXBhZ2VfY291bnRlcl9zZXRfaGlnaCgmYW1wO21lbWNnLSZndDttZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpOwotCW1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTsKIAlwYWdlX2NvdW50ZXJfc2V0X2hpZ2goJmFtcDttZW1jZy0mZ3Q7c3dhcCwgUEFHRV9DT1VOVEVSX01BWCk7CiAJbWVtY2dfd2JfZG9tYWluX3NpemVfY2hhbmdlZChtZW1jZyk7CiB9CkBAIC01MzMxLDcgJiM0Mzs1MzI4LDYgQEAgc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7CiAJdW5zaWduZWQgbG9uZyBucl9tZW1vcnk7CiAJdW5zaWduZWQgbG9uZyBwZ3Bnb3V0OwogCXVuc2lnbmVkIGxvbmcgbnJfa21lbTsKLQlpbnQgbmlkOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHVuY2hhcmdlX2dhdGhlcl9jbGVhcihzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZykKQEAgLTUzNTQsNyAmIzQzOzUzNTAsNyBAQCBzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZykKIAkJbWVtY2cxX29vbV9yZWNvdmVyKG1lbWNnKTsKIAl9CiAKLQltZW1jZzFfdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHVnLSZndDtwZ3Bnb3V0LCB1Zy0mZ3Q7bnJfbWVtb3J5LCB1Zy0mZ3Q7bmlkKTsKJiM0MzsJbWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy0mZ3Q7cGdwZ291dCwgdWctJmd0O25yX21lbW9yeSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIHVuY2hhcmdlX2ZvbGlvICovCkBAIC01MzgzLDcgJiM0Mzs1Mzc5LDYgQEAgc3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpCiAJCQl1bmNoYXJnZV9nYXRoZXJfY2xlYXIodWcpOwogCQl9CiAJCXVnLSZndDtvYmpjZyA9IG9iamNnOwotCQl1Zy0mZ3Q7bmlkID0gZm9saW9fbmlkKGZvbGlvKTsKIAogCQkvKiBwYWlycyB3aXRoIG9ial9jZ3JvdXBfcHV0IGluIHVuY2hhcmdlX2JhdGNoICovCiAJCW9ial9jZ3JvdXBfZ2V0KG9iamNnKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZmRkMTMyOTlhMDRhOS4uZGViMDg3YzU3MDA3ZCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQzNzMsNyAmIzQzOzQzNzMsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqLwogZW51bSB7CiAJTUVNQ0dfTFJVX05PUCwKLQlNRU1DR19MUlVfSEVBRCwKIAlNRU1DR19MUlVfVEFJTCwKIAlNRU1DR19MUlVfT0xELAogCU1FTUNHX0xSVV9ZT1VORywKQEAgLTQzOTUsOSAmIzQzOzQzOTQsNyBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcCkKIAluZXcgPSBvbGQgPSBscnV2ZWMtJmd0O2xydWdlbi5nZW47CiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqLwotCWlmIChvcCA9PSBNRU1DR19MUlVfSEVBRCkKLQkJc2VnID0gTUVNQ0dfTFJVX0hFQUQ7Ci0JZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpCiYjNDM7CWlmIChvcCA9PSBNRU1DR19MUlVfVEFJTCkKIAkJc2VnID0gTUVNQ0dfTFJVX1RBSUw7CiAJZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX09MRCkKIAkJbmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC0mZ3Q7bWVtY2dfbHJ1LnNlcSk7CkBAIC00NDExLDcgJiM0Mzs0NDA4LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApCiAKIAlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bHJ1dmVjLSZndDtscnVnZW4ubGlzdCk7CiAKLQlpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQgfHwgb3AgPT0gTUVNQ0dfTFJVX09MRCkKJiM0MzsJaWYgKG9wID09IE1FTUNHX0xSVV9PTEQpCiAJCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuLmxpc3QsICZhbXA7cGdkYXQtJmd0O21lbWNnX2xydS5maWZvW25ld11bYmluXSk7CiAJZWxzZQogCQlobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5saXN0LCAmYW1wO3BnZGF0LSZndDttZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pOwpAQCAtNDQ4OSwxNSAmIzQzOzQ0ODYsNiBAQCB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJfQogfQogCi12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCkKLXsKLQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpOwotCi0JLyogc2VlIHRoZSBjb21tZW50IG9uIE1FTUNHX05SX0dFTlMgKi8KLQlpZiAoUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpCi0JCWxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpOwotfQotCiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKQogewogCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7CkBAIC02NDM5LDggJiM0Mzs2NDI3LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCXN0cnVjdCB6b25lcmVmICp6OwogCXN0cnVjdCB6b25lICp6b25lOwotCXVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7Ci0JdW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7CiAJZ2ZwX3Qgb3JpZ19tYXNrOwogCXBnX2RhdGFfdCAqbGFzdF9wZ2RhdCA9IE5VTEw7CiAJcGdfZGF0YV90ICpmaXJzdF9wZ2RhdCA9IE5VTEw7CkBAIC02NDgyLDM1ICYjNDM7NjQ2OCwxNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJCQkJc2MtJmd0O2NvbXBhY3Rpb25fcmVhZHkgPSB0cnVlOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCi0JCQkvKgotCQkJICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlCi0JCQkgKiB6b25lbGlzdCBpcyBvcmRlcmVkIGJ5IHpvbmUgKG5vdCB0aGUgZGVmYXVsdCkgdGhlbiBhCi0JCQkgKiBub2RlIG1heSBiZSBzaHJ1bmsgbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZQotCQkJICogdGhlIHVzZXIgcHJlZmVycyBsb3dlciB6b25lcyBiZWluZyBwcmVzZXJ2ZWQuCi0JCQkgKi8KLQkJCWlmICh6b25lLSZndDt6b25lX3BnZGF0ID09IGxhc3RfcGdkYXQpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkgKiBUaGlzIHN0ZWFscyBwYWdlcyBmcm9tIG1lbW9yeSBjZ3JvdXBzIG92ZXIgc29mdGxpbWl0Ci0JCQkgKiBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlcyBhbmQKLQkJCSAqIHNjYW5uZWQgcGFnZXMuIFRoaXMgd29ya3MgZm9yIGdsb2JhbCBtZW1vcnkgcHJlc3N1cmUKLQkJCSAqIGFuZCBiYWxhbmNpbmcsIG5vdCBmb3IgYSBtZW1jZyYjMzk7cyBsaW1pdC4KLQkJCSAqLwotCQkJbnJfc29mdF9zY2FubmVkID0gMDsKLQkJCW5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbSh6b25lLSZndDt6b25lX3BnZGF0LAotCQkJCQkJCQkgICAgICBzYy0mZ3Q7b3JkZXIsIHNjLSZndDtnZnBfbWFzaywKLQkJCQkJCQkJICAgICAgJmFtcDtucl9zb2Z0X3NjYW5uZWQpOwotCQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gbnJfc29mdF9yZWNsYWltZWQ7Ci0JCQlzYy0mZ3Q7bnJfc2Nhbm5lZCAmIzQzOz0gbnJfc29mdF9zY2FubmVkOwotCQkJLyogbmVlZCBzb21lIGNoZWNrIGZvciBhdm9pZCBtb3JlIHNocmlua196b25lKCkgKi8KIAkJfQogCiAJCWlmICghZmlyc3RfcGdkYXQpCiAJCQlmaXJzdF9wZ2RhdCA9IHpvbmUtJmd0O3pvbmVfcGdkYXQ7CiAKLQkJLyogU2VlIGNvbW1lbnQgYWJvdXQgc2FtZSBjaGVjayBmb3IgZ2xvYmFsIHJlY2xhaW0gYWJvdmUgKi8KJiM0MzsJCS8qCiYjNDM7CQkgKiBTaHJpbmsgZWFjaCBub2RlIGluIHRoZSB6b25lbGlzdCBvbmNlLiBJZiB0aGUgem9uZWxpc3QgaXMKJiM0MzsJCSAqIG9yZGVyZWQgYnkgem9uZSAobm90IHRoZSBkZWZhdWx0KSB0aGVuIGEgbm9kZSBtYXkgYmUgc2hydW5rCiYjNDM7CQkgKiBtdWx0aXBsZSB0aW1lcyBidXQgaW4gdGhhdCBjYXNlIHRoZSB1c2VyIHByZWZlcnMgbG93ZXIgem9uZXMKJiM0MzsJCSAqIGJlaW5nIHByZXNlcnZlZC4KJiM0MzsJCSAqLwogCQlpZiAoem9uZS0mZ3Q7em9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KQogCQkJY29udGludWU7CiAJCWxhc3RfcGdkYXQgPSB6b25lLSZndDt6b25lX3BnZGF0OwpAQCAtNjgyNSw0NyAmIzQzOzY3OTMsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlciwKIAogI2lmZGVmIENPTkZJR19NRU1DRwogCi0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovCi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLAotCQkJCQkJcGdfZGF0YV90ICpwZ2RhdCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpCi17Ci0Jc3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0gewotCQkubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsCi0JCS50YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnLAotCQkubWF5X3dyaXRlcGFnZSA9IDEsCi0JCS5tYXlfdW5tYXAgPSAxLAotCQkucmVjbGFpbV9pZHggPSBNQVhfTlJfWk9ORVMgLSAxLAotCQkubWF5X3N3YXAgPSAhbm9zd2FwLAotCX07Ci0KLQlXQVJOX09OX09OQ0UoIWN1cnJlbnQtJmd0O3JlY2xhaW1fc3RhdGUpOwotCi0Jc2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSykgfAotCQkJKEdGUF9ISUdIVVNFUl9NT1ZBQkxFICZhbXA7IH5HRlBfUkVDTEFJTV9NQVNLKTsKLQotCXRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbihzYy5nZnBfbWFzaywKLQkJCQkJCSAgICAgIHNjLm9yZGVyLAotCQkJCQkJICAgICAgbWVtY2cpOwotCi0JLyoKLQkgKiBOT1RFOiBBbHRob3VnaCB3ZSBjYW4gZ2V0IHRoZSBwcmlvcml0eSBmaWVsZCwgdXNpbmcgaXQKLQkgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi4KLQkgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0Ci0JICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrCi0JICogdGhlIHByaW9yaXR5IGFuZCBtYWtlIGl0IHplcm8uCi0JICovCi0Jc2hyaW5rX2xydXZlYyhscnV2ZWMsICZhbXA7c2MpOwotCi0JdHJhY2VfbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZChzYy5ucl9yZWNsYWltZWQsIG1lbWNnKTsKLQotCSpucl9zY2FubmVkID0gc2MubnJfc2Nhbm5lZDsKLQotCXJldHVybiBzYy5ucl9yZWNsYWltZWQ7Ci19Ci0KIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiAJCQkJCSAgIGdmcF90IGdmcF9tYXNrLApAQCAtNzE3MSw4ICYjNDM7NzA5OCw2IEBAIGNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpCiBzdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KQogewogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7Ci0JdW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7CiAJdW5zaWduZWQgbG9uZyBwZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBucl9ib29zdF9yZWNsYWltOwogCXVuc2lnbmVkIGxvbmcgem9uZV9ib29zdHNbTUFYX05SX1pPTkVTXSA9IHsgMCwgfTsKQEAgLTcyNzgsMTIgJiM0Mzs3MjAzLDcgQEAgc3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCkKIAkJICovCiAJCWtzd2FwZF9hZ2Vfbm9kZShwZ2RhdCwgJmFtcDtzYyk7CiAKLQkJLyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovCiAJCXNjLm5yX3NjYW5uZWQgPSAwOwotCQlucl9zb2Z0X3NjYW5uZWQgPSAwOwotCQlucl9zb2Z0X3JlY2xhaW1lZCA9IG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdkYXQsIHNjLm9yZGVyLAotCQkJCQkJCSAgICAgIHNjLmdmcF9tYXNrLCAmYW1wO25yX3NvZnRfc2Nhbm5lZCk7Ci0JCXNjLm5yX3JlY2xhaW1lZCAmIzQzOz0gbnJfc29mdF9yZWNsYWltZWQ7CiAKIAkJLyoKIAkJICogVGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8gcmFpc2UgdGhlIHNjYW5uaW5nIHByaW9yaXR5IGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTEyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbWNnIHYxIFNvZnQgTGltaXQgUmVtb3ZhbCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0ZWQgYXQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbWVtY2cgKG1lbW9yeSBjZ3JvdXApIHN1YnN5c3RlbS4gSXQmIzM5O3MgdG91Y2hpbmcgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oYCwgYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtY29udHJvbC12MS5jYCwgYG1tL21lbWNvbnRyb2wtdjEuaGAsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL3Ztc2Nhbi5jYC4gIEZyb20gYSBxdWljayBzY2FuLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWxldGluZywgb3IgYXQgbGVhc3Qgc2lnbmlmaWNhbnRseSByZXdvcmtpbmcsIHRoZSBtZW1jZyB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0gbG9naWMgYW5kIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiAgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBpcyBhIGNvbXBsZXRlIHJlbW92YWwgb3IgYSByZWZhY3RvcmluZy4KCkxldCBtZSBleGFtaW5lIHRoZSBkaWZmIGluIGRldGFpbC4KCiogICBJbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBpdCYjMzk7cyByZW1vdmluZyBlbGVtZW50cyByZWxhdGVkIHRvIHRoZSBzb2Z0IGxpbWl0IHRyZWUsIGxpa2UgYHRyZWVfbm9kZWAsIGB1c2FnZV9pbl9leGNlc3NgLCBgb25fdHJlZWAgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIHdoZW4gYENPTkZJR19NRU1DR19WMWAgaXMgZW5hYmxlZC4gQWxzbywgdGhlIGBzb2Z0X2xpbWl0YCBpdHNlbGYgaXMgZ29uZSBmcm9tIHRoZSBgc3RydWN0IG1lbV9jZ3JvdXBgIGRlZmluaXRpb24uIEFuZCB0aGUgZGVjbGFyYXRpb24gb2YgYG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW1gIGlzIGFsc28gZ29uZS4KKiAgIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBzZWVzIHNvbWUgY29tbWVudCB1cGRhdGVzIGFuZCByZW1vdmFsIG9mIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAuCiogICBUaGUgdHJhY2luZyBpbmZyYXN0cnVjdHVyZSBnZXRzIGNsZWFuZWQgdXAgdG9vLCB3aXRoIGBtbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fYmVnaW5gIGFuZCBgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZGAgdHJhY2UgZXZlbnRzIGJlaW5nIHJlbW92ZWQgZnJvbSBgaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhgLgoqICAgYG1tL2ludGVybmFsLmhgIHJlbW92ZXMgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLgoqICAgYG1tL21lbWNvbnRyb2wtdjEuY2AgaXMgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMgbGllLiAgSXQmIzM5O3MgcmVtb3ZpbmcgYW4gZXh0ZW5zaXZlIHNldCBvZiBmdW5jdGlvbnMsIGluY2x1ZGluZyBgc29mdF9saW1pdF90cmVlYCwgcmVjbGFpbS1yZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkYCwgYF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWRgLCBhbmQgdGhlIG1haW4gcmVjbGFpbSBmdW5jdGlvbiBgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW1gLCBhcyB3ZWxsIGFzIHNldmVyYWwgdHJlZS1yZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBfX21lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGVgIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYG1lbWNnMV9pbml0YC4gSXQgbG9va3MgbGlrZSBzb21lIG9mIHRoZSBldmVudCBoYW5kbGluZyBpbiBgbWVtY2cxX2V2ZW50c19wZXJjcHVgIGhhcyBhbHNvIGJlZW4gc2ltcGxpZmllZCwgYXMgaGFzIGBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0YC4gVGhlIHBhcmFtZXRlciBsaXN0cyBmb3IgYG1lbWNnMV9jaGVja19ldmVudHNgLCBgbWVtY2cxX2NvbW1pdF9jaGFyZ2VgLCBgX19tZW1jZzFfc3dhcG91dGAsIGFuZCBgbWVtY2cxX3VuY2hhcmdlX2JhdGNoYCBhcmUgYWxsIGNoYW5nZWQuCiogICBgbW0vbWVtY29udHJvbC12MS5oYCBoYXMgZGVjbGFyYXRpb25zIGFuZCBpbmxpbmUgZnVuY3Rpb24gdXBkYXRlcy4KKiAgIEluIGBtbS9tZW1jb250cm9sLmNgLCBgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXRgIGlzIHJlbW92ZWQgZnJvbSBgbWVtX2Nncm91cF9jc3NfYWxsb2NgIGFuZCBgbWVtX2Nncm91cF9jc3NfcmVzZXRgLiBMaWtld2lzZSwgYG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlc2AgaXMgcmVtb3ZlZCBmcm9tIGBtZW1fY2dyb3VwX2Nzc19mcmVlYC4gU2V2ZXJhbCBwYXJhbWV0ZXJzIGFyZSByZW1vdmVkIGluIGEgZmV3IHBsYWNlcyB0b28uIFRoZSBgdW5jaGFyZ2VfYmF0Y2hgIGZ1bmN0aW9uIGhhcyBiZWVuIHVwZGF0ZWQsIGFuZCB0aGUgYHVnLSZndDtuaWQgPSBmb2xpb19uaWQoZm9saW8pO2AgaXMgcmVtb3ZlZCBmcm9tIGB1bmNoYXJnZV9mb2xpb2AuCiogICBGaW5hbGx5LCBgbW0vdm1zY2FuLmNgIHJlbW92ZXMgYE1FTUNHX0xSVV9IRUFEYCBoYW5kbGluZyBmcm9tIGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2AsIGFuZCBhbHNvIHJlbW92ZXMgYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgcmVtb3ZlcyBzb2Z0IGxpbWl0IHJlY2xhaW0gZnJvbSBgc2hyaW5rX3pvbmVzYCBhbmQgYGJhbGFuY2VfcGdkYXRgLCBhcyB3ZWxsIGFzIHRoZSBhbHJlYWR5IGRlbGV0ZWQgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLgoKVGhpcyBpcyBleHRlbnNpdmUuIEl0IHNlZW1zIGxpa2UgYSBjbGVhbiBzd2VlcCBvZiB0aGUgdjEgc29mdCBsaW1pdCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpc24mIzM5O3QganVzdCBhIHBhcnRpYWwgcmVtb3ZhbCBvciBhIHJlZmFjdG9yaW5nIHdpdGggdGhlIGNvZGUgbW92ZWQgZWxzZXdoZXJlLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgc2luZ2xlIGNvbW1pdCBvciBwYXJ0IG9mIGEgbGFyZ2VyIHBhdGNoIHNlcmllcy4gSSBuZWVkIHRvIHNlZSBpZiBhbnkgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIG1haW50YWluZWQgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUuIElzIGBjZ3JvdXAubWVtb3J5LnNvZnRfbGltaXRfaW5fYnl0ZXNgIHN0aWxsIGluIGBtbS9tZW1jb250cm9sLXYxLmNgPyBHb3R0YSBjaGVjayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0X2xpbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xNTI4PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9oaWVyYXJjaHlfd3JpdGUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTU0MC1cbm1tL21lbWNvbnRyb2wtdjEuYzoxNTQxOnN0YXRpYyB1NjQgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQyLVx0XHRcdFx0ICAgICAgc3RydWN0IGNmdHlwZSAqY2Z0KVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQ2LVxubW0vbWVtY29udHJvbC12MS5jOjE1NDc6c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQ4LVx0XHRcdFx0XHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE1NTYtXG5tbS9tZW1jb250cm9sLXYxLmM6MTU1NzpcdHByX3dhcm5fb25jZShcJiMzNDtzb2Z0X2xpbWl0X2luX2J5dGVzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gXCYjMzQ7XG5tbS9tZW1jb250cm9sLXYxLmMtMTU1OC1cdFx0ICAgICBcJiMzNDtXcml0aW5nIGFueSB2YWx1ZSB0byB0aGlzIGZpbGUgaGFzIG5vIGVmZmVjdC4gXCYjMzQ7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIwMjg9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMDQ2LVx0e1xubW0vbWVtY29udHJvbC12MS5jOjIwNDc6XHRcdC5uYW1lID0gXCYjMzQ7c29mdF9saW1pdF9pbl9ieXRlc1wmIzM0Oyxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMDQ4Olx0XHQud3JpdGUgPSBtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGUsXG5tbS9tZW1jb250cm9sLXYxLmM6MjA0OTpcdFx0LnJlYWRfdTY0ID0gbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWQsXG5tbS9tZW1jb250cm9sLXYxLmMtMjA1MC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNDYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCAodjEpKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gaW52ZXN0aWdhdGUgaG93IHNvZnQgbGltaXRzIGFyZSBoYW5kbGVkIHdpdGhpbiBtZW1vcnkgY2dyb3Vwcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhvc2UgdmFsdWVzLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UgY29kZSwgYW5kIHNpbmNlIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1lbW9yeSBjb250cm9sLCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgdGhlIHJlbGV2YW50IGZpbGVzIHdpbGwgYmUgaW4gYG1tL2AuIEJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIGNncm91cHMsIGFuZCBsb29raW5nIGJhY2ssIEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gdGhlIGZpbGUgSSB3YW50IHRvIGluc3BlY3QgaXMgYG1tL21lbWNvbnRyb2wtdjEuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF9yZWFkYCBhbmQgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAgd2lsbCBiZSBrZXkgZnVuY3Rpb25zIChvciBwb3NzaWJseSBtYWNyb3MsIHdoaWNoIGlzIHdoeSBJIG5lZWQgdG8gKmNoZWNrKiksIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZm9jdXMgbXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLiBUaGUgJiMzOTt2MSYjMzk7IGluIHRoZSBmaWxlbmFtZSBzdHJvbmdseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBvbGRlciwgbm93LWRlcHJlY2F0ZWQsIG1lbW9yeSBjZ3JvdXAgaGllcmFyY2h5OyB0aGlzIGlzIGltcG9ydGFudCBjb250ZXh0IGJlY2F1c2UgaXQgaW5mbHVlbmNlcyBob3cgdGhlIGxpbWl0cyBhcmUgbWFuYWdlZCBjb21wYXJlZCB0byB0aGUgbmV3ZXIgY2dyb3VwIHYyLiBLbm93aW5nIHRoaXMsIEkgZXhwZWN0IHRvIHNlZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGlzIGxlZ2FjeSBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgaG93IHRoZXNlIGFyZSBkZWZpbmVkIGFuZCBob3cgdGhleSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU0MDpcdFxuMTU0MTpcdHN0YXRpYyB1NjQgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbjE1NDI6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBjZnR5cGUgKmNmdClcbjE1NDM6XHR7XG4xNTQ0Olx0XHRyZXR1cm4gKHU2NClQQUdFX0NPVU5URVJfTUFYICogUEFHRV9TSVpFO1xuMTU0NTpcdH1cbjE1NDY6XHRcbjE1NDc6XHRzdGF0aWMgc3NpemVfdCBtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuMTU0ODpcdFx0XHRcdFx0XHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4xNTQ5Olx0e1xuMTU1MDpcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbjE1NTE6XHRcdGludCByZXQ7XG4xNTUyOlx0XG4xNTUzOlx0XHRyZXQgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2Uoc3Ryc3RyaXAoYnVmKSwgXCYjMzQ7LTFcJiMzNDssIFx1MDAyNm5yX3BhZ2VzKTtcbjE1NTQ6XHRcdGlmIChyZXQpXG4xNTU1Olx0XHRcdHJldHVybiByZXQ7XG4xNTU2Olx0XG4xNTU3Olx0XHRwcl93YXJuX29uY2UoXCYjMzQ7c29mdF9saW1pdF9pbl9ieXRlcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIFwmIzM0O1xuMTU1ODpcdFx0XHQgICAgIFwmIzM0O1dyaXRpbmcgYW55IHZhbHVlIHRvIHRoaXMgZmlsZSBoYXMgbm8gZWZmZWN0LiBcJiMzNDtcbjE1NTk6XHRcdFx0ICAgICBcJiMzNDtQbGVhc2UgcmVwb3J0IHlvdXIgdXNlY2FzZSB0byBsaW51eC1tbUBrdmFjay5vcmcgaWYgeW91IFwmIzM0O1xuMTU2MDpcdFx0XHQgICAgIFwmIzM0O2RlcGVuZCBvbiB0aGlzIGZ1bmN0aW9uYWxpdHkuXFxuXCYjMzQ7KTtcbjE1NjE6XHRcbjE1NjI6XHRcdHJldHVybiBuYnl0ZXM7XG4xNTYzOlx0fVxuMTU2NDpcdFxuMTU2NTpcdHN0YXRpYyB1NjQgbWVtX2Nncm91cF9yZWFkX3U2NChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxuMTU2NjpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnQpXG4xNTY3Olx0e1xuMTU2ODpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2Nzcyhjc3MpO1xuMTU2OTpcdFx0c3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg5MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBjYW4gc2VlIHRoZSBjaGFuZ2VzIHRvdWNoIHNvbWUgdmVyeSBzZW5zaXRpdmUgYXJlYXM6IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgbWVtb3J5IGNncm91cHMgKG1lbWNnIHYxKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIGFmZmVjdHMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBhbmQgdGh1cyB3b3J0aCBmdXp6aW5nLgoKTXkgYW5hbHlzaXMgbG9va3MgbGlrZSB0aGlzOgoKRmlyc3QsIGxldCYjMzk7cyBkaXNzZWN0IHdoZXJlIHRoZSBwYXRjaCBpcyBtYWtpbmcgY2hhbmdlczoKMS4gICoqTWVtb3J5IE1hbmFnZW1lbnQgQ29yZToqKiBJdCYjMzk7cyByaWdodCBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtZW1jZyB2MSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHBhZ2UgcmVjbGFpbSBhbmQgdGhlIFZNIHNjYW5uZXIgKHZtc2NhbikgYW5kIHRoZSBMUlUgKGxydVxfZ2VuKS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnIGltbWVkaWF0ZWx5LgoKMi4gICoqRXhlY3V0YWJsZSBMb2dpYyBDaGFuZ2VzOioqIExvb2tpbmcgYXQgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zLCBJIHNlZSB0aGV5JiMzOTt2ZSBhZGp1c3RlZCB0aGUgZXZlbnQgcmF0ZS1saW1pdGluZyBpbiBgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdGAuIEl0IGFsc28gaXMgdHdlYWtpbmcgaG93IHRocmVzaG9sZHMgYXJlIGNoZWNrZWQuIFRoZSB1bmNoYXJnZSBiYXRjaCBsb2dpYyBoYXMgaGFkIHNvbWUgdXBkYXRlcywgcmVtb3ZpbmcgcGVyLWJhdGNoIG5pZCB0cmFja2luZyBhbmQgcGFzc2luZy4gVGhlIExSVSBnZW4gcm90YXRpb24gbG9naWMgaW4gYGxydV9nZW5fcm90YXRlX21lbWNnYCBoYXMgY2hhbmdlZC4gYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCBoYXZlIHJlbW92ZWQgc29mdCBsaW1pdCByZWNsYWltIGNhbGxzLiAgRmluYWxseSwgd2Ugc2VlIGFsdGVyYXRpb25zIGluIHNvZnQgbGltaXQgZmlsZSBoYW5kbGluZyB2aWEgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAgYW5kIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZGAuIFRoZXNlIGFyZSBhbGwgaGlnaGx5IGNyaXRpY2FsIGFyZWFzLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaXQgc2F0aXNmaWVzIHRoZSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgY3JpdGVyaWEsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IHJlYWxseSBjbGlja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNyaXRlcmlhIHRoYXQgc3RhdGUgJiMzNDtyZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7IHdpdGhpbiBzcGVjaWZpYyBjb3JlIHN1YnN5c3RlbXMsIGxpa2UgbWVtb3J5IG1hbmFnZW1lbnQuIFNpbmNlIHRoaXMgcGF0Y2ggdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkmIzM5O20gc2VlaW5nIGxvZ2ljIG1vZGlmaWNhdGlvbnMsIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogV29ydGhGdXp6aW5nIGlzIGB0cnVlYC4KCkFuZCwgYSBmaW5hbCBpbXBvcnRhbnQgcG9pbnQ6IEkmIzM5O20gbm90IGdvaW5nIHRvIGJsaW5kbHkgdHJ1c3QgYW55ICYjMzQ7Tm8gRnVuY3Rpb25hbCBDaGFuZ2UmIzM0OyBvciAmIzM0O1JlZmFjdG9yaW5nJiMzNDsgY2xhaW1zLiBUaG9zZSBhcmUgb2Z0ZW4gbWlzbGVhZGluZy4gUmVhcnJhbmdpbmcgbG9naWMsIGFkZGluZyBoZWxwZXIgZnVuY3Rpb25zLCBvciBjaGFuZ2luZyBob3cgc3RhdGUgaXMgaGFuZGxlZCBpbiB0aGVzZSBjb3JlIHN1YnN5c3RlbXMgaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3Igc3VidGxlIGJ1Z3Mgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBzdWJ0bGUgc2hpZnRzIGluIHNlbWFudGljcyB0aGF0IG5lZWQgY2hlY2tpbmcuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbi4gU28sIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGBFbmFibGVDb25maWdzYC4gVGhpcyBsaWtlbHkgaGluZ2VzIG9uIGBNRU1DR2AsIGBNRU1DR19WMWAsIGFuZCBgTFJVX0dFTmAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBmaWxlcywgZXNwZWNpYWxseSBpbiBgbW0vYCwgb3IgbWF5YmUganVzdCBncmVwIHRvIGRldGVybWluZSBleGFjdGx5IHdoYXQgY29uZmlncyBhcmUgbmVjZXNzYXJ5IHRvIGVuYWJsZSB0aGUgY29kZSBiZWluZyBtb2RpZmllZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1DR19WMSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA0Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTEyMz12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTExMzAtICogY2dyb3VwIHYxIHVzZXJzcGFjZSB2bXByZXNzdXJlIGludGVyZmFjZSAobWVtb3J5LnByZXNzdXJlX2xldmVsIC9cbm1tL21lbWNvbnRyb2wtdjEuYzoxMTMxOiAqIGNncm91cC5ldmVudF9jb250cm9sKS4gS2VwdCBoZXJlIHNvIHYyLW9ubHkga2VybmVscyAoQ09ORklHX01FTUNHX1YxPW4pXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMi0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0yNT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaC0yOC0vKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovXG5tbS9tZW1jb250cm9sLXYxLmg6Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC12MS5oLTMwLVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD04Nj1leHRlcm4gc3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdO1xubW0vbWVtY29udHJvbC12MS5oLTg3LVxubW0vbWVtY29udHJvbC12MS5oOjg4OiNlbHNlXHQvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbm1tL21lbWNvbnRyb2wtdjEuaC04OS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHt9XG5tbS9tZW1jb250cm9sLXYxLmgtMTE5LVxubW0vbWVtY29udHJvbC12MS5oOjEyMDojZW5kaWZcdC8qIENPTkZJR19NRU1DR19WMSAqL1xubW0vbWVtY29udHJvbC12MS5oLTEyMS1cbi0tXG5tbS9tZW1jb250cm9sLmM9MjE1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjM0LVxubW0vbWVtY29udHJvbC5jOjIzNTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMjM2LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU3Mi1cbm1tL21lbWNvbnRyb2wuYzo1NzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MDAtXHRQR1BHSU4sXG4tLVxubW0vbWVtY29udHJvbC5jPTgzMj1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jLTg0Ny1cbm1tL21lbWNvbnRyb2wuYzo4NDg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxuLS1cbm1tL21lbWNvbnRyb2wuYz05MTY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkyOC1cbm1tL21lbWNvbnRyb2wuYzo5Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXG4tLVxubW0vbWVtY29udHJvbC5jPTExMDQ9Ym9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTExMTEtXG5tbS9tZW1jb250cm9sLmM6MTExMjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTcxMj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MTctXG5tbS9tZW1jb250cm9sLmM6MTcxODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTcxOS11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jPTE3Mzg9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc4NC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkmIzQzOyYjNDM7KSB7XG5tbS9tZW1jb250cm9sLmM6MTc4NTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTc4Ni1cdFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XG4tLVxubW0vbWVtY29udHJvbC5jPTE4MzY9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTg1Ny1cdFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XG5tbS9tZW1jb250cm9sLmM6MTg1ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTg1OS1cdGVsc2Uge1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MjQ3PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjY3LVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBcdTAwMjZwYXJlbnQtXHUwMDNlc3dhcCwgZmFsc2UpO1xubW0vbWVtY29udHJvbC5jOjQyNjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQyNjktXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MjgxLVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDI4MjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDI4My1cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgTlVMTCwgZmFsc2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NDQ4PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ0NTgtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NDQ1OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDQ2MC1cdHBhZ2VfY291bnRlcl9zZXRfbWF4KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIFBBR0VfQ09VTlRFUl9NQVgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTg2PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE5Ny1cdC5kZmxfY2Z0eXBlcyA9IG1lbW9yeV9maWxlcyxcbm1tL21lbWNvbnRyb2wuYzo1MTk4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy01MTk5LVx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXG4tLVxubW0vbWVtY29udHJvbC5jPTYxOTY9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjIwMS1cdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcbm1tL21lbWNvbnRyb2wuYzo2MjAyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MjAzLVx0V0FSTl9PTihjZ3JvdXBfYWRkX2xlZ2FjeV9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgbWVtc3dfZmlsZXMpKTtcbi0tXG5tbS9zd2FwLmg9ODU9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3N3YXAuaC04Ni17XG5tbS9zd2FwLmg6ODc6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vc3dhcC5oLTg4LVx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTYzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTUVNQ0cgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBNRU1DR2AgYW5kIGBNRU1DR19WMWAgYXJlIGRlZmluZWQgd2l0aGluIHRoaXMga2VybmVsLiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgbGFpZCBvdXQgaW4gb25lIG9mIHRoZSBLY29uZmlnIGZpbGVzLCBsaWtlbHkgaW4gZWl0aGVyIGBpbml0L0tjb25maWdgIG9yIGBtbS9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGluaXRpYWwgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIGZpbGVzIGRpcmVjdGx5LiBIb3BlZnVsbHksIHRoZSBkZWZpbml0aW9uIGlzIGNsZWFyIGFuZCBJIGNhbiBxdWlja2x5IGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gKGluaXQvS2NvbmZpZykqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBzb21lIHNwZWNpZmljIHNldHRpbmdzLCBzbyBsZXQmIzM5O3MganVtcCByaWdodCBpbnRvIGBpbml0L0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBlbnRyaWVzIGFyb3VuZCBsaW5lcyAxMDg1IHRocm91Z2ggMTEyMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQvZGlzYWJsZWQgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA4NTpcdGNvbmZpZyBNRU1DR1xuMTA4NjpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTA4NzpcdFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxuMTA4ODpcdFx0c2VsZWN0IEVWRU5URkRcbjEwODk6XHRcdHNlbGVjdCBTTEFCX09CSl9FWFRcbjEwOTA6XHRcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xuMTA5MTpcdFx0aGVscFxuMTA5MjpcdFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXG4xMDkzOlx0XG4xMDk0Olx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbjEwOTU6XHRcdGJvb2xcbjEwOTY6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjEwOTc6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjEwOTg6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMDk5Olx0XHRkZWZhdWx0IHlcbjExMDA6XHRcbjExMDE6XHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbjExMDI6XHRcdGJvb2xcbjExMDM6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMDQ6XHRcdGRlcGVuZHMgb24gSEFWRV9OTUlcbjExMDU6XHRcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjExMDY6XHRcdGRlZmF1bHQgeVxuMTEwNzpcdFxuMTEwODpcdGNvbmZpZyBNRU1DR19WMVxuMTEwOTpcdFx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMTEwOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTExOlx0XHRkZWZhdWx0IG5cbjExMTI6XHRcdGhlbHBcbjExMTM6XHRcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XG4xMTE0Olx0XHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXG4xMTE1Olx0XHQgIHdoaWNoIGhhdmVuJiMzOTt0IG1pZ3JhdGVkIHRvIHRoZSBuZXcgY2dyb3VwIHYyIGludGVyZmFjZSB5ZXQuIElmIHlvdVxuMTExNjpcdFx0ICBkbyBub3QgaGF2ZSBhbnkgc3VjaCBhcHBsaWNhdGlvbiB0aGVuIHlvdSBhcmUgY29tcGxldGVseSBmaW5lIGxlYXZpbmdcbjExMTc6XHRcdCAgdGhpcyBvcHRpb24gZGlzYWJsZWQuXG4xMTE4Olx0XG4xMTE5Olx0XHQgIFBsZWFzZSBub3RlIHRoYXQgZmVhdHVyZSBzZXQgb2YgdGhlIGxlZ2FjeSBtZW1vcnkgY29udHJvbGxlciBpcyBsaWtlbHlcbjExMjA6XHRcdCAgZ29pbmcgdG8gc2hyaW5rIGR1ZSB0byBkZXByZWNhdGlvbiBwcm9jZXNzLiBOZXcgZGVwbG95bWVudHMgd2l0aCB2MVxuMTEyMTpcdFx0ICBjb250cm9sbGVyIGFyZSBoaWdobHkgZGlzY291cmFnZWQuXG4xMTIyOlx0XG4xMTIzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjExMjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzMjgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNQ0dfVjFgIGp1bXAgb3V0IGF0IG1lIGFzIGZ1bmRhbWVudGFsLiBUaGVzZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBvZiBtZW1vcnkgY29udHJvbCBncm91cHMsIHNvIG5hdHVyYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW1wYWN0LiBUaGVuLCBJIHNlZSB0aGlzIGNoYW5nZSBpbiBgbW0vdm1zY2FuLmNgIHJlbGF0ZWQgdG8gYGxydV9nZW5fcm90YXRlX21lbWNnYCwgYW5kIEkga25vdyBJIGhhdmUgdG8gY2hlY2sgdGhlIGBMUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gR2l2ZW4gaXRzIG5hbWUgYW5kIHdoZXJlIGl0JiMzOTtzIHJlZmVyZW5jZWQsIGl0JiMzOTtzIG9idmlvdXNseSBnb2luZyB0byBjb250cm9sIHRoZSBnZW5lcmF0aW9uYWwgTFJVIGltcGxlbWVudGF0aW9uIGZvciBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gbWVtY2dzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaXRzIGRlZmluaXRpb24gYW5kIHNldHRpbmdzLCBzbyBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYG1tL0tjb25maWdgIHRvIGRvIHRoYXQuIEkga25vdyB3aGVyZSB0byBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzODg9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTM5OC0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxMzk5OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDAtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MDctXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDA5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMy1cbm1tL0tjb25maWc6MTQxNDpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDE1LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjItXG5tbS9LY29uZmlnOjE0MjM6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjQtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNb2RpZmllZCBNZW1vcnkgQ29udHJvbCBMb2dpYyBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgKmFjdHVhbGx5KiByZWxldmFudCBlbnRyeSBwb2ludHMgdG8gdGhlIGNoYW5nZWQgbG9naWMgZm9yIGZ1enppbmcgcHVycG9zZXMuIEZpcnN0LCBJJiMzOTttIGNoZWNraW5nIHRoZSBgRm9jdXNTeW1ib2xzYC4uLiByaWdodC4KCkkgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRoYXQgd2VyZSBhbHRlcmVkIG9yIGFyZSBkaXJlY3QgZW50cnlwb2ludHMgdG8gdGhlIG1vZGlmaWVkIGxvZ2ljLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGRpZmYgcmV2aWV3LCBmb2N1c2luZyBvbiB3aGF0IHdhcyBjaGFuZ2VkLiBJIHNlZSB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGRpZmY6CgpJbiBgbW0vbWVtY29udHJvbC12MS5jYCwgSSYjMzk7dmUgZ290IGEgbGlzdC4KCkluIGBtbS9tZW1jb250cm9sLmNgLCB0aGVyZSYjMzk7cyBhIGxpc3QuCgpBbmQgaW4gYG1tL3Ztc2Nhbi5jYCwgYSBmZXcgbW9yZS4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGhlcmUsIHNlY3Rpb24gZm91ciB0byBiZSBleGFjdC4gVGhleSYjMzk7cmUgdGVsbGluZyBtZSB0byBhdm9pZCBsaXN0aW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocywgYW5kIGluc3RlYWQsIHRvIHRhcmdldCBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cy4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gU28sIG1lbW9yeSBhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBjb3JlIHN5bmNocm9uaXphdGlvbj8gTm90IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gSSBuZWVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRpbmcgdGhlIGFsdGVyZWQgbG9naWMgb3IgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGZlYXR1cmUuIEFsc28sIGlmIHRoZXJlIGFyZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucywgSSBoYXZlIHRvIGZpbmQgbm9uLXN0YXRpYyBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgKnVzZSogdGhlbS4gR290IGl0LgoKU28sIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBleGFtaW5lIHRob3NlIG5vbi1zdGF0aWMgc3ltYm9scyBpbiBgbW0vbWVtY29udHJvbC12MS5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHNlZSB3aGljaCBvbmVzIGFyZSBnb29kIHRhcmdldHMuIGBtZW1jZzFfY29tbWl0X2NoYXJnZWAgc2VlbXMgcmVsZXZhbnQsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGNhbGxlZCBvbiBldmVyeSBwYWdlIGNoYXJnZSB1bmRlciB2MSwgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhlIHYxIGNoYW5nZXMuIGBfX21lbWNnMV9zd2Fwb3V0YCBpcyBhbm90aGVyLCBhbG9uZyB3aXRoIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgLiBOb3csIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGVgIGFuZCBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgIC0gdGhleSBhcmUgZGVmaW5lZCBpbiBgY2Z0eXBlYCwgc28gdGhleSB3aWxsIGFjdHVhbGx5IGJlIHN5bWJvbHMgaW4gdGhlIGJpbmFyeSwgdGhhdCBpcyBwZXJmZWN0ISBBbmQgZXZlbiB0aG91Z2ggYGxydV9nZW5fcm90YXRlX21lbWNnYCBpcyBzdGF0aWMgaW4gYHZtc2Nhbi5jYCwgaXQmIzM5O3Mgc3RpbGwgYSBzeW1ib2wuIFRoYXQmIzM5O3MgZ29vZC4KCldhaXQgYSBzZWNvbmQsIHN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcywgdW5sZXNzIHRoZXkmIzM5O3JlIGlubGluZWQsICphcmUqIHN5bWJvbHMgaW4gdm1saW51eC4gR29vZCBjYXRjaC4gU28gZnVuY3Rpb25zIGxpa2UgYGxydV9nZW5fcm90YXRlX21lbWNnLmlzcmEuMGAgb3IganVzdCBgbHJ1X2dlbl9yb3RhdGVfbWVtY2dgIGFyZSBzeW1ib2xzLiBIb3dldmVyLCB0aG9zZSBub24tc3RhdGljIGVudHJ5cG9pbnRzIG9yIGRpcmVjdCBgY2Z0eXBlYCBoYW5kbGVycyBsaWtlIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGVgLCBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgLCBgbWVtY2cxX3VuY2hhcmdlX2JhdGNoYCwgYG1lbWNnMV9jb21taXRfY2hhcmdlYCwgYW5kIGBfX21lbWNnMV9zd2Fwb3V0YCBhcmUgZXhjZWxsZW50IHRhcmdldHMuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB3aGF0IGNhbGxzIGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2AgaW4gYG1tL3Ztc2Nhbi5jYC4gR290dGEgZmluZCB0aG9zZSBjYWxsZXJzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3JvdGF0ZV9tZW1jZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQzNzQ9ZW51bSB7XG4tLVxubW0vdm1zY2FuLmMtNDM4MC1cbm1tL3Ztc2Nhbi5jOjQzODE6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG5tbS92bXNjYW4uYy00MzgyLXtcbi0tXG5tbS92bXNjYW4uYz00NDUyPXZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy00NDU4LVxubW0vdm1zY2FuLmM6NDQ1OTpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfT0xEKTtcbm1tL3Ztc2Nhbi5jLTQ0NjAtXHR9XG4tLVxubW0vdm1zY2FuLmM9NTEyNj1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTQ2LVx0XHRpZiAob3ApIHtcbm1tL3Ztc2Nhbi5jOjUxNDc6XHRcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XG5tbS92bXNjYW4uYy01MTQ4LVx0XHRcdG9wID0gMDtcbi0tXG5tbS92bXNjYW4uYy01MTc4LVx0aWYgKG9wKVxubW0vdm1zY2FuLmM6NTE3OTpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XG5tbS92bXNjYW4uYy01MTgwLVxuLS1cbm1tL3Ztc2Nhbi5jLTUxODUtXG5tbS92bXNjYW4uYzo1MTg2Olx0LyogcmVzdGFydCBpZiByYWNlZCB3aXRoIGxydV9nZW5fcm90YXRlX21lbWNnKCkgKi9cbm1tL3Ztc2Nhbi5jLTUxODctXHRpZiAoZ2VuICE9IGdldF9udWxsc192YWx1ZShwb3MpKVxuLS1cbm1tL3Ztc2Nhbi5jPTUxOTY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTIwOS1cdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jOjUyMTA6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbm1tL3Ztc2Nhbi5jLTUyMTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDE1CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDM5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIENvZGUgQ2hhbmdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWVtb3J5IGNncm91cCAobWVtY2cpIHYxIHNvZnQgbGltaXQgcmVjbGFpbSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIGFzc29jaWF0ZWQgdHJlZSB0cmFja2luZyBsb2dpYy4gSSB3YW50IHRvIHplcm8gaW4gb24gaG93IHRoZSBzcGVjaWZpYyBoYW5kbGVycyBmb3IgYGNncm91cC5tZW1vcnkuc29mdF9saW1pdF9pbl9ieXRlc2AsIG5hbWVseSBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlYCBhbmQgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF9yZWFkYCwgYXJlIGFmZmVjdGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gdGhlIG1lbWNnLXYxIGV2ZW50IGNoZWNrZXJzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgLCBgbWVtY2cxX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgIHRvIGFzc2VzcyBpZiBhbnkgY3JpdGljYWwgbG9naWMgb3IgYm91bmRhcnkgY29uZGl0aW9ucyBhcmUgYmVpbmcgYWx0ZXJlZCBpbiB0ZXJtcyBvZiB1bmNoYXJnaW5nIGFuZCBzd2FwcGluZy4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlcGVuZGVudCBvbiBgQ09ORklHX01FTUNHYCwgYENPTkZJR19NRU1DR19WMWAsIGFuZCBgQ09ORklHX0xSVV9HRU5gLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhhdCB0aGVzZSBhcmUgZW5hYmxlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCB0byBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UuCgpUbyBzdW1tYXJpemUsIHRoaXMgY2hhbmdlIGFwcGVhcnMgdG8gYmUgY2VudGVyZWQgb24gcmVtb3ZpbmcgbGVnYWN5IHYxIHNvZnQgbGltaXQgcmVjbGFpbSBhbmQgdHJlZSB0cmFja2luZywgYW5kLCB3aXRoIHRoZSBrZXkgdG91Y2hwb2ludHMgYmVpbmcgZXZlbnQgY2hlY2tpbmcvcmF0ZS1saW1pdGluZywgdW5jaGFyZ2luZywgcGFnZSByZWNsYWltIGxvb3BzLCBhbmQgbXVsdGktZ2VuIExSVSByb3RhdGlvbi4gVGhlc2UgY29tcG9uZW50cyBhcmUgYWxsIHRpZ2h0bHkgY291cGxlZCwgc28gYW55IGNoYW5nZSBpbiB0aGVzZSBmdW5jdGlvbnMgbXVzdCBiZSB2aWV3ZWQgaG9saXN0aWNhbGx5LgoKR2l2ZW4gdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIHRvdWNoIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBzdWJzeXN0ZW0gY29kZSBwYXRocywgSSBhbSBkZWVtaW5nIHRoaXMgcGF0Y2ggYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAuIEkgaGF2ZSB0aGUgZm9sbG93aW5nIHN5bWJvbHMgaW4gbXkgc2lnaHQ6Ci0gYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAKLSBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgCi0gYG1lbWNnMV91bmNoYXJnZV9iYXRjaGAKLSBgbWVtY2cxX2NvbW1pdF9jaGFyZ2VgCi0gYF9fbWVtY2cxX3N3YXBvdXRgCi0gYGxydV9nZW5fcm90YXRlX21lbWNnYAoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhpcyBhbmFseXNpcyBkb2N1bWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZCYjMzQ7LAogICAgJiMzNDttZW1jZzFfdW5jaGFyZ2VfYmF0Y2gmIzM0OywKICAgICYjMzQ7bWVtY2cxX2NvbW1pdF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JvdGF0ZV9tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OywKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZCYjMzQ7LAogICAgJiMzNDttZW1jZzFfdW5jaGFyZ2VfYmF0Y2gmIzM0OywKICAgICYjMzQ7bWVtY2cxX2NvbW1pdF9jaGFyZ2UmIzM0OywKICAgICYjMzQ7X19tZW1jZzFfc3dhcG91dCYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JvdGF0ZV9tZW1jZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZW1vdmVzIHRoZSBsZWdhY3kgY2dyb3VwIHYxIHNvZnQtbGltaXQgcmVjbGFpbSBtZWNoYW5pc20gYWNyb3NzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1lbWNvbnRyb2wsIG1lbWNvbnRyb2wtdjEsIGFuZCB2bXNjYW4pLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBkZWxldGVzIHRoZSBzb2Z0IGxpbWl0IFJCLXRyZWUgdHJhY2tpbmcgc3RydWN0dXJlcywgZnVuY3Rpb25zLCBhbmQgdHJhY2Vwb2ludHMuXG4yLiBJdCByZW1vdmVzIHRoZSB1bnVzZWQgYHNvZnRfbGltaXRgIGFuZCBgdGFyZ2V0c2AgZmllbGRzIGZyb20gYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdWAsIHNpbXBsaWZ5aW5nIHBlci1jcHUgZXZlbnQgcmF0ZWxpbWl0aW5nIHRvIGp1c3QgYHRocmVzaG9sZF90YXJnZXRgLlxuMy4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBuaWRgIGZpZWxkIGZyb20gYHN0cnVjdCB1bmNoYXJnZV9nYXRoZXJgIGFuZCB1bnVzZWQgc2Nhbm5pbmcgc3RhdGlzdGljcyB2YXJpYWJsZXMgZnJvbSByZWNsYWltIHBhdGhzIChgc2hyaW5rX3pvbmVzYCBhbmQgYGJhbGFuY2VfcGdkYXRgKS5cblxuVGhlIGNoYW5nZXMgY29uc2lzdCBzdHJpY3RseSBvZiBkZWFkL2RlcHJlY2F0ZWQgY29kZSByZW1vdmFsIGFuZCBzdHJ1Y3R1cmFsIHNpbXBsaWZpY2F0aW9ucy4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZhMGRhY2RkOTU2ZGVmNzRlZTAwNjA1MWVkODY5MmQ5NWQ1OWJiYzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjQyOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCBkYTYyNWQyZWRiM2JhLi5jNzk5OTI2NDM1NTYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtOTUsMjAgJiM0Mzs5NSw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAlzdHJ1Y3QgbHJ1dmVjX3N0YXRzCQkJKmxydXZlY19zdGF0czsKIAlzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyBfX3JjdQkqc2hyaW5rZXJfaW5mbzsKIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQotCS8qCi0JICogTWVtY2ctdjEgb25seSBzdHVmZiBpbiBtaWRkbGUgYXMgYnVmZmVyIGJldHdlZW4gcmVhZCBtb3N0bHkgZmllbGRzCi0JICogYW5kIHVwZGF0ZSBvZnRlbiBmaWVsZHMgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZy4gSWYgdjEgc3R1ZmYgaXMKLQkgKiBub3QgcHJlc2VudCwgYW4gZXhwbGljaXQgcGFkZGluZyBpcyBuZWVkZWQuCi0JICovCi0KLQlzdHJ1Y3QgcmJfbm9kZQkJdHJlZV9ub2RlOwkvKiBSQiB0cmVlIG5vZGUgKi8KLQl1bnNpZ25lZCBsb25nCQl1c2FnZV9pbl9leGNlc3M7LyogU2V0IHRvIHRoZSB2YWx1ZSBieSB3aGljaCAqLwotCQkJCQkJLyogdGhlIHNvZnQgbGltaXQgaXMgZXhjZWVkZWQqLwotCWJvb2wJCQlvbl90cmVlOwotI2Vsc2UKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMV8pOwotI2VuZGlmCiAKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CkBAIC0yOTMsOCAmIzQzOzI4MCw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHsKIAogCXN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSBfX3BlcmNwdSAqZXZlbnRzX3BlcmNwdTsKIAotCXVuc2lnbmVkIGxvbmcgc29mdF9saW1pdDsKLQogCS8qIHByb3RlY3RlZCBieSBtZW1jZ19vb21fbG9jayAqLwogCWJvb2wgb29tX2xvY2s7CiAJaW50IHVuZGVyX29vbTsKQEAgLTE5MjQsMTAgJiM0MzsxOTA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogLyogQ2dyb3VwIHYxLXJlbGF0ZWQgZGVjbGFyYXRpb25zICovCiAKICNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsCi0JCQkJCWdmcF90IGdmcF9tYXNrLAotCQkJCQl1bnNpZ25lZCBsb25nICp0b3RhbF9zY2FubmVkKTsKLQogYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtMTk0OCwxNCAmIzQzOzE5MjksNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZCkKIH0KIAogI2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovCi1zdGF0aWMgaW5saW5lCi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLAotCQkJCQlnZnBfdCBnZnBfbWFzaywKLQkJCQkJdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA2N2M4NGE4YTcyNTgzLi44NGUyMzdmMmMxN2RiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTYzOCwzNSAmIzQzOzYzOCwzMiBAQCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHsKICAqIEZvciBlYWNoIG5vZGUsIG1lbWNncyBhcmUgZGl2aWRlZCBpbnRvIHR3byBnZW5lcmF0aW9uczogdGhlIG9sZCBhbmQgdGhlCiAgKiB5b3VuZy4gRm9yIGVhY2ggZ2VuZXJhdGlvbiwgbWVtY2dzIGFyZSByYW5kb21seSBzaGFyZGVkIGludG8gbXVsdGlwbGUgYmlucwogICogdG8gaW1wcm92ZSBzY2FsYWJpbGl0eS4gRm9yIGVhY2ggYmluLCB0aGUgaGxpc3RfbnVsbHMgaXMgdmlydHVhbGx5IGRpdmlkZWQKLSAqIGludG8gdGhyZWUgc2VnbWVudHM6IHRoZSBoZWFkLCB0aGUgdGFpbCBhbmQgdGhlIGRlZmF1bHQuCiYjNDM7ICogaW50byB0d28gc2VnbWVudHM6IHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC4KICAqCiAgKiBBbiBvbmxpbmluZyBtZW1jZyBpcyBhZGRlZCB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLgogICogVGhlIGV2aWN0aW9uIHN0YXJ0cyBhdCB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLiBUaGUKICAqIHBlci1ub2RlIG1lbWNnIGdlbmVyYXRpb24gY291bnRlciwgd2hvc2UgcmVtaW5kZXIgKG1vZCBNRU1DR19OUl9HRU5TKSBpbmRleGVzCiAgKiB0aGUgb2xkIGdlbmVyYXRpb24sIGlzIGluY3JlbWVudGVkIHdoZW4gYWxsIGl0cyBiaW5zIGJlY29tZSBlbXB0eS4KICAqCi0gKiBUaGVyZSBhcmUgZm91ciBvcGVyYXRpb25zOgotICogMS4gTUVNQ0dfTFJVX0hFQUQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIGl0cwotICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyAmIzM0O3NlZyYjMzQ7IHRvICYjMzQ7aGVhZCYjMzQ7OwotICogMi4gTUVNQ0dfTFJVX1RBSUwsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIHRhaWwgb2YgYSByYW5kb20gYmluIGluIGl0cwomIzQzOyAqIFRoZXJlIGFyZSB0aHJlZSBvcGVyYXRpb25zOgomIzQzOyAqIDEuIE1FTUNHX0xSVV9UQUlMLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHMKICAqICAgIGN1cnJlbnQgZ2VuZXJhdGlvbiAob2xkIG9yIHlvdW5nKSBhbmQgdXBkYXRlcyBpdHMgJiMzNDtzZWcmIzM0OyB0byAmIzM0O3RhaWwmIzM0OzsKLSAqIDMuIE1FTUNHX0xSVV9PTEQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGQKJiM0MzsgKiAyLiBNRU1DR19MUlVfT0xELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkCiAgKiAgICBnZW5lcmF0aW9uLCB1cGRhdGVzIGl0cyAmIzM0O2dlbiYjMzQ7IHRvICYjMzQ7b2xkJiMzNDsgYW5kIHJlc2V0cyBpdHMgJiMzNDtzZWcmIzM0OyB0byAmIzM0O2RlZmF1bHQmIzM0OzsKLSAqIDQuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlCiYjNDM7ICogMy4gTUVNQ0dfTFJVX1lPVU5HLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUKICAqICAgIHlvdW5nIGdlbmVyYXRpb24sIHVwZGF0ZXMgaXRzICYjMzQ7Z2VuJiMzNDsgdG8gJiMzNDt5b3VuZyYjMzQ7IGFuZCByZXNldHMgaXRzICYjMzQ7c2VnJiMzNDsgdG8KICAqICAgICYjMzQ7ZGVmYXVsdCYjMzQ7LgogICoKICAqIFRoZSBldmVudHMgdGhhdCB0cmlnZ2VyIHRoZSBhYm92ZSBvcGVyYXRpb25zIGFyZToKLSAqIDEuIEV4Y2VlZGluZyB0aGUgc29mdCBsaW1pdCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX0hFQUQ7Ci0gKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbG93LCB3aGljaCB0cmlnZ2VycwomIzQzOyAqIDEuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzCiAgKiAgICBNRU1DR19MUlVfVEFJTDsKLSAqIDMuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplCiYjNDM7ICogMi4gVGhlIGZpcnN0IGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1RBSUw7Ci0gKiA0LiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKJiM0MzsgKiAzLiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemUKICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HOwotICogNS4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7Ci0gKiA2LiBGaW5pc2hpbmcgdGhlIGFnaW5nIG9uIHRoZSBldmljdGlvbiBwYXRoLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7Ci0gKiA3LiBPZmZsaW5pbmcgYSBtZW1jZywgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX09MRC4KJiM0MzsgKiA0LiBBdHRlbXB0aW5nIHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBtaW4sIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORzsKJiM0MzsgKiA1LiBGaW5pc2hpbmcgdGhlIGFnaW5nIG9uIHRoZSBldmljdGlvbiBwYXRoLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7CiYjNDM7ICogNi4gT2ZmbGluaW5nIGEgbWVtY2csIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9PTEQuCiAgKgogICogTm90ZXM6CiAgKiAxLiBNZW1jZyBMUlUgb25seSBhcHBsaWVzIHRvIGdsb2JhbCByZWNsYWltLCBhbmQgdGhlIHJvdW5kLXJvYmluIGluY3JlbWVudGluZwpAQCAtNjk5LDcgJiM0Mzs2OTYsNiBAQCB2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogdm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogdm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7Ci12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7CiB2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7CiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTsKIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpOwpAQCAtNzQwLDEwICYjNDM7NzM2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCi17Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCmluZGV4IGI0YmY3YjhkZWYxZjUuLjhhODcyOTkwYjRiZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oCkBAIC0yMTQsMTMgJiM0MzsyMTQsNiBAQCBERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9iZQogCiAJVFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZykKICk7Ci0KLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbiwKLQotCVRQX1BST1RPKGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLAotCi0JVFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZykKLSk7CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovCiAKIERFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwKQEAgLTI2MCwxMyAmIzQzOzI1Myw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsCiAKIAlUUF9BUkdTKG5yX3JlY2xhaW1lZCwgbWVtY2cpCiApOwotCi1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZCwKLQotCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLAotCi0JVFBfQVJHUyhucl9yZWNsYWltZWQsIG1lbWNnKQotKTsKICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi8KIAogVFJBQ0VfRVZFTlQobW1fc2hyaW5rX3NsYWJfc3RhcnQsCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA1Y2MyMjBkYjkwNzY2Li5lMTZmMTI1MGIyNWM4IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTc4LDEwICYjNDM7NzgsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQkgICBnZnBfdCBnZnBfbWFzaywKIAkJCQkJICAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucywKIAkJCQkJICAgaW50ICpzd2FwcGluZXNzKTsKLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsCi0JCQkJICAgICBwZ19kYXRhX3QgKnBnZGF0LAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCk7CiAKICNpZmRlZiBDT05GSUdfTlVNQQogZXh0ZXJuIGludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jCmluZGV4IDA1ZWY1NWNhZTRkYzYuLmJmMmM3ZDUzYjAxYjEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmMKQEAgLTE3LDMwICYjNDM7MTcsNiBAQAogI2luY2x1ZGUgJiMzNDtzd2FwX3RhYmxlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDttZW1jb250cm9sLXYxLmgmIzM0OwogCi0vKgotICogQ2dyb3VwcyBhYm92ZSB0aGVpciBsaW1pdHMgYXJlIG1haW50YWluZWQgaW4gYSBSQi1UcmVlLCBpbmRlcGVuZGVudCBvZgotICogdGhlaXIgaGllcmFyY2h5IHJlcHJlc2VudGF0aW9uCi0gKi8KLQotc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSB7Ci0Jc3RydWN0IHJiX3Jvb3QgcmJfcm9vdDsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmJfcmlnaHRtb3N0OwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KLXN0cnVjdCBtZW1fY2dyb3VwX3RyZWUgewotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKnJiX3RyZWVfcGVyX25vZGVbTUFYX05VTU5PREVTXTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlIHNvZnRfbGltaXRfdHJlZSBfX3JlYWRfbW9zdGx5OwotCi0vKgotICogTWF4aW11bSBsb29wcyBpbiBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbSgpLCB1c2VkIGZvciBzb2Z0Ci0gKiBsaW1pdCByZWNsYWltIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMsIGlmIHRoZXkgZXZlciBvY2N1ci4KLSAqLwotI2RlZmluZQlNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTCQkxMDAKLSNkZWZpbmUJTUVNX0NHUk9VUF9NQVhfU09GVF9MSU1JVF9SRUNMQUlNX0xPT1BTCTIKLQogLyogZm9yIE9PTSAqLwogc3RydWN0IG1lbV9jZ3JvdXBfZXZlbnRmZF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC0xMDYsMzAxICYjNDM7ODIsNiBAQCBzdGF0aWMgc3RydWN0IGxvY2tkZXBfbWFwIG1lbWNnX29vbV9sb2NrX2RlcF9tYXAgPSB7CiAKIERFRklORV9TUElOTE9DSyhtZW1jZ19vb21fbG9jayk7CiAKLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LAotCQkJCQkgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eiwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgbmV3X3VzYWdlX2luX2V4Y2VzcykKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmYW1wO21jdHotJmd0O3JiX3Jvb3QucmJfbm9kZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXpfbm9kZTsKLQlib29sIHJpZ2h0bW9zdCA9IHRydWU7Ci0KLQlpZiAobXotJmd0O29uX3RyZWUpCi0JCXJldHVybjsKLQotCW16LSZndDt1c2FnZV9pbl9leGNlc3MgPSBuZXdfdXNhZ2VfaW5fZXhjZXNzOwotCWlmICghbXotJmd0O3VzYWdlX2luX2V4Y2VzcykKLQkJcmV0dXJuOwotCXdoaWxlICgqcCkgewotCQlwYXJlbnQgPSAqcDsKLQkJbXpfbm9kZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsCi0JCQkJCXRyZWVfbm9kZSk7Ci0JCWlmIChtei0mZ3Q7dXNhZ2VfaW5fZXhjZXNzICZsdDsgbXpfbm9kZS0mZ3Q7dXNhZ2VfaW5fZXhjZXNzKSB7Ci0JCQlwID0gJmFtcDsoKnApLSZndDtyYl9sZWZ0OwotCQkJcmlnaHRtb3N0ID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlwID0gJmFtcDsoKnApLSZndDtyYl9yaWdodDsKLQkJfQotCX0KLQotCWlmIChyaWdodG1vc3QpCi0JCW1jdHotJmd0O3JiX3JpZ2h0bW9zdCA9ICZhbXA7bXotJmd0O3RyZWVfbm9kZTsKLQotCXJiX2xpbmtfbm9kZSgmYW1wO216LSZndDt0cmVlX25vZGUsIHBhcmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZhbXA7bXotJmd0O3RyZWVfbm9kZSwgJmFtcDttY3R6LSZndDtyYl9yb290KTsKLQltei0mZ3Q7b25fdHJlZSA9IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LAotCQkJCQkgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eikKLXsKLQlpZiAoIW16LSZndDtvbl90cmVlKQotCQlyZXR1cm47Ci0KLQlpZiAoJmFtcDttei0mZ3Q7dHJlZV9ub2RlID09IG1jdHotJmd0O3JiX3JpZ2h0bW9zdCkKLQkJbWN0ei0mZ3Q7cmJfcmlnaHRtb3N0ID0gcmJfcHJldigmYW1wO216LSZndDt0cmVlX25vZGUpOwotCi0JcmJfZXJhc2UoJmFtcDttei0mZ3Q7dHJlZV9ub2RlLCAmYW1wO21jdHotJmd0O3JiX3Jvb3QpOwotCW16LSZndDtvbl90cmVlID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteiwKLQkJCQkgICAgICAgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3R6LSZndDtsb2NrLCBmbGFncyk7Ci0JX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHotJmd0O2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc29mdF9saW1pdF9leGNlc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBwYWdlX2NvdW50ZXJfcmVhZCgmYW1wO21lbWNnLSZndDttZW1vcnkpOwotCXVuc2lnbmVkIGxvbmcgc29mdF9saW1pdCA9IFJFQURfT05DRShtZW1jZy0mZ3Q7c29mdF9saW1pdCk7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3MgPSAwOwotCi0JaWYgKG5yX3BhZ2VzICZndDsgc29mdF9saW1pdCkKLQkJZXhjZXNzID0gbnJfcGFnZXMgLSBzb2Z0X2xpbWl0OwotCi0JcmV0dXJuIGV4Y2VzczsKLX0KLQotc3RhdGljIHZvaWQgbWVtY2cxX3VwZGF0ZV90cmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGV4Y2VzczsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejsKLQotCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgewotCQlpZiAoc29mdF9saW1pdF9leGNlc3MobWVtY2cpKQotCQkJbHJ1X2dlbl9zb2Z0X3JlY2xhaW0obWVtY2csIG5pZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbmlkXTsKLQlpZiAoIW1jdHopCi0JCXJldHVybjsKLQkvKgotCSAqIE5lY2Vzc2FyeSB0byB1cGRhdGUgYWxsIGFuY2VzdG9ycyB3aGVuIGhpZXJhcmNoeSBpcyB1c2VkLgotCSAqIGJlY2F1c2UgdGhlaXIgZXZlbnQgY291bnRlciBpcyBub3QgdG91Y2hlZC4KLQkgKi8KLQlmb3IgKDsgbWVtY2c7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSB7Ci0JCW16ID0gbWVtY2ctJmd0O25vZGVpbmZvW25pZF07Ci0JCWV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKG1lbWNnKTsKLQkJLyoKLQkJICogV2UgaGF2ZSB0byB1cGRhdGUgdGhlIHRyZWUgaWYgbXogaXMgb24gUkItdHJlZSBvcgotCQkgKiBtZW0gaXMgb3ZlciBpdHMgc29mdGxpbWl0LgotCQkgKi8KLQkJaWYgKGV4Y2VzcyB8fCBtei0mZ3Q7b25fdHJlZSkgewotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDttY3R6LSZndDtsb2NrLCBmbGFncyk7Ci0JCQkvKiBpZiBvbi10cmVlLCByZW1vdmUgaXQgKi8KLQkJCWlmIChtei0mZ3Q7b25fdHJlZSkKLQkJCQlfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTsKLQkJCS8qCi0JCQkgKiBJbnNlcnQgYWdhaW4uIG16LSZndDt1c2FnZV9pbl9leGNlc3Mgd2lsbCBiZSB1cGRhdGVkLgotCQkJICogSWYgZXhjZXNzIGlzIDAsIG5vIHRyZWUgb3BzLgotCQkJICovCi0JCQlfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG16LCBtY3R6LCBleGNlc3MpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21jdHotJmd0O2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KLX0KLQotdm9pZCBtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQotewotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCWludCBuaWQ7Ci0KLQlmb3JfZWFjaF9ub2RlKG5pZCkgewotCQlteiA9IG1lbWNnLSZndDtub2RlaW5mb1tuaWRdOwotCQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbmlkXTsKLQkJaWYgKG1jdHopCi0JCQltZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKgotX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCi1yZXRyeToKLQlteiA9IE5VTEw7Ci0JaWYgKCFtY3R6LSZndDtyYl9yaWdodG1vc3QpCi0JCWdvdG8gZG9uZTsJCS8qIE5vdGhpbmcgdG8gcmVjbGFpbSBmcm9tICovCi0KLQlteiA9IHJiX2VudHJ5KG1jdHotJmd0O3JiX3JpZ2h0bW9zdCwKLQkJICAgICAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIHRyZWVfbm9kZSk7Ci0JLyoKLQkgKiBSZW1vdmUgdGhlIG5vZGUgbm93IGJ1dCBzb21lb25lIGVsc2UgY2FuIGFkZCBpdCBiYWNrLAotCSAqIHdlIHdpbGwgdG8gYWRkIGl0IGJhY2sgYXQgdGhlIGVuZCBvZiByZWNsYWltIHRvIGl0cyBjb3JyZWN0Ci0JICogcG9zaXRpb24gaW4gdGhlIHRyZWUuCi0JICovCi0JX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7Ci0JaWYgKCFzb2Z0X2xpbWl0X2V4Y2Vzcyhtei0mZ3Q7bWVtY2cpIHx8Ci0JICAgICFjc3NfdHJ5Z2V0KCZhbXA7bXotJmd0O21lbWNnLSZndDtjc3MpKQotCQlnb3RvIHJldHJ5OwotZG9uZToKLQlyZXR1cm4gbXo7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqCi1tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwotCi0Jc3Bpbl9sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCW16ID0gX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopOwotCXNwaW5fdW5sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCXJldHVybiBtejsKLX0KLQotc3RhdGljIGludCBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZywKLQkJCQkgICBwZ19kYXRhX3QgKnBnZGF0LAotCQkJCSAgIGdmcF90IGdmcF9tYXNrLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKnZpY3RpbSA9IE5VTEw7Ci0JaW50IHRvdGFsID0gMDsKLQlpbnQgbG9vcCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3M7Ci0JdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwotCXN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHJlY2xhaW0gPSB7Ci0JCS5wZ2RhdCA9IHBnZGF0LAotCX07Ci0KLQlleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhyb290X21lbWNnKTsKLQotCXdoaWxlICgxKSB7Ci0JCXZpY3RpbSA9IG1lbV9jZ3JvdXBfaXRlcihyb290X21lbWNnLCB2aWN0aW0sICZhbXA7cmVjbGFpbSk7Ci0JCWlmICghdmljdGltKSB7Ci0JCQlsb29wJiM0MzsmIzQzOzsKLQkJCWlmIChsb29wICZndDs9IDIpIHsKLQkJCQkvKgotCQkJCSAqIElmIHdlIGhhdmUgbm90IGJlZW4gYWJsZSB0byByZWNsYWltCi0JCQkJICogYW55dGhpbmcsIGl0IG1pZ2h0IGJlY2F1c2UgdGhlcmUgYXJlCi0JCQkJICogbm8gcmVjbGFpbWFibGUgcGFnZXMgdW5kZXIgdGhpcyBoaWVyYXJjaHkKLQkJCQkgKi8KLQkJCQlpZiAoIXRvdGFsKQotCQkJCQlicmVhazsKLQkJCQkvKgotCQkJCSAqIFdlIHdhbnQgdG8gZG8gbW9yZSB0YXJnZXRlZCByZWNsYWltLgotCQkJCSAqIGV4Y2VzcyAmZ3Q7Jmd0OyAyIGlzIG5vdCB0byBleGNlc3NpdmUgc28gYXMgdG8KLQkJCQkgKiByZWNsYWltIHRvbyBtdWNoLCBub3IgdG9vIGxlc3MgdGhhdCB3ZSBrZWVwCi0JCQkJICogY29taW5nIGJhY2sgdG8gcmVjbGFpbSBmcm9tIHRoaXMgY2dyb3VwCi0JCQkJICovCi0JCQkJaWYgKHRvdGFsICZndDs9IChleGNlc3MgJmd0OyZndDsgMikgfHwKLQkJCQkJKGxvb3AgJmd0OyBNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTKSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQl0b3RhbCAmIzQzOz0gbWVtX2Nncm91cF9zaHJpbmtfbm9kZSh2aWN0aW0sIGdmcF9tYXNrLCBmYWxzZSwKLQkJCQkJcGdkYXQsICZhbXA7bnJfc2Nhbm5lZCk7Ci0JCSp0b3RhbF9zY2FubmVkICYjNDM7PSBucl9zY2FubmVkOwotCQlpZiAoIXNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpKQotCQkJYnJlYWs7Ci0JfQotCW1lbV9jZ3JvdXBfaXRlcl9icmVhayhyb290X21lbWNnLCB2aWN0aW0pOwotCXJldHVybiB0b3RhbDsKLX0KLQotdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwKLQkJCQkJICAgIGdmcF90IGdmcF9tYXNrLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCkKLXsKLQl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCA9IDA7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LCAqbmV4dF9teiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyByZWNsYWltZWQ7Ci0JaW50IGxvb3AgPSAwOwotCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7Ci0JdW5zaWduZWQgbG9uZyBleGNlc3M7Ci0KLQlpZiAobHJ1X2dlbl9lbmFibGVkKCkpCi0JCXJldHVybiAwOwotCi0JaWYgKG9yZGVyICZndDsgMCkKLQkJcmV0dXJuIDA7Ci0KLQltY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbcGdkYXQtJmd0O25vZGVfaWRdOwotCi0JLyoKLQkgKiBEbyBub3QgZXZlbiBib3RoZXIgdG8gY2hlY2sgdGhlIGxhcmdlc3Qgbm9kZSBpZiB0aGUgcm9vdAotCSAqIGlzIGVtcHR5LiBEbyBpdCBsb2NrbGVzcyB0byBwcmV2ZW50IGxvY2sgYm91bmNpbmcuIFJhY2VzCi0JICogYXJlIGFjY2VwdGFibGUgYXMgc29mdCBsaW1pdCBpcyBiZXN0IGVmZm9ydCBhbnl3YXkuCi0JICovCi0JaWYgKCFtY3R6IHx8IFJCX0VNUFRZX1JPT1QoJmFtcDttY3R6LSZndDtyYl9yb290KSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFRoaXMgbG9vcCBjYW4gcnVuIGEgd2hpbGUsIHNwZWNpYWxseSBpZiBtZW1fY2dyb3VwJiMzOTtzIGNvbnRpbnVvdXNseQotCSAqIGtlZXAgZXhjZWVkaW5nIHRoZWlyIHNvZnQgbGltaXQgYW5kIHB1dHRpbmcgdGhlIHN5c3RlbSB1bmRlcgotCSAqIHByZXNzdXJlCi0JICovCi0JZG8gewotCQlpZiAobmV4dF9teikKLQkJCW16ID0gbmV4dF9tejsKLQkJZWxzZQotCQkJbXogPSBtZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopOwotCQlpZiAoIW16KQotCQkJYnJlYWs7Ci0KLQkJcmVjbGFpbWVkID0gbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0obXotJmd0O21lbWNnLCBwZ2RhdCwKLQkJCQkJCSAgICBnZnBfbWFzaywgdG90YWxfc2Nhbm5lZCk7Ci0JCW5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkOwotCQlzcGluX2xvY2tfaXJxKCZhbXA7bWN0ei0mZ3Q7bG9jayk7Ci0KLQkJLyoKLQkJICogSWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW55dGhpbmcgZnJvbSB0aGlzIG1lbW9yeSBjZ3JvdXAKLQkJICogaXQgaXMgdGltZSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNncm91cAotCQkgKi8KLQkJbmV4dF9teiA9IE5VTEw7Ci0JCWlmICghcmVjbGFpbWVkKQotCQkJbmV4dF9teiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTsKLQotCQlleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhtei0mZ3Q7bWVtY2cpOwotCQkvKgotCQkgKiBPbmUgc2Nob29sIG9mIHRob3VnaHQgc2F5cyB0aGF0IHdlIHNob3VsZCBub3QgYWRkCi0JCSAqIGJhY2sgdGhlIG5vZGUgdG8gdGhlIHRyZWUgaWYgcmVjbGFpbSByZXR1cm5zIDAuCi0JCSAqIEJ1dCBvdXIgcmVjbGFpbSBjb3VsZCByZXR1cm4gMCwgc2ltcGx5IGJlY2F1c2UgZHVlCi0JCSAqIHRvIHByaW9yaXR5IHdlIGFyZSBleHBvc2luZyBhIHNtYWxsZXIgc3Vic2V0IG9mCi0JCSAqIG1lbW9yeSB0byByZWNsYWltIGZyb20uIENvbnNpZGVyIHRoaXMgYXMgYSBsb25nZXIKLQkJICogdGVybSBUT0RPLgotCQkgKi8KLQkJLyogSWYgZXhjZXNzID09IDAsIG5vIHRyZWUgb3BzICovCi0JCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXosIG1jdHosIGV4Y2Vzcyk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO21jdHotJmd0O2xvY2spOwotCQljc3NfcHV0KCZhbXA7bXotJmd0O21lbWNnLSZndDtjc3MpOwotCQlsb29wJiM0MzsmIzQzOzsKLQkJLyoKLQkJICogQ291bGQgbm90IHJlY2xhaW0gYW55dGhpbmcgYW5kIHRoZXJlIGFyZSBubyBtb3JlCi0JCSAqIG1lbSBjZ3JvdXBzIHRvIHRyeSBvciB3ZSBzZWVtIHRvIGJlIGxvb3Bpbmcgd2l0aG91dAotCQkgKiByZWNsYWltaW5nIGFueXRoaW5nLgotCQkgKi8KLQkJaWYgKCFucl9yZWNsYWltZWQgJmFtcDsmYW1wOwotCQkJKG5leHRfbXogPT0gTlVMTCB8fAotCQkJbG9vcCAmZ3Q7IE1FTV9DR1JPVVBfTUFYX1NPRlRfTElNSVRfUkVDTEFJTV9MT09QUykpCi0JCQlicmVhazsKLQl9IHdoaWxlICghbnJfcmVjbGFpbWVkKTsKLQlpZiAobmV4dF9teikKLQkJY3NzX3B1dCgmYW1wO25leHRfbXotJmd0O21lbWNnLSZndDtjc3MpOwotCXJldHVybiBucl9yZWNsYWltZWQ7Ci19Ci0KIHN0YXRpYyB1NjQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCiAJCQkJc3RydWN0IGNmdHlwZSAqY2Z0KQogewpAQCAtNTExLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RocmVzaG9sZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJfQogfQogCi0vKiBDZ3JvdXAxOiB0aHJlc2hvbGQgbm90aWZpY2F0aW9ucyAmYW1wOyBzb2Z0bGltaXQgdHJlZSB1cGRhdGVzICovCiYjNDM7LyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgKi8KIAogLyoKICAqIFBlciBtZW1jZyBldmVudCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IHBhZ2Vpbi9wYWdlb3V0LiBXaXRoIFRIUCwKQEAgLTUxOSwxNSAmIzQzOzIwMCw5IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKICAqIHRvIHRyaWdnZXIgc29tZSBwZXJpb2RpYyBldmVudHMuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBiZXR0ZXIKICAqIHRoYW4gdXNpbmcgamlmZmllcyBldGMuIHRvIGhhbmRsZSBwZXJpb2RpYyBtZW1jZyBldmVudC4KICAqLwotZW51bSBtZW1fY2dyb3VwX2V2ZW50c190YXJnZXQgewotCU1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCwKLQlNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQsCi0JTUVNX0NHUk9VUF9OVEFSR0VUUywKLX07Ci0KIHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlX2V2ZW50czsKLQl1bnNpZ25lZCBsb25nIHRhcmdldHNbTUVNX0NHUk9VUF9OVEFSR0VUU107CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX3RhcmdldDsKIH07CiAKIHN0YXRpYyB2b2lkIG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcykKQEAgLTU0NCw1MyAmIzQzOzIxOSwyOSBAQCBzdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpCiB9CiAKICNkZWZpbmUgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUIDEyOAotI2RlZmluZSBTT0ZUTElNSVRfRVZFTlRTX1RBUkdFVCAxMDI0CiAKLXN0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCWVudW0gbWVtX2Nncm91cF9ldmVudHNfdGFyZ2V0IHRhcmdldCkKJiM0MztzdGF0aWMgYm9vbCBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCwgbmV4dDsKIAogCXZhbCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7bnJfcGFnZV9ldmVudHMpOwotCW5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctJmd0O2V2ZW50c19wZXJjcHUtJmd0O3RhcmdldHNbdGFyZ2V0XSk7CiYjNDM7CW5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctJmd0O2V2ZW50c19wZXJjcHUtJmd0O3RocmVzaG9sZF90YXJnZXQpOwogCS8qIGZyb20gdGltZV9hZnRlcigpIGluIGppZmZpZXMuaCAqLwogCWlmICgobG9uZykobmV4dCAtIHZhbCkgJmx0OyAwKSB7Ci0JCXN3aXRjaCAodGFyZ2V0KSB7Ci0JCWNhc2UgTUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNIOgotCQkJbmV4dCA9IHZhbCAmIzQzOyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQ7Ci0JCQlicmVhazsKLQkJY2FzZSBNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQ6Ci0JCQluZXh0ID0gdmFsICYjNDM7IFNPRlRMSU1JVF9FVkVOVFNfVEFSR0VUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLSZndDtldmVudHNfcGVyY3B1LSZndDt0YXJnZXRzW3RhcmdldF0sIG5leHQpOwomIzQzOwkJX190aGlzX2NwdV93cml0ZShtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7dGhyZXNob2xkX3RhcmdldCwKJiM0MzsJCQkJIHZhbCAmIzQzOyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKgotICogQ2hlY2sgZXZlbnRzIGluIG9yZGVyLgotICoKLSAqLwotc3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCiYjNDM7c3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKQogCQlyZXR1cm47CiAKLQkvKiB0aHJlc2hvbGQgZXZlbnQgaXMgdHJpZ2dlcmVkIGluIGZpbmVyIGdyYWluIHRoYW4gc29mdCBsaW1pdCAqLwotCWlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLAotCQkJCQkJTUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNIKSkpIHsKLQkJYm9vbCBkb19zb2Z0bGltaXQ7Ci0KLQkJZG9fc29mdGxpbWl0ID0gbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZywKLQkJCQkJCU1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVCk7CiYjNDM7CWlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnKSkpCiAJCW1lbV9jZ3JvdXBfdGhyZXNob2xkKG1lbWNnKTsKLQkJaWYgKHVubGlrZWx5KGRvX3NvZnRsaW1pdCkpCi0JCQltZW1jZzFfdXBkYXRlX3RyZWUobWVtY2csIG5pZCk7Ci0JfQogfQogCiB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKQEAgLTU5OSw3ICYjNDM7MjUwLDcgQEAgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKG1lbWNnLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwotCW1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpOwomIzQzOwltZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTY3Miw3ICYjNDM7MzIzLDcgQEAgdm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpCiAJVk1fV0FSTl9PTl9JUlFTX0VOQUJMRUQoKTsKIAltZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpOwogCXByZWVtcHRfZW5hYmxlX25lc3RlZCgpOwotCW1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpOwomIzQzOwltZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogCW9ial9jZ3JvdXBfcHV0KG9iamNnKTsKQEAgLTcyNiwxNCAmIzQzOzM3NywxNCBAQCB2b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbykKICNlbmRpZgogCiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKQomIzQzOwkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY291bnRfbWVtY2dfZXZlbnRzKG1lbWNnLCBQR1BHT1VULCBwZ3Bnb3V0KTsKIAlfX3RoaXNfY3B1X2FkZChtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdS0mZ3Q7bnJfcGFnZV9ldmVudHMsIG5yX21lbW9yeSk7Ci0JbWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgbmlkKTsKJiM0MzsJbWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0yNTY2LDIyICYjNDM7MjIxNywzIEBAIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlmcmVlX3BlcmNwdShtZW1jZy0mZ3Q7ZXZlbnRzX3BlcmNwdSk7CiB9Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1lbWNnMV9pbml0KHZvaWQpCi17Ci0JaW50IG5vZGU7Ci0KLQlmb3JfZWFjaF9ub2RlKG5vZGUpIHsKLQkJc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqcnRwbjsKLQotCQlydHBuID0ga3phbGxvY19ub2RlKHNpemVvZigqcnRwbiksIEdGUF9LRVJORUwsIG5vZGUpOwotCi0JCXJ0cG4tJmd0O3JiX3Jvb3QgPSBSQl9ST09UOwotCQlydHBuLSZndDtyYl9yaWdodG1vc3QgPSBOVUxMOwotCQlzcGluX2xvY2tfaW5pdCgmYW1wO3J0cG4tJmd0O2xvY2spOwotCQlzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtub2RlXSA9IHJ0cG47Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1zdWJzeXNfaW5pdGNhbGwobWVtY2cxX2luaXQpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oCmluZGV4IDFlMzk0MjY5YzYxM2QuLmI5YTIxZjBmZDJjM2EgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmgKQEAgLTQxLDEyICYjNDM7NDEsNiBAQCBib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiAKIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKLXZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCi17Ci0JV1JJVEVfT05DRShtZW1jZy0mZ3Q7c29mdF9saW1pdCwgUEFHRV9DT1VOVEVSX01BWCk7Ci19CiAKIHN0cnVjdCBjZ3JvdXBfdGFza3NldDsKIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CkBAIC02NSw3ICYjNDM7NTksNyBAQCB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCiB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKTsKJiM0MzsJCQkgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7CiAKIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpOwogdm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTsKQEAgLTk4LDggJiM0Mzs5Miw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfYWxsb2NfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgeyByZXR1cm4gdHJ1ZTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQotc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fQogc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpCkBAIC0xMTUsNyAmIzQzOzEwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJIHVuc2lnbmVkIGxvbmcgcGdwZ291dCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKSB7fQomIzQzOwkJCQkJIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KSB7fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpIHt9CiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBiZmQwYTc0ZmFjOTIzLi4zMDYzNmI5ZDk2NzM5IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00MjU3LDcgJiM0Mzs0MjU3LDYgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiAJCXJldHVybiBFUlJfQ0FTVChtZW1jZyk7CiAKIAlwYWdlX2NvdW50ZXJfc2V0X2hpZ2goJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTsKLQltZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7CiAjaWZkZWYgQ09ORklHX1pTV0FQCiAJbWVtY2ctJmd0O3pzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJV1JJVEVfT05DRShtZW1jZy0mZ3Q7enN3YXBfd3JpdGViYWNrLCB0cnVlKTsKQEAgLTQ0MjksNyAmIzQzOzQ0MjgsNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAKIAl2bXByZXNzdXJlX2NsZWFudXAoJmFtcDttZW1jZy0mZ3Q7dm1wcmVzc3VyZSk7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO21lbWNnLSZndDtoaWdoX3dvcmspOwotCW1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhtZW1jZyk7CiAJZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTsKIAltZW1fY2dyb3VwX2ZyZWUobWVtY2cpOwogfQpAQCAtNDQ2NSw3ICYjNDM7NDQ2Myw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiAJcGFnZV9jb3VudGVyX3NldF9taW4oJmFtcDttZW1jZy0mZ3Q7bWVtb3J5LCAwKTsKIAlwYWdlX2NvdW50ZXJfc2V0X2xvdygmYW1wO21lbWNnLSZndDttZW1vcnksIDApOwogCXBhZ2VfY291bnRlcl9zZXRfaGlnaCgmYW1wO21lbWNnLSZndDttZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpOwotCW1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTsKIAlwYWdlX2NvdW50ZXJfc2V0X2hpZ2goJmFtcDttZW1jZy0mZ3Q7c3dhcCwgUEFHRV9DT1VOVEVSX01BWCk7CiAJbWVtY2dfd2JfZG9tYWluX3NpemVfY2hhbmdlZChtZW1jZyk7CiB9CkBAIC01MzMxLDcgJiM0Mzs1MzI4LDYgQEAgc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7CiAJdW5zaWduZWQgbG9uZyBucl9tZW1vcnk7CiAJdW5zaWduZWQgbG9uZyBwZ3Bnb3V0OwogCXVuc2lnbmVkIGxvbmcgbnJfa21lbTsKLQlpbnQgbmlkOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHVuY2hhcmdlX2dhdGhlcl9jbGVhcihzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZykKQEAgLTUzNTQsNyAmIzQzOzUzNTAsNyBAQCBzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZykKIAkJbWVtY2cxX29vbV9yZWNvdmVyKG1lbWNnKTsKIAl9CiAKLQltZW1jZzFfdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHVnLSZndDtwZ3Bnb3V0LCB1Zy0mZ3Q7bnJfbWVtb3J5LCB1Zy0mZ3Q7bmlkKTsKJiM0MzsJbWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy0mZ3Q7cGdwZ291dCwgdWctJmd0O25yX21lbW9yeSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIHVuY2hhcmdlX2ZvbGlvICovCkBAIC01MzgzLDcgJiM0Mzs1Mzc5LDYgQEAgc3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpCiAJCQl1bmNoYXJnZV9nYXRoZXJfY2xlYXIodWcpOwogCQl9CiAJCXVnLSZndDtvYmpjZyA9IG9iamNnOwotCQl1Zy0mZ3Q7bmlkID0gZm9saW9fbmlkKGZvbGlvKTsKIAogCQkvKiBwYWlycyB3aXRoIG9ial9jZ3JvdXBfcHV0IGluIHVuY2hhcmdlX2JhdGNoICovCiAJCW9ial9jZ3JvdXBfZ2V0KG9iamNnKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZmRkMTMyOTlhMDRhOS4uZGViMDg3YzU3MDA3ZCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQzNzMsNyAmIzQzOzQzNzMsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqLwogZW51bSB7CiAJTUVNQ0dfTFJVX05PUCwKLQlNRU1DR19MUlVfSEVBRCwKIAlNRU1DR19MUlVfVEFJTCwKIAlNRU1DR19MUlVfT0xELAogCU1FTUNHX0xSVV9ZT1VORywKQEAgLTQzOTUsOSAmIzQzOzQzOTQsNyBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcCkKIAluZXcgPSBvbGQgPSBscnV2ZWMtJmd0O2xydWdlbi5nZW47CiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqLwotCWlmIChvcCA9PSBNRU1DR19MUlVfSEVBRCkKLQkJc2VnID0gTUVNQ0dfTFJVX0hFQUQ7Ci0JZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpCiYjNDM7CWlmIChvcCA9PSBNRU1DR19MUlVfVEFJTCkKIAkJc2VnID0gTUVNQ0dfTFJVX1RBSUw7CiAJZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX09MRCkKIAkJbmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC0mZ3Q7bWVtY2dfbHJ1LnNlcSk7CkBAIC00NDExLDcgJiM0Mzs0NDA4LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApCiAKIAlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bHJ1dmVjLSZndDtscnVnZW4ubGlzdCk7CiAKLQlpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQgfHwgb3AgPT0gTUVNQ0dfTFJVX09MRCkKJiM0MzsJaWYgKG9wID09IE1FTUNHX0xSVV9PTEQpCiAJCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmYW1wO2xydXZlYy0mZ3Q7bHJ1Z2VuLmxpc3QsICZhbXA7cGdkYXQtJmd0O21lbWNnX2xydS5maWZvW25ld11bYmluXSk7CiAJZWxzZQogCQlobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoJmFtcDtscnV2ZWMtJmd0O2xydWdlbi5saXN0LCAmYW1wO3BnZGF0LSZndDttZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pOwpAQCAtNDQ4OSwxNSAmIzQzOzQ0ODYsNiBAQCB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJfQogfQogCi12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCkKLXsKLQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpOwotCi0JLyogc2VlIHRoZSBjb21tZW50IG9uIE1FTUNHX05SX0dFTlMgKi8KLQlpZiAoUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpCi0JCWxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpOwotfQotCiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKQogewogCXN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7CkBAIC02NDM5LDggJiM0Mzs2NDI3LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCXN0cnVjdCB6b25lcmVmICp6OwogCXN0cnVjdCB6b25lICp6b25lOwotCXVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7Ci0JdW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7CiAJZ2ZwX3Qgb3JpZ19tYXNrOwogCXBnX2RhdGFfdCAqbGFzdF9wZ2RhdCA9IE5VTEw7CiAJcGdfZGF0YV90ICpmaXJzdF9wZ2RhdCA9IE5VTEw7CkBAIC02NDgyLDM1ICYjNDM7NjQ2OCwxNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJCQkJc2MtJmd0O2NvbXBhY3Rpb25fcmVhZHkgPSB0cnVlOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCi0JCQkvKgotCQkJICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlCi0JCQkgKiB6b25lbGlzdCBpcyBvcmRlcmVkIGJ5IHpvbmUgKG5vdCB0aGUgZGVmYXVsdCkgdGhlbiBhCi0JCQkgKiBub2RlIG1heSBiZSBzaHJ1bmsgbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZQotCQkJICogdGhlIHVzZXIgcHJlZmVycyBsb3dlciB6b25lcyBiZWluZyBwcmVzZXJ2ZWQuCi0JCQkgKi8KLQkJCWlmICh6b25lLSZndDt6b25lX3BnZGF0ID09IGxhc3RfcGdkYXQpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkgKiBUaGlzIHN0ZWFscyBwYWdlcyBmcm9tIG1lbW9yeSBjZ3JvdXBzIG92ZXIgc29mdGxpbWl0Ci0JCQkgKiBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlcyBhbmQKLQkJCSAqIHNjYW5uZWQgcGFnZXMuIFRoaXMgd29ya3MgZm9yIGdsb2JhbCBtZW1vcnkgcHJlc3N1cmUKLQkJCSAqIGFuZCBiYWxhbmNpbmcsIG5vdCBmb3IgYSBtZW1jZyYjMzk7cyBsaW1pdC4KLQkJCSAqLwotCQkJbnJfc29mdF9zY2FubmVkID0gMDsKLQkJCW5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbSh6b25lLSZndDt6b25lX3BnZGF0LAotCQkJCQkJCQkgICAgICBzYy0mZ3Q7b3JkZXIsIHNjLSZndDtnZnBfbWFzaywKLQkJCQkJCQkJICAgICAgJmFtcDtucl9zb2Z0X3NjYW5uZWQpOwotCQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gbnJfc29mdF9yZWNsYWltZWQ7Ci0JCQlzYy0mZ3Q7bnJfc2Nhbm5lZCAmIzQzOz0gbnJfc29mdF9zY2FubmVkOwotCQkJLyogbmVlZCBzb21lIGNoZWNrIGZvciBhdm9pZCBtb3JlIHNocmlua196b25lKCkgKi8KIAkJfQogCiAJCWlmICghZmlyc3RfcGdkYXQpCiAJCQlmaXJzdF9wZ2RhdCA9IHpvbmUtJmd0O3pvbmVfcGdkYXQ7CiAKLQkJLyogU2VlIGNvbW1lbnQgYWJvdXQgc2FtZSBjaGVjayBmb3IgZ2xvYmFsIHJlY2xhaW0gYWJvdmUgKi8KJiM0MzsJCS8qCiYjNDM7CQkgKiBTaHJpbmsgZWFjaCBub2RlIGluIHRoZSB6b25lbGlzdCBvbmNlLiBJZiB0aGUgem9uZWxpc3QgaXMKJiM0MzsJCSAqIG9yZGVyZWQgYnkgem9uZSAobm90IHRoZSBkZWZhdWx0KSB0aGVuIGEgbm9kZSBtYXkgYmUgc2hydW5rCiYjNDM7CQkgKiBtdWx0aXBsZSB0aW1lcyBidXQgaW4gdGhhdCBjYXNlIHRoZSB1c2VyIHByZWZlcnMgbG93ZXIgem9uZXMKJiM0MzsJCSAqIGJlaW5nIHByZXNlcnZlZC4KJiM0MzsJCSAqLwogCQlpZiAoem9uZS0mZ3Q7em9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KQogCQkJY29udGludWU7CiAJCWxhc3RfcGdkYXQgPSB6b25lLSZndDt6b25lX3BnZGF0OwpAQCAtNjgyNSw0NyAmIzQzOzY3OTMsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlciwKIAogI2lmZGVmIENPTkZJR19NRU1DRwogCi0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovCi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLAotCQkJCQkJcGdfZGF0YV90ICpwZ2RhdCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpCi17Ci0Jc3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0gewotCQkubnJfdG9fcmVjbGFpbSA9IFNXQVBfQ0xVU1RFUl9NQVgsCi0JCS50YXJnZXRfbWVtX2Nncm91cCA9IG1lbWNnLAotCQkubWF5X3dyaXRlcGFnZSA9IDEsCi0JCS5tYXlfdW5tYXAgPSAxLAotCQkucmVjbGFpbV9pZHggPSBNQVhfTlJfWk9ORVMgLSAxLAotCQkubWF5X3N3YXAgPSAhbm9zd2FwLAotCX07Ci0KLQlXQVJOX09OX09OQ0UoIWN1cnJlbnQtJmd0O3JlY2xhaW1fc3RhdGUpOwotCi0Jc2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgJmFtcDsgR0ZQX1JFQ0xBSU1fTUFTSykgfAotCQkJKEdGUF9ISUdIVVNFUl9NT1ZBQkxFICZhbXA7IH5HRlBfUkVDTEFJTV9NQVNLKTsKLQotCXRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbihzYy5nZnBfbWFzaywKLQkJCQkJCSAgICAgIHNjLm9yZGVyLAotCQkJCQkJICAgICAgbWVtY2cpOwotCi0JLyoKLQkgKiBOT1RFOiBBbHRob3VnaCB3ZSBjYW4gZ2V0IHRoZSBwcmlvcml0eSBmaWVsZCwgdXNpbmcgaXQKLQkgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi4KLQkgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0Ci0JICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrCi0JICogdGhlIHByaW9yaXR5IGFuZCBtYWtlIGl0IHplcm8uCi0JICovCi0Jc2hyaW5rX2xydXZlYyhscnV2ZWMsICZhbXA7c2MpOwotCi0JdHJhY2VfbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZChzYy5ucl9yZWNsYWltZWQsIG1lbWNnKTsKLQotCSpucl9zY2FubmVkID0gc2MubnJfc2Nhbm5lZDsKLQotCXJldHVybiBzYy5ucl9yZWNsYWltZWQ7Ci19Ci0KIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCiAJCQkJCSAgIGdmcF90IGdmcF9tYXNrLApAQCAtNzE3MSw4ICYjNDM7NzA5OCw2IEBAIGNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpCiBzdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KQogewogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7Ci0JdW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7CiAJdW5zaWduZWQgbG9uZyBwZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBucl9ib29zdF9yZWNsYWltOwogCXVuc2lnbmVkIGxvbmcgem9uZV9ib29zdHNbTUFYX05SX1pPTkVTXSA9IHsgMCwgfTsKQEAgLTcyNzgsMTIgJiM0Mzs3MjAzLDcgQEAgc3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCkKIAkJICovCiAJCWtzd2FwZF9hZ2Vfbm9kZShwZ2RhdCwgJmFtcDtzYyk7CiAKLQkJLyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovCiAJCXNjLm5yX3NjYW5uZWQgPSAwOwotCQlucl9zb2Z0X3NjYW5uZWQgPSAwOwotCQlucl9zb2Z0X3JlY2xhaW1lZCA9IG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdkYXQsIHNjLm9yZGVyLAotCQkJCQkJCSAgICAgIHNjLmdmcF9tYXNrLCAmYW1wO25yX3NvZnRfc2Nhbm5lZCk7Ci0JCXNjLm5yX3JlY2xhaW1lZCAmIzQzOz0gbnJfc29mdF9yZWNsYWltZWQ7CiAKIAkJLyoKIAkJICogVGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8gcmFpc2UgdGhlIHNjYW5uaW5nIHByaW9yaXR5IGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcyNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gSXQgYXBwZWFycyB0aGlzIHBhdGNoIGlzIGVzc2VudGlhbGx5IHJlbW92aW5nLCBvciBhdCBsZWFzdCBzaWduaWZpY2FudGx5IGNsZWFuaW5nIHVwLCBzb2Z0IGxpbWl0IHJlY2xhaW0gZnVuY3Rpb25hbGl0eSBmcm9tIG1lbWNnIHYxLiBUaGUgY2hhbmdlcyBhcmUgcXVpdGUgZXh0ZW5zaXZlLiBJJiMzOTttIHNlZWluZyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBgc29mdF9saW1pdF90cmVlYCwgYHVzYWdlX2luX2V4Y2Vzc2AsIGFuZCB0aGUgYHNvZnRfbGltaXRgIGZpZWxkIHdpdGhpbiBgbWVtX2Nncm91cGAgZ2V0dGluZyBheGVkLiBLZXkgZnVuY3Rpb25zIGxpa2UgYG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW1gLCBgbWVtY2cxX3VwZGF0ZV90cmVlYCwgYW5kIHNldmVyYWwgb3RoZXJzIGFyZSBiZWluZyBkZXByZWNhdGVkIHRvby4KClNwZWNpZmljYWxseSwgSSBhbSBzZWVpbmcgdGhlc2Uga2V5IGNoYW5nZXM6Ci0gYHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGVgIGFuZCBgc29mdF9saW1pdF90cmVlYCBhcmUgZ29uZSBmcm9tIGBtbS9tZW1jb250cm9sLXYxLmNgLgotIE1lbWJlcnMgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCAoYHRyZWVfbm9kZWAsIGB1c2FnZV9pbl9leGNlc3NgLCBgb25fdHJlZWApIGFyZSBnb25lLCBub3cgd2l0aCBzb21lIHBhZGRpbmcgYWRqdXN0bWVudHMuCi0gVGhlIGBzb2Z0X2xpbWl0YCBmaWVsZCBpcyBhbHNvIGdvbmUgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgLgotIFJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBiZWluZyByZW1vdmVkLCBzdWNoIGFzIGBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltYCwgYG1lbWNnMV91cGRhdGVfdHJlZWAsIGBfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkYCwgYF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWRgLCBgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW1gIGFtb25nIG90aGVycy4KLSBUaGUgYG1lbWNnMV9ldmVudHNfcGVyY3B1YCBzdHJ1Y3QgaGFzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCB3aGVyZSBgdGFyZ2V0c1tNRU1fQ0dST1VQX05UQVJHRVRTXWAgaXMgcmVwbGFjZWQgYnkgYHVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX3RhcmdldGAuCi0gYG1lbWNnMV9ldmVudF9yYXRlbGltaXRgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIGB0aHJlc2hvbGRfdGFyZ2V0YCBpbnN0ZWFkIG9mIGFuIGFycmF5IGluZGV4LgotIFRoZSBgbmlkYCBhcmd1bWVudCBpcyBhbHNvIHJlbW92ZWQgZnJvbSBzZXZlcmFsIGtleSBmdW5jdGlvbnMgKGBtZW1jZzFfY2hlY2tfZXZlbnRzYCwgYG1lbWNnMV91bmNoYXJnZV9iYXRjaGApIGFuZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYC4KLSBXaXRoaW4gYG1tL3Ztc2Nhbi5jYCwgdGhlIHNvZnQgbGltaXQgcmVjbGFpbSBsb2dpYyBpcyBiZWluZyByZW1vdmVkIGZyb20gYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCwgd2l0aCBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIGFuZCBgTUVNQ0dfTFJVX0hFQURgIGFsc28gYmVpbmcgcmVtb3ZlZC4KLSBGaW5hbGx5LCB0aGUgYXNzb2NpYXRlZCB0cmFjZSBldmVudHMgKGBtbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fYmVnaW5gIGFuZCBgZW5kYCkgaW4gYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oYCwgYW5kIGRlY2xhcmF0aW9ucyBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBhcmUgYWxzbyBiZWluZyByZW1vdmVkLgoKU28sIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBwZXJmb3JtIGEgbWV0aWN1bG91cyBzZWFyY2ggdG8gZW5zdXJlIHRoYXQgYW55IHJlbWFpbmluZyB1c2FnZSBvZiBgdGhyZXNob2xkX3RhcmdldGAgb3IgYW55IHN0cnVjdHVyZSBhbGxvY2F0aW9ucywgZXNwZWNpYWxseSByZWxhdGVkIHRvIGBtZW1jZzFfZXZlbnRzX3BlcmNwdWAsIGFyZSBwcm9wZXJseSBoYW5kbGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY2xlYW51cCBpcyB0cnVseSBjb21wcmVoZW5zaXZlLCB0aGF0IHRoZXJlIGFyZSBubyByZW1uYW50cyB0aGF0IGNvdWxkIGxlYWQgdG8gc3VidGxlIGlzc3Vlcy4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgS01TQU4sIGFzIHdlIG5lZWQgdG8gYmUgdmVyeSByaWdvcm91cyBpbiBob3cgdGhlc2UgY2hhbmdlcyBtaWdodCBleHBvc2UgbWVtb3J5IGNvcnJ1cHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2ZW50c19wZXJjcHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTE4ND1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RocmVzaG9sZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTIwMi0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyMDM6c3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1IHtcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDQtXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VfZXZlbnRzO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMDg9c3RhdGljIHZvaWQgbWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTctXG5tbS9tZW1jb250cm9sLXYxLmM6MjE4Olx0X190aGlzX2NwdV9hZGQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2Vucl9wYWdlX2V2ZW50cywgbnJfcGFnZXMpO1xubW0vbWVtY29udHJvbC12MS5jLTIxOS19XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIyMz1zdGF0aWMgYm9vbCBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjI2LVxubW0vbWVtY29udHJvbC12MS5jOjIyNzpcdHZhbCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZW5yX3BhZ2VfZXZlbnRzKTtcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjg6XHRuZXh0ID0gX190aGlzX2NwdV9yZWFkKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNldGhyZXNob2xkX3RhcmdldCk7XG5tbS9tZW1jb250cm9sLXYxLmMtMjI5LVx0LyogZnJvbSB0aW1lX2FmdGVyKCkgaW4gamlmZmllcy5oICovXG5tbS9tZW1jb250cm9sLXYxLmMtMjMwLVx0aWYgKChsb25nKShuZXh0IC0gdmFsKSBcdTAwM2MgMCkge1xubW0vbWVtY29udHJvbC12MS5jOjIzMTpcdFx0X190aGlzX2NwdV93cml0ZShtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZXRocmVzaG9sZF90YXJnZXQsXG5tbS9tZW1jb250cm9sLXYxLmMtMjMyLVx0XHRcdFx0IHZhbCAmIzQzOyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0zNzk9dm9pZCBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTM4NS1cdGNvdW50X21lbWNnX2V2ZW50cyhtZW1jZywgUEdQR09VVCwgcGdwZ291dCk7XG5tbS9tZW1jb250cm9sLXYxLmM6Mzg2Olx0X190aGlzX2NwdV9hZGQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2Vucl9wYWdlX2V2ZW50cywgbnJfbWVtb3J5KTtcbm1tL21lbWNvbnRyb2wtdjEuYy0zODctXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjIwOT1ib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC12MS5jLTIyMTAte1xubW0vbWVtY29udHJvbC12MS5jOjIyMTE6XHRtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1ID0gYWxsb2NfcGVyY3B1X2dmcChzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHUsXG5tbS9tZW1jb250cm9sLXYxLmMtMjIxMi1cdFx0XHRcdFx0XHRHRlBfS0VSTkVMX0FDQ09VTlQpO1xubW0vbWVtY29udHJvbC12MS5jOjIyMTM6XHRyZXR1cm4gISFtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1O1xubW0vbWVtY29udHJvbC12MS5jLTIyMTQtfVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yMjE2PXZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjE3LXtcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjE4Olx0ZnJlZV9wZXJjcHUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMjIxOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Nzc3CgkJCQkJCQlvdXRwdXQ6IDIzMQoJCQkJCQkJdGhvdWdodHM6IDY5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBGZWF0dXJlIFJlbW92YWwgLSBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjYXJlZnVsbHkgcmV2aWV3ZWQgdGhpcyBwYXRjaCwgYW5kIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgcXVpdGUgc3RyYWlnaHRmb3J3YXJkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLgoKSW5pdGlhbGx5LCBJIHdhbnRlZCB0byBjb25maXJtIHRoYXQgYW55IHBlci1DUFUgbWVtb3J5IGFsbG9jYXRpb24gdXNlZCB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeS4gYGFsbG9jX3BlcmNwdV9nZnBgIChhbmQgYnkgZXh0ZW5zaW9uIGBhbGxvY19wZXJjcHVgKSBhcmUgemVyb2luZyBhbGxvY2F0b3JzLiBJIHNwZWNpZmljYWxseSBjaGVja2VkIGZvciBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpUaGUgcGF0Y2ggaXRzZWxmIGZvY3VzZXMgb24gdGhlIHJlbW92YWwgb2YgdGhlIGNncm91cCB2MSBzb2Z0IGxpbWl0IGZlYXR1cmUuIFRoaXMgaW5jbHVkZXM6CgoqICAgUmVtb3Zpbmcgb2Jzb2xldGUgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBsZWdhY3kgZmVhdHVyZS4KKiAgIERlbGV0aW5nIHVudXNlZCBsb2NhbCB2YXJpYWJsZXMgaW4gZnVuY3Rpb25zIGxpa2UgYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YC4KKiAgIEVsaW1pbmF0aW5nIHRoZSBgbmlkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYC4KKiAgIENsZWFuaW5nIHVwIGNvbW1lbnRzIGFuZCBlbnVtcyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuCgpHaXZlbiB0aGVzZSBjaGFuZ2VzLCBJIHBlcmZvcm1lZCBhIHRob3JvdWdoIGFuYWx5c2lzIHRvIHJ1bGUgb3V0IGFueSBwb3RlbnRpYWwgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBJIGxvb2tlZCBmb3I6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGV4cG9zZWQuIE5vLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gTm8uCjMuICBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIE5vLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzLiBOby4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgY2xlYW4tdXAgYW5kIHNpbXBsaWZpY2F0aW9uIHBhdGNoIHJlbW92aW5nIGRlYWQgY29kZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcmVtb3ZpbmcgY29kZSByZWxhdGVkIHRvIHRoZSBsZWdhY3kgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIGxvZ2ljLCB3aGljaCBtZWFucyBzaW1wbGlmeWluZyB2YXJpb3VzIHN0cnVjdHMuIEkgYW0gbm90IGludHJvZHVjaW5nIGFueSBuZXcgYWxsb2NhdGlvbnMgYW5kL29yIGNvbXBsZXggc3RydWN0dXJlcyB0aGF0IGFyZSBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgemVyb2VkLgoKVGhpcyBwYXRjaCBpcyBqdXN0IHJlbW92aW5nIGNvZGUgdGhhdCBoYWQgYmVlbiBkZXByZWNhdGVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgbm8gS01TQU4gaXMgbmVlZGVkLgoKSSYjMzk7dmUgYWxzbyBkb3VibGUtY2hlY2tlZCBhZ2FpbnN0IHRoZSBLTVNBTiBndWlkYW5jZToKCiogICBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuCiogICBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCAod2hpY2ggaXMgYWxtb3N0IG5vbmUhKSBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLgoqICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgYWJvdXQgcmVtb3Zpbmcgb2xkIGNvZGUgYW5kIHNpbXBsaWZ5aW5nIGV4aXN0aW5nIHN0cnVjdHVyZXMsIGFuZCB0aGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGFsbG9jYXRpb25zIG9yIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoZXJlJiMzOTtzIG5vIGp1c3RpZmljYXRpb24gZm9yIEtNU0FOIGhlcmUuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVtb3ZlcyB0aGUgbGVnYWN5IGNncm91cCB2MSBzb2Z0LWxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtZW1jb250cm9sLCBtZW1jb250cm9sLXYxLCBhbmQgdm1zY2FuKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgZGVsZXRlcyB0aGUgc29mdCBsaW1pdCBSQi10cmVlIHRyYWNraW5nIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucywgYW5kIHRyYWNlcG9pbnRzLlxuMi4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBzb2Z0X2xpbWl0YCBhbmQgYHRhcmdldHNgIGZpZWxkcyBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBzaW1wbGlmeWluZyBwZXItY3B1IGV2ZW50IHJhdGVsaW1pdGluZyB0byBqdXN0IGB0aHJlc2hvbGRfdGFyZ2V0YC5cbjMuIEl0IHJlbW92ZXMgdGhlIHVudXNlZCBgbmlkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYCBhbmQgdW51c2VkIHNjYW5uaW5nIHN0YXRpc3RpY3MgdmFyaWFibGVzIGZyb20gcmVjbGFpbSBwYXRocyAoYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCkuXG5cblRoZSBjaGFuZ2VzIGNvbnNpc3Qgc3RyaWN0bHkgb2YgZGVhZC9kZXByZWNhdGVkIGNvZGUgcmVtb3ZhbCBhbmQgc3RydWN0dXJhbCBzaW1wbGlmaWNhdGlvbnMuIE5vIG5ldyBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVtb3ZlcyB0aGUgbGVnYWN5IGNncm91cCB2MSBzb2Z0LWxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtZW1jb250cm9sLCBtZW1jb250cm9sLXYxLCBhbmQgdm1zY2FuKS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgZGVsZXRlcyB0aGUgc29mdCBsaW1pdCBSQi10cmVlIHRyYWNraW5nIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucywgYW5kIHRyYWNlcG9pbnRzLlxuMi4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBzb2Z0X2xpbWl0YCBhbmQgYHRhcmdldHNgIGZpZWxkcyBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBzaW1wbGlmeWluZyBwZXItY3B1IGV2ZW50IHJhdGVsaW1pdGluZyB0byBqdXN0IGB0aHJlc2hvbGRfdGFyZ2V0YC5cbjMuIEl0IHJlbW92ZXMgdGhlIHVudXNlZCBgbmlkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYCBhbmQgdW51c2VkIHNjYW5uaW5nIHN0YXRpc3RpY3MgdmFyaWFibGVzIGZyb20gcmVjbGFpbSBwYXRocyAoYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCkuXG5cblRoZSBjaGFuZ2VzIGNvbnNpc3Qgc3RyaWN0bHkgb2YgZGVhZC9kZXByZWNhdGVkIGNvZGUgcmVtb3ZhbCBhbmQgc3RydWN0dXJhbCBzaW1wbGlmaWNhdGlvbnMuIE5vIG5ldyBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjA1LjI3NDczMTAxOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODA5MjkzNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiLFxuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZVwiLFxuICAgIFwibWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRcIixcbiAgICBcIm1lbWNnMV91bmNoYXJnZV9iYXRjaFwiLFxuICAgIFwibWVtY2cxX2NvbW1pdF9jaGFyZ2VcIixcbiAgICBcIl9fbWVtY2cxX3N3YXBvdXRcIixcbiAgICBcImxydV9nZW5fcm90YXRlX21lbWNnXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVtb3ZlcyB0aGUgbGVnYWN5IGNncm91cCB2MSBzb2Z0LWxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChtZW1jb250cm9sLCBtZW1jb250cm9sLXYxLCBhbmQgdm1zY2FuKS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IGRlbGV0ZXMgdGhlIHNvZnQgbGltaXQgUkItdHJlZSB0cmFja2luZyBzdHJ1Y3R1cmVzLCBmdW5jdGlvbnMsIGFuZCB0cmFjZXBvaW50cy5cXG4yLiBJdCByZW1vdmVzIHRoZSB1bnVzZWQgYHNvZnRfbGltaXRgIGFuZCBgdGFyZ2V0c2AgZmllbGRzIGZyb20gYHN0cnVjdCBtZW1fY2dyb3VwYCBhbmQgYHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdWAsIHNpbXBsaWZ5aW5nIHBlci1jcHUgZXZlbnQgcmF0ZWxpbWl0aW5nIHRvIGp1c3QgYHRocmVzaG9sZF90YXJnZXRgLlxcbjMuIEl0IHJlbW92ZXMgdGhlIHVudXNlZCBgbmlkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYCBhbmQgdW51c2VkIHNjYW5uaW5nIHN0YXRpc3RpY3MgdmFyaWFibGVzIGZyb20gcmVjbGFpbSBwYXRocyAoYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCkuXFxuXFxuVGhlIGNoYW5nZXMgY29uc2lzdCBzdHJpY3RseSBvZiBkZWFkL2RlcHJlY2F0ZWQgY29kZSByZW1vdmFsIGFuZCBzdHJ1Y3R1cmFsIHNpbXBsaWZpY2F0aW9ucy4gTm8gbmV3IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBvciBidWZmZXIgbWFuaXB1bGF0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MDUuMjc0NzM4Mzc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDQzODc2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YTBkYWNkZDk1NmRlZjc0ZWUwMDYwNTFlZDg2OTJkOTVkNTliYmMyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6NDI6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IGRhNjI1ZDJlZGIzYmEuLmM3OTk5MjY0MzU1NjAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC05NSwyMCArOTUsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XFxuIFxcdHN0cnVjdCBscnV2ZWNfc3RhdHNcXHRcXHRcXHQqbHJ1dmVjX3N0YXRzO1xcbiBcXHRzdHJ1Y3Qgc2hyaW5rZXJfaW5mbyBfX3JjdVxcdCpzaHJpbmtlcl9pbmZvO1xcbiBcXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbi1cXHQvKlxcbi1cXHQgKiBNZW1jZy12MSBvbmx5IHN0dWZmIGluIG1pZGRsZSBhcyBidWZmZXIgYmV0d2VlbiByZWFkIG1vc3RseSBmaWVsZHNcXG4tXFx0ICogYW5kIHVwZGF0ZSBvZnRlbiBmaWVsZHMgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZy4gSWYgdjEgc3R1ZmYgaXNcXG4tXFx0ICogbm90IHByZXNlbnQsIGFuIGV4cGxpY2l0IHBhZGRpbmcgaXMgbmVlZGVkLlxcbi1cXHQgKi9cXG4tXFxuLVxcdHN0cnVjdCByYl9ub2RlXFx0XFx0dHJlZV9ub2RlO1xcdC8qIFJCIHRyZWUgbm9kZSAqL1xcbi1cXHR1bnNpZ25lZCBsb25nXFx0XFx0dXNhZ2VfaW5fZXhjZXNzOy8qIFNldCB0byB0aGUgdmFsdWUgYnkgd2hpY2ggKi9cXG4tXFx0XFx0XFx0XFx0XFx0XFx0LyogdGhlIHNvZnQgbGltaXQgaXMgZXhjZWVkZWQqL1xcbi1cXHRib29sXFx0XFx0XFx0b25fdHJlZTtcXG4tI2Vsc2VcXG4gXFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDFfKTtcXG4tI2VuZGlmXFxuIFxcbiBcXHQvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi9cXG4gXFx0c3RydWN0IGxydXZlY1xcdFxcdGxydXZlYztcXG5AQCAtMjkzLDggKzI4MCw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcXG4gXFxuIFxcdHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSBfX3BlcmNwdSAqZXZlbnRzX3BlcmNwdTtcXG4gXFxuLVxcdHVuc2lnbmVkIGxvbmcgc29mdF9saW1pdDtcXG4tXFxuIFxcdC8qIHByb3RlY3RlZCBieSBtZW1jZ19vb21fbG9jayAqL1xcbiBcXHRib29sIG9vbV9sb2NrO1xcbiBcXHRpbnQgdW5kZXJfb29tO1xcbkBAIC0xOTI0LDEwICsxOTA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAvKiBDZ3JvdXAgdjEtcmVsYXRlZCBkZWNsYXJhdGlvbnMgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4tdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcXG4tXFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssXFxuLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpO1xcbi1cXG4gYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG5AQCAtMTk0OCwxNCArMTkyOSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbiB9XFxuIFxcbiAjZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG4tc3RhdGljIGlubGluZVxcbi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZClcXG4te1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuaW5kZXggNjdjODRhOGE3MjU4My4uODRlMjM3ZjJjMTdkYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbkBAIC02MzgsMzUgKzYzOCwzMiBAQCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHtcXG4gICogRm9yIGVhY2ggbm9kZSwgbWVtY2dzIGFyZSBkaXZpZGVkIGludG8gdHdvIGdlbmVyYXRpb25zOiB0aGUgb2xkIGFuZCB0aGVcXG4gICogeW91bmcuIEZvciBlYWNoIGdlbmVyYXRpb24sIG1lbWNncyBhcmUgcmFuZG9tbHkgc2hhcmRlZCBpbnRvIG11bHRpcGxlIGJpbnNcXG4gICogdG8gaW1wcm92ZSBzY2FsYWJpbGl0eS4gRm9yIGVhY2ggYmluLCB0aGUgaGxpc3RfbnVsbHMgaXMgdmlydHVhbGx5IGRpdmlkZWRcXG4tICogaW50byB0aHJlZSBzZWdtZW50czogdGhlIGhlYWQsIHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC5cXG4rICogaW50byB0d28gc2VnbWVudHM6IHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC5cXG4gICpcXG4gICogQW4gb25saW5pbmcgbWVtY2cgaXMgYWRkZWQgdG8gdGhlIHRhaWwgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGQgZ2VuZXJhdGlvbi5cXG4gICogVGhlIGV2aWN0aW9uIHN0YXJ0cyBhdCB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLiBUaGVcXG4gICogcGVyLW5vZGUgbWVtY2cgZ2VuZXJhdGlvbiBjb3VudGVyLCB3aG9zZSByZW1pbmRlciAobW9kIE1FTUNHX05SX0dFTlMpIGluZGV4ZXNcXG4gICogdGhlIG9sZCBnZW5lcmF0aW9uLCBpcyBpbmNyZW1lbnRlZCB3aGVuIGFsbCBpdHMgYmlucyBiZWNvbWUgZW1wdHkuXFxuICAqXFxuLSAqIFRoZXJlIGFyZSBmb3VyIG9wZXJhdGlvbnM6XFxuLSAqIDEuIE1FTUNHX0xSVV9IRUFELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHNcXG4tICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcXFwic2VnXFxcIiB0byBcXFwiaGVhZFxcXCI7XFxuLSAqIDIuIE1FTUNHX0xSVV9UQUlMLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHNcXG4rICogVGhlcmUgYXJlIHRocmVlIG9wZXJhdGlvbnM6XFxuKyAqIDEuIE1FTUNHX0xSVV9UQUlMLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHNcXG4gICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcXFwic2VnXFxcIiB0byBcXFwidGFpbFxcXCI7XFxuLSAqIDMuIE1FTUNHX0xSVV9PTEQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGRcXG4rICogMi4gTUVNQ0dfTFJVX09MRCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZFxcbiAgKiAgICBnZW5lcmF0aW9uLCB1cGRhdGVzIGl0cyBcXFwiZ2VuXFxcIiB0byBcXFwib2xkXFxcIiBhbmQgcmVzZXRzIGl0cyBcXFwic2VnXFxcIiB0byBcXFwiZGVmYXVsdFxcXCI7XFxuLSAqIDQuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlXFxuKyAqIDMuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlXFxuICAqICAgIHlvdW5nIGdlbmVyYXRpb24sIHVwZGF0ZXMgaXRzIFxcXCJnZW5cXFwiIHRvIFxcXCJ5b3VuZ1xcXCIgYW5kIHJlc2V0cyBpdHMgXFxcInNlZ1xcXCIgdG9cXG4gICogICAgXFxcImRlZmF1bHRcXFwiLlxcbiAgKlxcbiAgKiBUaGUgZXZlbnRzIHRoYXQgdHJpZ2dlciB0aGUgYWJvdmUgb3BlcmF0aW9ucyBhcmU6XFxuLSAqIDEuIEV4Y2VlZGluZyB0aGUgc29mdCBsaW1pdCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX0hFQUQ7XFxuLSAqIDIuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzXFxuKyAqIDEuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzXFxuICAqICAgIE1FTUNHX0xSVV9UQUlMO1xcbi0gKiAzLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgb2ZmbGluZWQgb3IgYmVsb3cgcmVjbGFpbWFibGUgc2l6ZVxcbisgKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgb2ZmbGluZWQgb3IgYmVsb3cgcmVjbGFpbWFibGUgc2l6ZVxcbiAgKiAgICB0aHJlc2hvbGQsIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9UQUlMO1xcbi0gKiA0LiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemVcXG4rICogMy4gVGhlIHNlY29uZCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXFxuICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xcbi0gKiA1LiBBdHRlbXB0aW5nIHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBtaW4sIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcXG4tICogNi4gRmluaXNoaW5nIHRoZSBhZ2luZyBvbiB0aGUgZXZpY3Rpb24gcGF0aCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xcbi0gKiA3LiBPZmZsaW5pbmcgYSBtZW1jZywgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX09MRC5cXG4rICogNC4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XFxuKyAqIDUuIEZpbmlzaGluZyB0aGUgYWdpbmcgb24gdGhlIGV2aWN0aW9uIHBhdGgsIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcXG4rICogNi4gT2ZmbGluaW5nIGEgbWVtY2csIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9PTEQuXFxuICAqXFxuICAqIE5vdGVzOlxcbiAgKiAxLiBNZW1jZyBMUlUgb25seSBhcHBsaWVzIHRvIGdsb2JhbCByZWNsYWltLCBhbmQgdGhlIHJvdW5kLXJvYmluIGluY3JlbWVudGluZ1xcbkBAIC02OTksNyArNjk2LDYgQEAgdm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gdm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiB2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbi12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XFxuIHZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcXG4gYm9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XFxuIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xcbkBAIC03NDAsMTAgKzczNiw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLXtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSB2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4ge1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcXG5pbmRleCBiNGJmN2I4ZGVmMWY1Li44YTg3Mjk5MGI0YmVlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcXG5AQCAtMjE0LDEzICsyMTQsNiBAQCBERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9iZVxcbiBcXG4gXFx0VFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZylcXG4gKTtcXG4tXFxuLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbixcXG4tXFxuLVxcdFRQX1BST1RPKGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLFxcbi1cXG4tXFx0VFBfQVJHUyhnZnBfZmxhZ3MsIG9yZGVyLCBtZW1jZylcXG4tKTtcXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbiBcXG4gREVDTEFSRV9FVkVOVF9DTEFTUyhtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLFxcbkBAIC0yNjAsMTMgKzI1Myw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsXFxuIFxcbiBcXHRUUF9BUkdTKG5yX3JlY2xhaW1lZCwgbWVtY2cpXFxuICk7XFxuLVxcbi1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZCxcXG4tXFxuLVxcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLFxcbi1cXG4tXFx0VFBfQVJHUyhucl9yZWNsYWltZWQsIG1lbWNnKVxcbi0pO1xcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuIFxcbiBUUkFDRV9FVkVOVChtbV9zaHJpbmtfc2xhYl9zdGFydCxcXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCA1Y2MyMjBkYjkwNzY2Li5lMTZmMTI1MGIyNWM4IDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTc4LDEwICs3OCw2IEBAIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBpbnQgKnN3YXBwaW5lc3MpO1xcbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi1cXHRcXHRcXHRcXHQgICAgIGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcXG4tXFx0XFx0XFx0XFx0ICAgICBwZ19kYXRhX3QgKnBnZGF0LFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19OVU1BXFxuIGV4dGVybiBpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbztcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXFxuaW5kZXggMDVlZjU1Y2FlNGRjNi4uYmYyYzdkNTNiMDFiMSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmNcXG5AQCAtMTcsMzAgKzE3LDYgQEBcXG4gI2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm1lbWNvbnRyb2wtdjEuaFxcXCJcXG4gXFxuLS8qXFxuLSAqIENncm91cHMgYWJvdmUgdGhlaXIgbGltaXRzIGFyZSBtYWludGFpbmVkIGluIGEgUkItVHJlZSwgaW5kZXBlbmRlbnQgb2ZcXG4tICogdGhlaXIgaGllcmFyY2h5IHJlcHJlc2VudGF0aW9uXFxuLSAqL1xcbi1cXG4tc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSB7XFxuLVxcdHN0cnVjdCByYl9yb290IHJiX3Jvb3Q7XFxuLVxcdHN0cnVjdCByYl9ub2RlICpyYl9yaWdodG1vc3Q7XFxuLVxcdHNwaW5sb2NrX3QgbG9jaztcXG4tfTtcXG4tXFxuLXN0cnVjdCBtZW1fY2dyb3VwX3RyZWUge1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICpyYl90cmVlX3Blcl9ub2RlW01BWF9OVU1OT0RFU107XFxuLX07XFxuLVxcbi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZSBzb2Z0X2xpbWl0X3RyZWUgX19yZWFkX21vc3RseTtcXG4tXFxuLS8qXFxuLSAqIE1heGltdW0gbG9vcHMgaW4gbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW0oKSwgdXNlZCBmb3Igc29mdFxcbi0gKiBsaW1pdCByZWNsYWltIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMsIGlmIHRoZXkgZXZlciBvY2N1ci5cXG4tICovXFxuLSNkZWZpbmVcXHRNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTXFx0XFx0MTAwXFxuLSNkZWZpbmVcXHRNRU1fQ0dST1VQX01BWF9TT0ZUX0xJTUlUX1JFQ0xBSU1fTE9PUFNcXHQyXFxuLVxcbiAvKiBmb3IgT09NICovXFxuIHN0cnVjdCBtZW1fY2dyb3VwX2V2ZW50ZmRfbGlzdCB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG5AQCAtMTA2LDMwMSArODIsNiBAQCBzdGF0aWMgc3RydWN0IGxvY2tkZXBfbWFwIG1lbWNnX29vbV9sb2NrX2RlcF9tYXAgPSB7XFxuIFxcbiBERUZJTkVfU1BJTkxPQ0sobWVtY2dfb29tX2xvY2spO1xcbiBcXG4tc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosXFxuLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6LFxcbi1cXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBuZXdfdXNhZ2VfaW5fZXhjZXNzKVxcbi17XFxuLVxcdHN0cnVjdCByYl9ub2RlICoqcCA9IFxcdTAwMjZtY3R6LVxcdTAwM2VyYl9yb290LnJiX25vZGU7XFxuLVxcdHN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXpfbm9kZTtcXG4tXFx0Ym9vbCByaWdodG1vc3QgPSB0cnVlO1xcbi1cXG4tXFx0aWYgKG16LVxcdTAwM2Vvbl90cmVlKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRtei1cXHUwMDNldXNhZ2VfaW5fZXhjZXNzID0gbmV3X3VzYWdlX2luX2V4Y2VzcztcXG4tXFx0aWYgKCFtei1cXHUwMDNldXNhZ2VfaW5fZXhjZXNzKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcdHdoaWxlICgqcCkge1xcbi1cXHRcXHRwYXJlbnQgPSAqcDtcXG4tXFx0XFx0bXpfbm9kZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdHRyZWVfbm9kZSk7XFxuLVxcdFxcdGlmIChtei1cXHUwMDNldXNhZ2VfaW5fZXhjZXNzIFxcdTAwM2MgbXpfbm9kZS1cXHUwMDNldXNhZ2VfaW5fZXhjZXNzKSB7XFxuLVxcdFxcdFxcdHAgPSBcXHUwMDI2KCpwKS1cXHUwMDNlcmJfbGVmdDtcXG4tXFx0XFx0XFx0cmlnaHRtb3N0ID0gZmFsc2U7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHAgPSBcXHUwMDI2KCpwKS1cXHUwMDNlcmJfcmlnaHQ7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHJpZ2h0bW9zdClcXG4tXFx0XFx0bWN0ei1cXHUwMDNlcmJfcmlnaHRtb3N0ID0gXFx1MDAyNm16LVxcdTAwM2V0cmVlX25vZGU7XFxuLVxcbi1cXHRyYl9saW5rX25vZGUoXFx1MDAyNm16LVxcdTAwM2V0cmVlX25vZGUsIHBhcmVudCwgcCk7XFxuLVxcdHJiX2luc2VydF9jb2xvcihcXHUwMDI2bXotXFx1MDAzZXRyZWVfbm9kZSwgXFx1MDAyNm1jdHotXFx1MDAzZXJiX3Jvb3QpO1xcbi1cXHRtei1cXHUwMDNlb25fdHJlZSA9IHRydWU7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eilcXG4te1xcbi1cXHRpZiAoIW16LVxcdTAwM2Vvbl90cmVlKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRpZiAoXFx1MDAyNm16LVxcdTAwM2V0cmVlX25vZGUgPT0gbWN0ei1cXHUwMDNlcmJfcmlnaHRtb3N0KVxcbi1cXHRcXHRtY3R6LVxcdTAwM2VyYl9yaWdodG1vc3QgPSByYl9wcmV2KFxcdTAwMjZtei1cXHUwMDNldHJlZV9ub2RlKTtcXG4tXFxuLVxcdHJiX2VyYXNlKFxcdTAwMjZtei1cXHUwMDNldHJlZV9ub2RlLCBcXHUwMDI2bWN0ei1cXHUwMDNlcmJfcm9vdCk7XFxuLVxcdG16LVxcdTAwM2Vvbl90cmVlID0gZmFsc2U7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFxuLVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZtY3R6LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXosIG1jdHopO1xcbi1cXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtY3R6LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNvZnRfbGltaXRfZXhjZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4te1xcbi1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gcGFnZV9jb3VudGVyX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnkpO1xcbi1cXHR1bnNpZ25lZCBsb25nIHNvZnRfbGltaXQgPSBSRUFEX09OQ0UobWVtY2ctXFx1MDAzZXNvZnRfbGltaXQpO1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4Y2VzcyA9IDA7XFxuLVxcbi1cXHRpZiAobnJfcGFnZXMgXFx1MDAzZSBzb2Z0X2xpbWl0KVxcbi1cXHRcXHRleGNlc3MgPSBucl9wYWdlcyAtIHNvZnRfbGltaXQ7XFxuLVxcbi1cXHRyZXR1cm4gZXhjZXNzO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBtZW1jZzFfdXBkYXRlX3RyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgZXhjZXNzO1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7XFxuLVxcbi1cXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcXG4tXFx0XFx0aWYgKHNvZnRfbGltaXRfZXhjZXNzKG1lbWNnKSlcXG4tXFx0XFx0XFx0bHJ1X2dlbl9zb2Z0X3JlY2xhaW0obWVtY2csIG5pZCk7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4tXFx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW25pZF07XFxuLVxcdGlmICghbWN0eilcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHQvKlxcbi1cXHQgKiBOZWNlc3NhcnkgdG8gdXBkYXRlIGFsbCBhbmNlc3RvcnMgd2hlbiBoaWVyYXJjaHkgaXMgdXNlZC5cXG4tXFx0ICogYmVjYXVzZSB0aGVpciBldmVudCBjb3VudGVyIGlzIG5vdCB0b3VjaGVkLlxcbi1cXHQgKi9cXG4tXFx0Zm9yICg7IG1lbWNnOyBtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSkge1xcbi1cXHRcXHRteiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1tuaWRdO1xcbi1cXHRcXHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZyk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFdlIGhhdmUgdG8gdXBkYXRlIHRoZSB0cmVlIGlmIG16IGlzIG9uIFJCLXRyZWUgb3JcXG4tXFx0XFx0ICogbWVtIGlzIG92ZXIgaXRzIHNvZnRsaW1pdC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChleGNlc3MgfHwgbXotXFx1MDAzZW9uX3RyZWUpIHtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFxuLVxcdFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZtY3R6LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdFxcdC8qIGlmIG9uLXRyZWUsIHJlbW92ZSBpdCAqL1xcbi1cXHRcXHRcXHRpZiAobXotXFx1MDAzZW9uX3RyZWUpXFxuLVxcdFxcdFxcdFxcdF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXosIG1jdHopO1xcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBJbnNlcnQgYWdhaW4uIG16LVxcdTAwM2V1c2FnZV9pbl9leGNlc3Mgd2lsbCBiZSB1cGRhdGVkLlxcbi1cXHRcXHRcXHQgKiBJZiBleGNlc3MgaXMgMCwgbm8gdHJlZSBvcHMuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG16LCBtY3R6LCBleGNlc3MpO1xcbi1cXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZtY3R6LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi19XFxuLVxcbi12b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLXtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbi1cXHRpbnQgbmlkO1xcbi1cXG4tXFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG4tXFx0XFx0bXogPSBtZW1jZy1cXHUwMDNlbm9kZWluZm9bbmlkXTtcXG4tXFx0XFx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW25pZF07XFxuLVxcdFxcdGlmIChtY3R6KVxcbi1cXHRcXHRcXHRtZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XFxuLVxcdH1cXG4tfVxcbi1cXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpcXG4tX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXFxuLXtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbi1cXG4tcmV0cnk6XFxuLVxcdG16ID0gTlVMTDtcXG4tXFx0aWYgKCFtY3R6LVxcdTAwM2VyYl9yaWdodG1vc3QpXFxuLVxcdFxcdGdvdG8gZG9uZTtcXHRcXHQvKiBOb3RoaW5nIHRvIHJlY2xhaW0gZnJvbSAqL1xcbi1cXG4tXFx0bXogPSByYl9lbnRyeShtY3R6LVxcdTAwM2VyYl9yaWdodG1vc3QsXFxuLVxcdFxcdCAgICAgIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCB0cmVlX25vZGUpO1xcbi1cXHQvKlxcbi1cXHQgKiBSZW1vdmUgdGhlIG5vZGUgbm93IGJ1dCBzb21lb25lIGVsc2UgY2FuIGFkZCBpdCBiYWNrLFxcbi1cXHQgKiB3ZSB3aWxsIHRvIGFkZCBpdCBiYWNrIGF0IHRoZSBlbmQgb2YgcmVjbGFpbSB0byBpdHMgY29ycmVjdFxcbi1cXHQgKiBwb3NpdGlvbiBpbiB0aGUgdHJlZS5cXG4tXFx0ICovXFxuLVxcdF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXosIG1jdHopO1xcbi1cXHRpZiAoIXNvZnRfbGltaXRfZXhjZXNzKG16LVxcdTAwM2VtZW1jZykgfHxcXG4tXFx0ICAgICFjc3NfdHJ5Z2V0KFxcdTAwMjZtei1cXHUwMDNlbWVtY2ctXFx1MDAzZWNzcykpXFxuLVxcdFxcdGdvdG8gcmV0cnk7XFxuLWRvbmU6XFxuLVxcdHJldHVybiBtejtcXG4tfVxcbi1cXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpcXG4tbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6KVxcbi17XFxuLVxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG4tXFxuLVxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNm1jdHotXFx1MDAzZWxvY2spO1xcbi1cXHRteiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTtcXG4tXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZtY3R6LVxcdTAwM2Vsb2NrKTtcXG4tXFx0cmV0dXJuIG16O1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxcbi1cXHRcXHRcXHRcXHQgICBwZ19kYXRhX3QgKnBnZGF0LFxcbi1cXHRcXHRcXHRcXHQgICBnZnBfdCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZClcXG4te1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqdmljdGltID0gTlVMTDtcXG4tXFx0aW50IHRvdGFsID0gMDtcXG4tXFx0aW50IGxvb3AgPSAwO1xcbi1cXHR1bnNpZ25lZCBsb25nIGV4Y2VzcztcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSByZWNsYWltID0ge1xcbi1cXHRcXHQucGdkYXQgPSBwZ2RhdCxcXG4tXFx0fTtcXG4tXFxuLVxcdGV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpO1xcbi1cXG4tXFx0d2hpbGUgKDEpIHtcXG4tXFx0XFx0dmljdGltID0gbWVtX2Nncm91cF9pdGVyKHJvb3RfbWVtY2csIHZpY3RpbSwgXFx1MDAyNnJlY2xhaW0pO1xcbi1cXHRcXHRpZiAoIXZpY3RpbSkge1xcbi1cXHRcXHRcXHRsb29wKys7XFxuLVxcdFxcdFxcdGlmIChsb29wIFxcdTAwM2U9IDIpIHtcXG4tXFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0ICogSWYgd2UgaGF2ZSBub3QgYmVlbiBhYmxlIHRvIHJlY2xhaW1cXG4tXFx0XFx0XFx0XFx0ICogYW55dGhpbmcsIGl0IG1pZ2h0IGJlY2F1c2UgdGhlcmUgYXJlXFxuLVxcdFxcdFxcdFxcdCAqIG5vIHJlY2xhaW1hYmxlIHBhZ2VzIHVuZGVyIHRoaXMgaGllcmFyY2h5XFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRpZiAoIXRvdGFsKVxcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0ICogV2Ugd2FudCB0byBkbyBtb3JlIHRhcmdldGVkIHJlY2xhaW0uXFxuLVxcdFxcdFxcdFxcdCAqIGV4Y2VzcyBcXHUwMDNlXFx1MDAzZSAyIGlzIG5vdCB0byBleGNlc3NpdmUgc28gYXMgdG9cXG4tXFx0XFx0XFx0XFx0ICogcmVjbGFpbSB0b28gbXVjaCwgbm9yIHRvbyBsZXNzIHRoYXQgd2Uga2VlcFxcbi1cXHRcXHRcXHRcXHQgKiBjb21pbmcgYmFjayB0byByZWNsYWltIGZyb20gdGhpcyBjZ3JvdXBcXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdGlmICh0b3RhbCBcXHUwMDNlPSAoZXhjZXNzIFxcdTAwM2VcXHUwMDNlIDIpIHx8XFxuLVxcdFxcdFxcdFxcdFxcdChsb29wIFxcdTAwM2UgTUVNX0NHUk9VUF9NQVhfUkVDTEFJTV9MT09QUykpXFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHRvdGFsICs9IG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUodmljdGltLCBnZnBfbWFzaywgZmFsc2UsXFxuLVxcdFxcdFxcdFxcdFxcdHBnZGF0LCBcXHUwMDI2bnJfc2Nhbm5lZCk7XFxuLVxcdFxcdCp0b3RhbF9zY2FubmVkICs9IG5yX3NjYW5uZWQ7XFxuLVxcdFxcdGlmICghc29mdF9saW1pdF9leGNlc3Mocm9vdF9tZW1jZykpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcdG1lbV9jZ3JvdXBfaXRlcl9icmVhayhyb290X21lbWNnLCB2aWN0aW0pO1xcbi1cXHRyZXR1cm4gdG90YWw7XFxuLX1cXG4tXFxuLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBnZnBfdCBnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpXFxuLXtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSAwO1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosICpuZXh0X216ID0gTlVMTDtcXG4tXFx0dW5zaWduZWQgbG9uZyByZWNsYWltZWQ7XFxuLVxcdGludCBsb29wID0gMDtcXG4tXFx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejtcXG4tXFx0dW5zaWduZWQgbG9uZyBleGNlc3M7XFxuLVxcbi1cXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0aWYgKG9yZGVyIFxcdTAwM2UgMClcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRtY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbcGdkYXQtXFx1MDAzZW5vZGVfaWRdO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogRG8gbm90IGV2ZW4gYm90aGVyIHRvIGNoZWNrIHRoZSBsYXJnZXN0IG5vZGUgaWYgdGhlIHJvb3RcXG4tXFx0ICogaXMgZW1wdHkuIERvIGl0IGxvY2tsZXNzIHRvIHByZXZlbnQgbG9jayBib3VuY2luZy4gUmFjZXNcXG4tXFx0ICogYXJlIGFjY2VwdGFibGUgYXMgc29mdCBsaW1pdCBpcyBiZXN0IGVmZm9ydCBhbnl3YXkuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIW1jdHogfHwgUkJfRU1QVFlfUk9PVChcXHUwMDI2bWN0ei1cXHUwMDNlcmJfcm9vdCkpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogVGhpcyBsb29wIGNhbiBydW4gYSB3aGlsZSwgc3BlY2lhbGx5IGlmIG1lbV9jZ3JvdXAncyBjb250aW51b3VzbHlcXG4tXFx0ICoga2VlcCBleGNlZWRpbmcgdGhlaXIgc29mdCBsaW1pdCBhbmQgcHV0dGluZyB0aGUgc3lzdGVtIHVuZGVyXFxuLVxcdCAqIHByZXNzdXJlXFxuLVxcdCAqL1xcbi1cXHRkbyB7XFxuLVxcdFxcdGlmIChuZXh0X216KVxcbi1cXHRcXHRcXHRteiA9IG5leHRfbXo7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bXogPSBtZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopO1xcbi1cXHRcXHRpZiAoIW16KVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdHJlY2xhaW1lZCA9IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKG16LVxcdTAwM2VtZW1jZywgcGdkYXQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgdG90YWxfc2Nhbm5lZCk7XFxuLVxcdFxcdG5yX3JlY2xhaW1lZCArPSByZWNsYWltZWQ7XFxuLVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNm1jdHotXFx1MDAzZWxvY2spO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0gYW55dGhpbmcgZnJvbSB0aGlzIG1lbW9yeSBjZ3JvdXBcXG4tXFx0XFx0ICogaXQgaXMgdGltZSB0byBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNncm91cFxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0bmV4dF9teiA9IE5VTEw7XFxuLVxcdFxcdGlmICghcmVjbGFpbWVkKVxcbi1cXHRcXHRcXHRuZXh0X216ID0gX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopO1xcbi1cXG4tXFx0XFx0ZXhjZXNzID0gc29mdF9saW1pdF9leGNlc3MobXotXFx1MDAzZW1lbWNnKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogT25lIHNjaG9vbCBvZiB0aG91Z2h0IHNheXMgdGhhdCB3ZSBzaG91bGQgbm90IGFkZFxcbi1cXHRcXHQgKiBiYWNrIHRoZSBub2RlIHRvIHRoZSB0cmVlIGlmIHJlY2xhaW0gcmV0dXJucyAwLlxcbi1cXHRcXHQgKiBCdXQgb3VyIHJlY2xhaW0gY291bGQgcmV0dXJuIDAsIHNpbXBseSBiZWNhdXNlIGR1ZVxcbi1cXHRcXHQgKiB0byBwcmlvcml0eSB3ZSBhcmUgZXhwb3NpbmcgYSBzbWFsbGVyIHN1YnNldCBvZlxcbi1cXHRcXHQgKiBtZW1vcnkgdG8gcmVjbGFpbSBmcm9tLiBDb25zaWRlciB0aGlzIGFzIGEgbG9uZ2VyXFxuLVxcdFxcdCAqIHRlcm0gVE9ETy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdC8qIElmIGV4Y2VzcyA9PSAwLCBubyB0cmVlIG9wcyAqL1xcbi1cXHRcXHRfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG16LCBtY3R6LCBleGNlc3MpO1xcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNm1jdHotXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRjc3NfcHV0KFxcdTAwMjZtei1cXHUwMDNlbWVtY2ctXFx1MDAzZWNzcyk7XFxuLVxcdFxcdGxvb3ArKztcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQ291bGQgbm90IHJlY2xhaW0gYW55dGhpbmcgYW5kIHRoZXJlIGFyZSBubyBtb3JlXFxuLVxcdFxcdCAqIG1lbSBjZ3JvdXBzIHRvIHRyeSBvciB3ZSBzZWVtIHRvIGJlIGxvb3Bpbmcgd2l0aG91dFxcbi1cXHRcXHQgKiByZWNsYWltaW5nIGFueXRoaW5nLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFucl9yZWNsYWltZWQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0KG5leHRfbXogPT0gTlVMTCB8fFxcbi1cXHRcXHRcXHRsb29wIFxcdTAwM2UgTUVNX0NHUk9VUF9NQVhfU09GVF9MSU1JVF9SRUNMQUlNX0xPT1BTKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdH0gd2hpbGUgKCFucl9yZWNsYWltZWQpO1xcbi1cXHRpZiAobmV4dF9teilcXG4tXFx0XFx0Y3NzX3B1dChcXHUwMDI2bmV4dF9tei1cXHUwMDNlbWVtY2ctXFx1MDAzZWNzcyk7XFxuLVxcdHJldHVybiBucl9yZWNsYWltZWQ7XFxuLX1cXG4tXFxuIHN0YXRpYyB1NjQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBjZnR5cGUgKmNmdClcXG4ge1xcbkBAIC01MTEsNyArMTkyLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF90aHJlc2hvbGQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXHR9XFxuIH1cXG4gXFxuLS8qIENncm91cDE6IHRocmVzaG9sZCBub3RpZmljYXRpb25zIFxcdTAwMjYgc29mdGxpbWl0IHRyZWUgdXBkYXRlcyAqL1xcbisvKiBDZ3JvdXAxOiB0aHJlc2hvbGQgbm90aWZpY2F0aW9ucyAqL1xcbiBcXG4gLypcXG4gICogUGVyIG1lbWNnIGV2ZW50IGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYXQgZXZlcnkgcGFnZWluL3BhZ2VvdXQuIFdpdGggVEhQLFxcbkBAIC01MTksMTUgKzIwMCw5IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gICogdG8gdHJpZ2dlciBzb21lIHBlcmlvZGljIGV2ZW50cy4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGJldHRlclxcbiAgKiB0aGFuIHVzaW5nIGppZmZpZXMgZXRjLiB0byBoYW5kbGUgcGVyaW9kaWMgbWVtY2cgZXZlbnQuXFxuICAqL1xcbi1lbnVtIG1lbV9jZ3JvdXBfZXZlbnRzX3RhcmdldCB7XFxuLVxcdE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCxcXG4tXFx0TUVNX0NHUk9VUF9UQVJHRVRfU09GVExJTUlULFxcbi1cXHRNRU1fQ0dST1VQX05UQVJHRVRTLFxcbi19O1xcbi1cXG4gc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1IHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlX2V2ZW50cztcXG4tXFx0dW5zaWduZWQgbG9uZyB0YXJnZXRzW01FTV9DR1JPVVBfTlRBUkdFVFNdO1xcbitcXHR1bnNpZ25lZCBsb25nIHRocmVzaG9sZF90YXJnZXQ7XFxuIH07XFxuIFxcbiBzdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpXFxuQEAgLTU0NCw1MyArMjE5LDI5IEBAIHN0YXRpYyB2b2lkIG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcylcXG4gfVxcbiBcXG4gI2RlZmluZSBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQgMTI4XFxuLSNkZWZpbmUgU09GVExJTUlUX0VWRU5UU19UQVJHRVQgMTAyNFxcbiBcXG4tc3RhdGljIGJvb2wgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdGVudW0gbWVtX2Nncm91cF9ldmVudHNfdGFyZ2V0IHRhcmdldClcXG4rc3RhdGljIGJvb2wgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyB2YWwsIG5leHQ7XFxuIFxcbiBcXHR2YWwgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctXFx1MDAzZWV2ZW50c19wZXJjcHUtXFx1MDAzZW5yX3BhZ2VfZXZlbnRzKTtcXG4tXFx0bmV4dCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdS1cXHUwMDNldGFyZ2V0c1t0YXJnZXRdKTtcXG4rXFx0bmV4dCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdS1cXHUwMDNldGhyZXNob2xkX3RhcmdldCk7XFxuIFxcdC8qIGZyb20gdGltZV9hZnRlcigpIGluIGppZmZpZXMuaCAqL1xcbiBcXHRpZiAoKGxvbmcpKG5leHQgLSB2YWwpIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRzd2l0Y2ggKHRhcmdldCkge1xcbi1cXHRcXHRjYXNlIE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSDpcXG4tXFx0XFx0XFx0bmV4dCA9IHZhbCArIFRIUkVTSE9MRFNfRVZFTlRTX1RBUkdFVDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgTUVNX0NHUk9VUF9UQVJHRVRfU09GVExJTUlUOlxcbi1cXHRcXHRcXHRuZXh0ID0gdmFsICsgU09GVExJTUlUX0VWRU5UU19UQVJHRVQ7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHRfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLVxcdTAwM2VldmVudHNfcGVyY3B1LVxcdTAwM2V0YXJnZXRzW3RhcmdldF0sIG5leHQpO1xcbitcXHRcXHRfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLVxcdTAwM2VldmVudHNfcGVyY3B1LVxcdTAwM2V0aHJlc2hvbGRfdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHQgdmFsICsgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUKTtcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBDaGVjayBldmVudHMgaW4gb3JkZXIuXFxuLSAqXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBtZW1jZzFfY2hlY2tfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4rc3RhdGljIHZvaWQgbWVtY2cxX2NoZWNrX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHQvKiB0aHJlc2hvbGQgZXZlbnQgaXMgdHJpZ2dlcmVkIGluIGZpbmVyIGdyYWluIHRoYW4gc29mdCBsaW1pdCAqL1xcbi1cXHRpZiAodW5saWtlbHkobWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0TUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNIKSkpIHtcXG4tXFx0XFx0Ym9vbCBkb19zb2Z0bGltaXQ7XFxuLVxcbi1cXHRcXHRkb19zb2Z0bGltaXQgPSBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQpO1xcbitcXHRpZiAodW5saWtlbHkobWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZykpKVxcbiBcXHRcXHRtZW1fY2dyb3VwX3RocmVzaG9sZChtZW1jZyk7XFxuLVxcdFxcdGlmICh1bmxpa2VseShkb19zb2Z0bGltaXQpKVxcbi1cXHRcXHRcXHRtZW1jZzFfdXBkYXRlX3RyZWUobWVtY2csIG5pZCk7XFxuLVxcdH1cXG4gfVxcbiBcXG4gdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuQEAgLTU5OSw3ICsyNTAsNyBAQCB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4gXFxuIFxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4gXFx0bWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKG1lbWNnLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbi1cXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcXG4rXFx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7XFxuIFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gfVxcbiBcXG5AQCAtNjcyLDcgKzMyMyw3IEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbiBcXHRWTV9XQVJOX09OX0lSUVNfRU5BQkxFRCgpO1xcbiBcXHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xcbiBcXHRwcmVlbXB0X2VuYWJsZV9uZXN0ZWQoKTtcXG4tXFx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XFxuK1xcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2cpO1xcbiBcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcXG5AQCAtNzI2LDE0ICszNzcsMTQgQEAgdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuICNlbmRpZlxcbiBcXG4gdm9pZCBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXFxuLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKVxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbiBcXHRjb3VudF9tZW1jZ19ldmVudHMobWVtY2csIFBHUEdPVVQsIHBncGdvdXQpO1xcbiBcXHRfX3RoaXNfY3B1X2FkZChtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdS1cXHUwMDNlbnJfcGFnZV9ldmVudHMsIG5yX21lbW9yeSk7XFxuLVxcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIG5pZCk7XFxuK1xcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2cpO1xcbiBcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuIH1cXG4gXFxuQEAgLTI1NjYsMjIgKzIyMTcsMyBAQCB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIHtcXG4gXFx0ZnJlZV9wZXJjcHUobWVtY2ctXFx1MDAzZWV2ZW50c19wZXJjcHUpO1xcbiB9XFxuLVxcbi1zdGF0aWMgaW50IF9faW5pdCBtZW1jZzFfaW5pdCh2b2lkKVxcbi17XFxuLVxcdGludCBub2RlO1xcbi1cXG4tXFx0Zm9yX2VhY2hfbm9kZShub2RlKSB7XFxuLVxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKnJ0cG47XFxuLVxcbi1cXHRcXHRydHBuID0ga3phbGxvY19ub2RlKHNpemVvZigqcnRwbiksIEdGUF9LRVJORUwsIG5vZGUpO1xcbi1cXG4tXFx0XFx0cnRwbi1cXHUwMDNlcmJfcm9vdCA9IFJCX1JPT1Q7XFxuLVxcdFxcdHJ0cG4tXFx1MDAzZXJiX3JpZ2h0bW9zdCA9IE5VTEw7XFxuLVxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZydHBuLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0c29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbm9kZV0gPSBydHBuO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1zdWJzeXNfaW5pdGNhbGwobWVtY2cxX2luaXQpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmhcXG5pbmRleCAxZTM5NDI2OWM2MTNkLi5iOWEyMWYwZmQyYzNhIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuaFxcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuaFxcbkBAIC00MSwxMiArNDEsNiBAQCBib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gdm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gXFxuIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tdm9pZCBtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLXtcXG4tXFx0V1JJVEVfT05DRShtZW1jZy1cXHUwMDNlc29mdF9saW1pdCwgUEFHRV9DT1VOVEVSX01BWCk7XFxuLX1cXG4gXFxuIHN0cnVjdCBjZ3JvdXBfdGFza3NldDtcXG4gdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG5AQCAtNjUsNyArNTksNyBAQCB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiBcXG4gdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcXG4tXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnksIGludCBuaWQpO1xcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7XFxuIFxcbiB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKTtcXG4gdm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcXG5AQCAtOTgsOCArOTIsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHsgcmV0dXJuIHRydWU7XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9tZW1jZ19pbml0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcXG5AQCAtMTE1LDcgKzEwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXFxuLVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSwgaW50IG5pZCkge31cXG4rXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KSB7fVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKSB7fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggYmZkMGE3NGZhYzkyMy4uMzA2MzZiOWQ5NjczOSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNDI1Nyw3ICs0MjU3LDYgQEAgbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuIFxcdFxcdHJldHVybiBFUlJfQ0FTVChtZW1jZyk7XFxuIFxcbiBcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xcbi1cXHRtZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7XFxuICNpZmRlZiBDT05GSUdfWlNXQVBcXG4gXFx0bWVtY2ctXFx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XFxuIFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XFxuQEAgLTQ0MjksNyArNDQyOCw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX2ZyZWUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcXG4gXFxuIFxcdHZtcHJlc3N1cmVfY2xlYW51cChcXHUwMDI2bWVtY2ctXFx1MDAzZXZtcHJlc3N1cmUpO1xcbiBcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZtZW1jZy1cXHUwMDNlaGlnaF93b3JrKTtcXG4tXFx0bWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKG1lbWNnKTtcXG4gXFx0ZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTtcXG4gXFx0bWVtX2Nncm91cF9mcmVlKG1lbWNnKTtcXG4gfVxcbkBAIC00NDY1LDcgKzQ0NjMsNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbiBcXHRwYWdlX2NvdW50ZXJfc2V0X21pbihcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeSwgMCk7XFxuIFxcdHBhZ2VfY291bnRlcl9zZXRfbG93KFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCAwKTtcXG4gXFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTtcXG4tXFx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xcbiBcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcXG4gXFx0bWVtY2dfd2JfZG9tYWluX3NpemVfY2hhbmdlZChtZW1jZyk7XFxuIH1cXG5AQCAtNTMzMSw3ICs1MzI4LDYgQEAgc3RydWN0IHVuY2hhcmdlX2dhdGhlciB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5O1xcbiBcXHR1bnNpZ25lZCBsb25nIHBncGdvdXQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnJfa21lbTtcXG4tXFx0aW50IG5pZDtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmNoYXJnZV9nYXRoZXJfY2xlYXIoc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXFxuQEAgLTUzNTQsNyArNTM1MCw3IEBAIHN0YXRpYyB2b2lkIHVuY2hhcmdlX2JhdGNoKGNvbnN0IHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxcbiBcXHRcXHRtZW1jZzFfb29tX3JlY292ZXIobWVtY2cpO1xcbiBcXHR9XFxuIFxcbi1cXHRtZW1jZzFfdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHVnLVxcdTAwM2VwZ3Bnb3V0LCB1Zy1cXHUwMDNlbnJfbWVtb3J5LCB1Zy1cXHUwMDNlbmlkKTtcXG4rXFx0bWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy1cXHUwMDNlcGdwZ291dCwgdWctXFx1MDAzZW5yX21lbW9yeSk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0LyogZHJvcCByZWZlcmVuY2UgZnJvbSB1bmNoYXJnZV9mb2xpbyAqL1xcbkBAIC01MzgzLDcgKzUzNzksNiBAQCBzdGF0aWMgdm9pZCB1bmNoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcXG4gXFx0XFx0XFx0dW5jaGFyZ2VfZ2F0aGVyX2NsZWFyKHVnKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR1Zy1cXHUwMDNlb2JqY2cgPSBvYmpjZztcXG4tXFx0XFx0dWctXFx1MDAzZW5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuIFxcbiBcXHRcXHQvKiBwYWlycyB3aXRoIG9ial9jZ3JvdXBfcHV0IGluIHVuY2hhcmdlX2JhdGNoICovXFxuIFxcdFxcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGZkZDEzMjk5YTA0YTkuLmRlYjA4N2M1NzAwN2QgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC00MzczLDcgKzQzNzMsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXFxuIGVudW0ge1xcbiBcXHRNRU1DR19MUlVfTk9QLFxcbi1cXHRNRU1DR19MUlVfSEVBRCxcXG4gXFx0TUVNQ0dfTFJVX1RBSUwsXFxuIFxcdE1FTUNHX0xSVV9PTEQsXFxuIFxcdE1FTUNHX0xSVV9ZT1VORyxcXG5AQCAtNDM5NSw5ICs0Mzk0LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuIFxcdG5ldyA9IG9sZCA9IGxydXZlYy1cXHUwMDNlbHJ1Z2VuLmdlbjtcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXFxuLVxcdGlmIChvcCA9PSBNRU1DR19MUlVfSEVBRClcXG4tXFx0XFx0c2VnID0gTUVNQ0dfTFJVX0hFQUQ7XFxuLVxcdGVsc2UgaWYgKG9wID09IE1FTUNHX0xSVV9UQUlMKVxcbitcXHRpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpXFxuIFxcdFxcdHNlZyA9IE1FTUNHX0xSVV9UQUlMO1xcbiBcXHRlbHNlIGlmIChvcCA9PSBNRU1DR19MUlVfT0xEKVxcbiBcXHRcXHRuZXcgPSBnZXRfbWVtY2dfZ2VuKHBnZGF0LVxcdTAwM2VtZW1jZ19scnUuc2VxKTtcXG5AQCAtNDQxMSw3ICs0NDA4LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuIFxcbiBcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbi5saXN0KTtcXG4gXFxuLVxcdGlmIChvcCA9PSBNRU1DR19MUlVfSEVBRCB8fCBvcCA9PSBNRU1DR19MUlVfT0xEKVxcbitcXHRpZiAob3AgPT0gTUVNQ0dfTFJVX09MRClcXG4gXFx0XFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbi5saXN0LCBcXHUwMDI2cGdkYXQtXFx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0aGxpc3RfbnVsbHNfYWRkX3RhaWxfcmN1KFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbi5saXN0LCBcXHUwMDI2cGdkYXQtXFx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XFxuQEAgLTQ0ODksMTUgKzQ0ODYsNiBAQCB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdH1cXG4gfVxcbiBcXG4tdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLXtcXG4tXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG4tXFxuLVxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXFxuLVxcdGlmIChSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcXG4tXFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfSEVBRCk7XFxuLX1cXG4tXFxuIGJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuIHtcXG4gXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5AQCAtNjQzOSw4ICs2NDI3LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiB7XFxuIFxcdHN0cnVjdCB6b25lcmVmICp6O1xcbiBcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9zb2Z0X3JlY2xhaW1lZDtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7XFxuIFxcdGdmcF90IG9yaWdfbWFzaztcXG4gXFx0cGdfZGF0YV90ICpsYXN0X3BnZGF0ID0gTlVMTDtcXG4gXFx0cGdfZGF0YV90ICpmaXJzdF9wZ2RhdCA9IE5VTEw7XFxuQEAgLTY0ODIsMzUgKzY0NjgsMTcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbiBcXHRcXHRcXHRcXHRzYy1cXHUwMDNlY29tcGFjdGlvbl9yZWFkeSA9IHRydWU7XFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBTaHJpbmsgZWFjaCBub2RlIGluIHRoZSB6b25lbGlzdCBvbmNlLiBJZiB0aGVcXG4tXFx0XFx0XFx0ICogem9uZWxpc3QgaXMgb3JkZXJlZCBieSB6b25lIChub3QgdGhlIGRlZmF1bHQpIHRoZW4gYVxcbi1cXHRcXHRcXHQgKiBub2RlIG1heSBiZSBzaHJ1bmsgbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZVxcbi1cXHRcXHRcXHQgKiB0aGUgdXNlciBwcmVmZXJzIGxvd2VyIHpvbmVzIGJlaW5nIHByZXNlcnZlZC5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmICh6b25lLVxcdTAwM2V6b25lX3BnZGF0ID09IGxhc3RfcGdkYXQpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogVGhpcyBzdGVhbHMgcGFnZXMgZnJvbSBtZW1vcnkgY2dyb3VwcyBvdmVyIHNvZnRsaW1pdFxcbi1cXHRcXHRcXHQgKiBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlcyBhbmRcXG4tXFx0XFx0XFx0ICogc2Nhbm5lZCBwYWdlcy4gVGhpcyB3b3JrcyBmb3IgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZVxcbi1cXHRcXHRcXHQgKiBhbmQgYmFsYW5jaW5nLCBub3QgZm9yIGEgbWVtY2cncyBsaW1pdC5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdG5yX3NvZnRfc2Nhbm5lZCA9IDA7XFxuLVxcdFxcdFxcdG5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbSh6b25lLVxcdTAwM2V6b25lX3BnZGF0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzYy1cXHUwMDNlb3JkZXIsIHNjLVxcdTAwM2VnZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5yX3NvZnRfc2Nhbm5lZCk7XFxuLVxcdFxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gbnJfc29mdF9yZWNsYWltZWQ7XFxuLVxcdFxcdFxcdHNjLVxcdTAwM2Vucl9zY2FubmVkICs9IG5yX3NvZnRfc2Nhbm5lZDtcXG4tXFx0XFx0XFx0LyogbmVlZCBzb21lIGNoZWNrIGZvciBhdm9pZCBtb3JlIHNocmlua196b25lKCkgKi9cXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKCFmaXJzdF9wZ2RhdClcXG4gXFx0XFx0XFx0Zmlyc3RfcGdkYXQgPSB6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbiBcXG4tXFx0XFx0LyogU2VlIGNvbW1lbnQgYWJvdXQgc2FtZSBjaGVjayBmb3IgZ2xvYmFsIHJlY2xhaW0gYWJvdmUgKi9cXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlIHpvbmVsaXN0IGlzXFxuK1xcdFxcdCAqIG9yZGVyZWQgYnkgem9uZSAobm90IHRoZSBkZWZhdWx0KSB0aGVuIGEgbm9kZSBtYXkgYmUgc2hydW5rXFxuK1xcdFxcdCAqIG11bHRpcGxlIHRpbWVzIGJ1dCBpbiB0aGF0IGNhc2UgdGhlIHVzZXIgcHJlZmVycyBsb3dlciB6b25lc1xcbitcXHRcXHQgKiBiZWluZyBwcmVzZXJ2ZWQuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRpZiAoem9uZS1cXHUwMDNlem9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0bGFzdF9wZ2RhdCA9IHpvbmUtXFx1MDAzZXpvbmVfcGdkYXQ7XFxuQEAgLTY4MjUsNDcgKzY3OTMsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4gXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gXFxuLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRwZ19kYXRhX3QgKnBnZGF0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKVxcbi17XFxuLVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuLVxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XFxuLVxcdFxcdC5ucl90b19yZWNsYWltID0gU1dBUF9DTFVTVEVSX01BWCxcXG4tXFx0XFx0LnRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2csXFxuLVxcdFxcdC5tYXlfd3JpdGVwYWdlID0gMSxcXG4tXFx0XFx0Lm1heV91bm1hcCA9IDEsXFxuLVxcdFxcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXFxuLVxcdFxcdC5tYXlfc3dhcCA9ICFub3N3YXAsXFxuLVxcdH07XFxuLVxcbi1cXHRXQVJOX09OX09OQ0UoIWN1cnJlbnQtXFx1MDAzZXJlY2xhaW1fc3RhdGUpO1xcbi1cXG4tXFx0c2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgXFx1MDAyNiBHRlBfUkVDTEFJTV9NQVNLKSB8XFxuLVxcdFxcdFxcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKTtcXG4tXFxuLVxcdHRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbihzYy5nZnBfbWFzayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2Mub3JkZXIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG1lbWNnKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIE5PVEU6IEFsdGhvdWdoIHdlIGNhbiBnZXQgdGhlIHByaW9yaXR5IGZpZWxkLCB1c2luZyBpdFxcbi1cXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cXG4tXFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxuLVxcdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAncyBhcyB3ZWxsLiBXZSBoYWNrXFxuLVxcdCAqIHRoZSBwcmlvcml0eSBhbmQgbWFrZSBpdCB6ZXJvLlxcbi1cXHQgKi9cXG4tXFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIFxcdTAwMjZzYyk7XFxuLVxcbi1cXHR0cmFjZV9tbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fZW5kKHNjLm5yX3JlY2xhaW1lZCwgbWVtY2cpO1xcbi1cXG4tXFx0Km5yX3NjYW5uZWQgPSBzYy5ucl9zY2FubmVkO1xcbi1cXG4tXFx0cmV0dXJuIHNjLm5yX3JlY2xhaW1lZDtcXG4tfVxcbi1cXG4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXFxuQEAgLTcxNzEsOCArNzA5OCw2IEBAIGNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuIHN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuIHtcXG4gXFx0aW50IGk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9zY2FubmVkO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbGFncztcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9ib29zdF9yZWNsYWltO1xcbiBcXHR1bnNpZ25lZCBsb25nIHpvbmVfYm9vc3RzW01BWF9OUl9aT05FU10gPSB7IDAsIH07XFxuQEAgLTcyNzgsMTIgKzcyMDMsNyBAQCBzdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0a3N3YXBkX2FnZV9ub2RlKHBnZGF0LCBcXHUwMDI2c2MpO1xcbiBcXG4tXFx0XFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXFxuIFxcdFxcdHNjLm5yX3NjYW5uZWQgPSAwO1xcbi1cXHRcXHRucl9zb2Z0X3NjYW5uZWQgPSAwO1xcbi1cXHRcXHRucl9zb2Z0X3JlY2xhaW1lZCA9IG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdkYXQsIHNjLm9yZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzYy5nZnBfbWFzaywgXFx1MDAyNm5yX3NvZnRfc2Nhbm5lZCk7XFxuLVxcdFxcdHNjLm5yX3JlY2xhaW1lZCArPSBucl9zb2Z0X3JlY2xhaW1lZDtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIHJhaXNlIHRoZSBzY2FubmluZyBwcmlvcml0eSBpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0MjowNS45MjAxNTkwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDgyODEzNjU2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZFwiLFxuICAgIFwibWVtY2cxX3VuY2hhcmdlX2JhdGNoXCIsXG4gICAgXCJtZW1jZzFfY29tbWl0X2NoYXJnZVwiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiLFxuICAgIFwibHJ1X2dlbl9yb3RhdGVfbWVtY2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YTBkYWNkZDk1NmRlZjc0ZWUwMDYwNTFlZDg2OTJkOTVkNTliYmMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNDo0MjowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGRhNjI1ZDJlZGIzYmEuLmM3OTk5MjY0MzU1NjAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC05NSwyMCArOTUsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XG4gXHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzXHRcdFx0KmxydXZlY19zdGF0cztcbiBcdHN0cnVjdCBzaHJpbmtlcl9pbmZvIF9fcmN1XHQqc2hyaW5rZXJfaW5mbztcbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4tXHQvKlxuLVx0ICogTWVtY2ctdjEgb25seSBzdHVmZiBpbiBtaWRkbGUgYXMgYnVmZmVyIGJldHdlZW4gcmVhZCBtb3N0bHkgZmllbGRzXG4tXHQgKiBhbmQgdXBkYXRlIG9mdGVuIGZpZWxkcyB0byBhdm9pZCBmYWxzZSBzaGFyaW5nLiBJZiB2MSBzdHVmZiBpc1xuLVx0ICogbm90IHByZXNlbnQsIGFuIGV4cGxpY2l0IHBhZGRpbmcgaXMgbmVlZGVkLlxuLVx0ICovXG4tXG4tXHRzdHJ1Y3QgcmJfbm9kZVx0XHR0cmVlX25vZGU7XHQvKiBSQiB0cmVlIG5vZGUgKi9cbi1cdHVuc2lnbmVkIGxvbmdcdFx0dXNhZ2VfaW5fZXhjZXNzOy8qIFNldCB0byB0aGUgdmFsdWUgYnkgd2hpY2ggKi9cbi1cdFx0XHRcdFx0XHQvKiB0aGUgc29mdCBsaW1pdCBpcyBleGNlZWRlZCovXG4tXHRib29sXHRcdFx0b25fdHJlZTtcbi0jZWxzZVxuIFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDFfKTtcbi0jZW5kaWZcbiBcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG5AQCAtMjkzLDggKzI4MCw2IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHtcbiBcbiBcdHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSBfX3BlcmNwdSAqZXZlbnRzX3BlcmNwdTtcbiBcbi1cdHVuc2lnbmVkIGxvbmcgc29mdF9saW1pdDtcbi1cbiBcdC8qIHByb3RlY3RlZCBieSBtZW1jZ19vb21fbG9jayAqL1xuIFx0Ym9vbCBvb21fbG9jaztcbiBcdGludCB1bmRlcl9vb207XG5AQCAtMTkyNCwxMCArMTkwOSw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3pzd2FwX3dyaXRlYmFja19lbmFibGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAvKiBDZ3JvdXAgdjEtcmVsYXRlZCBkZWNsYXJhdGlvbnMgKi9cbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4tdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi1cdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpO1xuLVxuIGJvb2wgbWVtX2Nncm91cF9vb21fc3luY2hyb25pemUoYm9vbCB3YWl0KTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuQEAgLTE5NDgsMTQgKzE5MjksNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbiB9XG4gXG4gI2Vsc2UgLyogQ09ORklHX01FTUNHX1YxICovXG4tc3RhdGljIGlubGluZVxuLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tXHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICp0b3RhbF9zY2FubmVkKVxuLXtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgdGFza19pbl9tZW1jZ19vb20oc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggNjdjODRhOGE3MjU4My4uODRlMjM3ZjJjMTdkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC02MzgsMzUgKzYzOCwzMiBAQCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHtcbiAgKiBGb3IgZWFjaCBub2RlLCBtZW1jZ3MgYXJlIGRpdmlkZWQgaW50byB0d28gZ2VuZXJhdGlvbnM6IHRoZSBvbGQgYW5kIHRoZVxuICAqIHlvdW5nLiBGb3IgZWFjaCBnZW5lcmF0aW9uLCBtZW1jZ3MgYXJlIHJhbmRvbWx5IHNoYXJkZWQgaW50byBtdWx0aXBsZSBiaW5zXG4gICogdG8gaW1wcm92ZSBzY2FsYWJpbGl0eS4gRm9yIGVhY2ggYmluLCB0aGUgaGxpc3RfbnVsbHMgaXMgdmlydHVhbGx5IGRpdmlkZWRcbi0gKiBpbnRvIHRocmVlIHNlZ21lbnRzOiB0aGUgaGVhZCwgdGhlIHRhaWwgYW5kIHRoZSBkZWZhdWx0LlxuKyAqIGludG8gdHdvIHNlZ21lbnRzOiB0aGUgdGFpbCBhbmQgdGhlIGRlZmF1bHQuXG4gICpcbiAgKiBBbiBvbmxpbmluZyBtZW1jZyBpcyBhZGRlZCB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLlxuICAqIFRoZSBldmljdGlvbiBzdGFydHMgYXQgdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGQgZ2VuZXJhdGlvbi4gVGhlXG4gICogcGVyLW5vZGUgbWVtY2cgZ2VuZXJhdGlvbiBjb3VudGVyLCB3aG9zZSByZW1pbmRlciAobW9kIE1FTUNHX05SX0dFTlMpIGluZGV4ZXNcbiAgKiB0aGUgb2xkIGdlbmVyYXRpb24sIGlzIGluY3JlbWVudGVkIHdoZW4gYWxsIGl0cyBiaW5zIGJlY29tZSBlbXB0eS5cbiAgKlxuLSAqIFRoZXJlIGFyZSBmb3VyIG9wZXJhdGlvbnM6XG4tICogMS4gTUVNQ0dfTFJVX0hFQUQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIGl0c1xuLSAqICAgIGN1cnJlbnQgZ2VuZXJhdGlvbiAob2xkIG9yIHlvdW5nKSBhbmQgdXBkYXRlcyBpdHMgXCJzZWdcIiB0byBcImhlYWRcIjtcbi0gKiAyLiBNRU1DR19MUlVfVEFJTCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4rICogVGhlcmUgYXJlIHRocmVlIG9wZXJhdGlvbnM6XG4rICogMS4gTUVNQ0dfTFJVX1RBSUwsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIHRhaWwgb2YgYSByYW5kb20gYmluIGluIGl0c1xuICAqICAgIGN1cnJlbnQgZ2VuZXJhdGlvbiAob2xkIG9yIHlvdW5nKSBhbmQgdXBkYXRlcyBpdHMgXCJzZWdcIiB0byBcInRhaWxcIjtcbi0gKiAzLiBNRU1DR19MUlVfT0xELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkXG4rICogMi4gTUVNQ0dfTFJVX09MRCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZFxuICAqICAgIGdlbmVyYXRpb24sIHVwZGF0ZXMgaXRzIFwiZ2VuXCIgdG8gXCJvbGRcIiBhbmQgcmVzZXRzIGl0cyBcInNlZ1wiIHRvIFwiZGVmYXVsdFwiO1xuLSAqIDQuIE1FTUNHX0xSVV9ZT1VORywgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlXG4rICogMy4gTUVNQ0dfTFJVX1lPVU5HLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGVcbiAgKiAgICB5b3VuZyBnZW5lcmF0aW9uLCB1cGRhdGVzIGl0cyBcImdlblwiIHRvIFwieW91bmdcIiBhbmQgcmVzZXRzIGl0cyBcInNlZ1wiIHRvXG4gICogICAgXCJkZWZhdWx0XCIuXG4gICpcbiAgKiBUaGUgZXZlbnRzIHRoYXQgdHJpZ2dlciB0aGUgYWJvdmUgb3BlcmF0aW9ucyBhcmU6XG4tICogMS4gRXhjZWVkaW5nIHRoZSBzb2Z0IGxpbWl0LCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfSEVBRDtcbi0gKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbG93LCB3aGljaCB0cmlnZ2Vyc1xuKyAqIDEuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzXG4gICogICAgTUVNQ0dfTFJVX1RBSUw7XG4tICogMy4gVGhlIGZpcnN0IGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemVcbisgKiAyLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgb2ZmbGluZWQgb3IgYmVsb3cgcmVjbGFpbWFibGUgc2l6ZVxuICAqICAgIHRocmVzaG9sZCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1RBSUw7XG4tICogNC4gVGhlIHNlY29uZCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4rICogMy4gVGhlIHNlY29uZCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4gICogICAgdGhyZXNob2xkLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4tICogNS4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4tICogNi4gRmluaXNoaW5nIHRoZSBhZ2luZyBvbiB0aGUgZXZpY3Rpb24gcGF0aCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xuLSAqIDcuIE9mZmxpbmluZyBhIG1lbWNnLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfT0xELlxuKyAqIDQuIEF0dGVtcHRpbmcgdG8gcmVjbGFpbSBhIG1lbWNnIGJlbG93IG1pbiwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xuKyAqIDUuIEZpbmlzaGluZyB0aGUgYWdpbmcgb24gdGhlIGV2aWN0aW9uIHBhdGgsIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcbisgKiA2LiBPZmZsaW5pbmcgYSBtZW1jZywgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX09MRC5cbiAgKlxuICAqIE5vdGVzOlxuICAqIDEuIE1lbWNnIExSVSBvbmx5IGFwcGxpZXMgdG8gZ2xvYmFsIHJlY2xhaW0sIGFuZCB0aGUgcm91bmQtcm9iaW4gaW5jcmVtZW50aW5nXG5AQCAtNjk5LDcgKzY5Niw2IEBAIHZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gdm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gdm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi12b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG4gdm9pZCBtYXhfbHJ1X2dlbl9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuIGJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpO1xuIHZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuQEAgLTc0MCwxMCArNzM2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLXtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbiB7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcbmluZGV4IGI0YmY3YjhkZWYxZjUuLjhhODcyOTkwYjRiZWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhcbkBAIC0yMTQsMTMgKzIxNCw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW5fdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19yZWNsYWltX2JlXG4gXG4gXHRUUF9BUkdTKGdmcF9mbGFncywgb3JkZXIsIG1lbWNnKVxuICk7XG4tXG4tREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2JlZ2luLFxuLVxuLVx0VFBfUFJPVE8oZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyksXG4tXG4tXHRUUF9BUkdTKGdmcF9mbGFncywgb3JkZXIsIG1lbWNnKVxuLSk7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIERFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSxcbkBAIC0yNjAsMTMgKzI1Myw2IEBAIERFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9lbmQsXG4gXG4gXHRUUF9BUkdTKG5yX3JlY2xhaW1lZCwgbWVtY2cpXG4gKTtcbi1cbi1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZCxcbi1cbi1cdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpLFxuLVxuLVx0VFBfQVJHUyhucl9yZWNsYWltZWQsIG1lbWNnKVxuLSk7XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuIFxuIFRSQUNFX0VWRU5UKG1tX3Nocmlua19zbGFiX3N0YXJ0LFxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCA1Y2MyMjBkYjkwNzY2Li5lMTZmMTI1MGIyNWM4IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTc4LDEwICs3OCw2IEBAIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCAgIGdmcF90IGdmcF9tYXNrLFxuIFx0XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zLFxuIFx0XHRcdFx0XHQgICBpbnQgKnN3YXBwaW5lc3MpO1xuLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHQgICAgIGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi1cdFx0XHRcdCAgICAgcGdfZGF0YV90ICpwZ2RhdCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZCk7XG4gXG4gI2lmZGVmIENPTkZJR19OVU1BXG4gZXh0ZXJuIGludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuY1xuaW5kZXggMDVlZjU1Y2FlNGRjNi4uYmYyYzdkNTNiMDFiMSAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuY1xuKysrIGIvbW0vbWVtY29udHJvbC12MS5jXG5AQCAtMTcsMzAgKzE3LDYgQEBcbiAjaW5jbHVkZSBcInN3YXBfdGFibGUuaFwiXG4gI2luY2x1ZGUgXCJtZW1jb250cm9sLXYxLmhcIlxuIFxuLS8qXG4tICogQ2dyb3VwcyBhYm92ZSB0aGVpciBsaW1pdHMgYXJlIG1haW50YWluZWQgaW4gYSBSQi1UcmVlLCBpbmRlcGVuZGVudCBvZlxuLSAqIHRoZWlyIGhpZXJhcmNoeSByZXByZXNlbnRhdGlvblxuLSAqL1xuLVxuLXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUge1xuLVx0c3RydWN0IHJiX3Jvb3QgcmJfcm9vdDtcbi1cdHN0cnVjdCByYl9ub2RlICpyYl9yaWdodG1vc3Q7XG4tXHRzcGlubG9ja190IGxvY2s7XG4tfTtcbi1cbi1zdHJ1Y3QgbWVtX2Nncm91cF90cmVlIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKnJiX3RyZWVfcGVyX25vZGVbTUFYX05VTU5PREVTXTtcbi19O1xuLVxuLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlIHNvZnRfbGltaXRfdHJlZSBfX3JlYWRfbW9zdGx5O1xuLVxuLS8qXG4tICogTWF4aW11bSBsb29wcyBpbiBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbSgpLCB1c2VkIGZvciBzb2Z0XG4tICogbGltaXQgcmVjbGFpbSB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLCBpZiB0aGV5IGV2ZXIgb2NjdXIuXG4tICovXG4tI2RlZmluZVx0TUVNX0NHUk9VUF9NQVhfUkVDTEFJTV9MT09QU1x0XHQxMDBcbi0jZGVmaW5lXHRNRU1fQ0dST1VQX01BWF9TT0ZUX0xJTUlUX1JFQ0xBSU1fTE9PUFNcdDJcbi1cbiAvKiBmb3IgT09NICovXG4gc3RydWN0IG1lbV9jZ3JvdXBfZXZlbnRmZF9saXN0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbkBAIC0xMDYsMzAxICs4Miw2IEBAIHN0YXRpYyBzdHJ1Y3QgbG9ja2RlcF9tYXAgbWVtY2dfb29tX2xvY2tfZGVwX21hcCA9IHtcbiBcbiBERUZJTkVfU1BJTkxPQ0sobWVtY2dfb29tX2xvY2spO1xuIFxuLXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LFxuLVx0XHRcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eixcbi1cdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbmV3X3VzYWdlX2luX2V4Y2Vzcylcbi17XG4tXHRzdHJ1Y3QgcmJfbm9kZSAqKnAgPSBcdTAwMjZtY3R6LVx1MDAzZXJiX3Jvb3QucmJfbm9kZTtcbi1cdHN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16X25vZGU7XG4tXHRib29sIHJpZ2h0bW9zdCA9IHRydWU7XG4tXG4tXHRpZiAobXotXHUwMDNlb25fdHJlZSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0bXotXHUwMDNldXNhZ2VfaW5fZXhjZXNzID0gbmV3X3VzYWdlX2luX2V4Y2Vzcztcbi1cdGlmICghbXotXHUwMDNldXNhZ2VfaW5fZXhjZXNzKVxuLVx0XHRyZXR1cm47XG4tXHR3aGlsZSAoKnApIHtcbi1cdFx0cGFyZW50ID0gKnA7XG4tXHRcdG16X25vZGUgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLFxuLVx0XHRcdFx0XHR0cmVlX25vZGUpO1xuLVx0XHRpZiAobXotXHUwMDNldXNhZ2VfaW5fZXhjZXNzIFx1MDAzYyBtel9ub2RlLVx1MDAzZXVzYWdlX2luX2V4Y2Vzcykge1xuLVx0XHRcdHAgPSBcdTAwMjYoKnApLVx1MDAzZXJiX2xlZnQ7XG4tXHRcdFx0cmlnaHRtb3N0ID0gZmFsc2U7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cCA9IFx1MDAyNigqcCktXHUwMDNlcmJfcmlnaHQ7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdGlmIChyaWdodG1vc3QpXG4tXHRcdG1jdHotXHUwMDNlcmJfcmlnaHRtb3N0ID0gXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlO1xuLVxuLVx0cmJfbGlua19ub2RlKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSwgcGFyZW50LCBwKTtcbi1cdHJiX2luc2VydF9jb2xvcihcdTAwMjZtei1cdTAwM2V0cmVlX25vZGUsIFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdCk7XG4tXHRtei1cdTAwM2Vvbl90cmVlID0gdHJ1ZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6KVxuLXtcbi1cdGlmICghbXotXHUwMDNlb25fdHJlZSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0aWYgKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSA9PSBtY3R6LVx1MDAzZXJiX3JpZ2h0bW9zdClcbi1cdFx0bWN0ei1cdTAwM2VyYl9yaWdodG1vc3QgPSByYl9wcmV2KFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSk7XG4tXG4tXHRyYl9lcmFzZShcdTAwMjZtei1cdTAwM2V0cmVlX25vZGUsIFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdCk7XG4tXHRtei1cdTAwM2Vvbl90cmVlID0gZmFsc2U7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteixcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZtY3R6LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQobXosIG1jdHopO1xuLVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtY3R6LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi19XG4tXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc29mdF9saW1pdF9leGNlc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBwYWdlX2NvdW50ZXJfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnkpO1xuLVx0dW5zaWduZWQgbG9uZyBzb2Z0X2xpbWl0ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXNvZnRfbGltaXQpO1xuLVx0dW5zaWduZWQgbG9uZyBleGNlc3MgPSAwO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSBzb2Z0X2xpbWl0KVxuLVx0XHRleGNlc3MgPSBucl9wYWdlcyAtIHNvZnRfbGltaXQ7XG4tXG4tXHRyZXR1cm4gZXhjZXNzO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBtZW1jZzFfdXBkYXRlX3RyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgZXhjZXNzO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejtcbi1cbi1cdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xuLVx0XHRpZiAoc29mdF9saW1pdF9leGNlc3MobWVtY2cpKVxuLVx0XHRcdGxydV9nZW5fc29mdF9yZWNsYWltKG1lbWNnLCBuaWQpO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRtY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbmlkXTtcbi1cdGlmICghbWN0eilcbi1cdFx0cmV0dXJuO1xuLVx0Lypcbi1cdCAqIE5lY2Vzc2FyeSB0byB1cGRhdGUgYWxsIGFuY2VzdG9ycyB3aGVuIGhpZXJhcmNoeSBpcyB1c2VkLlxuLVx0ICogYmVjYXVzZSB0aGVpciBldmVudCBjb3VudGVyIGlzIG5vdCB0b3VjaGVkLlxuLVx0ICovXG4tXHRmb3IgKDsgbWVtY2c7IG1lbWNnID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpKSB7XG4tXHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXTtcbi1cdFx0ZXhjZXNzID0gc29mdF9saW1pdF9leGNlc3MobWVtY2cpO1xuLVx0XHQvKlxuLVx0XHQgKiBXZSBoYXZlIHRvIHVwZGF0ZSB0aGUgdHJlZSBpZiBteiBpcyBvbiBSQi10cmVlIG9yXG4tXHRcdCAqIG1lbSBpcyBvdmVyIGl0cyBzb2Z0bGltaXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZXhjZXNzIHx8IG16LVx1MDAzZW9uX3RyZWUpIHtcbi1cdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVxuLVx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRcdC8qIGlmIG9uLXRyZWUsIHJlbW92ZSBpdCAqL1xuLVx0XHRcdGlmIChtei1cdTAwM2Vvbl90cmVlKVxuLVx0XHRcdFx0X19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBJbnNlcnQgYWdhaW4uIG16LVx1MDAzZXVzYWdlX2luX2V4Y2VzcyB3aWxsIGJlIHVwZGF0ZWQuXG4tXHRcdFx0ICogSWYgZXhjZXNzIGlzIDAsIG5vIHRyZWUgb3BzLlxuLVx0XHRcdCAqL1xuLVx0XHRcdF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXosIG1jdHosIGV4Y2Vzcyk7XG4tXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtY3R6LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0fVxuLVx0fVxuLX1cbi1cbi12b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdGludCBuaWQ7XG4tXG4tXHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuLVx0XHRteiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF07XG4tXHRcdG1jdHogPSBzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtuaWRdO1xuLVx0XHRpZiAobWN0eilcbi1cdFx0XHRtZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XG4tXHR9XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqXG4tX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVxuLXJldHJ5OlxuLVx0bXogPSBOVUxMO1xuLVx0aWYgKCFtY3R6LVx1MDAzZXJiX3JpZ2h0bW9zdClcbi1cdFx0Z290byBkb25lO1x0XHQvKiBOb3RoaW5nIHRvIHJlY2xhaW0gZnJvbSAqL1xuLVxuLVx0bXogPSByYl9lbnRyeShtY3R6LVx1MDAzZXJiX3JpZ2h0bW9zdCxcbi1cdFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIHRyZWVfbm9kZSk7XG4tXHQvKlxuLVx0ICogUmVtb3ZlIHRoZSBub2RlIG5vdyBidXQgc29tZW9uZSBlbHNlIGNhbiBhZGQgaXQgYmFjayxcbi1cdCAqIHdlIHdpbGwgdG8gYWRkIGl0IGJhY2sgYXQgdGhlIGVuZCBvZiByZWNsYWltIHRvIGl0cyBjb3JyZWN0XG4tXHQgKiBwb3NpdGlvbiBpbiB0aGUgdHJlZS5cbi1cdCAqL1xuLVx0X19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XG4tXHRpZiAoIXNvZnRfbGltaXRfZXhjZXNzKG16LVx1MDAzZW1lbWNnKSB8fFxuLVx0ICAgICFjc3NfdHJ5Z2V0KFx1MDAyNm16LVx1MDAzZW1lbWNnLVx1MDAzZWNzcykpXG4tXHRcdGdvdG8gcmV0cnk7XG4tZG9uZTpcbi1cdHJldHVybiBtejtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpcbi1tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVxuLVx0c3Bpbl9sb2NrX2lycShcdTAwMjZtY3R6LVx1MDAzZWxvY2spO1xuLVx0bXogPSBfX21lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUobWN0eik7XG4tXHRzcGluX3VubG9ja19pcnEoXHUwMDI2bWN0ei1cdTAwM2Vsb2NrKTtcbi1cdHJldHVybiBtejtcbi19XG4tXG4tc3RhdGljIGludCBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyxcbi1cdFx0XHRcdCAgIHBnX2RhdGFfdCAqcGdkYXQsXG4tXHRcdFx0XHQgICBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpXG4te1xuLVx0c3RydWN0IG1lbV9jZ3JvdXAgKnZpY3RpbSA9IE5VTEw7XG4tXHRpbnQgdG90YWwgPSAwO1xuLVx0aW50IGxvb3AgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBleGNlc3M7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2Nvb2tpZSByZWNsYWltID0ge1xuLVx0XHQucGdkYXQgPSBwZ2RhdCxcbi1cdH07XG4tXG4tXHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhyb290X21lbWNnKTtcbi1cbi1cdHdoaWxlICgxKSB7XG4tXHRcdHZpY3RpbSA9IG1lbV9jZ3JvdXBfaXRlcihyb290X21lbWNnLCB2aWN0aW0sIFx1MDAyNnJlY2xhaW0pO1xuLVx0XHRpZiAoIXZpY3RpbSkge1xuLVx0XHRcdGxvb3ArKztcbi1cdFx0XHRpZiAobG9vcCBcdTAwM2U9IDIpIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBJZiB3ZSBoYXZlIG5vdCBiZWVuIGFibGUgdG8gcmVjbGFpbVxuLVx0XHRcdFx0ICogYW55dGhpbmcsIGl0IG1pZ2h0IGJlY2F1c2UgdGhlcmUgYXJlXG4tXHRcdFx0XHQgKiBubyByZWNsYWltYWJsZSBwYWdlcyB1bmRlciB0aGlzIGhpZXJhcmNoeVxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRpZiAoIXRvdGFsKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBXZSB3YW50IHRvIGRvIG1vcmUgdGFyZ2V0ZWQgcmVjbGFpbS5cbi1cdFx0XHRcdCAqIGV4Y2VzcyBcdTAwM2VcdTAwM2UgMiBpcyBub3QgdG8gZXhjZXNzaXZlIHNvIGFzIHRvXG4tXHRcdFx0XHQgKiByZWNsYWltIHRvbyBtdWNoLCBub3IgdG9vIGxlc3MgdGhhdCB3ZSBrZWVwXG4tXHRcdFx0XHQgKiBjb21pbmcgYmFjayB0byByZWNsYWltIGZyb20gdGhpcyBjZ3JvdXBcbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0aWYgKHRvdGFsIFx1MDAzZT0gKGV4Y2VzcyBcdTAwM2VcdTAwM2UgMikgfHxcbi1cdFx0XHRcdFx0KGxvb3AgXHUwMDNlIE1FTV9DR1JPVVBfTUFYX1JFQ0xBSU1fTE9PUFMpKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cdFx0dG90YWwgKz0gbWVtX2Nncm91cF9zaHJpbmtfbm9kZSh2aWN0aW0sIGdmcF9tYXNrLCBmYWxzZSxcbi1cdFx0XHRcdFx0cGdkYXQsIFx1MDAyNm5yX3NjYW5uZWQpO1xuLVx0XHQqdG90YWxfc2Nhbm5lZCArPSBucl9zY2FubmVkO1xuLVx0XHRpZiAoIXNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpKVxuLVx0XHRcdGJyZWFrO1xuLVx0fVxuLVx0bWVtX2Nncm91cF9pdGVyX2JyZWFrKHJvb3RfbWVtY2csIHZpY3RpbSk7XG4tXHRyZXR1cm4gdG90YWw7XG4tfVxuLVxuLXVuc2lnbmVkIGxvbmcgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tXHRcdFx0XHRcdCAgICBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSAwO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LCAqbmV4dF9teiA9IE5VTEw7XG4tXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcbi1cdGludCBsb29wID0gMDtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHo7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2Vzcztcbi1cbi1cdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRpZiAob3JkZXIgXHUwMDNlIDApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuLVxuLVx0Lypcbi1cdCAqIERvIG5vdCBldmVuIGJvdGhlciB0byBjaGVjayB0aGUgbGFyZ2VzdCBub2RlIGlmIHRoZSByb290XG4tXHQgKiBpcyBlbXB0eS4gRG8gaXQgbG9ja2xlc3MgdG8gcHJldmVudCBsb2NrIGJvdW5jaW5nLiBSYWNlc1xuLVx0ICogYXJlIGFjY2VwdGFibGUgYXMgc29mdCBsaW1pdCBpcyBiZXN0IGVmZm9ydCBhbnl3YXkuXG4tXHQgKi9cbi1cdGlmICghbWN0eiB8fCBSQl9FTVBUWV9ST09UKFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdCkpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0Lypcbi1cdCAqIFRoaXMgbG9vcCBjYW4gcnVuIGEgd2hpbGUsIHNwZWNpYWxseSBpZiBtZW1fY2dyb3VwJ3MgY29udGludW91c2x5XG4tXHQgKiBrZWVwIGV4Y2VlZGluZyB0aGVpciBzb2Z0IGxpbWl0IGFuZCBwdXR0aW5nIHRoZSBzeXN0ZW0gdW5kZXJcbi1cdCAqIHByZXNzdXJlXG4tXHQgKi9cbi1cdGRvIHtcbi1cdFx0aWYgKG5leHRfbXopXG4tXHRcdFx0bXogPSBuZXh0X216O1xuLVx0XHRlbHNlXG4tXHRcdFx0bXogPSBtZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopO1xuLVx0XHRpZiAoIW16KVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHRyZWNsYWltZWQgPSBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbShtei1cdTAwM2VtZW1jZywgcGdkYXQsXG4tXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCB0b3RhbF9zY2FubmVkKTtcbi1cdFx0bnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZtY3R6LVx1MDAzZWxvY2spO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBJZiB3ZSBmYWlsZWQgdG8gcmVjbGFpbSBhbnl0aGluZyBmcm9tIHRoaXMgbWVtb3J5IGNncm91cFxuLVx0XHQgKiBpdCBpcyB0aW1lIHRvIG1vdmUgb24gdG8gdGhlIG5leHQgY2dyb3VwXG4tXHRcdCAqL1xuLVx0XHRuZXh0X216ID0gTlVMTDtcbi1cdFx0aWYgKCFyZWNsYWltZWQpXG4tXHRcdFx0bmV4dF9teiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTtcbi1cbi1cdFx0ZXhjZXNzID0gc29mdF9saW1pdF9leGNlc3MobXotXHUwMDNlbWVtY2cpO1xuLVx0XHQvKlxuLVx0XHQgKiBPbmUgc2Nob29sIG9mIHRob3VnaHQgc2F5cyB0aGF0IHdlIHNob3VsZCBub3QgYWRkXG4tXHRcdCAqIGJhY2sgdGhlIG5vZGUgdG8gdGhlIHRyZWUgaWYgcmVjbGFpbSByZXR1cm5zIDAuXG4tXHRcdCAqIEJ1dCBvdXIgcmVjbGFpbSBjb3VsZCByZXR1cm4gMCwgc2ltcGx5IGJlY2F1c2UgZHVlXG4tXHRcdCAqIHRvIHByaW9yaXR5IHdlIGFyZSBleHBvc2luZyBhIHNtYWxsZXIgc3Vic2V0IG9mXG4tXHRcdCAqIG1lbW9yeSB0byByZWNsYWltIGZyb20uIENvbnNpZGVyIHRoaXMgYXMgYSBsb25nZXJcbi1cdFx0ICogdGVybSBUT0RPLlxuLVx0XHQgKi9cbi1cdFx0LyogSWYgZXhjZXNzID09IDAsIG5vIHRyZWUgb3BzICovXG4tXHRcdF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXosIG1jdHosIGV4Y2Vzcyk7XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZtY3R6LVx1MDAzZWxvY2spO1xuLVx0XHRjc3NfcHV0KFx1MDAyNm16LVx1MDAzZW1lbWNnLVx1MDAzZWNzcyk7XG4tXHRcdGxvb3ArKztcbi1cdFx0Lypcbi1cdFx0ICogQ291bGQgbm90IHJlY2xhaW0gYW55dGhpbmcgYW5kIHRoZXJlIGFyZSBubyBtb3JlXG4tXHRcdCAqIG1lbSBjZ3JvdXBzIHRvIHRyeSBvciB3ZSBzZWVtIHRvIGJlIGxvb3Bpbmcgd2l0aG91dFxuLVx0XHQgKiByZWNsYWltaW5nIGFueXRoaW5nLlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFucl9yZWNsYWltZWQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KG5leHRfbXogPT0gTlVMTCB8fFxuLVx0XHRcdGxvb3AgXHUwMDNlIE1FTV9DR1JPVVBfTUFYX1NPRlRfTElNSVRfUkVDTEFJTV9MT09QUykpXG4tXHRcdFx0YnJlYWs7XG4tXHR9IHdoaWxlICghbnJfcmVjbGFpbWVkKTtcbi1cdGlmIChuZXh0X216KVxuLVx0XHRjc3NfcHV0KFx1MDAyNm5leHRfbXotXHUwMDNlbWVtY2ctXHUwMDNlY3NzKTtcbi1cdHJldHVybiBucl9yZWNsYWltZWQ7XG4tfVxuLVxuIHN0YXRpYyB1NjQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXG4gXHRcdFx0XHRzdHJ1Y3QgY2Z0eXBlICpjZnQpXG4ge1xuQEAgLTUxMSw3ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3RocmVzaG9sZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHR9XG4gfVxuIFxuLS8qIENncm91cDE6IHRocmVzaG9sZCBub3RpZmljYXRpb25zIFx1MDAyNiBzb2Z0bGltaXQgdHJlZSB1cGRhdGVzICovXG4rLyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgKi9cbiBcbiAvKlxuICAqIFBlciBtZW1jZyBldmVudCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IHBhZ2Vpbi9wYWdlb3V0LiBXaXRoIFRIUCxcbkBAIC01MTksMTUgKzIwMCw5IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiAgKiB0byB0cmlnZ2VyIHNvbWUgcGVyaW9kaWMgZXZlbnRzLiBUaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgYmV0dGVyXG4gICogdGhhbiB1c2luZyBqaWZmaWVzIGV0Yy4gdG8gaGFuZGxlIHBlcmlvZGljIG1lbWNnIGV2ZW50LlxuICAqL1xuLWVudW0gbWVtX2Nncm91cF9ldmVudHNfdGFyZ2V0IHtcbi1cdE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCxcbi1cdE1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVCxcbi1cdE1FTV9DR1JPVVBfTlRBUkdFVFMsXG4tfTtcbi1cbiBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHUge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlX2V2ZW50cztcbi1cdHVuc2lnbmVkIGxvbmcgdGFyZ2V0c1tNRU1fQ0dST1VQX05UQVJHRVRTXTtcbitcdHVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX3RhcmdldDtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcylcbkBAIC01NDQsNTMgKzIxOSwyOSBAQCBzdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpXG4gfVxuIFxuICNkZWZpbmUgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUIDEyOFxuLSNkZWZpbmUgU09GVExJTUlUX0VWRU5UU19UQVJHRVQgMTAyNFxuIFxuLXN0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0ZW51bSBtZW1fY2dyb3VwX2V2ZW50c190YXJnZXQgdGFyZ2V0KVxuK3N0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgdmFsLCBuZXh0O1xuIFxuIFx0dmFsID0gX190aGlzX2NwdV9yZWFkKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNlbnJfcGFnZV9ldmVudHMpO1xuLVx0bmV4dCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZXRhcmdldHNbdGFyZ2V0XSk7XG4rXHRuZXh0ID0gX190aGlzX2NwdV9yZWFkKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNldGhyZXNob2xkX3RhcmdldCk7XG4gXHQvKiBmcm9tIHRpbWVfYWZ0ZXIoKSBpbiBqaWZmaWVzLmggKi9cbiBcdGlmICgobG9uZykobmV4dCAtIHZhbCkgXHUwMDNjIDApIHtcbi1cdFx0c3dpdGNoICh0YXJnZXQpIHtcbi1cdFx0Y2FzZSBNRU1fQ0dST1VQX1RBUkdFVF9USFJFU0g6XG4tXHRcdFx0bmV4dCA9IHZhbCArIFRIUkVTSE9MRFNfRVZFTlRTX1RBUkdFVDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQ6XG4tXHRcdFx0bmV4dCA9IHZhbCArIFNPRlRMSU1JVF9FVkVOVFNfVEFSR0VUO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdF9fdGhpc19jcHVfd3JpdGUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0YXJnZXRzW3RhcmdldF0sIG5leHQpO1xuK1x0XHRfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNldGhyZXNob2xkX3RhcmdldCxcbitcdFx0XHRcdCB2YWwgKyBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQpO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdH1cbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tLypcbi0gKiBDaGVjayBldmVudHMgaW4gb3JkZXIuXG4tICpcbi0gKi9cbi1zdGF0aWMgdm9pZCBtZW1jZzFfY2hlY2tfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbitzdGF0aWMgdm9pZCBtZW1jZzFfY2hlY2tfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdC8qIHRocmVzaG9sZCBldmVudCBpcyB0cmlnZ2VyZWQgaW4gZmluZXIgZ3JhaW4gdGhhbiBzb2Z0IGxpbWl0ICovXG4tXHRpZiAodW5saWtlbHkobWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZyxcbi1cdFx0XHRcdFx0XHRNRU1fQ0dST1VQX1RBUkdFVF9USFJFU0gpKSkge1xuLVx0XHRib29sIGRvX3NvZnRsaW1pdDtcbi1cbi1cdFx0ZG9fc29mdGxpbWl0ID0gbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZyxcbi1cdFx0XHRcdFx0XHRNRU1fQ0dST1VQX1RBUkdFVF9TT0ZUTElNSVQpO1xuK1x0aWYgKHVubGlrZWx5KG1lbWNnMV9ldmVudF9yYXRlbGltaXQobWVtY2cpKSlcbiBcdFx0bWVtX2Nncm91cF90aHJlc2hvbGQobWVtY2cpO1xuLVx0XHRpZiAodW5saWtlbHkoZG9fc29mdGxpbWl0KSlcbi1cdFx0XHRtZW1jZzFfdXBkYXRlX3RyZWUobWVtY2csIG5pZCk7XG4tXHR9XG4gfVxuIFxuIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuQEAgLTU5OSw3ICsyNTAsNyBAQCB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhtZW1jZywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcbi1cdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpO1xuK1x0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7XG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuIFxuQEAgLTY3Miw3ICszMjMsNyBAQCB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiBcdFZNX1dBUk5fT05fSVJRU19FTkFCTEVEKCk7XG4gXHRtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIC1mb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIFx0cHJlZW1wdF9lbmFibGVfbmVzdGVkKCk7XG4tXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBmb2xpb19uaWQoZm9saW8pKTtcbitcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2cpO1xuIFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRvYmpfY2dyb3VwX3B1dChvYmpjZyk7XG5AQCAtNzI2LDE0ICszNzcsMTQgQEAgdm9pZCBtZW1jZzFfc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gI2VuZGlmXG4gXG4gdm9pZCBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXG4tXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnksIGludCBuaWQpXG4rXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnkpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGNvdW50X21lbWNnX2V2ZW50cyhtZW1jZywgUEdQR09VVCwgcGdwZ291dCk7XG4gXHRfX3RoaXNfY3B1X2FkZChtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZW5yX3BhZ2VfZXZlbnRzLCBucl9tZW1vcnkpO1xuLVx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgbmlkKTtcbitcdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2cpO1xuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbkBAIC0yNTY2LDIyICsyMjE3LDMgQEAgdm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGZyZWVfcGVyY3B1KG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUpO1xuIH1cbi1cbi1zdGF0aWMgaW50IF9faW5pdCBtZW1jZzFfaW5pdCh2b2lkKVxuLXtcbi1cdGludCBub2RlO1xuLVxuLVx0Zm9yX2VhY2hfbm9kZShub2RlKSB7XG4tXHRcdHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKnJ0cG47XG4tXG4tXHRcdHJ0cG4gPSBremFsbG9jX25vZGUoc2l6ZW9mKCpydHBuKSwgR0ZQX0tFUk5FTCwgbm9kZSk7XG4tXG4tXHRcdHJ0cG4tXHUwMDNlcmJfcm9vdCA9IFJCX1JPT1Q7XG4tXHRcdHJ0cG4tXHUwMDNlcmJfcmlnaHRtb3N0ID0gTlVMTDtcbi1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cnRwbi1cdTAwM2Vsb2NrKTtcbi1cdFx0c29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbbm9kZV0gPSBydHBuO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLXN1YnN5c19pbml0Y2FsbChtZW1jZzFfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXG5pbmRleCAxZTM5NDI2OWM2MTNkLi5iOWEyMWYwZmQyYzNhIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5oXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmhcbkBAIC00MSwxMiArNDEsNiBAQCBib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi12b2lkIG1lbWNnMV9yZW1vdmVfZnJvbV90cmVlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0V1JJVEVfT05DRShtZW1jZy1cdTAwM2Vzb2Z0X2xpbWl0LCBQQUdFX0NPVU5URVJfTUFYKTtcbi19XG4gXG4gc3RydWN0IGNncm91cF90YXNrc2V0O1xuIHZvaWQgbWVtY2cxX2Nzc19vZmZsaW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5AQCAtNjUsNyArNTksNyBAQCB2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIFxuIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcbi1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSwgaW50IG5pZCk7XG4rXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnkpO1xuIFxuIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpO1xuIHZvaWQgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCk7XG5AQCAtOTgsOCArOTIsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHsgcmV0dXJuIHRydWU7XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9tZW1jZ19pbml0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbi1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3NvZnRfbGltaXRfcmVzZXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpXG5AQCAtMTE1LDcgKzEwNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBwZ3Bnb3V0LFxuLVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBucl9tZW1vcnksIGludCBuaWQpIHt9XG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSkge31cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpIHt9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCBiZmQwYTc0ZmFjOTIzLi4zMDYzNmI5ZDk2NzM5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00MjU3LDcgKzQyNTcsNiBAQCBtZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKG1lbWNnKTtcbiBcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xuLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xuICNpZmRlZiBDT05GSUdfWlNXQVBcbiBcdG1lbWNnLVx1MDAzZXpzd2FwX21heCA9IFBBR0VfQ09VTlRFUl9NQVg7XG4gXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXpzd2FwX3dyaXRlYmFjaywgdHJ1ZSk7XG5AQCAtNDQyOSw3ICs0NDI4LDYgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfZnJlZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFxuIFx0dm1wcmVzc3VyZV9jbGVhbnVwKFx1MDAyNm1lbWNnLVx1MDAzZXZtcHJlc3N1cmUpO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZtZW1jZy1cdTAwM2VoaWdoX3dvcmspO1xuLVx0bWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKG1lbWNnKTtcbiBcdGZyZWVfc2hyaW5rZXJfaW5mbyhtZW1jZyk7XG4gXHRtZW1fY2dyb3VwX2ZyZWUobWVtY2cpO1xuIH1cbkBAIC00NDY1LDcgKzQ0NjMsNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxuIFx0cGFnZV9jb3VudGVyX3NldF9taW4oXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCAwKTtcbiBcdHBhZ2VfY291bnRlcl9zZXRfbG93KFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgMCk7XG4gXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCBQQUdFX0NPVU5URVJfTUFYKTtcbi1cdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBQQUdFX0NPVU5URVJfTUFYKTtcbiBcdG1lbWNnX3diX2RvbWFpbl9zaXplX2NoYW5nZWQobWVtY2cpO1xuIH1cbkBAIC01MzMxLDcgKzUzMjgsNiBAQCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5O1xuIFx0dW5zaWduZWQgbG9uZyBwZ3Bnb3V0O1xuIFx0dW5zaWduZWQgbG9uZyBucl9rbWVtO1xuLVx0aW50IG5pZDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmNoYXJnZV9nYXRoZXJfY2xlYXIoc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG5AQCAtNTM1NCw3ICs1MzUwLDcgQEAgc3RhdGljIHZvaWQgdW5jaGFyZ2VfYmF0Y2goY29uc3Qgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG4gXHRcdG1lbWNnMV9vb21fcmVjb3ZlcihtZW1jZyk7XG4gXHR9XG4gXG4tXHRtZW1jZzFfdW5jaGFyZ2VfYmF0Y2gobWVtY2csIHVnLVx1MDAzZXBncGdvdXQsIHVnLVx1MDAzZW5yX21lbW9yeSwgdWctXHUwMDNlbmlkKTtcbitcdG1lbWNnMV91bmNoYXJnZV9iYXRjaChtZW1jZywgdWctXHUwMDNlcGdwZ291dCwgdWctXHUwMDNlbnJfbWVtb3J5KTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0LyogZHJvcCByZWZlcmVuY2UgZnJvbSB1bmNoYXJnZV9mb2xpbyAqL1xuQEAgLTUzODMsNyArNTM3OSw2IEBAIHN0YXRpYyB2b2lkIHVuY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIgKnVnKVxuIFx0XHRcdHVuY2hhcmdlX2dhdGhlcl9jbGVhcih1Zyk7XG4gXHRcdH1cbiBcdFx0dWctXHUwMDNlb2JqY2cgPSBvYmpjZztcbi1cdFx0dWctXHUwMDNlbmlkID0gZm9saW9fbmlkKGZvbGlvKTtcbiBcbiBcdFx0LyogcGFpcnMgd2l0aCBvYmpfY2dyb3VwX3B1dCBpbiB1bmNoYXJnZV9iYXRjaCAqL1xuIFx0XHRvYmpfY2dyb3VwX2dldChvYmpjZyk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmRkMTMyOTlhMDRhOS4uZGViMDg3YzU3MDA3ZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTQzNzMsNyArNDM3Myw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiAvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xuIGVudW0ge1xuIFx0TUVNQ0dfTFJVX05PUCxcbi1cdE1FTUNHX0xSVV9IRUFELFxuIFx0TUVNQ0dfTFJVX1RBSUwsXG4gXHRNRU1DR19MUlVfT0xELFxuIFx0TUVNQ0dfTFJVX1lPVU5HLFxuQEAgLTQzOTUsOSArNDM5NCw3IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuIFx0bmV3ID0gb2xkID0gbHJ1dmVjLVx1MDAzZWxydWdlbi5nZW47XG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xuLVx0aWYgKG9wID09IE1FTUNHX0xSVV9IRUFEKVxuLVx0XHRzZWcgPSBNRU1DR19MUlVfSEVBRDtcbi1cdGVsc2UgaWYgKG9wID09IE1FTUNHX0xSVV9UQUlMKVxuK1x0aWYgKG9wID09IE1FTUNHX0xSVV9UQUlMKVxuIFx0XHRzZWcgPSBNRU1DR19MUlVfVEFJTDtcbiBcdGVsc2UgaWYgKG9wID09IE1FTUNHX0xSVV9PTEQpXG4gXHRcdG5ldyA9IGdldF9tZW1jZ19nZW4ocGdkYXQtXHUwMDNlbWVtY2dfbHJ1LnNlcSk7XG5AQCAtNDQxMSw3ICs0NDA4LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4gXG4gXHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW4ubGlzdCk7XG4gXG4tXHRpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQgfHwgb3AgPT0gTUVNQ0dfTFJVX09MRClcbitcdGlmIChvcCA9PSBNRU1DR19MUlVfT0xEKVxuIFx0XHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0LCBcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pO1xuIFx0ZWxzZVxuIFx0XHRobGlzdF9udWxsc19hZGRfdGFpbF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0LCBcdTAwMjZwZ2RhdC1cdTAwM2VtZW1jZ19scnUuZmlmb1tuZXddW2Jpbl0pO1xuQEAgLTQ0ODksMTUgKzQ0ODYsNiBAQCB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHR9XG4gfVxuIFxuLXZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuLXtcbi1cdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG4tXG4tXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUVNQ0dfTlJfR0VOUyAqL1xuLVx0aWYgKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLnNlZykgIT0gTUVNQ0dfTFJVX0hFQUQpXG4tXHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xuLX1cbi1cbiBib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuIHtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG5AQCAtNjQzOSw4ICs2NDI3LDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHN0cnVjdCB6b25lcmVmICp6O1xuIFx0c3RydWN0IHpvbmUgKnpvbmU7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3NvZnRfcmVjbGFpbWVkO1xuLVx0dW5zaWduZWQgbG9uZyBucl9zb2Z0X3NjYW5uZWQ7XG4gXHRnZnBfdCBvcmlnX21hc2s7XG4gXHRwZ19kYXRhX3QgKmxhc3RfcGdkYXQgPSBOVUxMO1xuIFx0cGdfZGF0YV90ICpmaXJzdF9wZ2RhdCA9IE5VTEw7XG5AQCAtNjQ4MiwzNSArNjQ2OCwxNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRcdFx0XHRzYy1cdTAwM2Vjb21wYWN0aW9uX3JlYWR5ID0gdHJ1ZTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFNocmluayBlYWNoIG5vZGUgaW4gdGhlIHpvbmVsaXN0IG9uY2UuIElmIHRoZVxuLVx0XHRcdCAqIHpvbmVsaXN0IGlzIG9yZGVyZWQgYnkgem9uZSAobm90IHRoZSBkZWZhdWx0KSB0aGVuIGFcbi1cdFx0XHQgKiBub2RlIG1heSBiZSBzaHJ1bmsgbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZVxuLVx0XHRcdCAqIHRoZSB1c2VyIHByZWZlcnMgbG93ZXIgem9uZXMgYmVpbmcgcHJlc2VydmVkLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICh6b25lLVx1MDAzZXpvbmVfcGdkYXQgPT0gbGFzdF9wZ2RhdClcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVGhpcyBzdGVhbHMgcGFnZXMgZnJvbSBtZW1vcnkgY2dyb3VwcyBvdmVyIHNvZnRsaW1pdFxuLVx0XHRcdCAqIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVjbGFpbWVkIHBhZ2VzIGFuZFxuLVx0XHRcdCAqIHNjYW5uZWQgcGFnZXMuIFRoaXMgd29ya3MgZm9yIGdsb2JhbCBtZW1vcnkgcHJlc3N1cmVcbi1cdFx0XHQgKiBhbmQgYmFsYW5jaW5nLCBub3QgZm9yIGEgbWVtY2cncyBsaW1pdC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRucl9zb2Z0X3NjYW5uZWQgPSAwO1xuLVx0XHRcdG5yX3NvZnRfcmVjbGFpbWVkID0gbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbSh6b25lLVx1MDAzZXpvbmVfcGdkYXQsXG4tXHRcdFx0XHRcdFx0XHRcdCAgICAgIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnJfc29mdF9zY2FubmVkKTtcbi1cdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgKz0gbnJfc29mdF9yZWNsYWltZWQ7XG4tXHRcdFx0c2MtXHUwMDNlbnJfc2Nhbm5lZCArPSBucl9zb2Z0X3NjYW5uZWQ7XG4tXHRcdFx0LyogbmVlZCBzb21lIGNoZWNrIGZvciBhdm9pZCBtb3JlIHNocmlua196b25lKCkgKi9cbiBcdFx0fVxuIFxuIFx0XHRpZiAoIWZpcnN0X3BnZGF0KVxuIFx0XHRcdGZpcnN0X3BnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xuIFxuLVx0XHQvKiBTZWUgY29tbWVudCBhYm91dCBzYW1lIGNoZWNrIGZvciBnbG9iYWwgcmVjbGFpbSBhYm92ZSAqL1xuK1x0XHQvKlxuK1x0XHQgKiBTaHJpbmsgZWFjaCBub2RlIGluIHRoZSB6b25lbGlzdCBvbmNlLiBJZiB0aGUgem9uZWxpc3QgaXNcbitcdFx0ICogb3JkZXJlZCBieSB6b25lIChub3QgdGhlIGRlZmF1bHQpIHRoZW4gYSBub2RlIG1heSBiZSBzaHJ1bmtcbitcdFx0ICogbXVsdGlwbGUgdGltZXMgYnV0IGluIHRoYXQgY2FzZSB0aGUgdXNlciBwcmVmZXJzIGxvd2VyIHpvbmVzXG4rXHRcdCAqIGJlaW5nIHByZXNlcnZlZC5cbitcdFx0ICovXG4gXHRcdGlmICh6b25lLVx1MDAzZXpvbmVfcGdkYXQgPT0gbGFzdF9wZ2RhdClcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbkBAIC02ODI1LDQ3ICs2NzkzLDYgQEAgdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4gXG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIFxuLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cbi11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi1cdFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpXG4te1xuLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdHN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7XG4tXHRcdC5ucl90b19yZWNsYWltID0gU1dBUF9DTFVTVEVSX01BWCxcbi1cdFx0LnRhcmdldF9tZW1fY2dyb3VwID0gbWVtY2csXG4tXHRcdC5tYXlfd3JpdGVwYWdlID0gMSxcbi1cdFx0Lm1heV91bm1hcCA9IDEsXG4tXHRcdC5yZWNsYWltX2lkeCA9IE1BWF9OUl9aT05FUyAtIDEsXG4tXHRcdC5tYXlfc3dhcCA9ICFub3N3YXAsXG4tXHR9O1xuLVxuLVx0V0FSTl9PTl9PTkNFKCFjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUpO1xuLVxuLVx0c2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgXHUwMDI2IEdGUF9SRUNMQUlNX01BU0spIHxcbi1cdFx0XHQoR0ZQX0hJR0hVU0VSX01PVkFCTEUgXHUwMDI2IH5HRlBfUkVDTEFJTV9NQVNLKTtcbi1cbi1cdHRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbihzYy5nZnBfbWFzayxcbi1cdFx0XHRcdFx0XHQgICAgICBzYy5vcmRlcixcbi1cdFx0XHRcdFx0XHQgICAgICBtZW1jZyk7XG4tXG4tXHQvKlxuLVx0ICogTk9URTogQWx0aG91Z2ggd2UgY2FuIGdldCB0aGUgcHJpb3JpdHkgZmllbGQsIHVzaW5nIGl0XG4tXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbi1cdCAqIGlmIHdlIGRvbid0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxuLVx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCdzIGFzIHdlbGwuIFdlIGhhY2tcbi1cdCAqIHRoZSBwcmlvcml0eSBhbmQgbWFrZSBpdCB6ZXJvLlxuLVx0ICovXG4tXHRzaHJpbmtfbHJ1dmVjKGxydXZlYywgXHUwMDI2c2MpO1xuLVxuLVx0dHJhY2VfbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZChzYy5ucl9yZWNsYWltZWQsIG1lbWNnKTtcbi1cbi1cdCpucl9zY2FubmVkID0gc2MubnJfc2Nhbm5lZDtcbi1cbi1cdHJldHVybiBzYy5ucl9yZWNsYWltZWQ7XG4tfVxuLVxuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRcdFx0XHRcdCAgIGdmcF90IGdmcF9tYXNrLFxuQEAgLTcxNzEsOCArNzA5OCw2IEBAIGNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gc3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiB7XG4gXHRpbnQgaTtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3NvZnRfc2Nhbm5lZDtcbiBcdHVuc2lnbmVkIGxvbmcgcGZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBucl9ib29zdF9yZWNsYWltO1xuIFx0dW5zaWduZWQgbG9uZyB6b25lX2Jvb3N0c1tNQVhfTlJfWk9ORVNdID0geyAwLCB9O1xuQEAgLTcyNzgsMTIgKzcyMDMsNyBAQCBzdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuIFx0XHQgKi9cbiBcdFx0a3N3YXBkX2FnZV9ub2RlKHBnZGF0LCBcdTAwMjZzYyk7XG4gXG4tXHRcdC8qIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua19ub2RlLiAqL1xuIFx0XHRzYy5ucl9zY2FubmVkID0gMDtcbi1cdFx0bnJfc29mdF9zY2FubmVkID0gMDtcbi1cdFx0bnJfc29mdF9yZWNsYWltZWQgPSBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnZGF0LCBzYy5vcmRlcixcbi1cdFx0XHRcdFx0XHRcdCAgICAgIHNjLmdmcF9tYXNrLCBcdTAwMjZucl9zb2Z0X3NjYW5uZWQpO1xuLVx0XHRzYy5ucl9yZWNsYWltZWQgKz0gbnJfc29mdF9yZWNsYWltZWQ7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIHJhaXNlIHRoZSBzY2FubmluZyBwcmlvcml0eSBpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MDUuOTIwMTYxNzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTY5MjI5MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtY2cgdjEgU29mdCBMaW1pdCBSZW1vdmFsKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGVkIGF0IHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIG1lbWNnIChtZW1vcnkgY2dyb3VwKSBzdWJzeXN0ZW0uIEl0J3MgdG91Y2hpbmcgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgZmlsZXM6IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oYCwgYG1tL2ludGVybmFsLmhgLCBgbW0vbWVtY29udHJvbC12MS5jYCwgYG1tL21lbWNvbnRyb2wtdjEuaGAsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL3Ztc2Nhbi5jYC4gIEZyb20gYSBxdWljayBzY2FuLCBpdCBsb29rcyBsaWtlIHdlJ3JlIGRlbGV0aW5nLCBvciBhdCBsZWFzdCBzaWduaWZpY2FudGx5IHJld29ya2luZywgdGhlIG1lbWNnIHYxIHNvZnQgbGltaXQgcmVjbGFpbSBsb2dpYyBhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMuICBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGlzIGEgY29tcGxldGUgcmVtb3ZhbCBvciBhIHJlZmFjdG9yaW5nLlxuXG5MZXQgbWUgZXhhbWluZSB0aGUgZGlmZiBpbiBkZXRhaWwuXG5cbiogICBJbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBpdCdzIHJlbW92aW5nIGVsZW1lbnRzIHJlbGF0ZWQgdG8gdGhlIHNvZnQgbGltaXQgdHJlZSwgbGlrZSBgdHJlZV9ub2RlYCwgYHVzYWdlX2luX2V4Y2Vzc2AsIGBvbl90cmVlYCBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAgd2hlbiBgQ09ORklHX01FTUNHX1YxYCBpcyBlbmFibGVkLiBBbHNvLCB0aGUgYHNvZnRfbGltaXRgIGl0c2VsZiBpcyBnb25lIGZyb20gdGhlIGBzdHJ1Y3QgbWVtX2Nncm91cGAgZGVmaW5pdGlvbi4gQW5kIHRoZSBkZWNsYXJhdGlvbiBvZiBgbWVtY2cxX3NvZnRfbGltaXRfcmVjbGFpbWAgaXMgYWxzbyBnb25lLlxuKiAgIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBzZWVzIHNvbWUgY29tbWVudCB1cGRhdGVzIGFuZCByZW1vdmFsIG9mIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAuXG4qICAgVGhlIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgZ2V0cyBjbGVhbmVkIHVwIHRvbywgd2l0aCBgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2JlZ2luYCBhbmQgYG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9lbmRgIHRyYWNlIGV2ZW50cyBiZWluZyByZW1vdmVkIGZyb20gYGluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oYC5cbiogICBgbW0vaW50ZXJuYWwuaGAgcmVtb3ZlcyBgbWVtX2Nncm91cF9zaHJpbmtfbm9kZWAuXG4qICAgYG1tL21lbWNvbnRyb2wtdjEuY2AgaXMgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGNoYW5nZXMgbGllLiAgSXQncyByZW1vdmluZyBhbiBleHRlbnNpdmUgc2V0IG9mIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBzb2Z0X2xpbWl0X3RyZWVgLCByZWNsYWltLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYF9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWRgLCBgX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZGAsIGFuZCB0aGUgbWFpbiByZWNsYWltIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX3NvZnRfcmVjbGFpbWAsIGFzIHdlbGwgYXMgc2V2ZXJhbCB0cmVlLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZWAgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBgbWVtY2cxX2luaXRgLiBJdCBsb29rcyBsaWtlIHNvbWUgb2YgdGhlIGV2ZW50IGhhbmRsaW5nIGluIGBtZW1jZzFfZXZlbnRzX3BlcmNwdWAgaGFzIGFsc28gYmVlbiBzaW1wbGlmaWVkLCBhcyBoYXMgYG1lbWNnMV9ldmVudF9yYXRlbGltaXRgLiBUaGUgcGFyYW1ldGVyIGxpc3RzIGZvciBgbWVtY2cxX2NoZWNrX2V2ZW50c2AsIGBtZW1jZzFfY29tbWl0X2NoYXJnZWAsIGBfX21lbWNnMV9zd2Fwb3V0YCwgYW5kIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgIGFyZSBhbGwgY2hhbmdlZC5cbiogICBgbW0vbWVtY29udHJvbC12MS5oYCBoYXMgZGVjbGFyYXRpb25zIGFuZCBpbmxpbmUgZnVuY3Rpb24gdXBkYXRlcy5cbiogICBJbiBgbW0vbWVtY29udHJvbC5jYCwgYG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0YCBpcyByZW1vdmVkIGZyb20gYG1lbV9jZ3JvdXBfY3NzX2FsbG9jYCBhbmQgYG1lbV9jZ3JvdXBfY3NzX3Jlc2V0YC4gTGlrZXdpc2UsIGBtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXNgIGlzIHJlbW92ZWQgZnJvbSBgbWVtX2Nncm91cF9jc3NfZnJlZWAuIFNldmVyYWwgcGFyYW1ldGVycyBhcmUgcmVtb3ZlZCBpbiBhIGZldyBwbGFjZXMgdG9vLiBUaGUgYHVuY2hhcmdlX2JhdGNoYCBmdW5jdGlvbiBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgdGhlIGB1Zy1cdTAwM2VuaWQgPSBmb2xpb19uaWQoZm9saW8pO2AgaXMgcmVtb3ZlZCBmcm9tIGB1bmNoYXJnZV9mb2xpb2AuXG4qICAgRmluYWxseSwgYG1tL3Ztc2Nhbi5jYCByZW1vdmVzIGBNRU1DR19MUlVfSEVBRGAgaGFuZGxpbmcgZnJvbSBgbHJ1X2dlbl9yb3RhdGVfbWVtY2dgLCBhbmQgYWxzbyByZW1vdmVzIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAgYW5kIHJlbW92ZXMgc29mdCBsaW1pdCByZWNsYWltIGZyb20gYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCwgYXMgd2VsbCBhcyB0aGUgYWxyZWFkeSBkZWxldGVkIGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC5cblxuVGhpcyBpcyBleHRlbnNpdmUuIEl0IHNlZW1zIGxpa2UgYSBjbGVhbiBzd2VlcCBvZiB0aGUgdjEgc29mdCBsaW1pdCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpc24ndCBqdXN0IGEgcGFydGlhbCByZW1vdmFsIG9yIGEgcmVmYWN0b3Jpbmcgd2l0aCB0aGUgY29kZSBtb3ZlZCBlbHNld2hlcmUuXG5cbkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIHNpbmdsZSBjb21taXQgb3IgcGFydCBvZiBhIGxhcmdlciBwYXRjaCBzZXJpZXMuIEkgbmVlZCB0byBzZWUgaWYgYW55IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBtYWludGFpbmVkIGluIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlLiBJcyBgY2dyb3VwLm1lbW9yeS5zb2Z0X2xpbWl0X2luX2J5dGVzYCBzdGlsbCBpbiBgbW0vbWVtY29udHJvbC12MS5jYD8gR290dGEgY2hlY2shXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTEyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjEzLjQ4OTM5NDM0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQwMzE4NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdF9saW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC12MS5jPTE1Mjg9c3RhdGljIGludCBtZW1fY2dyb3VwX2hpZXJhcmNoeV93cml0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE1NDAtXFxubW0vbWVtY29udHJvbC12MS5jOjE1NDE6c3RhdGljIHU2NCBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQyLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBjZnR5cGUgKmNmdClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQ2LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNTQ3OnN0YXRpYyBzc2l6ZV90IG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxubW0vbWVtY29udHJvbC12MS5jLTE1NDgtXFx0XFx0XFx0XFx0XFx0ICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE1NTYtXFxubW0vbWVtY29udHJvbC12MS5jOjE1NTc6XFx0cHJfd2Fybl9vbmNlKFxcXCJzb2Z0X2xpbWl0X2luX2J5dGVzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gXFxcIlxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTU4LVxcdFxcdCAgICAgXFxcIldyaXRpbmcgYW55IHZhbHVlIHRvIHRoaXMgZmlsZSBoYXMgbm8gZWZmZWN0LiBcXFwiXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjAyOD1zdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjA0Ni1cXHR7XFxubW0vbWVtY29udHJvbC12MS5jOjIwNDc6XFx0XFx0Lm5hbWUgPSBcXFwic29mdF9saW1pdF9pbl9ieXRlc1xcXCIsXFxubW0vbWVtY29udHJvbC12MS5jOjIwNDg6XFx0XFx0LndyaXRlID0gbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMDQ5OlxcdFxcdC5yZWFkX3U2NCA9IG1lbV9jZ3JvdXBfc29mdF9saW1pdF9yZWFkLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDUwLVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjEzLjU5MzQzNzI2NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NTAzNzUwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IHF1ZXJ5LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCAodjEpKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBpbnZlc3RpZ2F0ZSBob3cgc29mdCBsaW1pdHMgYXJlIGhhbmRsZWQgd2l0aGluIG1lbW9yeSBjZ3JvdXBzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcmVhZGluZyBhbmQgd3JpdGluZyB0aG9zZSB2YWx1ZXMuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBjb2RlLCBhbmQgc2luY2Ugd2UncmUgdGFsa2luZyBhYm91dCBtZW1vcnkgY29udHJvbCwgSSdtIHByZXR0eSBzdXJlIHRoYXQgdGhlIHJlbGV2YW50IGZpbGVzIHdpbGwgYmUgaW4gYG1tL2AuIEJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIGNncm91cHMsIGFuZCBsb29raW5nIGJhY2ssIEknbSBmYWlybHkgY2VydGFpbiB0aGUgZmlsZSBJIHdhbnQgdG8gaW5zcGVjdCBpcyBgbW0vbWVtY29udHJvbC12MS5jYC4gSSBoYXZlIGEgZmVlbGluZyBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgIGFuZCBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlYCB3aWxsIGJlIGtleSBmdW5jdGlvbnMgKG9yIHBvc3NpYmx5IG1hY3Jvcywgd2hpY2ggaXMgd2h5IEkgbmVlZCB0byAqY2hlY2sqKSwgc28gdGhhdCdzIHdoZXJlIEknbGwgZm9jdXMgbXkgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uLiBUaGUgJ3YxJyBpbiB0aGUgZmlsZW5hbWUgc3Ryb25nbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBvbGRlciwgbm93LWRlcHJlY2F0ZWQsIG1lbW9yeSBjZ3JvdXAgaGllcmFyY2h5OyB0aGlzIGlzIGltcG9ydGFudCBjb250ZXh0IGJlY2F1c2UgaXQgaW5mbHVlbmNlcyBob3cgdGhlIGxpbWl0cyBhcmUgbWFuYWdlZCBjb21wYXJlZCB0byB0aGUgbmV3ZXIgY2dyb3VwIHYyLiBLbm93aW5nIHRoaXMsIEkgZXhwZWN0IHRvIHNlZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGlzIGxlZ2FjeSBhcmNoaXRlY3R1cmUuIExldCdzIHNlZSBob3cgdGhlc2UgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjE3LjM0MzgxNTc5M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLXYxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU0MDpcXHRcXG4xNTQxOlxcdHN0YXRpYyB1NjQgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4xNTQyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBjZnR5cGUgKmNmdClcXG4xNTQzOlxcdHtcXG4xNTQ0OlxcdFxcdHJldHVybiAodTY0KVBBR0VfQ09VTlRFUl9NQVggKiBQQUdFX1NJWkU7XFxuMTU0NTpcXHR9XFxuMTU0NjpcXHRcXG4xNTQ3OlxcdHN0YXRpYyBzc2l6ZV90IG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuMTU0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuMTU0OTpcXHR7XFxuMTU1MDpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xcbjE1NTE6XFx0XFx0aW50IHJldDtcXG4xNTUyOlxcdFxcbjE1NTM6XFx0XFx0cmV0ID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKHN0cnN0cmlwKGJ1ZiksIFxcXCItMVxcXCIsIFxcdTAwMjZucl9wYWdlcyk7XFxuMTU1NDpcXHRcXHRpZiAocmV0KVxcbjE1NTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNTU2OlxcdFxcbjE1NTc6XFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJzb2Z0X2xpbWl0X2luX2J5dGVzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gXFxcIlxcbjE1NTg6XFx0XFx0XFx0ICAgICBcXFwiV3JpdGluZyBhbnkgdmFsdWUgdG8gdGhpcyBmaWxlIGhhcyBubyBlZmZlY3QuIFxcXCJcXG4xNTU5OlxcdFxcdFxcdCAgICAgXFxcIlBsZWFzZSByZXBvcnQgeW91ciB1c2VjYXNlIHRvIGxpbnV4LW1tQGt2YWNrLm9yZyBpZiB5b3UgXFxcIlxcbjE1NjA6XFx0XFx0XFx0ICAgICBcXFwiZGVwZW5kIG9uIHRoaXMgZnVuY3Rpb25hbGl0eS5cXFxcblxcXCIpO1xcbjE1NjE6XFx0XFxuMTU2MjpcXHRcXHRyZXR1cm4gbmJ5dGVzO1xcbjE1NjM6XFx0fVxcbjE1NjQ6XFx0XFxuMTU2NTpcXHRzdGF0aWMgdTY0IG1lbV9jZ3JvdXBfcmVhZF91NjQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcXG4xNTY2OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgY2Z0eXBlICpjZnQpXFxuMTU2NzpcXHR7XFxuMTU2ODpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XFxuMTU2OTpcXHRcXHRzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0MjoxNy4zNDQwMTk2MTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDkyNTIwMzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBjYW4gc2VlIHRoZSBjaGFuZ2VzIHRvdWNoIHNvbWUgdmVyeSBzZW5zaXRpdmUgYXJlYXM6IG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgbWVtb3J5IGNncm91cHMgKG1lbWNnIHYxKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIGFmZmVjdHMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBhbmQgdGh1cyB3b3J0aCBmdXp6aW5nLlxuXG5NeSBhbmFseXNpcyBsb29rcyBsaWtlIHRoaXM6XG5cbkZpcnN0LCBsZXQncyBkaXNzZWN0IHdoZXJlIHRoZSBwYXRjaCBpcyBtYWtpbmcgY2hhbmdlczpcbjEuICAqKk1lbW9yeSBNYW5hZ2VtZW50IENvcmU6KiogSXQncyByaWdodCBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zLiBXZSdyZSB0YWxraW5nIGFib3V0IG1lbWNnIHYxIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggcGFnZSByZWNsYWltIGFuZCB0aGUgVk0gc2Nhbm5lciAodm1zY2FuKSBhbmQgdGhlIExSVSAobHJ1XFxfZ2VuKS4gVGhhdCdzIGEgcmVkIGZsYWcgaW1tZWRpYXRlbHkuXG5cbjIuICAqKkV4ZWN1dGFibGUgTG9naWMgQ2hhbmdlczoqKiBMb29raW5nIGF0IHRob3NlIHNwZWNpZmljIGZ1bmN0aW9ucywgSSBzZWUgdGhleSd2ZSBhZGp1c3RlZCB0aGUgZXZlbnQgcmF0ZS1saW1pdGluZyBpbiBgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdGAuIEl0IGFsc28gaXMgdHdlYWtpbmcgaG93IHRocmVzaG9sZHMgYXJlIGNoZWNrZWQuIFRoZSB1bmNoYXJnZSBiYXRjaCBsb2dpYyBoYXMgaGFkIHNvbWUgdXBkYXRlcywgcmVtb3ZpbmcgcGVyLWJhdGNoIG5pZCB0cmFja2luZyBhbmQgcGFzc2luZy4gVGhlIExSVSBnZW4gcm90YXRpb24gbG9naWMgaW4gYGxydV9nZW5fcm90YXRlX21lbWNnYCBoYXMgY2hhbmdlZC4gYHNocmlua196b25lc2AgYW5kIGBiYWxhbmNlX3BnZGF0YCBoYXZlIHJlbW92ZWQgc29mdCBsaW1pdCByZWNsYWltIGNhbGxzLiAgRmluYWxseSwgd2Ugc2VlIGFsdGVyYXRpb25zIGluIHNvZnQgbGltaXQgZmlsZSBoYW5kbGluZyB2aWEgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAgYW5kIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZGAuIFRoZXNlIGFyZSBhbGwgaGlnaGx5IGNyaXRpY2FsIGFyZWFzLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSBpdCBzYXRpc2ZpZXMgdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjcml0ZXJpYSwgYW5kIHRoaXMgaXMgd2hlcmUgaXQgcmVhbGx5IGNsaWNrcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBjcml0ZXJpYSB0aGF0IHN0YXRlIFwicmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGVcIiB3aXRoaW4gc3BlY2lmaWMgY29yZSBzdWJzeXN0ZW1zLCBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50LiBTaW5jZSB0aGlzIHBhdGNoIHRvdWNoZXMgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJJ20gc2VlaW5nIGxvZ2ljIG1vZGlmaWNhdGlvbnMsIGl0J3MgcHJldHR5IGNsZWFyOiBXb3J0aEZ1enppbmcgaXMgYHRydWVgLlxuXG5BbmQsIGEgZmluYWwgaW1wb3J0YW50IHBvaW50OiBJJ20gbm90IGdvaW5nIHRvIGJsaW5kbHkgdHJ1c3QgYW55IFwiTm8gRnVuY3Rpb25hbCBDaGFuZ2VcIiBvciBcIlJlZmFjdG9yaW5nXCIgY2xhaW1zLiBUaG9zZSBhcmUgb2Z0ZW4gbWlzbGVhZGluZy4gUmVhcnJhbmdpbmcgbG9naWMsIGFkZGluZyBoZWxwZXIgZnVuY3Rpb25zLCBvciBjaGFuZ2luZyBob3cgc3RhdGUgaXMgaGFuZGxlZCBpbiB0aGVzZSBjb3JlIHN1YnN5c3RlbXMgaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3Igc3VidGxlIGJ1Z3Mgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBzdWJ0bGUgc2hpZnRzIGluIHNlbWFudGljcyB0aGF0IG5lZWQgY2hlY2tpbmcuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9uLiBTbywgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGlzIGxpa2VseSBoaW5nZXMgb24gYE1FTUNHYCwgYE1FTUNHX1YxYCwgYW5kIGBMUlVfR0VOYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZXMsIGVzcGVjaWFsbHkgaW4gYG1tL2AsIG9yIG1heWJlIGp1c3QgZ3JlcCB0byBkZXRlcm1pbmUgZXhhY3RseSB3aGF0IGNvbmZpZ3MgYXJlIG5lY2Vzc2FyeSB0byBlbmFibGUgdGhlIGNvZGUgYmVpbmcgbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODkyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MjguMjY5MjI3NjQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDEyOTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRU1DR19WMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlLTEwNS1vYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMTIzPXZvaWQgbWVtY2cxX29vbV9maW5pc2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGxvY2tlZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMTMwLSAqIGNncm91cCB2MSB1c2Vyc3BhY2Ugdm1wcmVzc3VyZSBpbnRlcmZhY2UgKG1lbW9yeS5wcmVzc3VyZV9sZXZlbCAvXFxubW0vbWVtY29udHJvbC12MS5jOjExMzE6ICogY2dyb3VwLmV2ZW50X2NvbnRyb2wpLiBLZXB0IGhlcmUgc28gdjItb25seSBrZXJuZWxzIChDT05GSUdfTUVNQ0dfVjE9bilcXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMi0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTI1PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmgtMjgtLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaDoyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC12MS5oLTMwLVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oPTg2PWV4dGVybiBzdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW107XFxubW0vbWVtY29udHJvbC12MS5oLTg3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDo4ODojZWxzZVxcdC8qIENPTkZJR19NRU1DR19WMSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaC04OS1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0xMTg9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykge31cXG5tbS9tZW1jb250cm9sLXYxLmgtMTE5LVxcbm1tL21lbWNvbnRyb2wtdjEuaDoxMjA6I2VuZGlmXFx0LyogQ09ORklHX01FTUNHX1YxICovXFxubW0vbWVtY29udHJvbC12MS5oLTEyMS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMTU9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzNC1cXG5tbS9tZW1jb250cm9sLmM6MjM1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMjM2LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1MD11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzItXFxubW0vbWVtY29udHJvbC5jOjU3MzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTU5OD1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcXG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNjAwLVxcdFBHUEdJTixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04MzI9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTg0Ny1cXG5tbS9tZW1jb250cm9sLmM6ODQ4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtODQ5LS8qXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTE2PXZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTkyOC1cXG5tbS9tZW1jb250cm9sLmM6OTI5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtOTMwLS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMTA0PWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExMTEtXFxubW0vbWVtY29udHJvbC5jOjExMTI6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xMTEzLXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE3MTI9dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3MTctXFxubW0vbWVtY29udHJvbC5jOjE3MTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzE5LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzM4PXN0YXRpYyB2b2lkIG1lbWNnX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTc4NC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSsrKSB7XFxubW0vbWVtY29udHJvbC5jOjE3ODU6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy0xNzg2LVxcdFxcdGlmIChtZW1jZ192bV9ldmVudF9zdGF0W2ldID09IFBHUEdJTiB8fFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE4MzY9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xODU3LVxcdFxcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX1NXQVBfTUFYXSkpO1xcbm1tL21lbWNvbnRyb2wuYzoxODU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTg1OS1cXHRlbHNlIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MjQ3PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQyNjctXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBcXHUwMDI2cGFyZW50LVxcdTAwM2Vzd2FwLCBmYWxzZSk7XFxubW0vbWVtY29udHJvbC5jOjQyNjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00MjY5LVxcdFxcdFdSSVRFX09OQ0UobWVtY2ctXFx1MDAzZXN3YXBwaW5lc3MsIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhwYXJlbnQpKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjgxLVxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgTlVMTCwgZmFsc2UpO1xcbm1tL21lbWNvbnRyb2wuYzo0MjgyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNDI4My1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NDQ4PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDQ1OC0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NDQ1OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQ0NjAtXFx0cGFnZV9jb3VudGVyX3NldF9tYXgoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBQQUdFX0NPVU5URVJfTUFYKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MTg2PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTk3LVxcdC5kZmxfY2Z0eXBlcyA9IG1lbW9yeV9maWxlcyxcXG5tbS9tZW1jb250cm9sLmM6NTE5ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTUxOTktXFx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjE5Nj1zdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYyMDEtXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcXG5tbS9tZW1jb250cm9sLmM6NjIwMjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTYyMDMtXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2xlZ2FjeV9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIG1lbXN3X2ZpbGVzKSk7XFxuLS1cXG5tbS9zd2FwLmg9ODU9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9zd2FwLmgtODYte1xcbm1tL3N3YXAuaDo4NzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vc3dhcC5oLTg4LVxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0MjoyOC43OTMzNjQyNzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzkwMzIxMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIE1FTUNHIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCBhcmUgZGVmaW5lZCB3aXRoaW4gdGhpcyBrZXJuZWwuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBiZSBsYWlkIG91dCBpbiBvbmUgb2YgdGhlIEtjb25maWcgZmlsZXMsIGxpa2VseSBpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaW5pdGlhbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aG9zZSBmaWxlcyBkaXJlY3RseS4gSG9wZWZ1bGx5LCB0aGUgZGVmaW5pdGlvbiBpcyBjbGVhciBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgdHdvIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTYzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MzUuNTgzNjg5OTEzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ5Njk3NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjM1LjY4ODY2NDgzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTc5MDI2NzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gKGluaXQvS2NvbmZpZykqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHNvbWUgc3BlY2lmaWMgc2V0dGluZ3MsIHNvIGxldCdzIGp1bXAgcmlnaHQgaW50byBgaW5pdC9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBlbnRyaWVzIGFyb3VuZCBsaW5lcyAxMDg1IHRocm91Z2ggMTEyMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQvZGlzYWJsZWQgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGZpbmQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTY3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MzcuNjY3Njk1MTU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDkwOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwOTE6XFx0XFx0aGVscFxcbjEwOTI6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG4xMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTEwNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMTA2OlxcdFxcdGRlZmF1bHQgeVxcbjExMDc6XFx0XFxuMTEwODpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTA5OlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTExMDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTExMTpcXHRcXHRkZWZhdWx0IG5cXG4xMTEyOlxcdFxcdGhlbHBcXG4xMTEzOlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTExNDpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTExNTpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTExNjpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMTc6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuMTEyMDpcXHRcXHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcXG4xMTIxOlxcdFxcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMTI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0MjozNy42Njc5MjkzMDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzMDMzMzAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYCBqdW1wIG91dCBhdCBtZSBhcyBmdW5kYW1lbnRhbC4gVGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3Mgb2YgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCBzbyBuYXR1cmFsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGltcGFjdC4gVGhlbiwgSSBzZWUgdGhpcyBjaGFuZ2UgaW4gYG1tL3Ztc2Nhbi5jYCByZWxhdGVkIHRvIGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2AsIGFuZCBJIGtub3cgSSBoYXZlIHRvIGNoZWNrIHRoZSBgTFJVX0dFTmAgY29uZmlndXJhdGlvbiBvcHRpb24uIEdpdmVuIGl0cyBuYW1lIGFuZCB3aGVyZSBpdCdzIHJlZmVyZW5jZWQsIGl0J3Mgb2J2aW91c2x5IGdvaW5nIHRvIGNvbnRyb2wgdGhlIGdlbmVyYXRpb25hbCBMUlUgaW1wbGVtZW50YXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiBtZW1jZ3MuIEknbGwgbmVlZCB0byBjb25maXJtIGl0cyBkZWZpbml0aW9uIGFuZCBzZXR0aW5ncywgc28gSSdsbCBoZWFkIG92ZXIgdG8gYG1tL0tjb25maWdgIHRvIGRvIHRoYXQuIEkga25vdyB3aGVyZSB0byBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMyOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6MzkuNzk4MjY0OTM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTA2OTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzg4PWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTM5OC0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTM5OTpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwMC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDA3LVxcbm1tL0tjb25maWc6MTQwODpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDA5LVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDEzLVxcbm1tL0tjb25maWc6MTQxNDpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQxNS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjItXFxubW0vS2NvbmZpZzoxNDIzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyNC1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjM5Ljg5MzM0Mzc2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTkyMjQyMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNb2RpZmllZCBNZW1vcnkgQ29udHJvbCBMb2dpYyBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlICphY3R1YWxseSogcmVsZXZhbnQgZW50cnkgcG9pbnRzIHRvIHRoZSBjaGFuZ2VkIGxvZ2ljIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBGaXJzdCwgSSdtIGNoZWNraW5nIHRoZSBgRm9jdXNTeW1ib2xzYC4uLiByaWdodC5cblxuSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGFsdGVyZWQgb3IgYXJlIGRpcmVjdCBlbnRyeXBvaW50cyB0byB0aGUgbW9kaWZpZWQgbG9naWMuIExldCdzIHN0YXJ0IHdpdGggYSBkaWZmIHJldmlldywgZm9jdXNpbmcgb24gd2hhdCB3YXMgY2hhbmdlZC4gSSBzZWUgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBkaWZmOlxuXG5JbiBgbW0vbWVtY29udHJvbC12MS5jYCwgSSd2ZSBnb3QgYSBsaXN0LlxuXG5JbiBgbW0vbWVtY29udHJvbC5jYCwgdGhlcmUncyBhIGxpc3QuXG5cbkFuZCBpbiBgbW0vdm1zY2FuLmNgLCBhIGZldyBtb3JlLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgSSdtIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGhlcmUsIHNlY3Rpb24gZm91ciB0byBiZSBleGFjdC4gVGhleSdyZSB0ZWxsaW5nIG1lIHRvIGF2b2lkIGxpc3RpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLCBhbmQgaW5zdGVhZCwgdG8gdGFyZ2V0IHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIGVudHJ5cG9pbnRzLiBPa2F5LCB0aGF0IG1ha2VzIHNlbnNlLiBTbywgbWVtb3J5IGFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGNvcmUgc3luY2hyb25pemF0aW9uPyBOb3Qgd2hhdCBJJ20gbG9va2luZyBmb3IuIEkgbmVlZCBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBhbHRlcmVkIGxvZ2ljIG9yIHRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBmZWF0dXJlLiBBbHNvLCBpZiB0aGVyZSBhcmUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMsIEkgaGF2ZSB0byBmaW5kIG5vbi1zdGF0aWMgY2FsbGVyIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5ICp1c2UqIHRoZW0uIEdvdCBpdC5cblxuU28sIGxldCdzIGdvIGJhY2sgYW5kIGV4YW1pbmUgdGhvc2Ugbm9uLXN0YXRpYyBzeW1ib2xzIGluIGBtbS9tZW1jb250cm9sLXYxLmNgIGFnYWluLiBJIG5lZWQgdG8gc2VlIHdoaWNoIG9uZXMgYXJlIGdvb2QgdGFyZ2V0cy4gYG1lbWNnMV9jb21taXRfY2hhcmdlYCBzZWVtcyByZWxldmFudCwgZXZlbiB0aG91Z2ggaXQncyBjYWxsZWQgb24gZXZlcnkgcGFnZSBjaGFyZ2UgdW5kZXIgdjEsIGl0J3Mgc3BlY2lmaWMgdG8gdGhlIHYxIGNoYW5nZXMuIGBfX21lbWNnMV9zd2Fwb3V0YCBpcyBhbm90aGVyLCBhbG9uZyB3aXRoIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgLiBOb3csIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGVgIGFuZCBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgIC0gdGhleSBhcmUgZGVmaW5lZCBpbiBgY2Z0eXBlYCwgc28gdGhleSB3aWxsIGFjdHVhbGx5IGJlIHN5bWJvbHMgaW4gdGhlIGJpbmFyeSwgdGhhdCBpcyBwZXJmZWN0ISBBbmQgZXZlbiB0aG91Z2ggYGxydV9nZW5fcm90YXRlX21lbWNnYCBpcyBzdGF0aWMgaW4gYHZtc2Nhbi5jYCwgaXQncyBzdGlsbCBhIHN5bWJvbC4gVGhhdCdzIGdvb2QuXG5cbldhaXQgYSBzZWNvbmQsIHN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcywgdW5sZXNzIHRoZXkncmUgaW5saW5lZCwgKmFyZSogc3ltYm9scyBpbiB2bWxpbnV4LiBHb29kIGNhdGNoLiBTbyBmdW5jdGlvbnMgbGlrZSBgbHJ1X2dlbl9yb3RhdGVfbWVtY2cuaXNyYS4wYCBvciBqdXN0IGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2AgYXJlIHN5bWJvbHMuIEhvd2V2ZXIsIHRob3NlIG5vbi1zdGF0aWMgZW50cnlwb2ludHMgb3IgZGlyZWN0IGBjZnR5cGVgIGhhbmRsZXJzIGxpa2UgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAsIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZGAsIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgLCBgbWVtY2cxX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgIGFyZSBleGNlbGxlbnQgdGFyZ2V0cy5cblxuTm93LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB3aGF0IGNhbGxzIGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2AgaW4gYG1tL3Ztc2Nhbi5jYC4gR290dGEgZmluZCB0aG9zZSBjYWxsZXJzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjgzNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0Mjo0Ni40ODU1OTI5MTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NzE5MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fcm90YXRlX21lbWNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQzNzQ9ZW51bSB7XFxuLS1cXG5tbS92bXNjYW4uYy00MzgwLVxcbm1tL3Ztc2Nhbi5jOjQzODE6c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxubW0vdm1zY2FuLmMtNDM4Mi17XFxuLS1cXG5tbS92bXNjYW4uYz00NDUyPXZvaWQgbHJ1X2dlbl9vZmZsaW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NTgtXFxubW0vdm1zY2FuLmM6NDQ1OTpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9PTEQpO1xcbm1tL3Ztc2Nhbi5jLTQ0NjAtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9NTEyNj1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNDYtXFx0XFx0aWYgKG9wKSB7XFxubW0vdm1zY2FuLmM6NTE0NzpcXHRcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcXG5tbS92bXNjYW4uYy01MTQ4LVxcdFxcdFxcdG9wID0gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNzgtXFx0aWYgKG9wKVxcbm1tL3Ztc2Nhbi5jOjUxNzk6XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XFxubW0vdm1zY2FuLmMtNTE4MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxODUtXFxubW0vdm1zY2FuLmM6NTE4NjpcXHQvKiByZXN0YXJ0IGlmIHJhY2VkIHdpdGggbHJ1X2dlbl9yb3RhdGVfbWVtY2coKSAqL1xcbm1tL3Ztc2Nhbi5jLTUxODctXFx0aWYgKGdlbiAhPSBnZXRfbnVsbHNfdmFsdWUocG9zKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxOTY9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MjA5LVxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYzo1MjEwOlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5tbS92bXNjYW4uYy01MjExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0Mjo0Ni41NTUzMTk5MTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUyMDU1MzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG1lbW9yeSBjZ3JvdXAgKG1lbWNnKSB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0gaW1wbGVtZW50YXRpb24gYW5kIHRoZSBhc3NvY2lhdGVkIHRyZWUgdHJhY2tpbmcgbG9naWMuIEkgd2FudCB0byB6ZXJvIGluIG9uIGhvdyB0aGUgc3BlY2lmaWMgaGFuZGxlcnMgZm9yIGBjZ3JvdXAubWVtb3J5LnNvZnRfbGltaXRfaW5fYnl0ZXNgLCBuYW1lbHkgYG1lbV9jZ3JvdXBfc29mdF9saW1pdF93cml0ZWAgYW5kIGBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZGAsIGFyZSBhZmZlY3RlZC4gSSdsbCBuZWVkIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBtZW1jZy12MSBldmVudCBjaGVja2Vycy4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgLCBgbWVtY2cxX2NvbW1pdF9jaGFyZ2VgLCBhbmQgYF9fbWVtY2cxX3N3YXBvdXRgIHRvIGFzc2VzcyBpZiBhbnkgY3JpdGljYWwgbG9naWMgb3IgYm91bmRhcnkgY29uZGl0aW9ucyBhcmUgYmVpbmcgYWx0ZXJlZCBpbiB0ZXJtcyBvZiB1bmNoYXJnaW5nIGFuZCBzd2FwcGluZy5cblxuSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZXBlbmRlbnQgb24gYENPTkZJR19NRU1DR2AsIGBDT05GSUdfTUVNQ0dfVjFgLCBhbmQgYENPTkZJR19MUlVfR0VOYC4gSSdsbCBkb3VibGUtY2hlY2sgdGhhdCB0aGVzZSBhcmUgZW5hYmxlZCBpbiB0aGUgZnV6emluZyBlbnZpcm9ubWVudCB0byBlbnN1cmUgY29tcGxldGUgY292ZXJhZ2UuXG5cblRvIHN1bW1hcml6ZSwgdGhpcyBjaGFuZ2UgYXBwZWFycyB0byBiZSBjZW50ZXJlZCBvbiByZW1vdmluZyBsZWdhY3kgdjEgc29mdCBsaW1pdCByZWNsYWltIGFuZCB0cmVlIHRyYWNraW5nLCBhbmQsIHdpdGggdGhlIGtleSB0b3VjaHBvaW50cyBiZWluZyBldmVudCBjaGVja2luZy9yYXRlLWxpbWl0aW5nLCB1bmNoYXJnaW5nLCBwYWdlIHJlY2xhaW0gbG9vcHMsIGFuZCBtdWx0aS1nZW4gTFJVIHJvdGF0aW9uLiBUaGVzZSBjb21wb25lbnRzIGFyZSBhbGwgdGlnaHRseSBjb3VwbGVkLCBzbyBhbnkgY2hhbmdlIGluIHRoZXNlIGZ1bmN0aW9ucyBtdXN0IGJlIHZpZXdlZCBob2xpc3RpY2FsbHkuXG5cbkdpdmVuIHRoYXQgdGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgc3Vic3lzdGVtIGNvZGUgcGF0aHMsIEkgYW0gZGVlbWluZyB0aGlzIHBhdGNoIGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLiBJIGhhdmUgdGhlIGZvbGxvd2luZyBzeW1ib2xzIGluIG15IHNpZ2h0OlxuLSBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlYFxuLSBgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlYWRgXG4tIGBtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hgXG4tIGBtZW1jZzFfY29tbWl0X2NoYXJnZWBcbi0gYF9fbWVtY2cxX3N3YXBvdXRgXG4tIGBscnVfZ2VuX3JvdGF0ZV9tZW1jZ2BcblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gTGV0J3MgZ2V0IHRoaXMgYW5hbHlzaXMgZG9jdW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwMTUsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjU0LjA3NTg3Nzg1MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTY0Mjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCIsXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9zb2Z0X2xpbWl0X3dyaXRlXCIsXG4gICAgXCJtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVhZFwiLFxuICAgIFwibWVtY2cxX3VuY2hhcmdlX2JhdGNoXCIsXG4gICAgXCJtZW1jZzFfY29tbWl0X2NoYXJnZVwiLFxuICAgIFwiX19tZW1jZzFfc3dhcG91dFwiLFxuICAgIFwibHJ1X2dlbl9yb3RhdGVfbWVtY2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgZGVwcmVjYXRlcyBhbmQgcmVtb3ZlcyB0aGUgbWVtY2cgdjEgc29mdCBsaW1pdCByZWNsYWltIG1lY2hhbmlzbSBhbmQgaXRzIGFzc29jaWF0ZWQgcmJ0cmVlIHRyYWNraW5nLiBUaGlzIG1vZGlmaWVzIGFjdGl2ZSBNTSBsb2dpYyBpbiBtZW1jZyB2MSBldmVudCByYXRlLWxpbWl0aW5nIGFuZCB1bmNoYXJnaW5nLCBNdWx0aS1HZW4gTFJVIHJvdGF0aW9uLCBhbmQgcGFnZSByZWNsYWltIHBhdGhzIGluIHZtc2Nhbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIixcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3NvZnRfbGltaXRfd3JpdGVcIixcbiAgICBcIm1lbV9jZ3JvdXBfc29mdF9saW1pdF9yZWFkXCIsXG4gICAgXCJtZW1jZzFfdW5jaGFyZ2VfYmF0Y2hcIixcbiAgICBcIm1lbWNnMV9jb21taXRfY2hhcmdlXCIsXG4gICAgXCJfX21lbWNnMV9zd2Fwb3V0XCIsXG4gICAgXCJscnVfZ2VuX3JvdGF0ZV9tZW1jZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBkZXByZWNhdGVzIGFuZCByZW1vdmVzIHRoZSBtZW1jZyB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0gbWVjaGFuaXNtIGFuZCBpdHMgYXNzb2NpYXRlZCByYnRyZWUgdHJhY2tpbmcuIFRoaXMgbW9kaWZpZXMgYWN0aXZlIE1NIGxvZ2ljIGluIG1lbWNnIHYxIGV2ZW50IHJhdGUtbGltaXRpbmcgYW5kIHVuY2hhcmdpbmcsIE11bHRpLUdlbiBMUlUgcm90YXRpb24sIGFuZCBwYWdlIHJlY2xhaW0gcGF0aHMgaW4gdm1zY2FuLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0Mjo1NC4yMDE1Mjk1MjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODgyNDc5MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6NDI6NTQuMjAyMDI2MTkyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI4ODE5NzY2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZW1vdmVzIHRoZSBsZWdhY3kgY2dyb3VwIHYxIHNvZnQtbGltaXQgcmVjbGFpbSBtZWNoYW5pc20gYWNyb3NzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKG1lbWNvbnRyb2wsIG1lbWNvbnRyb2wtdjEsIGFuZCB2bXNjYW4pLiBTcGVjaWZpY2FsbHk6XFxuMS4gSXQgZGVsZXRlcyB0aGUgc29mdCBsaW1pdCBSQi10cmVlIHRyYWNraW5nIHN0cnVjdHVyZXMsIGZ1bmN0aW9ucywgYW5kIHRyYWNlcG9pbnRzLlxcbjIuIEl0IHJlbW92ZXMgdGhlIHVudXNlZCBgc29mdF9saW1pdGAgYW5kIGB0YXJnZXRzYCBmaWVsZHMgZnJvbSBgc3RydWN0IG1lbV9jZ3JvdXBgIGFuZCBgc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1YCwgc2ltcGxpZnlpbmcgcGVyLWNwdSBldmVudCByYXRlbGltaXRpbmcgdG8ganVzdCBgdGhyZXNob2xkX3RhcmdldGAuXFxuMy4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBuaWRgIGZpZWxkIGZyb20gYHN0cnVjdCB1bmNoYXJnZV9nYXRoZXJgIGFuZCB1bnVzZWQgc2Nhbm5pbmcgc3RhdGlzdGljcyB2YXJpYWJsZXMgZnJvbSByZWNsYWltIHBhdGhzIChgc2hyaW5rX3pvbmVzYCBhbmQgYGJhbGFuY2VfcGdkYXRgKS5cXG5cXG5UaGUgY2hhbmdlcyBjb25zaXN0IHN0cmljdGx5IG9mIGRlYWQvZGVwcmVjYXRlZCBjb2RlIHJlbW92YWwgYW5kIHN0cnVjdHVyYWwgc2ltcGxpZmljYXRpb25zLiBObyBuZXcgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcmVhZHMsIG9yIGJ1ZmZlciBtYW5pcHVsYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZhMGRhY2RkOTU2ZGVmNzRlZTAwNjA1MWVkODY5MmQ5NWQ1OWJiYzJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjQyOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZGE2MjVkMmVkYjNiYS4uYzc5OTkyNjQzNTU2MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTk1LDIwICs5NSw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdHN0cnVjdCBscnV2ZWNfc3RhdHNcdFx0XHQqbHJ1dmVjX3N0YXRzO1xuIFx0c3RydWN0IHNocmlua2VyX2luZm8gX19yY3VcdCpzaHJpbmtlcl9pbmZvO1xuIFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbi1cdC8qXG4tXHQgKiBNZW1jZy12MSBvbmx5IHN0dWZmIGluIG1pZGRsZSBhcyBidWZmZXIgYmV0d2VlbiByZWFkIG1vc3RseSBmaWVsZHNcbi1cdCAqIGFuZCB1cGRhdGUgb2Z0ZW4gZmllbGRzIHRvIGF2b2lkIGZhbHNlIHNoYXJpbmcuIElmIHYxIHN0dWZmIGlzXG4tXHQgKiBub3QgcHJlc2VudCwgYW4gZXhwbGljaXQgcGFkZGluZyBpcyBuZWVkZWQuXG4tXHQgKi9cbi1cbi1cdHN0cnVjdCByYl9ub2RlXHRcdHRyZWVfbm9kZTtcdC8qIFJCIHRyZWUgbm9kZSAqL1xuLVx0dW5zaWduZWQgbG9uZ1x0XHR1c2FnZV9pbl9leGNlc3M7LyogU2V0IHRvIHRoZSB2YWx1ZSBieSB3aGljaCAqL1xuLVx0XHRcdFx0XHRcdC8qIHRoZSBzb2Z0IGxpbWl0IGlzIGV4Y2VlZGVkKi9cbi1cdGJvb2xcdFx0XHRvbl90cmVlO1xuLSNlbHNlXG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMV8pO1xuLSNlbmRpZlxuIFxuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbkBAIC0yOTMsOCArMjgwLDYgQEAgc3RydWN0IG1lbV9jZ3JvdXAge1xuIFxuIFx0c3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1IF9fcGVyY3B1ICpldmVudHNfcGVyY3B1O1xuIFxuLVx0dW5zaWduZWQgbG9uZyBzb2Z0X2xpbWl0O1xuLVxuIFx0LyogcHJvdGVjdGVkIGJ5IG1lbWNnX29vbV9sb2NrICovXG4gXHRib29sIG9vbV9sb2NrO1xuIFx0aW50IHVuZGVyX29vbTtcbkBAIC0xOTI0LDEwICsxOTA5LDYgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIC8qIENncm91cCB2MS1yZWxhdGVkIGRlY2xhcmF0aW9ucyAqL1xuIFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbi11bnNpZ25lZCBsb25nIG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxuLVx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZCk7XG4tXG4gYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5AQCAtMTk0OCwxNCArMTkyOSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxuIH1cbiBcbiAjZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbi1zdGF0aWMgaW5saW5lXG4tdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi1cdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKnRvdGFsX3NjYW5uZWQpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA2N2M4NGE4YTcyNTgzLi44NGUyMzdmMmMxN2RiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTYzOCwzNSArNjM4LDMyIEBAIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsge1xuICAqIEZvciBlYWNoIG5vZGUsIG1lbWNncyBhcmUgZGl2aWRlZCBpbnRvIHR3byBnZW5lcmF0aW9uczogdGhlIG9sZCBhbmQgdGhlXG4gICogeW91bmcuIEZvciBlYWNoIGdlbmVyYXRpb24sIG1lbWNncyBhcmUgcmFuZG9tbHkgc2hhcmRlZCBpbnRvIG11bHRpcGxlIGJpbnNcbiAgKiB0byBpbXByb3ZlIHNjYWxhYmlsaXR5LiBGb3IgZWFjaCBiaW4sIHRoZSBobGlzdF9udWxscyBpcyB2aXJ0dWFsbHkgZGl2aWRlZFxuLSAqIGludG8gdGhyZWUgc2VnbWVudHM6IHRoZSBoZWFkLCB0aGUgdGFpbCBhbmQgdGhlIGRlZmF1bHQuXG4rICogaW50byB0d28gc2VnbWVudHM6IHRoZSB0YWlsIGFuZCB0aGUgZGVmYXVsdC5cbiAgKlxuICAqIEFuIG9ubGluaW5nIG1lbWNnIGlzIGFkZGVkIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkIGdlbmVyYXRpb24uXG4gICogVGhlIGV2aWN0aW9uIHN0YXJ0cyBhdCB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gdGhlIG9sZCBnZW5lcmF0aW9uLiBUaGVcbiAgKiBwZXItbm9kZSBtZW1jZyBnZW5lcmF0aW9uIGNvdW50ZXIsIHdob3NlIHJlbWluZGVyIChtb2QgTUVNQ0dfTlJfR0VOUykgaW5kZXhlc1xuICAqIHRoZSBvbGQgZ2VuZXJhdGlvbiwgaXMgaW5jcmVtZW50ZWQgd2hlbiBhbGwgaXRzIGJpbnMgYmVjb21lIGVtcHR5LlxuICAqXG4tICogVGhlcmUgYXJlIGZvdXIgb3BlcmF0aW9uczpcbi0gKiAxLiBNRU1DR19MUlVfSEVBRCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgaGVhZCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4tICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcInNlZ1wiIHRvIFwiaGVhZFwiO1xuLSAqIDIuIE1FTUNHX0xSVV9UQUlMLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiBpdHNcbisgKiBUaGVyZSBhcmUgdGhyZWUgb3BlcmF0aW9uczpcbisgKiAxLiBNRU1DR19MUlVfVEFJTCwgd2hpY2ggbW92ZXMgYSBtZW1jZyB0byB0aGUgdGFpbCBvZiBhIHJhbmRvbSBiaW4gaW4gaXRzXG4gICogICAgY3VycmVudCBnZW5lcmF0aW9uIChvbGQgb3IgeW91bmcpIGFuZCB1cGRhdGVzIGl0cyBcInNlZ1wiIHRvIFwidGFpbFwiO1xuLSAqIDMuIE1FTUNHX0xSVV9PTEQsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIGhlYWQgb2YgYSByYW5kb20gYmluIGluIHRoZSBvbGRcbisgKiAyLiBNRU1DR19MUlVfT0xELCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSBoZWFkIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGUgb2xkXG4gICogICAgZ2VuZXJhdGlvbiwgdXBkYXRlcyBpdHMgXCJnZW5cIiB0byBcIm9sZFwiIGFuZCByZXNldHMgaXRzIFwic2VnXCIgdG8gXCJkZWZhdWx0XCI7XG4tICogNC4gTUVNQ0dfTFJVX1lPVU5HLCB3aGljaCBtb3ZlcyBhIG1lbWNnIHRvIHRoZSB0YWlsIG9mIGEgcmFuZG9tIGJpbiBpbiB0aGVcbisgKiAzLiBNRU1DR19MUlVfWU9VTkcsIHdoaWNoIG1vdmVzIGEgbWVtY2cgdG8gdGhlIHRhaWwgb2YgYSByYW5kb20gYmluIGluIHRoZVxuICAqICAgIHlvdW5nIGdlbmVyYXRpb24sIHVwZGF0ZXMgaXRzIFwiZ2VuXCIgdG8gXCJ5b3VuZ1wiIGFuZCByZXNldHMgaXRzIFwic2VnXCIgdG9cbiAgKiAgICBcImRlZmF1bHRcIi5cbiAgKlxuICAqIFRoZSBldmVudHMgdGhhdCB0cmlnZ2VyIHRoZSBhYm92ZSBvcGVyYXRpb25zIGFyZTpcbi0gKiAxLiBFeGNlZWRpbmcgdGhlIHNvZnQgbGltaXQsIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9IRUFEO1xuLSAqIDIuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBsb3csIHdoaWNoIHRyaWdnZXJzXG4rICogMS4gVGhlIGZpcnN0IGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIGJlbG93IGxvdywgd2hpY2ggdHJpZ2dlcnNcbiAgKiAgICBNRU1DR19MUlVfVEFJTDtcbi0gKiAzLiBUaGUgZmlyc3QgYXR0ZW1wdCB0byByZWNsYWltIGEgbWVtY2cgb2ZmbGluZWQgb3IgYmVsb3cgcmVjbGFpbWFibGUgc2l6ZVxuKyAqIDIuIFRoZSBmaXJzdCBhdHRlbXB0IHRvIHJlY2xhaW0gYSBtZW1jZyBvZmZsaW5lZCBvciBiZWxvdyByZWNsYWltYWJsZSBzaXplXG4gICogICAgdGhyZXNob2xkLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfVEFJTDtcbi0gKiA0LiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemVcbisgKiAzLiBUaGUgc2Vjb25kIGF0dGVtcHQgdG8gcmVjbGFpbSBhIG1lbWNnIG9mZmxpbmVkIG9yIGJlbG93IHJlY2xhaW1hYmxlIHNpemVcbiAgKiAgICB0aHJlc2hvbGQsIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcbi0gKiA1LiBBdHRlbXB0aW5nIHRvIHJlY2xhaW0gYSBtZW1jZyBiZWxvdyBtaW4sIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9ZT1VORztcbi0gKiA2LiBGaW5pc2hpbmcgdGhlIGFnaW5nIG9uIHRoZSBldmljdGlvbiBwYXRoLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4tICogNy4gT2ZmbGluaW5nIGEgbWVtY2csIHdoaWNoIHRyaWdnZXJzIE1FTUNHX0xSVV9PTEQuXG4rICogNC4gQXR0ZW1wdGluZyB0byByZWNsYWltIGEgbWVtY2cgYmVsb3cgbWluLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfWU9VTkc7XG4rICogNS4gRmluaXNoaW5nIHRoZSBhZ2luZyBvbiB0aGUgZXZpY3Rpb24gcGF0aCwgd2hpY2ggdHJpZ2dlcnMgTUVNQ0dfTFJVX1lPVU5HO1xuKyAqIDYuIE9mZmxpbmluZyBhIG1lbWNnLCB3aGljaCB0cmlnZ2VycyBNRU1DR19MUlVfT0xELlxuICAqXG4gICogTm90ZXM6XG4gICogMS4gTWVtY2cgTFJVIG9ubHkgYXBwbGllcyB0byBnbG9iYWwgcmVjbGFpbSwgYW5kIHRoZSByb3VuZC1yb2JpbiBpbmNyZW1lbnRpbmdcbkBAIC02OTksNyArNjk2LDYgQEAgdm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gdm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiB2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLXZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKTtcbiB2b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG4gYm9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZCk7XG4gdm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7XG5AQCAtNzQwLDEwICs3MzYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiB7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuaW5kZXggYjRiZjdiOGRlZjFmNS4uOGE4NzI5OTBiNGJlZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oXG4rKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaFxuQEAgLTIxNCwxMyArMjE0LDYgQEAgREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3JlY2xhaW1fYmVcbiBcbiBcdFRQX0FSR1MoZ2ZwX2ZsYWdzLCBvcmRlciwgbWVtY2cpXG4gKTtcbi1cbi1ERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fYmVnaW4sXG4tXG4tXHRUUF9QUk9UTyhnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlciwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSxcbi1cbi1cdFRQX0FSR1MoZ2ZwX2ZsYWdzLCBvcmRlciwgbWVtY2cpXG4tKTtcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4gREVDTEFSRV9FVkVOVF9DTEFTUyhtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLFxuQEAgLTI2MCwxMyArMjUzLDYgQEAgREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9lbmRfdGVtcGxhdGUsIG1tX3Ztc2Nhbl9tZW1jZ19yZWNsYWltX2VuZCxcbiBcbiBcdFRQX0FSR1MobnJfcmVjbGFpbWVkLCBtZW1jZylcbiApO1xuLVxuLURFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fZW5kLFxuLVxuLVx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyksXG4tXG4tXHRUUF9BUkdTKG5yX3JlY2xhaW1lZCwgbWVtY2cpXG4tKTtcbiAjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG4gXG4gVFJBQ0VfRVZFTlQobW1fc2hyaW5rX3NsYWJfc3RhcnQsXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDVjYzIyMGRiOTA3NjYuLmUxNmYxMjUwYjI1YzggMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtNzgsMTAgKzc4LDYgQEAgdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXG4gXHRcdFx0XHRcdCAgIGludCAqc3dhcHBpbmVzcyk7XG4tdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuLVx0XHRcdFx0ICAgICBwZ19kYXRhX3QgKnBnZGF0LFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcbiBcbiAjaWZkZWYgQ09ORklHX05VTUFcbiBleHRlcm4gaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW87XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5jIGIvbW0vbWVtY29udHJvbC12MS5jXG5pbmRleCAwNWVmNTVjYWU0ZGM2Li5iZjJjN2Q1M2IwMWIxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC0xNywzMCArMTcsNiBAQFxuICNpbmNsdWRlIFwic3dhcF90YWJsZS5oXCJcbiAjaW5jbHVkZSBcIm1lbWNvbnRyb2wtdjEuaFwiXG4gXG4tLypcbi0gKiBDZ3JvdXBzIGFib3ZlIHRoZWlyIGxpbWl0cyBhcmUgbWFpbnRhaW5lZCBpbiBhIFJCLVRyZWUsIGluZGVwZW5kZW50IG9mXG4tICogdGhlaXIgaGllcmFyY2h5IHJlcHJlc2VudGF0aW9uXG4tICovXG4tXG4tc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSB7XG4tXHRzdHJ1Y3QgcmJfcm9vdCByYl9yb290O1xuLVx0c3RydWN0IHJiX25vZGUgKnJiX3JpZ2h0bW9zdDtcbi1cdHNwaW5sb2NrX3QgbG9jaztcbi19O1xuLVxuLXN0cnVjdCBtZW1fY2dyb3VwX3RyZWUge1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqcmJfdHJlZV9wZXJfbm9kZVtNQVhfTlVNTk9ERVNdO1xuLX07XG4tXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3RyZWUgc29mdF9saW1pdF90cmVlIF9fcmVhZF9tb3N0bHk7XG4tXG4tLypcbi0gKiBNYXhpbXVtIGxvb3BzIGluIG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKCksIHVzZWQgZm9yIHNvZnRcbi0gKiBsaW1pdCByZWNsYWltIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMsIGlmIHRoZXkgZXZlciBvY2N1ci5cbi0gKi9cbi0jZGVmaW5lXHRNRU1fQ0dST1VQX01BWF9SRUNMQUlNX0xPT1BTXHRcdDEwMFxuLSNkZWZpbmVcdE1FTV9DR1JPVVBfTUFYX1NPRlRfTElNSVRfUkVDTEFJTV9MT09QU1x0MlxuLVxuIC8qIGZvciBPT00gKi9cbiBzdHJ1Y3QgbWVtX2Nncm91cF9ldmVudGZkX2xpc3Qge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuQEAgLTEwNiwzMDEgKzgyLDYgQEAgc3RhdGljIHN0cnVjdCBsb2NrZGVwX21hcCBtZW1jZ19vb21fbG9ja19kZXBfbWFwID0ge1xuIFxuIERFRklORV9TUElOTE9DSyhtZW1jZ19vb21fbG9jayk7XG4gXG4tc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6LFxuLVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBuZXdfdXNhZ2VfaW5fZXhjZXNzKVxuLXtcbi1cdHN0cnVjdCByYl9ub2RlICoqcCA9IFx1MDAyNm1jdHotXHUwMDNlcmJfcm9vdC5yYl9ub2RlO1xuLVx0c3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXpfbm9kZTtcbi1cdGJvb2wgcmlnaHRtb3N0ID0gdHJ1ZTtcbi1cbi1cdGlmIChtei1cdTAwM2Vvbl90cmVlKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MgPSBuZXdfdXNhZ2VfaW5fZXhjZXNzO1xuLVx0aWYgKCFtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MpXG4tXHRcdHJldHVybjtcbi1cdHdoaWxlICgqcCkge1xuLVx0XHRwYXJlbnQgPSAqcDtcbi1cdFx0bXpfbm9kZSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsXG4tXHRcdFx0XHRcdHRyZWVfbm9kZSk7XG4tXHRcdGlmIChtei1cdTAwM2V1c2FnZV9pbl9leGNlc3MgXHUwMDNjIG16X25vZGUtXHUwMDNldXNhZ2VfaW5fZXhjZXNzKSB7XG4tXHRcdFx0cCA9IFx1MDAyNigqcCktXHUwMDNlcmJfbGVmdDtcbi1cdFx0XHRyaWdodG1vc3QgPSBmYWxzZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwID0gXHUwMDI2KCpwKS1cdTAwM2VyYl9yaWdodDtcbi1cdFx0fVxuLVx0fVxuLVxuLVx0aWYgKHJpZ2h0bW9zdClcbi1cdFx0bWN0ei1cdTAwM2VyYl9yaWdodG1vc3QgPSBcdTAwMjZtei1cdTAwM2V0cmVlX25vZGU7XG4tXG4tXHRyYl9saW5rX25vZGUoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlLCBwYXJlbnQsIHApO1xuLVx0cmJfaW5zZXJ0X2NvbG9yKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSwgXHUwMDI2bWN0ei1cdTAwM2VyYl9yb290KTtcbi1cdG16LVx1MDAzZW9uX3RyZWUgPSB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpteixcbi1cdFx0XHRcdFx0IHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0aWYgKCFtei1cdTAwM2Vvbl90cmVlKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlID09IG1jdHotXHUwMDNlcmJfcmlnaHRtb3N0KVxuLVx0XHRtY3R6LVx1MDAzZXJiX3JpZ2h0bW9zdCA9IHJiX3ByZXYoXHUwMDI2bXotXHUwMDNldHJlZV9ub2RlKTtcbi1cbi1cdHJiX2VyYXNlKFx1MDAyNm16LVx1MDAzZXRyZWVfbm9kZSwgXHUwMDI2bWN0ei1cdTAwM2VyYl9yb290KTtcbi1cdG16LVx1MDAzZW9uX3RyZWUgPSBmYWxzZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWQoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKm1jdHopXG4te1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0X19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChteiwgbWN0eik7XG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLX1cbi1cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzb2Z0X2xpbWl0X2V4Y2VzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHBhZ2VfY291bnRlcl9yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSk7XG4tXHR1bnNpZ25lZCBsb25nIHNvZnRfbGltaXQgPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNlc29mdF9saW1pdCk7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2VzcyA9IDA7XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIHNvZnRfbGltaXQpXG4tXHRcdGV4Y2VzcyA9IG5yX3BhZ2VzIC0gc29mdF9saW1pdDtcbi1cbi1cdHJldHVybiBleGNlc3M7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIG1lbWNnMV91cGRhdGVfdHJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLVx0dW5zaWduZWQgbG9uZyBleGNlc3M7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6O1xuLVxuLVx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG4tXHRcdGlmIChzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZykpXG4tXHRcdFx0bHJ1X2dlbl9zb2Z0X3JlY2xhaW0obWVtY2csIG5pZCk7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdG1jdHogPSBzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtuaWRdO1xuLVx0aWYgKCFtY3R6KVxuLVx0XHRyZXR1cm47XG4tXHQvKlxuLVx0ICogTmVjZXNzYXJ5IHRvIHVwZGF0ZSBhbGwgYW5jZXN0b3JzIHdoZW4gaGllcmFyY2h5IGlzIHVzZWQuXG4tXHQgKiBiZWNhdXNlIHRoZWlyIGV2ZW50IGNvdW50ZXIgaXMgbm90IHRvdWNoZWQuXG4tXHQgKi9cbi1cdGZvciAoOyBtZW1jZzsgbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZykpIHtcbi1cdFx0bXogPSBtZW1jZy1cdTAwM2Vub2RlaW5mb1tuaWRdO1xuLVx0XHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2VzcyhtZW1jZyk7XG4tXHRcdC8qXG4tXHRcdCAqIFdlIGhhdmUgdG8gdXBkYXRlIHRoZSB0cmVlIGlmIG16IGlzIG9uIFJCLXRyZWUgb3Jcbi1cdFx0ICogbWVtIGlzIG92ZXIgaXRzIHNvZnRsaW1pdC5cbi1cdFx0ICovXG4tXHRcdGlmIChleGNlc3MgfHwgbXotXHUwMDNlb25fdHJlZSkge1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bWN0ei1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdFx0LyogaWYgb24tdHJlZSwgcmVtb3ZlIGl0ICovXG4tXHRcdFx0aWYgKG16LVx1MDAzZW9uX3RyZWUpXG4tXHRcdFx0XHRfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEluc2VydCBhZ2Fpbi4gbXotXHUwMDNldXNhZ2VfaW5fZXhjZXNzIHdpbGwgYmUgdXBkYXRlZC5cbi1cdFx0XHQgKiBJZiBleGNlc3MgaXMgMCwgbm8gdHJlZSBvcHMuXG4tXHRcdFx0ICovXG4tXHRcdFx0X19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChteiwgbWN0eiwgZXhjZXNzKTtcbi1cdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1jdHotXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHR9XG4tXHR9XG4tfVxuLVxuLXZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICptY3R6O1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0aW50IG5pZDtcbi1cbi1cdGZvcl9lYWNoX25vZGUobmlkKSB7XG4tXHRcdG16ID0gbWVtY2ctXHUwMDNlbm9kZWluZm9bbmlkXTtcbi1cdFx0bWN0eiA9IHNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW25pZF07XG4tXHRcdGlmIChtY3R6KVxuLVx0XHRcdG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdH1cbi19XG4tXG4tc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpcbi1fX21lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUoc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eilcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXG4tcmV0cnk6XG4tXHRteiA9IE5VTEw7XG4tXHRpZiAoIW1jdHotXHUwMDNlcmJfcmlnaHRtb3N0KVxuLVx0XHRnb3RvIGRvbmU7XHRcdC8qIE5vdGhpbmcgdG8gcmVjbGFpbSBmcm9tICovXG4tXG4tXHRteiA9IHJiX2VudHJ5KG1jdHotXHUwMDNlcmJfcmlnaHRtb3N0LFxuLVx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgdHJlZV9ub2RlKTtcbi1cdC8qXG4tXHQgKiBSZW1vdmUgdGhlIG5vZGUgbm93IGJ1dCBzb21lb25lIGVsc2UgY2FuIGFkZCBpdCBiYWNrLFxuLVx0ICogd2Ugd2lsbCB0byBhZGQgaXQgYmFjayBhdCB0aGUgZW5kIG9mIHJlY2xhaW0gdG8gaXRzIGNvcnJlY3Rcbi1cdCAqIHBvc2l0aW9uIGluIHRoZSB0cmVlLlxuLVx0ICovXG4tXHRfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LCBtY3R6KTtcbi1cdGlmICghc29mdF9saW1pdF9leGNlc3MobXotXHUwMDNlbWVtY2cpIHx8XG4tXHQgICAgIWNzc190cnlnZXQoXHUwMDI2bXotXHUwMDNlbWVtY2ctXHUwMDNlY3NzKSlcbi1cdFx0Z290byByZXRyeTtcbi1kb25lOlxuLVx0cmV0dXJuIG16O1xuLX1cbi1cbi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKlxuLW1lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUoc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0eilcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXG4tXHRzcGluX2xvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXHRteiA9IF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShtY3R6KTtcbi1cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZtY3R6LVx1MDAzZWxvY2spO1xuLVx0cmV0dXJuIG16O1xuLX1cbi1cbi1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxuLVx0XHRcdFx0ICAgcGdfZGF0YV90ICpwZ2RhdCxcbi1cdFx0XHRcdCAgIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZClcbi17XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqdmljdGltID0gTlVMTDtcbi1cdGludCB0b3RhbCA9IDA7XG4tXHRpbnQgbG9vcCA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIGV4Y2Vzcztcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1fY29va2llIHJlY2xhaW0gPSB7XG4tXHRcdC5wZ2RhdCA9IHBnZGF0LFxuLVx0fTtcbi1cbi1cdGV4Y2VzcyA9IHNvZnRfbGltaXRfZXhjZXNzKHJvb3RfbWVtY2cpO1xuLVxuLVx0d2hpbGUgKDEpIHtcbi1cdFx0dmljdGltID0gbWVtX2Nncm91cF9pdGVyKHJvb3RfbWVtY2csIHZpY3RpbSwgXHUwMDI2cmVjbGFpbSk7XG4tXHRcdGlmICghdmljdGltKSB7XG4tXHRcdFx0bG9vcCsrO1xuLVx0XHRcdGlmIChsb29wIFx1MDAzZT0gMikge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIElmIHdlIGhhdmUgbm90IGJlZW4gYWJsZSB0byByZWNsYWltXG4tXHRcdFx0XHQgKiBhbnl0aGluZywgaXQgbWlnaHQgYmVjYXVzZSB0aGVyZSBhcmVcbi1cdFx0XHRcdCAqIG5vIHJlY2xhaW1hYmxlIHBhZ2VzIHVuZGVyIHRoaXMgaGllcmFyY2h5XG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGlmICghdG90YWwpXG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIFdlIHdhbnQgdG8gZG8gbW9yZSB0YXJnZXRlZCByZWNsYWltLlxuLVx0XHRcdFx0ICogZXhjZXNzIFx1MDAzZVx1MDAzZSAyIGlzIG5vdCB0byBleGNlc3NpdmUgc28gYXMgdG9cbi1cdFx0XHRcdCAqIHJlY2xhaW0gdG9vIG11Y2gsIG5vciB0b28gbGVzcyB0aGF0IHdlIGtlZXBcbi1cdFx0XHRcdCAqIGNvbWluZyBiYWNrIHRvIHJlY2xhaW0gZnJvbSB0aGlzIGNncm91cFxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRpZiAodG90YWwgXHUwMDNlPSAoZXhjZXNzIFx1MDAzZVx1MDAzZSAyKSB8fFxuLVx0XHRcdFx0XHQobG9vcCBcdTAwM2UgTUVNX0NHUk9VUF9NQVhfUkVDTEFJTV9MT09QUykpXG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVx0XHR0b3RhbCArPSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxuLVx0XHRcdFx0XHRwZ2RhdCwgXHUwMDI2bnJfc2Nhbm5lZCk7XG4tXHRcdCp0b3RhbF9zY2FubmVkICs9IG5yX3NjYW5uZWQ7XG4tXHRcdGlmICghc29mdF9saW1pdF9leGNlc3Mocm9vdF9tZW1jZykpXG4tXHRcdFx0YnJlYWs7XG4tXHR9XG4tXHRtZW1fY2dyb3VwX2l0ZXJfYnJlYWsocm9vdF9tZW1jZywgdmljdGltKTtcbi1cdHJldHVybiB0b3RhbDtcbi19XG4tXG4tdW5zaWduZWQgbG9uZyBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi1cdFx0XHRcdFx0ICAgIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyAqdG90YWxfc2Nhbm5lZClcbi17XG4tXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCA9IDA7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXosICpuZXh0X216ID0gTlVMTDtcbi1cdHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkO1xuLVx0aW50IGxvb3AgPSAwO1xuLVx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqbWN0ejtcbi1cdHVuc2lnbmVkIGxvbmcgZXhjZXNzO1xuLVxuLVx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGlmIChvcmRlciBcdTAwM2UgMClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRtY3R6ID0gc29mdF9saW1pdF90cmVlLnJiX3RyZWVfcGVyX25vZGVbcGdkYXQtXHUwMDNlbm9kZV9pZF07XG4tXG4tXHQvKlxuLVx0ICogRG8gbm90IGV2ZW4gYm90aGVyIHRvIGNoZWNrIHRoZSBsYXJnZXN0IG5vZGUgaWYgdGhlIHJvb3Rcbi1cdCAqIGlzIGVtcHR5LiBEbyBpdCBsb2NrbGVzcyB0byBwcmV2ZW50IGxvY2sgYm91bmNpbmcuIFJhY2VzXG4tXHQgKiBhcmUgYWNjZXB0YWJsZSBhcyBzb2Z0IGxpbWl0IGlzIGJlc3QgZWZmb3J0IGFueXdheS5cbi1cdCAqL1xuLVx0aWYgKCFtY3R6IHx8IFJCX0VNUFRZX1JPT1QoXHUwMDI2bWN0ei1cdTAwM2VyYl9yb290KSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHQvKlxuLVx0ICogVGhpcyBsb29wIGNhbiBydW4gYSB3aGlsZSwgc3BlY2lhbGx5IGlmIG1lbV9jZ3JvdXAncyBjb250aW51b3VzbHlcbi1cdCAqIGtlZXAgZXhjZWVkaW5nIHRoZWlyIHNvZnQgbGltaXQgYW5kIHB1dHRpbmcgdGhlIHN5c3RlbSB1bmRlclxuLVx0ICogcHJlc3N1cmVcbi1cdCAqL1xuLVx0ZG8ge1xuLVx0XHRpZiAobmV4dF9teilcbi1cdFx0XHRteiA9IG5leHRfbXo7XG4tXHRcdGVsc2Vcbi1cdFx0XHRteiA9IG1lbV9jZ3JvdXBfbGFyZ2VzdF9zb2Z0X2xpbWl0X25vZGUobWN0eik7XG4tXHRcdGlmICghbXopXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdHJlY2xhaW1lZCA9IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKG16LVx1MDAzZW1lbWNnLCBwZ2RhdCxcbi1cdFx0XHRcdFx0XHQgICAgZ2ZwX21hc2ssIHRvdGFsX3NjYW5uZWQpO1xuLVx0XHRucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xuLVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIElmIHdlIGZhaWxlZCB0byByZWNsYWltIGFueXRoaW5nIGZyb20gdGhpcyBtZW1vcnkgY2dyb3VwXG4tXHRcdCAqIGl0IGlzIHRpbWUgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBjZ3JvdXBcbi1cdFx0ICovXG4tXHRcdG5leHRfbXogPSBOVUxMO1xuLVx0XHRpZiAoIXJlY2xhaW1lZClcbi1cdFx0XHRuZXh0X216ID0gX19tZW1fY2dyb3VwX2xhcmdlc3Rfc29mdF9saW1pdF9ub2RlKG1jdHopO1xuLVxuLVx0XHRleGNlc3MgPSBzb2Z0X2xpbWl0X2V4Y2Vzcyhtei1cdTAwM2VtZW1jZyk7XG4tXHRcdC8qXG4tXHRcdCAqIE9uZSBzY2hvb2wgb2YgdGhvdWdodCBzYXlzIHRoYXQgd2Ugc2hvdWxkIG5vdCBhZGRcbi1cdFx0ICogYmFjayB0aGUgbm9kZSB0byB0aGUgdHJlZSBpZiByZWNsYWltIHJldHVybnMgMC5cbi1cdFx0ICogQnV0IG91ciByZWNsYWltIGNvdWxkIHJldHVybiAwLCBzaW1wbHkgYmVjYXVzZSBkdWVcbi1cdFx0ICogdG8gcHJpb3JpdHkgd2UgYXJlIGV4cG9zaW5nIGEgc21hbGxlciBzdWJzZXQgb2Zcbi1cdFx0ICogbWVtb3J5IHRvIHJlY2xhaW0gZnJvbS4gQ29uc2lkZXIgdGhpcyBhcyBhIGxvbmdlclxuLVx0XHQgKiB0ZXJtIFRPRE8uXG4tXHRcdCAqL1xuLVx0XHQvKiBJZiBleGNlc3MgPT0gMCwgbm8gdHJlZSBvcHMgKi9cbi1cdFx0X19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChteiwgbWN0eiwgZXhjZXNzKTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1jdHotXHUwMDNlbG9jayk7XG4tXHRcdGNzc19wdXQoXHUwMDI2bXotXHUwMDNlbWVtY2ctXHUwMDNlY3NzKTtcbi1cdFx0bG9vcCsrO1xuLVx0XHQvKlxuLVx0XHQgKiBDb3VsZCBub3QgcmVjbGFpbSBhbnl0aGluZyBhbmQgdGhlcmUgYXJlIG5vIG1vcmVcbi1cdFx0ICogbWVtIGNncm91cHMgdG8gdHJ5IG9yIHdlIHNlZW0gdG8gYmUgbG9vcGluZyB3aXRob3V0XG4tXHRcdCAqIHJlY2xhaW1pbmcgYW55dGhpbmcuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIW5yX3JlY2xhaW1lZCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQobmV4dF9teiA9PSBOVUxMIHx8XG4tXHRcdFx0bG9vcCBcdTAwM2UgTUVNX0NHUk9VUF9NQVhfU09GVF9MSU1JVF9SRUNMQUlNX0xPT1BTKSlcbi1cdFx0XHRicmVhaztcbi1cdH0gd2hpbGUgKCFucl9yZWNsYWltZWQpO1xuLVx0aWYgKG5leHRfbXopXG4tXHRcdGNzc19wdXQoXHUwMDI2bmV4dF9tei1cdTAwM2VtZW1jZy1cdTAwM2Vjc3MpO1xuLVx0cmV0dXJuIG5yX3JlY2xhaW1lZDtcbi19XG4tXG4gc3RhdGljIHU2NCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3JlYWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbiBcdFx0XHRcdHN0cnVjdCBjZnR5cGUgKmNmdClcbiB7XG5AQCAtNTExLDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdH1cbiB9XG4gXG4tLyogQ2dyb3VwMTogdGhyZXNob2xkIG5vdGlmaWNhdGlvbnMgXHUwMDI2IHNvZnRsaW1pdCB0cmVlIHVwZGF0ZXMgKi9cbisvKiBDZ3JvdXAxOiB0aHJlc2hvbGQgbm90aWZpY2F0aW9ucyAqL1xuIFxuIC8qXG4gICogUGVyIG1lbWNnIGV2ZW50IGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYXQgZXZlcnkgcGFnZWluL3BhZ2VvdXQuIFdpdGggVEhQLFxuQEAgLTUxOSwxNSArMjAwLDkgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF90aHJlc2hvbGQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuICAqIHRvIHRyaWdnZXIgc29tZSBwZXJpb2RpYyBldmVudHMuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBiZXR0ZXJcbiAgKiB0aGFuIHVzaW5nIGppZmZpZXMgZXRjLiB0byBoYW5kbGUgcGVyaW9kaWMgbWVtY2cgZXZlbnQuXG4gICovXG4tZW51bSBtZW1fY2dyb3VwX2V2ZW50c190YXJnZXQge1xuLVx0TUVNX0NHUk9VUF9UQVJHRVRfVEhSRVNILFxuLVx0TUVNX0NHUk9VUF9UQVJHRVRfU09GVExJTUlULFxuLVx0TUVNX0NHUk9VUF9OVEFSR0VUUyxcbi19O1xuLVxuIHN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VfZXZlbnRzO1xuLVx0dW5zaWduZWQgbG9uZyB0YXJnZXRzW01FTV9DR1JPVVBfTlRBUkdFVFNdO1xuK1x0dW5zaWduZWQgbG9uZyB0aHJlc2hvbGRfdGFyZ2V0O1xuIH07XG4gXG4gc3RhdGljIHZvaWQgbWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKVxuQEAgLTU0NCw1MyArMjE5LDI5IEBAIHN0YXRpYyB2b2lkIG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcylcbiB9XG4gXG4gI2RlZmluZSBUSFJFU0hPTERTX0VWRU5UU19UQVJHRVQgMTI4XG4tI2RlZmluZSBTT0ZUTElNSVRfRVZFTlRTX1RBUkdFVCAxMDI0XG4gXG4tc3RhdGljIGJvb2wgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRlbnVtIG1lbV9jZ3JvdXBfZXZlbnRzX3RhcmdldCB0YXJnZXQpXG4rc3RhdGljIGJvb2wgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWwsIG5leHQ7XG4gXG4gXHR2YWwgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2Vucl9wYWdlX2V2ZW50cyk7XG4tXHRuZXh0ID0gX190aGlzX2NwdV9yZWFkKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNldGFyZ2V0c1t0YXJnZXRdKTtcbitcdG5leHQgPSBfX3RoaXNfY3B1X3JlYWQobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0aHJlc2hvbGRfdGFyZ2V0KTtcbiBcdC8qIGZyb20gdGltZV9hZnRlcigpIGluIGppZmZpZXMuaCAqL1xuIFx0aWYgKChsb25nKShuZXh0IC0gdmFsKSBcdTAwM2MgMCkge1xuLVx0XHRzd2l0Y2ggKHRhcmdldCkge1xuLVx0XHRjYXNlIE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSDpcbi1cdFx0XHRuZXh0ID0gdmFsICsgVEhSRVNIT0xEU19FVkVOVFNfVEFSR0VUO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIE1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVDpcbi1cdFx0XHRuZXh0ID0gdmFsICsgU09GVExJTUlUX0VWRU5UU19UQVJHRVQ7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0X190aGlzX2NwdV93cml0ZShtZW1jZy1cdTAwM2VldmVudHNfcGVyY3B1LVx1MDAzZXRhcmdldHNbdGFyZ2V0XSwgbmV4dCk7XG4rXHRcdF9fdGhpc19jcHVfd3JpdGUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdS1cdTAwM2V0aHJlc2hvbGRfdGFyZ2V0LFxuK1x0XHRcdFx0IHZhbCArIFRIUkVTSE9MRFNfRVZFTlRTX1RBUkdFVCk7XG4gXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi0vKlxuLSAqIENoZWNrIGV2ZW50cyBpbiBvcmRlci5cbi0gKlxuLSAqL1xuLXN0YXRpYyB2b2lkIG1lbWNnMV9jaGVja19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxuK3N0YXRpYyB2b2lkIG1lbWNnMV9jaGVja19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogdGhyZXNob2xkIGV2ZW50IGlzIHRyaWdnZXJlZCBpbiBmaW5lciBncmFpbiB0aGFuIHNvZnQgbGltaXQgKi9cbi1cdGlmICh1bmxpa2VseShtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLFxuLVx0XHRcdFx0XHRcdE1FTV9DR1JPVVBfVEFSR0VUX1RIUkVTSCkpKSB7XG4tXHRcdGJvb2wgZG9fc29mdGxpbWl0O1xuLVxuLVx0XHRkb19zb2Z0bGltaXQgPSBtZW1jZzFfZXZlbnRfcmF0ZWxpbWl0KG1lbWNnLFxuLVx0XHRcdFx0XHRcdE1FTV9DR1JPVVBfVEFSR0VUX1NPRlRMSU1JVCk7XG4rXHRpZiAodW5saWtlbHkobWVtY2cxX2V2ZW50X3JhdGVsaW1pdChtZW1jZykpKVxuIFx0XHRtZW1fY2dyb3VwX3RocmVzaG9sZChtZW1jZyk7XG4tXHRcdGlmICh1bmxpa2VseShkb19zb2Z0bGltaXQpKVxuLVx0XHRcdG1lbWNnMV91cGRhdGVfdHJlZShtZW1jZywgbmlkKTtcbi1cdH1cbiB9XG4gXG4gdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5AQCAtNTk5LDcgKzI1MCw3IEBAIHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFxuIFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIFx0bWVtY2cxX2NoYXJnZV9zdGF0aXN0aWNzKG1lbWNnLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuLVx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZywgZm9saW9fbmlkKGZvbGlvKSk7XG4rXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnKTtcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG5AQCAtNjcyLDcgKzMyMyw3IEBAIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIFx0Vk1fV0FSTl9PTl9JUlFTX0VOQUJMRUQoKTtcbiBcdG1lbWNnMV9jaGFyZ2Vfc3RhdGlzdGljcyhtZW1jZywgLWZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gXHRwcmVlbXB0X2VuYWJsZV9uZXN0ZWQoKTtcbi1cdG1lbWNnMV9jaGVja19ldmVudHMobWVtY2csIGZvbGlvX25pZChmb2xpbykpO1xuK1x0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7XG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdG9ial9jZ3JvdXBfcHV0KG9iamNnKTtcbkBAIC03MjYsMTQgKzM3NywxNCBAQCB2b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbiAjZW5kaWZcbiBcbiB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcbi1cdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSwgaW50IG5pZClcbitcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIFx0Y291bnRfbWVtY2dfZXZlbnRzKG1lbWNnLCBQR1BHT1VULCBwZ3Bnb3V0KTtcbiBcdF9fdGhpc19jcHVfYWRkKG1lbWNnLVx1MDAzZWV2ZW50c19wZXJjcHUtXHUwMDNlbnJfcGFnZV9ldmVudHMsIG5yX21lbW9yeSk7XG4tXHRtZW1jZzFfY2hlY2tfZXZlbnRzKG1lbWNnLCBuaWQpO1xuK1x0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7XG4gXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuIFxuQEAgLTI1NjYsMjIgKzIyMTcsMyBAQCB2b2lkIG1lbWNnMV9mcmVlX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0ZnJlZV9wZXJjcHUobWVtY2ctXHUwMDNlZXZlbnRzX3BlcmNwdSk7XG4gfVxuLVxuLXN0YXRpYyBpbnQgX19pbml0IG1lbWNnMV9pbml0KHZvaWQpXG4te1xuLVx0aW50IG5vZGU7XG4tXG4tXHRmb3JfZWFjaF9ub2RlKG5vZGUpIHtcbi1cdFx0c3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqcnRwbjtcbi1cbi1cdFx0cnRwbiA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKnJ0cG4pLCBHRlBfS0VSTkVMLCBub2RlKTtcbi1cbi1cdFx0cnRwbi1cdTAwM2VyYl9yb290ID0gUkJfUk9PVDtcbi1cdFx0cnRwbi1cdTAwM2VyYl9yaWdodG1vc3QgPSBOVUxMO1xuLVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZydHBuLVx1MDAzZWxvY2spO1xuLVx0XHRzb2Z0X2xpbWl0X3RyZWUucmJfdHJlZV9wZXJfbm9kZVtub2RlXSA9IHJ0cG47XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tc3Vic3lzX2luaXRjYWxsKG1lbWNnMV9pbml0KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmhcbmluZGV4IDFlMzk0MjY5YzYxM2QuLmI5YTIxZjBmZDJjM2EgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuaFxuQEAgLTQxLDEyICs0MSw2IEBAIGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gXG4gdm9pZCBtZW1jZzFfbWVtY2dfaW5pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLXZvaWQgbWVtY2cxX3JlbW92ZV9mcm9tX3RyZWVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi17XG4tXHRXUklURV9PTkNFKG1lbWNnLVx1MDAzZXNvZnRfbGltaXQsIFBBR0VfQ09VTlRFUl9NQVgpO1xuLX1cbiBcbiBzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQ7XG4gdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbkBAIC02NSw3ICs1OSw3IEBAIHZvaWQgbWVtY2cxX29vbV9yZWNvdmVyKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gXG4gdm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuIHZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBwZ3Bnb3V0LFxuLVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5LCBpbnQgbmlkKTtcbitcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7XG4gXG4gdm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcyk7XG4gdm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbkBAIC05OCw4ICs5Miw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfYWxsb2NfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgeyByZXR1cm4gdHJ1ZTtcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2cxX21lbWNnX2luaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc29mdF9saW1pdF9yZXNldChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gXG4gc3RhdGljIGlubGluZSBib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZClcbkBAIC0xMTUsNyArMTA3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIHBncGdvdXQsXG4tXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSwgaW50IG5pZCkge31cbitcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbnJfbWVtb3J5KSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcykge31cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IGJmZDBhNzRmYWM5MjMuLjMwNjM2YjlkOTY3MzkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTQyNTcsNyArNDI1Nyw2IEBAIG1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuIFx0XHRyZXR1cm4gRVJSX0NBU1QobWVtY2cpO1xuIFxuIFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSwgUEFHRV9DT1VOVEVSX01BWCk7XG4tXHRtZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7XG4gI2lmZGVmIENPTkZJR19aU1dBUFxuIFx0bWVtY2ctXHUwMDNlenN3YXBfbWF4ID0gUEFHRV9DT1VOVEVSX01BWDtcbiBcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlenN3YXBfd3JpdGViYWNrLCB0cnVlKTtcbkBAIC00NDI5LDcgKzQ0MjgsNiBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19mcmVlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXG4gXHR2bXByZXNzdXJlX2NsZWFudXAoXHUwMDI2bWVtY2ctXHUwMDNldm1wcmVzc3VyZSk7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm1lbWNnLVx1MDAzZWhpZ2hfd29yayk7XG4tXHRtZW1jZzFfcmVtb3ZlX2Zyb21fdHJlZXMobWVtY2cpO1xuIFx0ZnJlZV9zaHJpbmtlcl9pbmZvKG1lbWNnKTtcbiBcdG1lbV9jZ3JvdXBfZnJlZShtZW1jZyk7XG4gfVxuQEAgLTQ0NjUsNyArNDQ2Myw2IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gXHRwYWdlX2NvdW50ZXJfc2V0X21pbihcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIDApO1xuIFx0cGFnZV9jb3VudGVyX3NldF9sb3coXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5LCAwKTtcbiBcdHBhZ2VfY291bnRlcl9zZXRfaGlnaChcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnksIFBBR0VfQ09VTlRFUl9NQVgpO1xuLVx0bWVtY2cxX3NvZnRfbGltaXRfcmVzZXQobWVtY2cpO1xuIFx0cGFnZV9jb3VudGVyX3NldF9oaWdoKFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xuIFx0bWVtY2dfd2JfZG9tYWluX3NpemVfY2hhbmdlZChtZW1jZyk7XG4gfVxuQEAgLTUzMzEsNyArNTMyOCw2IEBAIHN0cnVjdCB1bmNoYXJnZV9nYXRoZXIge1xuIFx0dW5zaWduZWQgbG9uZyBucl9tZW1vcnk7XG4gXHR1bnNpZ25lZCBsb25nIHBncGdvdXQ7XG4gXHR1bnNpZ25lZCBsb25nIG5yX2ttZW07XG4tXHRpbnQgbmlkO1xuIH07XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHVuY2hhcmdlX2dhdGhlcl9jbGVhcihzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcbkBAIC01MzU0LDcgKzUzNTAsNyBAQCBzdGF0aWMgdm9pZCB1bmNoYXJnZV9iYXRjaChjb25zdCBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyICp1ZylcbiBcdFx0bWVtY2cxX29vbV9yZWNvdmVyKG1lbWNnKTtcbiBcdH1cbiBcbi1cdG1lbWNnMV91bmNoYXJnZV9iYXRjaChtZW1jZywgdWctXHUwMDNlcGdwZ291dCwgdWctXHUwMDNlbnJfbWVtb3J5LCB1Zy1cdTAwM2VuaWQpO1xuK1x0bWVtY2cxX3VuY2hhcmdlX2JhdGNoKG1lbWNnLCB1Zy1cdTAwM2VwZ3Bnb3V0LCB1Zy1cdTAwM2Vucl9tZW1vcnkpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHQvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIHVuY2hhcmdlX2ZvbGlvICovXG5AQCAtNTM4Myw3ICs1Mzc5LDYgQEAgc3RhdGljIHZvaWQgdW5jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHVuY2hhcmdlX2dhdGhlciAqdWcpXG4gXHRcdFx0dW5jaGFyZ2VfZ2F0aGVyX2NsZWFyKHVnKTtcbiBcdFx0fVxuIFx0XHR1Zy1cdTAwM2VvYmpjZyA9IG9iamNnO1xuLVx0XHR1Zy1cdTAwM2VuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xuIFxuIFx0XHQvKiBwYWlycyB3aXRoIG9ial9jZ3JvdXBfcHV0IGluIHVuY2hhcmdlX2JhdGNoICovXG4gXHRcdG9ial9jZ3JvdXBfZ2V0KG9iamNnKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBmZGQxMzI5OWEwNGE5Li5kZWIwODdjNTcwMDdkIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDM3Myw3ICs0MzczLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXG4gZW51bSB7XG4gXHRNRU1DR19MUlVfTk9QLFxuLVx0TUVNQ0dfTFJVX0hFQUQsXG4gXHRNRU1DR19MUlVfVEFJTCxcbiBcdE1FTUNHX0xSVV9PTEQsXG4gXHRNRU1DR19MUlVfWU9VTkcsXG5AQCAtNDM5NSw5ICs0Mzk0LDcgQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4gXHRuZXcgPSBvbGQgPSBscnV2ZWMtXHUwMDNlbHJ1Z2VuLmdlbjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXG4tXHRpZiAob3AgPT0gTUVNQ0dfTFJVX0hFQUQpXG4tXHRcdHNlZyA9IE1FTUNHX0xSVV9IRUFEO1xuLVx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpXG4rXHRpZiAob3AgPT0gTUVNQ0dfTFJVX1RBSUwpXG4gXHRcdHNlZyA9IE1FTUNHX0xSVV9UQUlMO1xuIFx0ZWxzZSBpZiAob3AgPT0gTUVNQ0dfTFJVX09MRClcbiBcdFx0bmV3ID0gZ2V0X21lbWNnX2dlbihwZ2RhdC1cdTAwM2VtZW1jZ19scnUuc2VxKTtcbkBAIC00NDExLDcgKzQ0MDgsNyBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbiBcbiBcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbi5saXN0KTtcbiBcbi1cdGlmIChvcCA9PSBNRU1DR19MUlVfSEVBRCB8fCBvcCA9PSBNRU1DR19MUlVfT0xEKVxuK1x0aWYgKG9wID09IE1FTUNHX0xSVV9PTEQpXG4gXHRcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QsIFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XG4gXHRlbHNlXG4gXHRcdGhsaXN0X251bGxzX2FkZF90YWlsX3JjdShcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuLmxpc3QsIFx1MDAyNnBnZGF0LVx1MDAzZW1lbWNnX2xydS5maWZvW25ld11bYmluXSk7XG5AQCAtNDQ4OSwxNSArNDQ4Niw2IEBAIHZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdH1cbiB9XG4gXG4tdm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4te1xuLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbi1cbi1cdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNRU1DR19OUl9HRU5TICovXG4tXHRpZiAoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcbi1cdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfSEVBRCk7XG4tfVxuLVxuIGJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4ge1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbkBAIC02NDM5LDggKzY0MjcsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0c3RydWN0IHpvbmVyZWYgKno7XG4gXHRzdHJ1Y3Qgem9uZSAqem9uZTtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9yZWNsYWltZWQ7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3NvZnRfc2Nhbm5lZDtcbiBcdGdmcF90IG9yaWdfbWFzaztcbiBcdHBnX2RhdGFfdCAqbGFzdF9wZ2RhdCA9IE5VTEw7XG4gXHRwZ19kYXRhX3QgKmZpcnN0X3BnZGF0ID0gTlVMTDtcbkBAIC02NDgyLDM1ICs2NDY4LDE3IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdFx0XHRcdHNjLVx1MDAzZWNvbXBhY3Rpb25fcmVhZHkgPSB0cnVlO1xuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogU2hyaW5rIGVhY2ggbm9kZSBpbiB0aGUgem9uZWxpc3Qgb25jZS4gSWYgdGhlXG4tXHRcdFx0ICogem9uZWxpc3QgaXMgb3JkZXJlZCBieSB6b25lIChub3QgdGhlIGRlZmF1bHQpIHRoZW4gYVxuLVx0XHRcdCAqIG5vZGUgbWF5IGJlIHNocnVuayBtdWx0aXBsZSB0aW1lcyBidXQgaW4gdGhhdCBjYXNlXG4tXHRcdFx0ICogdGhlIHVzZXIgcHJlZmVycyBsb3dlciB6b25lcyBiZWluZyBwcmVzZXJ2ZWQuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBUaGlzIHN0ZWFscyBwYWdlcyBmcm9tIG1lbW9yeSBjZ3JvdXBzIG92ZXIgc29mdGxpbWl0XG4tXHRcdFx0ICogYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXMgYW5kXG4tXHRcdFx0ICogc2Nhbm5lZCBwYWdlcy4gVGhpcyB3b3JrcyBmb3IgZ2xvYmFsIG1lbW9yeSBwcmVzc3VyZVxuLVx0XHRcdCAqIGFuZCBiYWxhbmNpbmcsIG5vdCBmb3IgYSBtZW1jZydzIGxpbWl0LlxuLVx0XHRcdCAqL1xuLVx0XHRcdG5yX3NvZnRfc2Nhbm5lZCA9IDA7XG4tXHRcdFx0bnJfc29mdF9yZWNsYWltZWQgPSBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCxcbi1cdFx0XHRcdFx0XHRcdFx0ICAgICAgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZWdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdFx0XHQgICAgICBcdTAwMjZucl9zb2Z0X3NjYW5uZWQpO1xuLVx0XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCArPSBucl9zb2Z0X3JlY2xhaW1lZDtcbi1cdFx0XHRzYy1cdTAwM2Vucl9zY2FubmVkICs9IG5yX3NvZnRfc2Nhbm5lZDtcbi1cdFx0XHQvKiBuZWVkIHNvbWUgY2hlY2sgZm9yIGF2b2lkIG1vcmUgc2hyaW5rX3pvbmUoKSAqL1xuIFx0XHR9XG4gXG4gXHRcdGlmICghZmlyc3RfcGdkYXQpXG4gXHRcdFx0Zmlyc3RfcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG4gXG4tXHRcdC8qIFNlZSBjb21tZW50IGFib3V0IHNhbWUgY2hlY2sgZm9yIGdsb2JhbCByZWNsYWltIGFib3ZlICovXG4rXHRcdC8qXG4rXHRcdCAqIFNocmluayBlYWNoIG5vZGUgaW4gdGhlIHpvbmVsaXN0IG9uY2UuIElmIHRoZSB6b25lbGlzdCBpc1xuK1x0XHQgKiBvcmRlcmVkIGJ5IHpvbmUgKG5vdCB0aGUgZGVmYXVsdCkgdGhlbiBhIG5vZGUgbWF5IGJlIHNocnVua1xuK1x0XHQgKiBtdWx0aXBsZSB0aW1lcyBidXQgaW4gdGhhdCBjYXNlIHRoZSB1c2VyIHByZWZlcnMgbG93ZXIgem9uZXNcbitcdFx0ICogYmVpbmcgcHJlc2VydmVkLlxuK1x0XHQgKi9cbiBcdFx0aWYgKHpvbmUtXHUwMDNlem9uZV9wZ2RhdCA9PSBsYXN0X3BnZGF0KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRsYXN0X3BnZGF0ID0gem9uZS1cdTAwM2V6b25lX3BnZGF0O1xuQEAgLTY4MjUsNDcgKzY3OTMsNiBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbiBcbiAjaWZkZWYgQ09ORklHX01FTUNHXG4gXG4tLyogT25seSB1c2VkIGJ5IHNvZnQgbGltaXQgcmVjbGFpbS4gRG8gbm90IHJldXNlIGZvciBhbnl0aGluZyBlbHNlLiAqL1xuLXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuLVx0XHRcdFx0XHRcdHBnX2RhdGFfdCAqcGdkYXQsXG4tXHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqbnJfc2Nhbm5lZClcbi17XG4tXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcbi1cdFx0Lm5yX3RvX3JlY2xhaW0gPSBTV0FQX0NMVVNURVJfTUFYLFxuLVx0XHQudGFyZ2V0X21lbV9jZ3JvdXAgPSBtZW1jZyxcbi1cdFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxuLVx0XHQubWF5X3VubWFwID0gMSxcbi1cdFx0LnJlY2xhaW1faWR4ID0gTUFYX05SX1pPTkVTIC0gMSxcbi1cdFx0Lm1heV9zd2FwID0gIW5vc3dhcCxcbi1cdH07XG4tXG4tXHRXQVJOX09OX09OQ0UoIWN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZSk7XG4tXG4tXHRzYy5nZnBfbWFzayA9IChnZnBfbWFzayBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxuLVx0XHRcdChHRlBfSElHSFVTRVJfTU9WQUJMRSBcdTAwMjYgfkdGUF9SRUNMQUlNX01BU0spO1xuLVxuLVx0dHJhY2VfbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2JlZ2luKHNjLmdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdCAgICAgIHNjLm9yZGVyLFxuLVx0XHRcdFx0XHRcdCAgICAgIG1lbWNnKTtcbi1cbi1cdC8qXG4tXHQgKiBOT1RFOiBBbHRob3VnaCB3ZSBjYW4gZ2V0IHRoZSBwcmlvcml0eSBmaWVsZCwgdXNpbmcgaXRcbi1cdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxuLVx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XG4tXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xuLVx0ICogdGhlIHByaW9yaXR5IGFuZCBtYWtlIGl0IHplcm8uXG4tXHQgKi9cbi1cdHNocmlua19scnV2ZWMobHJ1dmVjLCBcdTAwMjZzYyk7XG4tXG4tXHR0cmFjZV9tbV92bXNjYW5fbWVtY2dfc29mdGxpbWl0X3JlY2xhaW1fZW5kKHNjLm5yX3JlY2xhaW1lZCwgbWVtY2cpO1xuLVxuLVx0Km5yX3NjYW5uZWQgPSBzYy5ucl9zY2FubmVkO1xuLVxuLVx0cmV0dXJuIHNjLm5yX3JlY2xhaW1lZDtcbi19XG4tXG4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdFx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwX21hc2ssXG5AQCAtNzE3MSw4ICs3MDk4LDYgQEAgY2xlYXJfcmVjbGFpbV9hY3RpdmUocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiBzdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuIHtcbiBcdGludCBpO1xuLVx0dW5zaWduZWQgbG9uZyBucl9zb2Z0X3JlY2xhaW1lZDtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfc29mdF9zY2FubmVkO1xuIFx0dW5zaWduZWQgbG9uZyBwZmxhZ3M7XG4gXHR1bnNpZ25lZCBsb25nIG5yX2Jvb3N0X3JlY2xhaW07XG4gXHR1bnNpZ25lZCBsb25nIHpvbmVfYm9vc3RzW01BWF9OUl9aT05FU10gPSB7IDAsIH07XG5AQCAtNzI3OCwxMiArNzIwMyw3IEBAIHN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdCAqL1xuIFx0XHRrc3dhcGRfYWdlX25vZGUocGdkYXQsIFx1MDAyNnNjKTtcbiBcbi1cdFx0LyogQ2FsbCBzb2Z0IGxpbWl0IHJlY2xhaW0gYmVmb3JlIGNhbGxpbmcgc2hyaW5rX25vZGUuICovXG4gXHRcdHNjLm5yX3NjYW5uZWQgPSAwO1xuLVx0XHRucl9zb2Z0X3NjYW5uZWQgPSAwO1xuLVx0XHRucl9zb2Z0X3JlY2xhaW1lZCA9IG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW0ocGdkYXQsIHNjLm9yZGVyLFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgc2MuZ2ZwX21hc2ssIFx1MDAyNm5yX3NvZnRfc2Nhbm5lZCk7XG4tXHRcdHNjLm5yX3JlY2xhaW1lZCArPSBucl9zb2Z0X3JlY2xhaW1lZDtcbiBcbiBcdFx0LypcbiBcdFx0ICogVGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8gcmFpc2UgdGhlIHNjYW5uaW5nIHByaW9yaXR5IGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0Mjo1NC4yMDIwMjcyMjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU2NTA3NTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHNlZWluZy4gVGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBicmVhayBkb3duIHRoZSBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuIEl0IGFwcGVhcnMgdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSByZW1vdmluZywgb3IgYXQgbGVhc3Qgc2lnbmlmaWNhbnRseSBjbGVhbmluZyB1cCwgc29mdCBsaW1pdCByZWNsYWltIGZ1bmN0aW9uYWxpdHkgZnJvbSBtZW1jZyB2MS4gVGhlIGNoYW5nZXMgYXJlIHF1aXRlIGV4dGVuc2l2ZS4gSSdtIHNlZWluZyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBgc29mdF9saW1pdF90cmVlYCwgYHVzYWdlX2luX2V4Y2Vzc2AsIGFuZCB0aGUgYHNvZnRfbGltaXRgIGZpZWxkIHdpdGhpbiBgbWVtX2Nncm91cGAgZ2V0dGluZyBheGVkLiBLZXkgZnVuY3Rpb25zIGxpa2UgYG1lbWNnMV9zb2Z0X2xpbWl0X3JlY2xhaW1gLCBgbWVtY2cxX3VwZGF0ZV90cmVlYCwgYW5kIHNldmVyYWwgb3RoZXJzIGFyZSBiZWluZyBkZXByZWNhdGVkIHRvby5cblxuU3BlY2lmaWNhbGx5LCBJIGFtIHNlZWluZyB0aGVzZSBrZXkgY2hhbmdlczpcbi0gYHN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGVgIGFuZCBgc29mdF9saW1pdF90cmVlYCBhcmUgZ29uZSBmcm9tIGBtbS9tZW1jb250cm9sLXYxLmNgLlxuLSBNZW1iZXJzIGluIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAgKGB0cmVlX25vZGVgLCBgdXNhZ2VfaW5fZXhjZXNzYCwgYG9uX3RyZWVgKSBhcmUgZ29uZSwgbm93IHdpdGggc29tZSBwYWRkaW5nIGFkanVzdG1lbnRzLlxuLSBUaGUgYHNvZnRfbGltaXRgIGZpZWxkIGlzIGFsc28gZ29uZSBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAuXG4tIFJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBiZWluZyByZW1vdmVkLCBzdWNoIGFzIGBtZW1jZzFfc29mdF9saW1pdF9yZWNsYWltYCwgYG1lbWNnMV91cGRhdGVfdHJlZWAsIGBfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkYCwgYF9fbWVtX2Nncm91cF9yZW1vdmVfZXhjZWVkZWRgLCBgbWVtX2Nncm91cF9zb2Z0X3JlY2xhaW1gIGFtb25nIG90aGVycy5cbi0gVGhlIGBtZW1jZzFfZXZlbnRzX3BlcmNwdWAgc3RydWN0IGhhcyBhIHNpZ25pZmljYW50IGNoYW5nZSwgd2hlcmUgYHRhcmdldHNbTUVNX0NHUk9VUF9OVEFSR0VUU11gIGlzIHJlcGxhY2VkIGJ5IGB1bnNpZ25lZCBsb25nIHRocmVzaG9sZF90YXJnZXRgLlxuLSBgbWVtY2cxX2V2ZW50X3JhdGVsaW1pdGAgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYHRocmVzaG9sZF90YXJnZXRgIGluc3RlYWQgb2YgYW4gYXJyYXkgaW5kZXguXG4tIFRoZSBgbmlkYCBhcmd1bWVudCBpcyBhbHNvIHJlbW92ZWQgZnJvbSBzZXZlcmFsIGtleSBmdW5jdGlvbnMgKGBtZW1jZzFfY2hlY2tfZXZlbnRzYCwgYG1lbWNnMV91bmNoYXJnZV9iYXRjaGApIGFuZCBmcm9tIGBzdHJ1Y3QgdW5jaGFyZ2VfZ2F0aGVyYC5cbi0gV2l0aGluIGBtbS92bXNjYW4uY2AsIHRoZSBzb2Z0IGxpbWl0IHJlY2xhaW0gbG9naWMgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIGBzaHJpbmtfem9uZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGAsIHdpdGggYGxydV9nZW5fc29mdF9yZWNsYWltYCBhbmQgYE1FTUNHX0xSVV9IRUFEYCBhbHNvIGJlaW5nIHJlbW92ZWQuXG4tIEZpbmFsbHksIHRoZSBhc3NvY2lhdGVkIHRyYWNlIGV2ZW50cyAoYG1tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9iZWdpbmAgYW5kIGBlbmRgKSBpbiBgaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmhgLCBhbmQgZGVjbGFyYXRpb25zIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAsIGFyZSBhbHNvIGJlaW5nIHJlbW92ZWQuXG5cblNvLCB0aGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gcGVyZm9ybSBhIG1ldGljdWxvdXMgc2VhcmNoIHRvIGVuc3VyZSB0aGF0IGFueSByZW1haW5pbmcgdXNhZ2Ugb2YgYHRocmVzaG9sZF90YXJnZXRgIG9yIGFueSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBhcmUgcHJvcGVybHkgaGFuZGxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNsZWFudXAgaXMgdHJ1bHkgY29tcHJlaGVuc2l2ZSwgdGhhdCB0aGVyZSBhcmUgbm8gcmVtbmFudHMgdGhhdCBjb3VsZCBsZWFkIHRvIHN1YnRsZSBpc3N1ZXMuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIEtNU0FOLCBhcyB3ZSBuZWVkIHRvIGJlIHZlcnkgcmlnb3JvdXMgaW4gaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgZXhwb3NlIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcyNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQyOjU5Ljc2NzEwODI0MloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMzA2NTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV2ZW50c19wZXJjcHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xODQ9c3RhdGljIHZvaWQgbWVtX2Nncm91cF90aHJlc2hvbGQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTIwMi0gKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6MjAzOnN0cnVjdCBtZW1jZzFfZXZlbnRzX3BlcmNwdSB7XFxubW0vbWVtY29udHJvbC12MS5jLTIwNC1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VfZXZlbnRzO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIwOD1zdGF0aWMgdm9pZCBtZW1jZzFfY2hhcmdlX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjE3LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTg6XFx0X190aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZWV2ZW50c19wZXJjcHUtXFx1MDAzZW5yX3BhZ2VfZXZlbnRzLCBucl9wYWdlcyk7XFxubW0vbWVtY29udHJvbC12MS5jLTIxOS19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjIzPXN0YXRpYyBib29sIG1lbWNnMV9ldmVudF9yYXRlbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTIyNi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MjI3OlxcdHZhbCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdS1cXHUwMDNlbnJfcGFnZV9ldmVudHMpO1xcbm1tL21lbWNvbnRyb2wtdjEuYzoyMjg6XFx0bmV4dCA9IF9fdGhpc19jcHVfcmVhZChtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdS1cXHUwMDNldGhyZXNob2xkX3RhcmdldCk7XFxubW0vbWVtY29udHJvbC12MS5jLTIyOS1cXHQvKiBmcm9tIHRpbWVfYWZ0ZXIoKSBpbiBqaWZmaWVzLmggKi9cXG5tbS9tZW1jb250cm9sLXYxLmMtMjMwLVxcdGlmICgobG9uZykobmV4dCAtIHZhbCkgXFx1MDAzYyAwKSB7XFxubW0vbWVtY29udHJvbC12MS5jOjIzMTpcXHRcXHRfX3RoaXNfY3B1X3dyaXRlKG1lbWNnLVxcdTAwM2VldmVudHNfcGVyY3B1LVxcdTAwM2V0aHJlc2hvbGRfdGFyZ2V0LFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMzItXFx0XFx0XFx0XFx0IHZhbCArIFRIUkVTSE9MRFNfRVZFTlRTX1RBUkdFVCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9Mzc5PXZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBwZ3Bnb3V0LFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTM4NS1cXHRjb3VudF9tZW1jZ19ldmVudHMobWVtY2csIFBHUEdPVVQsIHBncGdvdXQpO1xcbm1tL21lbWNvbnRyb2wtdjEuYzozODY6XFx0X190aGlzX2NwdV9hZGQobWVtY2ctXFx1MDAzZWV2ZW50c19wZXJjcHUtXFx1MDAzZW5yX3BhZ2VfZXZlbnRzLCBucl9tZW1vcnkpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0zODctXFx0bWVtY2cxX2NoZWNrX2V2ZW50cyhtZW1jZyk7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MjIwOT1ib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjEwLXtcXG5tbS9tZW1jb250cm9sLXYxLmM6MjIxMTpcXHRtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdSA9IGFsbG9jX3BlcmNwdV9nZnAoc3RydWN0IG1lbWNnMV9ldmVudHNfcGVyY3B1LFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjEyLVxcdFxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUxfQUNDT1VOVCk7XFxubW0vbWVtY29udHJvbC12MS5jOjIyMTM6XFx0cmV0dXJuICEhbWVtY2ctXFx1MDAzZWV2ZW50c19wZXJjcHU7XFxubW0vbWVtY29udHJvbC12MS5jLTIyMTQtfVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIyMTY9dm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMjE3LXtcXG5tbS9tZW1jb250cm9sLXYxLmM6MjIxODpcXHRmcmVlX3BlcmNwdShtZW1jZy1cXHUwMDNlZXZlbnRzX3BlcmNwdSk7XFxubW0vbWVtY29udHJvbC12MS5jLTIyMTktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDo0Mjo1OS44NzA0MjQ2MzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzIxMzU0NDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBGZWF0dXJlIFJlbW92YWwgLSBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIHNvIEkndmUgY2FyZWZ1bGx5IHJldmlld2VkIHRoaXMgcGF0Y2gsIGFuZCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgcXVpdGUgc3RyYWlnaHRmb3J3YXJkLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLlxuXG5Jbml0aWFsbHksIEkgd2FudGVkIHRvIGNvbmZpcm0gdGhhdCBhbnkgcGVyLUNQVSBtZW1vcnkgYWxsb2NhdGlvbiB1c2VkIHplcm8taW5pdGlhbGl6ZWQgbWVtb3J5LiBgYWxsb2NfcGVyY3B1X2dmcGAgKGFuZCBieSBleHRlbnNpb24gYGFsbG9jX3BlcmNwdWApIGFyZSB6ZXJvaW5nIGFsbG9jYXRvcnMuIEkgc3BlY2lmaWNhbGx5IGNoZWNrZWQgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBmb2N1c2VzIG9uIHRoZSByZW1vdmFsIG9mIHRoZSBjZ3JvdXAgdjEgc29mdCBsaW1pdCBmZWF0dXJlLiBUaGlzIGluY2x1ZGVzOlxuXG4qICAgUmVtb3Zpbmcgb2Jzb2xldGUgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBsZWdhY3kgZmVhdHVyZS5cbiogICBEZWxldGluZyB1bnVzZWQgbG9jYWwgdmFyaWFibGVzIGluIGZ1bmN0aW9ucyBsaWtlIGBzaHJpbmtfem9uZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGAuXG4qICAgRWxpbWluYXRpbmcgdGhlIGBuaWRgIGZpZWxkIGZyb20gYHN0cnVjdCB1bmNoYXJnZV9nYXRoZXJgLlxuKiAgIENsZWFuaW5nIHVwIGNvbW1lbnRzIGFuZCBlbnVtcyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGAuXG5cbkdpdmVuIHRoZXNlIGNoYW5nZXMsIEkgcGVyZm9ybWVkIGEgdGhvcm91Z2ggYW5hbHlzaXMgdG8gcnVsZSBvdXQgYW55IHBvdGVudGlhbCBLTVNBTi1zcGVjaWZpYyBpc3N1ZXMuIEkgbG9va2VkIGZvcjpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBleHBvc2VkLiBOby5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBOby5cbjMuICBBbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIGxhdGVyIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIE5vLlxuNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gTm8uXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgY2xlYW4tdXAgYW5kIHNpbXBsaWZpY2F0aW9uIHBhdGNoIHJlbW92aW5nIGRlYWQgY29kZS4gSXQncyBlc3NlbnRpYWxseSByZW1vdmluZyBjb2RlIHJlbGF0ZWQgdG8gdGhlIGxlZ2FjeSBtZW1jZyB2MSBzb2Z0IGxpbWl0IHJlY2xhaW0gbG9naWMsIHdoaWNoIG1lYW5zIHNpbXBsaWZ5aW5nIHZhcmlvdXMgc3RydWN0cy4gSSBhbSBub3QgaW50cm9kdWNpbmcgYW55IG5ldyBhbGxvY2F0aW9ucyBhbmQvb3IgY29tcGxleCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCBvciB6ZXJvZWQuXG5cblRoaXMgcGF0Y2ggaXMganVzdCByZW1vdmluZyBjb2RlIHRoYXQgaGFkIGJlZW4gZGVwcmVjYXRlZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIG5vIEtNU0FOIGlzIG5lZWRlZC5cblxuSSd2ZSBhbHNvIGRvdWJsZS1jaGVja2VkIGFnYWluc3QgdGhlIEtNU0FOIGd1aWRhbmNlOlxuXG4qICAgVGhlIHBhdGNoIGRvZXNuJ3QgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuXG4qICAgQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgKHdoaWNoIGlzIGFsbW9zdCBub25lISkgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZC5cbiogICBUaGlzIHBhdGNoIGludHJvZHVjZXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy5cblxuR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGlzIGVudGlyZWx5IGFib3V0IHJlbW92aW5nIG9sZCBjb2RlIGFuZCBzaW1wbGlmeWluZyBleGlzdGluZyBzdHJ1Y3R1cmVzLCBhbmQgdGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGFsbG9jYXRpb25zIG9yIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoZXJlJ3Mgbm8ganVzdGlmaWNhdGlvbiBmb3IgS01TQU4gaGVyZS4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NzcsIk91dHB1dFRva2VucyI6MjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjQzOjA3LjA4Mzk3Mzk3M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlbW92ZXMgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgc29mdC1saW1pdCByZWNsYWltIG1lY2hhbmlzbSBhY3Jvc3MgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobWVtY29udHJvbCwgbWVtY29udHJvbC12MSwgYW5kIHZtc2NhbikuIFNwZWNpZmljYWxseTpcXG4xLiBJdCBkZWxldGVzIHRoZSBzb2Z0IGxpbWl0IFJCLXRyZWUgdHJhY2tpbmcgc3RydWN0dXJlcywgZnVuY3Rpb25zLCBhbmQgdHJhY2Vwb2ludHMuXFxuMi4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBzb2Z0X2xpbWl0YCBhbmQgYHRhcmdldHNgIGZpZWxkcyBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBzaW1wbGlmeWluZyBwZXItY3B1IGV2ZW50IHJhdGVsaW1pdGluZyB0byBqdXN0IGB0aHJlc2hvbGRfdGFyZ2V0YC5cXG4zLiBJdCByZW1vdmVzIHRoZSB1bnVzZWQgYG5pZGAgZmllbGQgZnJvbSBgc3RydWN0IHVuY2hhcmdlX2dhdGhlcmAgYW5kIHVudXNlZCBzY2FubmluZyBzdGF0aXN0aWNzIHZhcmlhYmxlcyBmcm9tIHJlY2xhaW0gcGF0aHMgKGBzaHJpbmtfem9uZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGApLlxcblxcblRoZSBjaGFuZ2VzIGNvbnNpc3Qgc3RyaWN0bHkgb2YgZGVhZC9kZXByZWNhdGVkIGNvZGUgcmVtb3ZhbCBhbmQgc3RydWN0dXJhbCBzaW1wbGlmaWNhdGlvbnMuIE5vIG5ldyBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlbW92ZXMgdGhlIGxlZ2FjeSBjZ3JvdXAgdjEgc29mdC1saW1pdCByZWNsYWltIG1lY2hhbmlzbSBhY3Jvc3MgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAobWVtY29udHJvbCwgbWVtY29udHJvbC12MSwgYW5kIHZtc2NhbikuIFNwZWNpZmljYWxseTpcXG4xLiBJdCBkZWxldGVzIHRoZSBzb2Z0IGxpbWl0IFJCLXRyZWUgdHJhY2tpbmcgc3RydWN0dXJlcywgZnVuY3Rpb25zLCBhbmQgdHJhY2Vwb2ludHMuXFxuMi4gSXQgcmVtb3ZlcyB0aGUgdW51c2VkIGBzb2Z0X2xpbWl0YCBhbmQgYHRhcmdldHNgIGZpZWxkcyBmcm9tIGBzdHJ1Y3QgbWVtX2Nncm91cGAgYW5kIGBzdHJ1Y3QgbWVtY2cxX2V2ZW50c19wZXJjcHVgLCBzaW1wbGlmeWluZyBwZXItY3B1IGV2ZW50IHJhdGVsaW1pdGluZyB0byBqdXN0IGB0aHJlc2hvbGRfdGFyZ2V0YC5cXG4zLiBJdCByZW1vdmVzIHRoZSB1bnVzZWQgYG5pZGAgZmllbGQgZnJvbSBgc3RydWN0IHVuY2hhcmdlX2dhdGhlcmAgYW5kIHVudXNlZCBzY2FubmluZyBzdGF0aXN0aWNzIHZhcmlhYmxlcyBmcm9tIHJlY2xhaW0gcGF0aHMgKGBzaHJpbmtfem9uZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGApLlxcblxcblRoZSBjaGFuZ2VzIGNvbnNpc3Qgc3RyaWN0bHkgb2YgZGVhZC9kZXByZWNhdGVkIGNvZGUgcmVtb3ZhbCBhbmQgc3RydWN0dXJhbCBzaW1wbGlmaWNhdGlvbnMuIE5vIG5ldyBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgb3IgYnVmZmVyIG1hbmlwdWxhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workfloww4xs2[1] Phase: Succeeded StartedAt: 2026-09-03 14:43:19 +0000 UTC FinishedAt: 2026-09-03 14:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 14:43:19 +0000 UTC FinishedAt: 2026-09-03 14:43:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2] Phase: Succeeded StartedAt: 2026-09-03 14:43:19 +0000 UTC FinishedAt: 2026-09-03 18:32:20 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 14:43:19 +0000 UTC FinishedAt: 2026-09-03 18:32:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 14:43:19 +0000 UTC FinishedAt: 2026-09-03 14:43:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 14:43:19 +0000 UTC FinishedAt: 2026-09-03 14:43:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-convert-artifact-1575470768/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 14:43:29 +0000 UTC FinishedAt: 2026-09-03 15:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 14:43:29 +0000 UTC FinishedAt: 2026-09-03 15:04:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d4a76815-a128-4b03-903a-1fed214cd75e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-convert-artifact-1575470768/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "0789a9ba-eb79-4733-970e-93d9e9aea164", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-build-action-3999773622/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 14:43:29 +0000 UTC FinishedAt: 2026-09-03 15:03:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d4a76815-a128-4b03-903a-1fed214cd75e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-convert-artifact-1575470768/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "0789a9ba-eb79-4733-970e-93d9e9aea164", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-build-action-3999773622/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 15:04:15 +0000 UTC FinishedAt: 2026-09-03 15:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 15:04:15 +0000 UTC FinishedAt: 2026-09-03 15:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 15:04:15 +0000 UTC FinishedAt: 2026-09-03 15:04:25 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 15:04:15 +0000 UTC FinishedAt: 2026-09-03 15:04:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-convert-artifact-2858598039/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 15:04:25 +0000 UTC FinishedAt: 2026-09-03 15:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 15:04:25 +0000 UTC FinishedAt: 2026-09-03 15:06:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0789a9ba-eb79-4733-970e-93d9e9aea164,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-build-action-3999773622/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 15:06:29 +0000 UTC FinishedAt: 2026-09-03 15:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 15:06:29 +0000 UTC FinishedAt: 2026-09-03 15:06:29 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 15:06:29 +0000 UTC FinishedAt: 2026-09-03 15:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 15:06:29 +0000 UTC FinishedAt: 2026-09-03 15:22:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d4a76815-a128-4b03-903a-1fed214cd75e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-convert-artifact-2858598039/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "48cceeee-f2cb-4bf2-b717-418c996b28b2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-build-action-4199412955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 15:06:29 +0000 UTC FinishedAt: 2026-09-03 15:22:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d4a76815-a128-4b03-903a-1fed214cd75e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-convert-artifact-2858598039/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "48cceeee-f2cb-4bf2-b717-418c996b28b2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-build-action-4199412955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 15:22:58 +0000 UTC FinishedAt: 2026-09-03 15:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 15:22:58 +0000 UTC FinishedAt: 2026-09-03 15:22:58 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 15:22:58 +0000 UTC FinishedAt: 2026-09-03 15:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 15:22:58 +0000 UTC FinishedAt: 2026-09-03 15:24:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*48cceeee-f2cb-4bf2-b717-418c996b28b2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-build-action-4199412955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 15:25:01 +0000 UTC FinishedAt: 2026-09-03 18:32:20 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 15:25:01 +0000 UTC FinishedAt: 2026-09-03 18:32:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0789a9ba-eb79-4733-970e-93d9e9aea164,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*48cceeee-f2cb-4bf2-b717-418c996b28b2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-build-action-3999773622/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-build-action-4199412955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 15:25:01 +0000 UTC FinishedAt: 2026-09-03 15:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 15:25:01 +0000 UTC FinishedAt: 2026-09-03 15:25:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-convert-artifact-3199818320/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 15:25:01 +0000 UTC FinishedAt: 2026-09-03 15:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 15:25:01 +0000 UTC FinishedAt: 2026-09-03 15:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 15:25:01 +0000 UTC FinishedAt: 2026-09-03 15:25:01 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 15:25:11 +0000 UTC FinishedAt: 2026-09-03 18:32:20 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4xs2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_soft_limit_write","mem_cgroup_soft_limit_read","memcg1_uncharge_batch","memcg1_commit_charge","__memcg1_swapout","lru_gen_rotate_memcg"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"14811b1d9ba0a1658adf136a1173a150d82c74d6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1","LRU_GEN"],"series_id":"547a9786-308b-4ebf-bdfe-7bc02d03eb9c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 15:25:11 +0000 UTC FinishedAt: 2026-09-03 18:32:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0789a9ba-eb79-4733-970e-93d9e9aea164,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*48cceeee-f2cb-4bf2-b717-418c996b28b2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-build-action-3999773622/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-build-action-4199412955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4xs2/series-workfloww4xs2-convert-artifact-3199818320/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}