Name: series-workflowdzbng Phase: Succeeded StartedAt: 2026-06-29 11:35:29 +0000 UTC FinishedAt: 2026-06-29 15:51:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[0] Phase: Succeeded StartedAt: 2026-06-29 11:35:29 +0000 UTC FinishedAt: 2026-06-29 11:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 11:35:29 +0000 UTC FinishedAt: 2026-06-29 11:43:00 +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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "ACPI" ], "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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "ACPI" ], "series_id": "4fb42990-363d-4513-a4dc-cab931d98fd5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "__kvm_arch_dirty_log_clear", "__kvm_arch_dirty_ring_clear", "dirty_bit_clear", "hacdbsirq_handler", "kvm_mmu_split_huge_pages", "kvm_get_dirty_log_protect", "kvm_clear_dirty_log_protect", "kvm_dirty_ring_reset" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtBQ1BJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXImIzM0OywKICAgICYjMzQ7X19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyJiMzNDssCiAgICAmIzM0O2RpcnR5X2JpdF9jbGVhciYjMzQ7LAogICAgJiMzNDtoYWNkYnNpcnFfaGFuZGxlciYjMzQ7LAogICAgJiMzNDtrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMmIzM0OywKICAgICYjMzQ7a3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdCYjMzQ7LAogICAgJiMzNDtrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3QmIzM0OywKICAgICYjMzQ7a3ZtX2RpcnR5X3JpbmdfcmVzZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBoYXJkd2FyZSBkaXJ0eSBiaXQgdHJhY2tpbmcgKEhEQlNTKSBhbmQgY2xlYW5pbmcgKEhBQ0RCUykgZm9yIEFSTTY0IEtWTS4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgbG9naWMsIGFkZGluZyBuZXcgaW9jdGwgcGF0aHMgYW5kIGludGVycnVwdCBoYW5kbGVycy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YzU4NjcxNzZmNzEwNDc2YjI4YjEzNmRiNWM4MzkzMWE3NWViZTg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTE6NDA6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaFxuaW5kZXggOGE1NGNhNmJhNjAyODIuLjg4MzMxNWU5ZDc5ZDk4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oXG5AQCAtNDUsNiAmIzQzOzQ1LDkgQEBcbiBcbiAjZGVmaW5lIEFDUElfTUFEVF9HSUNDX1RSQkUgIChvZmZzZXRvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0LCBcXFxuIFx0dHJiZV9pbnRlcnJ1cHQpICYjNDM7IHNpemVvZih1MTYpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1BJX01BRFRfR0lDQ19IQUNEQlNJUlEgIChvZmZzZXRvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0LCBcXFxuJiM0MztcdGhhY2Ric2lycV9nc2kpICYjNDM7IHNpemVvZih1MzIpKVxuIC8qXG4gICogQXJtwq4gRnVuY3Rpb25hbCBGaXhlZCBIYXJkd2FyZSBTcGVjaWZpY2F0aW9uIFZlcnNpb24gMS4yLlxuICAqIFRhYmxlIDI6IEFybSBBcmNoaXRlY3R1cmUgY29udGV4dCBsb3NzIGZsYWdzXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuaW5kZXggYTU3ODcwZmE5NmRiNWIuLjYyMGFlNGNkZGI3NjBhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG5AQCAtODYzLDYgJiM0Mzs4NjMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWZ0KHZvaWQpXG4gXHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQUZUKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGRic3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19IREJTUyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQUNEQlMpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfbXBhbSh2b2lkKVxuIHtcbiBcdHJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X01QQU0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDc2YzEwOTkzN2Q4ZGFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oXG5AQCAtMCwwICYjNDM7MSw2NyBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxuJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXHUwMDNjbGVvLmJyYXNAYXJtLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19BUk02NF9LVk1fRElSVFlfQklUX0hfX1xuJiM0MzsjZGVmaW5lIF9fQVJNNjRfS1ZNX0RJUlRZX0JJVF9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGd0YWJsZS5oXHUwMDNlXG4mIzQzO1xuJiM0MztlbnVtIGhhY2Ric19zdGF0dXMge1xuJiM0MztcdEhBQ0RCU19PRkYsXG4mIzQzO1x0SEFDREJTX0lETEUsXG4mIzQzO1x0SEFDREJTX1JVTk5JTkcsXG4mIzQzO1x0SEFDREJTX0VSUk9SXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaGFjZGJzIHtcbiYjNDM7XHRlbnVtIGhhY2Ric19zdGF0dXMgc3RhdHVzO1xuJiM0MztcdGludCBzaXplO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7REVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBoYWNkYnMsIGhhY2Ric19wY3ApO1xuJiM0MztcbiYjNDM7dm9pZCBfX2luaXQga3ZtX2hhY2Ric19pbml0KHZvaWQpO1xuJiM0Mzt2b2lkIGt2bV9oYWNkYnNfY3B1X3VwKHZvaWQpO1xuJiM0Mzt2b2lkIGt2bV9oYWNkYnNfY3B1X2Rvd24odm9pZCk7XG4mIzQzO1xuJiM0MztpbnQgX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2csXG4mIzQzO1x0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsXG4mIzQzO1x0XHRcdCAgICAgICBib29sICpmbHVzaCk7XG4mIzQzO1xuJiM0MztpbnQgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuJiM0MztcdFx0XHRcdGludCAqbnJfZW50cmllc19yZXNldCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdGhpc19jcHVfcmVhZChoYWNkYnNfcGNwLnN0YXR1cykgPT0gSEFDREJTX0lETEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIChrdm0tXHUwMDNlYXJjaC5tbXUucGd0LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2csXG4mIzQzO1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsXG4mIzQzO1x0XHRcdFx0XHQgICBib29sICpmbHVzaClcbiYjNDM7e1xuJiM0MztcdGlmICgha3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKGt2bSwgbWVtc2xvdCwgbG9nLCBiaXRtYXAsIGZsdXNoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuJiM0MztcdFx0XHRcdFx0ICAgIGludCAqbnJfZW50cmllc19yZXNldClcbiYjNDM7e1xuJiM0MztcdGlmICgha3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihrdm0sIHJpbmcsIG5yX2VudHJpZXNfcmVzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19BUk02NF9LVk1fRElSVFlfQklUX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuaW5kZXggNDFhODY4NzkzOGViNmIuLjY0NmZmODhlMDI1ODNmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbkBAIC05Myw2ICYjNDM7OTMsOCBAQCB0eXBlZGVmIHU2NCBrdm1fcHRlX3Q7XG4gXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9YTlx0R0VOTUFTSyg1NCwgNTMpXG4gXG4mIzQzOyNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNXHRCSVQoNTEpXG4mIzQzO1xuICNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzFfR1BcdEJJVCg1MClcbiBcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX1MyX1BFUk1TXHQoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SIHwgXFxcbkBAIC0yNTMsNiAmIzQzOzI1NSw3IEBAIHN0cnVjdCBrdm1fcGd0YWJsZV9tbV9vcHMge1xuIGVudW0ga3ZtX3BndGFibGVfc3RhZ2UyX2ZsYWdzIHtcbiBcdEtWTV9QR1RBQkxFX1MyX0lETUFQXHRcdFx0PSBCSVQoMCksXG4gXHRLVk1fUEdUQUJMRV9TMl9BU19TMVx0XHRcdD0gQklUKDEpLFxuJiM0MztcdEtWTV9QR1RBQkxFX1MyX0RCTVx0XHRcdD0gQklUKDIpLFxuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uNjJmNTZiYmQwYTY1YzggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuQEAgLTUyMyw2ICYjNDM7NTIzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnIzW10gPSB7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnI0W10gPSB7XG4gXHRTX0FSTTY0X0ZUUl9CSVRTKEZUUl9ISURERU4sIEZUUl9TVFJJQ1QsIEZUUl9MT1dFUl9TQUZFLCBJRF9BQTY0TU1GUjRfRUwxX0UySDBfU0hJRlQsIDQsIDApLFxuIFx0QVJNNjRfRlRSX0JJVFMoRlRSX0hJRERFTiwgRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRNTUZSNF9FTDFfTlZfZnJhY19TSElGVCwgNCwgMCksXG4mIzQzO1x0QVJNNjRfRlRSX0JJVFMoRlRSX0hJRERFTiwgRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRNTUZSNF9FTDFfSEFDREJTX1NISUZULCA0LCAwKSxcbiBcdEFSTTY0X0ZUUl9FTkQsXG4gfTtcbiBcbkBAIC0yMTMxLDYgJiM0MzsyMTMyLDExIEBAIHN0YXRpYyBib29sIGh2aGVfcG9zc2libGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxuIFx0cmV0dXJuIGFybTY0X3Rlc3Rfc3dfZmVhdHVyZV9vdmVycmlkZShBUk02NF9TV19GRUFUVVJFX09WRVJSSURFX0hWSEUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgaGFzX3ZoZV9oZGJzcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBjb3BlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpIFx1MDAyNlx1MDAyNiBoYXNfY3B1aWRfZmVhdHVyZShlbnRyeSwgY29wZSk7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKVxuIHtcbiBcdC8qXG5AQCAtMjc2Niw2ICYjNDM7Mjc3MiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcbiBcdFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgREJNKVxuIFx0fSxcbiAjZW5kaWZcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzYyA9IFwmIzM0O0hhcmR3YXJlIGRpcnR5IGJpdCBDbGVhbmluZ1wmIzM0OyxcbiYjNDM7XHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxuJiM0MztcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQUNEQlMsXG4mIzQzO1x0XHQubWF0Y2hlcyA9IGhhc19jcHVpZF9mZWF0dXJlLFxuJiM0MztcdFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSNF9FTDEsIEhBQ0RCUywgSU1QKVxuJiM0MztcdH0sXG4gI2lmZGVmIENPTkZJR19BUk02NF9IQUZUXG4gXHR7XG4gXHRcdC5kZXNjID0gXCYjMzQ7SGFyZHdhcmUgbWFuYWdlZCBBY2Nlc3MgRmxhZyBmb3IgVGFibGUgRGVzY3JpcHRvcnNcJiMzNDssXG5AQCAtMjc4MSw2ICYjNDM7Mjc5NCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcbiBcdFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSEFGVClcbiBcdH0sXG4gI2VuZGlmXG4mIzQzO1x0e1xuJiM0MztcdFx0LmRlc2MgPSBcJiMzNDtIYXJkd2FyZSBEaXJ0eSBzdGF0ZSB0cmFja2luZyBzdHJ1Y3R1cmUgKEhEQlNTKVwmIzM0OyxcbiYjNDM7XHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxuJiM0MztcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfSERCU1MsXG4mIzQzO1x0XHQubWF0Y2hlcyA9IGhhc192aGVfaGRic3MsXG4mIzQzO1x0XHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlIxX0VMMSwgSEFGREJTLCBIREJTUylcbiYjNDM7XHR9LFxuIFx0e1xuIFx0XHQuZGVzYyA9IFwmIzM0O0NSQzMyIGluc3RydWN0aW9uc1wmIzM0OyxcbiBcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfQ1JDMzIsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbmluZGV4IDQ0OTE1NGY5YTQ4NTJkLi5kYjg0ODdiZjczOGI3OCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbkBAIC0zNCw2ICYjNDM7MzQsNyBAQCBtZW51Y29uZmlnIEtWTVxuIFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4mIzQzO1x0c2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJXG4gXHRzZWxlY3QgU0NIRURfSU5GT1xuIFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG4gXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxuaW5kZXggNTk2MTJkMmYyNzdjMWQuLjZmYWFjZDg1NzM0NmIzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5AQCAtMjQsNyAmIzQzOzI0LDcgQEAga3ZtLXkgJiM0Mzs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXG4gXHQgdmdpYy92Z2ljLW1taW8ubyB2Z2ljL3ZnaWMtbW1pby12Mi5vIFxcXG4gXHQgdmdpYy92Z2ljLW1taW8tdjMubyB2Z2ljL3ZnaWMta3ZtLWRldmljZS5vIFxcXG4gXHQgdmdpYy92Z2ljLWl0cy5vIHZnaWMvdmdpYy1kZWJ1Zy5vIHZnaWMvdmdpYy12My1uZXN0ZWQubyBcXFxuLVx0IHZnaWMvdmdpYy12NS5vXG4mIzQzO1x0IHZnaWMvdmdpYy12NS5vIGRpcnR5X2JpdC5vXG4gXG4ga3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgJiM0Mzs9IHBtdS1lbXVsLm8gcG11Lm9cbiBrdm0tJChDT05GSUdfQVJNNjRfUFRSX0FVVEgpICAmIzQzOz0gcGF1dGgub1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbmluZGV4IDUwYWRmZmY3NWJlODJlLi5kYzFhNDYyOWFhZWI5OCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuQEAgLTQyLDYgJiM0Mzs0Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGt2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wdHJhdXRoLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zZWN0aW9ucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3N0YWNrdHJhY2UvbnZoZS5oXHUwMDNlXG4gXG5AQCAtMjMwNyw2ICYjNDM7MjMwOCw3IEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4gXG4gXHRrdm1fdmdpY19jcHVfdXAoKTtcbiBcdGt2bV90aW1lcl9jcHVfdXAoKTtcbiYjNDM7XHRrdm1faGFjZGJzX2NwdV91cCgpO1xuIFxuIFx0cHJlZW1wdF9lbmFibGUoKTtcbiBcbkBAIC0yMzE1LDYgJiM0MzsyMzE3LDcgQEAgaW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiBcbiB2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4ge1xuJiM0MztcdGt2bV9oYWNkYnNfY3B1X2Rvd24oKTtcbiBcdGt2bV90aW1lcl9jcHVfZG93bigpO1xuIFx0a3ZtX3ZnaWNfY3B1X2Rvd24oKTtcbiBcbkBAIC0yNDgxLDYgJiM0MzsyNDg0LDggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9zdWJzeXN0ZW1zKHZvaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRrdm1faGFjZGJzX2luaXQoKTtcbiYjNDM7XG4gXHRrdm1fcmVnaXN0ZXJfcGVyZl9jYWxsYmFja3MoKTtcbiBcbiBcdGVyciA9IGt2bV9oeXBfdHJhY2VfaW5pdCgpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jIGIvYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTkyODllYTczZDk2ZDlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXG5AQCAtMCwwICYjNDM7MSw0MTEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cbiYjNDM7ICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzIFx1MDAzY2xlby5icmFzQGFybS5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuJiM0MztcbiYjNDM7REVGSU5FX1BFUl9DUFUoc3RydWN0IGhhY2RicywgaGFjZGJzX3BjcCkgPSB7XG4mIzQzO1x0LnN0YXR1cyA9IEhBQ0RCU19PRkYsXG4mIzQzO1x0LnNpemUgPSAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogSERCU1MgZW50cnkgZmllbGQgZGVmaW5pdGlvbnMgKi9cbiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9WQUxJRCBCSVQoMClcbiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1NISUZUICgxKVxuJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfTUFTSyAoR0VOTUFTSygzLCAxKSlcbiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9UVFdMKHgpIFxcXG4mIzQzO1x0KCgoeCkgXHUwMDNjXHUwMDNjIEhEQlNTX0VOVFJZX1RUV0xfU0hJRlQpIFx1MDAyNiBIREJTU19FTlRSWV9UVFdMX01BU0spXG4mIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9SRVNWIEhEQlNTX0VOVFJZX1RUV0woLTQpXG4mIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfSVBBIEdFTk1BU0tfVUxMKDU1LCAxMilcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX3JvX2FmdGVyX2luaXQgaW50IGhhY2Ric2lycSA9IC0xO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaGFjZGJzX3N0YXJ0KHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR1NjQgYnI7XG4mIzQzO1x0LyogRWFjaCBlbnRyeSBpcyA4IGJ5dGVzICovXG4mIzQzO1x0aW50IHNpemVfYiA9IHNpemUgKiBzaXplb2YoaHdfZW50cmllc1swXSk7XG4mIzQzO1x0aW50IHNpemVfcDIgPSBtYXgocm91bmR1cF9wb3dfb2ZfdHdvKHNpemVfYiksIFBBR0VfU0laRSk7XG4mIzQzO1xuJiM0MztcdC8qIElmIG5vdCB1c2luZyB0aGUgZnVsbCBzaXplIG9mIHRoZSBhcnJheSwgcHV0IGEgc3RvcCBlbnRyeSBhdCB0aGUgZW5kICovXG4mIzQzO1x0aWYgKHNpemVfYiBcdTAwM2Mgc2l6ZV9wMilcbiYjNDM7XHRcdGh3X2VudHJpZXNbc2l6ZV0gPSBIREJTU19FTlRSWV9WQUxJRCB8IEhEQlNTX0VOVFJZX1RUV0xfUkVTVjtcbiYjNDM7XG4mIzQzO1x0c3lzcmVnX2NsZWFyX3NldF9zKFNZU19IQUNEQlNDT05TX0VMMixcbiYjNDM7XHRcdFx0ICAgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTiB8IEhBQ0RCU0NPTlNfRUwyX0lOREVYLCAwKTtcbiYjNDM7XG4mIzQzO1x0YnIgPSAodmlydF90b19waHlzKGh3X2VudHJpZXMpIFx1MDAyNiBIQUNEQlNCUl9FTDJfQkFERFJfTUFTSykgfFxuJiM0MztcdCAgICAgRklFTERfUFJFUChIQUNEQlNCUl9FTDJfU1osIGlsb2cyKHNpemVfcDIpIC0gMTIpIHxcbiYjNDM7XHQgICAgIEZJRUxEX1BSRVAoSEFDREJTQlJfRUwyX0VOLCAxKTtcbiYjNDM7XG4mIzQzO1x0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19SVU5OSU5HKTtcbiYjNDM7XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnNpemUsIHNpemUpO1xuJiM0MztcdHdyaXRlX3N5c3JlZ19zKGJyLCBTWVNfSEFDREJTQlJfRUwyKTtcbiYjNDM7XHRpc2IoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoYWNkYnNfc3RvcCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0d3JpdGVfc3lzcmVnX3MoMCwgU1lTX0hBQ0RCU0JSX0VMMik7XG4mIzQzO1x0aXNiKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfRVJST1IpIHtcbiYjNDM7XHRcdC8qIEluIGNhc2Ugb2YgZXJyb3IsIEhBQ0RCU0NPTlNfRUwyLklOREVYIHNob3VsZCBwb2ludCB0aGUgZmF1bHR5IGVudHJ5ICovXG4mIzQzO1x0XHR1NjQgY29ucyA9IHJlYWRfc3lzcmVnX3MoU1lTX0hBQ0RCU0NPTlNfRUwyKTtcbiYjNDM7XHRcdGludCBpZHggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpO1xuJiM0MztcbiYjNDM7XHRcdHRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfSURMRSk7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGlkeDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENsZWFycyBkaXJ0eS1iaXRzIGZvciBhbiBhcnJheSBvZiBwYWdlcyAoaHdfZW50cmllcykgdXNpbmcgSEFDREJTXG4mIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBjbGVhbmVkIGZyb20gdGhlIGFycmF5LiBJZiByZXR1cm5zIHZhbHVlIFx1MDAzYyBzaXplLFxuJiM0MzsgKlx0dGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSBwcm9jZXNzaW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBkaXJ0eV9iaXRfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmh3X2VudHJpZXMsIGludCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGhjcl9lbDI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJlZW1wdF9kaXNhYmxlKCk7XG4mIzQzO1xuJiM0MztcdGhjcl9lbDIgPSByZWFkX3N5c3JlZyhIQ1JfRUwyKTtcbiYjNDM7XHR3cml0ZV9zeXNyZWcoaGNyX2VsMiB8IEhDUl9FTDJfVk0sIEhDUl9FTDIpO1xuJiM0MztcdF9fbG9hZF9zdGFnZTIoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11KTtcbiYjNDM7XG4mIzQzO1x0aGFjZGJzX3N0YXJ0KGh3X2VudHJpZXMsIHNpemUpO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHR3ZmkoKTtcbiYjNDM7XHR9IHdoaWxlICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfUlVOTklORyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGhhY2Ric19zdG9wKCk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c3JlZyhoY3JfZWwyLCBIQ1JfRUwyKTtcbiYjNDM7XHRpc2IoKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBObyBEU0IgaXMgbmVlZGVkIGhlcmUsIGFzIGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KCkgdGhhdCBoYXBwZW5zXG4mIzQzO1x0ICogbGF0ZXIgaW4gZ2VuZXJpYyBkaXJ0eS1jbGVhbmluZyBjb2RlIGFscmVhZHkgcGVyZm9ybXMgYSBEU0IgYmVmb3JlXG4mIzQzO1x0ICogZG9pbmcgdGhlIFRMQkkuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdHByZWVtcHRfZW5hYmxlKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBoZGJzc190b19iaXRtYXAodTY0ICpoZGJzc19hcnJheSwgaW50IHN0YXJ0LCBpbnQgZW5kLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHcgPSAoZ3BhX3RvX2dmbihoZGJzc19hcnJheVtzdGFydF0pIC0gb2Zmc2V0KSAvIEJJVFNfUEVSX0xPTkc7XG4mIzQzO1x0dTY0IG1hc2sgPSAwO1xuJiM0MztcdGludCBpZHggPSBzdGFydDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0dTY0IGVudHJ5ID0gKGdwYV90b19nZm4oaGRic3NfYXJyYXlbaWR4XSkgLSBvZmZzZXQpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChlbnRyeSAvIEJJVFNfUEVSX0xPTkcgPT0gdykge1xuJiM0MztcdFx0XHRtYXNrIHw9IEJJVChlbnRyeSAlIEJJVFNfUEVSX0xPTkcpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0YXRvbWljX2xvbmdfb3IobWFzaywgKGF0b21pY19sb25nX3QgKilcdTAwMjZkaXJ0eV9iaXRtYXBbd10pO1xuJiM0MztcdFx0XHR3ID0gZW50cnkgLyBCSVRTX1BFUl9MT05HO1xuJiM0MztcdFx0XHRtYXNrID0gQklUKGVudHJ5ICUgQklUU19QRVJfTE9ORyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSB3aGlsZSAoJiM0MzsmIzQzO2lkeCBcdTAwM2MgZW5kKTtcbiYjNDM7XHRhdG9taWNfbG9uZ19vcihtYXNrLCAoYXRvbWljX2xvbmdfdCAqKVx1MDAyNmRpcnR5X2JpdG1hcFt3XSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0dTY0IHR0d2wsIGludCBpZHgsIGludCBlbnRyaWVzX3N6KVxuJiM0Mzt7XG4mIzQzO1x0d2hpbGUgKGlkeCBcdTAwM2MgZW50cmllc19zeikge1xuJiM0MztcdFx0aW50IGogPSBfX2ZmcygqbWFzayk7XG4mIzQzO1x0XHR1NjQgYSA9IGdmbl90b19ncGEob2Zmc2V0ICYjNDM7IGopO1xuJiM0MztcbiYjNDM7XHRcdGh3X2VudHJpZXNbaWR4JiM0MzsmIzQzO10gPSAoYSBcdTAwMjYgSERCU1NfRU5UUllfSVBBKSB8XG4mIzQzO1x0XHRcdFx0ICAgIHR0d2wgfFxuJiM0MztcdFx0XHRcdCAgICBIREJTU19FTlRSWV9WQUxJRDtcbiYjNDM7XG4mIzQzO1x0XHQqbWFzayBcdTAwMjY9IH5CSVQoaik7XG4mIzQzO1x0XHRpZiAoISptYXNrKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBpZHg7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCxcbiYjNDM7XHRcdFx0ICAgICAgIGJvb2wgKmZsdXNoKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwID0gbWVtc2xvdC1cdTAwM2VkaXJ0eV9iaXRtYXA7XG4mIzQzO1x0dTY0ICpod19lbnRyaWVzO1xuJiM0MztcdGNvbnN0IGludCBlbnRyaWVzX3N6ID0gUEFHRV9TSVpFIC8gc2l6ZW9mKCpod19lbnRyaWVzKTtcbiYjNDM7XHR1NjQgdHR3bDtcbiYjNDM7XHR1NjQgc3RhcnQsIGVuZDtcbiYjNDM7XHRnZm5fdCBiYXNlX2dmbjtcbiYjNDM7XHRncGFfdCBzcGxpdF9lbmQgPSAwO1xuJiM0MztcbiYjNDM7XHRod19lbnRyaWVzID0ga21hbGxvY19vYmpzKHU2NCwgZW50cmllc19zeiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFod19lbnRyaWVzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHR0d2wgPSBIREJTU19FTlRSWV9UVFdMKEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwpO1xuJiM0MztcbiYjNDM7XHRpZiAobG9nKSB7XG4mIzQzO1x0XHRzdGFydCA9IGxvZy1cdTAwM2VmaXJzdF9wYWdlIC8gQklUU19QRVJfTE9ORztcbiYjNDM7XHRcdGVuZCA9IHN0YXJ0ICYjNDM7IERJVl9ST1VORF9VUChsb2ctXHUwMDNlbnVtX3BhZ2VzLCBCSVRTX1BFUl9MT05HKTtcbiYjNDM7XHRcdGJhc2VfZ2ZuID0gbWVtc2xvdC1cdTAwM2ViYXNlX2dmbiAmIzQzOyBsb2ctXHUwMDNlZmlyc3RfcGFnZSAlIEJJVFNfUEVSX0xPTkc7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHN0YXJ0ID0gMDtcbiYjNDM7XHRcdGVuZCA9IGt2bV9kaXJ0eV9iaXRtYXBfYnl0ZXMobWVtc2xvdCkgLyBzaXplb2YobG9uZyk7XG4mIzQzO1x0XHRiYXNlX2dmbiA9IG1lbXNsb3QtXHUwMDNlYmFzZV9nZm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgbG9uZyBpID0gc3RhcnQ7IGkgXHUwMDNjIGVuZDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbWFzaztcbiYjNDM7XHRcdGdmbl90IG9mZnNldDtcbiYjNDM7XHRcdGF0b21pY19sb25nX3QgKnA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxvZykgeyAvKiBDbGVhbiBvbmx5IHdoYXQgaXMgaW4gdGhlIGlucHV0IGJpdG1hcCAqL1xuJiM0MztcdFx0XHRtYXNrID0gYml0bWFwW2ldO1xuJiM0MztcdFx0XHRpZiAoIW1hc2spXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRwID0gKGF0b21pY19sb25nX3QgKilcdTAwMjZkaXJ0eV9iaXRtYXBbaV07XG4mIzQzO1x0XHRcdG1hc2sgXHUwMDI2PSBhdG9taWNfbG9uZ19mZXRjaF9hbmRub3QobWFzaywgcCk7XG4mIzQzO1x0XHR9IGVsc2UgeyAvKiBDbGVhbiBldmVyeXRoaW5nICovXG4mIzQzO1x0XHRcdGlmICghZGlydHlfYml0bWFwW2ldKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0bWFzayA9IHhjaGcoXHUwMDI2ZGlydHlfYml0bWFwW2ldLCAwKTtcbiYjNDM7XHRcdFx0Yml0bWFwW2ldID0gbWFzaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW1hc2spXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG9mZnNldCA9IGJhc2VfZ2ZuICYjNDM7IGkgKiBCSVRTX1BFUl9MT05HO1xuJiM0MztcbiYjNDM7XHRcdGlmIChrdm1fZGlydHlfbG9nX21hbnVhbF9wcm90ZWN0X2FuZF9pbml0X3NldChrdm0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChvZmZzZXQgJiM0MzsgQklUU19QRVJfTE9ORyBcdTAwM2Ugc3BsaXRfZW5kKSkge1xuJiM0MztcdFx0XHRncGFfdCBzdGFydCA9IGdmbl90b19ncGEob2Zmc2V0ICYjNDM7IF9fZmZzKG1hc2spKTtcbiYjNDM7XHRcdFx0Z3BhX3QgZW5kID0gZ2ZuX3RvX2dwYShvZmZzZXQgJiM0MzsgX19mbHMobWFzaykgJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdFx0XHRrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoa3ZtLCBzdGFydCwgZW5kKTtcbiYjNDM7XHRcdFx0c3BsaXRfZW5kID0gZ3BhX3RvX2dmbihBTElHTl9ET1dOKGVuZCwgUE1EX1NJWkUpICYjNDM7IFBNRF9TSVpFIC0gMSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZG8ge1xuJiM0MztcdFx0XHRpZHggPSBtYXNrX3RvX2hkYnNzKFx1MDAyNm1hc2ssIGh3X2VudHJpZXMsIG9mZnNldCwgdHR3bCwgaWR4LCBlbnRyaWVzX3N6KTtcbiYjNDM7XHRcdFx0aWYgKGlkeCBcdTAwM2U9IGVudHJpZXNfc3opIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xuJiM0MztcdFx0XHRcdCpmbHVzaCA9ICpmbHVzaCB8fCByZXQgXHUwMDNlIDA7XG4mIzQzO1x0XHRcdFx0aWYgKHJldCAhPSBpZHgpIHtcbiYjNDM7XHRcdFx0XHRcdC8qIFNhdmUgYml0cyBub3QgY29udmVydGVkIGJhY2sgdG8gYml0bWFwICovXG4mIzQzO1x0XHRcdFx0XHRhdG9taWNfbG9uZ19vcihtYXNrLCAoYXRvbWljX2xvbmdfdCAqKVx1MDAyNmRpcnR5X2JpdG1hcFtpXSk7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHRcdGlkeCA9IDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH0gd2hpbGUgKG1hc2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlkeCAhPSAwKSB7XG4mIzQzO1x0XHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xuJiM0MztcdFx0KmZsdXNoID0gKmZsdXNoIHx8IHJldCBcdTAwM2UgMDtcbiYjNDM7XHR9XG4mIzQzO291dF9lcnI6XG4mIzQzO1x0aWYgKHVubGlrZWx5KHJldCAhPSBpZHgpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSW4gY2FzZSB0aGVyZSBpcyBhbiBlcnJvciBhbmQgbm90IGFsbCBlbnRyaWVzIGluIEhBQ0RCUyBnZXRcbiYjNDM7XHRcdCAqIGNsZWFuZWQsIHdlIGhhdmUgdG8gbWFyayB0aGUgZGlydHkgYml0cyBiYWNrIGluIHRoZSBiaXRtYXAsXG4mIzQzO1x0XHQgKiBhcyB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgc29mdHdhcmUgcm91dGluZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBFbnRyaWVzIHNob3VsZCBiZSBpbiBvcmRlciwgc2luY2UgdGhleSB3ZXJlIGV4dHJheGVkIGZyb21cbiYjNDM7XHRcdCAqIHRoZSBkaXJ0eS1iaXRtYXAsIHNvIGJhdGNoaW5nIHRoZSBhdG9taWMgd3JpdGVzIGlzIGVmZmljaWVudC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIGlkeClcbiYjNDM7XHRcdFx0aGRic3NfdG9fYml0bWFwKGh3X2VudHJpZXMsIHJldCwgaWR4LCBkaXJ0eV9iaXRtYXAsIG1lbXNsb3QtXHUwMDNlYmFzZV9nZm4pO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRrZnJlZShod19lbnRyaWVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZyxcbiYjNDM7XHRcdFx0XHRpbnQgKm5yX2VudHJpZXNfcmVzZXQpXG4mIzQzO3tcbiYjNDM7XHR1NjQgKmh3X2VudHJpZXM7XG4mIzQzO1x0dTY0IHNsb3Rfb2Zmc2V0ID0gMDtcbiYjNDM7XHR1NjQgdHR3bDtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcdHUzMiBzbG90ID0gLTE7XG4mIzQzO1xuJiM0MztcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVFI7XG4mIzQzO1xuJiM0MztcdHR0d2wgPSBIREJTU19FTlRSWV9UVFdMKEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwpO1xuJiM0MztcbiYjNDM7XHRod19lbnRyaWVzID0ga21hbGxvYyhtYXgocmluZy1cdTAwM2VzaXplICogc2l6ZW9mKHU2NCksIFBBR0VfU0laRSksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghaHdfZW50cmllcylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByaW5nLVx1MDAzZXNpemU7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZW50cnk7XG4mIzQzO1x0XHRnZm5fdCBnZm47XG4mIzQzO1xuJiM0MztcdFx0ZW50cnkgPSBcdTAwMjZyaW5nLVx1MDAzZWRpcnR5X2dmbnNbKHJpbmctXHUwMDNlcmVzZXRfaW5kZXggJiM0MzsgaSkgXHUwMDI2XG4mIzQzO1x0XHRcdFx0XHQgIChyaW5nLVx1MDAzZXNpemUgLSAxKV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFrdm1fZGlydHlfZ2ZuX2hhcnZlc3RlZChlbnRyeSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChlbnRyeS1cdTAwM2VzbG90ICE9IHNsb3QpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiYjNDM7XG4mIzQzO1x0XHRcdG1lbXNsb3QgPSBrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIGVudHJ5LVx1MDAzZXNsb3QpO1xuJiM0MztcdFx0XHRzbG90ID0gZW50cnktXHUwMDNlc2xvdDtcbiYjNDM7XHRcdFx0c2xvdF9vZmZzZXQgPSBtZW1zbG90LVx1MDAzZWJhc2VfZ2ZuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGdmbiA9IHNsb3Rfb2Zmc2V0ICYjNDM7IGVudHJ5LVx1MDAzZW9mZnNldDtcbiYjNDM7XG4mIzQzO1x0XHRod19lbnRyaWVzW2ldID0gKGdmbl90b19ncGEoZ2ZuKSBcdTAwMjYgSERCU1NfRU5UUllfSVBBKSB8XG4mIzQzO1x0XHRcdFx0dHR3bCB8IEhEQlNTX0VOVFJZX1ZBTElEO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGlydHlfYml0X2NsZWFyKGt2bSwgaHdfZW50cmllcywgaSk7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBhcyBpbnZhbGlkIGFsbCBzdWNjZXNzZnVsbHkgY2xlYW5lZCBlbnRyaWVzICovXG4mIzQzO1x0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIHJldDsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBrdm1fZGlydHlfZ2ZuICplbnRyeTtcbiYjNDM7XG4mIzQzO1x0XHRlbnRyeSA9IFx1MDAyNnJpbmctXHUwMDNlZGlydHlfZ2Zuc1socmluZy1cdTAwM2VyZXNldF9pbmRleCAmIzQzOyBqKSBcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdCAgKHJpbmctXHUwMDNlc2l6ZSAtIDEpXTtcbiYjNDM7XG4mIzQzO1x0XHRrdm1fZGlydHlfZ2ZuX3NldF9pbnZhbGlkKGVudHJ5KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEluIGNhc2Ugb2YgZXJyb3IsIHRyeSBzb2Z0d2FyZSBjbGVhbmluZyBmcm9tIHRoZSBmYXVsdGluZyBlbnRyeSAqL1xuJiM0MztcdHJpbmctXHUwMDNlcmVzZXRfaW5kZXggJiM0Mzs9IHJldDtcbiYjNDM7XHQqbnJfZW50cmllc19yZXNldCAmIzQzOz0gcmV0O1xuJiM0MztcbiYjNDM7XHRrZnJlZShod19lbnRyaWVzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgaSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgaGFjZGJzaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcGNwdSlcbiYjNDM7e1xuJiM0MztcdHU2NCBjb25zID0gcmVhZF9zeXNyZWdfcyhTWVNfSEFDREJTQ09OU19FTDIpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZXJyID0gRklFTERfR0VUKEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT04sIGNvbnMpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGVycikge1xuJiM0MztcdGNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9OT0Y6XG4mIzQzO1x0XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OX0lQQUhBQ0Y6XG4mIzQzO1x0XHQvKiBXaGVuIHNpemUgbm90IGEgcG93ZXIgb2YgdHdvIFx1MDAzZT0gNGssIGV4aXQgd2l0aCByZXNlcnZlZCBUVExXICovXG4mIzQzO1x0XHRpbnQgaW5kZXggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbmRleCBcdTAwM2U9IHRoaXNfY3B1X3JlYWQoaGFjZGJzX3BjcC5zaXplKSkge1xuJiM0MztcdFx0XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9TVFJVQ1RGOlxuJiM0MztcdGNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9JUEFGOlxuJiM0MztcdFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19FUlJPUik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrdm1faGFjZGJzX2NwdV91cCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGhhY2Ric2lycSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZW5hYmxlX3BlcmNwdV9pcnEoaGFjZGJzaXJxLCBJUlFfVFlQRV9MRVZFTF9ISUdIKTtcbiYjNDM7XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9oYWNkYnNfY3B1X2Rvd24odm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChoYWNkYnNpcnEgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRpc2FibGVfcGVyY3B1X2lycShoYWNkYnNpcnEpO1xuJiM0MztcdHRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfT0ZGKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGhhY2Ric19hY3BpX2dldF9pcnEodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJpY19pbnRlcnJ1cHQgKmdpY2M7XG4mIzQzO1x0dTMyIGdzaTtcbiYjNDM7XHRpbnQgaXJxO1xuJiM0MztcbiYjNDM7XHRnaWNjID0gYWNwaV9jcHVfZ2V0X21hZHRfZ2ljYyhzbXBfcHJvY2Vzc29yX2lkKCkpO1xuJiM0MztcdGlmIChnaWNjLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIEFDUElfTUFEVF9HSUNDX0hBQ0RCU0lSUSlcbiYjNDM7XHRcdHJldHVybiAtRU5YSU87XG4mIzQzO1xuJiM0MztcdGdzaSA9ICBnaWNjLVx1MDAzZWhhY2Ric2lycV9nc2k7XG4mIzQzO1xuJiM0MztcdGlycSA9IGFjcGlfcmVnaXN0ZXJfZ3NpKE5VTEwsIGdzaSwgQUNQSV9MRVZFTF9TRU5TSVRJVkUsIEFDUElfQUNUSVZFX0hJR0gpO1xuJiM0MztcdGlmIChpcnEgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7QUNQSTogVW5hYmxlIHRvIHJlZ2lzdGVyIEhBQ0RCUyBpbnRlcnJ1cHQ6ICVkXFxuXCYjMzQ7LCBnc2kpO1xuJiM0MztcdFx0cmV0dXJuIC1FTlhJTztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBpcnE7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBoYWNkYnNfYWNwaV9nZXRfaXJxKCkgKC1FTlhJTylcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0Mzt2b2lkIF9faW5pdCBrdm1faGFjZGJzX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBpcnE7XG4mIzQzO1xuJiM0MztcdC8qIEZFQVRfSEFDREJTIGlzIG9ubHkgc3VwcG9ydGVkIGlmIExpbnV4IHJ1bnMgaW4gRUwyIChWSEUpICovXG4mIzQzO1x0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKCkgfHwgIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpcnEgPSBoYWNkYnNfYWNwaV9nZXRfaXJxKCk7XG4mIzQzO1x0aWYgKGlycSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcXVlc3RfcGVyY3B1X2lycShpcnEsIGhhY2Ric2lycV9oYW5kbGVyLCBcJiMzNDtIQUNEQlNJUlFcJiMzNDssIFx1MDAyNmhhY2Ric19wY3ApIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRoYWNkYnNpcnEgPSBpcnE7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xuaW5kZXggOTFhN2RmYWQ2Njg2NjAuLmUxNjcyOWYwYjdiZDI0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xuQEAgLTczMSw5ICYjNDM7NzMxLDEzIEBAIHN0YXRpYyBpbnQgc3RhZ2UyX3NldF9wcm90X2F0dHIoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIGVudW0ga3ZtX3BndGFibGVfcHJvdCBwXG4gXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9SKVxuIFx0XHRhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUjtcbiBcbi1cdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXG4mIzQzO1x0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykge1xuIFx0XHRhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfVztcbiBcbiYjNDM7XHRcdGlmIChwZ3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9QR1RBQkxFX1MyX0RCTSlcbiYjNDM7XHRcdFx0YXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk07XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICgha3ZtX2xwYTJfaXNfZW5hYmxlZCgpKVxuIFx0XHRhdHRyIHw9IEZJRUxEX1BSRVAoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfU0gsIHNoKTtcbiBcbkBAIC0xMzY3LDkgJiM0MzsxMzcxLDEzIEBAIGludCBrdm1fcGd0YWJsZV9zdGFnZTJfcmVsYXhfcGVybXMoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIHU2NCBhZGRyLFxuIFx0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfUilcbiBcdFx0c2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUjtcbiBcbi1cdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXG4mIzQzO1x0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykge1xuIFx0XHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XO1xuIFxuJiM0MztcdFx0aWYgKHBndC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKVxuJiM0MztcdFx0XHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBzdGFnZTJfc2V0X3huX2F0dHIocHJvdCwgXHUwMDI2eG4pO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC0xNTg1LDYgJiM0MzsxNTkzLDkgQEAgaW50IF9fa3ZtX3BndGFibGVfc3RhZ2UyX2luaXQoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIHN0cnVjdCBrdm1fczJfbW11ICptbXUsXG4gXHRpZiAoIXBndC1cdTAwM2VwZ2QpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbiYjNDM7XHRcdGZsYWdzIHw9IEtWTV9QR1RBQkxFX1MyX0RCTTtcbiYjNDM7XG4gXHRwZ3QtXHUwMDNlaWFfYml0c1x0XHQ9IGlhX2JpdHM7XG4gXHRwZ3QtXHUwMDNlc3RhcnRfbGV2ZWxcdD0gc3RhcnRfbGV2ZWw7XG4gXHRwZ3QtXHUwMDNlbW1fb3BzXHRcdD0gbW1fb3BzO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbmluZGV4IDZjOTQxYWFhMTBjNjM5Li4yZjlkOTBjMzU2NjhiOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTExNyw4ICYjNDM7MTE3LDggQEAgc3RhdGljIGJvb2wgbmVlZF9zcGxpdF9tZW1jYWNoZV90b3B1cF9vcl9yZXNjaGVkKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBrdm1fbW11X21lbW9yeV9jYWNoZV9ucl9mcmVlX29iamVjdHMoY2FjaGUpIFx1MDAzYyBtaW47XG4gfVxuIFxuLXN0YXRpYyBpbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkcixcbi1cdFx0XHRcdCAgICBwaHlzX2FkZHJfdCBlbmQpXG4mIzQzO2ludCBrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLCBwaHlzX2FkZHJfdCBhZGRyLFxuJiM0MztcdFx0XHQgICAgIHBoeXNfYWRkcl90IGVuZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlO1xuIFx0c3RydWN0IGt2bV9wZ3RhYmxlICpwZ3Q7XG5AQCAtMTAyNyw4ICYjNDM7MTAyNywxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0KnBlcl9jcHVfcHRyKG1tdS1cdTAwM2VsYXN0X3ZjcHVfcmFuLCBjcHUpID0gLTE7XG4gXG4tXHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi9cbi1cdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbiYjNDM7XHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgaWYgc3lzdGVtIGhhcyBubyBIREJTUyAqL1xuJiM0MztcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbiYjNDM7XHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbiYjNDM7XG4gXHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87XG4gXG4gXHRtbXUtXHUwMDNlcGdkX3BoeXMgPSBfX3BhKHBndC1cdTAwM2VwZ2QpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLmJkMmMwYmI5OGRhNjFlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC02OSw4ICYjNDM7NjksMTAgQEAgSEFTX1ZBNTJcbiBIQVNfVklSVF9IT1NUX0VYVE5cbiBIQVNfV0ZYVFxuIEhBU19YTlhcbiYjNDM7SEFTX0hEQlNTXG4gSEFGVFxuIEhXX0RCTVxuJiM0MztIQUNEQlNcbiBLVk1fSFZIRVxuIEtWTV9QUk9URUNURURfTU9ERVxuIE1JU01BVENIRURfQ0FDSEVfVFlQRVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnIGIvYXJjaC9hcm02NC90b29scy9zeXNyZWdcbmluZGV4IGJjMTc4OGIxNjYyYjc2Li43YjdjM2Q2YTBmMDMwOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZ1xuQEAgLTQ2MzQsNiAmIzQzOzQ2MzQsMzYgQEAgRmllbGRcdDc6Nlx0U0wwXG4gRmllbGRcdDU6MFx0VDBTWlxuIEVuZFN5c3JlZ1xuIFxuJiM0MztTeXNyZWdcdEhBQ0RCU0JSX0VMMlx0M1x0NFx0Mlx0M1x0NFxuJiM0MztSZXMwXHQ2Mzo1NlxuJiM0MztGaWVsZFx0NTU6MTJcdEJBRERSXG4mIzQzO0ZpZWxkXHQxMVx0RU5cbiYjNDM7UmVzMFx0MTA6NFxuJiM0MztVbnNpZ25lZEVudW1cdDM6MFx0U1pcbiYjNDM7XHQwYjAwMDBcdDRLXG4mIzQzO1x0MGIwMDAxXHQ4S1xuJiM0MztcdDBiMDAxMFx0MTZLXG4mIzQzO1x0MGIwMDExXHQzMktcbiYjNDM7XHQwYjAxMDBcdDY0S1xuJiM0MztcdDBiMDEwMVx0MTI4S1xuJiM0MztcdDBiMDExMFx0MjU2S1xuJiM0MztcdDBiMDExMVx0NTEyS1xuJiM0MztcdDBiMTAwMFx0MU1cbiYjNDM7XHQwYjEwMDFcdDJNXG4mIzQzO0VuZEVudW1cbiYjNDM7RW5kU3lzcmVnXG4mIzQzO1xuJiM0MztTeXNyZWdcdEhBQ0RCU0NPTlNfRUwyXHQzXHQ0XHQyXHQzXHQ1XG4mIzQzO1Vuc2lnbmVkRW51bVx0NjM6NjJcdEVSUl9SRUFTT05cbiYjNDM7XHQwYjAwXHROT0ZcbiYjNDM7XHQwYjAxXHRTVFJVQ1RGXG4mIzQzO1x0MGIxMFx0SVBBRlxuJiM0MztcdDBiMTFcdElQQUhBQ0ZcbiYjNDM7RW5kRW51bVxuJiM0MztSZXMwXHQ2MToxOVxuJiM0MztGaWVsZFx0MTg6MFx0SU5ERVhcbiYjNDM7RW5kU3lzcmVnXG4mIzQzO1xuIFN5c3JlZ1x0R0NTQ1JfRUwyXHQzXHQ0XHQyXHQ1XHQwXG4gRmllbGRzXHRHQ1NDUl9FTHhcbiBFbmRTeXNyZWdcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwyLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmhcbmluZGV4IGJhZWY1MjUzNjdiNWM0Li5lYWVmYjQ5NGVmNTk3MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hY3BpL2FjdGJsMi5oXG5AQCAtMTQ0OSw2ICYjNDM7MTQ0OSw3IEBAIHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJpY19pbnRlcnJ1cHQge1xuIFx0dTE2IHRyYmVfaW50ZXJydXB0O1x0LyogQUNQSSA2LjUgKi9cbiBcdHUxNiBpYWZmaWQ7XHRcdC8qIEFDUEkgNi43ICovXG4gXHR1MzIgaXJzX2lkO1xuJiM0MztcdHUzMiBoYWNkYnNpcnFfZ3NpO1x0LyogQUNQSSA2LlggKi9cbiB9O1xuIFxuIC8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oIGIvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODQ5Mjk3OWQ2OTRlNzBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oXG5AQCAtMCwwICYjNDM7MSwzNCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxuJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXHUwMDNjbGVvLmJyYXNAYXJtLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19LVk1fRElSVFlfQklUX0hfX1xuJiM0MzsjZGVmaW5lIF9fS1ZNX0RJUlRZX0JJVF9IX19cbiYjNDM7XG4mIzQzOyNpZm5kZWYgQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVFxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX2NsZWFyX2RpcnR5X2xvZyAqbG9nLFxuJiM0MztcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxuJiM0MztcdFx0XHRcdFx0ICAgYm9vbCAqZmx1c2gpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVOWElPO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FTlhJTztcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2Vsc2UgLyogQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVQgKi9cbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0tWTV9ESVJUWV9CSVRfSF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfcmluZy5oIGIvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfcmluZy5oXG5pbmRleCBlYjEwZDg3YWRmN2Q1OS4uMTkwZDk3ZmNlNGE0MmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaFxuQEAgLTg0LDYgJiM0Mzs4NCwxOCBAQCB2b2lkIGt2bV9kaXJ0eV9yaW5nX3B1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc2xvdCwgdTY0IG9mZnNldCk7XG4gXG4gYm9vbCBrdm1fZGlydHlfcmluZ19jaGVja19yZXF1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fZGlydHlfZ2ZuX2hhcnZlc3RlZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Z2ZuLVx1MDAzZWZsYWdzKSBcdTAwMjYgS1ZNX0RJUlRZX0dGTl9GX1JFU0VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2RpcnR5X2dmbl9zZXRfaW52YWxpZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuJiM0Mzt7XG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Z2ZuLVx1MDAzZWZsYWdzLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdCk7XG4mIzQzO1xuIC8qIGZvciB1c2UgaW4gdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKi9cbiBzdHJ1Y3QgcGFnZSAqa3ZtX2RpcnR5X3JpbmdfZ2V0X3BhZ2Uoc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLCB1MzIgb2Zmc2V0KTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzFlLi43ZWE2ZWQ3Y2UyMDNhYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMTY2OSw2ICYjNDM7MTY2OSw5IEBAIGJvb2wga3ZtX2FyY2hfdmNwdV9wcmVlbXB0ZWRfaW5fa2VybmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fYXJjaF9wcmVfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQga3ZtX2FyY2hfY3JlYXRlX3ZtX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtKTtcbiBcbiYjNDM7aW50IGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHBoeXNfYWRkcl90IGFkZHIsXG4mIzQzO1x0XHRcdCAgICAgcGh5c19hZGRyX3QgZW5kKTtcbiYjNDM7XG4gI2lmbmRlZiBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0NcbiAvKlxuICAqIEFsbCBhcmNoaXRlY3R1cmVzIHRoYXQgd2FudCB0byB1c2UgdnphbGxvYyBjdXJyZW50bHkgYWxzb1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL0tjb25maWcgYi92aXJ0L2t2bS9LY29uZmlnXG5pbmRleCA3OTQ5NzZiODhjNmY5Ny4uZjg3NTdiNWI4NGIzZTAgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9LY29uZmlnXG5AQCAtMjAsNiAmIzQzOzIwLDkgQEAgY29uZmlnIEhBVkVfS1ZNX0lSUV9ST1VUSU5HXG4gY29uZmlnIEhBVkVfS1ZNX0RJUlRZX1JJTkdcbiAgICAgICAgYm9vbFxuIFxuJiM0Mztjb25maWcgSEFWRV9LVk1fSFdfRElSVFlfQklUXG4mIzQzOyAgICAgICBib29sXG4mIzQzO1xuICMgT25seSBzdHJvbmdseSBvcmRlcmVkIGFyY2hpdGVjdHVyZXMgY2FuIHNlbGVjdCB0aGlzLCBhcyBpdCBkb2VzbiYjMzk7dFxuICMgcHV0IGFueSBleHBsaWNpdCBjb25zdHJhaW50IG9uIHVzZXJzcGFjZSBvcmRlcmluZy4gVGhleSBjYW4gYWxzb1xuICMgc2VsZWN0IHRoZSBfQUNRX1JFTCB2ZXJzaW9uLlxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2RpcnR5X3JpbmcuYyBiL3ZpcnQva3ZtL2RpcnR5X3JpbmcuY1xuaW5kZXggNTcyYjg1NGVkZjc0MGQuLmZlNGU3ZGE2Y2M0YTZhIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZGlydHlfcmluZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9kaXJ0eV9yaW5nLmNcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3ZtX21tLmhcJiMzNDtcbiBcbkBAIC01MCwxOCAmIzQzOzUxLDMwIEBAIHN0YXRpYyBib29sIGt2bV9kaXJ0eV9yaW5nX2Z1bGwoc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nKVxuIFx0cmV0dXJuIGt2bV9kaXJ0eV9yaW5nX3VzZWQocmluZykgXHUwMDNlPSByaW5nLVx1MDAzZXNpemU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGt2bV9yZXNldF9kaXJ0eV9nZm4oc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdCwgdTY0IG9mZnNldCwgdTY0IG1hc2spXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqXG4mIzQzO19fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdClcbiB7XG4tXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xuIFx0aW50IGFzX2lkLCBpZDtcbiBcbiBcdGFzX2lkID0gc2xvdCBcdTAwM2VcdTAwM2UgMTY7XG4gXHRpZCA9ICh1MTYpc2xvdDtcbiBcbiBcdGlmIChhc19pZCBcdTAwM2U9IGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSkgfHwgaWQgXHUwMDNlPSBLVk1fVVNFUl9NRU1fU0xPVFMpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaWRfdG9fbWVtc2xvdChfX2t2bV9tZW1zbG90cyhrdm0sIGFzX2lkKSwgaWQpO1xuJiM0Mzt9XG4gXG4tXHRtZW1zbG90ID0gaWRfdG9fbWVtc2xvdChfX2t2bV9tZW1zbG90cyhrdm0sIGFzX2lkKSwgaWQpO1xuJiM0MztzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICprdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoa3ZtLCBzbG90KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3Jlc2V0X2RpcnR5X2dmbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90LCB1NjQgb2Zmc2V0LCB1NjQgbWFzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XG4mIzQzO1xuJiM0MztcdG1lbXNsb3QgPSBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgc2xvdCk7XG4gXG4gXHRpZiAoIW1lbXNsb3QgfHwgb2Zmc2V0IFx1MDAzZT0gbWVtc2xvdC1cdTAwM2VucGFnZXMgfHxcbiBcdCAgICBvZmZzZXQgJiM0MzsgX19mbHMobWFzaykgXHUwMDNlPSBtZW1zbG90LVx1MDAzZW5wYWdlcylcbkBAIC04OCwyMSAmIzQzOzEwMSwxMSBAQCBpbnQga3ZtX2RpcnR5X3JpbmdfYWxsb2Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2ludmFsaWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcbi17XG4tXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZnZm4tXHUwMDNlZmxhZ3MsIDApO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2RpcnR5X2dmbl9zZXRfZGlydGllZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuIHtcbiBcdGdmbi1cdTAwM2VmbGFncyA9IEtWTV9ESVJUWV9HRk5fRl9ESVJUWTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGt2bV9kaXJ0eV9nZm5faGFydmVzdGVkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pXG4te1xuLVx0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Z2ZuLVx1MDAzZWZsYWdzKSBcdTAwMjYgS1ZNX0RJUlRZX0dGTl9GX1JFU0VUO1xuLX1cbi1cbiBpbnQga3ZtX2RpcnR5X3JpbmdfcmVzZXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG4gXHRcdFx0IGludCAqbnJfZW50cmllc19yZXNldClcbiB7XG5AQCAtMTMxLDYgJiM0MzsxMzQsOSBAQCBpbnQga3ZtX2RpcnR5X3JpbmdfcmVzZXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG4gXHQgKi9cbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIFxuJiM0MztcdGlmIChrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKGt2bSwgcmluZywgbnJfZW50cmllc19yZXNldCkgXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0d2hpbGUgKGxpa2VseSgoKm5yX2VudHJpZXNfcmVzZXQpIFx1MDAzYyBJTlRfTUFYKSkge1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLmEyNWI4OTAyY2RmYzE3IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTY1LDYgJiM0Mzs2NSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2t2bS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2RpcnR5X3JpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fZGlydHlfYml0LmhcdTAwM2VcbiBcbiBcbiAvKiBXb3JzdCBjYXNlIGJ1ZmZlciBzaXplIG5lZWRlZCBmb3IgaG9sZGluZyBhbiBpbnRlZ2VyLiAqL1xuQEAgLTIyNjIsNiAmIzQzOzIyNjMsMTAgQEAgc3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcbiBcdFx0ZGlydHlfYml0bWFwX2J1ZmZlciA9IGt2bV9zZWNvbmRfZGlydHlfYml0bWFwKG1lbXNsb3QpO1xuIFx0XHRtZW1zZXQoZGlydHlfYml0bWFwX2J1ZmZlciwgMCwgbik7XG4gXG4mIzQzO1x0XHRpZiAoa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKGt2bSwgbWVtc2xvdCwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgZGlydHlfYml0bWFwX2J1ZmZlciwgXHUwMDI2Zmx1c2gpIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0XHRLVk1fTU1VX0xPQ0soa3ZtKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbiAvIHNpemVvZihsb25nKTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIG1hc2s7XG5AQCAtMjI4MSw2ICYjNDM7MjI4Niw3IEBAIHN0YXRpYyBpbnQga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfbG9nICpsb2cpXG4gXHRcdEtWTV9NTVVfVU5MT0NLKGt2bSk7XG4gXHR9XG4gXG4mIzQzO291dDpcbiBcdGlmIChmbHVzaClcbiBcdFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzX21lbXNsb3Qoa3ZtLCBtZW1zbG90KTtcbiBcbkBAIC0yMzczLDYgJiM0MzsyMzc5LDEwIEBAIHN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihkaXJ0eV9iaXRtYXBfYnVmZmVyLCBsb2ctXHUwMDNlZGlydHlfYml0bWFwLCBuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4mIzQzO1x0aWYgKGt2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihrdm0sIG1lbXNsb3QsIGxvZywgZGlydHlfYml0bWFwX2J1ZmZlcixcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNmZsdXNoKSBcdTAwM2U9IDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRLVk1fTU1VX0xPQ0soa3ZtKTtcbiBcdGZvciAob2Zmc2V0ID0gbG9nLVx1MDAzZWZpcnN0X3BhZ2UsIGkgPSBvZmZzZXQgLyBCSVRTX1BFUl9MT05HLFxuIFx0XHQgbiA9IERJVl9ST1VORF9VUChsb2ctXHUwMDNlbnVtX3BhZ2VzLCBCSVRTX1BFUl9MT05HKTsgbi0tO1xuQEAgLTIzOTIsMTIgJiM0MzsyNDAyLDEzIEBAIHN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0Ki9cbiBcdFx0aWYgKG1hc2spIHtcbiBcdFx0XHRmbHVzaCA9IHRydWU7XG4mIzQzO1xuIFx0XHRcdGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChrdm0sIG1lbXNsb3QsXG4gXHRcdFx0XHRcdFx0XHRcdG9mZnNldCwgbWFzayk7XG4gXHRcdH1cbiBcdH1cbiBcdEtWTV9NTVVfVU5MT0NLKGt2bSk7XG4tXG4mIzQzO291dDpcbiBcdGlmIChmbHVzaClcbiBcdFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzX21lbXNsb3Qoa3ZtLCBtZW1zbG90KTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7QUNQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyJiMzNDssCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhciYjMzQ7LAogICAgJiMzNDtkaXJ0eV9iaXRfY2xlYXImIzM0OywKICAgICYjMzQ7aGFjZGJzaXJxX2hhbmRsZXImIzM0OywKICAgICYjMzQ7a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3QmIzM0OywKICAgICYjMzQ7a3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0JiMzNDssCiAgICAmIzM0O2t2bV9kaXJ0eV9yaW5nX3Jlc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YzU4NjcxNzZmNzEwNDc2YjI4YjEzNmRiNWM4MzkzMWE3NWViZTg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMTE6NDA6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDhhNTRjYTZiYTYwMjgyLi44ODMzMTVlOWQ3OWQ5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTQ1LDYgJiM0Mzs0NSw5IEBACiAKICNkZWZpbmUgQUNQSV9NQURUX0dJQ0NfVFJCRSAgKG9mZnNldG9mKHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJpY19pbnRlcnJ1cHQsIFwKIAl0cmJlX2ludGVycnVwdCkgJiM0Mzsgc2l6ZW9mKHUxNikpCiYjNDM7CiYjNDM7I2RlZmluZSBBQ1BJX01BRFRfR0lDQ19IQUNEQlNJUlEgIChvZmZzZXRvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0LCBcCiYjNDM7CWhhY2Ric2lycV9nc2kpICYjNDM7IHNpemVvZih1MzIpKQogLyoKICAqIEFybcKuIEZ1bmN0aW9uYWwgRml4ZWQgSGFyZHdhcmUgU3BlY2lmaWNhdGlvbiBWZXJzaW9uIDEuMi4KICAqIFRhYmxlIDI6IEFybSBBcmNoaXRlY3R1cmUgY29udGV4dCBsb3NzIGZsYWdzCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IGE1Nzg3MGZhOTZkYjViLi42MjBhZTRjZGRiNzYwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKQEAgLTg2Myw2ICYjNDM7ODYzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFmdCh2b2lkKQogCXJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBRlQpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oZGJzcyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX0hEQlNTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWNkYnModm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBQ0RCUyk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19tcGFtKHZvaWQpCiB7CiAJcmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfTVBBTSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kNzZjMTA5OTM3ZDhkYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oCkBAIC0wLDAgJiM0MzsxLDY3IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFSTSBMdGQuCiYjNDM7ICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzICZsdDtsZW8uYnJhc0Bhcm0uY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19BUk02NF9LVk1fRElSVFlfQklUX0hfXwomIzQzOyNkZWZpbmUgX19BUk02NF9LVk1fRElSVFlfQklUX0hfXwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtX3BndGFibGUuaCZndDsKJiM0MzsKJiM0MztlbnVtIGhhY2Ric19zdGF0dXMgewomIzQzOwlIQUNEQlNfT0ZGLAomIzQzOwlIQUNEQlNfSURMRSwKJiM0MzsJSEFDREJTX1JVTk5JTkcsCiYjNDM7CUhBQ0RCU19FUlJPUgomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGhhY2RicyB7CiYjNDM7CWVudW0gaGFjZGJzX3N0YXR1cyBzdGF0dXM7CiYjNDM7CWludCBzaXplOwomIzQzO307CiYjNDM7CiYjNDM7REVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBoYWNkYnMsIGhhY2Ric19wY3ApOwomIzQzOwomIzQzO3ZvaWQgX19pbml0IGt2bV9oYWNkYnNfaW5pdCh2b2lkKTsKJiM0Mzt2b2lkIGt2bV9oYWNkYnNfY3B1X3VwKHZvaWQpOwomIzQzO3ZvaWQga3ZtX2hhY2Ric19jcHVfZG93bih2b2lkKTsKJiM0MzsKJiM0MztpbnQgX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qga3ZtX2NsZWFyX2RpcnR5X2xvZyAqbG9nLAomIzQzOwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsCiYjNDM7CQkJICAgICAgIGJvb2wgKmZsdXNoKTsKJiM0MzsKJiM0MztpbnQgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLAomIzQzOwkJCQlpbnQgKm5yX2VudHJpZXNfcmVzZXQpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9kaXJ0eV9jbGVhcl9lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfSURMRSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAoa3ZtLSZndDthcmNoLm1tdS5wZ3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9QR1RBQkxFX1MyX0RCTSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQkgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAomIzQzOwkJCQkJICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZywKJiM0MzsJCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwKJiM0MzsJCQkJCSAgIGJvb2wgKmZsdXNoKQomIzQzO3sKJiM0MzsJaWYgKCFrdm1fYXJjaF9kaXJ0eV9jbGVhcl9lbmFibGVkKGt2bSkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOwlyZXR1cm4gX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoa3ZtLCBtZW1zbG90LCBsb2csIGJpdG1hcCwgZmx1c2gpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCSAgICBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsCiYjNDM7CQkJCQkgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KQomIzQzO3sKJiM0MzsJaWYgKCFrdm1fYXJjaF9kaXJ0eV9jbGVhcl9lbmFibGVkKGt2bSkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOwlyZXR1cm4gX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKGt2bSwgcmluZywgbnJfZW50cmllc19yZXNldCk7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZiAvKiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmgKaW5kZXggNDFhODY4NzkzOGViNmIuLjY0NmZmODhlMDI1ODNmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oCkBAIC05Myw2ICYjNDM7OTMsOCBAQCB0eXBlZGVmIHU2NCBrdm1fcHRlX3Q7CiAKICNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfWE4JR0VOTUFTSyg1NCwgNTMpCiAKJiM0MzsjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTQlCSVQoNTEpCiYjNDM7CiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQCUJJVCg1MCkKIAogI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNUwkoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SIHwgXApAQCAtMjUzLDYgJiM0MzsyNTUsNyBAQCBzdHJ1Y3Qga3ZtX3BndGFibGVfbW1fb3BzIHsKIGVudW0ga3ZtX3BndGFibGVfc3RhZ2UyX2ZsYWdzIHsKIAlLVk1fUEdUQUJMRV9TMl9JRE1BUAkJCT0gQklUKDApLAogCUtWTV9QR1RBQkxFX1MyX0FTX1MxCQkJPSBCSVQoMSksCiYjNDM7CUtWTV9QR1RBQkxFX1MyX0RCTQkJCT0gQklUKDIpLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMKaW5kZXggOWEyMmRmMGM1MTIwZjMuLjYyZjU2YmJkMGE2NWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jCkBAIC01MjMsNiAmIzQzOzUyMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfZnRyX2JpdHMgZnRyX2lkX2FhNjRtbWZyM1tdID0gewogc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnI0W10gPSB7CiAJU19BUk02NF9GVFJfQklUUyhGVFJfSElEREVOLCBGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgSURfQUE2NE1NRlI0X0VMMV9FMkgwX1NISUZULCA0LCAwKSwKIAlBUk02NF9GVFJfQklUUyhGVFJfSElEREVOLCBGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgSURfQUE2NE1NRlI0X0VMMV9OVl9mcmFjX1NISUZULCA0LCAwKSwKJiM0MzsJQVJNNjRfRlRSX0JJVFMoRlRSX0hJRERFTiwgRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRNTUZSNF9FTDFfSEFDREJTX1NISUZULCA0LCAwKSwKIAlBUk02NF9GVFJfRU5ELAogfTsKIApAQCAtMjEzMSw2ICYjNDM7MjEzMiwxMSBAQCBzdGF0aWMgYm9vbCBodmhlX3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwKIAlyZXR1cm4gYXJtNjRfdGVzdF9zd19mZWF0dXJlX292ZXJyaWRlKEFSTTY0X1NXX0ZFQVRVUkVfT1ZFUlJJREVfSFZIRSk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBoYXNfdmhlX2hkYnNzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IGNvcGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gaXNfa2VybmVsX2luX2h5cF9tb2RlKCkgJmFtcDsmYW1wOyBoYXNfY3B1aWRfZmVhdHVyZShlbnRyeSwgY29wZSk7CiYjNDM7fQomIzQzOwogYm9vbCBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKQogewogCS8qCkBAIC0yNzY2LDYgJiM0MzsyNzcyLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0gewogCQlBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlIxX0VMMSwgSEFGREJTLCBEQk0pCiAJfSwKICNlbmRpZgomIzQzOwl7CiYjNDM7CQkuZGVzYyA9ICYjMzQ7SGFyZHdhcmUgZGlydHkgYml0IENsZWFuaW5nJiMzNDssCiYjNDM7CQkudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSwKJiM0MzsJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFDREJTLAomIzQzOwkJLm1hdGNoZXMgPSBoYXNfY3B1aWRfZmVhdHVyZSwKJiM0MzsJCUFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjRfRUwxLCBIQUNEQlMsIElNUCkKJiM0MzsJfSwKICNpZmRlZiBDT05GSUdfQVJNNjRfSEFGVAogCXsKIAkJLmRlc2MgPSAmIzM0O0hhcmR3YXJlIG1hbmFnZWQgQWNjZXNzIEZsYWcgZm9yIFRhYmxlIERlc2NyaXB0b3JzJiMzNDssCkBAIC0yNzgxLDYgJiM0MzsyNzk0LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0gewogCQlBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlIxX0VMMSwgSEFGREJTLCBIQUZUKQogCX0sCiAjZW5kaWYKJiM0MzsJewomIzQzOwkJLmRlc2MgPSAmIzM0O0hhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpJiMzNDssCiYjNDM7CQkudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSwKJiM0MzsJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0hEQlNTLAomIzQzOwkJLm1hdGNoZXMgPSBoYXNfdmhlX2hkYnNzLAomIzQzOwkJQVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSERCU1MpCiYjNDM7CX0sCiAJewogCQkuZGVzYyA9ICYjMzQ7Q1JDMzIgaW5zdHJ1Y3Rpb25zJiMzNDssCiAJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0NSQzMyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWcKaW5kZXggNDQ5MTU0ZjlhNDg1MmQuLmRiODQ4N2JmNzM4Yjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWcKQEAgLTM0LDYgJiM0MzszNCw3IEBAIG1lbnVjb25maWcgS1ZNCiAJc2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1MKIAlzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNCiAJc2VsZWN0IEhBVkVfS1ZNX1ZDUFVfUlVOX1BJRF9DSEFOR0UKJiM0MzsJc2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJCiAJc2VsZWN0IFNDSEVEX0lORk8KIAlzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFMKIAlzZWxlY3QgS1ZNX0dVRVNUX01FTUZECmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlCmluZGV4IDU5NjEyZDJmMjc3YzFkLi42ZmFhY2Q4NTczNDZiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUKQEAgLTI0LDcgJiM0MzsyNCw3IEBAIGt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcCiAJIHZnaWMvdmdpYy1tbWlvLm8gdmdpYy92Z2ljLW1taW8tdjIubyBcCiAJIHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZpY2UubyBcCiAJIHZnaWMvdmdpYy1pdHMubyB2Z2ljL3ZnaWMtZGVidWcubyB2Z2ljL3ZnaWMtdjMtbmVzdGVkLm8gXAotCSB2Z2ljL3ZnaWMtdjUubwomIzQzOwkgdmdpYy92Z2ljLXY1Lm8gZGlydHlfYml0Lm8KIAoga3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgJiM0Mzs9IHBtdS1lbXVsLm8gcG11Lm8KIGt2bS0kKENPTkZJR19BUk02NF9QVFJfQVVUSCkgICYjNDM7PSBwYXV0aC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCmluZGV4IDUwYWRmZmY3NWJlODJlLi5kYzFhNDYyOWFhZWI5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJtLmMKQEAgLTQyLDYgJiM0Mzs0Miw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9uZXN0ZWQuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3Brdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3B0cmF1dGguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2t2bV9kaXJ0eV9iaXQuaCZndDsKICNpbmNsdWRlICZsdDthc20vc2VjdGlvbnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vc3RhY2t0cmFjZS9udmhlLmgmZ3Q7CiAKQEAgLTIzMDcsNiAmIzQzOzIzMDgsNyBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKQogCiAJa3ZtX3ZnaWNfY3B1X3VwKCk7CiAJa3ZtX3RpbWVyX2NwdV91cCgpOwomIzQzOwlrdm1faGFjZGJzX2NwdV91cCgpOwogCiAJcHJlZW1wdF9lbmFibGUoKTsKIApAQCAtMjMxNSw2ICYjNDM7MjMxNyw3IEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiAKIHZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKIHsKJiM0MzsJa3ZtX2hhY2Ric19jcHVfZG93bigpOwogCWt2bV90aW1lcl9jcHVfZG93bigpOwogCWt2bV92Z2ljX2NwdV9kb3duKCk7CiAKQEAgLTI0ODEsNiAmIzQzOzI0ODQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3N1YnN5c3RlbXModm9pZCkKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAomIzQzOwlrdm1faGFjZGJzX2luaXQoKTsKJiM0MzsKIAlrdm1fcmVnaXN0ZXJfcGVyZl9jYWxsYmFja3MoKTsKIAogCWVyciA9IGt2bV9oeXBfdHJhY2VfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMTkyODllYTczZDk2ZDkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYwpAQCAtMCwwICYjNDM7MSw0MTEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC4KJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgJmx0O2xlby5icmFzQGFybS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZGlydHlfYml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tjb25maWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwomIzQzOwomIzQzO0RFRklORV9QRVJfQ1BVKHN0cnVjdCBoYWNkYnMsIGhhY2Ric19wY3ApID0gewomIzQzOwkuc3RhdHVzID0gSEFDREJTX09GRiwKJiM0MzsJLnNpemUgPSAwLAomIzQzO307CiYjNDM7CiYjNDM7LyogSERCU1MgZW50cnkgZmllbGQgZGVmaW5pdGlvbnMgKi8KJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1ZBTElEIEJJVCgwKQomIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9TSElGVCAoMSkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfTUFTSyAoR0VOTUFTSygzLCAxKSkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0woeCkgXAomIzQzOwkoKCh4KSAmbHQ7Jmx0OyBIREJTU19FTlRSWV9UVFdMX1NISUZUKSAmYW1wOyBIREJTU19FTlRSWV9UVFdMX01BU0spCiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1JFU1YgSERCU1NfRU5UUllfVFRXTCgtNCkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX0lQQSBHRU5NQVNLX1VMTCg1NSwgMTIpCiYjNDM7CiYjNDM7c3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBpbnQgaGFjZGJzaXJxID0gLTE7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGFjZGJzX3N0YXJ0KHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpCiYjNDM7ewomIzQzOwl1NjQgYnI7CiYjNDM7CS8qIEVhY2ggZW50cnkgaXMgOCBieXRlcyAqLwomIzQzOwlpbnQgc2l6ZV9iID0gc2l6ZSAqIHNpemVvZihod19lbnRyaWVzWzBdKTsKJiM0MzsJaW50IHNpemVfcDIgPSBtYXgocm91bmR1cF9wb3dfb2ZfdHdvKHNpemVfYiksIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CS8qIElmIG5vdCB1c2luZyB0aGUgZnVsbCBzaXplIG9mIHRoZSBhcnJheSwgcHV0IGEgc3RvcCBlbnRyeSBhdCB0aGUgZW5kICovCiYjNDM7CWlmIChzaXplX2IgJmx0OyBzaXplX3AyKQomIzQzOwkJaHdfZW50cmllc1tzaXplXSA9IEhEQlNTX0VOVFJZX1ZBTElEIHwgSERCU1NfRU5UUllfVFRXTF9SRVNWOwomIzQzOwomIzQzOwlzeXNyZWdfY2xlYXJfc2V0X3MoU1lTX0hBQ0RCU0NPTlNfRUwyLAomIzQzOwkJCSAgIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT04gfCBIQUNEQlNDT05TX0VMMl9JTkRFWCwgMCk7CiYjNDM7CiYjNDM7CWJyID0gKHZpcnRfdG9fcGh5cyhod19lbnRyaWVzKSAmYW1wOyBIQUNEQlNCUl9FTDJfQkFERFJfTUFTSykgfAomIzQzOwkgICAgIEZJRUxEX1BSRVAoSEFDREJTQlJfRUwyX1NaLCBpbG9nMihzaXplX3AyKSAtIDEyKSB8CiYjNDM7CSAgICAgRklFTERfUFJFUChIQUNEQlNCUl9FTDJfRU4sIDEpOwomIzQzOwomIzQzOwl0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX1JVTk5JTkcpOwomIzQzOwl0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnNpemUsIHNpemUpOwomIzQzOwl3cml0ZV9zeXNyZWdfcyhiciwgU1lTX0hBQ0RCU0JSX0VMMik7CiYjNDM7CWlzYigpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhhY2Ric19zdG9wKHZvaWQpCiYjNDM7ewomIzQzOwl3cml0ZV9zeXNyZWdfcygwLCBTWVNfSEFDREJTQlJfRUwyKTsKJiM0MzsJaXNiKCk7CiYjNDM7CiYjNDM7CWlmICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfRVJST1IpIHsKJiM0MzsJCS8qIEluIGNhc2Ugb2YgZXJyb3IsIEhBQ0RCU0NPTlNfRUwyLklOREVYIHNob3VsZCBwb2ludCB0aGUgZmF1bHR5IGVudHJ5ICovCiYjNDM7CQl1NjQgY29ucyA9IHJlYWRfc3lzcmVnX3MoU1lTX0hBQ0RCU0NPTlNfRUwyKTsKJiM0MzsJCWludCBpZHggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpOwomIzQzOwomIzQzOwkJdGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTsKJiM0MzsKJiM0MzsJCXJldHVybiBpZHg7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRoaXNfY3B1X3JlYWQoaGFjZGJzX3BjcC5zaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDbGVhcnMgZGlydHktYml0cyBmb3IgYW4gYXJyYXkgb2YgcGFnZXMgKGh3X2VudHJpZXMpIHVzaW5nIEhBQ0RCUwomIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBjbGVhbmVkIGZyb20gdGhlIGFycmF5LiBJZiByZXR1cm5zIHZhbHVlICZsdDsgc2l6ZSwKJiM0MzsgKgl0aGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHByb2Nlc3NpbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkaXJ0eV9iaXRfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmh3X2VudHJpZXMsIGludCBzaXplKQomIzQzO3sKJiM0MzsJdTY0IGhjcl9lbDI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXByZWVtcHRfZGlzYWJsZSgpOwomIzQzOwomIzQzOwloY3JfZWwyID0gcmVhZF9zeXNyZWcoSENSX0VMMik7CiYjNDM7CXdyaXRlX3N5c3JlZyhoY3JfZWwyIHwgSENSX0VMMl9WTSwgSENSX0VMMik7CiYjNDM7CV9fbG9hZF9zdGFnZTIoJmFtcDtrdm0tJmd0O2FyY2gubW11KTsKJiM0MzsKJiM0MzsJaGFjZGJzX3N0YXJ0KGh3X2VudHJpZXMsIHNpemUpOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQl3ZmkoKTsKJiM0MzsJfSB3aGlsZSAodGhpc19jcHVfcmVhZChoYWNkYnNfcGNwLnN0YXR1cykgPT0gSEFDREJTX1JVTk5JTkcpOwomIzQzOwomIzQzOwlyZXQgPSBoYWNkYnNfc3RvcCgpOwomIzQzOwomIzQzOwl3cml0ZV9zeXNyZWcoaGNyX2VsMiwgSENSX0VMMik7CiYjNDM7CWlzYigpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBObyBEU0IgaXMgbmVlZGVkIGhlcmUsIGFzIGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KCkgdGhhdCBoYXBwZW5zCiYjNDM7CSAqIGxhdGVyIGluIGdlbmVyaWMgZGlydHktY2xlYW5pbmcgY29kZSBhbHJlYWR5IHBlcmZvcm1zIGEgRFNCIGJlZm9yZQomIzQzOwkgKiBkb2luZyB0aGUgVExCSS4KJiM0MzsJICovCiYjNDM7CiYjNDM7CXByZWVtcHRfZW5hYmxlKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBoZGJzc190b19iaXRtYXAodTY0ICpoZGJzc19hcnJheSwgaW50IHN0YXJ0LCBpbnQgZW5kLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nICpkaXJ0eV9iaXRtYXAsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQpCiYjNDM7ewomIzQzOwl1NjQgdyA9IChncGFfdG9fZ2ZuKGhkYnNzX2FycmF5W3N0YXJ0XSkgLSBvZmZzZXQpIC8gQklUU19QRVJfTE9ORzsKJiM0MzsJdTY0IG1hc2sgPSAwOwomIzQzOwlpbnQgaWR4ID0gc3RhcnQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXU2NCBlbnRyeSA9IChncGFfdG9fZ2ZuKGhkYnNzX2FycmF5W2lkeF0pIC0gb2Zmc2V0KTsKJiM0MzsKJiM0MzsJCWlmIChlbnRyeSAvIEJJVFNfUEVSX0xPTkcgPT0gdykgewomIzQzOwkJCW1hc2sgfD0gQklUKGVudHJ5ICUgQklUU19QRVJfTE9ORyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWF0b21pY19sb25nX29yKG1hc2ssIChhdG9taWNfbG9uZ190ICopJmFtcDtkaXJ0eV9iaXRtYXBbd10pOwomIzQzOwkJCXcgPSBlbnRyeSAvIEJJVFNfUEVSX0xPTkc7CiYjNDM7CQkJbWFzayA9IEJJVChlbnRyeSAlIEJJVFNfUEVSX0xPTkcpOwomIzQzOwkJfQomIzQzOwl9IHdoaWxlICgmIzQzOyYjNDM7aWR4ICZsdDsgZW5kKTsKJiM0MzsJYXRvbWljX2xvbmdfb3IobWFzaywgKGF0b21pY19sb25nX3QgKikmYW1wO2RpcnR5X2JpdG1hcFt3XSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsCiYjNDM7CQkJCXU2NCB0dHdsLCBpbnQgaWR4LCBpbnQgZW50cmllc19zeikKJiM0Mzt7CiYjNDM7CXdoaWxlIChpZHggJmx0OyBlbnRyaWVzX3N6KSB7CiYjNDM7CQlpbnQgaiA9IF9fZmZzKCptYXNrKTsKJiM0MzsJCXU2NCBhID0gZ2ZuX3RvX2dwYShvZmZzZXQgJiM0Mzsgaik7CiYjNDM7CiYjNDM7CQlod19lbnRyaWVzW2lkeCYjNDM7JiM0MztdID0gKGEgJmFtcDsgSERCU1NfRU5UUllfSVBBKSB8CiYjNDM7CQkJCSAgICB0dHdsIHwKJiM0MzsJCQkJICAgIEhEQlNTX0VOVFJZX1ZBTElEOwomIzQzOwomIzQzOwkJKm1hc2sgJmFtcDs9IH5CSVQoaik7CiYjNDM7CQlpZiAoISptYXNrKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBpZHg7CiYjNDM7fQomIzQzOwomIzQzO2ludCBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJICAgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2csCiYjNDM7CQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwKJiM0MzsJCQkgICAgICAgYm9vbCAqZmx1c2gpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IGlkeCA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcCA9IG1lbXNsb3QtJmd0O2RpcnR5X2JpdG1hcDsKJiM0MzsJdTY0ICpod19lbnRyaWVzOwomIzQzOwljb25zdCBpbnQgZW50cmllc19zeiA9IFBBR0VfU0laRSAvIHNpemVvZigqaHdfZW50cmllcyk7CiYjNDM7CXU2NCB0dHdsOwomIzQzOwl1NjQgc3RhcnQsIGVuZDsKJiM0MzsJZ2ZuX3QgYmFzZV9nZm47CiYjNDM7CWdwYV90IHNwbGl0X2VuZCA9IDA7CiYjNDM7CiYjNDM7CWh3X2VudHJpZXMgPSBrbWFsbG9jX29ianModTY0LCBlbnRyaWVzX3N6LCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFod19lbnRyaWVzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXR0d2wgPSBIREJTU19FTlRSWV9UVFdMKEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwpOwomIzQzOwomIzQzOwlpZiAobG9nKSB7CiYjNDM7CQlzdGFydCA9IGxvZy0mZ3Q7Zmlyc3RfcGFnZSAvIEJJVFNfUEVSX0xPTkc7CiYjNDM7CQllbmQgPSBzdGFydCAmIzQzOyBESVZfUk9VTkRfVVAobG9nLSZndDtudW1fcGFnZXMsIEJJVFNfUEVSX0xPTkcpOwomIzQzOwkJYmFzZV9nZm4gPSBtZW1zbG90LSZndDtiYXNlX2dmbiAmIzQzOyBsb2ctJmd0O2ZpcnN0X3BhZ2UgJSBCSVRTX1BFUl9MT05HOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3RhcnQgPSAwOwomIzQzOwkJZW5kID0ga3ZtX2RpcnR5X2JpdG1hcF9ieXRlcyhtZW1zbG90KSAvIHNpemVvZihsb25nKTsKJiM0MzsJCWJhc2VfZ2ZuID0gbWVtc2xvdC0mZ3Q7YmFzZV9nZm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJd3JpdGVfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IHN0YXJ0OyBpICZsdDsgZW5kOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdW5zaWduZWQgbG9uZyBtYXNrOwomIzQzOwkJZ2ZuX3Qgb2Zmc2V0OwomIzQzOwkJYXRvbWljX2xvbmdfdCAqcDsKJiM0MzsKJiM0MzsJCWlmIChsb2cpIHsgLyogQ2xlYW4gb25seSB3aGF0IGlzIGluIHRoZSBpbnB1dCBiaXRtYXAgKi8KJiM0MzsJCQltYXNrID0gYml0bWFwW2ldOwomIzQzOwkJCWlmICghbWFzaykKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJcCA9IChhdG9taWNfbG9uZ190ICopJmFtcDtkaXJ0eV9iaXRtYXBbaV07CiYjNDM7CQkJbWFzayAmYW1wOz0gYXRvbWljX2xvbmdfZmV0Y2hfYW5kbm90KG1hc2ssIHApOwomIzQzOwkJfSBlbHNlIHsgLyogQ2xlYW4gZXZlcnl0aGluZyAqLwomIzQzOwkJCWlmICghZGlydHlfYml0bWFwW2ldKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQltYXNrID0geGNoZygmYW1wO2RpcnR5X2JpdG1hcFtpXSwgMCk7CiYjNDM7CQkJYml0bWFwW2ldID0gbWFzazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbWFzaykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCW9mZnNldCA9IGJhc2VfZ2ZuICYjNDM7IGkgKiBCSVRTX1BFUl9MT05HOwomIzQzOwomIzQzOwkJaWYgKGt2bV9kaXJ0eV9sb2dfbWFudWFsX3Byb3RlY3RfYW5kX2luaXRfc2V0KGt2bSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChvZmZzZXQgJiM0MzsgQklUU19QRVJfTE9ORyAmZ3Q7IHNwbGl0X2VuZCkpIHsKJiM0MzsJCQlncGFfdCBzdGFydCA9IGdmbl90b19ncGEob2Zmc2V0ICYjNDM7IF9fZmZzKG1hc2spKTsKJiM0MzsJCQlncGFfdCBlbmQgPSBnZm5fdG9fZ3BhKG9mZnNldCAmIzQzOyBfX2ZscyhtYXNrKSAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJCQlrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoa3ZtLCBzdGFydCwgZW5kKTsKJiM0MzsJCQlzcGxpdF9lbmQgPSBncGFfdG9fZ2ZuKEFMSUdOX0RPV04oZW5kLCBQTURfU0laRSkgJiM0MzsgUE1EX1NJWkUgLSAxKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWRvIHsKJiM0MzsJCQlpZHggPSBtYXNrX3RvX2hkYnNzKCZhbXA7bWFzaywgaHdfZW50cmllcywgb2Zmc2V0LCB0dHdsLCBpZHgsIGVudHJpZXNfc3opOwomIzQzOwkJCWlmIChpZHggJmd0Oz0gZW50cmllc19zeikgewomIzQzOwkJCQlyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpOwomIzQzOwkJCQkqZmx1c2ggPSAqZmx1c2ggfHwgcmV0ICZndDsgMDsKJiM0MzsJCQkJaWYgKHJldCAhPSBpZHgpIHsKJiM0MzsJCQkJCS8qIFNhdmUgYml0cyBub3QgY29udmVydGVkIGJhY2sgdG8gYml0bWFwICovCiYjNDM7CQkJCQlhdG9taWNfbG9uZ19vcihtYXNrLCAoYXRvbWljX2xvbmdfdCAqKSZhbXA7ZGlydHlfYml0bWFwW2ldKTsKJiM0MzsJCQkJCWdvdG8gb3V0X2VycjsKJiM0MzsJCQkJfQomIzQzOwkJCQlpZHggPSAwOwomIzQzOwkJCX0KJiM0MzsJCX0gd2hpbGUgKG1hc2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpZHggIT0gMCkgewomIzQzOwkJcmV0ID0gZGlydHlfYml0X2NsZWFyKGt2bSwgaHdfZW50cmllcywgaWR4KTsKJiM0MzsJCSpmbHVzaCA9ICpmbHVzaCB8fCByZXQgJmd0OyAwOwomIzQzOwl9CiYjNDM7b3V0X2VycjoKJiM0MzsJaWYgKHVubGlrZWx5KHJldCAhPSBpZHgpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogSW4gY2FzZSB0aGVyZSBpcyBhbiBlcnJvciBhbmQgbm90IGFsbCBlbnRyaWVzIGluIEhBQ0RCUyBnZXQKJiM0MzsJCSAqIGNsZWFuZWQsIHdlIGhhdmUgdG8gbWFyayB0aGUgZGlydHkgYml0cyBiYWNrIGluIHRoZSBiaXRtYXAsCiYjNDM7CQkgKiBhcyB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgc29mdHdhcmUgcm91dGluZS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBFbnRyaWVzIHNob3VsZCBiZSBpbiBvcmRlciwgc2luY2UgdGhleSB3ZXJlIGV4dHJheGVkIGZyb20KJiM0MzsJCSAqIHRoZSBkaXJ0eS1iaXRtYXAsIHNvIGJhdGNoaW5nIHRoZSBhdG9taWMgd3JpdGVzIGlzIGVmZmljaWVudC4KJiM0MzsJCSAqLwomIzQzOwomIzQzOwkJaWYgKHJldCAmbHQ7IGlkeCkKJiM0MzsJCQloZGJzc190b19iaXRtYXAoaHdfZW50cmllcywgcmV0LCBpZHgsIGRpcnR5X2JpdG1hcCwgbWVtc2xvdC0mZ3Q7YmFzZV9nZm4pOwomIzQzOwomIzQzOwkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwomIzQzOwl3cml0ZV91bmxvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJa2ZyZWUoaHdfZW50cmllcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsCiYjNDM7CQkJCWludCAqbnJfZW50cmllc19yZXNldCkKJiM0Mzt7CiYjNDM7CXU2NCAqaHdfZW50cmllczsKJiM0MzsJdTY0IHNsb3Rfb2Zmc2V0ID0gMDsKJiM0MzsJdTY0IHR0d2w7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CXUzMiBzbG90ID0gLTE7CiYjNDM7CiYjNDM7CWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKJiM0MzsJCXJldHVybiAtRUlOVFI7CiYjNDM7CiYjNDM7CXR0d2wgPSBIREJTU19FTlRSWV9UVFdMKEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwpOwomIzQzOwomIzQzOwlod19lbnRyaWVzID0ga21hbGxvYyhtYXgocmluZy0mZ3Q7c2l6ZSAqIHNpemVvZih1NjQpLCBQQUdFX1NJWkUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFod19lbnRyaWVzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyByaW5nLSZndDtzaXplOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmVudHJ5OwomIzQzOwkJZ2ZuX3QgZ2ZuOwomIzQzOwomIzQzOwkJZW50cnkgPSAmYW1wO3JpbmctJmd0O2RpcnR5X2dmbnNbKHJpbmctJmd0O3Jlc2V0X2luZGV4ICYjNDM7IGkpICZhbXA7CiYjNDM7CQkJCQkgIChyaW5nLSZndDtzaXplIC0gMSldOwomIzQzOwomIzQzOwkJaWYgKCFrdm1fZGlydHlfZ2ZuX2hhcnZlc3RlZChlbnRyeSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAoZW50cnktJmd0O3Nsb3QgIT0gc2xvdCkgewomIzQzOwkJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiYjNDM7CiYjNDM7CQkJbWVtc2xvdCA9IGt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgZW50cnktJmd0O3Nsb3QpOwomIzQzOwkJCXNsb3QgPSBlbnRyeS0mZ3Q7c2xvdDsKJiM0MzsJCQlzbG90X29mZnNldCA9IG1lbXNsb3QtJmd0O2Jhc2VfZ2ZuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZ2ZuID0gc2xvdF9vZmZzZXQgJiM0MzsgZW50cnktJmd0O29mZnNldDsKJiM0MzsKJiM0MzsJCWh3X2VudHJpZXNbaV0gPSAoZ2ZuX3RvX2dwYShnZm4pICZhbXA7IEhEQlNTX0VOVFJZX0lQQSkgfAomIzQzOwkJCQl0dHdsIHwgSERCU1NfRU5UUllfVkFMSUQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZGlydHlfYml0X2NsZWFyKGt2bSwgaHdfZW50cmllcywgaSk7CiYjNDM7CiYjNDM7CS8qIFNldCBhcyBpbnZhbGlkIGFsbCBzdWNjZXNzZnVsbHkgY2xlYW5lZCBlbnRyaWVzICovCiYjNDM7CWZvciAoaW50IGogPSAwOyBqICZsdDsgcmV0OyBqJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmVudHJ5OwomIzQzOwomIzQzOwkJZW50cnkgPSAmYW1wO3JpbmctJmd0O2RpcnR5X2dmbnNbKHJpbmctJmd0O3Jlc2V0X2luZGV4ICYjNDM7IGopICZhbXA7CiYjNDM7CQkJCQkgIChyaW5nLSZndDtzaXplIC0gMSldOwomIzQzOwomIzQzOwkJa3ZtX2RpcnR5X2dmbl9zZXRfaW52YWxpZChlbnRyeSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogSW4gY2FzZSBvZiBlcnJvciwgdHJ5IHNvZnR3YXJlIGNsZWFuaW5nIGZyb20gdGhlIGZhdWx0aW5nIGVudHJ5ICovCiYjNDM7CXJpbmctJmd0O3Jlc2V0X2luZGV4ICYjNDM7PSByZXQ7CiYjNDM7CSpucl9lbnRyaWVzX3Jlc2V0ICYjNDM7PSByZXQ7CiYjNDM7CiYjNDM7CWtmcmVlKGh3X2VudHJpZXMpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgaSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgaGFjZGJzaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcGNwdSkKJiM0Mzt7CiYjNDM7CXU2NCBjb25zID0gcmVhZF9zeXNyZWdfcyhTWVNfSEFDREJTQ09OU19FTDIpOwomIzQzOwl1bnNpZ25lZCBsb25nIGVyciA9IEZJRUxEX0dFVChIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OLCBjb25zKTsKJiM0MzsKJiM0MzsJc3dpdGNoIChlcnIpIHsKJiM0MzsJY2FzZSBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OX05PRjoKJiM0MzsJCXRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfSURMRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OX0lQQUhBQ0Y6CiYjNDM7CQkvKiBXaGVuIHNpemUgbm90IGEgcG93ZXIgb2YgdHdvICZndDs9IDRrLCBleGl0IHdpdGggcmVzZXJ2ZWQgVFRMVyAqLwomIzQzOwkJaW50IGluZGV4ID0gRklFTERfR0VUKEhBQ0RCU0NPTlNfRUwyX0lOREVYLCBjb25zKTsKJiM0MzsKJiM0MzsJCWlmIChpbmRleCAmZ3Q7PSB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc2l6ZSkpIHsKJiM0MzsJCQl0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9TVFJVQ1RGOgomIzQzOwljYXNlIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT05fSVBBRjoKJiM0MzsJCXRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfRVJST1IpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGt2bV9oYWNkYnNfY3B1X3VwKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoaGFjZGJzaXJxICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZW5hYmxlX3BlcmNwdV9pcnEoaGFjZGJzaXJxLCBJUlFfVFlQRV9MRVZFTF9ISUdIKTsKJiM0MzsJdGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1faGFjZGJzX2NwdV9kb3duKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoaGFjZGJzaXJxICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZGlzYWJsZV9wZXJjcHVfaXJxKGhhY2Ric2lycSk7CiYjNDM7CXRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfT0ZGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJCiYjNDM7c3RhdGljIGludCBfX2luaXQgaGFjZGJzX2FjcGlfZ2V0X2lycSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCAqZ2ljYzsKJiM0MzsJdTMyIGdzaTsKJiM0MzsJaW50IGlycTsKJiM0MzsKJiM0MzsJZ2ljYyA9IGFjcGlfY3B1X2dldF9tYWR0X2dpY2Moc21wX3Byb2Nlc3Nvcl9pZCgpKTsKJiM0MzsJaWYgKGdpY2MtJmd0O2hlYWRlci5sZW5ndGggJmx0OyBBQ1BJX01BRFRfR0lDQ19IQUNEQlNJUlEpCiYjNDM7CQlyZXR1cm4gLUVOWElPOwomIzQzOwomIzQzOwlnc2kgPSAgZ2ljYy0mZ3Q7aGFjZGJzaXJxX2dzaTsKJiM0MzsKJiM0MzsJaXJxID0gYWNwaV9yZWdpc3Rlcl9nc2koTlVMTCwgZ3NpLCBBQ1BJX0xFVkVMX1NFTlNJVElWRSwgQUNQSV9BQ1RJVkVfSElHSCk7CiYjNDM7CWlmIChpcnEgJmx0OyAwKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7QUNQSTogVW5hYmxlIHRvIHJlZ2lzdGVyIEhBQ0RCUyBpbnRlcnJ1cHQ6ICVkXG4mIzM0OywgZ3NpKTsKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGlycTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIGhhY2Ric19hY3BpX2dldF9pcnEoKSAoLUVOWElPKQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3ZvaWQgX19pbml0IGt2bV9oYWNkYnNfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGlycTsKJiM0MzsKJiM0MzsJLyogRkVBVF9IQUNEQlMgaXMgb25seSBzdXBwb3J0ZWQgaWYgTGludXggcnVucyBpbiBFTDIgKFZIRSkgKi8KJiM0MzsJaWYgKCFzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKCkgfHwgIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpcnEgPSBoYWNkYnNfYWNwaV9nZXRfaXJxKCk7CiYjNDM7CWlmIChpcnEgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocmVxdWVzdF9wZXJjcHVfaXJxKGlycSwgaGFjZGJzaXJxX2hhbmRsZXIsICYjMzQ7SEFDREJTSVJRJiMzNDssICZhbXA7aGFjZGJzX3BjcCkgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwloYWNkYnNpcnEgPSBpcnE7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMKaW5kZXggOTFhN2RmYWQ2Njg2NjAuLmUxNjcyOWYwYjdiZDI0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMKQEAgLTczMSw5ICYjNDM7NzMxLDEzIEBAIHN0YXRpYyBpbnQgc3RhZ2UyX3NldF9wcm90X2F0dHIoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIGVudW0ga3ZtX3BndGFibGVfcHJvdCBwCiAJaWYgKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9SKQogCQlhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUjsKIAotCWlmIChwcm90ICZhbXA7IEtWTV9QR1RBQkxFX1BST1RfVykKJiM0MzsJaWYgKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7CiAJCWF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XOwogCiYjNDM7CQlpZiAocGd0LSZndDtmbGFncyAmYW1wOyBLVk1fUEdUQUJMRV9TMl9EQk0pCiYjNDM7CQkJYXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk07CiYjNDM7CX0KJiM0MzsKIAlpZiAoIWt2bV9scGEyX2lzX2VuYWJsZWQoKSkKIAkJYXR0ciB8PSBGSUVMRF9QUkVQKEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1NILCBzaCk7CiAKQEAgLTEzNjcsOSAmIzQzOzEzNzEsMTMgQEAgaW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsCiAJaWYgKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9SKQogCQlzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SOwogCi0JaWYgKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKQomIzQzOwlpZiAocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpIHsKIAkJc2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfVzsKIAomIzQzOwkJaWYgKHBndC0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX1BHVEFCTEVfUzJfREJNKQomIzQzOwkJCXNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk07CiYjNDM7CX0KJiM0MzsKIAlyZXQgPSBzdGFnZTJfc2V0X3huX2F0dHIocHJvdCwgJmFtcDt4bik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTE1ODUsNiAmIzQzOzE1OTMsOSBAQCBpbnQgX19rdm1fcGd0YWJsZV9zdGFnZTJfaW5pdChzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwKIAlpZiAoIXBndC0mZ3Q7cGdkKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlpZiAoc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpCiYjNDM7CQlmbGFncyB8PSBLVk1fUEdUQUJMRV9TMl9EQk07CiYjNDM7CiAJcGd0LSZndDtpYV9iaXRzCQk9IGlhX2JpdHM7CiAJcGd0LSZndDtzdGFydF9sZXZlbAk9IHN0YXJ0X2xldmVsOwogCXBndC0mZ3Q7bW1fb3BzCQk9IG1tX29wczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKaW5kZXggNmM5NDFhYWExMGM2MzkuLjJmOWQ5MGMzNTY2OGI5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwpAQCAtMTE3LDggJiM0MzsxMTcsOCBAQCBzdGF0aWMgYm9vbCBuZWVkX3NwbGl0X21lbWNhY2hlX3RvcHVwX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtKQogCXJldHVybiBrdm1fbW11X21lbW9yeV9jYWNoZV9ucl9mcmVlX29iamVjdHMoY2FjaGUpICZsdDsgbWluOwogfQogCi1zdGF0aWMgaW50IGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHBoeXNfYWRkcl90IGFkZHIsCi0JCQkJICAgIHBoeXNfYWRkcl90IGVuZCkKJiM0MztpbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkciwKJiM0MzsJCQkgICAgIHBoeXNfYWRkcl90IGVuZCkKIHsKIAlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlOwogCXN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0OwpAQCAtMTAyNyw4ICYjNDM7MTAyNywxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCSpwZXJfY3B1X3B0cihtbXUtJmd0O2xhc3RfdmNwdV9yYW4sIGNwdSkgPSAtMTsKIAotCSAvKiBUaGUgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLwotCW1tdS0mZ3Q7c3BsaXRfcGFnZV9jaHVua19zaXplID0gS1ZNX0FSTV9FQUdFUl9TUExJVF9DSFVOS19TSVpFX0RFRkFVTFQ7CiYjNDM7CSAvKiBUaGUgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBpZiBzeXN0ZW0gaGFzIG5vIEhEQlNTICovCiYjNDM7CWlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSkKJiM0MzsJCW1tdS0mZ3Q7c3BsaXRfcGFnZV9jaHVua19zaXplID0gMjU2ICogMTAyNCAqIFBBR0VfU0laRTsKJiM0MzsJZWxzZQomIzQzOwkJbW11LSZndDtzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDsKJiM0MzsKIAltbXUtJmd0O3NwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPOwogCiAJbW11LSZndDtwZ2RfcGh5cyA9IF9fcGEocGd0LSZndDtwZ2QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzIGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzCmluZGV4IDliODVhODRmNmZkNDk0Li5iZDJjMGJiOThkYTYxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcwpAQCAtNjksOCAmIzQzOzY5LDEwIEBAIEhBU19WQTUyCiBIQVNfVklSVF9IT1NUX0VYVE4KIEhBU19XRlhUCiBIQVNfWE5YCiYjNDM7SEFTX0hEQlNTCiBIQUZUCiBIV19EQk0KJiM0MztIQUNEQlMKIEtWTV9IVkhFCiBLVk1fUFJPVEVDVEVEX01PREUKIE1JU01BVENIRURfQ0FDSEVfVFlQRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9zeXNyZWcgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZwppbmRleCBiYzE3ODhiMTY2MmI3Ni4uN2I3YzNkNmEwZjAzMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnCkBAIC00NjM0LDYgJiM0Mzs0NjM0LDM2IEBAIEZpZWxkCTc6NglTTDAKIEZpZWxkCTU6MAlUMFNaCiBFbmRTeXNyZWcKIAomIzQzO1N5c3JlZwlIQUNEQlNCUl9FTDIJMwk0CTIJMwk0CiYjNDM7UmVzMAk2Mzo1NgomIzQzO0ZpZWxkCTU1OjEyCUJBRERSCiYjNDM7RmllbGQJMTEJRU4KJiM0MztSZXMwCTEwOjQKJiM0MztVbnNpZ25lZEVudW0JMzowCVNaCiYjNDM7CTBiMDAwMAk0SwomIzQzOwkwYjAwMDEJOEsKJiM0MzsJMGIwMDEwCTE2SwomIzQzOwkwYjAwMTEJMzJLCiYjNDM7CTBiMDEwMAk2NEsKJiM0MzsJMGIwMTAxCTEyOEsKJiM0MzsJMGIwMTEwCTI1NksKJiM0MzsJMGIwMTExCTUxMksKJiM0MzsJMGIxMDAwCTFNCiYjNDM7CTBiMTAwMQkyTQomIzQzO0VuZEVudW0KJiM0MztFbmRTeXNyZWcKJiM0MzsKJiM0MztTeXNyZWcJSEFDREJTQ09OU19FTDIJMwk0CTIJMwk1CiYjNDM7VW5zaWduZWRFbnVtCTYzOjYyCUVSUl9SRUFTT04KJiM0MzsJMGIwMAlOT0YKJiM0MzsJMGIwMQlTVFJVQ1RGCiYjNDM7CTBiMTAJSVBBRgomIzQzOwkwYjExCUlQQUhBQ0YKJiM0MztFbmRFbnVtCiYjNDM7UmVzMAk2MToxOQomIzQzO0ZpZWxkCTE4OjAJSU5ERVgKJiM0MztFbmRTeXNyZWcKJiM0MzsKIFN5c3JlZwlHQ1NDUl9FTDIJMwk0CTIJNQkwCiBGaWVsZHMJR0NTQ1JfRUx4CiBFbmRTeXNyZWcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaAppbmRleCBiYWVmNTI1MzY3YjVjNC4uZWFlZmI0OTRlZjU5NzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKQEAgLTE0NDksNiAmIzQzOzE0NDksNyBAQCBzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0IHsKIAl1MTYgdHJiZV9pbnRlcnJ1cHQ7CS8qIEFDUEkgNi41ICovCiAJdTE2IGlhZmZpZDsJCS8qIEFDUEkgNi43ICovCiAJdTMyIGlyc19pZDsKJiM0MzsJdTMyIGhhY2Ric2lycV9nc2k7CS8qIEFDUEkgNi5YICovCiB9OwogCiAvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oIGIvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjg0OTI5NzlkNjk0ZTcwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgKQEAgLTAsMCAmIzQzOzEsMzQgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC4KJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgJmx0O2xlby5icmFzQGFybS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX0tWTV9ESVJUWV9CSVRfSF9fCiYjNDM7I2RlZmluZSBfX0tWTV9ESVJUWV9CSVRfSF9fCiYjNDM7CiYjNDM7I2lmbmRlZiBDT05GSUdfSEFWRV9LVk1fSFdfRElSVFlfQklUCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCSAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiYjNDM7CQkJCQkgICBzdHJ1Y3Qga3ZtX2NsZWFyX2RpcnR5X2xvZyAqbG9nLAomIzQzOwkJCQkJICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLAomIzQzOwkJCQkJICAgYm9vbCAqZmx1c2gpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVOWElPOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCSAgICBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsCiYjNDM7CQkJCQkgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FTlhJTzsKJiM0Mzt9CiYjNDM7CiYjNDM7I2Vsc2UgLyogQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtX2RpcnR5X2JpdC5oJmd0OwomIzQzOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfSEFWRV9LVk1fSFdfRElSVFlfQklUICovCiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fS1ZNX0RJUlRZX0JJVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaCBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaAppbmRleCBlYjEwZDg3YWRmN2Q1OS4uMTkwZDk3ZmNlNGE0MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmgKQEAgLTg0LDYgJiM0Mzs4NCwxOCBAQCB2b2lkIGt2bV9kaXJ0eV9yaW5nX3B1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc2xvdCwgdTY0IG9mZnNldCk7CiAKIGJvb2wga3ZtX2RpcnR5X3JpbmdfY2hlY2tfcmVxdWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9kaXJ0eV9nZm5faGFydmVzdGVkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pCiYjNDM7ewomIzQzOwlyZXR1cm4gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2dmbi0mZ3Q7ZmxhZ3MpICZhbXA7IEtWTV9ESVJUWV9HRk5fRl9SRVNFVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2ludmFsaWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbikKJiM0Mzt7CiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7Z2ZuLSZndDtmbGFncywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpOwomIzQzOwogLyogZm9yIHVzZSBpbiB2bV9vcGVyYXRpb25zX3N0cnVjdCAqLwogc3RydWN0IHBhZ2UgKmt2bV9kaXJ0eV9yaW5nX2dldF9wYWdlKHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZywgdTMyIG9mZnNldCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBhYjhjZmFlYzgyZDMxZS4uN2VhNmVkN2NlMjAzYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTE2NjksNiAmIzQzOzE2NjksOSBAQCBib29sIGt2bV9hcmNoX3ZjcHVfcHJlZW1wdGVkX2luX2tlcm5lbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fYXJjaF9wcmVfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fYXJjaF9jcmVhdGVfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pOwogCiYjNDM7aW50IGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHBoeXNfYWRkcl90IGFkZHIsCiYjNDM7CQkJICAgICBwaHlzX2FkZHJfdCBlbmQpOwomIzQzOwogI2lmbmRlZiBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0MKIC8qCiAgKiBBbGwgYXJjaGl0ZWN0dXJlcyB0aGF0IHdhbnQgdG8gdXNlIHZ6YWxsb2MgY3VycmVudGx5IGFsc28KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL0tjb25maWcgYi92aXJ0L2t2bS9LY29uZmlnCmluZGV4IDc5NDk3NmI4OGM2Zjk3Li5mODc1N2I1Yjg0YjNlMCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9LY29uZmlnCkBAIC0yMCw2ICYjNDM7MjAsOSBAQCBjb25maWcgSEFWRV9LVk1fSVJRX1JPVVRJTkcKIGNvbmZpZyBIQVZFX0tWTV9ESVJUWV9SSU5HCiAgICAgICAgYm9vbAogCiYjNDM7Y29uZmlnIEhBVkVfS1ZNX0hXX0RJUlRZX0JJVAomIzQzOyAgICAgICBib29sCiYjNDM7CiAjIE9ubHkgc3Ryb25nbHkgb3JkZXJlZCBhcmNoaXRlY3R1cmVzIGNhbiBzZWxlY3QgdGhpcywgYXMgaXQgZG9lc24mIzM5O3QKICMgcHV0IGFueSBleHBsaWNpdCBjb25zdHJhaW50IG9uIHVzZXJzcGFjZSBvcmRlcmluZy4gVGhleSBjYW4gYWxzbwogIyBzZWxlY3QgdGhlIF9BQ1FfUkVMIHZlcnNpb24uCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9kaXJ0eV9yaW5nLmMgYi92aXJ0L2t2bS9kaXJ0eV9yaW5nLmMKaW5kZXggNTcyYjg1NGVkZjc0MGQuLmZlNGU3ZGE2Y2M0YTZhIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9kaXJ0eV9yaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZGlydHlfcmluZy5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rdm0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2RpcnR5X3JpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2RpcnR5X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9rdm0uaCZndDsKICNpbmNsdWRlICYjMzQ7a3ZtX21tLmgmIzM0OwogCkBAIC01MCwxOCAmIzQzOzUxLDMwIEBAIHN0YXRpYyBib29sIGt2bV9kaXJ0eV9yaW5nX2Z1bGwoc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nKQogCXJldHVybiBrdm1fZGlydHlfcmluZ191c2VkKHJpbmcpICZndDs9IHJpbmctJmd0O3NpemU7CiB9CiAKLXN0YXRpYyB2b2lkIGt2bV9yZXNldF9kaXJ0eV9nZm4oc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdCwgdTY0IG9mZnNldCwgdTY0IG1hc2spCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICoKJiM0MztfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpCiB7Ci0Jc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDsKIAlpbnQgYXNfaWQsIGlkOwogCiAJYXNfaWQgPSBzbG90ICZndDsmZ3Q7IDE2OwogCWlkID0gKHUxNilzbG90OwogCiAJaWYgKGFzX2lkICZndDs9IGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSkgfHwgaWQgJmd0Oz0gS1ZNX1VTRVJfTUVNX1NMT1RTKQotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkX3RvX21lbXNsb3QoX19rdm1fbWVtc2xvdHMoa3ZtLCBhc19pZCksIGlkKTsKJiM0Mzt9CiAKLQltZW1zbG90ID0gaWRfdG9fbWVtc2xvdChfX2t2bV9tZW1zbG90cyhrdm0sIGFzX2lkKSwgaWQpOwomIzQzO3N0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIHNsb3QpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1fcmVzZXRfZGlydHlfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QsIHU2NCBvZmZzZXQsIHU2NCBtYXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDsKJiM0MzsKJiM0MzsJbWVtc2xvdCA9IF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoa3ZtLCBzbG90KTsKIAogCWlmICghbWVtc2xvdCB8fCBvZmZzZXQgJmd0Oz0gbWVtc2xvdC0mZ3Q7bnBhZ2VzIHx8CiAJICAgIG9mZnNldCAmIzQzOyBfX2ZscyhtYXNrKSAmZ3Q7PSBtZW1zbG90LSZndDtucGFnZXMpCkBAIC04OCwyMSAmIzQzOzEwMSwxMSBAQCBpbnQga3ZtX2RpcnR5X3JpbmdfYWxsb2Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZGlydHlfZ2ZuX3NldF9pbnZhbGlkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pCi17Ci0Jc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtnZm4tJmd0O2ZsYWdzLCAwKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2RpcnRpZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbikKIHsKIAlnZm4tJmd0O2ZsYWdzID0gS1ZNX0RJUlRZX0dGTl9GX0RJUlRZOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2RpcnR5X2dmbl9oYXJ2ZXN0ZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbikKLXsKLQlyZXR1cm4gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2dmbi0mZ3Q7ZmxhZ3MpICZhbXA7IEtWTV9ESVJUWV9HRk5fRl9SRVNFVDsKLX0KLQogaW50IGt2bV9kaXJ0eV9yaW5nX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLAogCQkJIGludCAqbnJfZW50cmllc19yZXNldCkKIHsKQEAgLTEzMSw2ICYjNDM7MTM0LDkgQEAgaW50IGt2bV9kaXJ0eV9yaW5nX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLAogCSAqLwogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCiYjNDM7CWlmIChrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKGt2bSwgcmluZywgbnJfZW50cmllc19yZXNldCkgJmd0Oz0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCXdoaWxlIChsaWtlbHkoKCpucl9lbnRyaWVzX3Jlc2V0KSAmbHQ7IElOVF9NQVgpKSB7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRUlOVFI7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCBlNDRjMjBjMDQ5NjEwZC4uYTI1Yjg5MDJjZGZjMTcgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtNjUsNiAmIzQzOzY1LDcgQEAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMva3ZtLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC9rdm1fZGlydHlfcmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdm1fZGlydHlfYml0LmgmZ3Q7CiAKIAogLyogV29yc3QgY2FzZSBidWZmZXIgc2l6ZSBuZWVkZWQgZm9yIGhvbGRpbmcgYW4gaW50ZWdlci4gKi8KQEAgLTIyNjIsNiAmIzQzOzIyNjMsMTAgQEAgc3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZykKIAkJZGlydHlfYml0bWFwX2J1ZmZlciA9IGt2bV9zZWNvbmRfZGlydHlfYml0bWFwKG1lbXNsb3QpOwogCQltZW1zZXQoZGlydHlfYml0bWFwX2J1ZmZlciwgMCwgbik7CiAKJiM0MzsJCWlmIChrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoa3ZtLCBtZW1zbG90LCBOVUxMLAomIzQzOwkJCQkJICAgICBkaXJ0eV9iaXRtYXBfYnVmZmVyLCAmYW1wO2ZsdXNoKSAmZ3Q7PSAwKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwogCQlLVk1fTU1VX0xPQ0soa3ZtKTsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IG4gLyBzaXplb2YobG9uZyk7IGkmIzQzOyYjNDM7KSB7CiAJCQl1bnNpZ25lZCBsb25nIG1hc2s7CkBAIC0yMjgxLDYgJiM0MzsyMjg2LDcgQEAgc3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZykKIAkJS1ZNX01NVV9VTkxPQ0soa3ZtKTsKIAl9CiAKJiM0MztvdXQ6CiAJaWYgKGZsdXNoKQogCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnNfbWVtc2xvdChrdm0sIG1lbXNsb3QpOwogCkBAIC0yMzczLDYgJiM0MzsyMzc5LDEwIEBAIHN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwKIAlpZiAoY29weV9mcm9tX3VzZXIoZGlydHlfYml0bWFwX2J1ZmZlciwgbG9nLSZndDtkaXJ0eV9iaXRtYXAsIG4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAomIzQzOwlpZiAoa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKGt2bSwgbWVtc2xvdCwgbG9nLCBkaXJ0eV9iaXRtYXBfYnVmZmVyLAomIzQzOwkJCQkgICAgICZhbXA7Zmx1c2gpICZndDs9IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAlLVk1fTU1VX0xPQ0soa3ZtKTsKIAlmb3IgKG9mZnNldCA9IGxvZy0mZ3Q7Zmlyc3RfcGFnZSwgaSA9IG9mZnNldCAvIEJJVFNfUEVSX0xPTkcsCiAJCSBuID0gRElWX1JPVU5EX1VQKGxvZy0mZ3Q7bnVtX3BhZ2VzLCBCSVRTX1BFUl9MT05HKTsgbi0tOwpAQCAtMjM5MiwxMiAmIzQzOzI0MDIsMTMgQEAgc3RhdGljIGludCBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3Qoc3RydWN0IGt2bSAqa3ZtLAogCQkqLwogCQlpZiAobWFzaykgewogCQkJZmx1c2ggPSB0cnVlOwomIzQzOwogCQkJa3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKGt2bSwgbWVtc2xvdCwKIAkJCQkJCQkJb2Zmc2V0LCBtYXNrKTsKIAkJfQogCX0KIAlLVk1fTU1VX1VOTE9DSyhrdm0pOwotCiYjNDM7b3V0OgogCWlmIChmbHVzaCkKIAkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzX21lbXNsb3Qoa3ZtLCBtZW1zbG90KTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM3NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDc0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQVJNNjQgS1ZNIEhhcmR3YXJlIERpcnR5IEJpdCBDbGVhbmluZyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIEhhcmR3YXJlIEFzc2lzdGVkIENsZWFuIERpcnR5IEJpdCBTdXBwb3J0IChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0JiMzOTtzIGNsZWFybHkgYWRkaW5nIHRoZSBpbmZyYXN0cnVjdHVyZSBmb3IgaGFyZHdhcmUtYXNzaXN0ZWQgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpLCBhbmQgaXQgbG9va3MgZnVuY3Rpb25hbC4gVGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIGRlZmluaXRlbHkgZnV6emluZyB0byBlbnN1cmUgcm9idXN0bmVzcy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgaW50cm9kdWNpbmcgYSBoYW5kZnVsIG9mIG5ldyBmaWxlcywgYGFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jYCwgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaGAsIHdoaWNoIGFyZSBhbGwgc3RhbmRhcmQgZm9yIGZlYXR1cmUgYWRkaXRpb25zLiBUaGVuIHdlIGhhdmUgbW9kaWZpY2F0aW9ucyBpbiBleGlzdGluZyBmaWxlcyB0aGF0IGluY2x1ZGUgYGFyY2gvYXJtNjQva3ZtL2FybS5jYCwgYGFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNgLCBgYXJjaC9hcm02NC9rdm0vbW11LmNgLCBgdmlydC9rdm0vZGlydHlfcmluZy5jYCwgYW5kIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gTWFrZXMgc2Vuc2UsIHRoZXkgbmVlZCB0byBob29rIGludG8gdGhlIGV4aXN0aW5nIGt2bSBhcmNoaXRlY3R1cmUuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGtleSBmdW5jdGlvbnMuIEkgc2VlIGEgY29yZSBzZXQgb2YgZnVuY3Rpb25zIGluIGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AgdGhhdCBhcmUgdGhlIGhlYXJ0IG9mIHRoaXM6IGBoYWNkYnNfc3RhcnRgLCBgaGFjZGJzX3N0b3BgLCBgZGlydHlfYml0X2NsZWFyYCwgYGhkYnNzX3RvX2JpdG1hcGAsIGBtYXNrX3RvX2hkYnNzYCwgYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBoYWNkYnNpcnFfaGFuZGxlcmAsIGBrdm1faGFjZGJzX2NwdV91cGAsIGBrdm1faGFjZGJzX2NwdV9kb3duYCwgYGhhY2Ric19hY3BpX2dldF9pcnFgLCBhbmQgYGt2bV9oYWNkYnNfaW5pdGAuIFRoaXMgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIHRoZSBzZXR1cCwgYW5kIHRoZSBjb250cm9sIGZ1bmN0aW9ucy4KClRoZSBvdGhlciBtb2RpZmllZCBmaWxlcyBsb29rIGxpa2Ugc3VwcG9ydCBmdW5jdGlvbnM6CgoqICAgYHZpcnQva3ZtL2RpcnR5X3JpbmcuY2A6ICBgX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgYW5kIGBrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAuICBUaGVzZSBoYW5kbGUgbWVtc2xvdCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgZGlydHkgcmluZy4KKiAgIGBhcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jYDogYHN0YWdlMl9zZXRfcHJvdF9hdHRyYCwgYGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtc2AsIGFuZCBgX19rdm1fcGd0YWJsZV9zdGFnZTJfaW5pdGAuIFRoaXMgaXMgZGVhbGluZyB3aXRoIHRoZSBwYWdlIHRhYmxlIG9wZXJhdGlvbnMgYW5kIHRoZSBuZXcgcGVybWlzc2lvbnMuCiogICBgYXJjaC9hcm02NC9rdm0vbW11LmNgOiBga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzYCBhbmQgYGt2bV9pbml0X3N0YWdlMl9tbXVgLiBUaGlzIHNlZW1zIHJlbGF0ZWQgdG8gdGhlIE1NVSBhbmQgcG90ZW50aWFsbHkgdGhlIGhhbmRsaW5nIG9mIGxhcmdlIHBhZ2VzIGFuZCBzdGFnZTIgTU1VIGluaXRpYWxpemF0aW9uIHdpdGggdGhlIG5ldyBIREJTUy9IQUNEQlMgZnVuY3Rpb25hbGl0eS4KKiAgIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYDogYGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3RgIGFuZCBga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0YC4gVGhlc2UgZnVuY3Rpb25zIHNlZW0gdG8gY29udHJvbCB0aGUgYWNjZXNzIG9yIHBlcm1pc3Npb25zIGZvciB0aGUgZGlydHkgbG9nLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBjb25maWd1cmF0aW9uLiBUaGUgZGVwZW5kZW5jeSBvbiBgQUNQSWAgYmVpbmcgZW5hYmxlZCwgdGhyb3VnaCBgc2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJYCBpcyBpbXBvcnRhbnQuIEFsc28sIHRoZSBgaGFjZGJzX2FjcGlfZ2V0X2lycWAgZnVuY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1c2luZyBgI2lmZGVmIENPTkZJR19BQ1BJYC4gU28gaWYgQUNQSSBpc24mIzM5O3QgZW5hYmxlZCwgdGhpcyBuZXcgZGlydHkgYml0IGZlYXR1cmUgd29uJiMzOTt0IHdvcmsuIFdlIG5lZWQgQUNQSSBzdXBwb3J0IGVuYWJsZWQsIGFuZCBLVk0gb2YgY291cnNlLiBUaW1lIHRvIGxvb2sgYXJvdW5kIGZvciBob3cgSEFWRV9LVk1fSFdfRElSVFlfQklUIGlzIHVzZWQgZWxzZXdoZXJlLCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9LVk1fSFdfRElSVFlfQklUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM2LVx0c2VsZWN0IEhBVkVfS1ZNX1ZDUFVfUlVOX1BJRF9DSEFOR0VcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzc6XHRzZWxlY3QgSEFWRV9LVk1fSFdfRElSVFlfQklUIGlmIEFDUElcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMzgtXHRzZWxlY3QgU0NIRURfSU5GT1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oLTktXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaDoxMDojaWZuZGVmIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVRcbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oLTExLVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oPTIxPXN0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oLTI3LVxuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0Lmg6Mjg6I2Vsc2UgLyogQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVCAqL1xuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgtMjktXG4tLVxuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgtMzEtXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaDozMjojZW5kaWYgLyogQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVCAqL1xuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgtMzMtXG4tLVxudmlydC9rdm0vS2NvbmZpZz0yMD1jb25maWcgSEFWRV9LVk1fRElSVFlfUklOR1xuLS1cbnZpcnQva3ZtL0tjb25maWctMjItXG52aXJ0L2t2bS9LY29uZmlnOjIzOmNvbmZpZyBIQVZFX0tWTV9IV19ESVJUWV9CSVRcbnZpcnQva3ZtL0tjb25maWctMjQtICAgICAgIGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQzMAoJCQkJCQkJb3V0cHV0OiA2MQoJCQkJCQkJdGhvdWdodHM6IDQ1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIEhhcmR3YXJlIERpcnR5IEJpdCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBIQVZFX0tWTV9IV19ESVJUWV9CSVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBhIGhpZGRlbiBib29sLCBzZWxlY3RlZCBieSB0aGUgYEtWTWAgbW9kdWxlLCBhbmQgaXQmIzM5O3MgY29uZGl0aW9uYWwgb24gYEFDUElgIGJlaW5nIGVuYWJsZWQuIFJpZ2h0IGF3YXksIEkgc2VlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggYEtWTWAgYW5kIGBBQ1BJYCBhcmUgaW5jbHVkZWQgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBObyBicmFpbmVyLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBoZXJlIHRvIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGguIEkmIzM5O20gZm9jdXNpbmcgb246CgoqICAgYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYAoqICAgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAKKiAgIGBkaXJ0eV9iaXRfY2xlYXJgCiogICBgaGFjZGJzX3N0YXJ0YAoqICAgYGhhY2Ric19zdG9wYAoqICAgYGhhY2Ric2lycV9oYW5kbGVyYAoqICAgYGt2bV9oYWNkYnNfaW5pdGAKKiAgIGBrdm1faGFjZGJzX2NwdV91cGAKKiAgIGBrdm1faGFjZGJzX2NwdV9kb3duYAoqICAgYGhkYnNzX3RvX2JpdG1hcGAKKiAgIGBtYXNrX3RvX2hkYnNzYAoqICAgYF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgCiogICBga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcXVpY2tseSBjbGFzc2lmeSB0aGVzZSBmb3Igc2NvcGUuIENvbmZpcm1lZCwgYGRpcnR5X2JpdF9jbGVhcmAgaXMgc3RhdGljLiBMb29rcyBsaWtlIGBoYWNkYnNfc3RhcnRgIGFuZCBgaGFjZGJzX3N0b3BgIGFyZSBzdGF0aWMgdG9vLiBgaGRic3NfdG9fYml0bWFwYCBhbmQgYG1hc2tfdG9faGRic3NgIGFyZSBzdGF0aWMgaW5saW5lLCBnb29kLiBgaGFjZGJzaXJxX2hhbmRsZXJgIGlzIHN0YXRpYyBhcyB3ZWxsLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGdsb2JhbCBvciBleHBvcnRlZCBvbmVzIGFyZTogYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBrdm1faGFjZGJzX2luaXRgLCBga3ZtX2hhY2Ric19jcHVfdXBgLCBga3ZtX2hhY2Ric19jcHVfZG93bmAsIGFuZCBga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgLiBgX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgaXMgc3RhdGljIGlubGluZS4KCkZpbmFsbHksIEkgc2hvdWxkIHRha2UgYSBwZWVrIGF0IGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgZWxzZSByZWxldmFudCB0aGVyZS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihbYS16X0EtWjAtOV0mIzQzOyApJiM0MztbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jPTI2PXN0YXRpYyBfX3JvX2FmdGVyX2luaXQgaW50IGhhY2Ric2lycSA9IC0xO1xuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjctXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzoyODpzdGF0aWMgdm9pZCBoYWNkYnNfc3RhcnQodTY0ICpod19lbnRyaWVzLCBpbnQgc2l6ZSlcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTI5LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy01MS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjUyOnN0YXRpYyBpbnQgaGFjZGJzX3N0b3Aodm9pZClcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTUzLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy03NC0gKi9cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjc1OnN0YXRpYyBpbnQgZGlydHlfYml0X2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpod19lbnRyaWVzLCBpbnQgc2l6ZSlcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTc2LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xMDctXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzoxMDg6c3RhdGljIGlubGluZSB2b2lkIGhkYnNzX3RvX2JpdG1hcCh1NjQgKmhkYnNzX2FycmF5LCBpbnQgc3RhcnQsIGludCBlbmQsXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xMDktXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpkaXJ0eV9iaXRtYXAsXG4tLVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMTI5LVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MTMwOnN0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xMzEtXHRcdFx0XHR1NjQgdHR3bCwgaW50IGlkeCwgaW50IGVudHJpZXNfc3opXG4tLVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMTQ4LVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MTQ5OmludCBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xNTAtXHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4tLVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjU4LVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MjU5OmludCBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0yNjAtXHRcdFx0XHRpbnQgKm5yX2VudHJpZXNfcmVzZXQpXG4tLVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzI0LVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MzI1OnN0YXRpYyBpcnFyZXR1cm5fdCBoYWNkYnNpcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwY3B1KVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzI2LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNTEtXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzozNTI6dm9pZCBrdm1faGFjZGJzX2NwdV91cCh2b2lkKVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzUzLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNjAtXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzozNjE6dm9pZCBrdm1faGFjZGJzX2NwdV9kb3duKHZvaWQpXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNjIte1xuLS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM3MC0jaWZkZWYgQ09ORklHX0FDUElcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjM3MTpzdGF0aWMgaW50IF9faW5pdCBoYWNkYnNfYWNwaV9nZXRfaXJxKHZvaWQpXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNzIte1xuLS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM5NC1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjM5NTp2b2lkIF9faW5pdCBrdm1faGFjZGJzX2luaXQodm9pZClcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM5Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NjEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IEtWTSBEaXJ0eSBMb2cgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlIEtWTSBkaXJ0eSBsb2cgaW1wbGVtZW50YXRpb24gYW5kIGZpZ3VyZSBvdXQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgaGFuZGZ1bCBvZiBmdW5jdGlvbnMgdGhhdCBsb29rIGltcG9ydGFudDogYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBkaXJ0eV9iaXRfY2xlYXJgLCB0aG9zZSBzZWVtIG9idmlvdXMgZm9yIGNsZWFyaW5nIGFuZCBtYW5hZ2luZyB0aGUgZGlydHkgbG9nLiBUaGVuIHRoZXJlJiMzOTtzIGBoYWNkYnNfc3RhcnRgLCBgaGFjZGJzX3N0b3BgLCBhbmQgYGhhY2Ric2lycV9oYW5kbGVyYCwgd2hpY2ggc2VlbSByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZS1hc3Npc3RlZCBkaXJ0eSBiaXQgdHJhY2tpbmcsIHdoaWNoIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gQW5kIG9mIGNvdXJzZSwgdGhlIGNvbnZlcnNpb25zIGJldHdlZW4gZGlydHkgYml0bWFwcyBhbmQgaGFyZHdhcmUgZGlydHkgYml0IHN0cnVjdHVyZXM6IGBoZGJzc190b19iaXRtYXBgLCBgbWFza190b19oZGJzc2AuIFRob3NlIGFyZSBlc3NlbnRpYWwuIEZpbmFsbHksIEkgc2VlIHRoZSBmdW5jdGlvbnMgYGt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YCBhbmQgYF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgLiBXYWl0IGEgc2Vjb25k4oCmIGlzbiYjMzk7dCBgX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgZGVjbGFyZWQgYXMgc3RhdGljIGlubGluZT8gVGhhdCBtaWdodCBtYWtlIGl0IGEgbGl0dGxlIGxlc3MgdXNlZnVsIGFzIGEgc3ltYm9sIHRvIHRyYWNrIGRpcmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGlubGluaW5nIGlzIGhhbmRsZWQgYnkgdGhlIGNvbXBpbGVyLiBCdXQsIGBrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgaXMgZ2xvYmFsLCBzbyBJIHRoaW5rIHRoYXQgaXMgc3RpbGwgc2FmZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHZpcnQva3ZtL2RpcnR5X3JpbmcuY2AgdG8gY29uZmlybSB3aGVyZSBga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCBpcyB1c2VkLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2RpcnR5X3JpbmcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9kaXJ0eV9yaW5nLmM9NTQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo1NTpfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtNTYte1xuLS1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy02Ny1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo2ODpzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICprdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KVxudmlydC9rdm0vZGlydHlfcmluZy5jLTY5LXtcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo3MDpcdHJldHVybiBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgc2xvdCk7XG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtNzEtfVxuLS1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYz03Mz1zdGF0aWMgdm9pZCBrdm1fcmVzZXRfZGlydHlfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QsIHU2NCBvZmZzZXQsIHU2NCBtYXNrKVxuLS1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy03Ni1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo3NzpcdG1lbXNsb3QgPSBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgc2xvdCk7XG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtNzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MTMKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEFSTTY0IEtWTSBTdGFnZSAyIFBhZ2UgVGFibGUgUHJvdGVjdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGNvcmUgb2YgaG93IHN0YWdlIDIgcGFnZSB0YWJsZSBwZXJtaXNzaW9ucyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIEFSTTY0IEtWTSBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gYGFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGZvciBzZXR0aW5nIGFuZCByZWxheGluZyBwcm90ZWN0aW9uIGF0dHJpYnV0ZXMuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBzdGFnZTJfc2V0X3Byb3RfYXR0cmAuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGd1ZXN0JiMzOTtzIHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIGFuZCBlbmZvcmNlZCBhdCB0aGUgaHlwZXJ2aXNvciBsZXZlbC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGlzIGZ1bmN0aW9uIG1hbmlwdWxhdGVzIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIHdoYXQgZmxhZ3MgYXJlIGJlaW5nIHNldCAoZS5nLiwgcmVhZCwgd3JpdGUsIGV4ZWN1dGUgcGVybWlzc2lvbnMsIGFuZCBwb3NzaWJseSBjYWNoZSBhdHRyaWJ1dGVzKS4gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgaGVyZSBpcyB2aXRhbCBmb3Igc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlLgoKRm9sbG93aW5nIHRoYXQsIEkmIzM5O2xsIGV4YW1pbmUgYGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtc2AuIFRoZSBuYW1lIGFsb25lIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB3ZWFrZW5pbmcgcGVybWlzc2lvbnMsIHBlcmhhcHMgdG8gZW5hYmxlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBndWVzdCBvciB0byBhdm9pZCBpc3N1ZXMgd2hlbiB0cmFuc2xhdGluZyBvciBtYW5pcHVsYXRpbmcgZGF0YS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHNjZW5hcmlvcyB3aGVyZSB0aGUgcmVsYXhhdGlvbiBvY2N1cnMuIEFyZSB0aGVyZSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucyBvciB1bmRlciBwYXJ0aWN1bGFyIGNvbmRpdGlvbnMgd2hlcmUgdGhpcyBoYXBwZW5zPyBBcmUgdGhlcmUgYW55IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIG9yIHRyYWRlLW9mZnM/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCByZWxheGluZyBwcm90ZWN0aW9ucyBpbnRyb2R1Y2VzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlIGJhc2UsIGJ1dCB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCBteSBpbml0aWFsIGluc2lnaHQuIFRoaXMgd2lsbCBiZSBhbiBpbXBvcnRhbnQgcGxhY2UgdG8gc3RhcnQgdW5kZXJzdGFuZGluZyBob3cgZ3Vlc3QgdmlydHVhbCBtZW1vcnkgaXMgbWFuYWdlZCBhbmQgc2VjdXJlZCB3aXRoaW4gdGhlIEFSTTY0IEtWTSBoeXBlcnZpc29yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFnZTJfc2V0X3Byb3RfYXR0cnxrdm1fcGd0YWJsZV9zdGFnZTJfcmVsYXhfcGVybXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9Njc3PXN0YXRpYyBpbnQgc3RhZ2UyX3NldF94bl9hdHRyKGVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90LCBrdm1fcHRlX3QgKmF0dHIpXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYy03MDEtXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jOjcwMjpzdGF0aWMgaW50IHN0YWdlMl9zZXRfcHJvdF9hdHRyKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcHJvdCxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtNzAzLVx0XHRcdFx0a3ZtX3B0ZV90ICpwdGVwKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9MTA5OD1pbnQga3ZtX3BndGFibGVfc3RhZ2UyX21hcChzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsIHU2NCBzaXplLFxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtMTExOS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM6MTEyMDpcdHJldCA9IHN0YWdlMl9zZXRfcHJvdF9hdHRyKHBndCwgcHJvdCwgXHUwMDI2bWFwX2RhdGEuYXR0cik7XG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jLTExMjEtXHRpZiAocmV0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9MTM0NT1ib29sIGt2bV9wZ3RhYmxlX3N0YWdlMl90ZXN0X2NsZWFyX3lvdW5nKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCB1NjQgYWRkcixcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jLTEzNjAtXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jOjEzNjE6aW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jLTEzNjItXHRcdFx0XHQgICBlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcHJvdCwgZW51bSBrdm1fcGd0YWJsZV93YWxrX2ZsYWdzIGZsYWdzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9MTQyMz1rdm1fcHRlX3QgKmt2bV9wZ3RhYmxlX3N0YWdlMl9jcmVhdGVfdW5saW5rZWQoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYy0xNDU3LVxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYzoxNDU4Olx0cmV0ID0gc3RhZ2UyX3NldF9wcm90X2F0dHIocGd0LCBwcm90LCBcdTAwMjZtYXBfZGF0YS5hdHRyKTtcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtMTQ1OS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjQwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipLVk0gUGVybWlzc2lvbiBSZWxheGF0aW9uOiBBIExvZ2ljYWwgU3RhcnRpbmcgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gYXBwcm9hY2ggdGhpcy4uLiBga3ZtX3BndGFibGVfc3RhZ2UyX3JlbGF4X3Blcm1zYCBmZWVscyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIGluIHRoZSByZWFsbSBvZiBwZXJtaXNzaW9ucywgYW5kIHdlJiMzOTtyZSBsb29raW5nIHRvIHJlbGF4IHNvbWV0aGluZywgcmlnaHQ/IE1ha2VzIHNlbnNlIHRvIGJlZ2luIHdpdGggYSBmdW5jdGlvbiBuYW1lIHRoYXQgaGludHMgYXQgdGhhdC4KCk5vdywgd2hlcmUgd2FzIHRoYXQgaHVnZSBwYWdlIHNwbGl0IGNvZGUgYWdhaW4/IEFoLCByaWdodCEgV2Ugc2hvdWxkIGNoZWNrIGBhcmNoL2FybTY0L2t2bS9tbXUuY2AsIGluIHBhcnRpY3VsYXIgZm9yIHRoZSBmdW5jdGlvbiBga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIHN0dWZmIGNvbmNlcm5pbmcgaHVnZSBwYWdlcyBpcy4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIHBvdGVudGlhbCBjaGFuZ2VzLiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL21tdS5jPTEwNj1zdGF0aWMgYm9vbCBuZWVkX3NwbGl0X21lbWNhY2hlX3RvcHVwX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExOS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEyMDppbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkcixcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEyMS1cdFx0XHQgICAgIHBoeXNfYWRkcl90IGVuZClcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMjk5PXN0YXRpYyB2b2lkIGt2bV9tbXVfc3BsaXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEzMTMtXHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMzE0Olx0a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKGt2bSwgc3RhcnQsIGVuZCk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMzE1LVx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTMyOT12b2lkIGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTM0OS1cdGlmIChrdm1fZGlydHlfbG9nX21hbnVhbF9wcm90ZWN0X2FuZF9pbml0X3NldChrdm0pKVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTM1MDpcdFx0a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKGt2bSwgc3RhcnQsIGVuZCk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMzUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM3NQoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYSBQb3RlbnRpYWwgU3RyYXRlZ3kqKgoKUmlnaHQsIHRoaW5raW5nIGFib3V0IHRoaXMuLi4gYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AgaXMgbG9va2luZyBsaWtlIGEgc29saWQgbGVhZC4gTXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgbGVhbmluZyB0b3dhcmRzIGl0LiBJJiMzOTttIHN0YXJ0aW5nIHRvIHZpc3VhbGl6ZSB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3NzaWJpbGl0aWVzIHdpdGhpbiB0aGF0IGNvbnRleHQuCgpOb3csIHdoZXJlIGRvIEkgbmVlZCB0byBnbyB0byBzdGFydCBkaWdnaW5nIGluPyBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGlydHkgbG9nIHByb3RlY3Rpb24gbWVjaGFuaXNtcyBpbnRlcmFjdCB3aXRoIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBJJiMzOTtsbCBmb2N1cyBvbiBga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdGAgYW5kIGBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3RgIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIGRpcnR5IHBhZ2UgdHJhY2tpbmcuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBzcGxpdHRpbmcgaHVnZSBwYWdlcyBpbXBhY3RzIHRob3NlIGZ1bmN0aW9ucywgYW5kIHZpY2UtdmVyc2EuIFVuZGVyc3RhbmRpbmcgdGhlIGxvY2tpbmcgYW5kIHRoZSBnZW5lcmFsIGZsb3cgaXMgY3JpdGljYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdHxrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MjE5OD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dldF9kaXJ0eV9sb2cpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjIwMS0vKipcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjIwMjogKiBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0IC0gZ2V0IGEgc25hcHNob3Qgb2YgZGlydHkgcGFnZXNcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjIwMy0gKlx0YW5kIHJlZW5hYmxlIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHBhZ2VzLlxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjIyMS0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjIyMjpzdGF0aWMgaW50IGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyAqbG9nKVxudmlydC9rdm0va3ZtX21haW4uYy0yMjIzLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIyNTctXHRcdCAqIGt2bV9nZXRfZGlydHlfbG9nLCBidXQgaG9wZWZ1bGx5IGFsbCBhcmNoaXRlY3R1cmVcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjI1ODpcdFx0ICogdHJhbnNpdGlvbiB0byBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0IGFuZCBrdm1fZ2V0X2RpcnR5X2xvZ1xudmlydC9rdm0va3ZtX21haW4uYy0yMjU5LVx0XHQgKiBjYW4gYmUgZWxpbWluYXRlZC5cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMDQtICogU3RlcHMgMS00IGJlbG93IHByb3ZpZGUgZ2VuZXJhbCBvdmVydmlldyBvZiBkaXJ0eSBwYWdlIGxvZ2dpbmcuIFNlZVxudmlydC9rdm0va3ZtX21haW4uYzoyMzA1OiAqIGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3QoKSBmdW5jdGlvbiBkZXNjcmlwdGlvbiBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLlxudmlydC9rdm0va3ZtX21haW4uYy0yMzA2LSAqXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIzMDc6ICogV2UgY2FsbCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KCkgdG8gaGFuZGxlIHN0ZXBzIDEtMywgdXBvbiByZXR1cm4gd2VcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjMwOC0gKiBhbHdheXMgZmx1c2ggdGhlIFRMQiAoc3RlcCA0KSBldmVuIGlmIHByZXZpb3VzIHN0ZXAgZmFpbGVkICBhbmQgdGhlIGRpcnR5XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0yMzE4PXN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjMyNC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMyNTpcdHIgPSBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KGt2bSwgbG9nKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjMyNi1cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzEtLyoqXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIzMzI6ICoga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0IC0gY2xlYXIgZGlydHkgYml0cyBpbiB0aGUgYml0bWFwXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzMtICpcdGFuZCByZWVuYWJsZSBkaXJ0eSBwYWdlIHRyYWNraW5nIGZvciB0aGUgY29ycmVzcG9uZGluZyBwYWdlcy5cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzYtICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIzMzc6c3RhdGljIGludCBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3Qoc3RydWN0IGt2bSAqa3ZtLFxudmlydC9rdm0va3ZtX21haW4uYy0yMzM4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2cpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0yNDE4PXN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yNDI0LVxudmlydC9rdm0va3ZtX21haW4uYzoyNDI1Olx0ciA9IGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdChrdm0sIGxvZyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0MjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjEyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRGlydHkgTG9nIGFuZCBSaW5nIFJlc2V0IE1lY2hhbmlzbXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGlydHkgbG9nIGFuZCByaW5nIHJlc2V0IGltcGxlbWVudGF0aW9ucyB3aXRoaW4gS1ZNLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3RgIGFuZCBga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0YCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyB0eXBpY2FsIGZvciBoZWxwZXIgZnVuY3Rpb25zLiBMZXQgbWUgdGhpbmssIHNvIHRoZXNlIGFyZSBoZWxwZXIgZnVuY3Rpb25zLiBBaCwgYW5kIGhlcmUgYXJlIHRoZSByZWxldmFudCBpb2N0bCBoYW5kbGVycyDigJMgYGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nYCBhbmQgYGt2bV92bV9pb2N0bF9jbGVhcl9kaXJ0eV9sb2dgLiBUaGV5IGxpa2VseSB3cmFwIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkgYWxzbyBzZWUgdGhhdCBga3ZtX2RpcnR5X3JpbmdfcmVzZXRgIGlzIGFuIGlvY3RsIGhhbmRsZXIgYXMgd2VsbC4gUmlnaHQsIEkgbmVlZCB0byBzZWUgaG93IGBrdm1fZGlydHlfcmluZ19yZXNldGAgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBrdm1fZGlydHlfcmluZ19yZXNldGAgaXMgZGVmaW5lZCBpbiBgdmlydC9rdm0vZGlydHlfcmluZy5jYCwgc28gSSBzaG91bGQgc3RhcnQgdGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgcmVzZXQgcHJvY2VkdXJlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2RpcnR5X3JpbmdfcmVzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9kaXJ0eV9yaW5nLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vZGlydHlfcmluZy5jPTEwND1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX2RpcnR5X2dmbl9zZXRfZGlydGllZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuLS1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy0xMDgtXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmM6MTA5OmludCBrdm1fZGlydHlfcmluZ19yZXNldChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZyxcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy0xMTAtXHRcdFx0IGludCAqbnJfZW50cmllc19yZXNldClcbi0tXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtMjE5LVxudmlydC9rdm0vZGlydHlfcmluZy5jOjIyMDpcdHRyYWNlX2t2bV9kaXJ0eV9yaW5nX3Jlc2V0KHJpbmcpO1xudmlydC9rdm0vZGlydHlfcmluZy5jLTIyMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaXJ0eSBMb2cgYW5kIFJlbGF0ZWQgS1ZNIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGRpcnR5IGxvZyBtZWNoYW5pc20gd2l0aGluIEtWTS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGRpcmVjdGx5IGludm9sdmVkOiBgX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXJgLCBgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyYCwgYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AsIGBrdm1fZGlydHlfcmluZ19yZXNldGAsIGBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZ2AsIGFuZCBga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZ2AsIGFuZCBga3ZtX3BndGFibGVfc3RhZ2UyX3JlbGF4X3Blcm1zYC4gVGhlIGtleSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkaXJ0eSBsb2cgaXMgbWFuYWdlZCBhbmQgY2xlYXJlZC4KCkkgaGFkIHRvIGRvdWJsZS1jaGVjayBga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2dgIGFuZCBga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZ2AsIHNpbmNlIHRob3NlIElPQ1RMcyBjYW4gYmUgcXVpdGUgdHJpY2t5LiBBaCwgcmlnaHQsIHRoZSBhY3R1YWwgbW9kaWZpY2F0aW9ucyBhcmUgaGl0dGluZyB0aGUgKnByb3RlY3QqIHZlcnNpb25zOiBga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdGAgYW5kIGBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3RgLiBObyBwcm9ibGVtOyBldmVuIHRob3VnaCB0aG9zZSBhcmUgc3RhdGljLCB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBjcml0aWNhbCBwYXRoLCBzbyBJIG5lZWQgdG8gaW5jbHVkZSB0aGVtIGluIG15IGFuYWx5c2lzLgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AuIEkgcmVjYWxsIHRoYXQgYGRpcnR5X2JpdF9jbGVhcmAgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgKnRoZSogY29yZSBjbGVhcmluZyBsb2dpYy4gQWxzbywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYGhhY2Ric19zdGFydGAsIGBoYWNkYnNfc3RvcGAsIGFuZCBgaGFjZGJzaXJxX2hhbmRsZXJgIGFzIHRoZXkgYXJlIGludGVncmFsIHRvIHRoZSBoYXJkd2FyZS1hc3Npc3RlZCBkaXJ0eSBiaXQgdHJhY2tpbmcgZnVuY3Rpb25hbGl0eS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biBhIG1vcmUgcmVmaW5lZCBsaXN0LiBDb25zaWRlcmluZyB0aGUgY29yZSBvcGVyYXRpb25zLCBJJiMzOTtsbCBkZWZpbml0ZWx5IGluY2x1ZGU6IGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBgZGlydHlfYml0X2NsZWFyYCwgYGhhY2Ric2lycV9oYW5kbGVyYCwgYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AsIGBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0YCwgYGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdGAsIGFuZCBga3ZtX2RpcnR5X3JpbmdfcmVzZXRgLgoKSSBjYW4gc2VlIHRoYXQgbXkgaW5pdGlhbCBsaXN0IGNhbiBiZSB0cmltbWVkIGEgYml0LiBGb2N1c2luZyBvbiB0aGUgY2VudHJhbCBsb2dpYywgSSB3aWxsIHJlZmluZSBpdCB0bzogYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBkaXJ0eV9iaXRfY2xlYXJgLCBgaGFjZGJzaXJxX2hhbmRsZXJgLCBhbmQgYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIG9mIHN0YXRpYyBmdW5jdGlvbnMuIEl0JiMzOTtzIHBlcmZlY3RseSBmaW5lIHRvIGluY2x1ZGUgdGhlbSBiZWNhdXNlIHRoZXkgYXJlIGVzc2VudGlhbCB0byBob3cgdGhlIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQuIEFsc28sIGBkaXJ0eV9iaXRfY2xlYXJgIGlzIHVuaXF1ZSBzbyBpdCBpcyB1bmxpa2VseSB0byBoYXZlIGFueSBuYW1lIGNvbGxpc2lvbi4gR29vZC4gQmFjayB0byBgYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNgIHRvIHNlZSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpcnR5X2JpdF9jbGVhciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jPTUyPXN0YXRpYyBpbnQgaGFjZGJzX3N0b3Aodm9pZClcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy03NC0gKi9cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjc1OnN0YXRpYyBpbnQgZGlydHlfYml0X2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpod19lbnRyaWVzLCBpbnQgc2l6ZSlcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTc2LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYz0xNDk9aW50IF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0yMTktXHRcdFx0aWYgKGlkeCBcdTAwM2U9IGVudHJpZXNfc3opIHtcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjIyMDpcdFx0XHRcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGlkeCk7XG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0yMjEtXHRcdFx0XHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFx1MDAzZSAwO1xuLS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTIzMi1cdGlmIChpZHggIT0gMCkge1xuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MjMzOlx0XHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjM0LVx0XHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFx1MDAzZSAwO1xuLS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jPTI1OT1pbnQgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuLS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTMwMC1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjMwMTpcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGkpO1xuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTk1NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0byBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5LCBJIGFic29sdXRlbHkgbmVlZCBgS1ZNYCBhbmQgYEFDUElgIGVuYWJsZWQuIEkgc2VlIHRoYXQgdGhlIGBIQVZFX0tWTV9IV19ESVJUWV9CSVRgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgKmJ5KiBgS1ZNYCBpZiBgQUNQSWAgaXMgYWxzbyBjb25maWd1cmVkLiBUaGF0IG1ha2VzIHNlbnNlLCBzbyB0aG9zZSB0d28gYXJlIHRoZSBjb3JlIHJlcXVpcmVtZW50cy4KCk5vdywgSSBhbHdheXMgbGlrZSB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYW55IG90aGVyIGltcGxpY2l0IGRlcGVuZGVuY2llcy4gQWgsIHJpZ2h0LCBvZiBjb3Vyc2UsIGBDT05GSUdfQVJNNjRgIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgaW1wbGllZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIEFuZCwgSSBzZWUgdGhhdCBgQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVGAgaXRzZWxmIGlzIGEgaGlkZGVuIGNvbmZpZywgc28gaXQmIzM5O3Mgbm90IHNvbWV0aGluZyBJJiMzOTtsbCBiZSBkaXJlY3RseSBzZXR0aW5nLiBJIHNob3VsZCBtYWtlIGEgbm90ZSBvZiB0aGF0IGZvciB3aGVuIEkgc2V0IHVwIHRoZSBidWlsZC4KCk9rYXksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gvYXJtNjQva3ZtL0tjb25maWdgIGZpbGUgYWdhaW4sIG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBzb21ldGhpbmcuIExldCYjMzk7cyBtYWtlIHN1cmUgSSBkaWRuJiMzOTt0IHNraXAgb3ZlciBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9LVk1fSFdfRElSVFlfQklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zNi1cdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM3Olx0c2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVx0c2VsZWN0IFNDSEVEX0lORk9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0OTkKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTS9BQ1BJIFBhdGNoIGZvciBBUk02NCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIGBLVk1gIGFuZCBgQUNQSWAgYXMgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGFyZWEgcmlwZSBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGhhcmR3YXJlIGRpcnR5IGJpdCB0cmFja2luZyBhbmQgY2xlYW5pbmcgKEhEQlNTIGFuZCBIQUNEQlMsIHJlc3BlY3RpdmVseSkgc3BlY2lmaWNhbGx5IGZvciBBUk02NCB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB0byBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGlydHkgbG9nZ2luZyBsb2dpYy4gQmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIHRoZXNlIG5ldyBpbnRlcnJ1cHQgaGFuZGxlcnMgYW5kIGlvY3RsIHBhdGhzLCBpdCBtZWFucyB0aGVyZSBhcmUgbmV3IHBvaW50cyBvZiBpbnRlcmFjdGlvbiBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBjb3JlIG9mIHRoZSBmdXp6aW5nIHRhcmdldCBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgc2V2ZXJhbCBmdW5jdGlvbnM6IGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBgZGlydHlfYml0X2NsZWFyYCwgYGhhY2Ric2lycV9oYW5kbGVyYCwgYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AsIGBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0YCwgYGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdGAgYW5kIGBrdm1fZGlydHlfcmluZ19yZXNldGAuIFRoZXkgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSBsb3ctbGV2ZWwgZGlydHkgYml0IG1hbmFnZW1lbnQuIFRoZXkgc2hvdWxkIGJlIHByaW9yaXRpemVkIGR1cmluZyBmdXp6aW5nLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIG1hcmtlZCBhcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGJlY2F1c2UgdGhlIG1vZGlmaWNhdGlvbnMgaW50cm9kdWNlIG5ldywgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBpbnRlcmFjdCBjbG9zZWx5IHdpdGggaGFyZHdhcmUuIFRoZSBgS1ZNYCBhbmQgYEFDUElgIGNvbmZpZ3MgYXJlIGFjdGl2YXRlZCwgYW5kIHRoZSBlbnVtZXJhdGVkIGZ1bmN0aW9ucyB3aWxsIGZvcm0gdGhlIGNvcmUgb2YgbXkgZnV6emluZyBjYW1wYWlnbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7QUNQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyJiMzNDssCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhciYjMzQ7LAogICAgJiMzNDtkaXJ0eV9iaXRfY2xlYXImIzM0OywKICAgICYjMzQ7aGFjZGJzaXJxX2hhbmRsZXImIzM0OywKICAgICYjMzQ7a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3QmIzM0OywKICAgICYjMzQ7a3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0JiMzNDssCiAgICAmIzM0O2t2bV9kaXJ0eV9yaW5nX3Jlc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7QUNQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyJiMzNDssCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhciYjMzQ7LAogICAgJiMzNDtkaXJ0eV9iaXRfY2xlYXImIzM0OywKICAgICYjMzQ7aGFjZGJzaXJxX2hhbmRsZXImIzM0OywKICAgICYjMzQ7a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3QmIzM0OywKICAgICYjMzQ7a3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0JiMzNDssCiAgICAmIzM0O2t2bV9kaXJ0eV9yaW5nX3Jlc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDA6NTUuMDIyNDk0NzI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEyNjQ3NTA4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJBQ1BJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXJcIixcbiAgICBcIl9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhclwiLFxuICAgIFwiZGlydHlfYml0X2NsZWFyXCIsXG4gICAgXCJoYWNkYnNpcnFfaGFuZGxlclwiLFxuICAgIFwia3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzXCIsXG4gICAgXCJrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0XCIsXG4gICAgXCJrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3RcIixcbiAgICBcImt2bV9kaXJ0eV9yaW5nX3Jlc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBoYXJkd2FyZSBkaXJ0eSBiaXQgdHJhY2tpbmcgKEhEQlNTKSBhbmQgY2xlYW5pbmcgKEhBQ0RCUykgZm9yIEFSTTY0IEtWTS4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgbG9naWMsIGFkZGluZyBuZXcgaW9jdGwgcGF0aHMgYW5kIGludGVycnVwdCBoYW5kbGVycy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQwOjU1LjAyMjQ5OTIyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxMzk4OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmM1ODY3MTc2ZjcxMDQ3NmIyOGIxMzZkYjVjODM5MzFhNzVlYmU4OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxMTo0MDo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oXFxuaW5kZXggOGE1NGNhNmJhNjAyODIuLjg4MzMxNWU5ZDc5ZDk4IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmhcXG5AQCAtNDUsNiArNDUsOSBAQFxcbiBcXG4gI2RlZmluZSBBQ1BJX01BRFRfR0lDQ19UUkJFICAob2Zmc2V0b2Yoc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCwgXFxcXFxcbiBcXHR0cmJlX2ludGVycnVwdCkgKyBzaXplb2YodTE2KSlcXG4rXFxuKyNkZWZpbmUgQUNQSV9NQURUX0dJQ0NfSEFDREJTSVJRICAob2Zmc2V0b2Yoc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCwgXFxcXFxcbitcXHRoYWNkYnNpcnFfZ3NpKSArIHNpemVvZih1MzIpKVxcbiAvKlxcbiAgKiBBcm3CriBGdW5jdGlvbmFsIEZpeGVkIEhhcmR3YXJlIFNwZWNpZmljYXRpb24gVmVyc2lvbiAxLjIuXFxuICAqIFRhYmxlIDI6IEFybSBBcmNoaXRlY3R1cmUgY29udGV4dCBsb3NzIGZsYWdzXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcXG5pbmRleCBhNTc4NzBmYTk2ZGI1Yi4uNjIwYWU0Y2RkYjc2MGEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxcbkBAIC04NjMsNiArODYzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFmdCh2b2lkKVxcbiBcXHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQUZUKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oZGJzcyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19IREJTUyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFDREJTKTtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19tcGFtKHZvaWQpXFxuIHtcXG4gXFx0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfTVBBTSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kNzZjMTA5OTM3ZDhkYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaFxcbkBAIC0wLDAgKzEsNjcgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cXG4rICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzIFxcdTAwM2NsZW8uYnJhc0Bhcm0uY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX19BUk02NF9LVk1fRElSVFlfQklUX0hfX1xcbisjZGVmaW5lIF9fQVJNNjRfS1ZNX0RJUlRZX0JJVF9IX19cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3BndGFibGUuaFxcdTAwM2VcXG4rXFxuK2VudW0gaGFjZGJzX3N0YXR1cyB7XFxuK1xcdEhBQ0RCU19PRkYsXFxuK1xcdEhBQ0RCU19JRExFLFxcbitcXHRIQUNEQlNfUlVOTklORyxcXG4rXFx0SEFDREJTX0VSUk9SXFxuK307XFxuK1xcbitzdHJ1Y3QgaGFjZGJzIHtcXG4rXFx0ZW51bSBoYWNkYnNfc3RhdHVzIHN0YXR1cztcXG4rXFx0aW50IHNpemU7XFxuK307XFxuK1xcbitERUNMQVJFX1BFUl9DUFUoc3RydWN0IGhhY2RicywgaGFjZGJzX3BjcCk7XFxuK1xcbit2b2lkIF9faW5pdCBrdm1faGFjZGJzX2luaXQodm9pZCk7XFxuK3ZvaWQga3ZtX2hhY2Ric19jcHVfdXAodm9pZCk7XFxuK3ZvaWQga3ZtX2hhY2Ric19jcHVfZG93bih2b2lkKTtcXG4rXFxuK2ludCBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcXG4rXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCxcXG4rXFx0XFx0XFx0ICAgICAgIGJvb2wgKmZsdXNoKTtcXG4rXFxuK2ludCBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXFxuK1xcdFxcdFxcdFxcdGludCAqbnJfZW50cmllc19yZXNldCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0cmV0dXJuIHRoaXNfY3B1X3JlYWQoaGFjZGJzX3BjcC5zdGF0dXMpID09IEhBQ0RCU19JRExFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAoa3ZtLVxcdTAwM2VhcmNoLm1tdS5wZ3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgICBib29sICpmbHVzaClcXG4re1xcbitcXHRpZiAoIWt2bV9hcmNoX2RpcnR5X2NsZWFyX2VuYWJsZWQoa3ZtKSlcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdHJldHVybiBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihrdm0sIG1lbXNsb3QsIGxvZywgYml0bWFwLCBmbHVzaCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxcbit7XFxuK1xcdGlmICgha3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChrdm0pKVxcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXG4rXFx0cmV0dXJuIF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihrdm0sIHJpbmcsIG5yX2VudHJpZXNfcmVzZXQpO1xcbit9XFxuK1xcbisjZW5kaWYgLyogX19BUk02NF9LVk1fRElSVFlfQklUX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcXG5pbmRleCA0MWE4Njg3OTM4ZWI2Yi4uNjQ2ZmY4OGUwMjU4M2YgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXFxuQEAgLTkzLDYgKzkzLDggQEAgdHlwZWRlZiB1NjQga3ZtX3B0ZV90O1xcbiBcXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9YTlxcdEdFTk1BU0soNTQsIDUzKVxcbiBcXG4rI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk1cXHRCSVQoNTEpXFxuK1xcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQXFx0QklUKDUwKVxcbiBcXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNU1xcdChLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1IgfCBcXFxcXFxuQEAgLTI1Myw2ICsyNTUsNyBAQCBzdHJ1Y3Qga3ZtX3BndGFibGVfbW1fb3BzIHtcXG4gZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3Mge1xcbiBcXHRLVk1fUEdUQUJMRV9TMl9JRE1BUFxcdFxcdFxcdD0gQklUKDApLFxcbiBcXHRLVk1fUEdUQUJMRV9TMl9BU19TMVxcdFxcdFxcdD0gQklUKDEpLFxcbitcXHRLVk1fUEdUQUJMRV9TMl9EQk1cXHRcXHRcXHQ9IEJJVCgyKSxcXG4gfTtcXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uNjJmNTZiYmQwYTY1YzggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuQEAgLTUyMyw2ICs1MjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2Z0cl9iaXRzIGZ0cl9pZF9hYTY0bW1mcjNbXSA9IHtcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnI0W10gPSB7XFxuIFxcdFNfQVJNNjRfRlRSX0JJVFMoRlRSX0hJRERFTiwgRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRNTUZSNF9FTDFfRTJIMF9TSElGVCwgNCwgMCksXFxuIFxcdEFSTTY0X0ZUUl9CSVRTKEZUUl9ISURERU4sIEZUUl9TVFJJQ1QsIEZUUl9MT1dFUl9TQUZFLCBJRF9BQTY0TU1GUjRfRUwxX05WX2ZyYWNfU0hJRlQsIDQsIDApLFxcbitcXHRBUk02NF9GVFJfQklUUyhGVFJfSElEREVOLCBGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgSURfQUE2NE1NRlI0X0VMMV9IQUNEQlNfU0hJRlQsIDQsIDApLFxcbiBcXHRBUk02NF9GVFJfRU5ELFxcbiB9O1xcbiBcXG5AQCAtMjEzMSw2ICsyMTMyLDExIEBAIHN0YXRpYyBib29sIGh2aGVfcG9zc2libGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxcbiBcXHRyZXR1cm4gYXJtNjRfdGVzdF9zd19mZWF0dXJlX292ZXJyaWRlKEFSTTY0X1NXX0ZFQVRVUkVfT1ZFUlJJREVfSFZIRSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGhhc192aGVfaGRic3MoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgY29wZSlcXG4re1xcbitcXHRyZXR1cm4gaXNfa2VybmVsX2luX2h5cF9tb2RlKCkgXFx1MDAyNlxcdTAwMjYgaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIGNvcGUpO1xcbit9XFxuK1xcbiBib29sIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpXFxuIHtcXG4gXFx0LypcXG5AQCAtMjc2Niw2ICsyNzcyLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0ge1xcbiBcXHRcXHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlIxX0VMMSwgSEFGREJTLCBEQk0pXFxuIFxcdH0sXFxuICNlbmRpZlxcbitcXHR7XFxuK1xcdFxcdC5kZXNjID0gXFxcIkhhcmR3YXJlIGRpcnR5IGJpdCBDbGVhbmluZ1xcXCIsXFxuK1xcdFxcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxcbitcXHRcXHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBQ0RCUyxcXG4rXFx0XFx0Lm1hdGNoZXMgPSBoYXNfY3B1aWRfZmVhdHVyZSxcXG4rXFx0XFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSNF9FTDEsIEhBQ0RCUywgSU1QKVxcbitcXHR9LFxcbiAjaWZkZWYgQ09ORklHX0FSTTY0X0hBRlRcXG4gXFx0e1xcbiBcXHRcXHQuZGVzYyA9IFxcXCJIYXJkd2FyZSBtYW5hZ2VkIEFjY2VzcyBGbGFnIGZvciBUYWJsZSBEZXNjcmlwdG9yc1xcXCIsXFxuQEAgLTI3ODEsNiArMjc5NCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcXG4gXFx0XFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSEFGVClcXG4gXFx0fSxcXG4gI2VuZGlmXFxuK1xcdHtcXG4rXFx0XFx0LmRlc2MgPSBcXFwiSGFyZHdhcmUgRGlydHkgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlIChIREJTUylcXFwiLFxcbitcXHRcXHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSxcXG4rXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfSERCU1MsXFxuK1xcdFxcdC5tYXRjaGVzID0gaGFzX3ZoZV9oZGJzcyxcXG4rXFx0XFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSERCU1MpXFxuK1xcdH0sXFxuIFxcdHtcXG4gXFx0XFx0LmRlc2MgPSBcXFwiQ1JDMzIgaW5zdHJ1Y3Rpb25zXFxcIixcXG4gXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfQ1JDMzIsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWcgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXFxuaW5kZXggNDQ5MTU0ZjlhNDg1MmQuLmRiODQ4N2JmNzM4Yjc4IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXFxuQEAgLTM0LDYgKzM0LDcgQEAgbWVudWNvbmZpZyBLVk1cXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxcbitcXHRzZWxlY3QgSEFWRV9LVk1fSFdfRElSVFlfQklUIGlmIEFDUElcXG4gXFx0c2VsZWN0IFNDSEVEX0lORk9cXG4gXFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXFxuIFxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxcbmluZGV4IDU5NjEyZDJmMjc3YzFkLi42ZmFhY2Q4NTczNDZiMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxcbisrKyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXFxuQEAgLTI0LDcgKzI0LDcgQEAga3ZtLXkgKz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcXFxcbiBcXHQgdmdpYy92Z2ljLW1taW8ubyB2Z2ljL3ZnaWMtbW1pby12Mi5vIFxcXFxcXG4gXFx0IHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZpY2UubyBcXFxcXFxuIFxcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXFxcXG4tXFx0IHZnaWMvdmdpYy12NS5vXFxuK1xcdCB2Z2ljL3ZnaWMtdjUubyBkaXJ0eV9iaXQub1xcbiBcXG4ga3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgKz0gcG11LWVtdWwubyBwbXUub1xcbiBrdm0tJChDT05GSUdfQVJNNjRfUFRSX0FVVEgpICArPSBwYXV0aC5vXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uZGMxYTQ2MjlhYWViOTggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xcbkBAIC00Miw2ICs0Miw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25lc3RlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9wa3ZtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3B0cmF1dGguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc2VjdGlvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zdGFja3RyYWNlL252aGUuaFxcdTAwM2VcXG4gXFxuQEAgLTIzMDcsNiArMjMwOCw3IEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuIFxcbiBcXHRrdm1fdmdpY19jcHVfdXAoKTtcXG4gXFx0a3ZtX3RpbWVyX2NwdV91cCgpO1xcbitcXHRrdm1faGFjZGJzX2NwdV91cCgpO1xcbiBcXG4gXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFxuQEAgLTIzMTUsNiArMjMxNyw3IEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuIFxcbiB2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuIHtcXG4rXFx0a3ZtX2hhY2Ric19jcHVfZG93bigpO1xcbiBcXHRrdm1fdGltZXJfY3B1X2Rvd24oKTtcXG4gXFx0a3ZtX3ZnaWNfY3B1X2Rvd24oKTtcXG4gXFxuQEAgLTI0ODEsNiArMjQ4NCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfc3Vic3lzdGVtcyh2b2lkKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdGt2bV9oYWNkYnNfaW5pdCgpO1xcbitcXG4gXFx0a3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKCk7XFxuIFxcbiBcXHRlcnIgPSBrdm1faHlwX3RyYWNlX2luaXQoKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE5Mjg5ZWE3M2Q5NmQ5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXFxuQEAgLTAsMCArMSw0MTEgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cXG4rICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzIFxcdTAwM2NsZW8uYnJhc0Bhcm0uY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9tbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4rXFxuK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBoYWNkYnMsIGhhY2Ric19wY3ApID0ge1xcbitcXHQuc3RhdHVzID0gSEFDREJTX09GRixcXG4rXFx0LnNpemUgPSAwLFxcbit9O1xcbitcXG4rLyogSERCU1MgZW50cnkgZmllbGQgZGVmaW5pdGlvbnMgKi9cXG4rI2RlZmluZSBIREJTU19FTlRSWV9WQUxJRCBCSVQoMClcXG4rI2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1NISUZUICgxKVxcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfTUFTSyAoR0VOTUFTSygzLCAxKSlcXG4rI2RlZmluZSBIREJTU19FTlRSWV9UVFdMKHgpIFxcXFxcXG4rXFx0KCgoeCkgXFx1MDAzY1xcdTAwM2MgSERCU1NfRU5UUllfVFRXTF9TSElGVCkgXFx1MDAyNiBIREJTU19FTlRSWV9UVFdMX01BU0spXFxuKyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9SRVNWIEhEQlNTX0VOVFJZX1RUV0woLTQpXFxuKyNkZWZpbmUgSERCU1NfRU5UUllfSVBBIEdFTk1BU0tfVUxMKDU1LCAxMilcXG4rXFxuK3N0YXRpYyBfX3JvX2FmdGVyX2luaXQgaW50IGhhY2Ric2lycSA9IC0xO1xcbitcXG4rc3RhdGljIHZvaWQgaGFjZGJzX3N0YXJ0KHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpXFxuK3tcXG4rXFx0dTY0IGJyO1xcbitcXHQvKiBFYWNoIGVudHJ5IGlzIDggYnl0ZXMgKi9cXG4rXFx0aW50IHNpemVfYiA9IHNpemUgKiBzaXplb2YoaHdfZW50cmllc1swXSk7XFxuK1xcdGludCBzaXplX3AyID0gbWF4KHJvdW5kdXBfcG93X29mX3R3byhzaXplX2IpLCBQQUdFX1NJWkUpO1xcbitcXG4rXFx0LyogSWYgbm90IHVzaW5nIHRoZSBmdWxsIHNpemUgb2YgdGhlIGFycmF5LCBwdXQgYSBzdG9wIGVudHJ5IGF0IHRoZSBlbmQgKi9cXG4rXFx0aWYgKHNpemVfYiBcXHUwMDNjIHNpemVfcDIpXFxuK1xcdFxcdGh3X2VudHJpZXNbc2l6ZV0gPSBIREJTU19FTlRSWV9WQUxJRCB8IEhEQlNTX0VOVFJZX1RUV0xfUkVTVjtcXG4rXFxuK1xcdHN5c3JlZ19jbGVhcl9zZXRfcyhTWVNfSEFDREJTQ09OU19FTDIsXFxuK1xcdFxcdFxcdCAgIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT04gfCBIQUNEQlNDT05TX0VMMl9JTkRFWCwgMCk7XFxuK1xcbitcXHRiciA9ICh2aXJ0X3RvX3BoeXMoaHdfZW50cmllcykgXFx1MDAyNiBIQUNEQlNCUl9FTDJfQkFERFJfTUFTSykgfFxcbitcXHQgICAgIEZJRUxEX1BSRVAoSEFDREJTQlJfRUwyX1NaLCBpbG9nMihzaXplX3AyKSAtIDEyKSB8XFxuK1xcdCAgICAgRklFTERfUFJFUChIQUNEQlNCUl9FTDJfRU4sIDEpO1xcbitcXG4rXFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19SVU5OSU5HKTtcXG4rXFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zaXplLCBzaXplKTtcXG4rXFx0d3JpdGVfc3lzcmVnX3MoYnIsIFNZU19IQUNEQlNCUl9FTDIpO1xcbitcXHRpc2IoKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoYWNkYnNfc3RvcCh2b2lkKVxcbit7XFxuK1xcdHdyaXRlX3N5c3JlZ19zKDAsIFNZU19IQUNEQlNCUl9FTDIpO1xcbitcXHRpc2IoKTtcXG4rXFxuK1xcdGlmICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfRVJST1IpIHtcXG4rXFx0XFx0LyogSW4gY2FzZSBvZiBlcnJvciwgSEFDREJTQ09OU19FTDIuSU5ERVggc2hvdWxkIHBvaW50IHRoZSBmYXVsdHkgZW50cnkgKi9cXG4rXFx0XFx0dTY0IGNvbnMgPSByZWFkX3N5c3JlZ19zKFNZU19IQUNEQlNDT05TX0VMMik7XFxuK1xcdFxcdGludCBpZHggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpO1xcbitcXG4rXFx0XFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTtcXG4rXFxuK1xcdFxcdHJldHVybiBpZHg7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc2l6ZSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENsZWFycyBkaXJ0eS1iaXRzIGZvciBhbiBhcnJheSBvZiBwYWdlcyAoaHdfZW50cmllcykgdXNpbmcgSEFDREJTXFxuKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBjbGVhbmVkIGZyb20gdGhlIGFycmF5LiBJZiByZXR1cm5zIHZhbHVlIFxcdTAwM2Mgc2l6ZSxcXG4rICpcXHR0aGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHByb2Nlc3NpbmcuXFxuKyAqL1xcbitzdGF0aWMgaW50IGRpcnR5X2JpdF9jbGVhcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpXFxuK3tcXG4rXFx0dTY0IGhjcl9lbDI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4rXFxuK1xcdGhjcl9lbDIgPSByZWFkX3N5c3JlZyhIQ1JfRUwyKTtcXG4rXFx0d3JpdGVfc3lzcmVnKGhjcl9lbDIgfCBIQ1JfRUwyX1ZNLCBIQ1JfRUwyKTtcXG4rXFx0X19sb2FkX3N0YWdlMihcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLm1tdSk7XFxuK1xcbitcXHRoYWNkYnNfc3RhcnQoaHdfZW50cmllcywgc2l6ZSk7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHdmaSgpO1xcbitcXHR9IHdoaWxlICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfUlVOTklORyk7XFxuK1xcbitcXHRyZXQgPSBoYWNkYnNfc3RvcCgpO1xcbitcXG4rXFx0d3JpdGVfc3lzcmVnKGhjcl9lbDIsIEhDUl9FTDIpO1xcbitcXHRpc2IoKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vIERTQiBpcyBuZWVkZWQgaGVyZSwgYXMga3ZtX2ZsdXNoX3JlbW90ZV90bGJzX21lbXNsb3QoKSB0aGF0IGhhcHBlbnNcXG4rXFx0ICogbGF0ZXIgaW4gZ2VuZXJpYyBkaXJ0eS1jbGVhbmluZyBjb2RlIGFscmVhZHkgcGVyZm9ybXMgYSBEU0IgYmVmb3JlXFxuK1xcdCAqIGRvaW5nIHRoZSBUTEJJLlxcbitcXHQgKi9cXG4rXFxuK1xcdHByZWVtcHRfZW5hYmxlKCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaGRic3NfdG9fYml0bWFwKHU2NCAqaGRic3NfYXJyYXksIGludCBzdGFydCwgaW50IGVuZCxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0KVxcbit7XFxuK1xcdHU2NCB3ID0gKGdwYV90b19nZm4oaGRic3NfYXJyYXlbc3RhcnRdKSAtIG9mZnNldCkgLyBCSVRTX1BFUl9MT05HO1xcbitcXHR1NjQgbWFzayA9IDA7XFxuK1xcdGludCBpZHggPSBzdGFydDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0dTY0IGVudHJ5ID0gKGdwYV90b19nZm4oaGRic3NfYXJyYXlbaWR4XSkgLSBvZmZzZXQpO1xcbitcXG4rXFx0XFx0aWYgKGVudHJ5IC8gQklUU19QRVJfTE9ORyA9PSB3KSB7XFxuK1xcdFxcdFxcdG1hc2sgfD0gQklUKGVudHJ5ICUgQklUU19QRVJfTE9ORyk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGF0b21pY19sb25nX29yKG1hc2ssIChhdG9taWNfbG9uZ190ICopXFx1MDAyNmRpcnR5X2JpdG1hcFt3XSk7XFxuK1xcdFxcdFxcdHcgPSBlbnRyeSAvIEJJVFNfUEVSX0xPTkc7XFxuK1xcdFxcdFxcdG1hc2sgPSBCSVQoZW50cnkgJSBCSVRTX1BFUl9MT05HKTtcXG4rXFx0XFx0fVxcbitcXHR9IHdoaWxlICgrK2lkeCBcXHUwMDNjIGVuZCk7XFxuK1xcdGF0b21pY19sb25nX29yKG1hc2ssIChhdG9taWNfbG9uZ190ICopXFx1MDAyNmRpcnR5X2JpdG1hcFt3XSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdHU2NCB0dHdsLCBpbnQgaWR4LCBpbnQgZW50cmllc19zeilcXG4re1xcbitcXHR3aGlsZSAoaWR4IFxcdTAwM2MgZW50cmllc19zeikge1xcbitcXHRcXHRpbnQgaiA9IF9fZmZzKCptYXNrKTtcXG4rXFx0XFx0dTY0IGEgPSBnZm5fdG9fZ3BhKG9mZnNldCArIGopO1xcbitcXG4rXFx0XFx0aHdfZW50cmllc1tpZHgrK10gPSAoYSBcXHUwMDI2IEhEQlNTX0VOVFJZX0lQQSkgfFxcbitcXHRcXHRcXHRcXHQgICAgdHR3bCB8XFxuK1xcdFxcdFxcdFxcdCAgICBIREJTU19FTlRSWV9WQUxJRDtcXG4rXFxuK1xcdFxcdCptYXNrIFxcdTAwMjY9IH5CSVQoaik7XFxuK1xcdFxcdGlmICghKm1hc2spXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaWR4O1xcbit9XFxuK1xcbitpbnQgX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2csXFxuK1xcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsXFxuK1xcdFxcdFxcdCAgICAgICBib29sICpmbHVzaClcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcCA9IG1lbXNsb3QtXFx1MDAzZWRpcnR5X2JpdG1hcDtcXG4rXFx0dTY0ICpod19lbnRyaWVzO1xcbitcXHRjb25zdCBpbnQgZW50cmllc19zeiA9IFBBR0VfU0laRSAvIHNpemVvZigqaHdfZW50cmllcyk7XFxuK1xcdHU2NCB0dHdsO1xcbitcXHR1NjQgc3RhcnQsIGVuZDtcXG4rXFx0Z2ZuX3QgYmFzZV9nZm47XFxuK1xcdGdwYV90IHNwbGl0X2VuZCA9IDA7XFxuK1xcbitcXHRod19lbnRyaWVzID0ga21hbGxvY19vYmpzKHU2NCwgZW50cmllc19zeiwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghaHdfZW50cmllcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHR0dHdsID0gSERCU1NfRU5UUllfVFRXTChLVk1fUEdUQUJMRV9MQVNUX0xFVkVMKTtcXG4rXFxuK1xcdGlmIChsb2cpIHtcXG4rXFx0XFx0c3RhcnQgPSBsb2ctXFx1MDAzZWZpcnN0X3BhZ2UgLyBCSVRTX1BFUl9MT05HO1xcbitcXHRcXHRlbmQgPSBzdGFydCArIERJVl9ST1VORF9VUChsb2ctXFx1MDAzZW51bV9wYWdlcywgQklUU19QRVJfTE9ORyk7XFxuK1xcdFxcdGJhc2VfZ2ZuID0gbWVtc2xvdC1cXHUwMDNlYmFzZV9nZm4gKyBsb2ctXFx1MDAzZWZpcnN0X3BhZ2UgJSBCSVRTX1BFUl9MT05HO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzdGFydCA9IDA7XFxuK1xcdFxcdGVuZCA9IGt2bV9kaXJ0eV9iaXRtYXBfYnl0ZXMobWVtc2xvdCkgLyBzaXplb2YobG9uZyk7XFxuK1xcdFxcdGJhc2VfZ2ZuID0gbWVtc2xvdC1cXHUwMDNlYmFzZV9nZm47XFxuK1xcdH1cXG4rXFxuK1xcdHdyaXRlX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSBzdGFydDsgaSBcXHUwMDNjIGVuZDsgaSsrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbWFzaztcXG4rXFx0XFx0Z2ZuX3Qgb2Zmc2V0O1xcbitcXHRcXHRhdG9taWNfbG9uZ190ICpwO1xcbitcXG4rXFx0XFx0aWYgKGxvZykgeyAvKiBDbGVhbiBvbmx5IHdoYXQgaXMgaW4gdGhlIGlucHV0IGJpdG1hcCAqL1xcbitcXHRcXHRcXHRtYXNrID0gYml0bWFwW2ldO1xcbitcXHRcXHRcXHRpZiAoIW1hc2spXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0cCA9IChhdG9taWNfbG9uZ190ICopXFx1MDAyNmRpcnR5X2JpdG1hcFtpXTtcXG4rXFx0XFx0XFx0bWFzayBcXHUwMDI2PSBhdG9taWNfbG9uZ19mZXRjaF9hbmRub3QobWFzaywgcCk7XFxuK1xcdFxcdH0gZWxzZSB7IC8qIENsZWFuIGV2ZXJ5dGhpbmcgKi9cXG4rXFx0XFx0XFx0aWYgKCFkaXJ0eV9iaXRtYXBbaV0pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0bWFzayA9IHhjaGcoXFx1MDAyNmRpcnR5X2JpdG1hcFtpXSwgMCk7XFxuK1xcdFxcdFxcdGJpdG1hcFtpXSA9IG1hc2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghbWFzaylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRvZmZzZXQgPSBiYXNlX2dmbiArIGkgKiBCSVRTX1BFUl9MT05HO1xcbitcXG4rXFx0XFx0aWYgKGt2bV9kaXJ0eV9sb2dfbWFudWFsX3Byb3RlY3RfYW5kX2luaXRfc2V0KGt2bSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChvZmZzZXQgKyBCSVRTX1BFUl9MT05HIFxcdTAwM2Ugc3BsaXRfZW5kKSkge1xcbitcXHRcXHRcXHRncGFfdCBzdGFydCA9IGdmbl90b19ncGEob2Zmc2V0ICsgX19mZnMobWFzaykpO1xcbitcXHRcXHRcXHRncGFfdCBlbmQgPSBnZm5fdG9fZ3BhKG9mZnNldCArIF9fZmxzKG1hc2spICsgMSk7XFxuK1xcbitcXHRcXHRcXHRrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoa3ZtLCBzdGFydCwgZW5kKTtcXG4rXFx0XFx0XFx0c3BsaXRfZW5kID0gZ3BhX3RvX2dmbihBTElHTl9ET1dOKGVuZCwgUE1EX1NJWkUpICsgUE1EX1NJWkUgLSAxKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRpZHggPSBtYXNrX3RvX2hkYnNzKFxcdTAwMjZtYXNrLCBod19lbnRyaWVzLCBvZmZzZXQsIHR0d2wsIGlkeCwgZW50cmllc19zeik7XFxuK1xcdFxcdFxcdGlmIChpZHggXFx1MDAzZT0gZW50cmllc19zeikge1xcbitcXHRcXHRcXHRcXHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xcbitcXHRcXHRcXHRcXHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFxcdTAwM2UgMDtcXG4rXFx0XFx0XFx0XFx0aWYgKHJldCAhPSBpZHgpIHtcXG4rXFx0XFx0XFx0XFx0XFx0LyogU2F2ZSBiaXRzIG5vdCBjb252ZXJ0ZWQgYmFjayB0byBiaXRtYXAgKi9cXG4rXFx0XFx0XFx0XFx0XFx0YXRvbWljX2xvbmdfb3IobWFzaywgKGF0b21pY19sb25nX3QgKilcXHUwMDI2ZGlydHlfYml0bWFwW2ldKTtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGlkeCA9IDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fSB3aGlsZSAobWFzayk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpZHggIT0gMCkge1xcbitcXHRcXHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xcbitcXHRcXHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFxcdTAwM2UgMDtcXG4rXFx0fVxcbitvdXRfZXJyOlxcbitcXHRpZiAodW5saWtlbHkocmV0ICE9IGlkeCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSW4gY2FzZSB0aGVyZSBpcyBhbiBlcnJvciBhbmQgbm90IGFsbCBlbnRyaWVzIGluIEhBQ0RCUyBnZXRcXG4rXFx0XFx0ICogY2xlYW5lZCwgd2UgaGF2ZSB0byBtYXJrIHRoZSBkaXJ0eSBiaXRzIGJhY2sgaW4gdGhlIGJpdG1hcCxcXG4rXFx0XFx0ICogYXMgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIHNvZnR3YXJlIHJvdXRpbmUuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIEVudHJpZXMgc2hvdWxkIGJlIGluIG9yZGVyLCBzaW5jZSB0aGV5IHdlcmUgZXh0cmF4ZWQgZnJvbVxcbitcXHRcXHQgKiB0aGUgZGlydHktYml0bWFwLCBzbyBiYXRjaGluZyB0aGUgYXRvbWljIHdyaXRlcyBpcyBlZmZpY2llbnQuXFxuK1xcdFxcdCAqL1xcbitcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIGlkeClcXG4rXFx0XFx0XFx0aGRic3NfdG9fYml0bWFwKGh3X2VudHJpZXMsIHJldCwgaWR4LCBkaXJ0eV9iaXRtYXAsIG1lbXNsb3QtXFx1MDAzZWJhc2VfZ2ZuKTtcXG4rXFxuK1xcdFxcdHJldCA9IC1FQUdBSU47XFxuK1xcdH1cXG4rXFxuK1xcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcdGtmcmVlKGh3X2VudHJpZXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZyxcXG4rXFx0XFx0XFx0XFx0aW50ICpucl9lbnRyaWVzX3Jlc2V0KVxcbit7XFxuK1xcdHU2NCAqaHdfZW50cmllcztcXG4rXFx0dTY0IHNsb3Rfb2Zmc2V0ID0gMDtcXG4rXFx0dTY0IHR0d2w7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcdHUzMiBzbG90ID0gLTE7XFxuK1xcbitcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVFI7XFxuK1xcbitcXHR0dHdsID0gSERCU1NfRU5UUllfVFRXTChLVk1fUEdUQUJMRV9MQVNUX0xFVkVMKTtcXG4rXFxuK1xcdGh3X2VudHJpZXMgPSBrbWFsbG9jKG1heChyaW5nLVxcdTAwM2VzaXplICogc2l6ZW9mKHU2NCksIFBBR0VfU0laRSksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWh3X2VudHJpZXMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJpbmctXFx1MDAzZXNpemU7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZW50cnk7XFxuK1xcdFxcdGdmbl90IGdmbjtcXG4rXFxuK1xcdFxcdGVudHJ5ID0gXFx1MDAyNnJpbmctXFx1MDAzZWRpcnR5X2dmbnNbKHJpbmctXFx1MDAzZXJlc2V0X2luZGV4ICsgaSkgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHQgIChyaW5nLVxcdTAwM2VzaXplIC0gMSldO1xcbitcXG4rXFx0XFx0aWYgKCFrdm1fZGlydHlfZ2ZuX2hhcnZlc3RlZChlbnRyeSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VzbG90ICE9IHNsb3QpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcXG4rXFxuK1xcdFxcdFxcdG1lbXNsb3QgPSBrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIGVudHJ5LVxcdTAwM2VzbG90KTtcXG4rXFx0XFx0XFx0c2xvdCA9IGVudHJ5LVxcdTAwM2VzbG90O1xcbitcXHRcXHRcXHRzbG90X29mZnNldCA9IG1lbXNsb3QtXFx1MDAzZWJhc2VfZ2ZuO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRnZm4gPSBzbG90X29mZnNldCArIGVudHJ5LVxcdTAwM2VvZmZzZXQ7XFxuK1xcbitcXHRcXHRod19lbnRyaWVzW2ldID0gKGdmbl90b19ncGEoZ2ZuKSBcXHUwMDI2IEhEQlNTX0VOVFJZX0lQQSkgfFxcbitcXHRcXHRcXHRcXHR0dHdsIHwgSERCU1NfRU5UUllfVkFMSUQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGkpO1xcbitcXG4rXFx0LyogU2V0IGFzIGludmFsaWQgYWxsIHN1Y2Nlc3NmdWxseSBjbGVhbmVkIGVudHJpZXMgKi9cXG4rXFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyByZXQ7IGorKykge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZW50cnk7XFxuK1xcbitcXHRcXHRlbnRyeSA9IFxcdTAwMjZyaW5nLVxcdTAwM2VkaXJ0eV9nZm5zWyhyaW5nLVxcdTAwM2VyZXNldF9pbmRleCArIGopIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0ICAocmluZy1cXHUwMDNlc2l6ZSAtIDEpXTtcXG4rXFxuK1xcdFxcdGt2bV9kaXJ0eV9nZm5fc2V0X2ludmFsaWQoZW50cnkpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBJbiBjYXNlIG9mIGVycm9yLCB0cnkgc29mdHdhcmUgY2xlYW5pbmcgZnJvbSB0aGUgZmF1bHRpbmcgZW50cnkgKi9cXG4rXFx0cmluZy1cXHUwMDNlcmVzZXRfaW5kZXggKz0gcmV0O1xcbitcXHQqbnJfZW50cmllc19yZXNldCArPSByZXQ7XFxuK1xcbitcXHRrZnJlZShod19lbnRyaWVzKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyBpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCBoYWNkYnNpcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwY3B1KVxcbit7XFxuK1xcdHU2NCBjb25zID0gcmVhZF9zeXNyZWdfcyhTWVNfSEFDREJTQ09OU19FTDIpO1xcbitcXHR1bnNpZ25lZCBsb25nIGVyciA9IEZJRUxEX0dFVChIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OLCBjb25zKTtcXG4rXFxuK1xcdHN3aXRjaCAoZXJyKSB7XFxuK1xcdGNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9OT0Y6XFxuK1xcdFxcdHRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfSURMRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT05fSVBBSEFDRjpcXG4rXFx0XFx0LyogV2hlbiBzaXplIG5vdCBhIHBvd2VyIG9mIHR3byBcXHUwMDNlPSA0aywgZXhpdCB3aXRoIHJlc2VydmVkIFRUTFcgKi9cXG4rXFx0XFx0aW50IGluZGV4ID0gRklFTERfR0VUKEhBQ0RCU0NPTlNfRUwyX0lOREVYLCBjb25zKTtcXG4rXFxuK1xcdFxcdGlmIChpbmRleCBcXHUwMDNlPSB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc2l6ZSkpIHtcXG4rXFx0XFx0XFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9TVFJVQ1RGOlxcbitcXHRjYXNlIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT05fSVBBRjpcXG4rXFx0XFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19FUlJPUik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK31cXG4rXFxuK3ZvaWQga3ZtX2hhY2Ric19jcHVfdXAodm9pZClcXG4re1xcbitcXHRpZiAoaGFjZGJzaXJxIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZW5hYmxlX3BlcmNwdV9pcnEoaGFjZGJzaXJxLCBJUlFfVFlQRV9MRVZFTF9ISUdIKTtcXG4rXFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTtcXG4rfVxcbitcXG4rdm9pZCBrdm1faGFjZGJzX2NwdV9kb3duKHZvaWQpXFxuK3tcXG4rXFx0aWYgKGhhY2Ric2lycSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRpc2FibGVfcGVyY3B1X2lycShoYWNkYnNpcnEpO1xcbitcXHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX09GRik7XFxuK31cXG4rXFxuKyNpZmRlZiBDT05GSUdfQUNQSVxcbitzdGF0aWMgaW50IF9faW5pdCBoYWNkYnNfYWNwaV9nZXRfaXJxKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCAqZ2ljYztcXG4rXFx0dTMyIGdzaTtcXG4rXFx0aW50IGlycTtcXG4rXFxuK1xcdGdpY2MgPSBhY3BpX2NwdV9nZXRfbWFkdF9naWNjKHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuK1xcdGlmIChnaWNjLVxcdTAwM2VoZWFkZXIubGVuZ3RoIFxcdTAwM2MgQUNQSV9NQURUX0dJQ0NfSEFDREJTSVJRKVxcbitcXHRcXHRyZXR1cm4gLUVOWElPO1xcbitcXG4rXFx0Z3NpID0gIGdpY2MtXFx1MDAzZWhhY2Ric2lycV9nc2k7XFxuK1xcbitcXHRpcnEgPSBhY3BpX3JlZ2lzdGVyX2dzaShOVUxMLCBnc2ksIEFDUElfTEVWRUxfU0VOU0lUSVZFLCBBQ1BJX0FDVElWRV9ISUdIKTtcXG4rXFx0aWYgKGlycSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiQUNQSTogVW5hYmxlIHRvIHJlZ2lzdGVyIEhBQ0RCUyBpbnRlcnJ1cHQ6ICVkXFxcXG5cXFwiLCBnc2kpO1xcbitcXHRcXHRyZXR1cm4gLUVOWElPO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaXJxO1xcbit9XFxuKyNlbHNlXFxuKyNkZWZpbmUgaGFjZGJzX2FjcGlfZ2V0X2lycSgpICgtRU5YSU8pXFxuKyNlbmRpZlxcbitcXG4rdm9pZCBfX2luaXQga3ZtX2hhY2Ric19pbml0KHZvaWQpXFxuK3tcXG4rXFx0aW50IGlycTtcXG4rXFxuK1xcdC8qIEZFQVRfSEFDREJTIGlzIG9ubHkgc3VwcG9ydGVkIGlmIExpbnV4IHJ1bnMgaW4gRUwyIChWSEUpICovXFxuK1xcdGlmICghc3lzdGVtX3N1cHBvcnRzX2hhY2RicygpIHx8ICFpc19rZXJuZWxfaW5faHlwX21vZGUoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aXJxID0gaGFjZGJzX2FjcGlfZ2V0X2lycSgpO1xcbitcXHRpZiAoaXJxIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHJlcXVlc3RfcGVyY3B1X2lycShpcnEsIGhhY2Ric2lycV9oYW5kbGVyLCBcXFwiSEFDREJTSVJRXFxcIiwgXFx1MDAyNmhhY2Ric19wY3ApIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aGFjZGJzaXJxID0gaXJxO1xcbit9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXFxuaW5kZXggOTFhN2RmYWQ2Njg2NjAuLmUxNjcyOWYwYjdiZDI0IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXFxuQEAgLTczMSw5ICs3MzEsMTMgQEAgc3RhdGljIGludCBzdGFnZTJfc2V0X3Byb3RfYXR0cihzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgZW51bSBrdm1fcGd0YWJsZV9wcm90IHBcXG4gXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1IpXFxuIFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SO1xcbiBcXG4tXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXFxuK1xcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XFxuIFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XO1xcbiBcXG4rXFx0XFx0aWYgKHBndC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pXFxuK1xcdFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoIWt2bV9scGEyX2lzX2VuYWJsZWQoKSlcXG4gXFx0XFx0YXR0ciB8PSBGSUVMRF9QUkVQKEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1NILCBzaCk7XFxuIFxcbkBAIC0xMzY3LDkgKzEzNzEsMTMgQEAgaW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsXFxuIFxcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9SKVxcbiBcXHRcXHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SO1xcbiBcXG4tXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXFxuK1xcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XFxuIFxcdFxcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1c7XFxuIFxcbitcXHRcXHRpZiAocGd0LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9QR1RBQkxFX1MyX0RCTSlcXG4rXFx0XFx0XFx0c2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gc3RhZ2UyX3NldF94bl9hdHRyKHByb3QsIFxcdTAwMjZ4bik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTE1ODUsNiArMTU5Myw5IEBAIGludCBfX2t2bV9wZ3RhYmxlX3N0YWdlMl9pbml0KHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxcbiBcXHRpZiAoIXBndC1cXHUwMDNlcGdkKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuK1xcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcXG4rXFx0XFx0ZmxhZ3MgfD0gS1ZNX1BHVEFCTEVfUzJfREJNO1xcbitcXG4gXFx0cGd0LVxcdTAwM2VpYV9iaXRzXFx0XFx0PSBpYV9iaXRzO1xcbiBcXHRwZ3QtXFx1MDAzZXN0YXJ0X2xldmVsXFx0PSBzdGFydF9sZXZlbDtcXG4gXFx0cGd0LVxcdTAwM2VtbV9vcHNcXHRcXHQ9IG1tX29wcztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xcbmluZGV4IDZjOTQxYWFhMTBjNjM5Li4yZjlkOTBjMzU2NjhiOSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuQEAgLTExNyw4ICsxMTcsOCBAQCBzdGF0aWMgYm9vbCBuZWVkX3NwbGl0X21lbWNhY2hlX3RvcHVwX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRyZXR1cm4ga3ZtX21tdV9tZW1vcnlfY2FjaGVfbnJfZnJlZV9vYmplY3RzKGNhY2hlKSBcXHUwMDNjIG1pbjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLCBwaHlzX2FkZHJfdCBhZGRyLFxcbi1cXHRcXHRcXHRcXHQgICAgcGh5c19hZGRyX3QgZW5kKVxcbitpbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkcixcXG4rXFx0XFx0XFx0ICAgICBwaHlzX2FkZHJfdCBlbmQpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZTtcXG4gXFx0c3RydWN0IGt2bV9wZ3RhYmxlICpwZ3Q7XFxuQEAgLTEwMjcsOCArMTAyNywxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxcbiBcXHRcXHQqcGVyX2NwdV9wdHIobW11LVxcdTAwM2VsYXN0X3ZjcHVfcmFuLCBjcHUpID0gLTE7XFxuIFxcbi1cXHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi9cXG4tXFx0bW11LVxcdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcXG4rXFx0IC8qIFRoZSBlYWdlciBwYWdlIHNwbGl0dGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGlmIHN5c3RlbSBoYXMgbm8gSERCU1MgKi9cXG4rXFx0aWYgKHN5c3RlbV9zdXBwb3J0c19oZGJzcygpKVxcbitcXHRcXHRtbXUtXFx1MDAzZXNwbGl0X3BhZ2VfY2h1bmtfc2l6ZSA9IDI1NiAqIDEwMjQgKiBQQUdFX1NJWkU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bW11LVxcdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcXG4rXFxuIFxcdG1tdS1cXHUwMDNlc3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87XFxuIFxcbiBcXHRtbXUtXFx1MDAzZXBnZF9waHlzID0gX19wYShwZ3QtXFx1MDAzZXBnZCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbmluZGV4IDliODVhODRmNmZkNDk0Li5iZDJjMGJiOThkYTYxZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcXG5AQCAtNjksOCArNjksMTAgQEAgSEFTX1ZBNTJcXG4gSEFTX1ZJUlRfSE9TVF9FWFROXFxuIEhBU19XRlhUXFxuIEhBU19YTlhcXG4rSEFTX0hEQlNTXFxuIEhBRlRcXG4gSFdfREJNXFxuK0hBQ0RCU1xcbiBLVk1fSFZIRVxcbiBLVk1fUFJPVEVDVEVEX01PREVcXG4gTUlTTUFUQ0hFRF9DQUNIRV9UWVBFXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnIGIvYXJjaC9hcm02NC90b29scy9zeXNyZWdcXG5pbmRleCBiYzE3ODhiMTY2MmI3Ni4uN2I3YzNkNmEwZjAzMDkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNyZWdcXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZ1xcbkBAIC00NjM0LDYgKzQ2MzQsMzYgQEAgRmllbGRcXHQ3OjZcXHRTTDBcXG4gRmllbGRcXHQ1OjBcXHRUMFNaXFxuIEVuZFN5c3JlZ1xcbiBcXG4rU3lzcmVnXFx0SEFDREJTQlJfRUwyXFx0M1xcdDRcXHQyXFx0M1xcdDRcXG4rUmVzMFxcdDYzOjU2XFxuK0ZpZWxkXFx0NTU6MTJcXHRCQUREUlxcbitGaWVsZFxcdDExXFx0RU5cXG4rUmVzMFxcdDEwOjRcXG4rVW5zaWduZWRFbnVtXFx0MzowXFx0U1pcXG4rXFx0MGIwMDAwXFx0NEtcXG4rXFx0MGIwMDAxXFx0OEtcXG4rXFx0MGIwMDEwXFx0MTZLXFxuK1xcdDBiMDAxMVxcdDMyS1xcbitcXHQwYjAxMDBcXHQ2NEtcXG4rXFx0MGIwMTAxXFx0MTI4S1xcbitcXHQwYjAxMTBcXHQyNTZLXFxuK1xcdDBiMDExMVxcdDUxMktcXG4rXFx0MGIxMDAwXFx0MU1cXG4rXFx0MGIxMDAxXFx0Mk1cXG4rRW5kRW51bVxcbitFbmRTeXNyZWdcXG4rXFxuK1N5c3JlZ1xcdEhBQ0RCU0NPTlNfRUwyXFx0M1xcdDRcXHQyXFx0M1xcdDVcXG4rVW5zaWduZWRFbnVtXFx0NjM6NjJcXHRFUlJfUkVBU09OXFxuK1xcdDBiMDBcXHROT0ZcXG4rXFx0MGIwMVxcdFNUUlVDVEZcXG4rXFx0MGIxMFxcdElQQUZcXG4rXFx0MGIxMVxcdElQQUhBQ0ZcXG4rRW5kRW51bVxcbitSZXMwXFx0NjE6MTlcXG4rRmllbGRcXHQxODowXFx0SU5ERVhcXG4rRW5kU3lzcmVnXFxuK1xcbiBTeXNyZWdcXHRHQ1NDUl9FTDJcXHQzXFx0NFxcdDJcXHQ1XFx0MFxcbiBGaWVsZHNcXHRHQ1NDUl9FTHhcXG4gRW5kU3lzcmVnXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaFxcbmluZGV4IGJhZWY1MjUzNjdiNWM0Li5lYWVmYjQ5NGVmNTk3MiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwyLmhcXG4rKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmhcXG5AQCAtMTQ0OSw2ICsxNDQ5LDcgQEAgc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCB7XFxuIFxcdHUxNiB0cmJlX2ludGVycnVwdDtcXHQvKiBBQ1BJIDYuNSAqL1xcbiBcXHR1MTYgaWFmZmlkO1xcdFxcdC8qIEFDUEkgNi43ICovXFxuIFxcdHUzMiBpcnNfaWQ7XFxuK1xcdHUzMiBoYWNkYnNpcnFfZ3NpO1xcdC8qIEFDUEkgNi5YICovXFxuIH07XFxuIFxcbiAvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjg0OTI5NzlkNjk0ZTcwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oXFxuQEAgLTAsMCArMSwzNCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxcbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXFx1MDAzY2xlby5icmFzQGFybS5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX0tWTV9ESVJUWV9CSVRfSF9fXFxuKyNkZWZpbmUgX19LVk1fRElSVFlfQklUX0hfX1xcbitcXG4rI2lmbmRlZiBDT05GSUdfSEFWRV9LVk1fSFdfRElSVFlfQklUXFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX2NsZWFyX2RpcnR5X2xvZyAqbG9nLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKmZsdXNoKVxcbit7XFxuK1xcdHJldHVybiAtRU5YSU87XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxcbit7XFxuK1xcdHJldHVybiAtRU5YSU87XFxuK31cXG4rXFxuKyNlbHNlIC8qIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXFx1MDAzZVxcbitcXG4rI2VuZGlmIC8qIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVQgKi9cXG4rXFxuKyNlbmRpZiAvKiBfX0tWTV9ESVJUWV9CSVRfSF9fICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaCBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaFxcbmluZGV4IGViMTBkODdhZGY3ZDU5Li4xOTBkOTdmY2U0YTQyZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcXG5AQCAtODQsNiArODQsMTggQEAgdm9pZCBrdm1fZGlydHlfcmluZ19wdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHNsb3QsIHU2NCBvZmZzZXQpO1xcbiBcXG4gYm9vbCBrdm1fZGlydHlfcmluZ19jaGVja19yZXF1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2RpcnR5X2dmbl9oYXJ2ZXN0ZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcXG4re1xcbitcXHRyZXR1cm4gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Z2ZuLVxcdTAwM2VmbGFncykgXFx1MDAyNiBLVk1fRElSVFlfR0ZOX0ZfUkVTRVQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZGlydHlfZ2ZuX3NldF9pbnZhbGlkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pXFxuK3tcXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmdmbi1cXHUwMDNlZmxhZ3MsIDApO1xcbit9XFxuK1xcbitzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICprdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KTtcXG4rXFxuIC8qIGZvciB1c2UgaW4gdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKi9cXG4gc3RydWN0IHBhZ2UgKmt2bV9kaXJ0eV9yaW5nX2dldF9wYWdlKHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZywgdTMyIG9mZnNldCk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uN2VhNmVkN2NlMjAzYWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTE2NjksNiArMTY2OSw5IEBAIGJvb2wga3ZtX2FyY2hfdmNwdV9wcmVlbXB0ZWRfaW5fa2VybmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX2FyY2hfcHJlX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTtcXG4gdm9pZCBrdm1fYXJjaF9jcmVhdGVfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbiBcXG4raW50IGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHBoeXNfYWRkcl90IGFkZHIsXFxuK1xcdFxcdFxcdCAgICAgcGh5c19hZGRyX3QgZW5kKTtcXG4rXFxuICNpZm5kZWYgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DXFxuIC8qXFxuICAqIEFsbCBhcmNoaXRlY3R1cmVzIHRoYXQgd2FudCB0byB1c2UgdnphbGxvYyBjdXJyZW50bHkgYWxzb1xcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9LY29uZmlnIGIvdmlydC9rdm0vS2NvbmZpZ1xcbmluZGV4IDc5NDk3NmI4OGM2Zjk3Li5mODc1N2I1Yjg0YjNlMCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9LY29uZmlnXFxuKysrIGIvdmlydC9rdm0vS2NvbmZpZ1xcbkBAIC0yMCw2ICsyMCw5IEBAIGNvbmZpZyBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbiBjb25maWcgSEFWRV9LVk1fRElSVFlfUklOR1xcbiAgICAgICAgYm9vbFxcbiBcXG4rY29uZmlnIEhBVkVfS1ZNX0hXX0RJUlRZX0JJVFxcbisgICAgICAgYm9vbFxcbitcXG4gIyBPbmx5IHN0cm9uZ2x5IG9yZGVyZWQgYXJjaGl0ZWN0dXJlcyBjYW4gc2VsZWN0IHRoaXMsIGFzIGl0IGRvZXNuJ3RcXG4gIyBwdXQgYW55IGV4cGxpY2l0IGNvbnN0cmFpbnQgb24gdXNlcnNwYWNlIG9yZGVyaW5nLiBUaGV5IGNhbiBhbHNvXFxuICMgc2VsZWN0IHRoZSBfQUNRX1JFTCB2ZXJzaW9uLlxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9kaXJ0eV9yaW5nLmMgYi92aXJ0L2t2bS9kaXJ0eV9yaW5nLmNcXG5pbmRleCA1NzJiODU0ZWRmNzQwZC4uZmU0ZTdkYTZjYzRhNmEgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vZGlydHlfcmluZy5jXFxuKysrIGIvdmlydC9rdm0vZGlydHlfcmluZy5jXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1fZGlydHlfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMva3ZtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrdm1fbW0uaFxcXCJcXG4gXFxuQEAgLTUwLDE4ICs1MSwzMCBAQCBzdGF0aWMgYm9vbCBrdm1fZGlydHlfcmluZ19mdWxsKHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZylcXG4gXFx0cmV0dXJuIGt2bV9kaXJ0eV9yaW5nX3VzZWQocmluZykgXFx1MDAzZT0gcmluZy1cXHUwMDNlc2l6ZTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQga3ZtX3Jlc2V0X2RpcnR5X2dmbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90LCB1NjQgb2Zmc2V0LCB1NjQgbWFzaylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpcXG4rX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XFxuIFxcdGludCBhc19pZCwgaWQ7XFxuIFxcbiBcXHRhc19pZCA9IHNsb3QgXFx1MDAzZVxcdTAwM2UgMTY7XFxuIFxcdGlkID0gKHUxNilzbG90O1xcbiBcXG4gXFx0aWYgKGFzX2lkIFxcdTAwM2U9IGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSkgfHwgaWQgXFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGlkX3RvX21lbXNsb3QoX19rdm1fbWVtc2xvdHMoa3ZtLCBhc19pZCksIGlkKTtcXG4rfVxcbiBcXG4tXFx0bWVtc2xvdCA9IGlkX3RvX21lbXNsb3QoX19rdm1fbWVtc2xvdHMoa3ZtLCBhc19pZCksIGlkKTtcXG4rc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdClcXG4re1xcbitcXHRyZXR1cm4gX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIHNsb3QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBrdm1fcmVzZXRfZGlydHlfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QsIHU2NCBvZmZzZXQsIHU2NCBtYXNrKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XFxuK1xcbitcXHRtZW1zbG90ID0gX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIHNsb3QpO1xcbiBcXG4gXFx0aWYgKCFtZW1zbG90IHx8IG9mZnNldCBcXHUwMDNlPSBtZW1zbG90LVxcdTAwM2VucGFnZXMgfHxcXG4gXFx0ICAgIG9mZnNldCArIF9fZmxzKG1hc2spIFxcdTAwM2U9IG1lbXNsb3QtXFx1MDAzZW5wYWdlcylcXG5AQCAtODgsMjEgKzEwMSwxMSBAQCBpbnQga3ZtX2RpcnR5X3JpbmdfYWxsb2Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX2RpcnR5X2dmbl9zZXRfaW52YWxpZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxcbi17XFxuLVxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZnZm4tXFx1MDAzZWZsYWdzLCAwKTtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2RpcnRpZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcXG4ge1xcbiBcXHRnZm4tXFx1MDAzZWZsYWdzID0gS1ZNX0RJUlRZX0dGTl9GX0RJUlRZO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2RpcnR5X2dmbl9oYXJ2ZXN0ZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcXG4te1xcbi1cXHRyZXR1cm4gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Z2ZuLVxcdTAwM2VmbGFncykgXFx1MDAyNiBLVk1fRElSVFlfR0ZOX0ZfUkVTRVQ7XFxuLX1cXG4tXFxuIGludCBrdm1fZGlydHlfcmluZ19yZXNldChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZyxcXG4gXFx0XFx0XFx0IGludCAqbnJfZW50cmllc19yZXNldClcXG4ge1xcbkBAIC0xMzEsNiArMTM0LDkgQEAgaW50IGt2bV9kaXJ0eV9yaW5nX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxcbiBcXHQgKi9cXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gXFxuK1xcdGlmIChrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKGt2bSwgcmluZywgbnJfZW50cmllc19yZXNldCkgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHR3aGlsZSAobGlrZWx5KCgqbnJfZW50cmllc19yZXNldCkgXFx1MDAzYyBJTlRfTUFYKSkge1xcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLmEyNWI4OTAyY2RmYzE3IDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTY1LDYgKzY1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9rdm0uaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1fZGlydHlfcmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2RpcnR5X2JpdC5oXFx1MDAzZVxcbiBcXG4gXFxuIC8qIFdvcnN0IGNhc2UgYnVmZmVyIHNpemUgbmVlZGVkIGZvciBob2xkaW5nIGFuIGludGVnZXIuICovXFxuQEAgLTIyNjIsNiArMjI2MywxMCBAQCBzdGF0aWMgaW50IGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyAqbG9nKVxcbiBcXHRcXHRkaXJ0eV9iaXRtYXBfYnVmZmVyID0ga3ZtX3NlY29uZF9kaXJ0eV9iaXRtYXAobWVtc2xvdCk7XFxuIFxcdFxcdG1lbXNldChkaXJ0eV9iaXRtYXBfYnVmZmVyLCAwLCBuKTtcXG4gXFxuK1xcdFxcdGlmIChrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoa3ZtLCBtZW1zbG90LCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGRpcnR5X2JpdG1hcF9idWZmZXIsIFxcdTAwMjZmbHVzaCkgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRcXHRLVk1fTU1VX0xPQ0soa3ZtKTtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG4gLyBzaXplb2YobG9uZyk7IGkrKykge1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1hc2s7XFxuQEAgLTIyODEsNiArMjI4Niw3IEBAIHN0YXRpYyBpbnQga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfbG9nICpsb2cpXFxuIFxcdFxcdEtWTV9NTVVfVU5MT0NLKGt2bSk7XFxuIFxcdH1cXG4gXFxuK291dDpcXG4gXFx0aWYgKGZsdXNoKVxcbiBcXHRcXHRrdm1fZmx1c2hfcmVtb3RlX3RsYnNfbWVtc2xvdChrdm0sIG1lbXNsb3QpO1xcbiBcXG5AQCAtMjM3Myw2ICsyMzc5LDEwIEBAIHN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKGRpcnR5X2JpdG1hcF9idWZmZXIsIGxvZy1cXHUwMDNlZGlydHlfYml0bWFwLCBuKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbitcXHRpZiAoa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKGt2bSwgbWVtc2xvdCwgbG9nLCBkaXJ0eV9iaXRtYXBfYnVmZmVyLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbHVzaCkgXFx1MDAzZT0gMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRLVk1fTU1VX0xPQ0soa3ZtKTtcXG4gXFx0Zm9yIChvZmZzZXQgPSBsb2ctXFx1MDAzZWZpcnN0X3BhZ2UsIGkgPSBvZmZzZXQgLyBCSVRTX1BFUl9MT05HLFxcbiBcXHRcXHQgbiA9IERJVl9ST1VORF9VUChsb2ctXFx1MDAzZW51bV9wYWdlcywgQklUU19QRVJfTE9ORyk7IG4tLTtcXG5AQCAtMjM5MiwxMiArMjQwMiwxMyBAQCBzdGF0aWMgaW50IGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdCovXFxuIFxcdFxcdGlmIChtYXNrKSB7XFxuIFxcdFxcdFxcdGZsdXNoID0gdHJ1ZTtcXG4rXFxuIFxcdFxcdFxcdGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChrdm0sIG1lbXNsb3QsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG9mZnNldCwgbWFzayk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRLVk1fTU1VX1VOTE9DSyhrdm0pO1xcbi1cXG4rb3V0OlxcbiBcXHRpZiAoZmx1c2gpXFxuIFxcdFxcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KGt2bSwgbWVtc2xvdCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0MDo1NS42MDQ1NjQ5NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNjgyNjczMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiQUNQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyXCIsXG4gICAgXCJfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJcIixcbiAgICBcImRpcnR5X2JpdF9jbGVhclwiLFxuICAgIFwiaGFjZGJzaXJxX2hhbmRsZXJcIixcbiAgICBcImt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc1wiLFxuICAgIFwia3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdFwiLFxuICAgIFwia3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0XCIsXG4gICAgXCJrdm1fZGlydHlfcmluZ19yZXNldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjNTg2NzE3NmY3MTA0NzZiMjhiMTM2ZGI1YzgzOTMxYTc1ZWJlODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxMTo0MDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmhcbmluZGV4IDhhNTRjYTZiYTYwMjgyLi44ODMzMTVlOWQ3OWQ5OCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaFxuQEAgLTQ1LDYgKzQ1LDkgQEBcbiBcbiAjZGVmaW5lIEFDUElfTUFEVF9HSUNDX1RSQkUgIChvZmZzZXRvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0LCBcXFxuIFx0dHJiZV9pbnRlcnJ1cHQpICsgc2l6ZW9mKHUxNikpXG4rXG4rI2RlZmluZSBBQ1BJX01BRFRfR0lDQ19IQUNEQlNJUlEgIChvZmZzZXRvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0LCBcXFxuK1x0aGFjZGJzaXJxX2dzaSkgKyBzaXplb2YodTMyKSlcbiAvKlxuICAqIEFybcKuIEZ1bmN0aW9uYWwgRml4ZWQgSGFyZHdhcmUgU3BlY2lmaWNhdGlvbiBWZXJzaW9uIDEuMi5cbiAgKiBUYWJsZSAyOiBBcm0gQXJjaGl0ZWN0dXJlIGNvbnRleHQgbG9zcyBmbGFnc1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbmluZGV4IGE1Nzg3MGZhOTZkYjViLi42MjBhZTRjZGRiNzYwYSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuQEAgLTg2Myw2ICs4NjMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWZ0KHZvaWQpXG4gXHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQUZUKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oZGJzcyh2b2lkKVxuK3tcbitcdHJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19IREJTUyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKHZvaWQpXG4re1xuK1x0cmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFDREJTKTtcbit9XG4rXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19tcGFtKHZvaWQpXG4ge1xuIFx0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfTVBBTSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kNzZjMTA5OTM3ZDhkYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmhcbkBAIC0wLDAgKzEsNjcgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXHUwMDNjbGVvLmJyYXNAYXJtLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpZm5kZWYgX19BUk02NF9LVk1fRElSVFlfQklUX0hfX1xuKyNkZWZpbmUgX19BUk02NF9LVk1fRElSVFlfQklUX0hfX1xuK1xuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGd0YWJsZS5oXHUwMDNlXG4rXG4rZW51bSBoYWNkYnNfc3RhdHVzIHtcbitcdEhBQ0RCU19PRkYsXG4rXHRIQUNEQlNfSURMRSxcbitcdEhBQ0RCU19SVU5OSU5HLFxuK1x0SEFDREJTX0VSUk9SXG4rfTtcbitcbitzdHJ1Y3QgaGFjZGJzIHtcbitcdGVudW0gaGFjZGJzX3N0YXR1cyBzdGF0dXM7XG4rXHRpbnQgc2l6ZTtcbit9O1xuK1xuK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgaGFjZGJzLCBoYWNkYnNfcGNwKTtcbitcbit2b2lkIF9faW5pdCBrdm1faGFjZGJzX2luaXQodm9pZCk7XG4rdm9pZCBrdm1faGFjZGJzX2NwdV91cCh2b2lkKTtcbit2b2lkIGt2bV9oYWNkYnNfY3B1X2Rvd24odm9pZCk7XG4rXG4raW50IF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHQgICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbitcdFx0XHQgICAgICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcbitcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxuK1x0XHRcdCAgICAgICBib29sICpmbHVzaCk7XG4rXG4raW50IF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZyxcbitcdFx0XHRcdGludCAqbnJfZW50cmllc19yZXNldCk7XG4rXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9hcmNoX2RpcnR5X2NsZWFyX2VuYWJsZWQoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfSURMRSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAoa3ZtLVx1MDAzZWFyY2gubW11LnBndC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcbitcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxuK1x0XHRcdFx0XHQgICBib29sICpmbHVzaClcbit7XG4rXHRpZiAoIWt2bV9hcmNoX2RpcnR5X2NsZWFyX2VuYWJsZWQoa3ZtKSlcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHJldHVybiBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihrdm0sIG1lbXNsb3QsIGxvZywgYml0bWFwLCBmbHVzaCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuK1x0XHRcdFx0XHQgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxuK3tcbitcdGlmICgha3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChrdm0pKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0cmV0dXJuIF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihrdm0sIHJpbmcsIG5yX2VudHJpZXNfcmVzZXQpO1xuK31cbitcbisjZW5kaWYgLyogX19BUk02NF9LVk1fRElSVFlfQklUX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuaW5kZXggNDFhODY4NzkzOGViNmIuLjY0NmZmODhlMDI1ODNmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbkBAIC05Myw2ICs5Myw4IEBAIHR5cGVkZWYgdTY0IGt2bV9wdGVfdDtcbiBcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX1hOXHRHRU5NQVNLKDU0LCA1MylcbiBcbisjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTVx0QklUKDUxKVxuK1xuICNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzFfR1BcdEJJVCg1MClcbiBcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX1MyX1BFUk1TXHQoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SIHwgXFxcbkBAIC0yNTMsNiArMjU1LDcgQEAgc3RydWN0IGt2bV9wZ3RhYmxlX21tX29wcyB7XG4gZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3Mge1xuIFx0S1ZNX1BHVEFCTEVfUzJfSURNQVBcdFx0XHQ9IEJJVCgwKSxcbiBcdEtWTV9QR1RBQkxFX1MyX0FTX1MxXHRcdFx0PSBCSVQoMSksXG4rXHRLVk1fUEdUQUJMRV9TMl9EQk1cdFx0XHQ9IEJJVCgyKSxcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuaW5kZXggOWEyMmRmMGM1MTIwZjMuLjYyZjU2YmJkMGE2NWM4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbkBAIC01MjMsNiArNTIzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnIzW10gPSB7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnI0W10gPSB7XG4gXHRTX0FSTTY0X0ZUUl9CSVRTKEZUUl9ISURERU4sIEZUUl9TVFJJQ1QsIEZUUl9MT1dFUl9TQUZFLCBJRF9BQTY0TU1GUjRfRUwxX0UySDBfU0hJRlQsIDQsIDApLFxuIFx0QVJNNjRfRlRSX0JJVFMoRlRSX0hJRERFTiwgRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRNTUZSNF9FTDFfTlZfZnJhY19TSElGVCwgNCwgMCksXG4rXHRBUk02NF9GVFJfQklUUyhGVFJfSElEREVOLCBGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgSURfQUE2NE1NRlI0X0VMMV9IQUNEQlNfU0hJRlQsIDQsIDApLFxuIFx0QVJNNjRfRlRSX0VORCxcbiB9O1xuIFxuQEAgLTIxMzEsNiArMjEzMiwxMSBAQCBzdGF0aWMgYm9vbCBodmhlX3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcbiBcdHJldHVybiBhcm02NF90ZXN0X3N3X2ZlYXR1cmVfb3ZlcnJpZGUoQVJNNjRfU1dfRkVBVFVSRV9PVkVSUklERV9IVkhFKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgaGFzX3ZoZV9oZGJzcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBjb3BlKVxuK3tcbitcdHJldHVybiBpc19rZXJuZWxfaW5faHlwX21vZGUoKSBcdTAwMjZcdTAwMjYgaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIGNvcGUpO1xuK31cbitcbiBib29sIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpXG4ge1xuIFx0LypcbkBAIC0yNzY2LDYgKzI3NzIsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIERCTSlcbiBcdH0sXG4gI2VuZGlmXG4rXHR7XG4rXHRcdC5kZXNjID0gXCJIYXJkd2FyZSBkaXJ0eSBiaXQgQ2xlYW5pbmdcIixcbitcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4rXHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSEFDREJTLFxuK1x0XHQubWF0Y2hlcyA9IGhhc19jcHVpZF9mZWF0dXJlLFxuK1x0XHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlI0X0VMMSwgSEFDREJTLCBJTVApXG4rXHR9LFxuICNpZmRlZiBDT05GSUdfQVJNNjRfSEFGVFxuIFx0e1xuIFx0XHQuZGVzYyA9IFwiSGFyZHdhcmUgbWFuYWdlZCBBY2Nlc3MgRmxhZyBmb3IgVGFibGUgRGVzY3JpcHRvcnNcIixcbkBAIC0yNzgxLDYgKzI3OTQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhBRlQpXG4gXHR9LFxuICNlbmRpZlxuK1x0e1xuK1x0XHQuZGVzYyA9IFwiSGFyZHdhcmUgRGlydHkgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlIChIREJTUylcIixcbitcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4rXHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0hEQlNTLFxuK1x0XHQubWF0Y2hlcyA9IGhhc192aGVfaGRic3MsXG4rXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhEQlNTKVxuK1x0fSxcbiBcdHtcbiBcdFx0LmRlc2MgPSBcIkNSQzMyIGluc3RydWN0aW9uc1wiLFxuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19DUkMzMixcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9LY29uZmlnIGIvYXJjaC9hcm02NC9rdm0vS2NvbmZpZ1xuaW5kZXggNDQ5MTU0ZjlhNDg1MmQuLmRiODQ4N2JmNzM4Yjc4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm02NC9rdm0vS2NvbmZpZ1xuQEAgLTM0LDYgKzM0LDcgQEAgbWVudWNvbmZpZyBLVk1cbiBcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXG4gXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxuK1x0c2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJXG4gXHRzZWxlY3QgU0NIRURfSU5GT1xuIFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG4gXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxuaW5kZXggNTk2MTJkMmYyNzdjMWQuLjZmYWFjZDg1NzM0NmIzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbisrKyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5AQCAtMjQsNyArMjQsNyBAQCBrdm0teSArPSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuIFx0IHZnaWMvdmdpYy1tbWlvLm8gdmdpYy92Z2ljLW1taW8tdjIubyBcXFxuIFx0IHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZpY2UubyBcXFxuIFx0IHZnaWMvdmdpYy1pdHMubyB2Z2ljL3ZnaWMtZGVidWcubyB2Z2ljL3ZnaWMtdjMtbmVzdGVkLm8gXFxcbi1cdCB2Z2ljL3ZnaWMtdjUub1xuK1x0IHZnaWMvdmdpYy12NS5vIGRpcnR5X2JpdC5vXG4gXG4ga3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgKz0gcG11LWVtdWwubyBwbXUub1xuIGt2bS0kKENPTkZJR19BUk02NF9QVFJfQVVUSCkgICs9IHBhdXRoLm9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uZGMxYTQ2MjlhYWViOTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC00Miw2ICs0Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGt2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wdHJhdXRoLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3RhY2t0cmFjZS9udmhlLmhcdTAwM2VcbiBcbkBAIC0yMzA3LDYgKzIzMDgsNyBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIFxuIFx0a3ZtX3ZnaWNfY3B1X3VwKCk7XG4gXHRrdm1fdGltZXJfY3B1X3VwKCk7XG4rXHRrdm1faGFjZGJzX2NwdV91cCgpO1xuIFxuIFx0cHJlZW1wdF9lbmFibGUoKTtcbiBcbkBAIC0yMzE1LDYgKzIzMTcsNyBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIFxuIHZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiB7XG4rXHRrdm1faGFjZGJzX2NwdV9kb3duKCk7XG4gXHRrdm1fdGltZXJfY3B1X2Rvd24oKTtcbiBcdGt2bV92Z2ljX2NwdV9kb3duKCk7XG4gXG5AQCAtMjQ4MSw2ICsyNDg0LDggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9zdWJzeXN0ZW1zKHZvaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGt2bV9oYWNkYnNfaW5pdCgpO1xuK1xuIFx0a3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKCk7XG4gXG4gXHRlcnIgPSBrdm1faHlwX3RyYWNlX2luaXQoKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE5Mjg5ZWE3M2Q5NmQ5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY1xuQEAgLTAsMCArMSw0MTEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXHUwMDNjbGVvLmJyYXNAYXJtLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4rXG4rREVGSU5FX1BFUl9DUFUoc3RydWN0IGhhY2RicywgaGFjZGJzX3BjcCkgPSB7XG4rXHQuc3RhdHVzID0gSEFDREJTX09GRixcbitcdC5zaXplID0gMCxcbit9O1xuK1xuKy8qIEhEQlNTIGVudHJ5IGZpZWxkIGRlZmluaXRpb25zICovXG4rI2RlZmluZSBIREJTU19FTlRSWV9WQUxJRCBCSVQoMClcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfU0hJRlQgKDEpXG4rI2RlZmluZSBIREJTU19FTlRSWV9UVFdMX01BU0sgKEdFTk1BU0soMywgMSkpXG4rI2RlZmluZSBIREJTU19FTlRSWV9UVFdMKHgpIFxcXG4rXHQoKCh4KSBcdTAwM2NcdTAwM2MgSERCU1NfRU5UUllfVFRXTF9TSElGVCkgXHUwMDI2IEhEQlNTX0VOVFJZX1RUV0xfTUFTSylcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfUkVTViBIREJTU19FTlRSWV9UVFdMKC00KVxuKyNkZWZpbmUgSERCU1NfRU5UUllfSVBBIEdFTk1BU0tfVUxMKDU1LCAxMilcbitcbitzdGF0aWMgX19yb19hZnRlcl9pbml0IGludCBoYWNkYnNpcnEgPSAtMTtcbitcbitzdGF0aWMgdm9pZCBoYWNkYnNfc3RhcnQodTY0ICpod19lbnRyaWVzLCBpbnQgc2l6ZSlcbit7XG4rXHR1NjQgYnI7XG4rXHQvKiBFYWNoIGVudHJ5IGlzIDggYnl0ZXMgKi9cbitcdGludCBzaXplX2IgPSBzaXplICogc2l6ZW9mKGh3X2VudHJpZXNbMF0pO1xuK1x0aW50IHNpemVfcDIgPSBtYXgocm91bmR1cF9wb3dfb2ZfdHdvKHNpemVfYiksIFBBR0VfU0laRSk7XG4rXG4rXHQvKiBJZiBub3QgdXNpbmcgdGhlIGZ1bGwgc2l6ZSBvZiB0aGUgYXJyYXksIHB1dCBhIHN0b3AgZW50cnkgYXQgdGhlIGVuZCAqL1xuK1x0aWYgKHNpemVfYiBcdTAwM2Mgc2l6ZV9wMilcbitcdFx0aHdfZW50cmllc1tzaXplXSA9IEhEQlNTX0VOVFJZX1ZBTElEIHwgSERCU1NfRU5UUllfVFRXTF9SRVNWO1xuK1xuK1x0c3lzcmVnX2NsZWFyX3NldF9zKFNZU19IQUNEQlNDT05TX0VMMixcbitcdFx0XHQgICBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OIHwgSEFDREJTQ09OU19FTDJfSU5ERVgsIDApO1xuK1xuK1x0YnIgPSAodmlydF90b19waHlzKGh3X2VudHJpZXMpIFx1MDAyNiBIQUNEQlNCUl9FTDJfQkFERFJfTUFTSykgfFxuK1x0ICAgICBGSUVMRF9QUkVQKEhBQ0RCU0JSX0VMMl9TWiwgaWxvZzIoc2l6ZV9wMikgLSAxMikgfFxuK1x0ICAgICBGSUVMRF9QUkVQKEhBQ0RCU0JSX0VMMl9FTiwgMSk7XG4rXG4rXHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX1JVTk5JTkcpO1xuK1x0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zaXplLCBzaXplKTtcbitcdHdyaXRlX3N5c3JlZ19zKGJyLCBTWVNfSEFDREJTQlJfRUwyKTtcbitcdGlzYigpO1xuK31cbitcbitzdGF0aWMgaW50IGhhY2Ric19zdG9wKHZvaWQpXG4re1xuK1x0d3JpdGVfc3lzcmVnX3MoMCwgU1lTX0hBQ0RCU0JSX0VMMik7XG4rXHRpc2IoKTtcbitcbitcdGlmICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfRVJST1IpIHtcbitcdFx0LyogSW4gY2FzZSBvZiBlcnJvciwgSEFDREJTQ09OU19FTDIuSU5ERVggc2hvdWxkIHBvaW50IHRoZSBmYXVsdHkgZW50cnkgKi9cbitcdFx0dTY0IGNvbnMgPSByZWFkX3N5c3JlZ19zKFNZU19IQUNEQlNDT05TX0VMMik7XG4rXHRcdGludCBpZHggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpO1xuK1xuK1x0XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpO1xuK1xuK1x0XHRyZXR1cm4gaWR4O1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRoaXNfY3B1X3JlYWQoaGFjZGJzX3BjcC5zaXplKTtcbit9XG4rXG4rLypcbisgKiBDbGVhcnMgZGlydHktYml0cyBmb3IgYW4gYXJyYXkgb2YgcGFnZXMgKGh3X2VudHJpZXMpIHVzaW5nIEhBQ0RCU1xuKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBjbGVhbmVkIGZyb20gdGhlIGFycmF5LiBJZiByZXR1cm5zIHZhbHVlIFx1MDAzYyBzaXplLFxuKyAqXHR0aGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHByb2Nlc3NpbmcuXG4rICovXG4rc3RhdGljIGludCBkaXJ0eV9iaXRfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmh3X2VudHJpZXMsIGludCBzaXplKVxuK3tcbitcdHU2NCBoY3JfZWwyO1xuK1x0aW50IHJldDtcbitcbitcdHByZWVtcHRfZGlzYWJsZSgpO1xuK1xuK1x0aGNyX2VsMiA9IHJlYWRfc3lzcmVnKEhDUl9FTDIpO1xuK1x0d3JpdGVfc3lzcmVnKGhjcl9lbDIgfCBIQ1JfRUwyX1ZNLCBIQ1JfRUwyKTtcbitcdF9fbG9hZF9zdGFnZTIoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11KTtcbitcbitcdGhhY2Ric19zdGFydChod19lbnRyaWVzLCBzaXplKTtcbitcbitcdGRvIHtcbitcdFx0d2ZpKCk7XG4rXHR9IHdoaWxlICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfUlVOTklORyk7XG4rXG4rXHRyZXQgPSBoYWNkYnNfc3RvcCgpO1xuK1xuK1x0d3JpdGVfc3lzcmVnKGhjcl9lbDIsIEhDUl9FTDIpO1xuK1x0aXNiKCk7XG4rXG4rXHQvKlxuK1x0ICogTm8gRFNCIGlzIG5lZWRlZCBoZXJlLCBhcyBrdm1fZmx1c2hfcmVtb3RlX3RsYnNfbWVtc2xvdCgpIHRoYXQgaGFwcGVuc1xuK1x0ICogbGF0ZXIgaW4gZ2VuZXJpYyBkaXJ0eS1jbGVhbmluZyBjb2RlIGFscmVhZHkgcGVyZm9ybXMgYSBEU0IgYmVmb3JlXG4rXHQgKiBkb2luZyB0aGUgVExCSS5cbitcdCAqL1xuK1xuK1x0cHJlZW1wdF9lbmFibGUoKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBoZGJzc190b19iaXRtYXAodTY0ICpoZGJzc19hcnJheSwgaW50IHN0YXJ0LCBpbnQgZW5kLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldClcbit7XG4rXHR1NjQgdyA9IChncGFfdG9fZ2ZuKGhkYnNzX2FycmF5W3N0YXJ0XSkgLSBvZmZzZXQpIC8gQklUU19QRVJfTE9ORztcbitcdHU2NCBtYXNrID0gMDtcbitcdGludCBpZHggPSBzdGFydDtcbitcbitcdGRvIHtcbitcdFx0dTY0IGVudHJ5ID0gKGdwYV90b19nZm4oaGRic3NfYXJyYXlbaWR4XSkgLSBvZmZzZXQpO1xuK1xuK1x0XHRpZiAoZW50cnkgLyBCSVRTX1BFUl9MT05HID09IHcpIHtcbitcdFx0XHRtYXNrIHw9IEJJVChlbnRyeSAlIEJJVFNfUEVSX0xPTkcpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGF0b21pY19sb25nX29yKG1hc2ssIChhdG9taWNfbG9uZ190ICopXHUwMDI2ZGlydHlfYml0bWFwW3ddKTtcbitcdFx0XHR3ID0gZW50cnkgLyBCSVRTX1BFUl9MT05HO1xuK1x0XHRcdG1hc2sgPSBCSVQoZW50cnkgJSBCSVRTX1BFUl9MT05HKTtcbitcdFx0fVxuK1x0fSB3aGlsZSAoKytpZHggXHUwMDNjIGVuZCk7XG4rXHRhdG9taWNfbG9uZ19vcihtYXNrLCAoYXRvbWljX2xvbmdfdCAqKVx1MDAyNmRpcnR5X2JpdG1hcFt3XSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsXG4rXHRcdFx0XHR1NjQgdHR3bCwgaW50IGlkeCwgaW50IGVudHJpZXNfc3opXG4re1xuK1x0d2hpbGUgKGlkeCBcdTAwM2MgZW50cmllc19zeikge1xuK1x0XHRpbnQgaiA9IF9fZmZzKCptYXNrKTtcbitcdFx0dTY0IGEgPSBnZm5fdG9fZ3BhKG9mZnNldCArIGopO1xuK1xuK1x0XHRod19lbnRyaWVzW2lkeCsrXSA9IChhIFx1MDAyNiBIREJTU19FTlRSWV9JUEEpIHxcbitcdFx0XHRcdCAgICB0dHdsIHxcbitcdFx0XHRcdCAgICBIREJTU19FTlRSWV9WQUxJRDtcbitcbitcdFx0Km1hc2sgXHUwMDI2PSB+QklUKGopO1xuK1x0XHRpZiAoISptYXNrKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlkeDtcbit9XG4rXG4raW50IF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHQgICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbitcdFx0XHQgICAgICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcbitcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxuK1x0XHRcdCAgICAgICBib29sICpmbHVzaClcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCBpZHggPSAwO1xuK1x0dW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwID0gbWVtc2xvdC1cdTAwM2VkaXJ0eV9iaXRtYXA7XG4rXHR1NjQgKmh3X2VudHJpZXM7XG4rXHRjb25zdCBpbnQgZW50cmllc19zeiA9IFBBR0VfU0laRSAvIHNpemVvZigqaHdfZW50cmllcyk7XG4rXHR1NjQgdHR3bDtcbitcdHU2NCBzdGFydCwgZW5kO1xuK1x0Z2ZuX3QgYmFzZV9nZm47XG4rXHRncGFfdCBzcGxpdF9lbmQgPSAwO1xuK1xuK1x0aHdfZW50cmllcyA9IGttYWxsb2Nfb2Jqcyh1NjQsIGVudHJpZXNfc3osIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFod19lbnRyaWVzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHR0d2wgPSBIREJTU19FTlRSWV9UVFdMKEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwpO1xuK1xuK1x0aWYgKGxvZykge1xuK1x0XHRzdGFydCA9IGxvZy1cdTAwM2VmaXJzdF9wYWdlIC8gQklUU19QRVJfTE9ORztcbitcdFx0ZW5kID0gc3RhcnQgKyBESVZfUk9VTkRfVVAobG9nLVx1MDAzZW51bV9wYWdlcywgQklUU19QRVJfTE9ORyk7XG4rXHRcdGJhc2VfZ2ZuID0gbWVtc2xvdC1cdTAwM2ViYXNlX2dmbiArIGxvZy1cdTAwM2VmaXJzdF9wYWdlICUgQklUU19QRVJfTE9ORztcbitcdH0gZWxzZSB7XG4rXHRcdHN0YXJ0ID0gMDtcbitcdFx0ZW5kID0ga3ZtX2RpcnR5X2JpdG1hcF9ieXRlcyhtZW1zbG90KSAvIHNpemVvZihsb25nKTtcbitcdFx0YmFzZV9nZm4gPSBtZW1zbG90LVx1MDAzZWJhc2VfZ2ZuO1xuK1x0fVxuK1xuK1x0d3JpdGVfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSBzdGFydDsgaSBcdTAwM2MgZW5kOyBpKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyBtYXNrO1xuK1x0XHRnZm5fdCBvZmZzZXQ7XG4rXHRcdGF0b21pY19sb25nX3QgKnA7XG4rXG4rXHRcdGlmIChsb2cpIHsgLyogQ2xlYW4gb25seSB3aGF0IGlzIGluIHRoZSBpbnB1dCBiaXRtYXAgKi9cbitcdFx0XHRtYXNrID0gYml0bWFwW2ldO1xuK1x0XHRcdGlmICghbWFzaylcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHAgPSAoYXRvbWljX2xvbmdfdCAqKVx1MDAyNmRpcnR5X2JpdG1hcFtpXTtcbitcdFx0XHRtYXNrIFx1MDAyNj0gYXRvbWljX2xvbmdfZmV0Y2hfYW5kbm90KG1hc2ssIHApO1xuK1x0XHR9IGVsc2UgeyAvKiBDbGVhbiBldmVyeXRoaW5nICovXG4rXHRcdFx0aWYgKCFkaXJ0eV9iaXRtYXBbaV0pXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRtYXNrID0geGNoZyhcdTAwMjZkaXJ0eV9iaXRtYXBbaV0sIDApO1xuK1x0XHRcdGJpdG1hcFtpXSA9IG1hc2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFtYXNrKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRvZmZzZXQgPSBiYXNlX2dmbiArIGkgKiBCSVRTX1BFUl9MT05HO1xuK1xuK1x0XHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChvZmZzZXQgKyBCSVRTX1BFUl9MT05HIFx1MDAzZSBzcGxpdF9lbmQpKSB7XG4rXHRcdFx0Z3BhX3Qgc3RhcnQgPSBnZm5fdG9fZ3BhKG9mZnNldCArIF9fZmZzKG1hc2spKTtcbitcdFx0XHRncGFfdCBlbmQgPSBnZm5fdG9fZ3BhKG9mZnNldCArIF9fZmxzKG1hc2spICsgMSk7XG4rXG4rXHRcdFx0a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKGt2bSwgc3RhcnQsIGVuZCk7XG4rXHRcdFx0c3BsaXRfZW5kID0gZ3BhX3RvX2dmbihBTElHTl9ET1dOKGVuZCwgUE1EX1NJWkUpICsgUE1EX1NJWkUgLSAxKTtcbitcdFx0fVxuK1xuK1x0XHRkbyB7XG4rXHRcdFx0aWR4ID0gbWFza190b19oZGJzcyhcdTAwMjZtYXNrLCBod19lbnRyaWVzLCBvZmZzZXQsIHR0d2wsIGlkeCwgZW50cmllc19zeik7XG4rXHRcdFx0aWYgKGlkeCBcdTAwM2U9IGVudHJpZXNfc3opIHtcbitcdFx0XHRcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGlkeCk7XG4rXHRcdFx0XHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFx1MDAzZSAwO1xuK1x0XHRcdFx0aWYgKHJldCAhPSBpZHgpIHtcbitcdFx0XHRcdFx0LyogU2F2ZSBiaXRzIG5vdCBjb252ZXJ0ZWQgYmFjayB0byBiaXRtYXAgKi9cbitcdFx0XHRcdFx0YXRvbWljX2xvbmdfb3IobWFzaywgKGF0b21pY19sb25nX3QgKilcdTAwMjZkaXJ0eV9iaXRtYXBbaV0pO1xuK1x0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRpZHggPSAwO1xuK1x0XHRcdH1cbitcdFx0fSB3aGlsZSAobWFzayk7XG4rXHR9XG4rXG4rXHRpZiAoaWR4ICE9IDApIHtcbitcdFx0cmV0ID0gZGlydHlfYml0X2NsZWFyKGt2bSwgaHdfZW50cmllcywgaWR4KTtcbitcdFx0KmZsdXNoID0gKmZsdXNoIHx8IHJldCBcdTAwM2UgMDtcbitcdH1cbitvdXRfZXJyOlxuK1x0aWYgKHVubGlrZWx5KHJldCAhPSBpZHgpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEluIGNhc2UgdGhlcmUgaXMgYW4gZXJyb3IgYW5kIG5vdCBhbGwgZW50cmllcyBpbiBIQUNEQlMgZ2V0XG4rXHRcdCAqIGNsZWFuZWQsIHdlIGhhdmUgdG8gbWFyayB0aGUgZGlydHkgYml0cyBiYWNrIGluIHRoZSBiaXRtYXAsXG4rXHRcdCAqIGFzIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBzb2Z0d2FyZSByb3V0aW5lLlxuK1x0XHQgKlxuK1x0XHQgKiBFbnRyaWVzIHNob3VsZCBiZSBpbiBvcmRlciwgc2luY2UgdGhleSB3ZXJlIGV4dHJheGVkIGZyb21cbitcdFx0ICogdGhlIGRpcnR5LWJpdG1hcCwgc28gYmF0Y2hpbmcgdGhlIGF0b21pYyB3cml0ZXMgaXMgZWZmaWNpZW50LlxuK1x0XHQgKi9cbitcbitcdFx0aWYgKHJldCBcdTAwM2MgaWR4KVxuK1x0XHRcdGhkYnNzX3RvX2JpdG1hcChod19lbnRyaWVzLCByZXQsIGlkeCwgZGlydHlfYml0bWFwLCBtZW1zbG90LVx1MDAzZWJhc2VfZ2ZuKTtcbitcbitcdFx0cmV0ID0gLUVBR0FJTjtcbitcdH1cbitcbitcdHdyaXRlX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1x0a2ZyZWUoaHdfZW50cmllcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuK1x0XHRcdFx0aW50ICpucl9lbnRyaWVzX3Jlc2V0KVxuK3tcbitcdHU2NCAqaHdfZW50cmllcztcbitcdHU2NCBzbG90X29mZnNldCA9IDA7XG4rXHR1NjQgdHR3bDtcbitcdGludCBpLCByZXQ7XG4rXHR1MzIgc2xvdCA9IC0xO1xuK1xuK1x0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuK1x0XHRyZXR1cm4gLUVJTlRSO1xuK1xuK1x0dHR3bCA9IEhEQlNTX0VOVFJZX1RUV0woS1ZNX1BHVEFCTEVfTEFTVF9MRVZFTCk7XG4rXG4rXHRod19lbnRyaWVzID0ga21hbGxvYyhtYXgocmluZy1cdTAwM2VzaXplICogc2l6ZW9mKHU2NCksIFBBR0VfU0laRSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFod19lbnRyaWVzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJpbmctXHUwMDNlc2l6ZTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBrdm1fZGlydHlfZ2ZuICplbnRyeTtcbitcdFx0Z2ZuX3QgZ2ZuO1xuK1xuK1x0XHRlbnRyeSA9IFx1MDAyNnJpbmctXHUwMDNlZGlydHlfZ2Zuc1socmluZy1cdTAwM2VyZXNldF9pbmRleCArIGkpIFx1MDAyNlxuK1x0XHRcdFx0XHQgIChyaW5nLVx1MDAzZXNpemUgLSAxKV07XG4rXG4rXHRcdGlmICgha3ZtX2RpcnR5X2dmbl9oYXJ2ZXN0ZWQoZW50cnkpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAoZW50cnktXHUwMDNlc2xvdCAhPSBzbG90KSB7XG4rXHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbitcbitcdFx0XHRtZW1zbG90ID0ga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoa3ZtLCBlbnRyeS1cdTAwM2VzbG90KTtcbitcdFx0XHRzbG90ID0gZW50cnktXHUwMDNlc2xvdDtcbitcdFx0XHRzbG90X29mZnNldCA9IG1lbXNsb3QtXHUwMDNlYmFzZV9nZm47XG4rXHRcdH1cbitcbitcdFx0Z2ZuID0gc2xvdF9vZmZzZXQgKyBlbnRyeS1cdTAwM2VvZmZzZXQ7XG4rXG4rXHRcdGh3X2VudHJpZXNbaV0gPSAoZ2ZuX3RvX2dwYShnZm4pIFx1MDAyNiBIREJTU19FTlRSWV9JUEEpIHxcbitcdFx0XHRcdHR0d2wgfCBIREJTU19FTlRSWV9WQUxJRDtcbitcdH1cbitcbitcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGkpO1xuK1xuK1x0LyogU2V0IGFzIGludmFsaWQgYWxsIHN1Y2Nlc3NmdWxseSBjbGVhbmVkIGVudHJpZXMgKi9cbitcdGZvciAoaW50IGogPSAwOyBqIFx1MDAzYyByZXQ7IGorKykge1xuK1x0XHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZW50cnk7XG4rXG4rXHRcdGVudHJ5ID0gXHUwMDI2cmluZy1cdTAwM2VkaXJ0eV9nZm5zWyhyaW5nLVx1MDAzZXJlc2V0X2luZGV4ICsgaikgXHUwMDI2XG4rXHRcdFx0XHRcdCAgKHJpbmctXHUwMDNlc2l6ZSAtIDEpXTtcbitcbitcdFx0a3ZtX2RpcnR5X2dmbl9zZXRfaW52YWxpZChlbnRyeSk7XG4rXHR9XG4rXG4rXHQvKiBJbiBjYXNlIG9mIGVycm9yLCB0cnkgc29mdHdhcmUgY2xlYW5pbmcgZnJvbSB0aGUgZmF1bHRpbmcgZW50cnkgKi9cbitcdHJpbmctXHUwMDNlcmVzZXRfaW5kZXggKz0gcmV0O1xuK1x0Km5yX2VudHJpZXNfcmVzZXQgKz0gcmV0O1xuK1xuK1x0a2ZyZWUoaHdfZW50cmllcyk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyBpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpcnFyZXR1cm5fdCBoYWNkYnNpcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwY3B1KVxuK3tcbitcdHU2NCBjb25zID0gcmVhZF9zeXNyZWdfcyhTWVNfSEFDREJTQ09OU19FTDIpO1xuK1x0dW5zaWduZWQgbG9uZyBlcnIgPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTiwgY29ucyk7XG4rXG4rXHRzd2l0Y2ggKGVycikge1xuK1x0Y2FzZSBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OX05PRjpcbitcdFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT05fSVBBSEFDRjpcbitcdFx0LyogV2hlbiBzaXplIG5vdCBhIHBvd2VyIG9mIHR3byBcdTAwM2U9IDRrLCBleGl0IHdpdGggcmVzZXJ2ZWQgVFRMVyAqL1xuK1x0XHRpbnQgaW5kZXggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpO1xuK1xuK1x0XHRpZiAoaW5kZXggXHUwMDNlPSB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc2l6ZSkpIHtcbitcdFx0XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OX1NUUlVDVEY6XG4rXHRjYXNlIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT05fSVBBRjpcbitcdFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19FUlJPUik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuK31cbitcbit2b2lkIGt2bV9oYWNkYnNfY3B1X3VwKHZvaWQpXG4re1xuK1x0aWYgKGhhY2Ric2lycSBcdTAwM2MgMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZW5hYmxlX3BlcmNwdV9pcnEoaGFjZGJzaXJxLCBJUlFfVFlQRV9MRVZFTF9ISUdIKTtcbitcdHRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfSURMRSk7XG4rfVxuK1xuK3ZvaWQga3ZtX2hhY2Ric19jcHVfZG93bih2b2lkKVxuK3tcbitcdGlmIChoYWNkYnNpcnEgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGRpc2FibGVfcGVyY3B1X2lycShoYWNkYnNpcnEpO1xuK1x0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19PRkYpO1xuK31cbitcbisjaWZkZWYgQ09ORklHX0FDUElcbitzdGF0aWMgaW50IF9faW5pdCBoYWNkYnNfYWNwaV9nZXRfaXJxKHZvaWQpXG4re1xuK1x0c3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCAqZ2ljYztcbitcdHUzMiBnc2k7XG4rXHRpbnQgaXJxO1xuK1xuK1x0Z2ljYyA9IGFjcGlfY3B1X2dldF9tYWR0X2dpY2Moc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbitcdGlmIChnaWNjLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIEFDUElfTUFEVF9HSUNDX0hBQ0RCU0lSUSlcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcbitcdGdzaSA9ICBnaWNjLVx1MDAzZWhhY2Ric2lycV9nc2k7XG4rXG4rXHRpcnEgPSBhY3BpX3JlZ2lzdGVyX2dzaShOVUxMLCBnc2ksIEFDUElfTEVWRUxfU0VOU0lUSVZFLCBBQ1BJX0FDVElWRV9ISUdIKTtcbitcdGlmIChpcnEgXHUwMDNjIDApIHtcbitcdFx0cHJfd2FybihcIkFDUEk6IFVuYWJsZSB0byByZWdpc3RlciBIQUNEQlMgaW50ZXJydXB0OiAlZFxcblwiLCBnc2kpO1xuK1x0XHRyZXR1cm4gLUVOWElPO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlycTtcbit9XG4rI2Vsc2VcbisjZGVmaW5lIGhhY2Ric19hY3BpX2dldF9pcnEoKSAoLUVOWElPKVxuKyNlbmRpZlxuK1xuK3ZvaWQgX19pbml0IGt2bV9oYWNkYnNfaW5pdCh2b2lkKVxuK3tcbitcdGludCBpcnE7XG4rXG4rXHQvKiBGRUFUX0hBQ0RCUyBpcyBvbmx5IHN1cHBvcnRlZCBpZiBMaW51eCBydW5zIGluIEVMMiAoVkhFKSAqL1xuK1x0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKCkgfHwgIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpcnEgPSBoYWNkYnNfYWNwaV9nZXRfaXJxKCk7XG4rXHRpZiAoaXJxIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocmVxdWVzdF9wZXJjcHVfaXJxKGlycSwgaGFjZGJzaXJxX2hhbmRsZXIsIFwiSEFDREJTSVJRXCIsIFx1MDAyNmhhY2Ric19wY3ApIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRoYWNkYnNpcnEgPSBpcnE7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG5pbmRleCA5MWE3ZGZhZDY2ODY2MC4uZTE2NzI5ZjBiN2JkMjQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG5AQCAtNzMxLDkgKzczMSwxMyBAQCBzdGF0aWMgaW50IHN0YWdlMl9zZXRfcHJvdF9hdHRyKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcFxuIFx0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfUilcbiBcdFx0YXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1I7XG4gXG4tXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKVxuK1x0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykge1xuIFx0XHRhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfVztcbiBcbitcdFx0aWYgKHBndC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKVxuK1x0XHRcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNO1xuK1x0fVxuK1xuIFx0aWYgKCFrdm1fbHBhMl9pc19lbmFibGVkKCkpXG4gXHRcdGF0dHIgfD0gRklFTERfUFJFUChLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TSCwgc2gpO1xuIFxuQEAgLTEzNjcsOSArMTM3MSwxMyBAQCBpbnQga3ZtX3BndGFibGVfc3RhZ2UyX3JlbGF4X3Blcm1zKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCB1NjQgYWRkcixcbiBcdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1IpXG4gXHRcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1I7XG4gXG4tXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKVxuK1x0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykge1xuIFx0XHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XO1xuIFxuK1x0XHRpZiAocGd0LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pXG4rXHRcdFx0c2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcbitcdH1cbitcbiBcdHJldCA9IHN0YWdlMl9zZXRfeG5fYXR0cihwcm90LCBcdTAwMjZ4bik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTE1ODUsNiArMTU5Myw5IEBAIGludCBfX2t2bV9wZ3RhYmxlX3N0YWdlMl9pbml0KHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxuIFx0aWYgKCFwZ3QtXHUwMDNlcGdkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbitcdFx0ZmxhZ3MgfD0gS1ZNX1BHVEFCTEVfUzJfREJNO1xuK1xuIFx0cGd0LVx1MDAzZWlhX2JpdHNcdFx0PSBpYV9iaXRzO1xuIFx0cGd0LVx1MDAzZXN0YXJ0X2xldmVsXHQ9IHN0YXJ0X2xldmVsO1xuIFx0cGd0LVx1MDAzZW1tX29wc1x0XHQ9IG1tX29wcztcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5pbmRleCA2Yzk0MWFhYTEwYzYzOS4uMmY5ZDkwYzM1NjY4YjkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbkBAIC0xMTcsOCArMTE3LDggQEAgc3RhdGljIGJvb2wgbmVlZF9zcGxpdF9tZW1jYWNoZV90b3B1cF9vcl9yZXNjaGVkKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBrdm1fbW11X21lbW9yeV9jYWNoZV9ucl9mcmVlX29iamVjdHMoY2FjaGUpIFx1MDAzYyBtaW47XG4gfVxuIFxuLXN0YXRpYyBpbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkcixcbi1cdFx0XHRcdCAgICBwaHlzX2FkZHJfdCBlbmQpXG4raW50IGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHBoeXNfYWRkcl90IGFkZHIsXG4rXHRcdFx0ICAgICBwaHlzX2FkZHJfdCBlbmQpXG4ge1xuIFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZTtcbiBcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0O1xuQEAgLTEwMjcsOCArMTAyNywxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0KnBlcl9jcHVfcHRyKG1tdS1cdTAwM2VsYXN0X3ZjcHVfcmFuLCBjcHUpID0gLTE7XG4gXG4tXHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi9cbi1cdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbitcdCAvKiBUaGUgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBpZiBzeXN0ZW0gaGFzIG5vIEhEQlNTICovXG4rXHRpZiAoc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpXG4rXHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFO1xuK1x0ZWxzZVxuK1x0XHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jaHVua19zaXplID0gS1ZNX0FSTV9FQUdFUl9TUExJVF9DSFVOS19TSVpFX0RFRkFVTFQ7XG4rXG4gXHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87XG4gXG4gXHRtbXUtXHUwMDNlcGdkX3BoeXMgPSBfX3BhKHBndC1cdTAwM2VwZ2QpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLmJkMmMwYmI5OGRhNjFlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC02OSw4ICs2OSwxMCBAQCBIQVNfVkE1MlxuIEhBU19WSVJUX0hPU1RfRVhUTlxuIEhBU19XRlhUXG4gSEFTX1hOWFxuK0hBU19IREJTU1xuIEhBRlRcbiBIV19EQk1cbitIQUNEQlNcbiBLVk1fSFZIRVxuIEtWTV9QUk9URUNURURfTU9ERVxuIE1JU01BVENIRURfQ0FDSEVfVFlQRVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnIGIvYXJjaC9hcm02NC90b29scy9zeXNyZWdcbmluZGV4IGJjMTc4OGIxNjYyYjc2Li43YjdjM2Q2YTBmMDMwOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZ1xuQEAgLTQ2MzQsNiArNDYzNCwzNiBAQCBGaWVsZFx0Nzo2XHRTTDBcbiBGaWVsZFx0NTowXHRUMFNaXG4gRW5kU3lzcmVnXG4gXG4rU3lzcmVnXHRIQUNEQlNCUl9FTDJcdDNcdDRcdDJcdDNcdDRcbitSZXMwXHQ2Mzo1NlxuK0ZpZWxkXHQ1NToxMlx0QkFERFJcbitGaWVsZFx0MTFcdEVOXG4rUmVzMFx0MTA6NFxuK1Vuc2lnbmVkRW51bVx0MzowXHRTWlxuK1x0MGIwMDAwXHQ0S1xuK1x0MGIwMDAxXHQ4S1xuK1x0MGIwMDEwXHQxNktcbitcdDBiMDAxMVx0MzJLXG4rXHQwYjAxMDBcdDY0S1xuK1x0MGIwMTAxXHQxMjhLXG4rXHQwYjAxMTBcdDI1NktcbitcdDBiMDExMVx0NTEyS1xuK1x0MGIxMDAwXHQxTVxuK1x0MGIxMDAxXHQyTVxuK0VuZEVudW1cbitFbmRTeXNyZWdcbitcbitTeXNyZWdcdEhBQ0RCU0NPTlNfRUwyXHQzXHQ0XHQyXHQzXHQ1XG4rVW5zaWduZWRFbnVtXHQ2Mzo2Mlx0RVJSX1JFQVNPTlxuK1x0MGIwMFx0Tk9GXG4rXHQwYjAxXHRTVFJVQ1RGXG4rXHQwYjEwXHRJUEFGXG4rXHQwYjExXHRJUEFIQUNGXG4rRW5kRW51bVxuK1JlczBcdDYxOjE5XG4rRmllbGRcdDE4OjBcdElOREVYXG4rRW5kU3lzcmVnXG4rXG4gU3lzcmVnXHRHQ1NDUl9FTDJcdDNcdDRcdDJcdDVcdDBcbiBGaWVsZHNcdEdDU0NSX0VMeFxuIEVuZFN5c3JlZ1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaFxuaW5kZXggYmFlZjUyNTM2N2I1YzQuLmVhZWZiNDk0ZWY1OTcyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGJsMi5oXG4rKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmhcbkBAIC0xNDQ5LDYgKzE0NDksNyBAQCBzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0IHtcbiBcdHUxNiB0cmJlX2ludGVycnVwdDtcdC8qIEFDUEkgNi41ICovXG4gXHR1MTYgaWFmZmlkO1x0XHQvKiBBQ1BJIDYuNyAqL1xuIFx0dTMyIGlyc19pZDtcbitcdHUzMiBoYWNkYnNpcnFfZ3NpO1x0LyogQUNQSSA2LlggKi9cbiB9O1xuIFxuIC8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oIGIvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODQ5Mjk3OWQ2OTRlNzBcbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oXG5AQCAtMCwwICsxLDM0IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFSTSBMdGQuXG4rICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzIFx1MDAzY2xlby5icmFzQGFybS5jb21cdTAwM2VcbisgKi9cbitcbisjaWZuZGVmIF9fS1ZNX0RJUlRZX0JJVF9IX19cbisjZGVmaW5lIF9fS1ZNX0RJUlRZX0JJVF9IX19cbitcbisjaWZuZGVmIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVRcbitcbitzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX2NsZWFyX2RpcnR5X2xvZyAqbG9nLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsXG4rXHRcdFx0XHRcdCAgIGJvb2wgKmZsdXNoKVxuK3tcbitcdHJldHVybiAtRU5YSU87XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuK1x0XHRcdFx0XHQgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxuK3tcbitcdHJldHVybiAtRU5YSU87XG4rfVxuK1xuKyNlbHNlIC8qIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4rXG4rI2VuZGlmIC8qIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVQgKi9cbitcbisjZW5kaWYgLyogX19LVk1fRElSVFlfQklUX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaCBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaFxuaW5kZXggZWIxMGQ4N2FkZjdkNTkuLjE5MGQ5N2ZjZTRhNDJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfcmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcbkBAIC04NCw2ICs4NCwxOCBAQCB2b2lkIGt2bV9kaXJ0eV9yaW5nX3B1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc2xvdCwgdTY0IG9mZnNldCk7XG4gXG4gYm9vbCBrdm1fZGlydHlfcmluZ19jaGVja19yZXF1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9kaXJ0eV9nZm5faGFydmVzdGVkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pXG4re1xuK1x0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Z2ZuLVx1MDAzZWZsYWdzKSBcdTAwMjYgS1ZNX0RJUlRZX0dGTl9GX1JFU0VUO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2RpcnR5X2dmbl9zZXRfaW52YWxpZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuK3tcbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmdmbi1cdTAwM2VmbGFncywgMCk7XG4rfVxuK1xuK3N0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpO1xuK1xuIC8qIGZvciB1c2UgaW4gdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKi9cbiBzdHJ1Y3QgcGFnZSAqa3ZtX2RpcnR5X3JpbmdfZ2V0X3BhZ2Uoc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLCB1MzIgb2Zmc2V0KTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzFlLi43ZWE2ZWQ3Y2UyMDNhYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMTY2OSw2ICsxNjY5LDkgQEAgYm9vbCBrdm1fYXJjaF92Y3B1X3ByZWVtcHRlZF9pbl9rZXJuZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV9hcmNoX3ByZV9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSk7XG4gdm9pZCBrdm1fYXJjaF9jcmVhdGVfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pO1xuIFxuK2ludCBrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLCBwaHlzX2FkZHJfdCBhZGRyLFxuK1x0XHRcdCAgICAgcGh5c19hZGRyX3QgZW5kKTtcbitcbiAjaWZuZGVmIF9fS1ZNX0hBVkVfQVJDSF9WTV9BTExPQ1xuIC8qXG4gICogQWxsIGFyY2hpdGVjdHVyZXMgdGhhdCB3YW50IHRvIHVzZSB2emFsbG9jIGN1cnJlbnRseSBhbHNvXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vS2NvbmZpZyBiL3ZpcnQva3ZtL0tjb25maWdcbmluZGV4IDc5NDk3NmI4OGM2Zjk3Li5mODc1N2I1Yjg0YjNlMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL0tjb25maWdcbisrKyBiL3ZpcnQva3ZtL0tjb25maWdcbkBAIC0yMCw2ICsyMCw5IEBAIGNvbmZpZyBIQVZFX0tWTV9JUlFfUk9VVElOR1xuIGNvbmZpZyBIQVZFX0tWTV9ESVJUWV9SSU5HXG4gICAgICAgIGJvb2xcbiBcbitjb25maWcgSEFWRV9LVk1fSFdfRElSVFlfQklUXG4rICAgICAgIGJvb2xcbitcbiAjIE9ubHkgc3Ryb25nbHkgb3JkZXJlZCBhcmNoaXRlY3R1cmVzIGNhbiBzZWxlY3QgdGhpcywgYXMgaXQgZG9lc24ndFxuICMgcHV0IGFueSBleHBsaWNpdCBjb25zdHJhaW50IG9uIHVzZXJzcGFjZSBvcmRlcmluZy4gVGhleSBjYW4gYWxzb1xuICMgc2VsZWN0IHRoZSBfQUNRX1JFTCB2ZXJzaW9uLlxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2RpcnR5X3JpbmcuYyBiL3ZpcnQva3ZtL2RpcnR5X3JpbmcuY1xuaW5kZXggNTcyYjg1NGVkZjc0MGQuLmZlNGU3ZGE2Y2M0YTZhIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZGlydHlfcmluZy5jXG4rKysgYi92aXJ0L2t2bS9kaXJ0eV9yaW5nLmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2RpcnR5X3JpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFwia3ZtX21tLmhcIlxuIFxuQEAgLTUwLDE4ICs1MSwzMCBAQCBzdGF0aWMgYm9vbCBrdm1fZGlydHlfcmluZ19mdWxsKHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZylcbiBcdHJldHVybiBrdm1fZGlydHlfcmluZ191c2VkKHJpbmcpIFx1MDAzZT0gcmluZy1cdTAwM2VzaXplO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fcmVzZXRfZGlydHlfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QsIHU2NCBvZmZzZXQsIHU2NCBtYXNrKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqXG4rX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KVxuIHtcbi1cdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XG4gXHRpbnQgYXNfaWQsIGlkO1xuIFxuIFx0YXNfaWQgPSBzbG90IFx1MDAzZVx1MDAzZSAxNjtcbiBcdGlkID0gKHUxNilzbG90O1xuIFxuIFx0aWYgKGFzX2lkIFx1MDAzZT0ga3ZtX2FyY2hfbnJfbWVtc2xvdF9hc19pZHMoa3ZtKSB8fCBpZCBcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUylcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBpZF90b19tZW1zbG90KF9fa3ZtX21lbXNsb3RzKGt2bSwgYXNfaWQpLCBpZCk7XG4rfVxuIFxuLVx0bWVtc2xvdCA9IGlkX3RvX21lbXNsb3QoX19rdm1fbWVtc2xvdHMoa3ZtLCBhc19pZCksIGlkKTtcbitzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICprdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KVxuK3tcbitcdHJldHVybiBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgc2xvdCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGt2bV9yZXNldF9kaXJ0eV9nZm4oc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdCwgdTY0IG9mZnNldCwgdTY0IG1hc2spXG4re1xuK1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbitcbitcdG1lbXNsb3QgPSBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgc2xvdCk7XG4gXG4gXHRpZiAoIW1lbXNsb3QgfHwgb2Zmc2V0IFx1MDAzZT0gbWVtc2xvdC1cdTAwM2VucGFnZXMgfHxcbiBcdCAgICBvZmZzZXQgKyBfX2ZscyhtYXNrKSBcdTAwM2U9IG1lbXNsb3QtXHUwMDNlbnBhZ2VzKVxuQEAgLTg4LDIxICsxMDEsMTEgQEAgaW50IGt2bV9kaXJ0eV9yaW5nX2FsbG9jKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZGlydHlfZ2ZuX3NldF9pbnZhbGlkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pXG4te1xuLVx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Z2ZuLVx1MDAzZWZsYWdzLCAwKTtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2RpcnRpZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcbiB7XG4gXHRnZm4tXHUwMDNlZmxhZ3MgPSBLVk1fRElSVFlfR0ZOX0ZfRElSVFk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fZGlydHlfZ2ZuX2hhcnZlc3RlZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuLXtcbi1cdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmdmbi1cdTAwM2VmbGFncykgXHUwMDI2IEtWTV9ESVJUWV9HRk5fRl9SRVNFVDtcbi19XG4tXG4gaW50IGt2bV9kaXJ0eV9yaW5nX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuIFx0XHRcdCBpbnQgKm5yX2VudHJpZXNfcmVzZXQpXG4ge1xuQEAgLTEzMSw2ICsxMzQsOSBAQCBpbnQga3ZtX2RpcnR5X3JpbmdfcmVzZXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG4gXHQgKi9cbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIFxuK1x0aWYgKGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoa3ZtLCByaW5nLCBucl9lbnRyaWVzX3Jlc2V0KSBcdTAwM2U9IDApXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0d2hpbGUgKGxpa2VseSgoKm5yX2VudHJpZXNfcmVzZXQpIFx1MDAzYyBJTlRfTUFYKSkge1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLmEyNWI4OTAyY2RmYzE3IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTY1LDYgKzY1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMva3ZtLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fZGlydHlfcmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gXG4gXG4gLyogV29yc3QgY2FzZSBidWZmZXIgc2l6ZSBuZWVkZWQgZm9yIGhvbGRpbmcgYW4gaW50ZWdlci4gKi9cbkBAIC0yMjYyLDYgKzIyNjMsMTAgQEAgc3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcbiBcdFx0ZGlydHlfYml0bWFwX2J1ZmZlciA9IGt2bV9zZWNvbmRfZGlydHlfYml0bWFwKG1lbXNsb3QpO1xuIFx0XHRtZW1zZXQoZGlydHlfYml0bWFwX2J1ZmZlciwgMCwgbik7XG4gXG4rXHRcdGlmIChrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoa3ZtLCBtZW1zbG90LCBOVUxMLFxuK1x0XHRcdFx0XHQgICAgIGRpcnR5X2JpdG1hcF9idWZmZXIsIFx1MDAyNmZsdXNoKSBcdTAwM2U9IDApXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4gXHRcdEtWTV9NTVVfTE9DSyhrdm0pO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuIC8gc2l6ZW9mKGxvbmcpOyBpKyspIHtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIG1hc2s7XG5AQCAtMjI4MSw2ICsyMjg2LDcgQEAgc3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcbiBcdFx0S1ZNX01NVV9VTkxPQ0soa3ZtKTtcbiBcdH1cbiBcbitvdXQ6XG4gXHRpZiAoZmx1c2gpXG4gXHRcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KGt2bSwgbWVtc2xvdCk7XG4gXG5AQCAtMjM3Myw2ICsyMzc5LDEwIEBAIHN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihkaXJ0eV9iaXRtYXBfYnVmZmVyLCBsb2ctXHUwMDNlZGlydHlfYml0bWFwLCBuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4rXHRpZiAoa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKGt2bSwgbWVtc2xvdCwgbG9nLCBkaXJ0eV9iaXRtYXBfYnVmZmVyLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZmbHVzaCkgXHUwMDNlPSAwKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdEtWTV9NTVVfTE9DSyhrdm0pO1xuIFx0Zm9yIChvZmZzZXQgPSBsb2ctXHUwMDNlZmlyc3RfcGFnZSwgaSA9IG9mZnNldCAvIEJJVFNfUEVSX0xPTkcsXG4gXHRcdCBuID0gRElWX1JPVU5EX1VQKGxvZy1cdTAwM2VudW1fcGFnZXMsIEJJVFNfUEVSX0xPTkcpOyBuLS07XG5AQCAtMjM5MiwxMiArMjQwMiwxMyBAQCBzdGF0aWMgaW50IGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCovXG4gXHRcdGlmIChtYXNrKSB7XG4gXHRcdFx0Zmx1c2ggPSB0cnVlO1xuK1xuIFx0XHRcdGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChrdm0sIG1lbXNsb3QsXG4gXHRcdFx0XHRcdFx0XHRcdG9mZnNldCwgbWFzayk7XG4gXHRcdH1cbiBcdH1cbiBcdEtWTV9NTVVfVU5MT0NLKGt2bSk7XG4tXG4rb3V0OlxuIFx0aWYgKGZsdXNoKVxuIFx0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnNfbWVtc2xvdChrdm0sIG1lbXNsb3QpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDA6NTUuNjA0NTY2MjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3OTE4ODI0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEFSTTY0IEtWTSBIYXJkd2FyZSBEaXJ0eSBCaXQgQ2xlYW5pbmcgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBuZXcgcGF0Y2ggaW50cm9kdWNpbmcgSGFyZHdhcmUgQXNzaXN0ZWQgQ2xlYW4gRGlydHkgQml0IFN1cHBvcnQgKEhBQ0RCUykgZm9yIEFSTTY0IEtWTS4gSXQncyBjbGVhcmx5IGFkZGluZyB0aGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGhhcmR3YXJlLWFzc2lzdGVkIGRpcnR5IGJpdCB0cmFja2luZyAoSERCU1MpIGFuZCBjbGVhbmluZyAoSEFDREJTKSwgYW5kIGl0IGxvb2tzIGZ1bmN0aW9uYWwuIFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBkZWZpbml0ZWx5IGZ1enppbmcgdG8gZW5zdXJlIHJvYnVzdG5lc3MuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgaW50cm9kdWNpbmcgYSBoYW5kZnVsIG9mIG5ldyBmaWxlcywgYGFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jYCwgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaGAsIHdoaWNoIGFyZSBhbGwgc3RhbmRhcmQgZm9yIGZlYXR1cmUgYWRkaXRpb25zLiBUaGVuIHdlIGhhdmUgbW9kaWZpY2F0aW9ucyBpbiBleGlzdGluZyBmaWxlcyB0aGF0IGluY2x1ZGUgYGFyY2gvYXJtNjQva3ZtL2FybS5jYCwgYGFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNgLCBgYXJjaC9hcm02NC9rdm0vbW11LmNgLCBgdmlydC9rdm0vZGlydHlfcmluZy5jYCwgYW5kIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gTWFrZXMgc2Vuc2UsIHRoZXkgbmVlZCB0byBob29rIGludG8gdGhlIGV4aXN0aW5nIGt2bSBhcmNoaXRlY3R1cmUuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgZnVuY3Rpb25zLiBJIHNlZSBhIGNvcmUgc2V0IG9mIGZ1bmN0aW9ucyBpbiBgYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNgIHRoYXQgYXJlIHRoZSBoZWFydCBvZiB0aGlzOiBgaGFjZGJzX3N0YXJ0YCwgYGhhY2Ric19zdG9wYCwgYGRpcnR5X2JpdF9jbGVhcmAsIGBoZGJzc190b19iaXRtYXBgLCBgbWFza190b19oZGJzc2AsIGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBgaGFjZGJzaXJxX2hhbmRsZXJgLCBga3ZtX2hhY2Ric19jcHVfdXBgLCBga3ZtX2hhY2Ric19jcHVfZG93bmAsIGBoYWNkYnNfYWNwaV9nZXRfaXJxYCwgYW5kIGBrdm1faGFjZGJzX2luaXRgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzLCB0aGUgc2V0dXAsIGFuZCB0aGUgY29udHJvbCBmdW5jdGlvbnMuXG5cblRoZSBvdGhlciBtb2RpZmllZCBmaWxlcyBsb29rIGxpa2Ugc3VwcG9ydCBmdW5jdGlvbnM6XG5cbiogICBgdmlydC9rdm0vZGlydHlfcmluZy5jYDogIGBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YCBhbmQgYGt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YC4gIFRoZXNlIGhhbmRsZSBtZW1zbG90IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBkaXJ0eSByaW5nLlxuKiAgIGBhcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jYDogYHN0YWdlMl9zZXRfcHJvdF9hdHRyYCwgYGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtc2AsIGFuZCBgX19rdm1fcGd0YWJsZV9zdGFnZTJfaW5pdGAuIFRoaXMgaXMgZGVhbGluZyB3aXRoIHRoZSBwYWdlIHRhYmxlIG9wZXJhdGlvbnMgYW5kIHRoZSBuZXcgcGVybWlzc2lvbnMuXG4qICAgYGFyY2gvYXJtNjQva3ZtL21tdS5jYDogYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AgYW5kIGBrdm1faW5pdF9zdGFnZTJfbW11YC4gVGhpcyBzZWVtcyByZWxhdGVkIHRvIHRoZSBNTVUgYW5kIHBvdGVudGlhbGx5IHRoZSBoYW5kbGluZyBvZiBsYXJnZSBwYWdlcyBhbmQgc3RhZ2UyIE1NVSBpbml0aWFsaXphdGlvbiB3aXRoIHRoZSBuZXcgSERCU1MvSEFDREJTIGZ1bmN0aW9uYWxpdHkuXG4qICAgYHZpcnQva3ZtL2t2bV9tYWluLmNgOiBga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdGAgYW5kIGBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3RgLiBUaGVzZSBmdW5jdGlvbnMgc2VlbSB0byBjb250cm9sIHRoZSBhY2Nlc3Mgb3IgcGVybWlzc2lvbnMgZm9yIHRoZSBkaXJ0eSBsb2cuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBjb25maWd1cmF0aW9uLiBUaGUgZGVwZW5kZW5jeSBvbiBgQUNQSWAgYmVpbmcgZW5hYmxlZCwgdGhyb3VnaCBgc2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJYCBpcyBpbXBvcnRhbnQuIEFsc28sIHRoZSBgaGFjZGJzX2FjcGlfZ2V0X2lycWAgZnVuY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1c2luZyBgI2lmZGVmIENPTkZJR19BQ1BJYC4gU28gaWYgQUNQSSBpc24ndCBlbmFibGVkLCB0aGlzIG5ldyBkaXJ0eSBiaXQgZmVhdHVyZSB3b24ndCB3b3JrLiBXZSBuZWVkIEFDUEkgc3VwcG9ydCBlbmFibGVkLCBhbmQgS1ZNIG9mIGNvdXJzZS4gVGltZSB0byBsb29rIGFyb3VuZCBmb3IgaG93IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpcyB1c2VkIGVsc2V3aGVyZSwgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM3NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjA2LjM5NjQ1MDY1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI3MTkzMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBVkVfS1ZNX0hXX0RJUlRZX0JJVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM2LVxcdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozNzpcXHRzZWxlY3QgSEFWRV9LVk1fSFdfRElSVFlfQklUIGlmIEFDUElcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaC05LVxcbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oOjEwOiNpZm5kZWYgQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVFxcbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oLTExLVxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0Lmg9MjE9c3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaC0yNy1cXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaDoyODojZWxzZSAvKiBDT05GSUdfSEFWRV9LVk1fSFdfRElSVFlfQklUICovXFxuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgtMjktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaC0zMS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaDozMjojZW5kaWYgLyogQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVCAqL1xcbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oLTMzLVxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz0yMD1jb25maWcgSEFWRV9LVk1fRElSVFlfUklOR1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0yMi1cXG52aXJ0L2t2bS9LY29uZmlnOjIzOmNvbmZpZyBIQVZFX0tWTV9IV19ESVJUWV9CSVRcXG52aXJ0L2t2bS9LY29uZmlnLTI0LSAgICAgICBib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjA5LjUyMzY1Mjg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMxNDQ2NjE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIEhhcmR3YXJlIERpcnR5IEJpdCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgSEFWRV9LVk1fSFdfRElSVFlfQklUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBhIGhpZGRlbiBib29sLCBzZWxlY3RlZCBieSB0aGUgYEtWTWAgbW9kdWxlLCBhbmQgaXQncyBjb25kaXRpb25hbCBvbiBgQUNQSWAgYmVpbmcgZW5hYmxlZC4gUmlnaHQgYXdheSwgSSBzZWUgd2UgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgS1ZNYCBhbmQgYEFDUElgIGFyZSBpbmNsdWRlZCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vIGJyYWluZXIuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBoZXJlIHRvIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aC4gSSdtIGZvY3VzaW5nIG9uOlxuXG4qICAgYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYFxuKiAgIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgXG4qICAgYGRpcnR5X2JpdF9jbGVhcmBcbiogICBgaGFjZGJzX3N0YXJ0YFxuKiAgIGBoYWNkYnNfc3RvcGBcbiogICBgaGFjZGJzaXJxX2hhbmRsZXJgXG4qICAgYGt2bV9oYWNkYnNfaW5pdGBcbiogICBga3ZtX2hhY2Ric19jcHVfdXBgXG4qICAgYGt2bV9oYWNkYnNfY3B1X2Rvd25gXG4qICAgYGhkYnNzX3RvX2JpdG1hcGBcbiogICBgbWFza190b19oZGJzc2BcbiogICBgX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGBcbiogICBga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgXG5cbkFscmlnaHQsIGxldCdzIHF1aWNrbHkgY2xhc3NpZnkgdGhlc2UgZm9yIHNjb3BlLiBDb25maXJtZWQsIGBkaXJ0eV9iaXRfY2xlYXJgIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBgaGFjZGJzX3N0YXJ0YCBhbmQgYGhhY2Ric19zdG9wYCBhcmUgc3RhdGljIHRvby4gYGhkYnNzX3RvX2JpdG1hcGAgYW5kIGBtYXNrX3RvX2hkYnNzYCBhcmUgc3RhdGljIGlubGluZSwgZ29vZC4gYGhhY2Ric2lycV9oYW5kbGVyYCBpcyBzdGF0aWMgYXMgd2VsbC4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBnbG9iYWwgb3IgZXhwb3J0ZWQgb25lcyBhcmU6IGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBga3ZtX2hhY2Ric19pbml0YCwgYGt2bV9oYWNkYnNfY3B1X3VwYCwgYGt2bV9oYWNkYnNfY3B1X2Rvd25gLCBhbmQgYGt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YC4gYF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgIGlzIHN0YXRpYyBpbmxpbmUuXG5cbkZpbmFsbHksIEkgc2hvdWxkIHRha2UgYSBwZWVrIGF0IGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBlbHNlIHJlbGV2YW50IHRoZXJlLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MzAsIk91dHB1dFRva2VucyI6NjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6MTYuODM4MTIyNTY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDgzODY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpfQS1aMC05XSsgKStbYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM9MjY9c3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBpbnQgaGFjZGJzaXJxID0gLTE7XFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjctXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6Mjg6c3RhdGljIHZvaWQgaGFjZGJzX3N0YXJ0KHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjkte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtNTEtXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6NTI6c3RhdGljIGludCBoYWNkYnNfc3RvcCh2b2lkKVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTUzLXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTc0LSAqL1xcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjc1OnN0YXRpYyBpbnQgZGlydHlfYml0X2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpod19lbnRyaWVzLCBpbnQgc2l6ZSlcXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy03Ni17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xMDctXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MTA4OnN0YXRpYyBpbmxpbmUgdm9pZCBoZGJzc190b19iaXRtYXAodTY0ICpoZGJzc19hcnJheSwgaW50IHN0YXJ0LCBpbnQgZW5kLFxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTEwOS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpkaXJ0eV9iaXRtYXAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xMjktXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MTMwOnN0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMTMxLVxcdFxcdFxcdFxcdHU2NCB0dHdsLCBpbnQgaWR4LCBpbnQgZW50cmllc19zeilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTE0OC1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzoxNDk6aW50IF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xNTAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0yNTgtXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MjU5OmludCBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjYwLVxcdFxcdFxcdFxcdGludCAqbnJfZW50cmllc19yZXNldClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTMyNC1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzozMjU6c3RhdGljIGlycXJldHVybl90IGhhY2Ric2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnBjcHUpXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzI2LXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM1MS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzozNTI6dm9pZCBrdm1faGFjZGJzX2NwdV91cCh2b2lkKVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM1My17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNjAtXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MzYxOnZvaWQga3ZtX2hhY2Ric19jcHVfZG93bih2b2lkKVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM2Mi17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNzAtI2lmZGVmIENPTkZJR19BQ1BJXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MzcxOnN0YXRpYyBpbnQgX19pbml0IGhhY2Ric19hY3BpX2dldF9pcnEodm9pZClcXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNzIte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzk0LVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjM5NTp2b2lkIF9faW5pdCBrdm1faGFjZGJzX2luaXQodm9pZClcXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zOTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0MToxNi45NDg5NjY3OTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODg0MzEwMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBLVk0gRGlydHkgTG9nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgS1ZNIGRpcnR5IGxvZyBpbXBsZW1lbnRhdGlvbiBhbmQgZmlndXJlIG91dCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSBoYW5kZnVsIG9mIGZ1bmN0aW9ucyB0aGF0IGxvb2sgaW1wb3J0YW50OiBgX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXJgLCBgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyYCwgYGRpcnR5X2JpdF9jbGVhcmAsIHRob3NlIHNlZW0gb2J2aW91cyBmb3IgY2xlYXJpbmcgYW5kIG1hbmFnaW5nIHRoZSBkaXJ0eSBsb2cuIFRoZW4gdGhlcmUncyBgaGFjZGJzX3N0YXJ0YCwgYGhhY2Ric19zdG9wYCwgYW5kIGBoYWNkYnNpcnFfaGFuZGxlcmAsIHdoaWNoIHNlZW0gcmVsYXRlZCB0byB0aGUgaGFyZHdhcmUtYXNzaXN0ZWQgZGlydHkgYml0IHRyYWNraW5nLCB3aGljaCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEFuZCBvZiBjb3Vyc2UsIHRoZSBjb252ZXJzaW9ucyBiZXR3ZWVuIGRpcnR5IGJpdG1hcHMgYW5kIGhhcmR3YXJlIGRpcnR5IGJpdCBzdHJ1Y3R1cmVzOiBgaGRic3NfdG9fYml0bWFwYCwgYG1hc2tfdG9faGRic3NgLiBUaG9zZSBhcmUgZXNzZW50aWFsLiBGaW5hbGx5LCBJIHNlZSB0aGUgZnVuY3Rpb25zIGBrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgYW5kIGBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YC4gV2FpdCBhIHNlY29uZOKApiBpc24ndCBgX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgZGVjbGFyZWQgYXMgc3RhdGljIGlubGluZT8gVGhhdCBtaWdodCBtYWtlIGl0IGEgbGl0dGxlIGxlc3MgdXNlZnVsIGFzIGEgc3ltYm9sIHRvIHRyYWNrIGRpcmVjdGx5LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgaW5saW5pbmcgaXMgaGFuZGxlZCBieSB0aGUgY29tcGlsZXIuIEJ1dCwgYGt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YCBpcyBnbG9iYWwsIHNvIEkgdGhpbmsgdGhhdCBpcyBzdGlsbCBzYWZlLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHZpcnQva3ZtL2RpcnR5X3JpbmcuY2AgdG8gY29uZmlybSB3aGVyZSBga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCBpcyB1c2VkLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6MjMuODMzMjc4NzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3NTQ5NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vZGlydHlfcmluZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2RpcnR5X3JpbmcuYz01ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKlxcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo1NTpfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpXFxudmlydC9rdm0vZGlydHlfcmluZy5jLTU2LXtcXG4tLVxcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy02Ny1cXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmM6Njg6c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdClcXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtNjkte1xcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo3MDpcXHRyZXR1cm4gX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIHNsb3QpO1xcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy03MS19XFxuLS1cXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmM9NzM9c3RhdGljIHZvaWQga3ZtX3Jlc2V0X2RpcnR5X2dmbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90LCB1NjQgb2Zmc2V0LCB1NjQgbWFzaylcXG4tLVxcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy03Ni1cXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmM6Nzc6XFx0bWVtc2xvdCA9IF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoa3ZtLCBzbG90KTtcXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtNzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjIzLjkxMjAzODY3MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2ODgyNjI3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEFSTTY0IEtWTSBTdGFnZSAyIFBhZ2UgVGFibGUgUHJvdGVjdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBjb3JlIG9mIGhvdyBzdGFnZSAyIHBhZ2UgdGFibGUgcGVybWlzc2lvbnMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBBUk02NCBLVk0gaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIGBhcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGZvciBzZXR0aW5nIGFuZCByZWxheGluZyBwcm90ZWN0aW9uIGF0dHJpYnV0ZXMuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHN0YWdlMl9zZXRfcHJvdF9hdHRyYC4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBndWVzdCdzIHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIGFuZCBlbmZvcmNlZCBhdCB0aGUgaHlwZXJ2aXNvciBsZXZlbC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoaXMgZnVuY3Rpb24gbWFuaXB1bGF0ZXMgdGhlIHBhZ2UgdGFibGUgZW50cmllcywgd2hhdCBmbGFncyBhcmUgYmVpbmcgc2V0IChlLmcuLCByZWFkLCB3cml0ZSwgZXhlY3V0ZSBwZXJtaXNzaW9ucywgYW5kIHBvc3NpYmx5IGNhY2hlIGF0dHJpYnV0ZXMpLiBVbmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBoZXJlIGlzIHZpdGFsIGZvciBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UuXG5cbkZvbGxvd2luZyB0aGF0LCBJJ2xsIGV4YW1pbmUgYGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtc2AuIFRoZSBuYW1lIGFsb25lIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB3ZWFrZW5pbmcgcGVybWlzc2lvbnMsIHBlcmhhcHMgdG8gZW5hYmxlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBndWVzdCBvciB0byBhdm9pZCBpc3N1ZXMgd2hlbiB0cmFuc2xhdGluZyBvciBtYW5pcHVsYXRpbmcgZGF0YS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoZSByZWxheGF0aW9uIG9jY3Vycy4gQXJlIHRoZXJlIHNwZWNpZmljIG1lbW9yeSByZWdpb25zIG9yIHVuZGVyIHBhcnRpY3VsYXIgY29uZGl0aW9ucyB3aGVyZSB0aGlzIGhhcHBlbnM/IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgb3IgdHJhZGUtb2Zmcz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHJlbGF4aW5nIHByb3RlY3Rpb25zIGludHJvZHVjZXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cbk15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGV4cGxvcmUgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgY29kZSBiYXNlLCBidXQgdGhpcyBpcyB3aGVyZSBJJ2xsIGdldCBteSBpbml0aWFsIGluc2lnaHQuIFRoaXMgd2lsbCBiZSBhbiBpbXBvcnRhbnQgcGxhY2UgdG8gc3RhcnQgdW5kZXJzdGFuZGluZyBob3cgZ3Vlc3QgdmlydHVhbCBtZW1vcnkgaXMgbWFuYWdlZCBhbmQgc2VjdXJlZCB3aXRoaW4gdGhlIEFSTTY0IEtWTSBoeXBlcnZpc29yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDUxMywiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjI5LjYwMDMwMzE3NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5NTc4MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhZ2UyX3NldF9wcm90X2F0dHJ8a3ZtX3BndGFibGVfc3RhZ2UyX3JlbGF4X3Blcm1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYz02Nzc9c3RhdGljIGludCBzdGFnZTJfc2V0X3huX2F0dHIoZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QsIGt2bV9wdGVfdCAqYXR0cilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtNzAxLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM6NzAyOnN0YXRpYyBpbnQgc3RhZ2UyX3NldF9wcm90X2F0dHIoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIGVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90LFxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtNzAzLVxcdFxcdFxcdFxcdGt2bV9wdGVfdCAqcHRlcClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9MTA5OD1pbnQga3ZtX3BndGFibGVfc3RhZ2UyX21hcChzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsIHU2NCBzaXplLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYy0xMTE5LVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM6MTEyMDpcXHRyZXQgPSBzdGFnZTJfc2V0X3Byb3RfYXR0cihwZ3QsIHByb3QsIFxcdTAwMjZtYXBfZGF0YS5hdHRyKTtcXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jLTExMjEtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9MTM0NT1ib29sIGt2bV9wZ3RhYmxlX3N0YWdlMl90ZXN0X2NsZWFyX3lvdW5nKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCB1NjQgYWRkcixcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtMTM2MC1cXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jOjEzNjE6aW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsXFxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYy0xMzYyLVxcdFxcdFxcdFxcdCAgIGVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90LCBlbnVtIGt2bV9wZ3RhYmxlX3dhbGtfZmxhZ3MgZmxhZ3MpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jPTE0MjM9a3ZtX3B0ZV90ICprdm1fcGd0YWJsZV9zdGFnZTJfY3JlYXRlX3VubGlua2VkKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYy0xNDU3LVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM6MTQ1ODpcXHRyZXQgPSBzdGFnZTJfc2V0X3Byb3RfYXR0cihwZ3QsIHByb3QsIFxcdTAwMjZtYXBfZGF0YS5hdHRyKTtcXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jLTE0NTktXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6MjkuNjY2MjY1NzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4MjU5OTg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipLVk0gUGVybWlzc2lvbiBSZWxheGF0aW9uOiBBIExvZ2ljYWwgU3RhcnRpbmcgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIHRoaXMuLi4gYGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtc2AgZmVlbHMgbGlrZSBhIHN0cm9uZyBjb250ZW5kZXIgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBJdCdzIGluIHRoZSByZWFsbSBvZiBwZXJtaXNzaW9ucywgYW5kIHdlJ3JlIGxvb2tpbmcgdG8gcmVsYXggc29tZXRoaW5nLCByaWdodD8gTWFrZXMgc2Vuc2UgdG8gYmVnaW4gd2l0aCBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBoaW50cyBhdCB0aGF0LlxuXG5Ob3csIHdoZXJlIHdhcyB0aGF0IGh1Z2UgcGFnZSBzcGxpdCBjb2RlIGFnYWluPyBBaCwgcmlnaHQhIFdlIHNob3VsZCBjaGVjayBgYXJjaC9hcm02NC9rdm0vbW11LmNgLCBpbiBwYXJ0aWN1bGFyIGZvciB0aGUgZnVuY3Rpb24gYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIHN0dWZmIGNvbmNlcm5pbmcgaHVnZSBwYWdlcyBpcy4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIHBvdGVudGlhbCBjaGFuZ2VzLiBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjQwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6MzQuODQ4ODY4MTEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3NzEwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL21tdS5jPTEwNj1zdGF0aWMgYm9vbCBuZWVkX3NwbGl0X21lbWNhY2hlX3RvcHVwX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE5LVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEyMDppbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkcixcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMjEtXFx0XFx0XFx0ICAgICBwaHlzX2FkZHJfdCBlbmQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMjk5PXN0YXRpYyB2b2lkIGt2bV9tbXVfc3BsaXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTMxMy1cXHR3cml0ZV9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMzE0OlxcdGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhrdm0sIHN0YXJ0LCBlbmQpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEzMTUtXFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTEzMjk9dm9pZCBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTM0OS1cXHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMzUwOlxcdFxcdGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhrdm0sIHN0YXJ0LCBlbmQpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEzNTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjM1LjAxNjY0NDM4N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk3NDI0ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgUG90ZW50aWFsIFN0cmF0ZWd5KipcblxuUmlnaHQsIHRoaW5raW5nIGFib3V0IHRoaXMuLi4gYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AgaXMgbG9va2luZyBsaWtlIGEgc29saWQgbGVhZC4gTXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgbGVhbmluZyB0b3dhcmRzIGl0LiBJJ20gc3RhcnRpbmcgdG8gdmlzdWFsaXplIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHBvc3NpYmlsaXRpZXMgd2l0aGluIHRoYXQgY29udGV4dC5cblxuTm93LCB3aGVyZSBkbyBJIG5lZWQgdG8gZ28gdG8gc3RhcnQgZGlnZ2luZyBpbj8gTGV0IG1lIHRha2UgYSBsb29rIGF0IGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRpcnR5IGxvZyBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgaW50ZXJhY3Qgd2l0aCB3aGF0IEknbSBsb29raW5nIGF0LiBJJ2xsIGZvY3VzIG9uIGBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0YCBhbmQgYGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdGAgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBkaXJ0eSBwYWdlIHRyYWNraW5nLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBzcGxpdHRpbmcgaHVnZSBwYWdlcyBpbXBhY3RzIHRob3NlIGZ1bmN0aW9ucywgYW5kIHZpY2UtdmVyc2EuIFVuZGVyc3RhbmRpbmcgdGhlIGxvY2tpbmcgYW5kIHRoZSBnZW5lcmFsIGZsb3cgaXMgY3JpdGljYWwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNzUsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0MTozOS4wMTQxMDU0ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDkyOTc2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0fGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjE5OD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dldF9kaXJ0eV9sb2cpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMjAxLS8qKlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjIwMjogKiBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0IC0gZ2V0IGEgc25hcHNob3Qgb2YgZGlydHkgcGFnZXNcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIyMDMtICpcXHRhbmQgcmVlbmFibGUgZGlydHkgcGFnZSB0cmFja2luZyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcGFnZXMuXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIyMjEtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyMjIyOnN0YXRpYyBpbnQga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfbG9nICpsb2cpXFxudmlydC9rdm0va3ZtX21haW4uYy0yMjIzLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjI1Ny1cXHRcXHQgKiBrdm1fZ2V0X2RpcnR5X2xvZywgYnV0IGhvcGVmdWxseSBhbGwgYXJjaGl0ZWN0dXJlXFxudmlydC9rdm0va3ZtX21haW4uYzoyMjU4OlxcdFxcdCAqIHRyYW5zaXRpb24gdG8ga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdCBhbmQga3ZtX2dldF9kaXJ0eV9sb2dcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIyNTktXFx0XFx0ICogY2FuIGJlIGVsaW1pbmF0ZWQuXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMDQtICogU3RlcHMgMS00IGJlbG93IHByb3ZpZGUgZ2VuZXJhbCBvdmVydmlldyBvZiBkaXJ0eSBwYWdlIGxvZ2dpbmcuIFNlZVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMwNTogKiBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KCkgZnVuY3Rpb24gZGVzY3JpcHRpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy5cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMDYtICpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIzMDc6ICogV2UgY2FsbCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KCkgdG8gaGFuZGxlIHN0ZXBzIDEtMywgdXBvbiByZXR1cm4gd2VcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMDgtICogYWx3YXlzIGZsdXNoIHRoZSBUTEIgKHN0ZXAgNCkgZXZlbiBpZiBwcmV2aW91cyBzdGVwIGZhaWxlZCAgYW5kIHRoZSBkaXJ0eVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yMzE4PXN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMzI0LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMyNTpcXHRyID0ga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdChrdm0sIGxvZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yMzI2LVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMzMxLS8qKlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMzMjogKiBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3QgLSBjbGVhciBkaXJ0eSBiaXRzIGluIHRoZSBiaXRtYXBcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzMtICpcXHRhbmQgcmVlbmFibGUgZGlydHkgcGFnZSB0cmFja2luZyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcGFnZXMuXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzYtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyMzM3OnN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzgtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2cpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI0MTg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjQyNC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI0MjU6XFx0ciA9IGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdChrdm0sIGxvZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yNDI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0MTozOS4xNDUwNDExMTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMjA4NDY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIERpcnR5IExvZyBhbmQgUmluZyBSZXNldCBNZWNoYW5pc21zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkaXJ0eSBsb2cgYW5kIHJpbmcgcmVzZXQgaW1wbGVtZW50YXRpb25zIHdpdGhpbiBLVk0uIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdGAgYW5kIGBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3RgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGhlbHBlciBmdW5jdGlvbnMuIExldCBtZSB0aGluaywgc28gdGhlc2UgYXJlIGhlbHBlciBmdW5jdGlvbnMuIEFoLCBhbmQgaGVyZSBhcmUgdGhlIHJlbGV2YW50IGlvY3RsIGhhbmRsZXJzIOKAkyBga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2dgIGFuZCBga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZ2AuIFRoZXkgbGlrZWx5IHdyYXAgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBhbHNvIHNlZSB0aGF0IGBrdm1fZGlydHlfcmluZ19yZXNldGAgaXMgYW4gaW9jdGwgaGFuZGxlciBhcyB3ZWxsLiBSaWdodCwgSSBuZWVkIHRvIHNlZSBob3cgYGt2bV9kaXJ0eV9yaW5nX3Jlc2V0YCBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgYGt2bV9kaXJ0eV9yaW5nX3Jlc2V0YCBpcyBkZWZpbmVkIGluIGB2aXJ0L2t2bS9kaXJ0eV9yaW5nLmNgLCBzbyBJIHNob3VsZCBzdGFydCB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSByZXNldCBwcm9jZWR1cmUuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBob3cgaXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjEyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjQzLjI2NzEyODI0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI2NTM0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2RpcnR5X3JpbmdfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vZGlydHlfcmluZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2RpcnR5X3JpbmcuYz0xMDQ9c3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2RpcnRpZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcXG4tLVxcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy0xMDgtXFxudmlydC9rdm0vZGlydHlfcmluZy5jOjEwOTppbnQga3ZtX2RpcnR5X3JpbmdfcmVzZXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXFxudmlydC9rdm0vZGlydHlfcmluZy5jLTExMC1cXHRcXHRcXHQgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxcbi0tXFxudmlydC9rdm0vZGlydHlfcmluZy5jLTIxOS1cXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmM6MjIwOlxcdHRyYWNlX2t2bV9kaXJ0eV9yaW5nX3Jlc2V0KHJpbmcpO1xcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy0yMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjQzLjM5OTc4OTg5N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjIxMTQwNDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlydHkgTG9nIGFuZCBSZWxhdGVkIEtWTSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgZGlydHkgbG9nIG1lY2hhbmlzbSB3aXRoaW4gS1ZNLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgaW52b2x2ZWQ6IGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzYCwgYGt2bV9kaXJ0eV9yaW5nX3Jlc2V0YCwgYGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nYCwgYW5kIGBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nYCwgYW5kIGBrdm1fcGd0YWJsZV9zdGFnZTJfcmVsYXhfcGVybXNgLiBUaGUga2V5IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRpcnR5IGxvZyBpcyBtYW5hZ2VkIGFuZCBjbGVhcmVkLlxuXG5JIGhhZCB0byBkb3VibGUtY2hlY2sgYGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nYCBhbmQgYGt2bV92bV9pb2N0bF9jbGVhcl9kaXJ0eV9sb2dgLCBzaW5jZSB0aG9zZSBJT0NUTHMgY2FuIGJlIHF1aXRlIHRyaWNreS4gQWgsIHJpZ2h0LCB0aGUgYWN0dWFsIG1vZGlmaWNhdGlvbnMgYXJlIGhpdHRpbmcgdGhlICpwcm90ZWN0KiB2ZXJzaW9uczogYGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3RgIGFuZCBga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0YC4gTm8gcHJvYmxlbTsgZXZlbiB0aG91Z2ggdGhvc2UgYXJlIHN0YXRpYywgdGhleSBhcmUgcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aCwgc28gSSBuZWVkIHRvIGluY2x1ZGUgdGhlbSBpbiBteSBhbmFseXNpcy5cblxuTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AuIEkgcmVjYWxsIHRoYXQgYGRpcnR5X2JpdF9jbGVhcmAgaXMgc3RhdGljLCBidXQgaXQncyAqdGhlKiBjb3JlIGNsZWFyaW5nIGxvZ2ljLiBBbHNvLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBgaGFjZGJzX3N0YXJ0YCwgYGhhY2Ric19zdG9wYCwgYW5kIGBoYWNkYnNpcnFfaGFuZGxlcmAgYXMgdGhleSBhcmUgaW50ZWdyYWwgdG8gdGhlIGhhcmR3YXJlLWFzc2lzdGVkIGRpcnR5IGJpdCB0cmFja2luZyBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biBhIG1vcmUgcmVmaW5lZCBsaXN0LiBDb25zaWRlcmluZyB0aGUgY29yZSBvcGVyYXRpb25zLCBJJ2xsIGRlZmluaXRlbHkgaW5jbHVkZTogYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBkaXJ0eV9iaXRfY2xlYXJgLCBgaGFjZGJzaXJxX2hhbmRsZXJgLCBga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzYCwgYGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3RgLCBga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0YCwgYW5kIGBrdm1fZGlydHlfcmluZ19yZXNldGAuXG5cbkkgY2FuIHNlZSB0aGF0IG15IGluaXRpYWwgbGlzdCBjYW4gYmUgdHJpbW1lZCBhIGJpdC4gRm9jdXNpbmcgb24gdGhlIGNlbnRyYWwgbG9naWMsIEkgd2lsbCByZWZpbmUgaXQgdG86IGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBgZGlydHlfYml0X2NsZWFyYCwgYGhhY2Ric2lycV9oYW5kbGVyYCwgYW5kIGBrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXNgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIG9mIHN0YXRpYyBmdW5jdGlvbnMuIEl0J3MgcGVyZmVjdGx5IGZpbmUgdG8gaW5jbHVkZSB0aGVtIGJlY2F1c2UgdGhleSBhcmUgZXNzZW50aWFsIHRvIGhvdyB0aGUgZmVhdHVyZSBpcyBpbXBsZW1lbnRlZC4gQWxzbywgYGRpcnR5X2JpdF9jbGVhcmAgaXMgdW5pcXVlIHNvIGl0IGlzIHVubGlrZWx5IHRvIGhhdmUgYW55IG5hbWUgY29sbGlzaW9uLiBHb29kLiBCYWNrIHRvIGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AgdG8gc2VlIGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6NTIuNjIwOTMyMzM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ3ODE2MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpcnR5X2JpdF9jbGVhclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYz01Mj1zdGF0aWMgaW50IGhhY2Ric19zdG9wKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy03NC0gKi9cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzo3NTpzdGF0aWMgaW50IGRpcnR5X2JpdF9jbGVhcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtNzYte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM9MTQ5PWludCBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0yMTktXFx0XFx0XFx0aWYgKGlkeCBcXHUwMDNlPSBlbnRyaWVzX3N6KSB7XFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MjIwOlxcdFxcdFxcdFxcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGlkeCk7XFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjIxLVxcdFxcdFxcdFxcdCpmbHVzaCA9ICpmbHVzaCB8fCByZXQgXFx1MDAzZSAwO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjMyLVxcdGlmIChpZHggIT0gMCkge1xcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjIzMzpcXHRcXHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTIzNC1cXHRcXHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFxcdTAwM2UgMDtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jPTI1OT1pbnQgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzAwLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjMwMTpcXHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpKTtcXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zMDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjUzLjc2ODc1NDcyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTEwMDExNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBjbGVhciB0aGF0IHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHksIEkgYWJzb2x1dGVseSBuZWVkIGBLVk1gIGFuZCBgQUNQSWAgZW5hYmxlZC4gSSBzZWUgdGhhdCB0aGUgYEhBVkVfS1ZNX0hXX0RJUlRZX0JJVGAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCAqYnkqIGBLVk1gIGlmIGBBQ1BJYCBpcyBhbHNvIGNvbmZpZ3VyZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIHNvIHRob3NlIHR3byBhcmUgdGhlIGNvcmUgcmVxdWlyZW1lbnRzLlxuXG5Ob3csIEkgYWx3YXlzIGxpa2UgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYW55IG90aGVyIGltcGxpY2l0IGRlcGVuZGVuY2llcy4gQWgsIHJpZ2h0LCBvZiBjb3Vyc2UsIGBDT05GSUdfQVJNNjRgIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgaW1wbGllZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIEFuZCwgSSBzZWUgdGhhdCBgQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVGAgaXRzZWxmIGlzIGEgaGlkZGVuIGNvbmZpZywgc28gaXQncyBub3Qgc29tZXRoaW5nIEknbGwgYmUgZGlyZWN0bHkgc2V0dGluZy4gSSBzaG91bGQgbWFrZSBhIG5vdGUgb2YgdGhhdCBmb3Igd2hlbiBJIHNldCB1cCB0aGUgYnVpbGQuXG5cbk9rYXksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gvYXJtNjQva3ZtL0tjb25maWdgIGZpbGUgYWdhaW4sIG1ha2Ugc3VyZSBJIGRpZG4ndCBtaXNzIHNvbWV0aGluZy4gTGV0J3MgbWFrZSBzdXJlIEkgZGlkbid0IHNraXAgb3ZlciBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6NTguODc4NzY4NDI0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE4NTYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9LVk1fSFdfRElSVFlfQklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0yMD1tZW51Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zNi1cXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzc6XFx0c2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgU0NIRURfSU5GT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0MTo1OC45ODA2MzA2MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIzNDc5MTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0vQUNQSSBQYXRjaCBmb3IgQVJNNjQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG8gYEtWTWAgYW5kIGBBQ1BJYCBhcyB0aGUga2V5IHBsYXllcnMgaGVyZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgYXJlYSByaXBlIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IHRha2Vhd2F5IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBoYXJkd2FyZSBkaXJ0eSBiaXQgdHJhY2tpbmcgYW5kIGNsZWFuaW5nIChIREJTUyBhbmQgSEFDREJTLCByZXNwZWN0aXZlbHkpIHNwZWNpZmljYWxseSBmb3IgQVJNNjQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBUaGlzIG1lYW5zIHdlJ3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB0byBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGlydHkgbG9nZ2luZyBsb2dpYy4gQmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIHRoZXNlIG5ldyBpbnRlcnJ1cHQgaGFuZGxlcnMgYW5kIGlvY3RsIHBhdGhzLCBpdCBtZWFucyB0aGVyZSBhcmUgbmV3IHBvaW50cyBvZiBpbnRlcmFjdGlvbiBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGNvcmUgb2YgdGhlIGZ1enppbmcgdGFyZ2V0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBzZXZlcmFsIGZ1bmN0aW9uczogYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBkaXJ0eV9iaXRfY2xlYXJgLCBgaGFjZGJzaXJxX2hhbmRsZXJgLCBga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzYCwgYGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3RgLCBga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0YCBhbmQgYGt2bV9kaXJ0eV9yaW5nX3Jlc2V0YC4gVGhleSBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIGxvdy1sZXZlbCBkaXJ0eSBiaXQgbWFuYWdlbWVudC4gVGhleSBzaG91bGQgYmUgcHJpb3JpdGl6ZWQgZHVyaW5nIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBtYXJrZWQgYXMgXCJXb3J0aEZ1enppbmdcIiBiZWNhdXNlIHRoZSBtb2RpZmljYXRpb25zIGludHJvZHVjZSBuZXcsIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgaW50ZXJhY3QgY2xvc2VseSB3aXRoIGhhcmR3YXJlLiBUaGUgYEtWTWAgYW5kIGBBQ1BJYCBjb25maWdzIGFyZSBhY3RpdmF0ZWQsIGFuZCB0aGUgZW51bWVyYXRlZCBmdW5jdGlvbnMgd2lsbCBmb3JtIHRoZSBjb3JlIG9mIG15IGZ1enppbmcgY2FtcGFpZ25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ5OSwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDI6MDYuMjE1NDI0MzE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4MTA2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiQUNQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyXCIsXG4gICAgXCJfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJcIixcbiAgICBcImRpcnR5X2JpdF9jbGVhclwiLFxuICAgIFwiaGFjZGJzaXJxX2hhbmRsZXJcIixcbiAgICBcImt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc1wiLFxuICAgIFwia3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdFwiLFxuICAgIFwia3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0XCIsXG4gICAgXCJrdm1fZGlydHlfcmluZ19yZXNldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiQUNQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyXCIsXG4gICAgXCJfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJcIixcbiAgICBcImRpcnR5X2JpdF9jbGVhclwiLFxuICAgIFwiaGFjZGJzaXJxX2hhbmRsZXJcIixcbiAgICBcImt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc1wiLFxuICAgIFwia3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdFwiLFxuICAgIFwia3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0XCIsXG4gICAgXCJrdm1fZGlydHlfcmluZ19yZXNldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzbng[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 11:35:29 +0000 UTC FinishedAt: 2026-06-29 11:42:08 +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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "ACPI" ], "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": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "ACPI" ], "series_id": "4fb42990-363d-4513-a4dc-cab931d98fd5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "__kvm_arch_dirty_log_clear", "__kvm_arch_dirty_ring_clear", "dirty_bit_clear", "hacdbsirq_handler", "kvm_mmu_split_huge_pages", "kvm_get_dirty_log_protect", "kvm_clear_dirty_log_protect", "kvm_dirty_ring_reset" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtBQ1BJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXImIzM0OywKICAgICYjMzQ7X19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyJiMzNDssCiAgICAmIzM0O2RpcnR5X2JpdF9jbGVhciYjMzQ7LAogICAgJiMzNDtoYWNkYnNpcnFfaGFuZGxlciYjMzQ7LAogICAgJiMzNDtrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMmIzM0OywKICAgICYjMzQ7a3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdCYjMzQ7LAogICAgJiMzNDtrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3QmIzM0OywKICAgICYjMzQ7a3ZtX2RpcnR5X3JpbmdfcmVzZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBoYXJkd2FyZSBkaXJ0eSBiaXQgdHJhY2tpbmcgKEhEQlNTKSBhbmQgY2xlYW5pbmcgKEhBQ0RCUykgZm9yIEFSTTY0IEtWTS4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgbG9naWMsIGFkZGluZyBuZXcgaW9jdGwgcGF0aHMgYW5kIGludGVycnVwdCBoYW5kbGVycy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YzU4NjcxNzZmNzEwNDc2YjI4YjEzNmRiNWM4MzkzMWE3NWViZTg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTE6NDA6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaFxuaW5kZXggOGE1NGNhNmJhNjAyODIuLjg4MzMxNWU5ZDc5ZDk4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oXG5AQCAtNDUsNiAmIzQzOzQ1LDkgQEBcbiBcbiAjZGVmaW5lIEFDUElfTUFEVF9HSUNDX1RSQkUgIChvZmZzZXRvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0LCBcXFxuIFx0dHJiZV9pbnRlcnJ1cHQpICYjNDM7IHNpemVvZih1MTYpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1BJX01BRFRfR0lDQ19IQUNEQlNJUlEgIChvZmZzZXRvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0LCBcXFxuJiM0MztcdGhhY2Ric2lycV9nc2kpICYjNDM7IHNpemVvZih1MzIpKVxuIC8qXG4gICogQXJtwq4gRnVuY3Rpb25hbCBGaXhlZCBIYXJkd2FyZSBTcGVjaWZpY2F0aW9uIFZlcnNpb24gMS4yLlxuICAqIFRhYmxlIDI6IEFybSBBcmNoaXRlY3R1cmUgY29udGV4dCBsb3NzIGZsYWdzXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuaW5kZXggYTU3ODcwZmE5NmRiNWIuLjYyMGFlNGNkZGI3NjBhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG5AQCAtODYzLDYgJiM0Mzs4NjMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWZ0KHZvaWQpXG4gXHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQUZUKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGRic3Modm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19IREJTUyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQUNEQlMpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfbXBhbSh2b2lkKVxuIHtcbiBcdHJldHVybiBhbHRlcm5hdGl2ZV9oYXNfY2FwX3VubGlrZWx5KEFSTTY0X01QQU0pO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDc2YzEwOTkzN2Q4ZGFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oXG5AQCAtMCwwICYjNDM7MSw2NyBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxuJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXHUwMDNjbGVvLmJyYXNAYXJtLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19BUk02NF9LVk1fRElSVFlfQklUX0hfX1xuJiM0MzsjZGVmaW5lIF9fQVJNNjRfS1ZNX0RJUlRZX0JJVF9IX19cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGd0YWJsZS5oXHUwMDNlXG4mIzQzO1xuJiM0MztlbnVtIGhhY2Ric19zdGF0dXMge1xuJiM0MztcdEhBQ0RCU19PRkYsXG4mIzQzO1x0SEFDREJTX0lETEUsXG4mIzQzO1x0SEFDREJTX1JVTk5JTkcsXG4mIzQzO1x0SEFDREJTX0VSUk9SXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaGFjZGJzIHtcbiYjNDM7XHRlbnVtIGhhY2Ric19zdGF0dXMgc3RhdHVzO1xuJiM0MztcdGludCBzaXplO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7REVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBoYWNkYnMsIGhhY2Ric19wY3ApO1xuJiM0MztcbiYjNDM7dm9pZCBfX2luaXQga3ZtX2hhY2Ric19pbml0KHZvaWQpO1xuJiM0Mzt2b2lkIGt2bV9oYWNkYnNfY3B1X3VwKHZvaWQpO1xuJiM0Mzt2b2lkIGt2bV9oYWNkYnNfY3B1X2Rvd24odm9pZCk7XG4mIzQzO1xuJiM0MztpbnQgX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2csXG4mIzQzO1x0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsXG4mIzQzO1x0XHRcdCAgICAgICBib29sICpmbHVzaCk7XG4mIzQzO1xuJiM0MztpbnQgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuJiM0MztcdFx0XHRcdGludCAqbnJfZW50cmllc19yZXNldCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdGhpc19jcHVfcmVhZChoYWNkYnNfcGNwLnN0YXR1cykgPT0gSEFDREJTX0lETEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIChrdm0tXHUwMDNlYXJjaC5tbXUucGd0LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2csXG4mIzQzO1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsXG4mIzQzO1x0XHRcdFx0XHQgICBib29sICpmbHVzaClcbiYjNDM7e1xuJiM0MztcdGlmICgha3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKGt2bSwgbWVtc2xvdCwgbG9nLCBiaXRtYXAsIGZsdXNoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuJiM0MztcdFx0XHRcdFx0ICAgIGludCAqbnJfZW50cmllc19yZXNldClcbiYjNDM7e1xuJiM0MztcdGlmICgha3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChrdm0pKVxuJiM0MztcdFx0cmV0dXJuIC1FUEVSTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihrdm0sIHJpbmcsIG5yX2VudHJpZXNfcmVzZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19BUk02NF9LVk1fRElSVFlfQklUX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuaW5kZXggNDFhODY4NzkzOGViNmIuLjY0NmZmODhlMDI1ODNmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbkBAIC05Myw2ICYjNDM7OTMsOCBAQCB0eXBlZGVmIHU2NCBrdm1fcHRlX3Q7XG4gXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9YTlx0R0VOTUFTSyg1NCwgNTMpXG4gXG4mIzQzOyNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNXHRCSVQoNTEpXG4mIzQzO1xuICNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzFfR1BcdEJJVCg1MClcbiBcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX1MyX1BFUk1TXHQoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SIHwgXFxcbkBAIC0yNTMsNiAmIzQzOzI1NSw3IEBAIHN0cnVjdCBrdm1fcGd0YWJsZV9tbV9vcHMge1xuIGVudW0ga3ZtX3BndGFibGVfc3RhZ2UyX2ZsYWdzIHtcbiBcdEtWTV9QR1RBQkxFX1MyX0lETUFQXHRcdFx0PSBCSVQoMCksXG4gXHRLVk1fUEdUQUJMRV9TMl9BU19TMVx0XHRcdD0gQklUKDEpLFxuJiM0MztcdEtWTV9QR1RBQkxFX1MyX0RCTVx0XHRcdD0gQklUKDIpLFxuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uNjJmNTZiYmQwYTY1YzggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuQEAgLTUyMyw2ICYjNDM7NTIzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnIzW10gPSB7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnI0W10gPSB7XG4gXHRTX0FSTTY0X0ZUUl9CSVRTKEZUUl9ISURERU4sIEZUUl9TVFJJQ1QsIEZUUl9MT1dFUl9TQUZFLCBJRF9BQTY0TU1GUjRfRUwxX0UySDBfU0hJRlQsIDQsIDApLFxuIFx0QVJNNjRfRlRSX0JJVFMoRlRSX0hJRERFTiwgRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRNTUZSNF9FTDFfTlZfZnJhY19TSElGVCwgNCwgMCksXG4mIzQzO1x0QVJNNjRfRlRSX0JJVFMoRlRSX0hJRERFTiwgRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRNTUZSNF9FTDFfSEFDREJTX1NISUZULCA0LCAwKSxcbiBcdEFSTTY0X0ZUUl9FTkQsXG4gfTtcbiBcbkBAIC0yMTMxLDYgJiM0MzsyMTMyLDExIEBAIHN0YXRpYyBib29sIGh2aGVfcG9zc2libGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxuIFx0cmV0dXJuIGFybTY0X3Rlc3Rfc3dfZmVhdHVyZV9vdmVycmlkZShBUk02NF9TV19GRUFUVVJFX09WRVJSSURFX0hWSEUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgaGFzX3ZoZV9oZGJzcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBjb3BlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpIFx1MDAyNlx1MDAyNiBoYXNfY3B1aWRfZmVhdHVyZShlbnRyeSwgY29wZSk7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKVxuIHtcbiBcdC8qXG5AQCAtMjc2Niw2ICYjNDM7Mjc3MiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcbiBcdFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgREJNKVxuIFx0fSxcbiAjZW5kaWZcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGVzYyA9IFwmIzM0O0hhcmR3YXJlIGRpcnR5IGJpdCBDbGVhbmluZ1wmIzM0OyxcbiYjNDM7XHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxuJiM0MztcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQUNEQlMsXG4mIzQzO1x0XHQubWF0Y2hlcyA9IGhhc19jcHVpZF9mZWF0dXJlLFxuJiM0MztcdFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSNF9FTDEsIEhBQ0RCUywgSU1QKVxuJiM0MztcdH0sXG4gI2lmZGVmIENPTkZJR19BUk02NF9IQUZUXG4gXHR7XG4gXHRcdC5kZXNjID0gXCYjMzQ7SGFyZHdhcmUgbWFuYWdlZCBBY2Nlc3MgRmxhZyBmb3IgVGFibGUgRGVzY3JpcHRvcnNcJiMzNDssXG5AQCAtMjc4MSw2ICYjNDM7Mjc5NCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcbiBcdFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSEFGVClcbiBcdH0sXG4gI2VuZGlmXG4mIzQzO1x0e1xuJiM0MztcdFx0LmRlc2MgPSBcJiMzNDtIYXJkd2FyZSBEaXJ0eSBzdGF0ZSB0cmFja2luZyBzdHJ1Y3R1cmUgKEhEQlNTKVwmIzM0OyxcbiYjNDM7XHRcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxuJiM0MztcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfSERCU1MsXG4mIzQzO1x0XHQubWF0Y2hlcyA9IGhhc192aGVfaGRic3MsXG4mIzQzO1x0XHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlIxX0VMMSwgSEFGREJTLCBIREJTUylcbiYjNDM7XHR9LFxuIFx0e1xuIFx0XHQuZGVzYyA9IFwmIzM0O0NSQzMyIGluc3RydWN0aW9uc1wmIzM0OyxcbiBcdFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfQ1JDMzIsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbmluZGV4IDQ0OTE1NGY5YTQ4NTJkLi5kYjg0ODdiZjczOGI3OCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcbkBAIC0zNCw2ICYjNDM7MzQsNyBAQCBtZW51Y29uZmlnIEtWTVxuIFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiBcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cbiBcdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG4mIzQzO1x0c2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJXG4gXHRzZWxlY3QgU0NIRURfSU5GT1xuIFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG4gXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxuaW5kZXggNTk2MTJkMmYyNzdjMWQuLjZmYWFjZDg1NzM0NmIzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5AQCAtMjQsNyAmIzQzOzI0LDcgQEAga3ZtLXkgJiM0Mzs9IGFybS5vIG1tdS5vIG1taW8ubyBwc2NpLm8gaHlwZXJjYWxscy5vIHB2dGltZS5vIFxcXG4gXHQgdmdpYy92Z2ljLW1taW8ubyB2Z2ljL3ZnaWMtbW1pby12Mi5vIFxcXG4gXHQgdmdpYy92Z2ljLW1taW8tdjMubyB2Z2ljL3ZnaWMta3ZtLWRldmljZS5vIFxcXG4gXHQgdmdpYy92Z2ljLWl0cy5vIHZnaWMvdmdpYy1kZWJ1Zy5vIHZnaWMvdmdpYy12My1uZXN0ZWQubyBcXFxuLVx0IHZnaWMvdmdpYy12NS5vXG4mIzQzO1x0IHZnaWMvdmdpYy12NS5vIGRpcnR5X2JpdC5vXG4gXG4ga3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgJiM0Mzs9IHBtdS1lbXVsLm8gcG11Lm9cbiBrdm0tJChDT05GSUdfQVJNNjRfUFRSX0FVVEgpICAmIzQzOz0gcGF1dGgub1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbmluZGV4IDUwYWRmZmY3NWJlODJlLi5kYzFhNDYyOWFhZWI5OCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xuQEAgLTQyLDYgJiM0Mzs0Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGt2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wdHJhdXRoLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zZWN0aW9ucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3N0YWNrdHJhY2UvbnZoZS5oXHUwMDNlXG4gXG5AQCAtMjMwNyw2ICYjNDM7MjMwOCw3IEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4gXG4gXHRrdm1fdmdpY19jcHVfdXAoKTtcbiBcdGt2bV90aW1lcl9jcHVfdXAoKTtcbiYjNDM7XHRrdm1faGFjZGJzX2NwdV91cCgpO1xuIFxuIFx0cHJlZW1wdF9lbmFibGUoKTtcbiBcbkBAIC0yMzE1LDYgJiM0MzsyMzE3LDcgQEAgaW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiBcbiB2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4ge1xuJiM0MztcdGt2bV9oYWNkYnNfY3B1X2Rvd24oKTtcbiBcdGt2bV90aW1lcl9jcHVfZG93bigpO1xuIFx0a3ZtX3ZnaWNfY3B1X2Rvd24oKTtcbiBcbkBAIC0yNDgxLDYgJiM0MzsyNDg0LDggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9zdWJzeXN0ZW1zKHZvaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRrdm1faGFjZGJzX2luaXQoKTtcbiYjNDM7XG4gXHRrdm1fcmVnaXN0ZXJfcGVyZl9jYWxsYmFja3MoKTtcbiBcbiBcdGVyciA9IGt2bV9oeXBfdHJhY2VfaW5pdCgpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jIGIvYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTkyODllYTczZDk2ZDlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXG5AQCAtMCwwICYjNDM7MSw0MTEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cbiYjNDM7ICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzIFx1MDAzY2xlby5icmFzQGFybS5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuJiM0MztcbiYjNDM7REVGSU5FX1BFUl9DUFUoc3RydWN0IGhhY2RicywgaGFjZGJzX3BjcCkgPSB7XG4mIzQzO1x0LnN0YXR1cyA9IEhBQ0RCU19PRkYsXG4mIzQzO1x0LnNpemUgPSAwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogSERCU1MgZW50cnkgZmllbGQgZGVmaW5pdGlvbnMgKi9cbiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9WQUxJRCBCSVQoMClcbiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1NISUZUICgxKVxuJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfTUFTSyAoR0VOTUFTSygzLCAxKSlcbiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9UVFdMKHgpIFxcXG4mIzQzO1x0KCgoeCkgXHUwMDNjXHUwMDNjIEhEQlNTX0VOVFJZX1RUV0xfU0hJRlQpIFx1MDAyNiBIREJTU19FTlRSWV9UVFdMX01BU0spXG4mIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9SRVNWIEhEQlNTX0VOVFJZX1RUV0woLTQpXG4mIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfSVBBIEdFTk1BU0tfVUxMKDU1LCAxMilcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX3JvX2FmdGVyX2luaXQgaW50IGhhY2Ric2lycSA9IC0xO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaGFjZGJzX3N0YXJ0KHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpXG4mIzQzO3tcbiYjNDM7XHR1NjQgYnI7XG4mIzQzO1x0LyogRWFjaCBlbnRyeSBpcyA4IGJ5dGVzICovXG4mIzQzO1x0aW50IHNpemVfYiA9IHNpemUgKiBzaXplb2YoaHdfZW50cmllc1swXSk7XG4mIzQzO1x0aW50IHNpemVfcDIgPSBtYXgocm91bmR1cF9wb3dfb2ZfdHdvKHNpemVfYiksIFBBR0VfU0laRSk7XG4mIzQzO1xuJiM0MztcdC8qIElmIG5vdCB1c2luZyB0aGUgZnVsbCBzaXplIG9mIHRoZSBhcnJheSwgcHV0IGEgc3RvcCBlbnRyeSBhdCB0aGUgZW5kICovXG4mIzQzO1x0aWYgKHNpemVfYiBcdTAwM2Mgc2l6ZV9wMilcbiYjNDM7XHRcdGh3X2VudHJpZXNbc2l6ZV0gPSBIREJTU19FTlRSWV9WQUxJRCB8IEhEQlNTX0VOVFJZX1RUV0xfUkVTVjtcbiYjNDM7XG4mIzQzO1x0c3lzcmVnX2NsZWFyX3NldF9zKFNZU19IQUNEQlNDT05TX0VMMixcbiYjNDM7XHRcdFx0ICAgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTiB8IEhBQ0RCU0NPTlNfRUwyX0lOREVYLCAwKTtcbiYjNDM7XG4mIzQzO1x0YnIgPSAodmlydF90b19waHlzKGh3X2VudHJpZXMpIFx1MDAyNiBIQUNEQlNCUl9FTDJfQkFERFJfTUFTSykgfFxuJiM0MztcdCAgICAgRklFTERfUFJFUChIQUNEQlNCUl9FTDJfU1osIGlsb2cyKHNpemVfcDIpIC0gMTIpIHxcbiYjNDM7XHQgICAgIEZJRUxEX1BSRVAoSEFDREJTQlJfRUwyX0VOLCAxKTtcbiYjNDM7XG4mIzQzO1x0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19SVU5OSU5HKTtcbiYjNDM7XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnNpemUsIHNpemUpO1xuJiM0MztcdHdyaXRlX3N5c3JlZ19zKGJyLCBTWVNfSEFDREJTQlJfRUwyKTtcbiYjNDM7XHRpc2IoKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoYWNkYnNfc3RvcCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0d3JpdGVfc3lzcmVnX3MoMCwgU1lTX0hBQ0RCU0JSX0VMMik7XG4mIzQzO1x0aXNiKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfRVJST1IpIHtcbiYjNDM7XHRcdC8qIEluIGNhc2Ugb2YgZXJyb3IsIEhBQ0RCU0NPTlNfRUwyLklOREVYIHNob3VsZCBwb2ludCB0aGUgZmF1bHR5IGVudHJ5ICovXG4mIzQzO1x0XHR1NjQgY29ucyA9IHJlYWRfc3lzcmVnX3MoU1lTX0hBQ0RCU0NPTlNfRUwyKTtcbiYjNDM7XHRcdGludCBpZHggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpO1xuJiM0MztcbiYjNDM7XHRcdHRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfSURMRSk7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGlkeDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENsZWFycyBkaXJ0eS1iaXRzIGZvciBhbiBhcnJheSBvZiBwYWdlcyAoaHdfZW50cmllcykgdXNpbmcgSEFDREJTXG4mIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBjbGVhbmVkIGZyb20gdGhlIGFycmF5LiBJZiByZXR1cm5zIHZhbHVlIFx1MDAzYyBzaXplLFxuJiM0MzsgKlx0dGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSBwcm9jZXNzaW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBkaXJ0eV9iaXRfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmh3X2VudHJpZXMsIGludCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGhjcl9lbDI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJlZW1wdF9kaXNhYmxlKCk7XG4mIzQzO1xuJiM0MztcdGhjcl9lbDIgPSByZWFkX3N5c3JlZyhIQ1JfRUwyKTtcbiYjNDM7XHR3cml0ZV9zeXNyZWcoaGNyX2VsMiB8IEhDUl9FTDJfVk0sIEhDUl9FTDIpO1xuJiM0MztcdF9fbG9hZF9zdGFnZTIoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11KTtcbiYjNDM7XG4mIzQzO1x0aGFjZGJzX3N0YXJ0KGh3X2VudHJpZXMsIHNpemUpO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHR3ZmkoKTtcbiYjNDM7XHR9IHdoaWxlICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfUlVOTklORyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGhhY2Ric19zdG9wKCk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c3JlZyhoY3JfZWwyLCBIQ1JfRUwyKTtcbiYjNDM7XHRpc2IoKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBObyBEU0IgaXMgbmVlZGVkIGhlcmUsIGFzIGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KCkgdGhhdCBoYXBwZW5zXG4mIzQzO1x0ICogbGF0ZXIgaW4gZ2VuZXJpYyBkaXJ0eS1jbGVhbmluZyBjb2RlIGFscmVhZHkgcGVyZm9ybXMgYSBEU0IgYmVmb3JlXG4mIzQzO1x0ICogZG9pbmcgdGhlIFRMQkkuXG4mIzQzO1x0ICovXG4mIzQzO1xuJiM0MztcdHByZWVtcHRfZW5hYmxlKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBoZGJzc190b19iaXRtYXAodTY0ICpoZGJzc19hcnJheSwgaW50IHN0YXJ0LCBpbnQgZW5kLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHcgPSAoZ3BhX3RvX2dmbihoZGJzc19hcnJheVtzdGFydF0pIC0gb2Zmc2V0KSAvIEJJVFNfUEVSX0xPTkc7XG4mIzQzO1x0dTY0IG1hc2sgPSAwO1xuJiM0MztcdGludCBpZHggPSBzdGFydDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0dTY0IGVudHJ5ID0gKGdwYV90b19nZm4oaGRic3NfYXJyYXlbaWR4XSkgLSBvZmZzZXQpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChlbnRyeSAvIEJJVFNfUEVSX0xPTkcgPT0gdykge1xuJiM0MztcdFx0XHRtYXNrIHw9IEJJVChlbnRyeSAlIEJJVFNfUEVSX0xPTkcpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0YXRvbWljX2xvbmdfb3IobWFzaywgKGF0b21pY19sb25nX3QgKilcdTAwMjZkaXJ0eV9iaXRtYXBbd10pO1xuJiM0MztcdFx0XHR3ID0gZW50cnkgLyBCSVRTX1BFUl9MT05HO1xuJiM0MztcdFx0XHRtYXNrID0gQklUKGVudHJ5ICUgQklUU19QRVJfTE9ORyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSB3aGlsZSAoJiM0MzsmIzQzO2lkeCBcdTAwM2MgZW5kKTtcbiYjNDM7XHRhdG9taWNfbG9uZ19vcihtYXNrLCAoYXRvbWljX2xvbmdfdCAqKVx1MDAyNmRpcnR5X2JpdG1hcFt3XSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0dTY0IHR0d2wsIGludCBpZHgsIGludCBlbnRyaWVzX3N6KVxuJiM0Mzt7XG4mIzQzO1x0d2hpbGUgKGlkeCBcdTAwM2MgZW50cmllc19zeikge1xuJiM0MztcdFx0aW50IGogPSBfX2ZmcygqbWFzayk7XG4mIzQzO1x0XHR1NjQgYSA9IGdmbl90b19ncGEob2Zmc2V0ICYjNDM7IGopO1xuJiM0MztcbiYjNDM7XHRcdGh3X2VudHJpZXNbaWR4JiM0MzsmIzQzO10gPSAoYSBcdTAwMjYgSERCU1NfRU5UUllfSVBBKSB8XG4mIzQzO1x0XHRcdFx0ICAgIHR0d2wgfFxuJiM0MztcdFx0XHRcdCAgICBIREJTU19FTlRSWV9WQUxJRDtcbiYjNDM7XG4mIzQzO1x0XHQqbWFzayBcdTAwMjY9IH5CSVQoaik7XG4mIzQzO1x0XHRpZiAoISptYXNrKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBpZHg7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCxcbiYjNDM7XHRcdFx0ICAgICAgIGJvb2wgKmZsdXNoKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwID0gbWVtc2xvdC1cdTAwM2VkaXJ0eV9iaXRtYXA7XG4mIzQzO1x0dTY0ICpod19lbnRyaWVzO1xuJiM0MztcdGNvbnN0IGludCBlbnRyaWVzX3N6ID0gUEFHRV9TSVpFIC8gc2l6ZW9mKCpod19lbnRyaWVzKTtcbiYjNDM7XHR1NjQgdHR3bDtcbiYjNDM7XHR1NjQgc3RhcnQsIGVuZDtcbiYjNDM7XHRnZm5fdCBiYXNlX2dmbjtcbiYjNDM7XHRncGFfdCBzcGxpdF9lbmQgPSAwO1xuJiM0MztcbiYjNDM7XHRod19lbnRyaWVzID0ga21hbGxvY19vYmpzKHU2NCwgZW50cmllc19zeiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFod19lbnRyaWVzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHR0d2wgPSBIREJTU19FTlRSWV9UVFdMKEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwpO1xuJiM0MztcbiYjNDM7XHRpZiAobG9nKSB7XG4mIzQzO1x0XHRzdGFydCA9IGxvZy1cdTAwM2VmaXJzdF9wYWdlIC8gQklUU19QRVJfTE9ORztcbiYjNDM7XHRcdGVuZCA9IHN0YXJ0ICYjNDM7IERJVl9ST1VORF9VUChsb2ctXHUwMDNlbnVtX3BhZ2VzLCBCSVRTX1BFUl9MT05HKTtcbiYjNDM7XHRcdGJhc2VfZ2ZuID0gbWVtc2xvdC1cdTAwM2ViYXNlX2dmbiAmIzQzOyBsb2ctXHUwMDNlZmlyc3RfcGFnZSAlIEJJVFNfUEVSX0xPTkc7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHN0YXJ0ID0gMDtcbiYjNDM7XHRcdGVuZCA9IGt2bV9kaXJ0eV9iaXRtYXBfYnl0ZXMobWVtc2xvdCkgLyBzaXplb2YobG9uZyk7XG4mIzQzO1x0XHRiYXNlX2dmbiA9IG1lbXNsb3QtXHUwMDNlYmFzZV9nZm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgbG9uZyBpID0gc3RhcnQ7IGkgXHUwMDNjIGVuZDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbWFzaztcbiYjNDM7XHRcdGdmbl90IG9mZnNldDtcbiYjNDM7XHRcdGF0b21pY19sb25nX3QgKnA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxvZykgeyAvKiBDbGVhbiBvbmx5IHdoYXQgaXMgaW4gdGhlIGlucHV0IGJpdG1hcCAqL1xuJiM0MztcdFx0XHRtYXNrID0gYml0bWFwW2ldO1xuJiM0MztcdFx0XHRpZiAoIW1hc2spXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRwID0gKGF0b21pY19sb25nX3QgKilcdTAwMjZkaXJ0eV9iaXRtYXBbaV07XG4mIzQzO1x0XHRcdG1hc2sgXHUwMDI2PSBhdG9taWNfbG9uZ19mZXRjaF9hbmRub3QobWFzaywgcCk7XG4mIzQzO1x0XHR9IGVsc2UgeyAvKiBDbGVhbiBldmVyeXRoaW5nICovXG4mIzQzO1x0XHRcdGlmICghZGlydHlfYml0bWFwW2ldKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0bWFzayA9IHhjaGcoXHUwMDI2ZGlydHlfYml0bWFwW2ldLCAwKTtcbiYjNDM7XHRcdFx0Yml0bWFwW2ldID0gbWFzaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW1hc2spXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG9mZnNldCA9IGJhc2VfZ2ZuICYjNDM7IGkgKiBCSVRTX1BFUl9MT05HO1xuJiM0MztcbiYjNDM7XHRcdGlmIChrdm1fZGlydHlfbG9nX21hbnVhbF9wcm90ZWN0X2FuZF9pbml0X3NldChrdm0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChvZmZzZXQgJiM0MzsgQklUU19QRVJfTE9ORyBcdTAwM2Ugc3BsaXRfZW5kKSkge1xuJiM0MztcdFx0XHRncGFfdCBzdGFydCA9IGdmbl90b19ncGEob2Zmc2V0ICYjNDM7IF9fZmZzKG1hc2spKTtcbiYjNDM7XHRcdFx0Z3BhX3QgZW5kID0gZ2ZuX3RvX2dwYShvZmZzZXQgJiM0MzsgX19mbHMobWFzaykgJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdFx0XHRrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoa3ZtLCBzdGFydCwgZW5kKTtcbiYjNDM7XHRcdFx0c3BsaXRfZW5kID0gZ3BhX3RvX2dmbihBTElHTl9ET1dOKGVuZCwgUE1EX1NJWkUpICYjNDM7IFBNRF9TSVpFIC0gMSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZG8ge1xuJiM0MztcdFx0XHRpZHggPSBtYXNrX3RvX2hkYnNzKFx1MDAyNm1hc2ssIGh3X2VudHJpZXMsIG9mZnNldCwgdHR3bCwgaWR4LCBlbnRyaWVzX3N6KTtcbiYjNDM7XHRcdFx0aWYgKGlkeCBcdTAwM2U9IGVudHJpZXNfc3opIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xuJiM0MztcdFx0XHRcdCpmbHVzaCA9ICpmbHVzaCB8fCByZXQgXHUwMDNlIDA7XG4mIzQzO1x0XHRcdFx0aWYgKHJldCAhPSBpZHgpIHtcbiYjNDM7XHRcdFx0XHRcdC8qIFNhdmUgYml0cyBub3QgY29udmVydGVkIGJhY2sgdG8gYml0bWFwICovXG4mIzQzO1x0XHRcdFx0XHRhdG9taWNfbG9uZ19vcihtYXNrLCAoYXRvbWljX2xvbmdfdCAqKVx1MDAyNmRpcnR5X2JpdG1hcFtpXSk7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHRcdGlkeCA9IDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH0gd2hpbGUgKG1hc2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlkeCAhPSAwKSB7XG4mIzQzO1x0XHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xuJiM0MztcdFx0KmZsdXNoID0gKmZsdXNoIHx8IHJldCBcdTAwM2UgMDtcbiYjNDM7XHR9XG4mIzQzO291dF9lcnI6XG4mIzQzO1x0aWYgKHVubGlrZWx5KHJldCAhPSBpZHgpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSW4gY2FzZSB0aGVyZSBpcyBhbiBlcnJvciBhbmQgbm90IGFsbCBlbnRyaWVzIGluIEhBQ0RCUyBnZXRcbiYjNDM7XHRcdCAqIGNsZWFuZWQsIHdlIGhhdmUgdG8gbWFyayB0aGUgZGlydHkgYml0cyBiYWNrIGluIHRoZSBiaXRtYXAsXG4mIzQzO1x0XHQgKiBhcyB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgc29mdHdhcmUgcm91dGluZS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBFbnRyaWVzIHNob3VsZCBiZSBpbiBvcmRlciwgc2luY2UgdGhleSB3ZXJlIGV4dHJheGVkIGZyb21cbiYjNDM7XHRcdCAqIHRoZSBkaXJ0eS1iaXRtYXAsIHNvIGJhdGNoaW5nIHRoZSBhdG9taWMgd3JpdGVzIGlzIGVmZmljaWVudC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIGlkeClcbiYjNDM7XHRcdFx0aGRic3NfdG9fYml0bWFwKGh3X2VudHJpZXMsIHJldCwgaWR4LCBkaXJ0eV9iaXRtYXAsIG1lbXNsb3QtXHUwMDNlYmFzZV9nZm4pO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IC1FQUdBSU47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRrZnJlZShod19lbnRyaWVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZyxcbiYjNDM7XHRcdFx0XHRpbnQgKm5yX2VudHJpZXNfcmVzZXQpXG4mIzQzO3tcbiYjNDM7XHR1NjQgKmh3X2VudHJpZXM7XG4mIzQzO1x0dTY0IHNsb3Rfb2Zmc2V0ID0gMDtcbiYjNDM7XHR1NjQgdHR3bDtcbiYjNDM7XHRpbnQgaSwgcmV0O1xuJiM0MztcdHUzMiBzbG90ID0gLTE7XG4mIzQzO1xuJiM0MztcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVFI7XG4mIzQzO1xuJiM0MztcdHR0d2wgPSBIREJTU19FTlRSWV9UVFdMKEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwpO1xuJiM0MztcbiYjNDM7XHRod19lbnRyaWVzID0ga21hbGxvYyhtYXgocmluZy1cdTAwM2VzaXplICogc2l6ZW9mKHU2NCksIFBBR0VfU0laRSksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghaHdfZW50cmllcylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByaW5nLVx1MDAzZXNpemU7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZW50cnk7XG4mIzQzO1x0XHRnZm5fdCBnZm47XG4mIzQzO1xuJiM0MztcdFx0ZW50cnkgPSBcdTAwMjZyaW5nLVx1MDAzZWRpcnR5X2dmbnNbKHJpbmctXHUwMDNlcmVzZXRfaW5kZXggJiM0MzsgaSkgXHUwMDI2XG4mIzQzO1x0XHRcdFx0XHQgIChyaW5nLVx1MDAzZXNpemUgLSAxKV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFrdm1fZGlydHlfZ2ZuX2hhcnZlc3RlZChlbnRyeSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChlbnRyeS1cdTAwM2VzbG90ICE9IHNsb3QpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiYjNDM7XG4mIzQzO1x0XHRcdG1lbXNsb3QgPSBrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIGVudHJ5LVx1MDAzZXNsb3QpO1xuJiM0MztcdFx0XHRzbG90ID0gZW50cnktXHUwMDNlc2xvdDtcbiYjNDM7XHRcdFx0c2xvdF9vZmZzZXQgPSBtZW1zbG90LVx1MDAzZWJhc2VfZ2ZuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGdmbiA9IHNsb3Rfb2Zmc2V0ICYjNDM7IGVudHJ5LVx1MDAzZW9mZnNldDtcbiYjNDM7XG4mIzQzO1x0XHRod19lbnRyaWVzW2ldID0gKGdmbl90b19ncGEoZ2ZuKSBcdTAwMjYgSERCU1NfRU5UUllfSVBBKSB8XG4mIzQzO1x0XHRcdFx0dHR3bCB8IEhEQlNTX0VOVFJZX1ZBTElEO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGlydHlfYml0X2NsZWFyKGt2bSwgaHdfZW50cmllcywgaSk7XG4mIzQzO1xuJiM0MztcdC8qIFNldCBhcyBpbnZhbGlkIGFsbCBzdWNjZXNzZnVsbHkgY2xlYW5lZCBlbnRyaWVzICovXG4mIzQzO1x0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIHJldDsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBrdm1fZGlydHlfZ2ZuICplbnRyeTtcbiYjNDM7XG4mIzQzO1x0XHRlbnRyeSA9IFx1MDAyNnJpbmctXHUwMDNlZGlydHlfZ2Zuc1socmluZy1cdTAwM2VyZXNldF9pbmRleCAmIzQzOyBqKSBcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdCAgKHJpbmctXHUwMDNlc2l6ZSAtIDEpXTtcbiYjNDM7XG4mIzQzO1x0XHRrdm1fZGlydHlfZ2ZuX3NldF9pbnZhbGlkKGVudHJ5KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEluIGNhc2Ugb2YgZXJyb3IsIHRyeSBzb2Z0d2FyZSBjbGVhbmluZyBmcm9tIHRoZSBmYXVsdGluZyBlbnRyeSAqL1xuJiM0MztcdHJpbmctXHUwMDNlcmVzZXRfaW5kZXggJiM0Mzs9IHJldDtcbiYjNDM7XHQqbnJfZW50cmllc19yZXNldCAmIzQzOz0gcmV0O1xuJiM0MztcbiYjNDM7XHRrZnJlZShod19lbnRyaWVzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgaSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgaGFjZGJzaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcGNwdSlcbiYjNDM7e1xuJiM0MztcdHU2NCBjb25zID0gcmVhZF9zeXNyZWdfcyhTWVNfSEFDREJTQ09OU19FTDIpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZXJyID0gRklFTERfR0VUKEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT04sIGNvbnMpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGVycikge1xuJiM0MztcdGNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9OT0Y6XG4mIzQzO1x0XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OX0lQQUhBQ0Y6XG4mIzQzO1x0XHQvKiBXaGVuIHNpemUgbm90IGEgcG93ZXIgb2YgdHdvIFx1MDAzZT0gNGssIGV4aXQgd2l0aCByZXNlcnZlZCBUVExXICovXG4mIzQzO1x0XHRpbnQgaW5kZXggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbmRleCBcdTAwM2U9IHRoaXNfY3B1X3JlYWQoaGFjZGJzX3BjcC5zaXplKSkge1xuJiM0MztcdFx0XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9TVFJVQ1RGOlxuJiM0MztcdGNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9JUEFGOlxuJiM0MztcdFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19FUlJPUik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrdm1faGFjZGJzX2NwdV91cCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGhhY2Ric2lycSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZW5hYmxlX3BlcmNwdV9pcnEoaGFjZGJzaXJxLCBJUlFfVFlQRV9MRVZFTF9ISUdIKTtcbiYjNDM7XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGt2bV9oYWNkYnNfY3B1X2Rvd24odm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChoYWNkYnNpcnEgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRpc2FibGVfcGVyY3B1X2lycShoYWNkYnNpcnEpO1xuJiM0MztcdHRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfT0ZGKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGhhY2Ric19hY3BpX2dldF9pcnEodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJpY19pbnRlcnJ1cHQgKmdpY2M7XG4mIzQzO1x0dTMyIGdzaTtcbiYjNDM7XHRpbnQgaXJxO1xuJiM0MztcbiYjNDM7XHRnaWNjID0gYWNwaV9jcHVfZ2V0X21hZHRfZ2ljYyhzbXBfcHJvY2Vzc29yX2lkKCkpO1xuJiM0MztcdGlmIChnaWNjLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIEFDUElfTUFEVF9HSUNDX0hBQ0RCU0lSUSlcbiYjNDM7XHRcdHJldHVybiAtRU5YSU87XG4mIzQzO1xuJiM0MztcdGdzaSA9ICBnaWNjLVx1MDAzZWhhY2Ric2lycV9nc2k7XG4mIzQzO1xuJiM0MztcdGlycSA9IGFjcGlfcmVnaXN0ZXJfZ3NpKE5VTEwsIGdzaSwgQUNQSV9MRVZFTF9TRU5TSVRJVkUsIEFDUElfQUNUSVZFX0hJR0gpO1xuJiM0MztcdGlmIChpcnEgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7QUNQSTogVW5hYmxlIHRvIHJlZ2lzdGVyIEhBQ0RCUyBpbnRlcnJ1cHQ6ICVkXFxuXCYjMzQ7LCBnc2kpO1xuJiM0MztcdFx0cmV0dXJuIC1FTlhJTztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBpcnE7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBoYWNkYnNfYWNwaV9nZXRfaXJxKCkgKC1FTlhJTylcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0Mzt2b2lkIF9faW5pdCBrdm1faGFjZGJzX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBpcnE7XG4mIzQzO1xuJiM0MztcdC8qIEZFQVRfSEFDREJTIGlzIG9ubHkgc3VwcG9ydGVkIGlmIExpbnV4IHJ1bnMgaW4gRUwyIChWSEUpICovXG4mIzQzO1x0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKCkgfHwgIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpcnEgPSBoYWNkYnNfYWNwaV9nZXRfaXJxKCk7XG4mIzQzO1x0aWYgKGlycSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcXVlc3RfcGVyY3B1X2lycShpcnEsIGhhY2Ric2lycV9oYW5kbGVyLCBcJiMzNDtIQUNEQlNJUlFcJiMzNDssIFx1MDAyNmhhY2Ric19wY3ApIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRoYWNkYnNpcnEgPSBpcnE7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xuaW5kZXggOTFhN2RmYWQ2Njg2NjAuLmUxNjcyOWYwYjdiZDI0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuY1xuQEAgLTczMSw5ICYjNDM7NzMxLDEzIEBAIHN0YXRpYyBpbnQgc3RhZ2UyX3NldF9wcm90X2F0dHIoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIGVudW0ga3ZtX3BndGFibGVfcHJvdCBwXG4gXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9SKVxuIFx0XHRhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUjtcbiBcbi1cdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXG4mIzQzO1x0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykge1xuIFx0XHRhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfVztcbiBcbiYjNDM7XHRcdGlmIChwZ3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9QR1RBQkxFX1MyX0RCTSlcbiYjNDM7XHRcdFx0YXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk07XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICgha3ZtX2xwYTJfaXNfZW5hYmxlZCgpKVxuIFx0XHRhdHRyIHw9IEZJRUxEX1BSRVAoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfU0gsIHNoKTtcbiBcbkBAIC0xMzY3LDkgJiM0MzsxMzcxLDEzIEBAIGludCBrdm1fcGd0YWJsZV9zdGFnZTJfcmVsYXhfcGVybXMoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIHU2NCBhZGRyLFxuIFx0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfUilcbiBcdFx0c2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUjtcbiBcbi1cdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXG4mIzQzO1x0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykge1xuIFx0XHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XO1xuIFxuJiM0MztcdFx0aWYgKHBndC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKVxuJiM0MztcdFx0XHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBzdGFnZTJfc2V0X3huX2F0dHIocHJvdCwgXHUwMDI2eG4pO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC0xNTg1LDYgJiM0MzsxNTkzLDkgQEAgaW50IF9fa3ZtX3BndGFibGVfc3RhZ2UyX2luaXQoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIHN0cnVjdCBrdm1fczJfbW11ICptbXUsXG4gXHRpZiAoIXBndC1cdTAwM2VwZ2QpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbiYjNDM7XHRcdGZsYWdzIHw9IEtWTV9QR1RBQkxFX1MyX0RCTTtcbiYjNDM7XG4gXHRwZ3QtXHUwMDNlaWFfYml0c1x0XHQ9IGlhX2JpdHM7XG4gXHRwZ3QtXHUwMDNlc3RhcnRfbGV2ZWxcdD0gc3RhcnRfbGV2ZWw7XG4gXHRwZ3QtXHUwMDNlbW1fb3BzXHRcdD0gbW1fb3BzO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbmluZGV4IDZjOTQxYWFhMTBjNjM5Li4yZjlkOTBjMzU2NjhiOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xuQEAgLTExNyw4ICYjNDM7MTE3LDggQEAgc3RhdGljIGJvb2wgbmVlZF9zcGxpdF9tZW1jYWNoZV90b3B1cF9vcl9yZXNjaGVkKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBrdm1fbW11X21lbW9yeV9jYWNoZV9ucl9mcmVlX29iamVjdHMoY2FjaGUpIFx1MDAzYyBtaW47XG4gfVxuIFxuLXN0YXRpYyBpbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkcixcbi1cdFx0XHRcdCAgICBwaHlzX2FkZHJfdCBlbmQpXG4mIzQzO2ludCBrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLCBwaHlzX2FkZHJfdCBhZGRyLFxuJiM0MztcdFx0XHQgICAgIHBoeXNfYWRkcl90IGVuZClcbiB7XG4gXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlO1xuIFx0c3RydWN0IGt2bV9wZ3RhYmxlICpwZ3Q7XG5AQCAtMTAyNyw4ICYjNDM7MTAyNywxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0KnBlcl9jcHVfcHRyKG1tdS1cdTAwM2VsYXN0X3ZjcHVfcmFuLCBjcHUpID0gLTE7XG4gXG4tXHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi9cbi1cdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbiYjNDM7XHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgaWYgc3lzdGVtIGhhcyBubyBIREJTUyAqL1xuJiM0MztcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbiYjNDM7XHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbiYjNDM7XG4gXHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87XG4gXG4gXHRtbXUtXHUwMDNlcGdkX3BoeXMgPSBfX3BhKHBndC1cdTAwM2VwZ2QpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLmJkMmMwYmI5OGRhNjFlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC02OSw4ICYjNDM7NjksMTAgQEAgSEFTX1ZBNTJcbiBIQVNfVklSVF9IT1NUX0VYVE5cbiBIQVNfV0ZYVFxuIEhBU19YTlhcbiYjNDM7SEFTX0hEQlNTXG4gSEFGVFxuIEhXX0RCTVxuJiM0MztIQUNEQlNcbiBLVk1fSFZIRVxuIEtWTV9QUk9URUNURURfTU9ERVxuIE1JU01BVENIRURfQ0FDSEVfVFlQRVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnIGIvYXJjaC9hcm02NC90b29scy9zeXNyZWdcbmluZGV4IGJjMTc4OGIxNjYyYjc2Li43YjdjM2Q2YTBmMDMwOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZ1xuQEAgLTQ2MzQsNiAmIzQzOzQ2MzQsMzYgQEAgRmllbGRcdDc6Nlx0U0wwXG4gRmllbGRcdDU6MFx0VDBTWlxuIEVuZFN5c3JlZ1xuIFxuJiM0MztTeXNyZWdcdEhBQ0RCU0JSX0VMMlx0M1x0NFx0Mlx0M1x0NFxuJiM0MztSZXMwXHQ2Mzo1NlxuJiM0MztGaWVsZFx0NTU6MTJcdEJBRERSXG4mIzQzO0ZpZWxkXHQxMVx0RU5cbiYjNDM7UmVzMFx0MTA6NFxuJiM0MztVbnNpZ25lZEVudW1cdDM6MFx0U1pcbiYjNDM7XHQwYjAwMDBcdDRLXG4mIzQzO1x0MGIwMDAxXHQ4S1xuJiM0MztcdDBiMDAxMFx0MTZLXG4mIzQzO1x0MGIwMDExXHQzMktcbiYjNDM7XHQwYjAxMDBcdDY0S1xuJiM0MztcdDBiMDEwMVx0MTI4S1xuJiM0MztcdDBiMDExMFx0MjU2S1xuJiM0MztcdDBiMDExMVx0NTEyS1xuJiM0MztcdDBiMTAwMFx0MU1cbiYjNDM7XHQwYjEwMDFcdDJNXG4mIzQzO0VuZEVudW1cbiYjNDM7RW5kU3lzcmVnXG4mIzQzO1xuJiM0MztTeXNyZWdcdEhBQ0RCU0NPTlNfRUwyXHQzXHQ0XHQyXHQzXHQ1XG4mIzQzO1Vuc2lnbmVkRW51bVx0NjM6NjJcdEVSUl9SRUFTT05cbiYjNDM7XHQwYjAwXHROT0ZcbiYjNDM7XHQwYjAxXHRTVFJVQ1RGXG4mIzQzO1x0MGIxMFx0SVBBRlxuJiM0MztcdDBiMTFcdElQQUhBQ0ZcbiYjNDM7RW5kRW51bVxuJiM0MztSZXMwXHQ2MToxOVxuJiM0MztGaWVsZFx0MTg6MFx0SU5ERVhcbiYjNDM7RW5kU3lzcmVnXG4mIzQzO1xuIFN5c3JlZ1x0R0NTQ1JfRUwyXHQzXHQ0XHQyXHQ1XHQwXG4gRmllbGRzXHRHQ1NDUl9FTHhcbiBFbmRTeXNyZWdcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwyLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmhcbmluZGV4IGJhZWY1MjUzNjdiNWM0Li5lYWVmYjQ5NGVmNTk3MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hY3BpL2FjdGJsMi5oXG5AQCAtMTQ0OSw2ICYjNDM7MTQ0OSw3IEBAIHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJpY19pbnRlcnJ1cHQge1xuIFx0dTE2IHRyYmVfaW50ZXJydXB0O1x0LyogQUNQSSA2LjUgKi9cbiBcdHUxNiBpYWZmaWQ7XHRcdC8qIEFDUEkgNi43ICovXG4gXHR1MzIgaXJzX2lkO1xuJiM0MztcdHUzMiBoYWNkYnNpcnFfZ3NpO1x0LyogQUNQSSA2LlggKi9cbiB9O1xuIFxuIC8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oIGIvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODQ5Mjk3OWQ2OTRlNzBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oXG5AQCAtMCwwICYjNDM7MSwzNCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxuJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXHUwMDNjbGVvLmJyYXNAYXJtLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX19LVk1fRElSVFlfQklUX0hfX1xuJiM0MzsjZGVmaW5lIF9fS1ZNX0RJUlRZX0JJVF9IX19cbiYjNDM7XG4mIzQzOyNpZm5kZWYgQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVFxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX2NsZWFyX2RpcnR5X2xvZyAqbG9nLFxuJiM0MztcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxuJiM0MztcdFx0XHRcdFx0ICAgYm9vbCAqZmx1c2gpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVOWElPO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FTlhJTztcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2Vsc2UgLyogQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVQgKi9cbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfX0tWTV9ESVJUWV9CSVRfSF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfcmluZy5oIGIvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfcmluZy5oXG5pbmRleCBlYjEwZDg3YWRmN2Q1OS4uMTkwZDk3ZmNlNGE0MmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaFxuQEAgLTg0LDYgJiM0Mzs4NCwxOCBAQCB2b2lkIGt2bV9kaXJ0eV9yaW5nX3B1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc2xvdCwgdTY0IG9mZnNldCk7XG4gXG4gYm9vbCBrdm1fZGlydHlfcmluZ19jaGVja19yZXF1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fZGlydHlfZ2ZuX2hhcnZlc3RlZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Z2ZuLVx1MDAzZWZsYWdzKSBcdTAwMjYgS1ZNX0RJUlRZX0dGTl9GX1JFU0VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2RpcnR5X2dmbl9zZXRfaW52YWxpZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuJiM0Mzt7XG4mIzQzO1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Z2ZuLVx1MDAzZWZsYWdzLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdCk7XG4mIzQzO1xuIC8qIGZvciB1c2UgaW4gdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKi9cbiBzdHJ1Y3QgcGFnZSAqa3ZtX2RpcnR5X3JpbmdfZ2V0X3BhZ2Uoc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLCB1MzIgb2Zmc2V0KTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzFlLi43ZWE2ZWQ3Y2UyMDNhYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMTY2OSw2ICYjNDM7MTY2OSw5IEBAIGJvb2wga3ZtX2FyY2hfdmNwdV9wcmVlbXB0ZWRfaW5fa2VybmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gdm9pZCBrdm1fYXJjaF9wcmVfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pO1xuIHZvaWQga3ZtX2FyY2hfY3JlYXRlX3ZtX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtKTtcbiBcbiYjNDM7aW50IGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHBoeXNfYWRkcl90IGFkZHIsXG4mIzQzO1x0XHRcdCAgICAgcGh5c19hZGRyX3QgZW5kKTtcbiYjNDM7XG4gI2lmbmRlZiBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0NcbiAvKlxuICAqIEFsbCBhcmNoaXRlY3R1cmVzIHRoYXQgd2FudCB0byB1c2UgdnphbGxvYyBjdXJyZW50bHkgYWxzb1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL0tjb25maWcgYi92aXJ0L2t2bS9LY29uZmlnXG5pbmRleCA3OTQ5NzZiODhjNmY5Ny4uZjg3NTdiNWI4NGIzZTAgMTAwNjQ0XG4tLS0gYS92aXJ0L2t2bS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9LY29uZmlnXG5AQCAtMjAsNiAmIzQzOzIwLDkgQEAgY29uZmlnIEhBVkVfS1ZNX0lSUV9ST1VUSU5HXG4gY29uZmlnIEhBVkVfS1ZNX0RJUlRZX1JJTkdcbiAgICAgICAgYm9vbFxuIFxuJiM0Mztjb25maWcgSEFWRV9LVk1fSFdfRElSVFlfQklUXG4mIzQzOyAgICAgICBib29sXG4mIzQzO1xuICMgT25seSBzdHJvbmdseSBvcmRlcmVkIGFyY2hpdGVjdHVyZXMgY2FuIHNlbGVjdCB0aGlzLCBhcyBpdCBkb2VzbiYjMzk7dFxuICMgcHV0IGFueSBleHBsaWNpdCBjb25zdHJhaW50IG9uIHVzZXJzcGFjZSBvcmRlcmluZy4gVGhleSBjYW4gYWxzb1xuICMgc2VsZWN0IHRoZSBfQUNRX1JFTCB2ZXJzaW9uLlxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2RpcnR5X3JpbmcuYyBiL3ZpcnQva3ZtL2RpcnR5X3JpbmcuY1xuaW5kZXggNTcyYjg1NGVkZjc0MGQuLmZlNGU3ZGE2Y2M0YTZhIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZGlydHlfcmluZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9kaXJ0eV9yaW5nLmNcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7a3ZtX21tLmhcJiMzNDtcbiBcbkBAIC01MCwxOCAmIzQzOzUxLDMwIEBAIHN0YXRpYyBib29sIGt2bV9kaXJ0eV9yaW5nX2Z1bGwoc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nKVxuIFx0cmV0dXJuIGt2bV9kaXJ0eV9yaW5nX3VzZWQocmluZykgXHUwMDNlPSByaW5nLVx1MDAzZXNpemU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGt2bV9yZXNldF9kaXJ0eV9nZm4oc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdCwgdTY0IG9mZnNldCwgdTY0IG1hc2spXG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqXG4mIzQzO19fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdClcbiB7XG4tXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xuIFx0aW50IGFzX2lkLCBpZDtcbiBcbiBcdGFzX2lkID0gc2xvdCBcdTAwM2VcdTAwM2UgMTY7XG4gXHRpZCA9ICh1MTYpc2xvdDtcbiBcbiBcdGlmIChhc19pZCBcdTAwM2U9IGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSkgfHwgaWQgXHUwMDNlPSBLVk1fVVNFUl9NRU1fU0xPVFMpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaWRfdG9fbWVtc2xvdChfX2t2bV9tZW1zbG90cyhrdm0sIGFzX2lkKSwgaWQpO1xuJiM0Mzt9XG4gXG4tXHRtZW1zbG90ID0gaWRfdG9fbWVtc2xvdChfX2t2bV9tZW1zbG90cyhrdm0sIGFzX2lkKSwgaWQpO1xuJiM0MztzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICprdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoa3ZtLCBzbG90KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3ZtX3Jlc2V0X2RpcnR5X2dmbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90LCB1NjQgb2Zmc2V0LCB1NjQgbWFzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XG4mIzQzO1xuJiM0MztcdG1lbXNsb3QgPSBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgc2xvdCk7XG4gXG4gXHRpZiAoIW1lbXNsb3QgfHwgb2Zmc2V0IFx1MDAzZT0gbWVtc2xvdC1cdTAwM2VucGFnZXMgfHxcbiBcdCAgICBvZmZzZXQgJiM0MzsgX19mbHMobWFzaykgXHUwMDNlPSBtZW1zbG90LVx1MDAzZW5wYWdlcylcbkBAIC04OCwyMSAmIzQzOzEwMSwxMSBAQCBpbnQga3ZtX2RpcnR5X3JpbmdfYWxsb2Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2ludmFsaWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcbi17XG4tXHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZnZm4tXHUwMDNlZmxhZ3MsIDApO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2RpcnR5X2dmbl9zZXRfZGlydGllZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuIHtcbiBcdGdmbi1cdTAwM2VmbGFncyA9IEtWTV9ESVJUWV9HRk5fRl9ESVJUWTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGt2bV9kaXJ0eV9nZm5faGFydmVzdGVkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pXG4te1xuLVx0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Z2ZuLVx1MDAzZWZsYWdzKSBcdTAwMjYgS1ZNX0RJUlRZX0dGTl9GX1JFU0VUO1xuLX1cbi1cbiBpbnQga3ZtX2RpcnR5X3JpbmdfcmVzZXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG4gXHRcdFx0IGludCAqbnJfZW50cmllc19yZXNldClcbiB7XG5AQCAtMTMxLDYgJiM0MzsxMzQsOSBAQCBpbnQga3ZtX2RpcnR5X3JpbmdfcmVzZXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG4gXHQgKi9cbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIFxuJiM0MztcdGlmIChrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKGt2bSwgcmluZywgbnJfZW50cmllc19yZXNldCkgXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0d2hpbGUgKGxpa2VseSgoKm5yX2VudHJpZXNfcmVzZXQpIFx1MDAzYyBJTlRfTUFYKSkge1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLmEyNWI4OTAyY2RmYzE3IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTY1LDYgJiM0Mzs2NSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2t2bS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2RpcnR5X3JpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fZGlydHlfYml0LmhcdTAwM2VcbiBcbiBcbiAvKiBXb3JzdCBjYXNlIGJ1ZmZlciBzaXplIG5lZWRlZCBmb3IgaG9sZGluZyBhbiBpbnRlZ2VyLiAqL1xuQEAgLTIyNjIsNiAmIzQzOzIyNjMsMTAgQEAgc3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcbiBcdFx0ZGlydHlfYml0bWFwX2J1ZmZlciA9IGt2bV9zZWNvbmRfZGlydHlfYml0bWFwKG1lbXNsb3QpO1xuIFx0XHRtZW1zZXQoZGlydHlfYml0bWFwX2J1ZmZlciwgMCwgbik7XG4gXG4mIzQzO1x0XHRpZiAoa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKGt2bSwgbWVtc2xvdCwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgZGlydHlfYml0bWFwX2J1ZmZlciwgXHUwMDI2Zmx1c2gpIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0XHRLVk1fTU1VX0xPQ0soa3ZtKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbiAvIHNpemVvZihsb25nKTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIG1hc2s7XG5AQCAtMjI4MSw2ICYjNDM7MjI4Niw3IEBAIHN0YXRpYyBpbnQga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfbG9nICpsb2cpXG4gXHRcdEtWTV9NTVVfVU5MT0NLKGt2bSk7XG4gXHR9XG4gXG4mIzQzO291dDpcbiBcdGlmIChmbHVzaClcbiBcdFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzX21lbXNsb3Qoa3ZtLCBtZW1zbG90KTtcbiBcbkBAIC0yMzczLDYgJiM0MzsyMzc5LDEwIEBAIHN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihkaXJ0eV9iaXRtYXBfYnVmZmVyLCBsb2ctXHUwMDNlZGlydHlfYml0bWFwLCBuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4mIzQzO1x0aWYgKGt2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihrdm0sIG1lbXNsb3QsIGxvZywgZGlydHlfYml0bWFwX2J1ZmZlcixcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNmZsdXNoKSBcdTAwM2U9IDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRLVk1fTU1VX0xPQ0soa3ZtKTtcbiBcdGZvciAob2Zmc2V0ID0gbG9nLVx1MDAzZWZpcnN0X3BhZ2UsIGkgPSBvZmZzZXQgLyBCSVRTX1BFUl9MT05HLFxuIFx0XHQgbiA9IERJVl9ST1VORF9VUChsb2ctXHUwMDNlbnVtX3BhZ2VzLCBCSVRTX1BFUl9MT05HKTsgbi0tO1xuQEAgLTIzOTIsMTIgJiM0MzsyNDAyLDEzIEBAIHN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0Ki9cbiBcdFx0aWYgKG1hc2spIHtcbiBcdFx0XHRmbHVzaCA9IHRydWU7XG4mIzQzO1xuIFx0XHRcdGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChrdm0sIG1lbXNsb3QsXG4gXHRcdFx0XHRcdFx0XHRcdG9mZnNldCwgbWFzayk7XG4gXHRcdH1cbiBcdH1cbiBcdEtWTV9NTVVfVU5MT0NLKGt2bSk7XG4tXG4mIzQzO291dDpcbiBcdGlmIChmbHVzaClcbiBcdFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzX21lbXNsb3Qoa3ZtLCBtZW1zbG90KTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7QUNQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyJiMzNDssCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhciYjMzQ7LAogICAgJiMzNDtkaXJ0eV9iaXRfY2xlYXImIzM0OywKICAgICYjMzQ7aGFjZGJzaXJxX2hhbmRsZXImIzM0OywKICAgICYjMzQ7a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3QmIzM0OywKICAgICYjMzQ7a3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0JiMzNDssCiAgICAmIzM0O2t2bV9kaXJ0eV9yaW5nX3Jlc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YzU4NjcxNzZmNzEwNDc2YjI4YjEzNmRiNWM4MzkzMWE3NWViZTg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMTE6NDA6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDhhNTRjYTZiYTYwMjgyLi44ODMzMTVlOWQ3OWQ5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTQ1LDYgJiM0Mzs0NSw5IEBACiAKICNkZWZpbmUgQUNQSV9NQURUX0dJQ0NfVFJCRSAgKG9mZnNldG9mKHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJpY19pbnRlcnJ1cHQsIFwKIAl0cmJlX2ludGVycnVwdCkgJiM0Mzsgc2l6ZW9mKHUxNikpCiYjNDM7CiYjNDM7I2RlZmluZSBBQ1BJX01BRFRfR0lDQ19IQUNEQlNJUlEgIChvZmZzZXRvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0LCBcCiYjNDM7CWhhY2Ric2lycV9nc2kpICYjNDM7IHNpemVvZih1MzIpKQogLyoKICAqIEFybcKuIEZ1bmN0aW9uYWwgRml4ZWQgSGFyZHdhcmUgU3BlY2lmaWNhdGlvbiBWZXJzaW9uIDEuMi4KICAqIFRhYmxlIDI6IEFybSBBcmNoaXRlY3R1cmUgY29udGV4dCBsb3NzIGZsYWdzCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IGE1Nzg3MGZhOTZkYjViLi42MjBhZTRjZGRiNzYwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKQEAgLTg2Myw2ICYjNDM7ODYzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFmdCh2b2lkKQogCXJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBRlQpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oZGJzcyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFTX0hEQlNTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWNkYnModm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBQ0RCUyk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19tcGFtKHZvaWQpCiB7CiAJcmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfTVBBTSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kNzZjMTA5OTM3ZDhkYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oCkBAIC0wLDAgJiM0MzsxLDY3IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFSTSBMdGQuCiYjNDM7ICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzICZsdDtsZW8uYnJhc0Bhcm0uY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX19BUk02NF9LVk1fRElSVFlfQklUX0hfXwomIzQzOyNkZWZpbmUgX19BUk02NF9LVk1fRElSVFlfQklUX0hfXwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtX3BndGFibGUuaCZndDsKJiM0MzsKJiM0MztlbnVtIGhhY2Ric19zdGF0dXMgewomIzQzOwlIQUNEQlNfT0ZGLAomIzQzOwlIQUNEQlNfSURMRSwKJiM0MzsJSEFDREJTX1JVTk5JTkcsCiYjNDM7CUhBQ0RCU19FUlJPUgomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGhhY2RicyB7CiYjNDM7CWVudW0gaGFjZGJzX3N0YXR1cyBzdGF0dXM7CiYjNDM7CWludCBzaXplOwomIzQzO307CiYjNDM7CiYjNDM7REVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBoYWNkYnMsIGhhY2Ric19wY3ApOwomIzQzOwomIzQzO3ZvaWQgX19pbml0IGt2bV9oYWNkYnNfaW5pdCh2b2lkKTsKJiM0Mzt2b2lkIGt2bV9oYWNkYnNfY3B1X3VwKHZvaWQpOwomIzQzO3ZvaWQga3ZtX2hhY2Ric19jcHVfZG93bih2b2lkKTsKJiM0MzsKJiM0MztpbnQgX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qga3ZtX2NsZWFyX2RpcnR5X2xvZyAqbG9nLAomIzQzOwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsCiYjNDM7CQkJICAgICAgIGJvb2wgKmZsdXNoKTsKJiM0MzsKJiM0MztpbnQgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLAomIzQzOwkJCQlpbnQgKm5yX2VudHJpZXNfcmVzZXQpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1fYXJjaF9kaXJ0eV9jbGVhcl9lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfSURMRSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICAoa3ZtLSZndDthcmNoLm1tdS5wZ3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9QR1RBQkxFX1MyX0RCTSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQkgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAomIzQzOwkJCQkJICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZywKJiM0MzsJCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwKJiM0MzsJCQkJCSAgIGJvb2wgKmZsdXNoKQomIzQzO3sKJiM0MzsJaWYgKCFrdm1fYXJjaF9kaXJ0eV9jbGVhcl9lbmFibGVkKGt2bSkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOwlyZXR1cm4gX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoa3ZtLCBtZW1zbG90LCBsb2csIGJpdG1hcCwgZmx1c2gpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCSAgICBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsCiYjNDM7CQkJCQkgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KQomIzQzO3sKJiM0MzsJaWYgKCFrdm1fYXJjaF9kaXJ0eV9jbGVhcl9lbmFibGVkKGt2bSkpCiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwomIzQzOwlyZXR1cm4gX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKGt2bSwgcmluZywgbnJfZW50cmllc19yZXNldCk7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZiAvKiBfX0FSTTY0X0tWTV9ESVJUWV9CSVRfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmgKaW5kZXggNDFhODY4NzkzOGViNmIuLjY0NmZmODhlMDI1ODNmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oCkBAIC05Myw2ICYjNDM7OTMsOCBAQCB0eXBlZGVmIHU2NCBrdm1fcHRlX3Q7CiAKICNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfWE4JR0VOTUFTSyg1NCwgNTMpCiAKJiM0MzsjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTQlCSVQoNTEpCiYjNDM7CiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQCUJJVCg1MCkKIAogI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNUwkoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SIHwgXApAQCAtMjUzLDYgJiM0MzsyNTUsNyBAQCBzdHJ1Y3Qga3ZtX3BndGFibGVfbW1fb3BzIHsKIGVudW0ga3ZtX3BndGFibGVfc3RhZ2UyX2ZsYWdzIHsKIAlLVk1fUEdUQUJMRV9TMl9JRE1BUAkJCT0gQklUKDApLAogCUtWTV9QR1RBQkxFX1MyX0FTX1MxCQkJPSBCSVQoMSksCiYjNDM7CUtWTV9QR1RBQkxFX1MyX0RCTQkJCT0gQklUKDIpLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMKaW5kZXggOWEyMmRmMGM1MTIwZjMuLjYyZjU2YmJkMGE2NWM4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jCkBAIC01MjMsNiAmIzQzOzUyMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfZnRyX2JpdHMgZnRyX2lkX2FhNjRtbWZyM1tdID0gewogc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnI0W10gPSB7CiAJU19BUk02NF9GVFJfQklUUyhGVFJfSElEREVOLCBGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgSURfQUE2NE1NRlI0X0VMMV9FMkgwX1NISUZULCA0LCAwKSwKIAlBUk02NF9GVFJfQklUUyhGVFJfSElEREVOLCBGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgSURfQUE2NE1NRlI0X0VMMV9OVl9mcmFjX1NISUZULCA0LCAwKSwKJiM0MzsJQVJNNjRfRlRSX0JJVFMoRlRSX0hJRERFTiwgRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRNTUZSNF9FTDFfSEFDREJTX1NISUZULCA0LCAwKSwKIAlBUk02NF9GVFJfRU5ELAogfTsKIApAQCAtMjEzMSw2ICYjNDM7MjEzMiwxMSBAQCBzdGF0aWMgYm9vbCBodmhlX3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwKIAlyZXR1cm4gYXJtNjRfdGVzdF9zd19mZWF0dXJlX292ZXJyaWRlKEFSTTY0X1NXX0ZFQVRVUkVfT1ZFUlJJREVfSFZIRSk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBoYXNfdmhlX2hkYnNzKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSwgaW50IGNvcGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gaXNfa2VybmVsX2luX2h5cF9tb2RlKCkgJmFtcDsmYW1wOyBoYXNfY3B1aWRfZmVhdHVyZShlbnRyeSwgY29wZSk7CiYjNDM7fQomIzQzOwogYm9vbCBjcHVfc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCh2b2lkKQogewogCS8qCkBAIC0yNzY2LDYgJiM0MzsyNzcyLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0gewogCQlBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlIxX0VMMSwgSEFGREJTLCBEQk0pCiAJfSwKICNlbmRpZgomIzQzOwl7CiYjNDM7CQkuZGVzYyA9ICYjMzQ7SGFyZHdhcmUgZGlydHkgYml0IENsZWFuaW5nJiMzNDssCiYjNDM7CQkudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSwKJiM0MzsJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFDREJTLAomIzQzOwkJLm1hdGNoZXMgPSBoYXNfY3B1aWRfZmVhdHVyZSwKJiM0MzsJCUFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjRfRUwxLCBIQUNEQlMsIElNUCkKJiM0MzsJfSwKICNpZmRlZiBDT05GSUdfQVJNNjRfSEFGVAogCXsKIAkJLmRlc2MgPSAmIzM0O0hhcmR3YXJlIG1hbmFnZWQgQWNjZXNzIEZsYWcgZm9yIFRhYmxlIERlc2NyaXB0b3JzJiMzNDssCkBAIC0yNzgxLDYgJiM0MzsyNzk0LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0gewogCQlBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlIxX0VMMSwgSEFGREJTLCBIQUZUKQogCX0sCiAjZW5kaWYKJiM0MzsJewomIzQzOwkJLmRlc2MgPSAmIzM0O0hhcmR3YXJlIERpcnR5IHN0YXRlIHRyYWNraW5nIHN0cnVjdHVyZSAoSERCU1MpJiMzNDssCiYjNDM7CQkudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSwKJiM0MzsJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0hEQlNTLAomIzQzOwkJLm1hdGNoZXMgPSBoYXNfdmhlX2hkYnNzLAomIzQzOwkJQVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSERCU1MpCiYjNDM7CX0sCiAJewogCQkuZGVzYyA9ICYjMzQ7Q1JDMzIgaW5zdHJ1Y3Rpb25zJiMzNDssCiAJCS5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0NSQzMyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWcKaW5kZXggNDQ5MTU0ZjlhNDg1MmQuLmRiODQ4N2JmNzM4Yjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL0tjb25maWcKQEAgLTM0LDYgJiM0MzszNCw3IEBAIG1lbnVjb25maWcgS1ZNCiAJc2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1MKIAlzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNCiAJc2VsZWN0IEhBVkVfS1ZNX1ZDUFVfUlVOX1BJRF9DSEFOR0UKJiM0MzsJc2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJCiAJc2VsZWN0IFNDSEVEX0lORk8KIAlzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFMKIAlzZWxlY3QgS1ZNX0dVRVNUX01FTUZECmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZSBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlCmluZGV4IDU5NjEyZDJmMjc3YzFkLi42ZmFhY2Q4NTczNDZiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUKQEAgLTI0LDcgJiM0MzsyNCw3IEBAIGt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcCiAJIHZnaWMvdmdpYy1tbWlvLm8gdmdpYy92Z2ljLW1taW8tdjIubyBcCiAJIHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZpY2UubyBcCiAJIHZnaWMvdmdpYy1pdHMubyB2Z2ljL3ZnaWMtZGVidWcubyB2Z2ljL3ZnaWMtdjMtbmVzdGVkLm8gXAotCSB2Z2ljL3ZnaWMtdjUubwomIzQzOwkgdmdpYy92Z2ljLXY1Lm8gZGlydHlfYml0Lm8KIAoga3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgJiM0Mzs9IHBtdS1lbXVsLm8gcG11Lm8KIGt2bS0kKENPTkZJR19BUk02NF9QVFJfQVVUSCkgICYjNDM7PSBwYXV0aC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCmluZGV4IDUwYWRmZmY3NWJlODJlLi5kYzFhNDYyOWFhZWI5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXJtLmMKQEAgLTQyLDYgJiM0Mzs0Miw3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9uZXN0ZWQuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3Brdm0uaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX3B0cmF1dGguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2t2bV9kaXJ0eV9iaXQuaCZndDsKICNpbmNsdWRlICZsdDthc20vc2VjdGlvbnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vc3RhY2t0cmFjZS9udmhlLmgmZ3Q7CiAKQEAgLTIzMDcsNiAmIzQzOzIzMDgsNyBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKQogCiAJa3ZtX3ZnaWNfY3B1X3VwKCk7CiAJa3ZtX3RpbWVyX2NwdV91cCgpOwomIzQzOwlrdm1faGFjZGJzX2NwdV91cCgpOwogCiAJcHJlZW1wdF9lbmFibGUoKTsKIApAQCAtMjMxNSw2ICYjNDM7MjMxNyw3IEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiAKIHZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKIHsKJiM0MzsJa3ZtX2hhY2Ric19jcHVfZG93bigpOwogCWt2bV90aW1lcl9jcHVfZG93bigpOwogCWt2bV92Z2ljX2NwdV9kb3duKCk7CiAKQEAgLTI0ODEsNiAmIzQzOzI0ODQsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3N1YnN5c3RlbXModm9pZCkKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAomIzQzOwlrdm1faGFjZGJzX2luaXQoKTsKJiM0MzsKIAlrdm1fcmVnaXN0ZXJfcGVyZl9jYWxsYmFja3MoKTsKIAogCWVyciA9IGt2bV9oeXBfdHJhY2VfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMTkyODllYTczZDk2ZDkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYwpAQCAtMCwwICYjNDM7MSw0MTEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC4KJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgJmx0O2xlby5icmFzQGFybS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fZGlydHlfYml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tjb25maWcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwomIzQzOwomIzQzO0RFRklORV9QRVJfQ1BVKHN0cnVjdCBoYWNkYnMsIGhhY2Ric19wY3ApID0gewomIzQzOwkuc3RhdHVzID0gSEFDREJTX09GRiwKJiM0MzsJLnNpemUgPSAwLAomIzQzO307CiYjNDM7CiYjNDM7LyogSERCU1MgZW50cnkgZmllbGQgZGVmaW5pdGlvbnMgKi8KJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1ZBTElEIEJJVCgwKQomIzQzOyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9TSElGVCAoMSkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfTUFTSyAoR0VOTUFTSygzLCAxKSkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0woeCkgXAomIzQzOwkoKCh4KSAmbHQ7Jmx0OyBIREJTU19FTlRSWV9UVFdMX1NISUZUKSAmYW1wOyBIREJTU19FTlRSWV9UVFdMX01BU0spCiYjNDM7I2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1JFU1YgSERCU1NfRU5UUllfVFRXTCgtNCkKJiM0MzsjZGVmaW5lIEhEQlNTX0VOVFJZX0lQQSBHRU5NQVNLX1VMTCg1NSwgMTIpCiYjNDM7CiYjNDM7c3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBpbnQgaGFjZGJzaXJxID0gLTE7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGFjZGJzX3N0YXJ0KHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpCiYjNDM7ewomIzQzOwl1NjQgYnI7CiYjNDM7CS8qIEVhY2ggZW50cnkgaXMgOCBieXRlcyAqLwomIzQzOwlpbnQgc2l6ZV9iID0gc2l6ZSAqIHNpemVvZihod19lbnRyaWVzWzBdKTsKJiM0MzsJaW50IHNpemVfcDIgPSBtYXgocm91bmR1cF9wb3dfb2ZfdHdvKHNpemVfYiksIFBBR0VfU0laRSk7CiYjNDM7CiYjNDM7CS8qIElmIG5vdCB1c2luZyB0aGUgZnVsbCBzaXplIG9mIHRoZSBhcnJheSwgcHV0IGEgc3RvcCBlbnRyeSBhdCB0aGUgZW5kICovCiYjNDM7CWlmIChzaXplX2IgJmx0OyBzaXplX3AyKQomIzQzOwkJaHdfZW50cmllc1tzaXplXSA9IEhEQlNTX0VOVFJZX1ZBTElEIHwgSERCU1NfRU5UUllfVFRXTF9SRVNWOwomIzQzOwomIzQzOwlzeXNyZWdfY2xlYXJfc2V0X3MoU1lTX0hBQ0RCU0NPTlNfRUwyLAomIzQzOwkJCSAgIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT04gfCBIQUNEQlNDT05TX0VMMl9JTkRFWCwgMCk7CiYjNDM7CiYjNDM7CWJyID0gKHZpcnRfdG9fcGh5cyhod19lbnRyaWVzKSAmYW1wOyBIQUNEQlNCUl9FTDJfQkFERFJfTUFTSykgfAomIzQzOwkgICAgIEZJRUxEX1BSRVAoSEFDREJTQlJfRUwyX1NaLCBpbG9nMihzaXplX3AyKSAtIDEyKSB8CiYjNDM7CSAgICAgRklFTERfUFJFUChIQUNEQlNCUl9FTDJfRU4sIDEpOwomIzQzOwomIzQzOwl0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX1JVTk5JTkcpOwomIzQzOwl0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnNpemUsIHNpemUpOwomIzQzOwl3cml0ZV9zeXNyZWdfcyhiciwgU1lTX0hBQ0RCU0JSX0VMMik7CiYjNDM7CWlzYigpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhhY2Ric19zdG9wKHZvaWQpCiYjNDM7ewomIzQzOwl3cml0ZV9zeXNyZWdfcygwLCBTWVNfSEFDREJTQlJfRUwyKTsKJiM0MzsJaXNiKCk7CiYjNDM7CiYjNDM7CWlmICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfRVJST1IpIHsKJiM0MzsJCS8qIEluIGNhc2Ugb2YgZXJyb3IsIEhBQ0RCU0NPTlNfRUwyLklOREVYIHNob3VsZCBwb2ludCB0aGUgZmF1bHR5IGVudHJ5ICovCiYjNDM7CQl1NjQgY29ucyA9IHJlYWRfc3lzcmVnX3MoU1lTX0hBQ0RCU0NPTlNfRUwyKTsKJiM0MzsJCWludCBpZHggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpOwomIzQzOwomIzQzOwkJdGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTsKJiM0MzsKJiM0MzsJCXJldHVybiBpZHg7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRoaXNfY3B1X3JlYWQoaGFjZGJzX3BjcC5zaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDbGVhcnMgZGlydHktYml0cyBmb3IgYW4gYXJyYXkgb2YgcGFnZXMgKGh3X2VudHJpZXMpIHVzaW5nIEhBQ0RCUwomIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBjbGVhbmVkIGZyb20gdGhlIGFycmF5LiBJZiByZXR1cm5zIHZhbHVlICZsdDsgc2l6ZSwKJiM0MzsgKgl0aGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHByb2Nlc3NpbmcuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBkaXJ0eV9iaXRfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmh3X2VudHJpZXMsIGludCBzaXplKQomIzQzO3sKJiM0MzsJdTY0IGhjcl9lbDI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXByZWVtcHRfZGlzYWJsZSgpOwomIzQzOwomIzQzOwloY3JfZWwyID0gcmVhZF9zeXNyZWcoSENSX0VMMik7CiYjNDM7CXdyaXRlX3N5c3JlZyhoY3JfZWwyIHwgSENSX0VMMl9WTSwgSENSX0VMMik7CiYjNDM7CV9fbG9hZF9zdGFnZTIoJmFtcDtrdm0tJmd0O2FyY2gubW11KTsKJiM0MzsKJiM0MzsJaGFjZGJzX3N0YXJ0KGh3X2VudHJpZXMsIHNpemUpOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQl3ZmkoKTsKJiM0MzsJfSB3aGlsZSAodGhpc19jcHVfcmVhZChoYWNkYnNfcGNwLnN0YXR1cykgPT0gSEFDREJTX1JVTk5JTkcpOwomIzQzOwomIzQzOwlyZXQgPSBoYWNkYnNfc3RvcCgpOwomIzQzOwomIzQzOwl3cml0ZV9zeXNyZWcoaGNyX2VsMiwgSENSX0VMMik7CiYjNDM7CWlzYigpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBObyBEU0IgaXMgbmVlZGVkIGhlcmUsIGFzIGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KCkgdGhhdCBoYXBwZW5zCiYjNDM7CSAqIGxhdGVyIGluIGdlbmVyaWMgZGlydHktY2xlYW5pbmcgY29kZSBhbHJlYWR5IHBlcmZvcm1zIGEgRFNCIGJlZm9yZQomIzQzOwkgKiBkb2luZyB0aGUgVExCSS4KJiM0MzsJICovCiYjNDM7CiYjNDM7CXByZWVtcHRfZW5hYmxlKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBoZGJzc190b19iaXRtYXAodTY0ICpoZGJzc19hcnJheSwgaW50IHN0YXJ0LCBpbnQgZW5kLAomIzQzOwkJCQkgICB1bnNpZ25lZCBsb25nICpkaXJ0eV9iaXRtYXAsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQpCiYjNDM7ewomIzQzOwl1NjQgdyA9IChncGFfdG9fZ2ZuKGhkYnNzX2FycmF5W3N0YXJ0XSkgLSBvZmZzZXQpIC8gQklUU19QRVJfTE9ORzsKJiM0MzsJdTY0IG1hc2sgPSAwOwomIzQzOwlpbnQgaWR4ID0gc3RhcnQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXU2NCBlbnRyeSA9IChncGFfdG9fZ2ZuKGhkYnNzX2FycmF5W2lkeF0pIC0gb2Zmc2V0KTsKJiM0MzsKJiM0MzsJCWlmIChlbnRyeSAvIEJJVFNfUEVSX0xPTkcgPT0gdykgewomIzQzOwkJCW1hc2sgfD0gQklUKGVudHJ5ICUgQklUU19QRVJfTE9ORyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWF0b21pY19sb25nX29yKG1hc2ssIChhdG9taWNfbG9uZ190ICopJmFtcDtkaXJ0eV9iaXRtYXBbd10pOwomIzQzOwkJCXcgPSBlbnRyeSAvIEJJVFNfUEVSX0xPTkc7CiYjNDM7CQkJbWFzayA9IEJJVChlbnRyeSAlIEJJVFNfUEVSX0xPTkcpOwomIzQzOwkJfQomIzQzOwl9IHdoaWxlICgmIzQzOyYjNDM7aWR4ICZsdDsgZW5kKTsKJiM0MzsJYXRvbWljX2xvbmdfb3IobWFzaywgKGF0b21pY19sb25nX3QgKikmYW1wO2RpcnR5X2JpdG1hcFt3XSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsCiYjNDM7CQkJCXU2NCB0dHdsLCBpbnQgaWR4LCBpbnQgZW50cmllc19zeikKJiM0Mzt7CiYjNDM7CXdoaWxlIChpZHggJmx0OyBlbnRyaWVzX3N6KSB7CiYjNDM7CQlpbnQgaiA9IF9fZmZzKCptYXNrKTsKJiM0MzsJCXU2NCBhID0gZ2ZuX3RvX2dwYShvZmZzZXQgJiM0Mzsgaik7CiYjNDM7CiYjNDM7CQlod19lbnRyaWVzW2lkeCYjNDM7JiM0MztdID0gKGEgJmFtcDsgSERCU1NfRU5UUllfSVBBKSB8CiYjNDM7CQkJCSAgICB0dHdsIHwKJiM0MzsJCQkJICAgIEhEQlNTX0VOVFJZX1ZBTElEOwomIzQzOwomIzQzOwkJKm1hc2sgJmFtcDs9IH5CSVQoaik7CiYjNDM7CQlpZiAoISptYXNrKQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBpZHg7CiYjNDM7fQomIzQzOwomIzQzO2ludCBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJICAgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2csCiYjNDM7CQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwKJiM0MzsJCQkgICAgICAgYm9vbCAqZmx1c2gpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IGlkeCA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcCA9IG1lbXNsb3QtJmd0O2RpcnR5X2JpdG1hcDsKJiM0MzsJdTY0ICpod19lbnRyaWVzOwomIzQzOwljb25zdCBpbnQgZW50cmllc19zeiA9IFBBR0VfU0laRSAvIHNpemVvZigqaHdfZW50cmllcyk7CiYjNDM7CXU2NCB0dHdsOwomIzQzOwl1NjQgc3RhcnQsIGVuZDsKJiM0MzsJZ2ZuX3QgYmFzZV9nZm47CiYjNDM7CWdwYV90IHNwbGl0X2VuZCA9IDA7CiYjNDM7CiYjNDM7CWh3X2VudHJpZXMgPSBrbWFsbG9jX29ianModTY0LCBlbnRyaWVzX3N6LCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFod19lbnRyaWVzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXR0d2wgPSBIREJTU19FTlRSWV9UVFdMKEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwpOwomIzQzOwomIzQzOwlpZiAobG9nKSB7CiYjNDM7CQlzdGFydCA9IGxvZy0mZ3Q7Zmlyc3RfcGFnZSAvIEJJVFNfUEVSX0xPTkc7CiYjNDM7CQllbmQgPSBzdGFydCAmIzQzOyBESVZfUk9VTkRfVVAobG9nLSZndDtudW1fcGFnZXMsIEJJVFNfUEVSX0xPTkcpOwomIzQzOwkJYmFzZV9nZm4gPSBtZW1zbG90LSZndDtiYXNlX2dmbiAmIzQzOyBsb2ctJmd0O2ZpcnN0X3BhZ2UgJSBCSVRTX1BFUl9MT05HOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3RhcnQgPSAwOwomIzQzOwkJZW5kID0ga3ZtX2RpcnR5X2JpdG1hcF9ieXRlcyhtZW1zbG90KSAvIHNpemVvZihsb25nKTsKJiM0MzsJCWJhc2VfZ2ZuID0gbWVtc2xvdC0mZ3Q7YmFzZV9nZm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJd3JpdGVfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IHN0YXJ0OyBpICZsdDsgZW5kOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdW5zaWduZWQgbG9uZyBtYXNrOwomIzQzOwkJZ2ZuX3Qgb2Zmc2V0OwomIzQzOwkJYXRvbWljX2xvbmdfdCAqcDsKJiM0MzsKJiM0MzsJCWlmIChsb2cpIHsgLyogQ2xlYW4gb25seSB3aGF0IGlzIGluIHRoZSBpbnB1dCBiaXRtYXAgKi8KJiM0MzsJCQltYXNrID0gYml0bWFwW2ldOwomIzQzOwkJCWlmICghbWFzaykKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJcCA9IChhdG9taWNfbG9uZ190ICopJmFtcDtkaXJ0eV9iaXRtYXBbaV07CiYjNDM7CQkJbWFzayAmYW1wOz0gYXRvbWljX2xvbmdfZmV0Y2hfYW5kbm90KG1hc2ssIHApOwomIzQzOwkJfSBlbHNlIHsgLyogQ2xlYW4gZXZlcnl0aGluZyAqLwomIzQzOwkJCWlmICghZGlydHlfYml0bWFwW2ldKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQltYXNrID0geGNoZygmYW1wO2RpcnR5X2JpdG1hcFtpXSwgMCk7CiYjNDM7CQkJYml0bWFwW2ldID0gbWFzazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICghbWFzaykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCW9mZnNldCA9IGJhc2VfZ2ZuICYjNDM7IGkgKiBCSVRTX1BFUl9MT05HOwomIzQzOwomIzQzOwkJaWYgKGt2bV9kaXJ0eV9sb2dfbWFudWFsX3Byb3RlY3RfYW5kX2luaXRfc2V0KGt2bSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChvZmZzZXQgJiM0MzsgQklUU19QRVJfTE9ORyAmZ3Q7IHNwbGl0X2VuZCkpIHsKJiM0MzsJCQlncGFfdCBzdGFydCA9IGdmbl90b19ncGEob2Zmc2V0ICYjNDM7IF9fZmZzKG1hc2spKTsKJiM0MzsJCQlncGFfdCBlbmQgPSBnZm5fdG9fZ3BhKG9mZnNldCAmIzQzOyBfX2ZscyhtYXNrKSAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJCQlrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoa3ZtLCBzdGFydCwgZW5kKTsKJiM0MzsJCQlzcGxpdF9lbmQgPSBncGFfdG9fZ2ZuKEFMSUdOX0RPV04oZW5kLCBQTURfU0laRSkgJiM0MzsgUE1EX1NJWkUgLSAxKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWRvIHsKJiM0MzsJCQlpZHggPSBtYXNrX3RvX2hkYnNzKCZhbXA7bWFzaywgaHdfZW50cmllcywgb2Zmc2V0LCB0dHdsLCBpZHgsIGVudHJpZXNfc3opOwomIzQzOwkJCWlmIChpZHggJmd0Oz0gZW50cmllc19zeikgewomIzQzOwkJCQlyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpOwomIzQzOwkJCQkqZmx1c2ggPSAqZmx1c2ggfHwgcmV0ICZndDsgMDsKJiM0MzsJCQkJaWYgKHJldCAhPSBpZHgpIHsKJiM0MzsJCQkJCS8qIFNhdmUgYml0cyBub3QgY29udmVydGVkIGJhY2sgdG8gYml0bWFwICovCiYjNDM7CQkJCQlhdG9taWNfbG9uZ19vcihtYXNrLCAoYXRvbWljX2xvbmdfdCAqKSZhbXA7ZGlydHlfYml0bWFwW2ldKTsKJiM0MzsJCQkJCWdvdG8gb3V0X2VycjsKJiM0MzsJCQkJfQomIzQzOwkJCQlpZHggPSAwOwomIzQzOwkJCX0KJiM0MzsJCX0gd2hpbGUgKG1hc2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpZHggIT0gMCkgewomIzQzOwkJcmV0ID0gZGlydHlfYml0X2NsZWFyKGt2bSwgaHdfZW50cmllcywgaWR4KTsKJiM0MzsJCSpmbHVzaCA9ICpmbHVzaCB8fCByZXQgJmd0OyAwOwomIzQzOwl9CiYjNDM7b3V0X2VycjoKJiM0MzsJaWYgKHVubGlrZWx5KHJldCAhPSBpZHgpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogSW4gY2FzZSB0aGVyZSBpcyBhbiBlcnJvciBhbmQgbm90IGFsbCBlbnRyaWVzIGluIEhBQ0RCUyBnZXQKJiM0MzsJCSAqIGNsZWFuZWQsIHdlIGhhdmUgdG8gbWFyayB0aGUgZGlydHkgYml0cyBiYWNrIGluIHRoZSBiaXRtYXAsCiYjNDM7CQkgKiBhcyB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgc29mdHdhcmUgcm91dGluZS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBFbnRyaWVzIHNob3VsZCBiZSBpbiBvcmRlciwgc2luY2UgdGhleSB3ZXJlIGV4dHJheGVkIGZyb20KJiM0MzsJCSAqIHRoZSBkaXJ0eS1iaXRtYXAsIHNvIGJhdGNoaW5nIHRoZSBhdG9taWMgd3JpdGVzIGlzIGVmZmljaWVudC4KJiM0MzsJCSAqLwomIzQzOwomIzQzOwkJaWYgKHJldCAmbHQ7IGlkeCkKJiM0MzsJCQloZGJzc190b19iaXRtYXAoaHdfZW50cmllcywgcmV0LCBpZHgsIGRpcnR5X2JpdG1hcCwgbWVtc2xvdC0mZ3Q7YmFzZV9nZm4pOwomIzQzOwomIzQzOwkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJfQomIzQzOwomIzQzOwl3cml0ZV91bmxvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJa2ZyZWUoaHdfZW50cmllcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsCiYjNDM7CQkJCWludCAqbnJfZW50cmllc19yZXNldCkKJiM0Mzt7CiYjNDM7CXU2NCAqaHdfZW50cmllczsKJiM0MzsJdTY0IHNsb3Rfb2Zmc2V0ID0gMDsKJiM0MzsJdTY0IHR0d2w7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CXUzMiBzbG90ID0gLTE7CiYjNDM7CiYjNDM7CWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKJiM0MzsJCXJldHVybiAtRUlOVFI7CiYjNDM7CiYjNDM7CXR0d2wgPSBIREJTU19FTlRSWV9UVFdMKEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwpOwomIzQzOwomIzQzOwlod19lbnRyaWVzID0ga21hbGxvYyhtYXgocmluZy0mZ3Q7c2l6ZSAqIHNpemVvZih1NjQpLCBQQUdFX1NJWkUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFod19lbnRyaWVzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyByaW5nLSZndDtzaXplOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmVudHJ5OwomIzQzOwkJZ2ZuX3QgZ2ZuOwomIzQzOwomIzQzOwkJZW50cnkgPSAmYW1wO3JpbmctJmd0O2RpcnR5X2dmbnNbKHJpbmctJmd0O3Jlc2V0X2luZGV4ICYjNDM7IGkpICZhbXA7CiYjNDM7CQkJCQkgIChyaW5nLSZndDtzaXplIC0gMSldOwomIzQzOwomIzQzOwkJaWYgKCFrdm1fZGlydHlfZ2ZuX2hhcnZlc3RlZChlbnRyeSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAoZW50cnktJmd0O3Nsb3QgIT0gc2xvdCkgewomIzQzOwkJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiYjNDM7CiYjNDM7CQkJbWVtc2xvdCA9IGt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgZW50cnktJmd0O3Nsb3QpOwomIzQzOwkJCXNsb3QgPSBlbnRyeS0mZ3Q7c2xvdDsKJiM0MzsJCQlzbG90X29mZnNldCA9IG1lbXNsb3QtJmd0O2Jhc2VfZ2ZuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZ2ZuID0gc2xvdF9vZmZzZXQgJiM0MzsgZW50cnktJmd0O29mZnNldDsKJiM0MzsKJiM0MzsJCWh3X2VudHJpZXNbaV0gPSAoZ2ZuX3RvX2dwYShnZm4pICZhbXA7IEhEQlNTX0VOVFJZX0lQQSkgfAomIzQzOwkJCQl0dHdsIHwgSERCU1NfRU5UUllfVkFMSUQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZGlydHlfYml0X2NsZWFyKGt2bSwgaHdfZW50cmllcywgaSk7CiYjNDM7CiYjNDM7CS8qIFNldCBhcyBpbnZhbGlkIGFsbCBzdWNjZXNzZnVsbHkgY2xlYW5lZCBlbnRyaWVzICovCiYjNDM7CWZvciAoaW50IGogPSAwOyBqICZsdDsgcmV0OyBqJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmVudHJ5OwomIzQzOwomIzQzOwkJZW50cnkgPSAmYW1wO3JpbmctJmd0O2RpcnR5X2dmbnNbKHJpbmctJmd0O3Jlc2V0X2luZGV4ICYjNDM7IGopICZhbXA7CiYjNDM7CQkJCQkgIChyaW5nLSZndDtzaXplIC0gMSldOwomIzQzOwomIzQzOwkJa3ZtX2RpcnR5X2dmbl9zZXRfaW52YWxpZChlbnRyeSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogSW4gY2FzZSBvZiBlcnJvciwgdHJ5IHNvZnR3YXJlIGNsZWFuaW5nIGZyb20gdGhlIGZhdWx0aW5nIGVudHJ5ICovCiYjNDM7CXJpbmctJmd0O3Jlc2V0X2luZGV4ICYjNDM7PSByZXQ7CiYjNDM7CSpucl9lbnRyaWVzX3Jlc2V0ICYjNDM7PSByZXQ7CiYjNDM7CiYjNDM7CWtmcmVlKGh3X2VudHJpZXMpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgaSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgaGFjZGJzaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcGNwdSkKJiM0Mzt7CiYjNDM7CXU2NCBjb25zID0gcmVhZF9zeXNyZWdfcyhTWVNfSEFDREJTQ09OU19FTDIpOwomIzQzOwl1bnNpZ25lZCBsb25nIGVyciA9IEZJRUxEX0dFVChIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OLCBjb25zKTsKJiM0MzsKJiM0MzsJc3dpdGNoIChlcnIpIHsKJiM0MzsJY2FzZSBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OX05PRjoKJiM0MzsJCXRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfSURMRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OX0lQQUhBQ0Y6CiYjNDM7CQkvKiBXaGVuIHNpemUgbm90IGEgcG93ZXIgb2YgdHdvICZndDs9IDRrLCBleGl0IHdpdGggcmVzZXJ2ZWQgVFRMVyAqLwomIzQzOwkJaW50IGluZGV4ID0gRklFTERfR0VUKEhBQ0RCU0NPTlNfRUwyX0lOREVYLCBjb25zKTsKJiM0MzsKJiM0MzsJCWlmIChpbmRleCAmZ3Q7PSB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc2l6ZSkpIHsKJiM0MzsJCQl0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9TVFJVQ1RGOgomIzQzOwljYXNlIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT05fSVBBRjoKJiM0MzsJCXRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfRVJST1IpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGt2bV9oYWNkYnNfY3B1X3VwKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoaGFjZGJzaXJxICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZW5hYmxlX3BlcmNwdV9pcnEoaGFjZGJzaXJxLCBJUlFfVFlQRV9MRVZFTF9ISUdIKTsKJiM0MzsJdGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBrdm1faGFjZGJzX2NwdV9kb3duKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoaGFjZGJzaXJxICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZGlzYWJsZV9wZXJjcHVfaXJxKGhhY2Ric2lycSk7CiYjNDM7CXRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfT0ZGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJCiYjNDM7c3RhdGljIGludCBfX2luaXQgaGFjZGJzX2FjcGlfZ2V0X2lycSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCAqZ2ljYzsKJiM0MzsJdTMyIGdzaTsKJiM0MzsJaW50IGlycTsKJiM0MzsKJiM0MzsJZ2ljYyA9IGFjcGlfY3B1X2dldF9tYWR0X2dpY2Moc21wX3Byb2Nlc3Nvcl9pZCgpKTsKJiM0MzsJaWYgKGdpY2MtJmd0O2hlYWRlci5sZW5ndGggJmx0OyBBQ1BJX01BRFRfR0lDQ19IQUNEQlNJUlEpCiYjNDM7CQlyZXR1cm4gLUVOWElPOwomIzQzOwomIzQzOwlnc2kgPSAgZ2ljYy0mZ3Q7aGFjZGJzaXJxX2dzaTsKJiM0MzsKJiM0MzsJaXJxID0gYWNwaV9yZWdpc3Rlcl9nc2koTlVMTCwgZ3NpLCBBQ1BJX0xFVkVMX1NFTlNJVElWRSwgQUNQSV9BQ1RJVkVfSElHSCk7CiYjNDM7CWlmIChpcnEgJmx0OyAwKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7QUNQSTogVW5hYmxlIHRvIHJlZ2lzdGVyIEhBQ0RCUyBpbnRlcnJ1cHQ6ICVkXG4mIzM0OywgZ3NpKTsKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGlycTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIGhhY2Ric19hY3BpX2dldF9pcnEoKSAoLUVOWElPKQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3ZvaWQgX19pbml0IGt2bV9oYWNkYnNfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGlycTsKJiM0MzsKJiM0MzsJLyogRkVBVF9IQUNEQlMgaXMgb25seSBzdXBwb3J0ZWQgaWYgTGludXggcnVucyBpbiBFTDIgKFZIRSkgKi8KJiM0MzsJaWYgKCFzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKCkgfHwgIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpcnEgPSBoYWNkYnNfYWNwaV9nZXRfaXJxKCk7CiYjNDM7CWlmIChpcnEgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocmVxdWVzdF9wZXJjcHVfaXJxKGlycSwgaGFjZGJzaXJxX2hhbmRsZXIsICYjMzQ7SEFDREJTSVJRJiMzNDssICZhbXA7aGFjZGJzX3BjcCkgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwloYWNkYnNpcnEgPSBpcnE7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMKaW5kZXggOTFhN2RmYWQ2Njg2NjAuLmUxNjcyOWYwYjdiZDI0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMKQEAgLTczMSw5ICYjNDM7NzMxLDEzIEBAIHN0YXRpYyBpbnQgc3RhZ2UyX3NldF9wcm90X2F0dHIoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIGVudW0ga3ZtX3BndGFibGVfcHJvdCBwCiAJaWYgKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9SKQogCQlhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfUjsKIAotCWlmIChwcm90ICZhbXA7IEtWTV9QR1RBQkxFX1BST1RfVykKJiM0MzsJaWYgKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7CiAJCWF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XOwogCiYjNDM7CQlpZiAocGd0LSZndDtmbGFncyAmYW1wOyBLVk1fUEdUQUJMRV9TMl9EQk0pCiYjNDM7CQkJYXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk07CiYjNDM7CX0KJiM0MzsKIAlpZiAoIWt2bV9scGEyX2lzX2VuYWJsZWQoKSkKIAkJYXR0ciB8PSBGSUVMRF9QUkVQKEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1NILCBzaCk7CiAKQEAgLTEzNjcsOSAmIzQzOzEzNzEsMTMgQEAgaW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsCiAJaWYgKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9SKQogCQlzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SOwogCi0JaWYgKHByb3QgJmFtcDsgS1ZNX1BHVEFCTEVfUFJPVF9XKQomIzQzOwlpZiAocHJvdCAmYW1wOyBLVk1fUEdUQUJMRV9QUk9UX1cpIHsKIAkJc2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfVzsKIAomIzQzOwkJaWYgKHBndC0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX1BHVEFCTEVfUzJfREJNKQomIzQzOwkJCXNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk07CiYjNDM7CX0KJiM0MzsKIAlyZXQgPSBzdGFnZTJfc2V0X3huX2F0dHIocHJvdCwgJmFtcDt4bik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTE1ODUsNiAmIzQzOzE1OTMsOSBAQCBpbnQgX19rdm1fcGd0YWJsZV9zdGFnZTJfaW5pdChzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwKIAlpZiAoIXBndC0mZ3Q7cGdkKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlpZiAoc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpCiYjNDM7CQlmbGFncyB8PSBLVk1fUEdUQUJMRV9TMl9EQk07CiYjNDM7CiAJcGd0LSZndDtpYV9iaXRzCQk9IGlhX2JpdHM7CiAJcGd0LSZndDtzdGFydF9sZXZlbAk9IHN0YXJ0X2xldmVsOwogCXBndC0mZ3Q7bW1fb3BzCQk9IG1tX29wczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL21tdS5jIGIvYXJjaC9hcm02NC9rdm0vbW11LmMKaW5kZXggNmM5NDFhYWExMGM2MzkuLjJmOWQ5MGMzNTY2OGI5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2t2bS9tbXUuYwpAQCAtMTE3LDggJiM0MzsxMTcsOCBAQCBzdGF0aWMgYm9vbCBuZWVkX3NwbGl0X21lbWNhY2hlX3RvcHVwX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtKQogCXJldHVybiBrdm1fbW11X21lbW9yeV9jYWNoZV9ucl9mcmVlX29iamVjdHMoY2FjaGUpICZsdDsgbWluOwogfQogCi1zdGF0aWMgaW50IGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHBoeXNfYWRkcl90IGFkZHIsCi0JCQkJICAgIHBoeXNfYWRkcl90IGVuZCkKJiM0MztpbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkciwKJiM0MzsJCQkgICAgIHBoeXNfYWRkcl90IGVuZCkKIHsKIAlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlOwogCXN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0OwpAQCAtMTAyNyw4ICYjNDM7MTAyNywxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCSpwZXJfY3B1X3B0cihtbXUtJmd0O2xhc3RfdmNwdV9yYW4sIGNwdSkgPSAtMTsKIAotCSAvKiBUaGUgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLwotCW1tdS0mZ3Q7c3BsaXRfcGFnZV9jaHVua19zaXplID0gS1ZNX0FSTV9FQUdFUl9TUExJVF9DSFVOS19TSVpFX0RFRkFVTFQ7CiYjNDM7CSAvKiBUaGUgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBpZiBzeXN0ZW0gaGFzIG5vIEhEQlNTICovCiYjNDM7CWlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSkKJiM0MzsJCW1tdS0mZ3Q7c3BsaXRfcGFnZV9jaHVua19zaXplID0gMjU2ICogMTAyNCAqIFBBR0VfU0laRTsKJiM0MzsJZWxzZQomIzQzOwkJbW11LSZndDtzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDsKJiM0MzsKIAltbXUtJmd0O3NwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPOwogCiAJbW11LSZndDtwZ2RfcGh5cyA9IF9fcGEocGd0LSZndDtwZ2QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzIGIvYXJjaC9hcm02NC90b29scy9jcHVjYXBzCmluZGV4IDliODVhODRmNmZkNDk0Li5iZDJjMGJiOThkYTYxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcwpAQCAtNjksOCAmIzQzOzY5LDEwIEBAIEhBU19WQTUyCiBIQVNfVklSVF9IT1NUX0VYVE4KIEhBU19XRlhUCiBIQVNfWE5YCiYjNDM7SEFTX0hEQlNTCiBIQUZUCiBIV19EQk0KJiM0MztIQUNEQlMKIEtWTV9IVkhFCiBLVk1fUFJPVEVDVEVEX01PREUKIE1JU01BVENIRURfQ0FDSEVfVFlQRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC90b29scy9zeXNyZWcgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZwppbmRleCBiYzE3ODhiMTY2MmI3Ni4uN2I3YzNkNmEwZjAzMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnCkBAIC00NjM0LDYgJiM0Mzs0NjM0LDM2IEBAIEZpZWxkCTc6NglTTDAKIEZpZWxkCTU6MAlUMFNaCiBFbmRTeXNyZWcKIAomIzQzO1N5c3JlZwlIQUNEQlNCUl9FTDIJMwk0CTIJMwk0CiYjNDM7UmVzMAk2Mzo1NgomIzQzO0ZpZWxkCTU1OjEyCUJBRERSCiYjNDM7RmllbGQJMTEJRU4KJiM0MztSZXMwCTEwOjQKJiM0MztVbnNpZ25lZEVudW0JMzowCVNaCiYjNDM7CTBiMDAwMAk0SwomIzQzOwkwYjAwMDEJOEsKJiM0MzsJMGIwMDEwCTE2SwomIzQzOwkwYjAwMTEJMzJLCiYjNDM7CTBiMDEwMAk2NEsKJiM0MzsJMGIwMTAxCTEyOEsKJiM0MzsJMGIwMTEwCTI1NksKJiM0MzsJMGIwMTExCTUxMksKJiM0MzsJMGIxMDAwCTFNCiYjNDM7CTBiMTAwMQkyTQomIzQzO0VuZEVudW0KJiM0MztFbmRTeXNyZWcKJiM0MzsKJiM0MztTeXNyZWcJSEFDREJTQ09OU19FTDIJMwk0CTIJMwk1CiYjNDM7VW5zaWduZWRFbnVtCTYzOjYyCUVSUl9SRUFTT04KJiM0MzsJMGIwMAlOT0YKJiM0MzsJMGIwMQlTVFJVQ1RGCiYjNDM7CTBiMTAJSVBBRgomIzQzOwkwYjExCUlQQUhBQ0YKJiM0MztFbmRFbnVtCiYjNDM7UmVzMAk2MToxOQomIzQzO0ZpZWxkCTE4OjAJSU5ERVgKJiM0MztFbmRTeXNyZWcKJiM0MzsKIFN5c3JlZwlHQ1NDUl9FTDIJMwk0CTIJNQkwCiBGaWVsZHMJR0NTQ1JfRUx4CiBFbmRTeXNyZWcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaAppbmRleCBiYWVmNTI1MzY3YjVjNC4uZWFlZmI0OTRlZjU5NzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKQEAgLTE0NDksNiAmIzQzOzE0NDksNyBAQCBzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0IHsKIAl1MTYgdHJiZV9pbnRlcnJ1cHQ7CS8qIEFDUEkgNi41ICovCiAJdTE2IGlhZmZpZDsJCS8qIEFDUEkgNi43ICovCiAJdTMyIGlyc19pZDsKJiM0MzsJdTMyIGhhY2Ric2lycV9nc2k7CS8qIEFDUEkgNi5YICovCiB9OwogCiAvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oIGIvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjg0OTI5NzlkNjk0ZTcwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgKQEAgLTAsMCAmIzQzOzEsMzQgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC4KJiM0MzsgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgJmx0O2xlby5icmFzQGFybS5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX0tWTV9ESVJUWV9CSVRfSF9fCiYjNDM7I2RlZmluZSBfX0tWTV9ESVJUWV9CSVRfSF9fCiYjNDM7CiYjNDM7I2lmbmRlZiBDT05GSUdfSEFWRV9LVk1fSFdfRElSVFlfQklUCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCSAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiYjNDM7CQkJCQkgICBzdHJ1Y3Qga3ZtX2NsZWFyX2RpcnR5X2xvZyAqbG9nLAomIzQzOwkJCQkJICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLAomIzQzOwkJCQkJICAgYm9vbCAqZmx1c2gpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVOWElPOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCSAgICBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsCiYjNDM7CQkJCQkgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FTlhJTzsKJiM0Mzt9CiYjNDM7CiYjNDM7I2Vsc2UgLyogQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthc20va3ZtX2RpcnR5X2JpdC5oJmd0OwomIzQzOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfSEFWRV9LVk1fSFdfRElSVFlfQklUICovCiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fS1ZNX0RJUlRZX0JJVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaCBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaAppbmRleCBlYjEwZDg3YWRmN2Q1OS4uMTkwZDk3ZmNlNGE0MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmgKQEAgLTg0LDYgJiM0Mzs4NCwxOCBAQCB2b2lkIGt2bV9kaXJ0eV9yaW5nX3B1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc2xvdCwgdTY0IG9mZnNldCk7CiAKIGJvb2wga3ZtX2RpcnR5X3JpbmdfY2hlY2tfcmVxdWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGt2bV9kaXJ0eV9nZm5faGFydmVzdGVkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pCiYjNDM7ewomIzQzOwlyZXR1cm4gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2dmbi0mZ3Q7ZmxhZ3MpICZhbXA7IEtWTV9ESVJUWV9HRk5fRl9SRVNFVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2ludmFsaWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbikKJiM0Mzt7CiYjNDM7CXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7Z2ZuLSZndDtmbGFncywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpOwomIzQzOwogLyogZm9yIHVzZSBpbiB2bV9vcGVyYXRpb25zX3N0cnVjdCAqLwogc3RydWN0IHBhZ2UgKmt2bV9kaXJ0eV9yaW5nX2dldF9wYWdlKHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZywgdTMyIG9mZnNldCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCBhYjhjZmFlYzgyZDMxZS4uN2VhNmVkN2NlMjAzYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTE2NjksNiAmIzQzOzE2NjksOSBAQCBib29sIGt2bV9hcmNoX3ZjcHVfcHJlZW1wdGVkX2luX2tlcm5lbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fYXJjaF9wcmVfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fYXJjaF9jcmVhdGVfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pOwogCiYjNDM7aW50IGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHBoeXNfYWRkcl90IGFkZHIsCiYjNDM7CQkJICAgICBwaHlzX2FkZHJfdCBlbmQpOwomIzQzOwogI2lmbmRlZiBfX0tWTV9IQVZFX0FSQ0hfVk1fQUxMT0MKIC8qCiAgKiBBbGwgYXJjaGl0ZWN0dXJlcyB0aGF0IHdhbnQgdG8gdXNlIHZ6YWxsb2MgY3VycmVudGx5IGFsc28KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL0tjb25maWcgYi92aXJ0L2t2bS9LY29uZmlnCmluZGV4IDc5NDk3NmI4OGM2Zjk3Li5mODc1N2I1Yjg0YjNlMCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9LY29uZmlnCkBAIC0yMCw2ICYjNDM7MjAsOSBAQCBjb25maWcgSEFWRV9LVk1fSVJRX1JPVVRJTkcKIGNvbmZpZyBIQVZFX0tWTV9ESVJUWV9SSU5HCiAgICAgICAgYm9vbAogCiYjNDM7Y29uZmlnIEhBVkVfS1ZNX0hXX0RJUlRZX0JJVAomIzQzOyAgICAgICBib29sCiYjNDM7CiAjIE9ubHkgc3Ryb25nbHkgb3JkZXJlZCBhcmNoaXRlY3R1cmVzIGNhbiBzZWxlY3QgdGhpcywgYXMgaXQgZG9lc24mIzM5O3QKICMgcHV0IGFueSBleHBsaWNpdCBjb25zdHJhaW50IG9uIHVzZXJzcGFjZSBvcmRlcmluZy4gVGhleSBjYW4gYWxzbwogIyBzZWxlY3QgdGhlIF9BQ1FfUkVMIHZlcnNpb24uCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9kaXJ0eV9yaW5nLmMgYi92aXJ0L2t2bS9kaXJ0eV9yaW5nLmMKaW5kZXggNTcyYjg1NGVkZjc0MGQuLmZlNGU3ZGE2Y2M0YTZhIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9kaXJ0eV9yaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0vZGlydHlfcmluZy5jCkBAIC04LDYgJiM0Mzs4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9rdm0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2RpcnR5X3JpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3ZtX2RpcnR5X2JpdC5oJmd0OwogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9rdm0uaCZndDsKICNpbmNsdWRlICYjMzQ7a3ZtX21tLmgmIzM0OwogCkBAIC01MCwxOCAmIzQzOzUxLDMwIEBAIHN0YXRpYyBib29sIGt2bV9kaXJ0eV9yaW5nX2Z1bGwoc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nKQogCXJldHVybiBrdm1fZGlydHlfcmluZ191c2VkKHJpbmcpICZndDs9IHJpbmctJmd0O3NpemU7CiB9CiAKLXN0YXRpYyB2b2lkIGt2bV9yZXNldF9kaXJ0eV9nZm4oc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdCwgdTY0IG9mZnNldCwgdTY0IG1hc2spCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICoKJiM0MztfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpCiB7Ci0Jc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDsKIAlpbnQgYXNfaWQsIGlkOwogCiAJYXNfaWQgPSBzbG90ICZndDsmZ3Q7IDE2OwogCWlkID0gKHUxNilzbG90OwogCiAJaWYgKGFzX2lkICZndDs9IGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSkgfHwgaWQgJmd0Oz0gS1ZNX1VTRVJfTUVNX1NMT1RTKQotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlkX3RvX21lbXNsb3QoX19rdm1fbWVtc2xvdHMoa3ZtLCBhc19pZCksIGlkKTsKJiM0Mzt9CiAKLQltZW1zbG90ID0gaWRfdG9fbWVtc2xvdChfX2t2bV9tZW1zbG90cyhrdm0sIGFzX2lkKSwgaWQpOwomIzQzO3N0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIHNsb3QpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrdm1fcmVzZXRfZGlydHlfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QsIHU2NCBvZmZzZXQsIHU2NCBtYXNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDsKJiM0MzsKJiM0MzsJbWVtc2xvdCA9IF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoa3ZtLCBzbG90KTsKIAogCWlmICghbWVtc2xvdCB8fCBvZmZzZXQgJmd0Oz0gbWVtc2xvdC0mZ3Q7bnBhZ2VzIHx8CiAJICAgIG9mZnNldCAmIzQzOyBfX2ZscyhtYXNrKSAmZ3Q7PSBtZW1zbG90LSZndDtucGFnZXMpCkBAIC04OCwyMSAmIzQzOzEwMSwxMSBAQCBpbnQga3ZtX2RpcnR5X3JpbmdfYWxsb2Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZGlydHlfZ2ZuX3NldF9pbnZhbGlkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pCi17Ci0Jc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtnZm4tJmd0O2ZsYWdzLCAwKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2RpcnRpZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbikKIHsKIAlnZm4tJmd0O2ZsYWdzID0gS1ZNX0RJUlRZX0dGTl9GX0RJUlRZOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2RpcnR5X2dmbl9oYXJ2ZXN0ZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbikKLXsKLQlyZXR1cm4gc21wX2xvYWRfYWNxdWlyZSgmYW1wO2dmbi0mZ3Q7ZmxhZ3MpICZhbXA7IEtWTV9ESVJUWV9HRk5fRl9SRVNFVDsKLX0KLQogaW50IGt2bV9kaXJ0eV9yaW5nX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLAogCQkJIGludCAqbnJfZW50cmllc19yZXNldCkKIHsKQEAgLTEzMSw2ICYjNDM7MTM0LDkgQEAgaW50IGt2bV9kaXJ0eV9yaW5nX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLAogCSAqLwogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCiYjNDM7CWlmIChrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKGt2bSwgcmluZywgbnJfZW50cmllc19yZXNldCkgJmd0Oz0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCXdoaWxlIChsaWtlbHkoKCpucl9lbnRyaWVzX3Jlc2V0KSAmbHQ7IElOVF9NQVgpKSB7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRUlOVFI7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCBlNDRjMjBjMDQ5NjEwZC4uYTI1Yjg5MDJjZGZjMTcgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtNjUsNiAmIzQzOzY1LDcgQEAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMva3ZtLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDtsaW51eC9rdm1fZGlydHlfcmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdm1fZGlydHlfYml0LmgmZ3Q7CiAKIAogLyogV29yc3QgY2FzZSBidWZmZXIgc2l6ZSBuZWVkZWQgZm9yIGhvbGRpbmcgYW4gaW50ZWdlci4gKi8KQEAgLTIyNjIsNiAmIzQzOzIyNjMsMTAgQEAgc3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZykKIAkJZGlydHlfYml0bWFwX2J1ZmZlciA9IGt2bV9zZWNvbmRfZGlydHlfYml0bWFwKG1lbXNsb3QpOwogCQltZW1zZXQoZGlydHlfYml0bWFwX2J1ZmZlciwgMCwgbik7CiAKJiM0MzsJCWlmIChrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoa3ZtLCBtZW1zbG90LCBOVUxMLAomIzQzOwkJCQkJICAgICBkaXJ0eV9iaXRtYXBfYnVmZmVyLCAmYW1wO2ZsdXNoKSAmZ3Q7PSAwKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwogCQlLVk1fTU1VX0xPQ0soa3ZtKTsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IG4gLyBzaXplb2YobG9uZyk7IGkmIzQzOyYjNDM7KSB7CiAJCQl1bnNpZ25lZCBsb25nIG1hc2s7CkBAIC0yMjgxLDYgJiM0MzsyMjg2LDcgQEAgc3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZykKIAkJS1ZNX01NVV9VTkxPQ0soa3ZtKTsKIAl9CiAKJiM0MztvdXQ6CiAJaWYgKGZsdXNoKQogCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnNfbWVtc2xvdChrdm0sIG1lbXNsb3QpOwogCkBAIC0yMzczLDYgJiM0MzsyMzc5LDEwIEBAIHN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwKIAlpZiAoY29weV9mcm9tX3VzZXIoZGlydHlfYml0bWFwX2J1ZmZlciwgbG9nLSZndDtkaXJ0eV9iaXRtYXAsIG4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAomIzQzOwlpZiAoa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKGt2bSwgbWVtc2xvdCwgbG9nLCBkaXJ0eV9iaXRtYXBfYnVmZmVyLAomIzQzOwkJCQkgICAgICZhbXA7Zmx1c2gpICZndDs9IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAlLVk1fTU1VX0xPQ0soa3ZtKTsKIAlmb3IgKG9mZnNldCA9IGxvZy0mZ3Q7Zmlyc3RfcGFnZSwgaSA9IG9mZnNldCAvIEJJVFNfUEVSX0xPTkcsCiAJCSBuID0gRElWX1JPVU5EX1VQKGxvZy0mZ3Q7bnVtX3BhZ2VzLCBCSVRTX1BFUl9MT05HKTsgbi0tOwpAQCAtMjM5MiwxMiAmIzQzOzI0MDIsMTMgQEAgc3RhdGljIGludCBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3Qoc3RydWN0IGt2bSAqa3ZtLAogCQkqLwogCQlpZiAobWFzaykgewogCQkJZmx1c2ggPSB0cnVlOwomIzQzOwogCQkJa3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKGt2bSwgbWVtc2xvdCwKIAkJCQkJCQkJb2Zmc2V0LCBtYXNrKTsKIAkJfQogCX0KIAlLVk1fTU1VX1VOTE9DSyhrdm0pOwotCiYjNDM7b3V0OgogCWlmIChmbHVzaCkKIAkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzX21lbXNsb3Qoa3ZtLCBtZW1zbG90KTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM3NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDc0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQVJNNjQgS1ZNIEhhcmR3YXJlIERpcnR5IEJpdCBDbGVhbmluZyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIEhhcmR3YXJlIEFzc2lzdGVkIENsZWFuIERpcnR5IEJpdCBTdXBwb3J0IChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0JiMzOTtzIGNsZWFybHkgYWRkaW5nIHRoZSBpbmZyYXN0cnVjdHVyZSBmb3IgaGFyZHdhcmUtYXNzaXN0ZWQgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpLCBhbmQgaXQgbG9va3MgZnVuY3Rpb25hbC4gVGhlIGZpcnN0IG9yZGVyIG9mIGJ1c2luZXNzIGlzIGRlZmluaXRlbHkgZnV6emluZyB0byBlbnN1cmUgcm9idXN0bmVzcy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgaW50cm9kdWNpbmcgYSBoYW5kZnVsIG9mIG5ldyBmaWxlcywgYGFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jYCwgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaGAsIHdoaWNoIGFyZSBhbGwgc3RhbmRhcmQgZm9yIGZlYXR1cmUgYWRkaXRpb25zLiBUaGVuIHdlIGhhdmUgbW9kaWZpY2F0aW9ucyBpbiBleGlzdGluZyBmaWxlcyB0aGF0IGluY2x1ZGUgYGFyY2gvYXJtNjQva3ZtL2FybS5jYCwgYGFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNgLCBgYXJjaC9hcm02NC9rdm0vbW11LmNgLCBgdmlydC9rdm0vZGlydHlfcmluZy5jYCwgYW5kIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gTWFrZXMgc2Vuc2UsIHRoZXkgbmVlZCB0byBob29rIGludG8gdGhlIGV4aXN0aW5nIGt2bSBhcmNoaXRlY3R1cmUuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGtleSBmdW5jdGlvbnMuIEkgc2VlIGEgY29yZSBzZXQgb2YgZnVuY3Rpb25zIGluIGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AgdGhhdCBhcmUgdGhlIGhlYXJ0IG9mIHRoaXM6IGBoYWNkYnNfc3RhcnRgLCBgaGFjZGJzX3N0b3BgLCBgZGlydHlfYml0X2NsZWFyYCwgYGhkYnNzX3RvX2JpdG1hcGAsIGBtYXNrX3RvX2hkYnNzYCwgYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBoYWNkYnNpcnFfaGFuZGxlcmAsIGBrdm1faGFjZGJzX2NwdV91cGAsIGBrdm1faGFjZGJzX2NwdV9kb3duYCwgYGhhY2Ric19hY3BpX2dldF9pcnFgLCBhbmQgYGt2bV9oYWNkYnNfaW5pdGAuIFRoaXMgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIHRoZSBzZXR1cCwgYW5kIHRoZSBjb250cm9sIGZ1bmN0aW9ucy4KClRoZSBvdGhlciBtb2RpZmllZCBmaWxlcyBsb29rIGxpa2Ugc3VwcG9ydCBmdW5jdGlvbnM6CgoqICAgYHZpcnQva3ZtL2RpcnR5X3JpbmcuY2A6ICBgX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgYW5kIGBrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAuICBUaGVzZSBoYW5kbGUgbWVtc2xvdCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgZGlydHkgcmluZy4KKiAgIGBhcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jYDogYHN0YWdlMl9zZXRfcHJvdF9hdHRyYCwgYGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtc2AsIGFuZCBgX19rdm1fcGd0YWJsZV9zdGFnZTJfaW5pdGAuIFRoaXMgaXMgZGVhbGluZyB3aXRoIHRoZSBwYWdlIHRhYmxlIG9wZXJhdGlvbnMgYW5kIHRoZSBuZXcgcGVybWlzc2lvbnMuCiogICBgYXJjaC9hcm02NC9rdm0vbW11LmNgOiBga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzYCBhbmQgYGt2bV9pbml0X3N0YWdlMl9tbXVgLiBUaGlzIHNlZW1zIHJlbGF0ZWQgdG8gdGhlIE1NVSBhbmQgcG90ZW50aWFsbHkgdGhlIGhhbmRsaW5nIG9mIGxhcmdlIHBhZ2VzIGFuZCBzdGFnZTIgTU1VIGluaXRpYWxpemF0aW9uIHdpdGggdGhlIG5ldyBIREJTUy9IQUNEQlMgZnVuY3Rpb25hbGl0eS4KKiAgIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYDogYGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3RgIGFuZCBga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0YC4gVGhlc2UgZnVuY3Rpb25zIHNlZW0gdG8gY29udHJvbCB0aGUgYWNjZXNzIG9yIHBlcm1pc3Npb25zIGZvciB0aGUgZGlydHkgbG9nLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBjb25maWd1cmF0aW9uLiBUaGUgZGVwZW5kZW5jeSBvbiBgQUNQSWAgYmVpbmcgZW5hYmxlZCwgdGhyb3VnaCBgc2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJYCBpcyBpbXBvcnRhbnQuIEFsc28sIHRoZSBgaGFjZGJzX2FjcGlfZ2V0X2lycWAgZnVuY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1c2luZyBgI2lmZGVmIENPTkZJR19BQ1BJYC4gU28gaWYgQUNQSSBpc24mIzM5O3QgZW5hYmxlZCwgdGhpcyBuZXcgZGlydHkgYml0IGZlYXR1cmUgd29uJiMzOTt0IHdvcmsuIFdlIG5lZWQgQUNQSSBzdXBwb3J0IGVuYWJsZWQsIGFuZCBLVk0gb2YgY291cnNlLiBUaW1lIHRvIGxvb2sgYXJvdW5kIGZvciBob3cgSEFWRV9LVk1fSFdfRElSVFlfQklUIGlzIHVzZWQgZWxzZXdoZXJlLCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9LVk1fSFdfRElSVFlfQklUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM2LVx0c2VsZWN0IEhBVkVfS1ZNX1ZDUFVfUlVOX1BJRF9DSEFOR0VcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzc6XHRzZWxlY3QgSEFWRV9LVk1fSFdfRElSVFlfQklUIGlmIEFDUElcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMzgtXHRzZWxlY3QgU0NIRURfSU5GT1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oLTktXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaDoxMDojaWZuZGVmIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVRcbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oLTExLVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oPTIxPXN0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oLTI3LVxuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0Lmg6Mjg6I2Vsc2UgLyogQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVCAqL1xuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgtMjktXG4tLVxuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgtMzEtXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaDozMjojZW5kaWYgLyogQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVCAqL1xuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgtMzMtXG4tLVxudmlydC9rdm0vS2NvbmZpZz0yMD1jb25maWcgSEFWRV9LVk1fRElSVFlfUklOR1xuLS1cbnZpcnQva3ZtL0tjb25maWctMjItXG52aXJ0L2t2bS9LY29uZmlnOjIzOmNvbmZpZyBIQVZFX0tWTV9IV19ESVJUWV9CSVRcbnZpcnQva3ZtL0tjb25maWctMjQtICAgICAgIGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQzMAoJCQkJCQkJb3V0cHV0OiA2MQoJCQkJCQkJdGhvdWdodHM6IDQ1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIEhhcmR3YXJlIERpcnR5IEJpdCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBIQVZFX0tWTV9IV19ESVJUWV9CSVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCYjMzk7cyBhIGhpZGRlbiBib29sLCBzZWxlY3RlZCBieSB0aGUgYEtWTWAgbW9kdWxlLCBhbmQgaXQmIzM5O3MgY29uZGl0aW9uYWwgb24gYEFDUElgIGJlaW5nIGVuYWJsZWQuIFJpZ2h0IGF3YXksIEkgc2VlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggYEtWTWAgYW5kIGBBQ1BJYCBhcmUgaW5jbHVkZWQgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBObyBicmFpbmVyLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBoZXJlIHRvIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGguIEkmIzM5O20gZm9jdXNpbmcgb246CgoqICAgYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYAoqICAgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAKKiAgIGBkaXJ0eV9iaXRfY2xlYXJgCiogICBgaGFjZGJzX3N0YXJ0YAoqICAgYGhhY2Ric19zdG9wYAoqICAgYGhhY2Ric2lycV9oYW5kbGVyYAoqICAgYGt2bV9oYWNkYnNfaW5pdGAKKiAgIGBrdm1faGFjZGJzX2NwdV91cGAKKiAgIGBrdm1faGFjZGJzX2NwdV9kb3duYAoqICAgYGhkYnNzX3RvX2JpdG1hcGAKKiAgIGBtYXNrX3RvX2hkYnNzYAoqICAgYF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgCiogICBga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcXVpY2tseSBjbGFzc2lmeSB0aGVzZSBmb3Igc2NvcGUuIENvbmZpcm1lZCwgYGRpcnR5X2JpdF9jbGVhcmAgaXMgc3RhdGljLiBMb29rcyBsaWtlIGBoYWNkYnNfc3RhcnRgIGFuZCBgaGFjZGJzX3N0b3BgIGFyZSBzdGF0aWMgdG9vLiBgaGRic3NfdG9fYml0bWFwYCBhbmQgYG1hc2tfdG9faGRic3NgIGFyZSBzdGF0aWMgaW5saW5lLCBnb29kLiBgaGFjZGJzaXJxX2hhbmRsZXJgIGlzIHN0YXRpYyBhcyB3ZWxsLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGdsb2JhbCBvciBleHBvcnRlZCBvbmVzIGFyZTogYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBrdm1faGFjZGJzX2luaXRgLCBga3ZtX2hhY2Ric19jcHVfdXBgLCBga3ZtX2hhY2Ric19jcHVfZG93bmAsIGFuZCBga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgLiBgX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgaXMgc3RhdGljIGlubGluZS4KCkZpbmFsbHksIEkgc2hvdWxkIHRha2UgYSBwZWVrIGF0IGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgZWxzZSByZWxldmFudCB0aGVyZS4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihbYS16X0EtWjAtOV0mIzQzOyApJiM0MztbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jPTI2PXN0YXRpYyBfX3JvX2FmdGVyX2luaXQgaW50IGhhY2Ric2lycSA9IC0xO1xuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjctXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzoyODpzdGF0aWMgdm9pZCBoYWNkYnNfc3RhcnQodTY0ICpod19lbnRyaWVzLCBpbnQgc2l6ZSlcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTI5LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy01MS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjUyOnN0YXRpYyBpbnQgaGFjZGJzX3N0b3Aodm9pZClcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTUzLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy03NC0gKi9cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjc1OnN0YXRpYyBpbnQgZGlydHlfYml0X2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpod19lbnRyaWVzLCBpbnQgc2l6ZSlcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTc2LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xMDctXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzoxMDg6c3RhdGljIGlubGluZSB2b2lkIGhkYnNzX3RvX2JpdG1hcCh1NjQgKmhkYnNzX2FycmF5LCBpbnQgc3RhcnQsIGludCBlbmQsXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xMDktXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpkaXJ0eV9iaXRtYXAsXG4tLVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMTI5LVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MTMwOnN0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xMzEtXHRcdFx0XHR1NjQgdHR3bCwgaW50IGlkeCwgaW50IGVudHJpZXNfc3opXG4tLVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMTQ4LVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MTQ5OmludCBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xNTAtXHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4tLVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjU4LVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MjU5OmludCBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0yNjAtXHRcdFx0XHRpbnQgKm5yX2VudHJpZXNfcmVzZXQpXG4tLVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzI0LVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MzI1OnN0YXRpYyBpcnFyZXR1cm5fdCBoYWNkYnNpcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwY3B1KVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzI2LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNTEtXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzozNTI6dm9pZCBrdm1faGFjZGJzX2NwdV91cCh2b2lkKVxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzUzLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNjAtXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzozNjE6dm9pZCBrdm1faGFjZGJzX2NwdV9kb3duKHZvaWQpXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNjIte1xuLS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM3MC0jaWZkZWYgQ09ORklHX0FDUElcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjM3MTpzdGF0aWMgaW50IF9faW5pdCBoYWNkYnNfYWNwaV9nZXRfaXJxKHZvaWQpXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNzIte1xuLS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM5NC1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjM5NTp2b2lkIF9faW5pdCBrdm1faGFjZGJzX2luaXQodm9pZClcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM5Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NjEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gS2V5IEtWTSBEaXJ0eSBMb2cgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhlIEtWTSBkaXJ0eSBsb2cgaW1wbGVtZW50YXRpb24gYW5kIGZpZ3VyZSBvdXQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgaGFuZGZ1bCBvZiBmdW5jdGlvbnMgdGhhdCBsb29rIGltcG9ydGFudDogYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBkaXJ0eV9iaXRfY2xlYXJgLCB0aG9zZSBzZWVtIG9idmlvdXMgZm9yIGNsZWFyaW5nIGFuZCBtYW5hZ2luZyB0aGUgZGlydHkgbG9nLiBUaGVuIHRoZXJlJiMzOTtzIGBoYWNkYnNfc3RhcnRgLCBgaGFjZGJzX3N0b3BgLCBhbmQgYGhhY2Ric2lycV9oYW5kbGVyYCwgd2hpY2ggc2VlbSByZWxhdGVkIHRvIHRoZSBoYXJkd2FyZS1hc3Npc3RlZCBkaXJ0eSBiaXQgdHJhY2tpbmcsIHdoaWNoIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJldHRlci4gQW5kIG9mIGNvdXJzZSwgdGhlIGNvbnZlcnNpb25zIGJldHdlZW4gZGlydHkgYml0bWFwcyBhbmQgaGFyZHdhcmUgZGlydHkgYml0IHN0cnVjdHVyZXM6IGBoZGJzc190b19iaXRtYXBgLCBgbWFza190b19oZGJzc2AuIFRob3NlIGFyZSBlc3NlbnRpYWwuIEZpbmFsbHksIEkgc2VlIHRoZSBmdW5jdGlvbnMgYGt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YCBhbmQgYF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgLiBXYWl0IGEgc2Vjb25k4oCmIGlzbiYjMzk7dCBgX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgZGVjbGFyZWQgYXMgc3RhdGljIGlubGluZT8gVGhhdCBtaWdodCBtYWtlIGl0IGEgbGl0dGxlIGxlc3MgdXNlZnVsIGFzIGEgc3ltYm9sIHRvIHRyYWNrIGRpcmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGlubGluaW5nIGlzIGhhbmRsZWQgYnkgdGhlIGNvbXBpbGVyLiBCdXQsIGBrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgaXMgZ2xvYmFsLCBzbyBJIHRoaW5rIHRoYXQgaXMgc3RpbGwgc2FmZS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHZpcnQva3ZtL2RpcnR5X3JpbmcuY2AgdG8gY29uZmlybSB3aGVyZSBga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCBpcyB1c2VkLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2RpcnR5X3JpbmcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9kaXJ0eV9yaW5nLmM9NTQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo1NTpfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtNTYte1xuLS1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy02Ny1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo2ODpzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICprdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KVxudmlydC9rdm0vZGlydHlfcmluZy5jLTY5LXtcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo3MDpcdHJldHVybiBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgc2xvdCk7XG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtNzEtfVxuLS1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYz03Mz1zdGF0aWMgdm9pZCBrdm1fcmVzZXRfZGlydHlfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QsIHU2NCBvZmZzZXQsIHU2NCBtYXNrKVxuLS1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy03Ni1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo3NzpcdG1lbXNsb3QgPSBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgc2xvdCk7XG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtNzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MTMKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEFSTTY0IEtWTSBTdGFnZSAyIFBhZ2UgVGFibGUgUHJvdGVjdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGNvcmUgb2YgaG93IHN0YWdlIDIgcGFnZSB0YWJsZSBwZXJtaXNzaW9ucyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIEFSTTY0IEtWTSBpbXBsZW1lbnRhdGlvbi4gTXkgaW5pdGlhbCBmb2N1cyBoYXMgdG8gYmUgb24gYGFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGZvciBzZXR0aW5nIGFuZCByZWxheGluZyBwcm90ZWN0aW9uIGF0dHJpYnV0ZXMuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBzdGFnZTJfc2V0X3Byb3RfYXR0cmAuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGd1ZXN0JiMzOTtzIHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIGFuZCBlbmZvcmNlZCBhdCB0aGUgaHlwZXJ2aXNvciBsZXZlbC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGlzIGZ1bmN0aW9uIG1hbmlwdWxhdGVzIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIHdoYXQgZmxhZ3MgYXJlIGJlaW5nIHNldCAoZS5nLiwgcmVhZCwgd3JpdGUsIGV4ZWN1dGUgcGVybWlzc2lvbnMsIGFuZCBwb3NzaWJseSBjYWNoZSBhdHRyaWJ1dGVzKS4gVW5kZXJzdGFuZGluZyB0aGUgbG9naWMgaGVyZSBpcyB2aXRhbCBmb3Igc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlLgoKRm9sbG93aW5nIHRoYXQsIEkmIzM5O2xsIGV4YW1pbmUgYGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtc2AuIFRoZSBuYW1lIGFsb25lIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB3ZWFrZW5pbmcgcGVybWlzc2lvbnMsIHBlcmhhcHMgdG8gZW5hYmxlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBndWVzdCBvciB0byBhdm9pZCBpc3N1ZXMgd2hlbiB0cmFuc2xhdGluZyBvciBtYW5pcHVsYXRpbmcgZGF0YS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHNjZW5hcmlvcyB3aGVyZSB0aGUgcmVsYXhhdGlvbiBvY2N1cnMuIEFyZSB0aGVyZSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucyBvciB1bmRlciBwYXJ0aWN1bGFyIGNvbmRpdGlvbnMgd2hlcmUgdGhpcyBoYXBwZW5zPyBBcmUgdGhlcmUgYW55IHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIG9yIHRyYWRlLW9mZnM/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCByZWxheGluZyBwcm90ZWN0aW9ucyBpbnRyb2R1Y2VzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LgoKTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlIGJhc2UsIGJ1dCB0aGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCBteSBpbml0aWFsIGluc2lnaHQuIFRoaXMgd2lsbCBiZSBhbiBpbXBvcnRhbnQgcGxhY2UgdG8gc3RhcnQgdW5kZXJzdGFuZGluZyBob3cgZ3Vlc3QgdmlydHVhbCBtZW1vcnkgaXMgbWFuYWdlZCBhbmQgc2VjdXJlZCB3aXRoaW4gdGhlIEFSTTY0IEtWTSBoeXBlcnZpc29yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGFnZTJfc2V0X3Byb3RfYXR0cnxrdm1fcGd0YWJsZV9zdGFnZTJfcmVsYXhfcGVybXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9Njc3PXN0YXRpYyBpbnQgc3RhZ2UyX3NldF94bl9hdHRyKGVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90LCBrdm1fcHRlX3QgKmF0dHIpXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYy03MDEtXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jOjcwMjpzdGF0aWMgaW50IHN0YWdlMl9zZXRfcHJvdF9hdHRyKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcHJvdCxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtNzAzLVx0XHRcdFx0a3ZtX3B0ZV90ICpwdGVwKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9MTA5OD1pbnQga3ZtX3BndGFibGVfc3RhZ2UyX21hcChzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsIHU2NCBzaXplLFxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtMTExOS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM6MTEyMDpcdHJldCA9IHN0YWdlMl9zZXRfcHJvdF9hdHRyKHBndCwgcHJvdCwgXHUwMDI2bWFwX2RhdGEuYXR0cik7XG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jLTExMjEtXHRpZiAocmV0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9MTM0NT1ib29sIGt2bV9wZ3RhYmxlX3N0YWdlMl90ZXN0X2NsZWFyX3lvdW5nKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCB1NjQgYWRkcixcbi0tXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jLTEzNjAtXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jOjEzNjE6aW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jLTEzNjItXHRcdFx0XHQgICBlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcHJvdCwgZW51bSBrdm1fcGd0YWJsZV93YWxrX2ZsYWdzIGZsYWdzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9MTQyMz1rdm1fcHRlX3QgKmt2bV9wZ3RhYmxlX3N0YWdlMl9jcmVhdGVfdW5saW5rZWQoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYy0xNDU3LVxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYzoxNDU4Olx0cmV0ID0gc3RhZ2UyX3NldF9wcm90X2F0dHIocGd0LCBwcm90LCBcdTAwMjZtYXBfZGF0YS5hdHRyKTtcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtMTQ1OS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjQwCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipLVk0gUGVybWlzc2lvbiBSZWxheGF0aW9uOiBBIExvZ2ljYWwgU3RhcnRpbmcgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gYXBwcm9hY2ggdGhpcy4uLiBga3ZtX3BndGFibGVfc3RhZ2UyX3JlbGF4X3Blcm1zYCBmZWVscyBsaWtlIGEgc3Ryb25nIGNvbnRlbmRlciBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIGluIHRoZSByZWFsbSBvZiBwZXJtaXNzaW9ucywgYW5kIHdlJiMzOTtyZSBsb29raW5nIHRvIHJlbGF4IHNvbWV0aGluZywgcmlnaHQ/IE1ha2VzIHNlbnNlIHRvIGJlZ2luIHdpdGggYSBmdW5jdGlvbiBuYW1lIHRoYXQgaGludHMgYXQgdGhhdC4KCk5vdywgd2hlcmUgd2FzIHRoYXQgaHVnZSBwYWdlIHNwbGl0IGNvZGUgYWdhaW4/IEFoLCByaWdodCEgV2Ugc2hvdWxkIGNoZWNrIGBhcmNoL2FybTY0L2t2bS9tbXUuY2AsIGluIHBhcnRpY3VsYXIgZm9yIHRoZSBmdW5jdGlvbiBga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIHN0dWZmIGNvbmNlcm5pbmcgaHVnZSBwYWdlcyBpcy4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIHBvdGVudGlhbCBjaGFuZ2VzLiBUaW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL21tdS5jPTEwNj1zdGF0aWMgYm9vbCBuZWVkX3NwbGl0X21lbWNhY2hlX3RvcHVwX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExOS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEyMDppbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkcixcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEyMS1cdFx0XHQgICAgIHBoeXNfYWRkcl90IGVuZClcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMjk5PXN0YXRpYyB2b2lkIGt2bV9tbXVfc3BsaXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEzMTMtXHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMzE0Olx0a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKGt2bSwgc3RhcnQsIGVuZCk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMzE1LVx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTMyOT12b2lkIGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTM0OS1cdGlmIChrdm1fZGlydHlfbG9nX21hbnVhbF9wcm90ZWN0X2FuZF9pbml0X3NldChrdm0pKVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTM1MDpcdFx0a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKGt2bSwgc3RhcnQsIGVuZCk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMzUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM3NQoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYSBQb3RlbnRpYWwgU3RyYXRlZ3kqKgoKUmlnaHQsIHRoaW5raW5nIGFib3V0IHRoaXMuLi4gYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AgaXMgbG9va2luZyBsaWtlIGEgc29saWQgbGVhZC4gTXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgbGVhbmluZyB0b3dhcmRzIGl0LiBJJiMzOTttIHN0YXJ0aW5nIHRvIHZpc3VhbGl6ZSB0aGUgaW1wbGljYXRpb25zIGFuZCBwb3NzaWJpbGl0aWVzIHdpdGhpbiB0aGF0IGNvbnRleHQuCgpOb3csIHdoZXJlIGRvIEkgbmVlZCB0byBnbyB0byBzdGFydCBkaWdnaW5nIGluPyBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGlydHkgbG9nIHByb3RlY3Rpb24gbWVjaGFuaXNtcyBpbnRlcmFjdCB3aXRoIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LiBJJiMzOTtsbCBmb2N1cyBvbiBga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdGAgYW5kIGBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3RgIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIGRpcnR5IHBhZ2UgdHJhY2tpbmcuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBzcGxpdHRpbmcgaHVnZSBwYWdlcyBpbXBhY3RzIHRob3NlIGZ1bmN0aW9ucywgYW5kIHZpY2UtdmVyc2EuIFVuZGVyc3RhbmRpbmcgdGhlIGxvY2tpbmcgYW5kIHRoZSBnZW5lcmFsIGZsb3cgaXMgY3JpdGljYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdHxrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmM9MjE5OD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dldF9kaXJ0eV9sb2cpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjIwMS0vKipcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjIwMjogKiBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0IC0gZ2V0IGEgc25hcHNob3Qgb2YgZGlydHkgcGFnZXNcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjIwMy0gKlx0YW5kIHJlZW5hYmxlIGRpcnR5IHBhZ2UgdHJhY2tpbmcgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHBhZ2VzLlxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjIyMS0gKi9cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjIyMjpzdGF0aWMgaW50IGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyAqbG9nKVxudmlydC9rdm0va3ZtX21haW4uYy0yMjIzLXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIyNTctXHRcdCAqIGt2bV9nZXRfZGlydHlfbG9nLCBidXQgaG9wZWZ1bGx5IGFsbCBhcmNoaXRlY3R1cmVcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjI1ODpcdFx0ICogdHJhbnNpdGlvbiB0byBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0IGFuZCBrdm1fZ2V0X2RpcnR5X2xvZ1xudmlydC9rdm0va3ZtX21haW4uYy0yMjU5LVx0XHQgKiBjYW4gYmUgZWxpbWluYXRlZC5cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMDQtICogU3RlcHMgMS00IGJlbG93IHByb3ZpZGUgZ2VuZXJhbCBvdmVydmlldyBvZiBkaXJ0eSBwYWdlIGxvZ2dpbmcuIFNlZVxudmlydC9rdm0va3ZtX21haW4uYzoyMzA1OiAqIGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3QoKSBmdW5jdGlvbiBkZXNjcmlwdGlvbiBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLlxudmlydC9rdm0va3ZtX21haW4uYy0yMzA2LSAqXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIzMDc6ICogV2UgY2FsbCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KCkgdG8gaGFuZGxlIHN0ZXBzIDEtMywgdXBvbiByZXR1cm4gd2VcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjMwOC0gKiBhbHdheXMgZmx1c2ggdGhlIFRMQiAoc3RlcCA0KSBldmVuIGlmIHByZXZpb3VzIHN0ZXAgZmFpbGVkICBhbmQgdGhlIGRpcnR5XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0yMzE4PXN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjMyNC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMyNTpcdHIgPSBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KGt2bSwgbG9nKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjMyNi1cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzEtLyoqXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIzMzI6ICoga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0IC0gY2xlYXIgZGlydHkgYml0cyBpbiB0aGUgYml0bWFwXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzMtICpcdGFuZCByZWVuYWJsZSBkaXJ0eSBwYWdlIHRyYWNraW5nIGZvciB0aGUgY29ycmVzcG9uZGluZyBwYWdlcy5cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzYtICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIzMzc6c3RhdGljIGludCBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3Qoc3RydWN0IGt2bSAqa3ZtLFxudmlydC9rdm0va3ZtX21haW4uYy0yMzM4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2cpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0yNDE4PXN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yNDI0LVxudmlydC9rdm0va3ZtX21haW4uYzoyNDI1Olx0ciA9IGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdChrdm0sIGxvZyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0MjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjEyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gRGlydHkgTG9nIGFuZCBSaW5nIFJlc2V0IE1lY2hhbmlzbXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGlydHkgbG9nIGFuZCByaW5nIHJlc2V0IGltcGxlbWVudGF0aW9ucyB3aXRoaW4gS1ZNLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3RgIGFuZCBga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0YCBhcmUgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyB0eXBpY2FsIGZvciBoZWxwZXIgZnVuY3Rpb25zLiBMZXQgbWUgdGhpbmssIHNvIHRoZXNlIGFyZSBoZWxwZXIgZnVuY3Rpb25zLiBBaCwgYW5kIGhlcmUgYXJlIHRoZSByZWxldmFudCBpb2N0bCBoYW5kbGVycyDigJMgYGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nYCBhbmQgYGt2bV92bV9pb2N0bF9jbGVhcl9kaXJ0eV9sb2dgLiBUaGV5IGxpa2VseSB3cmFwIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkgYWxzbyBzZWUgdGhhdCBga3ZtX2RpcnR5X3JpbmdfcmVzZXRgIGlzIGFuIGlvY3RsIGhhbmRsZXIgYXMgd2VsbC4gUmlnaHQsIEkgbmVlZCB0byBzZWUgaG93IGBrdm1fZGlydHlfcmluZ19yZXNldGAgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBrdm1fZGlydHlfcmluZ19yZXNldGAgaXMgZGVmaW5lZCBpbiBgdmlydC9rdm0vZGlydHlfcmluZy5jYCwgc28gSSBzaG91bGQgc3RhcnQgdGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgcmVzZXQgcHJvY2VkdXJlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2RpcnR5X3JpbmdfcmVzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9kaXJ0eV9yaW5nLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vZGlydHlfcmluZy5jPTEwND1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX2RpcnR5X2dmbl9zZXRfZGlydGllZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuLS1cbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy0xMDgtXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmM6MTA5OmludCBrdm1fZGlydHlfcmluZ19yZXNldChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZyxcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy0xMTAtXHRcdFx0IGludCAqbnJfZW50cmllc19yZXNldClcbi0tXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtMjE5LVxudmlydC9rdm0vZGlydHlfcmluZy5jOjIyMDpcdHRyYWNlX2t2bV9kaXJ0eV9yaW5nX3Jlc2V0KHJpbmcpO1xudmlydC9rdm0vZGlydHlfcmluZy5jLTIyMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyMDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaXJ0eSBMb2cgYW5kIFJlbGF0ZWQgS1ZNIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGRpcnR5IGxvZyBtZWNoYW5pc20gd2l0aGluIEtWTS4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGRpcmVjdGx5IGludm9sdmVkOiBgX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXJgLCBgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyYCwgYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AsIGBrdm1fZGlydHlfcmluZ19yZXNldGAsIGBrdm1fdm1faW9jdGxfZ2V0X2RpcnR5X2xvZ2AsIGFuZCBga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZ2AsIGFuZCBga3ZtX3BndGFibGVfc3RhZ2UyX3JlbGF4X3Blcm1zYC4gVGhlIGtleSBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkaXJ0eSBsb2cgaXMgbWFuYWdlZCBhbmQgY2xlYXJlZC4KCkkgaGFkIHRvIGRvdWJsZS1jaGVjayBga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2dgIGFuZCBga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZ2AsIHNpbmNlIHRob3NlIElPQ1RMcyBjYW4gYmUgcXVpdGUgdHJpY2t5LiBBaCwgcmlnaHQsIHRoZSBhY3R1YWwgbW9kaWZpY2F0aW9ucyBhcmUgaGl0dGluZyB0aGUgKnByb3RlY3QqIHZlcnNpb25zOiBga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdGAgYW5kIGBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3RgLiBObyBwcm9ibGVtOyBldmVuIHRob3VnaCB0aG9zZSBhcmUgc3RhdGljLCB0aGV5IGFyZSBwYXJ0IG9mIHRoZSBjcml0aWNhbCBwYXRoLCBzbyBJIG5lZWQgdG8gaW5jbHVkZSB0aGVtIGluIG15IGFuYWx5c2lzLgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AuIEkgcmVjYWxsIHRoYXQgYGRpcnR5X2JpdF9jbGVhcmAgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgKnRoZSogY29yZSBjbGVhcmluZyBsb2dpYy4gQWxzbywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgYGhhY2Ric19zdGFydGAsIGBoYWNkYnNfc3RvcGAsIGFuZCBgaGFjZGJzaXJxX2hhbmRsZXJgIGFzIHRoZXkgYXJlIGludGVncmFsIHRvIHRoZSBoYXJkd2FyZS1hc3Npc3RlZCBkaXJ0eSBiaXQgdHJhY2tpbmcgZnVuY3Rpb25hbGl0eS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biBhIG1vcmUgcmVmaW5lZCBsaXN0LiBDb25zaWRlcmluZyB0aGUgY29yZSBvcGVyYXRpb25zLCBJJiMzOTtsbCBkZWZpbml0ZWx5IGluY2x1ZGU6IGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBgZGlydHlfYml0X2NsZWFyYCwgYGhhY2Ric2lycV9oYW5kbGVyYCwgYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AsIGBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0YCwgYGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdGAsIGFuZCBga3ZtX2RpcnR5X3JpbmdfcmVzZXRgLgoKSSBjYW4gc2VlIHRoYXQgbXkgaW5pdGlhbCBsaXN0IGNhbiBiZSB0cmltbWVkIGEgYml0LiBGb2N1c2luZyBvbiB0aGUgY2VudHJhbCBsb2dpYywgSSB3aWxsIHJlZmluZSBpdCB0bzogYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBkaXJ0eV9iaXRfY2xlYXJgLCBgaGFjZGJzaXJxX2hhbmRsZXJgLCBhbmQgYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIG9mIHN0YXRpYyBmdW5jdGlvbnMuIEl0JiMzOTtzIHBlcmZlY3RseSBmaW5lIHRvIGluY2x1ZGUgdGhlbSBiZWNhdXNlIHRoZXkgYXJlIGVzc2VudGlhbCB0byBob3cgdGhlIGZlYXR1cmUgaXMgaW1wbGVtZW50ZWQuIEFsc28sIGBkaXJ0eV9iaXRfY2xlYXJgIGlzIHVuaXF1ZSBzbyBpdCBpcyB1bmxpa2VseSB0byBoYXZlIGFueSBuYW1lIGNvbGxpc2lvbi4gR29vZC4gQmFjayB0byBgYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNgIHRvIHNlZSBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpcnR5X2JpdF9jbGVhciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jPTUyPXN0YXRpYyBpbnQgaGFjZGJzX3N0b3Aodm9pZClcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy03NC0gKi9cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjc1OnN0YXRpYyBpbnQgZGlydHlfYml0X2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpod19lbnRyaWVzLCBpbnQgc2l6ZSlcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTc2LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYz0xNDk9aW50IF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0yMTktXHRcdFx0aWYgKGlkeCBcdTAwM2U9IGVudHJpZXNfc3opIHtcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjIyMDpcdFx0XHRcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGlkeCk7XG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0yMjEtXHRcdFx0XHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFx1MDAzZSAwO1xuLS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTIzMi1cdGlmIChpZHggIT0gMCkge1xuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MjMzOlx0XHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjM0LVx0XHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFx1MDAzZSAwO1xuLS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jPTI1OT1pbnQgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuLS1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTMwMC1cbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjMwMTpcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGkpO1xuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTk1NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0byBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5LCBJIGFic29sdXRlbHkgbmVlZCBgS1ZNYCBhbmQgYEFDUElgIGVuYWJsZWQuIEkgc2VlIHRoYXQgdGhlIGBIQVZFX0tWTV9IV19ESVJUWV9CSVRgIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgKmJ5KiBgS1ZNYCBpZiBgQUNQSWAgaXMgYWxzbyBjb25maWd1cmVkLiBUaGF0IG1ha2VzIHNlbnNlLCBzbyB0aG9zZSB0d28gYXJlIHRoZSBjb3JlIHJlcXVpcmVtZW50cy4KCk5vdywgSSBhbHdheXMgbGlrZSB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYW55IG90aGVyIGltcGxpY2l0IGRlcGVuZGVuY2llcy4gQWgsIHJpZ2h0LCBvZiBjb3Vyc2UsIGBDT05GSUdfQVJNNjRgIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgaW1wbGllZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIEFuZCwgSSBzZWUgdGhhdCBgQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVGAgaXRzZWxmIGlzIGEgaGlkZGVuIGNvbmZpZywgc28gaXQmIzM5O3Mgbm90IHNvbWV0aGluZyBJJiMzOTtsbCBiZSBkaXJlY3RseSBzZXR0aW5nLiBJIHNob3VsZCBtYWtlIGEgbm90ZSBvZiB0aGF0IGZvciB3aGVuIEkgc2V0IHVwIHRoZSBidWlsZC4KCk9rYXksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gvYXJtNjQva3ZtL0tjb25maWdgIGZpbGUgYWdhaW4sIG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBzb21ldGhpbmcuIExldCYjMzk7cyBtYWtlIHN1cmUgSSBkaWRuJiMzOTt0IHNraXAgb3ZlciBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9LVk1fSFdfRElSVFlfQklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXG4tLVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zNi1cdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM3Olx0c2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVx0c2VsZWN0IFNDSEVEX0lORk9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0OTkKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTS9BQ1BJIFBhdGNoIGZvciBBUk02NCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIGBLVk1gIGFuZCBgQUNQSWAgYXMgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGFyZWEgcmlwZSBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGhhcmR3YXJlIGRpcnR5IGJpdCB0cmFja2luZyBhbmQgY2xlYW5pbmcgKEhEQlNTIGFuZCBIQUNEQlMsIHJlc3BlY3RpdmVseSkgc3BlY2lmaWNhbGx5IGZvciBBUk02NCB3aXRoaW4gdGhlIEtWTSBmcmFtZXdvcmsuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB0byBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGlydHkgbG9nZ2luZyBsb2dpYy4gQmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIHRoZXNlIG5ldyBpbnRlcnJ1cHQgaGFuZGxlcnMgYW5kIGlvY3RsIHBhdGhzLCBpdCBtZWFucyB0aGVyZSBhcmUgbmV3IHBvaW50cyBvZiBpbnRlcmFjdGlvbiBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KClRoZSBjb3JlIG9mIHRoZSBmdXp6aW5nIHRhcmdldCBzZWVtcyB0byBiZSBjZW50ZXJlZCBhcm91bmQgc2V2ZXJhbCBmdW5jdGlvbnM6IGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBgZGlydHlfYml0X2NsZWFyYCwgYGhhY2Ric2lycV9oYW5kbGVyYCwgYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AsIGBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0YCwgYGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdGAgYW5kIGBrdm1fZGlydHlfcmluZ19yZXNldGAuIFRoZXkgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSBsb3ctbGV2ZWwgZGlydHkgYml0IG1hbmFnZW1lbnQuIFRoZXkgc2hvdWxkIGJlIHByaW9yaXRpemVkIGR1cmluZyBmdXp6aW5nLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIG1hcmtlZCBhcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGJlY2F1c2UgdGhlIG1vZGlmaWNhdGlvbnMgaW50cm9kdWNlIG5ldywgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBpbnRlcmFjdCBjbG9zZWx5IHdpdGggaGFyZHdhcmUuIFRoZSBgS1ZNYCBhbmQgYEFDUElgIGNvbmZpZ3MgYXJlIGFjdGl2YXRlZCwgYW5kIHRoZSBlbnVtZXJhdGVkIGZ1bmN0aW9ucyB3aWxsIGZvcm0gdGhlIGNvcmUgb2YgbXkgZnV6emluZyBjYW1wYWlnbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7QUNQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyJiMzNDssCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhciYjMzQ7LAogICAgJiMzNDtkaXJ0eV9iaXRfY2xlYXImIzM0OywKICAgICYjMzQ7aGFjZGJzaXJxX2hhbmRsZXImIzM0OywKICAgICYjMzQ7a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3QmIzM0OywKICAgICYjMzQ7a3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0JiMzNDssCiAgICAmIzM0O2t2bV9kaXJ0eV9yaW5nX3Jlc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7QUNQSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyJiMzNDssCiAgICAmIzM0O19fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhciYjMzQ7LAogICAgJiMzNDtkaXJ0eV9iaXRfY2xlYXImIzM0OywKICAgICYjMzQ7aGFjZGJzaXJxX2hhbmRsZXImIzM0OywKICAgICYjMzQ7a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3QmIzM0OywKICAgICYjMzQ7a3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0JiMzNDssCiAgICAmIzM0O2t2bV9kaXJ0eV9yaW5nX3Jlc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDA6NTUuMDIyNDk0NzI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzEyNjQ3NTA4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJBQ1BJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXJcIixcbiAgICBcIl9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhclwiLFxuICAgIFwiZGlydHlfYml0X2NsZWFyXCIsXG4gICAgXCJoYWNkYnNpcnFfaGFuZGxlclwiLFxuICAgIFwia3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzXCIsXG4gICAgXCJrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0XCIsXG4gICAgXCJrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3RcIixcbiAgICBcImt2bV9kaXJ0eV9yaW5nX3Jlc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBoYXJkd2FyZSBkaXJ0eSBiaXQgdHJhY2tpbmcgKEhEQlNTKSBhbmQgY2xlYW5pbmcgKEhBQ0RCUykgZm9yIEFSTTY0IEtWTS4gSXQgbW9kaWZpZXMgY29yZSBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgbG9naWMsIGFkZGluZyBuZXcgaW9jdGwgcGF0aHMgYW5kIGludGVycnVwdCBoYW5kbGVycy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQwOjU1LjAyMjQ5OTIyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxMzk4OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmM1ODY3MTc2ZjcxMDQ3NmIyOGIxMzZkYjVjODM5MzFhNzVlYmU4OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxMTo0MDo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oXFxuaW5kZXggOGE1NGNhNmJhNjAyODIuLjg4MzMxNWU5ZDc5ZDk4IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmhcXG5AQCAtNDUsNiArNDUsOSBAQFxcbiBcXG4gI2RlZmluZSBBQ1BJX01BRFRfR0lDQ19UUkJFICAob2Zmc2V0b2Yoc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCwgXFxcXFxcbiBcXHR0cmJlX2ludGVycnVwdCkgKyBzaXplb2YodTE2KSlcXG4rXFxuKyNkZWZpbmUgQUNQSV9NQURUX0dJQ0NfSEFDREJTSVJRICAob2Zmc2V0b2Yoc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCwgXFxcXFxcbitcXHRoYWNkYnNpcnFfZ3NpKSArIHNpemVvZih1MzIpKVxcbiAvKlxcbiAgKiBBcm3CriBGdW5jdGlvbmFsIEZpeGVkIEhhcmR3YXJlIFNwZWNpZmljYXRpb24gVmVyc2lvbiAxLjIuXFxuICAqIFRhYmxlIDI6IEFybSBBcmNoaXRlY3R1cmUgY29udGV4dCBsb3NzIGZsYWdzXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcXG5pbmRleCBhNTc4NzBmYTk2ZGI1Yi4uNjIwYWU0Y2RkYjc2MGEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxcbkBAIC04NjMsNiArODYzLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFmdCh2b2lkKVxcbiBcXHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQUZUKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oZGJzcyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19IREJTUyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFDREJTKTtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19tcGFtKHZvaWQpXFxuIHtcXG4gXFx0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfTVBBTSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kNzZjMTA5OTM3ZDhkYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaFxcbkBAIC0wLDAgKzEsNjcgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cXG4rICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzIFxcdTAwM2NsZW8uYnJhc0Bhcm0uY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX19BUk02NF9LVk1fRElSVFlfQklUX0hfX1xcbisjZGVmaW5lIF9fQVJNNjRfS1ZNX0RJUlRZX0JJVF9IX19cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3BndGFibGUuaFxcdTAwM2VcXG4rXFxuK2VudW0gaGFjZGJzX3N0YXR1cyB7XFxuK1xcdEhBQ0RCU19PRkYsXFxuK1xcdEhBQ0RCU19JRExFLFxcbitcXHRIQUNEQlNfUlVOTklORyxcXG4rXFx0SEFDREJTX0VSUk9SXFxuK307XFxuK1xcbitzdHJ1Y3QgaGFjZGJzIHtcXG4rXFx0ZW51bSBoYWNkYnNfc3RhdHVzIHN0YXR1cztcXG4rXFx0aW50IHNpemU7XFxuK307XFxuK1xcbitERUNMQVJFX1BFUl9DUFUoc3RydWN0IGhhY2RicywgaGFjZGJzX3BjcCk7XFxuK1xcbit2b2lkIF9faW5pdCBrdm1faGFjZGJzX2luaXQodm9pZCk7XFxuK3ZvaWQga3ZtX2hhY2Ric19jcHVfdXAodm9pZCk7XFxuK3ZvaWQga3ZtX2hhY2Ric19jcHVfZG93bih2b2lkKTtcXG4rXFxuK2ludCBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcXG4rXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmJpdG1hcCxcXG4rXFx0XFx0XFx0ICAgICAgIGJvb2wgKmZsdXNoKTtcXG4rXFxuK2ludCBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXFxuK1xcdFxcdFxcdFxcdGludCAqbnJfZW50cmllc19yZXNldCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChzdHJ1Y3Qga3ZtICprdm0pXFxuK3tcXG4rXFx0cmV0dXJuIHRoaXNfY3B1X3JlYWQoaGFjZGJzX3BjcC5zdGF0dXMpID09IEhBQ0RCU19JRExFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICAoa3ZtLVxcdTAwM2VhcmNoLm1tdS5wZ3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgICBib29sICpmbHVzaClcXG4re1xcbitcXHRpZiAoIWt2bV9hcmNoX2RpcnR5X2NsZWFyX2VuYWJsZWQoa3ZtKSlcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuK1xcdHJldHVybiBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihrdm0sIG1lbXNsb3QsIGxvZywgYml0bWFwLCBmbHVzaCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxcbit7XFxuK1xcdGlmICgha3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChrdm0pKVxcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXG4rXFx0cmV0dXJuIF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihrdm0sIHJpbmcsIG5yX2VudHJpZXNfcmVzZXQpO1xcbit9XFxuK1xcbisjZW5kaWYgLyogX19BUk02NF9LVk1fRElSVFlfQklUX0hfXyAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcXG5pbmRleCA0MWE4Njg3OTM4ZWI2Yi4uNjQ2ZmY4OGUwMjU4M2YgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXFxuQEAgLTkzLDYgKzkzLDggQEAgdHlwZWRlZiB1NjQga3ZtX3B0ZV90O1xcbiBcXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9YTlxcdEdFTk1BU0soNTQsIDUzKVxcbiBcXG4rI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9ISV9TMl9EQk1cXHRCSVQoNTEpXFxuK1xcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MxX0dQXFx0QklUKDUwKVxcbiBcXG4gI2RlZmluZSBLVk1fUFRFX0xFQUZfQVRUUl9TMl9QRVJNU1xcdChLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1IgfCBcXFxcXFxuQEAgLTI1Myw2ICsyNTUsNyBAQCBzdHJ1Y3Qga3ZtX3BndGFibGVfbW1fb3BzIHtcXG4gZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3Mge1xcbiBcXHRLVk1fUEdUQUJMRV9TMl9JRE1BUFxcdFxcdFxcdD0gQklUKDApLFxcbiBcXHRLVk1fUEdUQUJMRV9TMl9BU19TMVxcdFxcdFxcdD0gQklUKDEpLFxcbitcXHRLVk1fUEdUQUJMRV9TMl9EQk1cXHRcXHRcXHQ9IEJJVCgyKSxcXG4gfTtcXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcXG5pbmRleCA5YTIyZGYwYzUxMjBmMy4uNjJmNTZiYmQwYTY1YzggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXFxuQEAgLTUyMyw2ICs1MjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2Z0cl9iaXRzIGZ0cl9pZF9hYTY0bW1mcjNbXSA9IHtcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnI0W10gPSB7XFxuIFxcdFNfQVJNNjRfRlRSX0JJVFMoRlRSX0hJRERFTiwgRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRNTUZSNF9FTDFfRTJIMF9TSElGVCwgNCwgMCksXFxuIFxcdEFSTTY0X0ZUUl9CSVRTKEZUUl9ISURERU4sIEZUUl9TVFJJQ1QsIEZUUl9MT1dFUl9TQUZFLCBJRF9BQTY0TU1GUjRfRUwxX05WX2ZyYWNfU0hJRlQsIDQsIDApLFxcbitcXHRBUk02NF9GVFJfQklUUyhGVFJfSElEREVOLCBGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgSURfQUE2NE1NRlI0X0VMMV9IQUNEQlNfU0hJRlQsIDQsIDApLFxcbiBcXHRBUk02NF9GVFJfRU5ELFxcbiB9O1xcbiBcXG5AQCAtMjEzMSw2ICsyMTMyLDExIEBAIHN0YXRpYyBib29sIGh2aGVfcG9zc2libGUoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LFxcbiBcXHRyZXR1cm4gYXJtNjRfdGVzdF9zd19mZWF0dXJlX292ZXJyaWRlKEFSTTY0X1NXX0ZFQVRVUkVfT1ZFUlJJREVfSFZIRSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGhhc192aGVfaGRic3MoY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgKmVudHJ5LCBpbnQgY29wZSlcXG4re1xcbitcXHRyZXR1cm4gaXNfa2VybmVsX2luX2h5cF9tb2RlKCkgXFx1MDAyNlxcdTAwMjYgaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIGNvcGUpO1xcbit9XFxuK1xcbiBib29sIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpXFxuIHtcXG4gXFx0LypcXG5AQCAtMjc2Niw2ICsyNzcyLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyBhcm02NF9mZWF0dXJlc1tdID0ge1xcbiBcXHRcXHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlIxX0VMMSwgSEFGREJTLCBEQk0pXFxuIFxcdH0sXFxuICNlbmRpZlxcbitcXHR7XFxuK1xcdFxcdC5kZXNjID0gXFxcIkhhcmR3YXJlIGRpcnR5IGJpdCBDbGVhbmluZ1xcXCIsXFxuK1xcdFxcdC50eXBlID0gQVJNNjRfQ1BVQ0FQX1NZU1RFTV9GRUFUVVJFLFxcbitcXHRcXHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBQ0RCUyxcXG4rXFx0XFx0Lm1hdGNoZXMgPSBoYXNfY3B1aWRfZmVhdHVyZSxcXG4rXFx0XFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSNF9FTDEsIEhBQ0RCUywgSU1QKVxcbitcXHR9LFxcbiAjaWZkZWYgQ09ORklHX0FSTTY0X0hBRlRcXG4gXFx0e1xcbiBcXHRcXHQuZGVzYyA9IFxcXCJIYXJkd2FyZSBtYW5hZ2VkIEFjY2VzcyBGbGFnIGZvciBUYWJsZSBEZXNjcmlwdG9yc1xcXCIsXFxuQEAgLTI3ODEsNiArMjc5NCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybTY0X2NwdV9jYXBhYmlsaXRpZXMgYXJtNjRfZmVhdHVyZXNbXSA9IHtcXG4gXFx0XFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSEFGVClcXG4gXFx0fSxcXG4gI2VuZGlmXFxuK1xcdHtcXG4rXFx0XFx0LmRlc2MgPSBcXFwiSGFyZHdhcmUgRGlydHkgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlIChIREJTUylcXFwiLFxcbitcXHRcXHQudHlwZSA9IEFSTTY0X0NQVUNBUF9TWVNURU1fRkVBVFVSRSxcXG4rXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfSERCU1MsXFxuK1xcdFxcdC5tYXRjaGVzID0gaGFzX3ZoZV9oZGJzcyxcXG4rXFx0XFx0QVJNNjRfQ1BVSURfRklFTERTKElEX0FBNjRNTUZSMV9FTDEsIEhBRkRCUywgSERCU1MpXFxuK1xcdH0sXFxuIFxcdHtcXG4gXFx0XFx0LmRlc2MgPSBcXFwiQ1JDMzIgaW5zdHJ1Y3Rpb25zXFxcIixcXG4gXFx0XFx0LmNhcGFiaWxpdHkgPSBBUk02NF9IQVNfQ1JDMzIsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWcgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXFxuaW5kZXggNDQ5MTU0ZjlhNDg1MmQuLmRiODQ4N2JmNzM4Yjc4IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWdcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnXFxuQEAgLTM0LDYgKzM0LDcgQEAgbWVudWNvbmZpZyBLVk1cXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcXG4gXFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxcbiBcXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxcbitcXHRzZWxlY3QgSEFWRV9LVk1fSFdfRElSVFlfQklUIGlmIEFDUElcXG4gXFx0c2VsZWN0IFNDSEVEX0lORk9cXG4gXFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXFxuIFxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxcbmluZGV4IDU5NjEyZDJmMjc3YzFkLi42ZmFhY2Q4NTczNDZiMyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxcbisrKyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXFxuQEAgLTI0LDcgKzI0LDcgQEAga3ZtLXkgKz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcXFxcbiBcXHQgdmdpYy92Z2ljLW1taW8ubyB2Z2ljL3ZnaWMtbW1pby12Mi5vIFxcXFxcXG4gXFx0IHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZpY2UubyBcXFxcXFxuIFxcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXFxcXG4tXFx0IHZnaWMvdmdpYy12NS5vXFxuK1xcdCB2Z2ljL3ZnaWMtdjUubyBkaXJ0eV9iaXQub1xcbiBcXG4ga3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgKz0gcG11LWVtdWwubyBwbXUub1xcbiBrdm0tJChDT05GSUdfQVJNNjRfUFRSX0FVVEgpICArPSBwYXV0aC5vXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2FybS5jIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uZGMxYTQ2MjlhYWViOTggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXJtLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9hcm0uY1xcbkBAIC00Miw2ICs0Miw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25lc3RlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9wa3ZtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX3B0cmF1dGguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vc2VjdGlvbnMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zdGFja3RyYWNlL252aGUuaFxcdTAwM2VcXG4gXFxuQEAgLTIzMDcsNiArMjMwOCw3IEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuIFxcbiBcXHRrdm1fdmdpY19jcHVfdXAoKTtcXG4gXFx0a3ZtX3RpbWVyX2NwdV91cCgpO1xcbitcXHRrdm1faGFjZGJzX2NwdV91cCgpO1xcbiBcXG4gXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFxuQEAgLTIzMTUsNiArMjMxNyw3IEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuIFxcbiB2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuIHtcXG4rXFx0a3ZtX2hhY2Ric19jcHVfZG93bigpO1xcbiBcXHRrdm1fdGltZXJfY3B1X2Rvd24oKTtcXG4gXFx0a3ZtX3ZnaWNfY3B1X2Rvd24oKTtcXG4gXFxuQEAgLTI0ODEsNiArMjQ4NCw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfc3Vic3lzdGVtcyh2b2lkKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdGt2bV9oYWNkYnNfaW5pdCgpO1xcbitcXG4gXFx0a3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKCk7XFxuIFxcbiBcXHRlcnIgPSBrdm1faHlwX3RyYWNlX2luaXQoKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE5Mjg5ZWE3M2Q5NmQ5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXFxuQEAgLTAsMCArMSw0MTEgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cXG4rICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzIFxcdTAwM2NsZW8uYnJhc0Bhcm0uY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2t2bV9tbXUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4rXFxuK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBoYWNkYnMsIGhhY2Ric19wY3ApID0ge1xcbitcXHQuc3RhdHVzID0gSEFDREJTX09GRixcXG4rXFx0LnNpemUgPSAwLFxcbit9O1xcbitcXG4rLyogSERCU1MgZW50cnkgZmllbGQgZGVmaW5pdGlvbnMgKi9cXG4rI2RlZmluZSBIREJTU19FTlRSWV9WQUxJRCBCSVQoMClcXG4rI2RlZmluZSBIREJTU19FTlRSWV9UVFdMX1NISUZUICgxKVxcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfTUFTSyAoR0VOTUFTSygzLCAxKSlcXG4rI2RlZmluZSBIREJTU19FTlRSWV9UVFdMKHgpIFxcXFxcXG4rXFx0KCgoeCkgXFx1MDAzY1xcdTAwM2MgSERCU1NfRU5UUllfVFRXTF9TSElGVCkgXFx1MDAyNiBIREJTU19FTlRSWV9UVFdMX01BU0spXFxuKyNkZWZpbmUgSERCU1NfRU5UUllfVFRXTF9SRVNWIEhEQlNTX0VOVFJZX1RUV0woLTQpXFxuKyNkZWZpbmUgSERCU1NfRU5UUllfSVBBIEdFTk1BU0tfVUxMKDU1LCAxMilcXG4rXFxuK3N0YXRpYyBfX3JvX2FmdGVyX2luaXQgaW50IGhhY2Ric2lycSA9IC0xO1xcbitcXG4rc3RhdGljIHZvaWQgaGFjZGJzX3N0YXJ0KHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpXFxuK3tcXG4rXFx0dTY0IGJyO1xcbitcXHQvKiBFYWNoIGVudHJ5IGlzIDggYnl0ZXMgKi9cXG4rXFx0aW50IHNpemVfYiA9IHNpemUgKiBzaXplb2YoaHdfZW50cmllc1swXSk7XFxuK1xcdGludCBzaXplX3AyID0gbWF4KHJvdW5kdXBfcG93X29mX3R3byhzaXplX2IpLCBQQUdFX1NJWkUpO1xcbitcXG4rXFx0LyogSWYgbm90IHVzaW5nIHRoZSBmdWxsIHNpemUgb2YgdGhlIGFycmF5LCBwdXQgYSBzdG9wIGVudHJ5IGF0IHRoZSBlbmQgKi9cXG4rXFx0aWYgKHNpemVfYiBcXHUwMDNjIHNpemVfcDIpXFxuK1xcdFxcdGh3X2VudHJpZXNbc2l6ZV0gPSBIREJTU19FTlRSWV9WQUxJRCB8IEhEQlNTX0VOVFJZX1RUV0xfUkVTVjtcXG4rXFxuK1xcdHN5c3JlZ19jbGVhcl9zZXRfcyhTWVNfSEFDREJTQ09OU19FTDIsXFxuK1xcdFxcdFxcdCAgIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT04gfCBIQUNEQlNDT05TX0VMMl9JTkRFWCwgMCk7XFxuK1xcbitcXHRiciA9ICh2aXJ0X3RvX3BoeXMoaHdfZW50cmllcykgXFx1MDAyNiBIQUNEQlNCUl9FTDJfQkFERFJfTUFTSykgfFxcbitcXHQgICAgIEZJRUxEX1BSRVAoSEFDREJTQlJfRUwyX1NaLCBpbG9nMihzaXplX3AyKSAtIDEyKSB8XFxuK1xcdCAgICAgRklFTERfUFJFUChIQUNEQlNCUl9FTDJfRU4sIDEpO1xcbitcXG4rXFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19SVU5OSU5HKTtcXG4rXFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zaXplLCBzaXplKTtcXG4rXFx0d3JpdGVfc3lzcmVnX3MoYnIsIFNZU19IQUNEQlNCUl9FTDIpO1xcbitcXHRpc2IoKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoYWNkYnNfc3RvcCh2b2lkKVxcbit7XFxuK1xcdHdyaXRlX3N5c3JlZ19zKDAsIFNZU19IQUNEQlNCUl9FTDIpO1xcbitcXHRpc2IoKTtcXG4rXFxuK1xcdGlmICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfRVJST1IpIHtcXG4rXFx0XFx0LyogSW4gY2FzZSBvZiBlcnJvciwgSEFDREJTQ09OU19FTDIuSU5ERVggc2hvdWxkIHBvaW50IHRoZSBmYXVsdHkgZW50cnkgKi9cXG4rXFx0XFx0dTY0IGNvbnMgPSByZWFkX3N5c3JlZ19zKFNZU19IQUNEQlNDT05TX0VMMik7XFxuK1xcdFxcdGludCBpZHggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpO1xcbitcXG4rXFx0XFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTtcXG4rXFxuK1xcdFxcdHJldHVybiBpZHg7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc2l6ZSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENsZWFycyBkaXJ0eS1iaXRzIGZvciBhbiBhcnJheSBvZiBwYWdlcyAoaHdfZW50cmllcykgdXNpbmcgSEFDREJTXFxuKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBjbGVhbmVkIGZyb20gdGhlIGFycmF5LiBJZiByZXR1cm5zIHZhbHVlIFxcdTAwM2Mgc2l6ZSxcXG4rICpcXHR0aGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHByb2Nlc3NpbmcuXFxuKyAqL1xcbitzdGF0aWMgaW50IGRpcnR5X2JpdF9jbGVhcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpXFxuK3tcXG4rXFx0dTY0IGhjcl9lbDI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4rXFxuK1xcdGhjcl9lbDIgPSByZWFkX3N5c3JlZyhIQ1JfRUwyKTtcXG4rXFx0d3JpdGVfc3lzcmVnKGhjcl9lbDIgfCBIQ1JfRUwyX1ZNLCBIQ1JfRUwyKTtcXG4rXFx0X19sb2FkX3N0YWdlMihcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLm1tdSk7XFxuK1xcbitcXHRoYWNkYnNfc3RhcnQoaHdfZW50cmllcywgc2l6ZSk7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHdmaSgpO1xcbitcXHR9IHdoaWxlICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfUlVOTklORyk7XFxuK1xcbitcXHRyZXQgPSBoYWNkYnNfc3RvcCgpO1xcbitcXG4rXFx0d3JpdGVfc3lzcmVnKGhjcl9lbDIsIEhDUl9FTDIpO1xcbitcXHRpc2IoKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIE5vIERTQiBpcyBuZWVkZWQgaGVyZSwgYXMga3ZtX2ZsdXNoX3JlbW90ZV90bGJzX21lbXNsb3QoKSB0aGF0IGhhcHBlbnNcXG4rXFx0ICogbGF0ZXIgaW4gZ2VuZXJpYyBkaXJ0eS1jbGVhbmluZyBjb2RlIGFscmVhZHkgcGVyZm9ybXMgYSBEU0IgYmVmb3JlXFxuK1xcdCAqIGRvaW5nIHRoZSBUTEJJLlxcbitcXHQgKi9cXG4rXFxuK1xcdHByZWVtcHRfZW5hYmxlKCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaGRic3NfdG9fYml0bWFwKHU2NCAqaGRic3NfYXJyYXksIGludCBzdGFydCwgaW50IGVuZCxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0KVxcbit7XFxuK1xcdHU2NCB3ID0gKGdwYV90b19nZm4oaGRic3NfYXJyYXlbc3RhcnRdKSAtIG9mZnNldCkgLyBCSVRTX1BFUl9MT05HO1xcbitcXHR1NjQgbWFzayA9IDA7XFxuK1xcdGludCBpZHggPSBzdGFydDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0dTY0IGVudHJ5ID0gKGdwYV90b19nZm4oaGRic3NfYXJyYXlbaWR4XSkgLSBvZmZzZXQpO1xcbitcXG4rXFx0XFx0aWYgKGVudHJ5IC8gQklUU19QRVJfTE9ORyA9PSB3KSB7XFxuK1xcdFxcdFxcdG1hc2sgfD0gQklUKGVudHJ5ICUgQklUU19QRVJfTE9ORyk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGF0b21pY19sb25nX29yKG1hc2ssIChhdG9taWNfbG9uZ190ICopXFx1MDAyNmRpcnR5X2JpdG1hcFt3XSk7XFxuK1xcdFxcdFxcdHcgPSBlbnRyeSAvIEJJVFNfUEVSX0xPTkc7XFxuK1xcdFxcdFxcdG1hc2sgPSBCSVQoZW50cnkgJSBCSVRTX1BFUl9MT05HKTtcXG4rXFx0XFx0fVxcbitcXHR9IHdoaWxlICgrK2lkeCBcXHUwMDNjIGVuZCk7XFxuK1xcdGF0b21pY19sb25nX29yKG1hc2ssIChhdG9taWNfbG9uZ190ICopXFx1MDAyNmRpcnR5X2JpdG1hcFt3XSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdHU2NCB0dHdsLCBpbnQgaWR4LCBpbnQgZW50cmllc19zeilcXG4re1xcbitcXHR3aGlsZSAoaWR4IFxcdTAwM2MgZW50cmllc19zeikge1xcbitcXHRcXHRpbnQgaiA9IF9fZmZzKCptYXNrKTtcXG4rXFx0XFx0dTY0IGEgPSBnZm5fdG9fZ3BhKG9mZnNldCArIGopO1xcbitcXG4rXFx0XFx0aHdfZW50cmllc1tpZHgrK10gPSAoYSBcXHUwMDI2IEhEQlNTX0VOVFJZX0lQQSkgfFxcbitcXHRcXHRcXHRcXHQgICAgdHR3bCB8XFxuK1xcdFxcdFxcdFxcdCAgICBIREJTU19FTlRSWV9WQUxJRDtcXG4rXFxuK1xcdFxcdCptYXNrIFxcdTAwMjY9IH5CSVQoaik7XFxuK1xcdFxcdGlmICghKm1hc2spXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaWR4O1xcbit9XFxuK1xcbitpbnQgX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2csXFxuK1xcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsXFxuK1xcdFxcdFxcdCAgICAgICBib29sICpmbHVzaClcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKmRpcnR5X2JpdG1hcCA9IG1lbXNsb3QtXFx1MDAzZWRpcnR5X2JpdG1hcDtcXG4rXFx0dTY0ICpod19lbnRyaWVzO1xcbitcXHRjb25zdCBpbnQgZW50cmllc19zeiA9IFBBR0VfU0laRSAvIHNpemVvZigqaHdfZW50cmllcyk7XFxuK1xcdHU2NCB0dHdsO1xcbitcXHR1NjQgc3RhcnQsIGVuZDtcXG4rXFx0Z2ZuX3QgYmFzZV9nZm47XFxuK1xcdGdwYV90IHNwbGl0X2VuZCA9IDA7XFxuK1xcbitcXHRod19lbnRyaWVzID0ga21hbGxvY19vYmpzKHU2NCwgZW50cmllc19zeiwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghaHdfZW50cmllcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHR0dHdsID0gSERCU1NfRU5UUllfVFRXTChLVk1fUEdUQUJMRV9MQVNUX0xFVkVMKTtcXG4rXFxuK1xcdGlmIChsb2cpIHtcXG4rXFx0XFx0c3RhcnQgPSBsb2ctXFx1MDAzZWZpcnN0X3BhZ2UgLyBCSVRTX1BFUl9MT05HO1xcbitcXHRcXHRlbmQgPSBzdGFydCArIERJVl9ST1VORF9VUChsb2ctXFx1MDAzZW51bV9wYWdlcywgQklUU19QRVJfTE9ORyk7XFxuK1xcdFxcdGJhc2VfZ2ZuID0gbWVtc2xvdC1cXHUwMDNlYmFzZV9nZm4gKyBsb2ctXFx1MDAzZWZpcnN0X3BhZ2UgJSBCSVRTX1BFUl9MT05HO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzdGFydCA9IDA7XFxuK1xcdFxcdGVuZCA9IGt2bV9kaXJ0eV9iaXRtYXBfYnl0ZXMobWVtc2xvdCkgLyBzaXplb2YobG9uZyk7XFxuK1xcdFxcdGJhc2VfZ2ZuID0gbWVtc2xvdC1cXHUwMDNlYmFzZV9nZm47XFxuK1xcdH1cXG4rXFxuK1xcdHdyaXRlX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSBzdGFydDsgaSBcXHUwMDNjIGVuZDsgaSsrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbWFzaztcXG4rXFx0XFx0Z2ZuX3Qgb2Zmc2V0O1xcbitcXHRcXHRhdG9taWNfbG9uZ190ICpwO1xcbitcXG4rXFx0XFx0aWYgKGxvZykgeyAvKiBDbGVhbiBvbmx5IHdoYXQgaXMgaW4gdGhlIGlucHV0IGJpdG1hcCAqL1xcbitcXHRcXHRcXHRtYXNrID0gYml0bWFwW2ldO1xcbitcXHRcXHRcXHRpZiAoIW1hc2spXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0cCA9IChhdG9taWNfbG9uZ190ICopXFx1MDAyNmRpcnR5X2JpdG1hcFtpXTtcXG4rXFx0XFx0XFx0bWFzayBcXHUwMDI2PSBhdG9taWNfbG9uZ19mZXRjaF9hbmRub3QobWFzaywgcCk7XFxuK1xcdFxcdH0gZWxzZSB7IC8qIENsZWFuIGV2ZXJ5dGhpbmcgKi9cXG4rXFx0XFx0XFx0aWYgKCFkaXJ0eV9iaXRtYXBbaV0pXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0bWFzayA9IHhjaGcoXFx1MDAyNmRpcnR5X2JpdG1hcFtpXSwgMCk7XFxuK1xcdFxcdFxcdGJpdG1hcFtpXSA9IG1hc2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghbWFzaylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRvZmZzZXQgPSBiYXNlX2dmbiArIGkgKiBCSVRTX1BFUl9MT05HO1xcbitcXG4rXFx0XFx0aWYgKGt2bV9kaXJ0eV9sb2dfbWFudWFsX3Byb3RlY3RfYW5kX2luaXRfc2V0KGt2bSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChvZmZzZXQgKyBCSVRTX1BFUl9MT05HIFxcdTAwM2Ugc3BsaXRfZW5kKSkge1xcbitcXHRcXHRcXHRncGFfdCBzdGFydCA9IGdmbl90b19ncGEob2Zmc2V0ICsgX19mZnMobWFzaykpO1xcbitcXHRcXHRcXHRncGFfdCBlbmQgPSBnZm5fdG9fZ3BhKG9mZnNldCArIF9fZmxzKG1hc2spICsgMSk7XFxuK1xcbitcXHRcXHRcXHRrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoa3ZtLCBzdGFydCwgZW5kKTtcXG4rXFx0XFx0XFx0c3BsaXRfZW5kID0gZ3BhX3RvX2dmbihBTElHTl9ET1dOKGVuZCwgUE1EX1NJWkUpICsgUE1EX1NJWkUgLSAxKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRpZHggPSBtYXNrX3RvX2hkYnNzKFxcdTAwMjZtYXNrLCBod19lbnRyaWVzLCBvZmZzZXQsIHR0d2wsIGlkeCwgZW50cmllc19zeik7XFxuK1xcdFxcdFxcdGlmIChpZHggXFx1MDAzZT0gZW50cmllc19zeikge1xcbitcXHRcXHRcXHRcXHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xcbitcXHRcXHRcXHRcXHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFxcdTAwM2UgMDtcXG4rXFx0XFx0XFx0XFx0aWYgKHJldCAhPSBpZHgpIHtcXG4rXFx0XFx0XFx0XFx0XFx0LyogU2F2ZSBiaXRzIG5vdCBjb252ZXJ0ZWQgYmFjayB0byBiaXRtYXAgKi9cXG4rXFx0XFx0XFx0XFx0XFx0YXRvbWljX2xvbmdfb3IobWFzaywgKGF0b21pY19sb25nX3QgKilcXHUwMDI2ZGlydHlfYml0bWFwW2ldKTtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGlkeCA9IDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fSB3aGlsZSAobWFzayk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpZHggIT0gMCkge1xcbitcXHRcXHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xcbitcXHRcXHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFxcdTAwM2UgMDtcXG4rXFx0fVxcbitvdXRfZXJyOlxcbitcXHRpZiAodW5saWtlbHkocmV0ICE9IGlkeCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSW4gY2FzZSB0aGVyZSBpcyBhbiBlcnJvciBhbmQgbm90IGFsbCBlbnRyaWVzIGluIEhBQ0RCUyBnZXRcXG4rXFx0XFx0ICogY2xlYW5lZCwgd2UgaGF2ZSB0byBtYXJrIHRoZSBkaXJ0eSBiaXRzIGJhY2sgaW4gdGhlIGJpdG1hcCxcXG4rXFx0XFx0ICogYXMgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIHNvZnR3YXJlIHJvdXRpbmUuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIEVudHJpZXMgc2hvdWxkIGJlIGluIG9yZGVyLCBzaW5jZSB0aGV5IHdlcmUgZXh0cmF4ZWQgZnJvbVxcbitcXHRcXHQgKiB0aGUgZGlydHktYml0bWFwLCBzbyBiYXRjaGluZyB0aGUgYXRvbWljIHdyaXRlcyBpcyBlZmZpY2llbnQuXFxuK1xcdFxcdCAqL1xcbitcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIGlkeClcXG4rXFx0XFx0XFx0aGRic3NfdG9fYml0bWFwKGh3X2VudHJpZXMsIHJldCwgaWR4LCBkaXJ0eV9iaXRtYXAsIG1lbXNsb3QtXFx1MDAzZWJhc2VfZ2ZuKTtcXG4rXFxuK1xcdFxcdHJldCA9IC1FQUdBSU47XFxuK1xcdH1cXG4rXFxuK1xcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcdGtmcmVlKGh3X2VudHJpZXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZyxcXG4rXFx0XFx0XFx0XFx0aW50ICpucl9lbnRyaWVzX3Jlc2V0KVxcbit7XFxuK1xcdHU2NCAqaHdfZW50cmllcztcXG4rXFx0dTY0IHNsb3Rfb2Zmc2V0ID0gMDtcXG4rXFx0dTY0IHR0d2w7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcdHUzMiBzbG90ID0gLTE7XFxuK1xcbitcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVFI7XFxuK1xcbitcXHR0dHdsID0gSERCU1NfRU5UUllfVFRXTChLVk1fUEdUQUJMRV9MQVNUX0xFVkVMKTtcXG4rXFxuK1xcdGh3X2VudHJpZXMgPSBrbWFsbG9jKG1heChyaW5nLVxcdTAwM2VzaXplICogc2l6ZW9mKHU2NCksIFBBR0VfU0laRSksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWh3X2VudHJpZXMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJpbmctXFx1MDAzZXNpemU7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZW50cnk7XFxuK1xcdFxcdGdmbl90IGdmbjtcXG4rXFxuK1xcdFxcdGVudHJ5ID0gXFx1MDAyNnJpbmctXFx1MDAzZWRpcnR5X2dmbnNbKHJpbmctXFx1MDAzZXJlc2V0X2luZGV4ICsgaSkgXFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHQgIChyaW5nLVxcdTAwM2VzaXplIC0gMSldO1xcbitcXG4rXFx0XFx0aWYgKCFrdm1fZGlydHlfZ2ZuX2hhcnZlc3RlZChlbnRyeSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKGVudHJ5LVxcdTAwM2VzbG90ICE9IHNsb3QpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcXG4rXFxuK1xcdFxcdFxcdG1lbXNsb3QgPSBrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIGVudHJ5LVxcdTAwM2VzbG90KTtcXG4rXFx0XFx0XFx0c2xvdCA9IGVudHJ5LVxcdTAwM2VzbG90O1xcbitcXHRcXHRcXHRzbG90X29mZnNldCA9IG1lbXNsb3QtXFx1MDAzZWJhc2VfZ2ZuO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRnZm4gPSBzbG90X29mZnNldCArIGVudHJ5LVxcdTAwM2VvZmZzZXQ7XFxuK1xcbitcXHRcXHRod19lbnRyaWVzW2ldID0gKGdmbl90b19ncGEoZ2ZuKSBcXHUwMDI2IEhEQlNTX0VOVFJZX0lQQSkgfFxcbitcXHRcXHRcXHRcXHR0dHdsIHwgSERCU1NfRU5UUllfVkFMSUQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGkpO1xcbitcXG4rXFx0LyogU2V0IGFzIGludmFsaWQgYWxsIHN1Y2Nlc3NmdWxseSBjbGVhbmVkIGVudHJpZXMgKi9cXG4rXFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyByZXQ7IGorKykge1xcbitcXHRcXHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZW50cnk7XFxuK1xcbitcXHRcXHRlbnRyeSA9IFxcdTAwMjZyaW5nLVxcdTAwM2VkaXJ0eV9nZm5zWyhyaW5nLVxcdTAwM2VyZXNldF9pbmRleCArIGopIFxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0XFx0ICAocmluZy1cXHUwMDNlc2l6ZSAtIDEpXTtcXG4rXFxuK1xcdFxcdGt2bV9kaXJ0eV9nZm5fc2V0X2ludmFsaWQoZW50cnkpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBJbiBjYXNlIG9mIGVycm9yLCB0cnkgc29mdHdhcmUgY2xlYW5pbmcgZnJvbSB0aGUgZmF1bHRpbmcgZW50cnkgKi9cXG4rXFx0cmluZy1cXHUwMDNlcmVzZXRfaW5kZXggKz0gcmV0O1xcbitcXHQqbnJfZW50cmllc19yZXNldCArPSByZXQ7XFxuK1xcbitcXHRrZnJlZShod19lbnRyaWVzKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyBpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCBoYWNkYnNpcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwY3B1KVxcbit7XFxuK1xcdHU2NCBjb25zID0gcmVhZF9zeXNyZWdfcyhTWVNfSEFDREJTQ09OU19FTDIpO1xcbitcXHR1bnNpZ25lZCBsb25nIGVyciA9IEZJRUxEX0dFVChIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OLCBjb25zKTtcXG4rXFxuK1xcdHN3aXRjaCAoZXJyKSB7XFxuK1xcdGNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9OT0Y6XFxuK1xcdFxcdHRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfSURMRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT05fSVBBSEFDRjpcXG4rXFx0XFx0LyogV2hlbiBzaXplIG5vdCBhIHBvd2VyIG9mIHR3byBcXHUwMDNlPSA0aywgZXhpdCB3aXRoIHJlc2VydmVkIFRUTFcgKi9cXG4rXFx0XFx0aW50IGluZGV4ID0gRklFTERfR0VUKEhBQ0RCU0NPTlNfRUwyX0lOREVYLCBjb25zKTtcXG4rXFxuK1xcdFxcdGlmIChpbmRleCBcXHUwMDNlPSB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc2l6ZSkpIHtcXG4rXFx0XFx0XFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTl9TVFJVQ1RGOlxcbitcXHRjYXNlIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT05fSVBBRjpcXG4rXFx0XFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19FUlJPUik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK31cXG4rXFxuK3ZvaWQga3ZtX2hhY2Ric19jcHVfdXAodm9pZClcXG4re1xcbitcXHRpZiAoaGFjZGJzaXJxIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZW5hYmxlX3BlcmNwdV9pcnEoaGFjZGJzaXJxLCBJUlFfVFlQRV9MRVZFTF9ISUdIKTtcXG4rXFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTtcXG4rfVxcbitcXG4rdm9pZCBrdm1faGFjZGJzX2NwdV9kb3duKHZvaWQpXFxuK3tcXG4rXFx0aWYgKGhhY2Ric2lycSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGRpc2FibGVfcGVyY3B1X2lycShoYWNkYnNpcnEpO1xcbitcXHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX09GRik7XFxuK31cXG4rXFxuKyNpZmRlZiBDT05GSUdfQUNQSVxcbitzdGF0aWMgaW50IF9faW5pdCBoYWNkYnNfYWNwaV9nZXRfaXJxKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCAqZ2ljYztcXG4rXFx0dTMyIGdzaTtcXG4rXFx0aW50IGlycTtcXG4rXFxuK1xcdGdpY2MgPSBhY3BpX2NwdV9nZXRfbWFkdF9naWNjKHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuK1xcdGlmIChnaWNjLVxcdTAwM2VoZWFkZXIubGVuZ3RoIFxcdTAwM2MgQUNQSV9NQURUX0dJQ0NfSEFDREJTSVJRKVxcbitcXHRcXHRyZXR1cm4gLUVOWElPO1xcbitcXG4rXFx0Z3NpID0gIGdpY2MtXFx1MDAzZWhhY2Ric2lycV9nc2k7XFxuK1xcbitcXHRpcnEgPSBhY3BpX3JlZ2lzdGVyX2dzaShOVUxMLCBnc2ksIEFDUElfTEVWRUxfU0VOU0lUSVZFLCBBQ1BJX0FDVElWRV9ISUdIKTtcXG4rXFx0aWYgKGlycSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiQUNQSTogVW5hYmxlIHRvIHJlZ2lzdGVyIEhBQ0RCUyBpbnRlcnJ1cHQ6ICVkXFxcXG5cXFwiLCBnc2kpO1xcbitcXHRcXHRyZXR1cm4gLUVOWElPO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gaXJxO1xcbit9XFxuKyNlbHNlXFxuKyNkZWZpbmUgaGFjZGJzX2FjcGlfZ2V0X2lycSgpICgtRU5YSU8pXFxuKyNlbmRpZlxcbitcXG4rdm9pZCBfX2luaXQga3ZtX2hhY2Ric19pbml0KHZvaWQpXFxuK3tcXG4rXFx0aW50IGlycTtcXG4rXFxuK1xcdC8qIEZFQVRfSEFDREJTIGlzIG9ubHkgc3VwcG9ydGVkIGlmIExpbnV4IHJ1bnMgaW4gRUwyIChWSEUpICovXFxuK1xcdGlmICghc3lzdGVtX3N1cHBvcnRzX2hhY2RicygpIHx8ICFpc19rZXJuZWxfaW5faHlwX21vZGUoKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aXJxID0gaGFjZGJzX2FjcGlfZ2V0X2lycSgpO1xcbitcXHRpZiAoaXJxIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHJlcXVlc3RfcGVyY3B1X2lycShpcnEsIGhhY2Ric2lycV9oYW5kbGVyLCBcXFwiSEFDREJTSVJRXFxcIiwgXFx1MDAyNmhhY2Ric19wY3ApIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aGFjZGJzaXJxID0gaXJxO1xcbit9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXFxuaW5kZXggOTFhN2RmYWQ2Njg2NjAuLmUxNjcyOWYwYjdiZDI0IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXFxuQEAgLTczMSw5ICs3MzEsMTMgQEAgc3RhdGljIGludCBzdGFnZTJfc2V0X3Byb3RfYXR0cihzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgZW51bSBrdm1fcGd0YWJsZV9wcm90IHBcXG4gXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1IpXFxuIFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SO1xcbiBcXG4tXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXFxuK1xcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XFxuIFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XO1xcbiBcXG4rXFx0XFx0aWYgKHBndC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pXFxuK1xcdFxcdFxcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoIWt2bV9scGEyX2lzX2VuYWJsZWQoKSlcXG4gXFx0XFx0YXR0ciB8PSBGSUVMRF9QUkVQKEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1NILCBzaCk7XFxuIFxcbkBAIC0xMzY3LDkgKzEzNzEsMTMgQEAgaW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsXFxuIFxcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9SKVxcbiBcXHRcXHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SO1xcbiBcXG4tXFx0aWYgKHByb3QgXFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1cpXFxuK1xcdGlmIChwcm90IFxcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKSB7XFxuIFxcdFxcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1c7XFxuIFxcbitcXHRcXHRpZiAocGd0LVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9QR1RBQkxFX1MyX0RCTSlcXG4rXFx0XFx0XFx0c2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gc3RhZ2UyX3NldF94bl9hdHRyKHByb3QsIFxcdTAwMjZ4bik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTE1ODUsNiArMTU5Myw5IEBAIGludCBfX2t2bV9wZ3RhYmxlX3N0YWdlMl9pbml0KHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxcbiBcXHRpZiAoIXBndC1cXHUwMDNlcGdkKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuK1xcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcXG4rXFx0XFx0ZmxhZ3MgfD0gS1ZNX1BHVEFCTEVfUzJfREJNO1xcbitcXG4gXFx0cGd0LVxcdTAwM2VpYV9iaXRzXFx0XFx0PSBpYV9iaXRzO1xcbiBcXHRwZ3QtXFx1MDAzZXN0YXJ0X2xldmVsXFx0PSBzdGFydF9sZXZlbDtcXG4gXFx0cGd0LVxcdTAwM2VtbV9vcHNcXHRcXHQ9IG1tX29wcztcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vbW11LmMgYi9hcmNoL2FybTY0L2t2bS9tbXUuY1xcbmluZGV4IDZjOTQxYWFhMTBjNjM5Li4yZjlkOTBjMzU2NjhiOSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXFxuQEAgLTExNyw4ICsxMTcsOCBAQCBzdGF0aWMgYm9vbCBuZWVkX3NwbGl0X21lbWNhY2hlX3RvcHVwX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRyZXR1cm4ga3ZtX21tdV9tZW1vcnlfY2FjaGVfbnJfZnJlZV9vYmplY3RzKGNhY2hlKSBcXHUwMDNjIG1pbjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLCBwaHlzX2FkZHJfdCBhZGRyLFxcbi1cXHRcXHRcXHRcXHQgICAgcGh5c19hZGRyX3QgZW5kKVxcbitpbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkcixcXG4rXFx0XFx0XFx0ICAgICBwaHlzX2FkZHJfdCBlbmQpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZTtcXG4gXFx0c3RydWN0IGt2bV9wZ3RhYmxlICpwZ3Q7XFxuQEAgLTEwMjcsOCArMTAyNywxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxcbiBcXHRcXHQqcGVyX2NwdV9wdHIobW11LVxcdTAwM2VsYXN0X3ZjcHVfcmFuLCBjcHUpID0gLTE7XFxuIFxcbi1cXHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi9cXG4tXFx0bW11LVxcdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcXG4rXFx0IC8qIFRoZSBlYWdlciBwYWdlIHNwbGl0dGluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGlmIHN5c3RlbSBoYXMgbm8gSERCU1MgKi9cXG4rXFx0aWYgKHN5c3RlbV9zdXBwb3J0c19oZGJzcygpKVxcbitcXHRcXHRtbXUtXFx1MDAzZXNwbGl0X3BhZ2VfY2h1bmtfc2l6ZSA9IDI1NiAqIDEwMjQgKiBQQUdFX1NJWkU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bW11LVxcdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcXG4rXFxuIFxcdG1tdS1cXHUwMDNlc3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87XFxuIFxcbiBcXHRtbXUtXFx1MDAzZXBnZF9waHlzID0gX19wYShwZ3QtXFx1MDAzZXBnZCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xcbmluZGV4IDliODVhODRmNmZkNDk0Li5iZDJjMGJiOThkYTYxZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcXG5AQCAtNjksOCArNjksMTAgQEAgSEFTX1ZBNTJcXG4gSEFTX1ZJUlRfSE9TVF9FWFROXFxuIEhBU19XRlhUXFxuIEhBU19YTlhcXG4rSEFTX0hEQlNTXFxuIEhBRlRcXG4gSFdfREJNXFxuK0hBQ0RCU1xcbiBLVk1fSFZIRVxcbiBLVk1fUFJPVEVDVEVEX01PREVcXG4gTUlTTUFUQ0hFRF9DQUNIRV9UWVBFXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnIGIvYXJjaC9hcm02NC90b29scy9zeXNyZWdcXG5pbmRleCBiYzE3ODhiMTY2MmI3Ni4uN2I3YzNkNmEwZjAzMDkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9zeXNyZWdcXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZ1xcbkBAIC00NjM0LDYgKzQ2MzQsMzYgQEAgRmllbGRcXHQ3OjZcXHRTTDBcXG4gRmllbGRcXHQ1OjBcXHRUMFNaXFxuIEVuZFN5c3JlZ1xcbiBcXG4rU3lzcmVnXFx0SEFDREJTQlJfRUwyXFx0M1xcdDRcXHQyXFx0M1xcdDRcXG4rUmVzMFxcdDYzOjU2XFxuK0ZpZWxkXFx0NTU6MTJcXHRCQUREUlxcbitGaWVsZFxcdDExXFx0RU5cXG4rUmVzMFxcdDEwOjRcXG4rVW5zaWduZWRFbnVtXFx0MzowXFx0U1pcXG4rXFx0MGIwMDAwXFx0NEtcXG4rXFx0MGIwMDAxXFx0OEtcXG4rXFx0MGIwMDEwXFx0MTZLXFxuK1xcdDBiMDAxMVxcdDMyS1xcbitcXHQwYjAxMDBcXHQ2NEtcXG4rXFx0MGIwMTAxXFx0MTI4S1xcbitcXHQwYjAxMTBcXHQyNTZLXFxuK1xcdDBiMDExMVxcdDUxMktcXG4rXFx0MGIxMDAwXFx0MU1cXG4rXFx0MGIxMDAxXFx0Mk1cXG4rRW5kRW51bVxcbitFbmRTeXNyZWdcXG4rXFxuK1N5c3JlZ1xcdEhBQ0RCU0NPTlNfRUwyXFx0M1xcdDRcXHQyXFx0M1xcdDVcXG4rVW5zaWduZWRFbnVtXFx0NjM6NjJcXHRFUlJfUkVBU09OXFxuK1xcdDBiMDBcXHROT0ZcXG4rXFx0MGIwMVxcdFNUUlVDVEZcXG4rXFx0MGIxMFxcdElQQUZcXG4rXFx0MGIxMVxcdElQQUhBQ0ZcXG4rRW5kRW51bVxcbitSZXMwXFx0NjE6MTlcXG4rRmllbGRcXHQxODowXFx0SU5ERVhcXG4rRW5kU3lzcmVnXFxuK1xcbiBTeXNyZWdcXHRHQ1NDUl9FTDJcXHQzXFx0NFxcdDJcXHQ1XFx0MFxcbiBGaWVsZHNcXHRHQ1NDUl9FTHhcXG4gRW5kU3lzcmVnXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaFxcbmluZGV4IGJhZWY1MjUzNjdiNWM0Li5lYWVmYjQ5NGVmNTk3MiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwyLmhcXG4rKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmhcXG5AQCAtMTQ0OSw2ICsxNDQ5LDcgQEAgc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCB7XFxuIFxcdHUxNiB0cmJlX2ludGVycnVwdDtcXHQvKiBBQ1BJIDYuNSAqL1xcbiBcXHR1MTYgaWFmZmlkO1xcdFxcdC8qIEFDUEkgNi43ICovXFxuIFxcdHUzMiBpcnNfaWQ7XFxuK1xcdHUzMiBoYWNkYnNpcnFfZ3NpO1xcdC8qIEFDUEkgNi5YICovXFxuIH07XFxuIFxcbiAvKiBNYXNrcyBmb3IgRmxhZ3MgZmllbGQgYWJvdmUgKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjg0OTI5NzlkNjk0ZTcwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oXFxuQEAgLTAsMCArMSwzNCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBUk0gTHRkLlxcbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXFx1MDAzY2xlby5icmFzQGFybS5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfX0tWTV9ESVJUWV9CSVRfSF9fXFxuKyNkZWZpbmUgX19LVk1fRElSVFlfQklUX0hfX1xcbitcXG4rI2lmbmRlZiBDT05GSUdfSEFWRV9LVk1fSFdfRElSVFlfQklUXFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qga3ZtX2NsZWFyX2RpcnR5X2xvZyAqbG9nLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKmZsdXNoKVxcbit7XFxuK1xcdHJldHVybiAtRU5YSU87XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxcbit7XFxuK1xcdHJldHVybiAtRU5YSU87XFxuK31cXG4rXFxuKyNlbHNlIC8qIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXFx1MDAzZVxcbitcXG4rI2VuZGlmIC8qIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVQgKi9cXG4rXFxuKyNlbmRpZiAvKiBfX0tWTV9ESVJUWV9CSVRfSF9fICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaCBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaFxcbmluZGV4IGViMTBkODdhZGY3ZDU5Li4xOTBkOTdmY2U0YTQyZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcXG5AQCAtODQsNiArODQsMTggQEAgdm9pZCBrdm1fZGlydHlfcmluZ19wdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHNsb3QsIHU2NCBvZmZzZXQpO1xcbiBcXG4gYm9vbCBrdm1fZGlydHlfcmluZ19jaGVja19yZXF1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2RpcnR5X2dmbl9oYXJ2ZXN0ZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcXG4re1xcbitcXHRyZXR1cm4gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Z2ZuLVxcdTAwM2VmbGFncykgXFx1MDAyNiBLVk1fRElSVFlfR0ZOX0ZfUkVTRVQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZGlydHlfZ2ZuX3NldF9pbnZhbGlkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pXFxuK3tcXG4rXFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNmdmbi1cXHUwMDNlZmxhZ3MsIDApO1xcbit9XFxuK1xcbitzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICprdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KTtcXG4rXFxuIC8qIGZvciB1c2UgaW4gdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKi9cXG4gc3RydWN0IHBhZ2UgKmt2bV9kaXJ0eV9yaW5nX2dldF9wYWdlKHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZywgdTMyIG9mZnNldCk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5pbmRleCBhYjhjZmFlYzgyZDMxZS4uN2VhNmVkN2NlMjAzYWEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuQEAgLTE2NjksNiArMTY2OSw5IEBAIGJvb2wga3ZtX2FyY2hfdmNwdV9wcmVlbXB0ZWRfaW5fa2VybmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuIHZvaWQga3ZtX2FyY2hfcHJlX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTtcXG4gdm9pZCBrdm1fYXJjaF9jcmVhdGVfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pO1xcbiBcXG4raW50IGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHBoeXNfYWRkcl90IGFkZHIsXFxuK1xcdFxcdFxcdCAgICAgcGh5c19hZGRyX3QgZW5kKTtcXG4rXFxuICNpZm5kZWYgX19LVk1fSEFWRV9BUkNIX1ZNX0FMTE9DXFxuIC8qXFxuICAqIEFsbCBhcmNoaXRlY3R1cmVzIHRoYXQgd2FudCB0byB1c2UgdnphbGxvYyBjdXJyZW50bHkgYWxzb1xcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9LY29uZmlnIGIvdmlydC9rdm0vS2NvbmZpZ1xcbmluZGV4IDc5NDk3NmI4OGM2Zjk3Li5mODc1N2I1Yjg0YjNlMCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9LY29uZmlnXFxuKysrIGIvdmlydC9rdm0vS2NvbmZpZ1xcbkBAIC0yMCw2ICsyMCw5IEBAIGNvbmZpZyBIQVZFX0tWTV9JUlFfUk9VVElOR1xcbiBjb25maWcgSEFWRV9LVk1fRElSVFlfUklOR1xcbiAgICAgICAgYm9vbFxcbiBcXG4rY29uZmlnIEhBVkVfS1ZNX0hXX0RJUlRZX0JJVFxcbisgICAgICAgYm9vbFxcbitcXG4gIyBPbmx5IHN0cm9uZ2x5IG9yZGVyZWQgYXJjaGl0ZWN0dXJlcyBjYW4gc2VsZWN0IHRoaXMsIGFzIGl0IGRvZXNuJ3RcXG4gIyBwdXQgYW55IGV4cGxpY2l0IGNvbnN0cmFpbnQgb24gdXNlcnNwYWNlIG9yZGVyaW5nLiBUaGV5IGNhbiBhbHNvXFxuICMgc2VsZWN0IHRoZSBfQUNRX1JFTCB2ZXJzaW9uLlxcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9kaXJ0eV9yaW5nLmMgYi92aXJ0L2t2bS9kaXJ0eV9yaW5nLmNcXG5pbmRleCA1NzJiODU0ZWRmNzQwZC4uZmU0ZTdkYTZjYzRhNmEgMTAwNjQ0XFxuLS0tIGEvdmlydC9rdm0vZGlydHlfcmluZy5jXFxuKysrIGIvdmlydC9rdm0vZGlydHlfcmluZy5jXFxuQEAgLTgsNiArOCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1fZGlydHlfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMva3ZtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJrdm1fbW0uaFxcXCJcXG4gXFxuQEAgLTUwLDE4ICs1MSwzMCBAQCBzdGF0aWMgYm9vbCBrdm1fZGlydHlfcmluZ19mdWxsKHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZylcXG4gXFx0cmV0dXJuIGt2bV9kaXJ0eV9yaW5nX3VzZWQocmluZykgXFx1MDAzZT0gcmluZy1cXHUwMDNlc2l6ZTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQga3ZtX3Jlc2V0X2RpcnR5X2dmbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90LCB1NjQgb2Zmc2V0LCB1NjQgbWFzaylcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpcXG4rX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KVxcbiB7XFxuLVxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XFxuIFxcdGludCBhc19pZCwgaWQ7XFxuIFxcbiBcXHRhc19pZCA9IHNsb3QgXFx1MDAzZVxcdTAwM2UgMTY7XFxuIFxcdGlkID0gKHUxNilzbG90O1xcbiBcXG4gXFx0aWYgKGFzX2lkIFxcdTAwM2U9IGt2bV9hcmNoX25yX21lbXNsb3RfYXNfaWRzKGt2bSkgfHwgaWQgXFx1MDAzZT0gS1ZNX1VTRVJfTUVNX1NMT1RTKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGlkX3RvX21lbXNsb3QoX19rdm1fbWVtc2xvdHMoa3ZtLCBhc19pZCksIGlkKTtcXG4rfVxcbiBcXG4tXFx0bWVtc2xvdCA9IGlkX3RvX21lbXNsb3QoX19rdm1fbWVtc2xvdHMoa3ZtLCBhc19pZCksIGlkKTtcXG4rc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdClcXG4re1xcbitcXHRyZXR1cm4gX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIHNsb3QpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBrdm1fcmVzZXRfZGlydHlfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QsIHU2NCBvZmZzZXQsIHU2NCBtYXNrKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XFxuK1xcbitcXHRtZW1zbG90ID0gX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIHNsb3QpO1xcbiBcXG4gXFx0aWYgKCFtZW1zbG90IHx8IG9mZnNldCBcXHUwMDNlPSBtZW1zbG90LVxcdTAwM2VucGFnZXMgfHxcXG4gXFx0ICAgIG9mZnNldCArIF9fZmxzKG1hc2spIFxcdTAwM2U9IG1lbXNsb3QtXFx1MDAzZW5wYWdlcylcXG5AQCAtODgsMjEgKzEwMSwxMSBAQCBpbnQga3ZtX2RpcnR5X3JpbmdfYWxsb2Moc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX2RpcnR5X2dmbl9zZXRfaW52YWxpZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxcbi17XFxuLVxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZnZm4tXFx1MDAzZWZsYWdzLCAwKTtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2RpcnRpZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcXG4ge1xcbiBcXHRnZm4tXFx1MDAzZWZsYWdzID0gS1ZNX0RJUlRZX0dGTl9GX0RJUlRZO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2RpcnR5X2dmbl9oYXJ2ZXN0ZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcXG4te1xcbi1cXHRyZXR1cm4gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Z2ZuLVxcdTAwM2VmbGFncykgXFx1MDAyNiBLVk1fRElSVFlfR0ZOX0ZfUkVTRVQ7XFxuLX1cXG4tXFxuIGludCBrdm1fZGlydHlfcmluZ19yZXNldChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZyxcXG4gXFx0XFx0XFx0IGludCAqbnJfZW50cmllc19yZXNldClcXG4ge1xcbkBAIC0xMzEsNiArMTM0LDkgQEAgaW50IGt2bV9kaXJ0eV9yaW5nX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxcbiBcXHQgKi9cXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4gXFxuK1xcdGlmIChrdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKGt2bSwgcmluZywgbnJfZW50cmllc19yZXNldCkgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHR3aGlsZSAobGlrZWx5KCgqbnJfZW50cmllc19yZXNldCkgXFx1MDAzYyBJTlRfTUFYKSkge1xcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLmEyNWI4OTAyY2RmYzE3IDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTY1LDYgKzY1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9rdm0uaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdm1fZGlydHlfcmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2RpcnR5X2JpdC5oXFx1MDAzZVxcbiBcXG4gXFxuIC8qIFdvcnN0IGNhc2UgYnVmZmVyIHNpemUgbmVlZGVkIGZvciBob2xkaW5nIGFuIGludGVnZXIuICovXFxuQEAgLTIyNjIsNiArMjI2MywxMCBAQCBzdGF0aWMgaW50IGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3Qoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyAqbG9nKVxcbiBcXHRcXHRkaXJ0eV9iaXRtYXBfYnVmZmVyID0ga3ZtX3NlY29uZF9kaXJ0eV9iaXRtYXAobWVtc2xvdCk7XFxuIFxcdFxcdG1lbXNldChkaXJ0eV9iaXRtYXBfYnVmZmVyLCAwLCBuKTtcXG4gXFxuK1xcdFxcdGlmIChrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoa3ZtLCBtZW1zbG90LCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGRpcnR5X2JpdG1hcF9idWZmZXIsIFxcdTAwMjZmbHVzaCkgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRcXHRLVk1fTU1VX0xPQ0soa3ZtKTtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG4gLyBzaXplb2YobG9uZyk7IGkrKykge1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1hc2s7XFxuQEAgLTIyODEsNiArMjI4Niw3IEBAIHN0YXRpYyBpbnQga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfbG9nICpsb2cpXFxuIFxcdFxcdEtWTV9NTVVfVU5MT0NLKGt2bSk7XFxuIFxcdH1cXG4gXFxuK291dDpcXG4gXFx0aWYgKGZsdXNoKVxcbiBcXHRcXHRrdm1fZmx1c2hfcmVtb3RlX3RsYnNfbWVtc2xvdChrdm0sIG1lbXNsb3QpO1xcbiBcXG5AQCAtMjM3Myw2ICsyMzc5LDEwIEBAIHN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0aWYgKGNvcHlfZnJvbV91c2VyKGRpcnR5X2JpdG1hcF9idWZmZXIsIGxvZy1cXHUwMDNlZGlydHlfYml0bWFwLCBuKSlcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcbitcXHRpZiAoa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKGt2bSwgbWVtc2xvdCwgbG9nLCBkaXJ0eV9iaXRtYXBfYnVmZmVyLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbHVzaCkgXFx1MDAzZT0gMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRLVk1fTU1VX0xPQ0soa3ZtKTtcXG4gXFx0Zm9yIChvZmZzZXQgPSBsb2ctXFx1MDAzZWZpcnN0X3BhZ2UsIGkgPSBvZmZzZXQgLyBCSVRTX1BFUl9MT05HLFxcbiBcXHRcXHQgbiA9IERJVl9ST1VORF9VUChsb2ctXFx1MDAzZW51bV9wYWdlcywgQklUU19QRVJfTE9ORyk7IG4tLTtcXG5AQCAtMjM5MiwxMiArMjQwMiwxMyBAQCBzdGF0aWMgaW50IGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdCovXFxuIFxcdFxcdGlmIChtYXNrKSB7XFxuIFxcdFxcdFxcdGZsdXNoID0gdHJ1ZTtcXG4rXFxuIFxcdFxcdFxcdGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChrdm0sIG1lbXNsb3QsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG9mZnNldCwgbWFzayk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRLVk1fTU1VX1VOTE9DSyhrdm0pO1xcbi1cXG4rb3V0OlxcbiBcXHRpZiAoZmx1c2gpXFxuIFxcdFxcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KGt2bSwgbWVtc2xvdCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0MDo1NS42MDQ1NjQ5NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNjgyNjczMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiQUNQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyXCIsXG4gICAgXCJfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJcIixcbiAgICBcImRpcnR5X2JpdF9jbGVhclwiLFxuICAgIFwiaGFjZGJzaXJxX2hhbmRsZXJcIixcbiAgICBcImt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc1wiLFxuICAgIFwia3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdFwiLFxuICAgIFwia3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0XCIsXG4gICAgXCJrdm1fZGlydHlfcmluZ19yZXNldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjNTg2NzE3NmY3MTA0NzZiMjhiMTM2ZGI1YzgzOTMxYTc1ZWJlODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxMTo0MDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9hY3BpLmhcbmluZGV4IDhhNTRjYTZiYTYwMjgyLi44ODMzMTVlOWQ3OWQ5OCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vYWNwaS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2FjcGkuaFxuQEAgLTQ1LDYgKzQ1LDkgQEBcbiBcbiAjZGVmaW5lIEFDUElfTUFEVF9HSUNDX1RSQkUgIChvZmZzZXRvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0LCBcXFxuIFx0dHJiZV9pbnRlcnJ1cHQpICsgc2l6ZW9mKHUxNikpXG4rXG4rI2RlZmluZSBBQ1BJX01BRFRfR0lDQ19IQUNEQlNJUlEgIChvZmZzZXRvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0LCBcXFxuK1x0aGFjZGJzaXJxX2dzaSkgKyBzaXplb2YodTMyKSlcbiAvKlxuICAqIEFybcKuIEZ1bmN0aW9uYWwgRml4ZWQgSGFyZHdhcmUgU3BlY2lmaWNhdGlvbiBWZXJzaW9uIDEuMi5cbiAgKiBUYWJsZSAyOiBBcm0gQXJjaGl0ZWN0dXJlIGNvbnRleHQgbG9zcyBmbGFnc1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmhcbmluZGV4IGE1Nzg3MGZhOTZkYjViLi42MjBhZTRjZGRiNzYwYSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaFxuQEAgLTg2Myw2ICs4NjMsMTYgQEAgc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oYWZ0KHZvaWQpXG4gXHRyZXR1cm4gY3B1c19oYXZlX2ZpbmFsX2NhcChBUk02NF9IQUZUKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19oZGJzcyh2b2lkKVxuK3tcbitcdHJldHVybiBjcHVzX2hhdmVfZmluYWxfY2FwKEFSTTY0X0hBU19IREJTUyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKHZvaWQpXG4re1xuK1x0cmV0dXJuIGNwdXNfaGF2ZV9maW5hbF9jYXAoQVJNNjRfSEFDREJTKTtcbit9XG4rXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHN5c3RlbV9zdXBwb3J0c19tcGFtKHZvaWQpXG4ge1xuIFx0cmV0dXJuIGFsdGVybmF0aXZlX2hhc19jYXBfdW5saWtlbHkoQVJNNjRfTVBBTSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9kaXJ0eV9iaXQuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kNzZjMTA5OTM3ZDhkYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZGlydHlfYml0LmhcbkBAIC0wLDAgKzEsNjcgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLypcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXHUwMDNjbGVvLmJyYXNAYXJtLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpZm5kZWYgX19BUk02NF9LVk1fRElSVFlfQklUX0hfX1xuKyNkZWZpbmUgX19BUk02NF9LVk1fRElSVFlfQklUX0hfX1xuK1xuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGd0YWJsZS5oXHUwMDNlXG4rXG4rZW51bSBoYWNkYnNfc3RhdHVzIHtcbitcdEhBQ0RCU19PRkYsXG4rXHRIQUNEQlNfSURMRSxcbitcdEhBQ0RCU19SVU5OSU5HLFxuK1x0SEFDREJTX0VSUk9SXG4rfTtcbitcbitzdHJ1Y3QgaGFjZGJzIHtcbitcdGVudW0gaGFjZGJzX3N0YXR1cyBzdGF0dXM7XG4rXHRpbnQgc2l6ZTtcbit9O1xuK1xuK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgaGFjZGJzLCBoYWNkYnNfcGNwKTtcbitcbit2b2lkIF9faW5pdCBrdm1faGFjZGJzX2luaXQodm9pZCk7XG4rdm9pZCBrdm1faGFjZGJzX2NwdV91cCh2b2lkKTtcbit2b2lkIGt2bV9oYWNkYnNfY3B1X2Rvd24odm9pZCk7XG4rXG4raW50IF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHQgICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbitcdFx0XHQgICAgICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcbitcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxuK1x0XHRcdCAgICAgICBib29sICpmbHVzaCk7XG4rXG4raW50IF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZyxcbitcdFx0XHRcdGludCAqbnJfZW50cmllc19yZXNldCk7XG4rXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9hcmNoX2RpcnR5X2NsZWFyX2VuYWJsZWQoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdHJldHVybiB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfSURMRSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAoa3ZtLVx1MDAzZWFyY2gubW11LnBndC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcbitcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxuK1x0XHRcdFx0XHQgICBib29sICpmbHVzaClcbit7XG4rXHRpZiAoIWt2bV9hcmNoX2RpcnR5X2NsZWFyX2VuYWJsZWQoa3ZtKSlcbitcdFx0cmV0dXJuIC1FUEVSTTtcbitcbitcdHJldHVybiBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihrdm0sIG1lbXNsb3QsIGxvZywgYml0bWFwLCBmbHVzaCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuK1x0XHRcdFx0XHQgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxuK3tcbitcdGlmICgha3ZtX2FyY2hfZGlydHlfY2xlYXJfZW5hYmxlZChrdm0pKVxuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1xuK1x0cmV0dXJuIF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihrdm0sIHJpbmcsIG5yX2VudHJpZXNfcmVzZXQpO1xuK31cbitcbisjZW5kaWYgLyogX19BUk02NF9LVk1fRElSVFlfQklUX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3BndGFibGUuaFxuaW5kZXggNDFhODY4NzkzOGViNmIuLjY0NmZmODhlMDI1ODNmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fcGd0YWJsZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9wZ3RhYmxlLmhcbkBAIC05Myw2ICs5Myw4IEBAIHR5cGVkZWYgdTY0IGt2bV9wdGVfdDtcbiBcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX1hOXHRHRU5NQVNLKDU0LCA1MylcbiBcbisjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTVx0QklUKDUxKVxuK1xuICNkZWZpbmUgS1ZNX1BURV9MRUFGX0FUVFJfSElfUzFfR1BcdEJJVCg1MClcbiBcbiAjZGVmaW5lIEtWTV9QVEVfTEVBRl9BVFRSX1MyX1BFUk1TXHQoS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9SIHwgXFxcbkBAIC0yNTMsNiArMjU1LDcgQEAgc3RydWN0IGt2bV9wZ3RhYmxlX21tX29wcyB7XG4gZW51bSBrdm1fcGd0YWJsZV9zdGFnZTJfZmxhZ3Mge1xuIFx0S1ZNX1BHVEFCTEVfUzJfSURNQVBcdFx0XHQ9IEJJVCgwKSxcbiBcdEtWTV9QR1RBQkxFX1MyX0FTX1MxXHRcdFx0PSBCSVQoMSksXG4rXHRLVk1fUEdUQUJMRV9TMl9EQk1cdFx0XHQ9IEJJVCgyKSxcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWZlYXR1cmUuY1xuaW5kZXggOWEyMmRmMGM1MTIwZjMuLjYyZjU2YmJkMGE2NWM4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1ZmVhdHVyZS5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVmZWF0dXJlLmNcbkBAIC01MjMsNiArNTIzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnIzW10gPSB7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9mdHJfYml0cyBmdHJfaWRfYWE2NG1tZnI0W10gPSB7XG4gXHRTX0FSTTY0X0ZUUl9CSVRTKEZUUl9ISURERU4sIEZUUl9TVFJJQ1QsIEZUUl9MT1dFUl9TQUZFLCBJRF9BQTY0TU1GUjRfRUwxX0UySDBfU0hJRlQsIDQsIDApLFxuIFx0QVJNNjRfRlRSX0JJVFMoRlRSX0hJRERFTiwgRlRSX1NUUklDVCwgRlRSX0xPV0VSX1NBRkUsIElEX0FBNjRNTUZSNF9FTDFfTlZfZnJhY19TSElGVCwgNCwgMCksXG4rXHRBUk02NF9GVFJfQklUUyhGVFJfSElEREVOLCBGVFJfU1RSSUNULCBGVFJfTE9XRVJfU0FGRSwgSURfQUE2NE1NRlI0X0VMMV9IQUNEQlNfU0hJRlQsIDQsIDApLFxuIFx0QVJNNjRfRlRSX0VORCxcbiB9O1xuIFxuQEAgLTIxMzEsNiArMjEzMiwxMSBAQCBzdGF0aWMgYm9vbCBodmhlX3Bvc3NpYmxlKGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzICplbnRyeSxcbiBcdHJldHVybiBhcm02NF90ZXN0X3N3X2ZlYXR1cmVfb3ZlcnJpZGUoQVJNNjRfU1dfRkVBVFVSRV9PVkVSUklERV9IVkhFKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgaGFzX3ZoZV9oZGJzcyhjb25zdCBzdHJ1Y3QgYXJtNjRfY3B1X2NhcGFiaWxpdGllcyAqZW50cnksIGludCBjb3BlKVxuK3tcbitcdHJldHVybiBpc19rZXJuZWxfaW5faHlwX21vZGUoKSBcdTAwMjZcdTAwMjYgaGFzX2NwdWlkX2ZlYXR1cmUoZW50cnksIGNvcGUpO1xuK31cbitcbiBib29sIGNwdV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KHZvaWQpXG4ge1xuIFx0LypcbkBAIC0yNzY2LDYgKzI3NzIsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIERCTSlcbiBcdH0sXG4gI2VuZGlmXG4rXHR7XG4rXHRcdC5kZXNjID0gXCJIYXJkd2FyZSBkaXJ0eSBiaXQgQ2xlYW5pbmdcIixcbitcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4rXHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSEFDREJTLFxuK1x0XHQubWF0Y2hlcyA9IGhhc19jcHVpZF9mZWF0dXJlLFxuK1x0XHRBUk02NF9DUFVJRF9GSUVMRFMoSURfQUE2NE1NRlI0X0VMMSwgSEFDREJTLCBJTVApXG4rXHR9LFxuICNpZmRlZiBDT05GSUdfQVJNNjRfSEFGVFxuIFx0e1xuIFx0XHQuZGVzYyA9IFwiSGFyZHdhcmUgbWFuYWdlZCBBY2Nlc3MgRmxhZyBmb3IgVGFibGUgRGVzY3JpcHRvcnNcIixcbkBAIC0yNzgxLDYgKzI3OTQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhcm02NF9jcHVfY2FwYWJpbGl0aWVzIGFybTY0X2ZlYXR1cmVzW10gPSB7XG4gXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhBRlQpXG4gXHR9LFxuICNlbmRpZlxuK1x0e1xuK1x0XHQuZGVzYyA9IFwiSGFyZHdhcmUgRGlydHkgc3RhdGUgdHJhY2tpbmcgc3RydWN0dXJlIChIREJTUylcIixcbitcdFx0LnR5cGUgPSBBUk02NF9DUFVDQVBfU1lTVEVNX0ZFQVRVUkUsXG4rXHRcdC5jYXBhYmlsaXR5ID0gQVJNNjRfSEFTX0hEQlNTLFxuK1x0XHQubWF0Y2hlcyA9IGhhc192aGVfaGRic3MsXG4rXHRcdEFSTTY0X0NQVUlEX0ZJRUxEUyhJRF9BQTY0TU1GUjFfRUwxLCBIQUZEQlMsIEhEQlNTKVxuK1x0fSxcbiBcdHtcbiBcdFx0LmRlc2MgPSBcIkNSQzMyIGluc3RydWN0aW9uc1wiLFxuIFx0XHQuY2FwYWJpbGl0eSA9IEFSTTY0X0hBU19DUkMzMixcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9LY29uZmlnIGIvYXJjaC9hcm02NC9rdm0vS2NvbmZpZ1xuaW5kZXggNDQ5MTU0ZjlhNDg1MmQuLmRiODQ4N2JmNzM4Yjc4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm02NC9rdm0vS2NvbmZpZ1xuQEAgLTM0LDYgKzM0LDcgQEAgbWVudWNvbmZpZyBLVk1cbiBcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXG4gXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxuK1x0c2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJXG4gXHRzZWxlY3QgU0NIRURfSU5GT1xuIFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG4gXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUgYi9hcmNoL2FybTY0L2t2bS9NYWtlZmlsZVxuaW5kZXggNTk2MTJkMmYyNzdjMWQuLjZmYWFjZDg1NzM0NmIzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcbisrKyBiL2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlXG5AQCAtMjQsNyArMjQsNyBAQCBrdm0teSArPSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuIFx0IHZnaWMvdmdpYy1tbWlvLm8gdmdpYy92Z2ljLW1taW8tdjIubyBcXFxuIFx0IHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZpY2UubyBcXFxuIFx0IHZnaWMvdmdpYy1pdHMubyB2Z2ljL3ZnaWMtZGVidWcubyB2Z2ljL3ZnaWMtdjMtbmVzdGVkLm8gXFxcbi1cdCB2Z2ljL3ZnaWMtdjUub1xuK1x0IHZnaWMvdmdpYy12NS5vIGRpcnR5X2JpdC5vXG4gXG4ga3ZtLSQoQ09ORklHX0hXX1BFUkZfRVZFTlRTKSAgKz0gcG11LWVtdWwubyBwbXUub1xuIGt2bS0kKENPTkZJR19BUk02NF9QVFJfQVVUSCkgICs9IHBhdXRoLm9cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jXG5pbmRleCA1MGFkZmZmNzViZTgyZS4uZGMxYTQ2MjlhYWViOTggMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXJtLmNcbkBAIC00Miw2ICs0Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uZXN0ZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fcGt2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9wdHJhdXRoLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3RhY2t0cmFjZS9udmhlLmhcdTAwM2VcbiBcbkBAIC0yMzA3LDYgKzIzMDgsNyBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIFxuIFx0a3ZtX3ZnaWNfY3B1X3VwKCk7XG4gXHRrdm1fdGltZXJfY3B1X3VwKCk7XG4rXHRrdm1faGFjZGJzX2NwdV91cCgpO1xuIFxuIFx0cHJlZW1wdF9lbmFibGUoKTtcbiBcbkBAIC0yMzE1LDYgKzIzMTcsNyBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIFxuIHZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiB7XG4rXHRrdm1faGFjZGJzX2NwdV9kb3duKCk7XG4gXHRrdm1fdGltZXJfY3B1X2Rvd24oKTtcbiBcdGt2bV92Z2ljX2NwdV9kb3duKCk7XG4gXG5AQCAtMjQ4MSw2ICsyNDg0LDggQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9zdWJzeXN0ZW1zKHZvaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGt2bV9oYWNkYnNfaW5pdCgpO1xuK1xuIFx0a3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKCk7XG4gXG4gXHRlcnIgPSBrdm1faHlwX3RyYWNlX2luaXQoKTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYyBiL2FyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE5Mjg5ZWE3M2Q5NmQ5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY1xuQEAgLTAsMCArMSw0MTEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQVJNIEx0ZC5cbisgKiBBdXRob3I6IExlb25hcmRvIEJyYXMgXHUwMDNjbGVvLmJyYXNAYXJtLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fZGlydHlfYml0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2NvbmZpZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4rXG4rREVGSU5FX1BFUl9DUFUoc3RydWN0IGhhY2RicywgaGFjZGJzX3BjcCkgPSB7XG4rXHQuc3RhdHVzID0gSEFDREJTX09GRixcbitcdC5zaXplID0gMCxcbit9O1xuK1xuKy8qIEhEQlNTIGVudHJ5IGZpZWxkIGRlZmluaXRpb25zICovXG4rI2RlZmluZSBIREJTU19FTlRSWV9WQUxJRCBCSVQoMClcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfU0hJRlQgKDEpXG4rI2RlZmluZSBIREJTU19FTlRSWV9UVFdMX01BU0sgKEdFTk1BU0soMywgMSkpXG4rI2RlZmluZSBIREJTU19FTlRSWV9UVFdMKHgpIFxcXG4rXHQoKCh4KSBcdTAwM2NcdTAwM2MgSERCU1NfRU5UUllfVFRXTF9TSElGVCkgXHUwMDI2IEhEQlNTX0VOVFJZX1RUV0xfTUFTSylcbisjZGVmaW5lIEhEQlNTX0VOVFJZX1RUV0xfUkVTViBIREJTU19FTlRSWV9UVFdMKC00KVxuKyNkZWZpbmUgSERCU1NfRU5UUllfSVBBIEdFTk1BU0tfVUxMKDU1LCAxMilcbitcbitzdGF0aWMgX19yb19hZnRlcl9pbml0IGludCBoYWNkYnNpcnEgPSAtMTtcbitcbitzdGF0aWMgdm9pZCBoYWNkYnNfc3RhcnQodTY0ICpod19lbnRyaWVzLCBpbnQgc2l6ZSlcbit7XG4rXHR1NjQgYnI7XG4rXHQvKiBFYWNoIGVudHJ5IGlzIDggYnl0ZXMgKi9cbitcdGludCBzaXplX2IgPSBzaXplICogc2l6ZW9mKGh3X2VudHJpZXNbMF0pO1xuK1x0aW50IHNpemVfcDIgPSBtYXgocm91bmR1cF9wb3dfb2ZfdHdvKHNpemVfYiksIFBBR0VfU0laRSk7XG4rXG4rXHQvKiBJZiBub3QgdXNpbmcgdGhlIGZ1bGwgc2l6ZSBvZiB0aGUgYXJyYXksIHB1dCBhIHN0b3AgZW50cnkgYXQgdGhlIGVuZCAqL1xuK1x0aWYgKHNpemVfYiBcdTAwM2Mgc2l6ZV9wMilcbitcdFx0aHdfZW50cmllc1tzaXplXSA9IEhEQlNTX0VOVFJZX1ZBTElEIHwgSERCU1NfRU5UUllfVFRXTF9SRVNWO1xuK1xuK1x0c3lzcmVnX2NsZWFyX3NldF9zKFNZU19IQUNEQlNDT05TX0VMMixcbitcdFx0XHQgICBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OIHwgSEFDREJTQ09OU19FTDJfSU5ERVgsIDApO1xuK1xuK1x0YnIgPSAodmlydF90b19waHlzKGh3X2VudHJpZXMpIFx1MDAyNiBIQUNEQlNCUl9FTDJfQkFERFJfTUFTSykgfFxuK1x0ICAgICBGSUVMRF9QUkVQKEhBQ0RCU0JSX0VMMl9TWiwgaWxvZzIoc2l6ZV9wMikgLSAxMikgfFxuK1x0ICAgICBGSUVMRF9QUkVQKEhBQ0RCU0JSX0VMMl9FTiwgMSk7XG4rXG4rXHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX1JVTk5JTkcpO1xuK1x0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zaXplLCBzaXplKTtcbitcdHdyaXRlX3N5c3JlZ19zKGJyLCBTWVNfSEFDREJTQlJfRUwyKTtcbitcdGlzYigpO1xuK31cbitcbitzdGF0aWMgaW50IGhhY2Ric19zdG9wKHZvaWQpXG4re1xuK1x0d3JpdGVfc3lzcmVnX3MoMCwgU1lTX0hBQ0RCU0JSX0VMMik7XG4rXHRpc2IoKTtcbitcbitcdGlmICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfRVJST1IpIHtcbitcdFx0LyogSW4gY2FzZSBvZiBlcnJvciwgSEFDREJTQ09OU19FTDIuSU5ERVggc2hvdWxkIHBvaW50IHRoZSBmYXVsdHkgZW50cnkgKi9cbitcdFx0dTY0IGNvbnMgPSByZWFkX3N5c3JlZ19zKFNZU19IQUNEQlNDT05TX0VMMik7XG4rXHRcdGludCBpZHggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpO1xuK1xuK1x0XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpO1xuK1xuK1x0XHRyZXR1cm4gaWR4O1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRoaXNfY3B1X3JlYWQoaGFjZGJzX3BjcC5zaXplKTtcbit9XG4rXG4rLypcbisgKiBDbGVhcnMgZGlydHktYml0cyBmb3IgYW4gYXJyYXkgb2YgcGFnZXMgKGh3X2VudHJpZXMpIHVzaW5nIEhBQ0RCU1xuKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBjbGVhbmVkIGZyb20gdGhlIGFycmF5LiBJZiByZXR1cm5zIHZhbHVlIFx1MDAzYyBzaXplLFxuKyAqXHR0aGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHByb2Nlc3NpbmcuXG4rICovXG4rc3RhdGljIGludCBkaXJ0eV9iaXRfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCB1NjQgKmh3X2VudHJpZXMsIGludCBzaXplKVxuK3tcbitcdHU2NCBoY3JfZWwyO1xuK1x0aW50IHJldDtcbitcbitcdHByZWVtcHRfZGlzYWJsZSgpO1xuK1xuK1x0aGNyX2VsMiA9IHJlYWRfc3lzcmVnKEhDUl9FTDIpO1xuK1x0d3JpdGVfc3lzcmVnKGhjcl9lbDIgfCBIQ1JfRUwyX1ZNLCBIQ1JfRUwyKTtcbitcdF9fbG9hZF9zdGFnZTIoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11KTtcbitcbitcdGhhY2Ric19zdGFydChod19lbnRyaWVzLCBzaXplKTtcbitcbitcdGRvIHtcbitcdFx0d2ZpKCk7XG4rXHR9IHdoaWxlICh0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc3RhdHVzKSA9PSBIQUNEQlNfUlVOTklORyk7XG4rXG4rXHRyZXQgPSBoYWNkYnNfc3RvcCgpO1xuK1xuK1x0d3JpdGVfc3lzcmVnKGhjcl9lbDIsIEhDUl9FTDIpO1xuK1x0aXNiKCk7XG4rXG4rXHQvKlxuK1x0ICogTm8gRFNCIGlzIG5lZWRlZCBoZXJlLCBhcyBrdm1fZmx1c2hfcmVtb3RlX3RsYnNfbWVtc2xvdCgpIHRoYXQgaGFwcGVuc1xuK1x0ICogbGF0ZXIgaW4gZ2VuZXJpYyBkaXJ0eS1jbGVhbmluZyBjb2RlIGFscmVhZHkgcGVyZm9ybXMgYSBEU0IgYmVmb3JlXG4rXHQgKiBkb2luZyB0aGUgVExCSS5cbitcdCAqL1xuK1xuK1x0cHJlZW1wdF9lbmFibGUoKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBoZGJzc190b19iaXRtYXAodTY0ICpoZGJzc19hcnJheSwgaW50IHN0YXJ0LCBpbnQgZW5kLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldClcbit7XG4rXHR1NjQgdyA9IChncGFfdG9fZ2ZuKGhkYnNzX2FycmF5W3N0YXJ0XSkgLSBvZmZzZXQpIC8gQklUU19QRVJfTE9ORztcbitcdHU2NCBtYXNrID0gMDtcbitcdGludCBpZHggPSBzdGFydDtcbitcbitcdGRvIHtcbitcdFx0dTY0IGVudHJ5ID0gKGdwYV90b19nZm4oaGRic3NfYXJyYXlbaWR4XSkgLSBvZmZzZXQpO1xuK1xuK1x0XHRpZiAoZW50cnkgLyBCSVRTX1BFUl9MT05HID09IHcpIHtcbitcdFx0XHRtYXNrIHw9IEJJVChlbnRyeSAlIEJJVFNfUEVSX0xPTkcpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGF0b21pY19sb25nX29yKG1hc2ssIChhdG9taWNfbG9uZ190ICopXHUwMDI2ZGlydHlfYml0bWFwW3ddKTtcbitcdFx0XHR3ID0gZW50cnkgLyBCSVRTX1BFUl9MT05HO1xuK1x0XHRcdG1hc2sgPSBCSVQoZW50cnkgJSBCSVRTX1BFUl9MT05HKTtcbitcdFx0fVxuK1x0fSB3aGlsZSAoKytpZHggXHUwMDNjIGVuZCk7XG4rXHRhdG9taWNfbG9uZ19vcihtYXNrLCAoYXRvbWljX2xvbmdfdCAqKVx1MDAyNmRpcnR5X2JpdG1hcFt3XSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsXG4rXHRcdFx0XHR1NjQgdHR3bCwgaW50IGlkeCwgaW50IGVudHJpZXNfc3opXG4re1xuK1x0d2hpbGUgKGlkeCBcdTAwM2MgZW50cmllc19zeikge1xuK1x0XHRpbnQgaiA9IF9fZmZzKCptYXNrKTtcbitcdFx0dTY0IGEgPSBnZm5fdG9fZ3BhKG9mZnNldCArIGopO1xuK1xuK1x0XHRod19lbnRyaWVzW2lkeCsrXSA9IChhIFx1MDAyNiBIREJTU19FTlRSWV9JUEEpIHxcbitcdFx0XHRcdCAgICB0dHdsIHxcbitcdFx0XHRcdCAgICBIREJTU19FTlRSWV9WQUxJRDtcbitcbitcdFx0Km1hc2sgXHUwMDI2PSB+QklUKGopO1xuK1x0XHRpZiAoISptYXNrKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlkeDtcbit9XG4rXG4raW50IF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHQgICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbitcdFx0XHQgICAgICAgc3RydWN0IGt2bV9jbGVhcl9kaXJ0eV9sb2cgKmxvZyxcbitcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxuK1x0XHRcdCAgICAgICBib29sICpmbHVzaClcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCBpZHggPSAwO1xuK1x0dW5zaWduZWQgbG9uZyAqZGlydHlfYml0bWFwID0gbWVtc2xvdC1cdTAwM2VkaXJ0eV9iaXRtYXA7XG4rXHR1NjQgKmh3X2VudHJpZXM7XG4rXHRjb25zdCBpbnQgZW50cmllc19zeiA9IFBBR0VfU0laRSAvIHNpemVvZigqaHdfZW50cmllcyk7XG4rXHR1NjQgdHR3bDtcbitcdHU2NCBzdGFydCwgZW5kO1xuK1x0Z2ZuX3QgYmFzZV9nZm47XG4rXHRncGFfdCBzcGxpdF9lbmQgPSAwO1xuK1xuK1x0aHdfZW50cmllcyA9IGttYWxsb2Nfb2Jqcyh1NjQsIGVudHJpZXNfc3osIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFod19lbnRyaWVzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHR0d2wgPSBIREJTU19FTlRSWV9UVFdMKEtWTV9QR1RBQkxFX0xBU1RfTEVWRUwpO1xuK1xuK1x0aWYgKGxvZykge1xuK1x0XHRzdGFydCA9IGxvZy1cdTAwM2VmaXJzdF9wYWdlIC8gQklUU19QRVJfTE9ORztcbitcdFx0ZW5kID0gc3RhcnQgKyBESVZfUk9VTkRfVVAobG9nLVx1MDAzZW51bV9wYWdlcywgQklUU19QRVJfTE9ORyk7XG4rXHRcdGJhc2VfZ2ZuID0gbWVtc2xvdC1cdTAwM2ViYXNlX2dmbiArIGxvZy1cdTAwM2VmaXJzdF9wYWdlICUgQklUU19QRVJfTE9ORztcbitcdH0gZWxzZSB7XG4rXHRcdHN0YXJ0ID0gMDtcbitcdFx0ZW5kID0ga3ZtX2RpcnR5X2JpdG1hcF9ieXRlcyhtZW1zbG90KSAvIHNpemVvZihsb25nKTtcbitcdFx0YmFzZV9nZm4gPSBtZW1zbG90LVx1MDAzZWJhc2VfZ2ZuO1xuK1x0fVxuK1xuK1x0d3JpdGVfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSBzdGFydDsgaSBcdTAwM2MgZW5kOyBpKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyBtYXNrO1xuK1x0XHRnZm5fdCBvZmZzZXQ7XG4rXHRcdGF0b21pY19sb25nX3QgKnA7XG4rXG4rXHRcdGlmIChsb2cpIHsgLyogQ2xlYW4gb25seSB3aGF0IGlzIGluIHRoZSBpbnB1dCBiaXRtYXAgKi9cbitcdFx0XHRtYXNrID0gYml0bWFwW2ldO1xuK1x0XHRcdGlmICghbWFzaylcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHAgPSAoYXRvbWljX2xvbmdfdCAqKVx1MDAyNmRpcnR5X2JpdG1hcFtpXTtcbitcdFx0XHRtYXNrIFx1MDAyNj0gYXRvbWljX2xvbmdfZmV0Y2hfYW5kbm90KG1hc2ssIHApO1xuK1x0XHR9IGVsc2UgeyAvKiBDbGVhbiBldmVyeXRoaW5nICovXG4rXHRcdFx0aWYgKCFkaXJ0eV9iaXRtYXBbaV0pXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRtYXNrID0geGNoZyhcdTAwMjZkaXJ0eV9iaXRtYXBbaV0sIDApO1xuK1x0XHRcdGJpdG1hcFtpXSA9IG1hc2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFtYXNrKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRvZmZzZXQgPSBiYXNlX2dmbiArIGkgKiBCSVRTX1BFUl9MT05HO1xuK1xuK1x0XHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChvZmZzZXQgKyBCSVRTX1BFUl9MT05HIFx1MDAzZSBzcGxpdF9lbmQpKSB7XG4rXHRcdFx0Z3BhX3Qgc3RhcnQgPSBnZm5fdG9fZ3BhKG9mZnNldCArIF9fZmZzKG1hc2spKTtcbitcdFx0XHRncGFfdCBlbmQgPSBnZm5fdG9fZ3BhKG9mZnNldCArIF9fZmxzKG1hc2spICsgMSk7XG4rXG4rXHRcdFx0a3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKGt2bSwgc3RhcnQsIGVuZCk7XG4rXHRcdFx0c3BsaXRfZW5kID0gZ3BhX3RvX2dmbihBTElHTl9ET1dOKGVuZCwgUE1EX1NJWkUpICsgUE1EX1NJWkUgLSAxKTtcbitcdFx0fVxuK1xuK1x0XHRkbyB7XG4rXHRcdFx0aWR4ID0gbWFza190b19oZGJzcyhcdTAwMjZtYXNrLCBod19lbnRyaWVzLCBvZmZzZXQsIHR0d2wsIGlkeCwgZW50cmllc19zeik7XG4rXHRcdFx0aWYgKGlkeCBcdTAwM2U9IGVudHJpZXNfc3opIHtcbitcdFx0XHRcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGlkeCk7XG4rXHRcdFx0XHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFx1MDAzZSAwO1xuK1x0XHRcdFx0aWYgKHJldCAhPSBpZHgpIHtcbitcdFx0XHRcdFx0LyogU2F2ZSBiaXRzIG5vdCBjb252ZXJ0ZWQgYmFjayB0byBiaXRtYXAgKi9cbitcdFx0XHRcdFx0YXRvbWljX2xvbmdfb3IobWFzaywgKGF0b21pY19sb25nX3QgKilcdTAwMjZkaXJ0eV9iaXRtYXBbaV0pO1xuK1x0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4rXHRcdFx0XHR9XG4rXHRcdFx0XHRpZHggPSAwO1xuK1x0XHRcdH1cbitcdFx0fSB3aGlsZSAobWFzayk7XG4rXHR9XG4rXG4rXHRpZiAoaWR4ICE9IDApIHtcbitcdFx0cmV0ID0gZGlydHlfYml0X2NsZWFyKGt2bSwgaHdfZW50cmllcywgaWR4KTtcbitcdFx0KmZsdXNoID0gKmZsdXNoIHx8IHJldCBcdTAwM2UgMDtcbitcdH1cbitvdXRfZXJyOlxuK1x0aWYgKHVubGlrZWx5KHJldCAhPSBpZHgpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEluIGNhc2UgdGhlcmUgaXMgYW4gZXJyb3IgYW5kIG5vdCBhbGwgZW50cmllcyBpbiBIQUNEQlMgZ2V0XG4rXHRcdCAqIGNsZWFuZWQsIHdlIGhhdmUgdG8gbWFyayB0aGUgZGlydHkgYml0cyBiYWNrIGluIHRoZSBiaXRtYXAsXG4rXHRcdCAqIGFzIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBzb2Z0d2FyZSByb3V0aW5lLlxuK1x0XHQgKlxuK1x0XHQgKiBFbnRyaWVzIHNob3VsZCBiZSBpbiBvcmRlciwgc2luY2UgdGhleSB3ZXJlIGV4dHJheGVkIGZyb21cbitcdFx0ICogdGhlIGRpcnR5LWJpdG1hcCwgc28gYmF0Y2hpbmcgdGhlIGF0b21pYyB3cml0ZXMgaXMgZWZmaWNpZW50LlxuK1x0XHQgKi9cbitcbitcdFx0aWYgKHJldCBcdTAwM2MgaWR4KVxuK1x0XHRcdGhkYnNzX3RvX2JpdG1hcChod19lbnRyaWVzLCByZXQsIGlkeCwgZGlydHlfYml0bWFwLCBtZW1zbG90LVx1MDAzZWJhc2VfZ2ZuKTtcbitcbitcdFx0cmV0ID0gLUVBR0FJTjtcbitcdH1cbitcbitcdHdyaXRlX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1x0a2ZyZWUoaHdfZW50cmllcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuK1x0XHRcdFx0aW50ICpucl9lbnRyaWVzX3Jlc2V0KVxuK3tcbitcdHU2NCAqaHdfZW50cmllcztcbitcdHU2NCBzbG90X29mZnNldCA9IDA7XG4rXHR1NjQgdHR3bDtcbitcdGludCBpLCByZXQ7XG4rXHR1MzIgc2xvdCA9IC0xO1xuK1xuK1x0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuK1x0XHRyZXR1cm4gLUVJTlRSO1xuK1xuK1x0dHR3bCA9IEhEQlNTX0VOVFJZX1RUV0woS1ZNX1BHVEFCTEVfTEFTVF9MRVZFTCk7XG4rXG4rXHRod19lbnRyaWVzID0ga21hbGxvYyhtYXgocmluZy1cdTAwM2VzaXplICogc2l6ZW9mKHU2NCksIFBBR0VfU0laRSksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFod19lbnRyaWVzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJpbmctXHUwMDNlc2l6ZTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBrdm1fZGlydHlfZ2ZuICplbnRyeTtcbitcdFx0Z2ZuX3QgZ2ZuO1xuK1xuK1x0XHRlbnRyeSA9IFx1MDAyNnJpbmctXHUwMDNlZGlydHlfZ2Zuc1socmluZy1cdTAwM2VyZXNldF9pbmRleCArIGkpIFx1MDAyNlxuK1x0XHRcdFx0XHQgIChyaW5nLVx1MDAzZXNpemUgLSAxKV07XG4rXG4rXHRcdGlmICgha3ZtX2RpcnR5X2dmbl9oYXJ2ZXN0ZWQoZW50cnkpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAoZW50cnktXHUwMDNlc2xvdCAhPSBzbG90KSB7XG4rXHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbitcbitcdFx0XHRtZW1zbG90ID0ga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoa3ZtLCBlbnRyeS1cdTAwM2VzbG90KTtcbitcdFx0XHRzbG90ID0gZW50cnktXHUwMDNlc2xvdDtcbitcdFx0XHRzbG90X29mZnNldCA9IG1lbXNsb3QtXHUwMDNlYmFzZV9nZm47XG4rXHRcdH1cbitcbitcdFx0Z2ZuID0gc2xvdF9vZmZzZXQgKyBlbnRyeS1cdTAwM2VvZmZzZXQ7XG4rXG4rXHRcdGh3X2VudHJpZXNbaV0gPSAoZ2ZuX3RvX2dwYShnZm4pIFx1MDAyNiBIREJTU19FTlRSWV9JUEEpIHxcbitcdFx0XHRcdHR0d2wgfCBIREJTU19FTlRSWV9WQUxJRDtcbitcdH1cbitcbitcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGkpO1xuK1xuK1x0LyogU2V0IGFzIGludmFsaWQgYWxsIHN1Y2Nlc3NmdWxseSBjbGVhbmVkIGVudHJpZXMgKi9cbitcdGZvciAoaW50IGogPSAwOyBqIFx1MDAzYyByZXQ7IGorKykge1xuK1x0XHRzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZW50cnk7XG4rXG4rXHRcdGVudHJ5ID0gXHUwMDI2cmluZy1cdTAwM2VkaXJ0eV9nZm5zWyhyaW5nLVx1MDAzZXJlc2V0X2luZGV4ICsgaikgXHUwMDI2XG4rXHRcdFx0XHRcdCAgKHJpbmctXHUwMDNlc2l6ZSAtIDEpXTtcbitcbitcdFx0a3ZtX2RpcnR5X2dmbl9zZXRfaW52YWxpZChlbnRyeSk7XG4rXHR9XG4rXG4rXHQvKiBJbiBjYXNlIG9mIGVycm9yLCB0cnkgc29mdHdhcmUgY2xlYW5pbmcgZnJvbSB0aGUgZmF1bHRpbmcgZW50cnkgKi9cbitcdHJpbmctXHUwMDNlcmVzZXRfaW5kZXggKz0gcmV0O1xuK1x0Km5yX2VudHJpZXNfcmVzZXQgKz0gcmV0O1xuK1xuK1x0a2ZyZWUoaHdfZW50cmllcyk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyBpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpcnFyZXR1cm5fdCBoYWNkYnNpcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwY3B1KVxuK3tcbitcdHU2NCBjb25zID0gcmVhZF9zeXNyZWdfcyhTWVNfSEFDREJTQ09OU19FTDIpO1xuK1x0dW5zaWduZWQgbG9uZyBlcnIgPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfRVJSX1JFQVNPTiwgY29ucyk7XG4rXG4rXHRzd2l0Y2ggKGVycikge1xuK1x0Y2FzZSBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OX05PRjpcbitcdFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19JRExFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT05fSVBBSEFDRjpcbitcdFx0LyogV2hlbiBzaXplIG5vdCBhIHBvd2VyIG9mIHR3byBcdTAwM2U9IDRrLCBleGl0IHdpdGggcmVzZXJ2ZWQgVFRMVyAqL1xuK1x0XHRpbnQgaW5kZXggPSBGSUVMRF9HRVQoSEFDREJTQ09OU19FTDJfSU5ERVgsIGNvbnMpO1xuK1xuK1x0XHRpZiAoaW5kZXggXHUwMDNlPSB0aGlzX2NwdV9yZWFkKGhhY2Ric19wY3Auc2l6ZSkpIHtcbitcdFx0XHR0aGlzX2NwdV93cml0ZShoYWNkYnNfcGNwLnN0YXR1cywgSEFDREJTX0lETEUpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBIQUNEQlNDT05TX0VMMl9FUlJfUkVBU09OX1NUUlVDVEY6XG4rXHRjYXNlIEhBQ0RCU0NPTlNfRUwyX0VSUl9SRUFTT05fSVBBRjpcbitcdFx0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19FUlJPUik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuK31cbitcbit2b2lkIGt2bV9oYWNkYnNfY3B1X3VwKHZvaWQpXG4re1xuK1x0aWYgKGhhY2Ric2lycSBcdTAwM2MgMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZW5hYmxlX3BlcmNwdV9pcnEoaGFjZGJzaXJxLCBJUlFfVFlQRV9MRVZFTF9ISUdIKTtcbitcdHRoaXNfY3B1X3dyaXRlKGhhY2Ric19wY3Auc3RhdHVzLCBIQUNEQlNfSURMRSk7XG4rfVxuK1xuK3ZvaWQga3ZtX2hhY2Ric19jcHVfZG93bih2b2lkKVxuK3tcbitcdGlmIChoYWNkYnNpcnEgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGRpc2FibGVfcGVyY3B1X2lycShoYWNkYnNpcnEpO1xuK1x0dGhpc19jcHVfd3JpdGUoaGFjZGJzX3BjcC5zdGF0dXMsIEhBQ0RCU19PRkYpO1xuK31cbitcbisjaWZkZWYgQ09ORklHX0FDUElcbitzdGF0aWMgaW50IF9faW5pdCBoYWNkYnNfYWNwaV9nZXRfaXJxKHZvaWQpXG4re1xuK1x0c3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2ludGVycnVwdCAqZ2ljYztcbitcdHUzMiBnc2k7XG4rXHRpbnQgaXJxO1xuK1xuK1x0Z2ljYyA9IGFjcGlfY3B1X2dldF9tYWR0X2dpY2Moc21wX3Byb2Nlc3Nvcl9pZCgpKTtcbitcdGlmIChnaWNjLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIEFDUElfTUFEVF9HSUNDX0hBQ0RCU0lSUSlcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcbitcdGdzaSA9ICBnaWNjLVx1MDAzZWhhY2Ric2lycV9nc2k7XG4rXG4rXHRpcnEgPSBhY3BpX3JlZ2lzdGVyX2dzaShOVUxMLCBnc2ksIEFDUElfTEVWRUxfU0VOU0lUSVZFLCBBQ1BJX0FDVElWRV9ISUdIKTtcbitcdGlmIChpcnEgXHUwMDNjIDApIHtcbitcdFx0cHJfd2FybihcIkFDUEk6IFVuYWJsZSB0byByZWdpc3RlciBIQUNEQlMgaW50ZXJydXB0OiAlZFxcblwiLCBnc2kpO1xuK1x0XHRyZXR1cm4gLUVOWElPO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlycTtcbit9XG4rI2Vsc2VcbisjZGVmaW5lIGhhY2Ric19hY3BpX2dldF9pcnEoKSAoLUVOWElPKVxuKyNlbmRpZlxuK1xuK3ZvaWQgX19pbml0IGt2bV9oYWNkYnNfaW5pdCh2b2lkKVxuK3tcbitcdGludCBpcnE7XG4rXG4rXHQvKiBGRUFUX0hBQ0RCUyBpcyBvbmx5IHN1cHBvcnRlZCBpZiBMaW51eCBydW5zIGluIEVMMiAoVkhFKSAqL1xuK1x0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfaGFjZGJzKCkgfHwgIWlzX2tlcm5lbF9pbl9oeXBfbW9kZSgpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpcnEgPSBoYWNkYnNfYWNwaV9nZXRfaXJxKCk7XG4rXHRpZiAoaXJxIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocmVxdWVzdF9wZXJjcHVfaXJxKGlycSwgaGFjZGJzaXJxX2hhbmRsZXIsIFwiSEFDREJTSVJRXCIsIFx1MDAyNmhhY2Ric19wY3ApIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRoYWNkYnNpcnEgPSBpcnE7XG4rfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG5pbmRleCA5MWE3ZGZhZDY2ODY2MC4uZTE2NzI5ZjBiN2JkMjQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG4rKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jXG5AQCAtNzMxLDkgKzczMSwxMyBAQCBzdGF0aWMgaW50IHN0YWdlMl9zZXRfcHJvdF9hdHRyKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBlbnVtIGt2bV9wZ3RhYmxlX3Byb3QgcFxuIFx0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfUilcbiBcdFx0YXR0ciB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1I7XG4gXG4tXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKVxuK1x0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykge1xuIFx0XHRhdHRyIHw9IEtWTV9QVEVfTEVBRl9BVFRSX0xPX1MyX1MyQVBfVztcbiBcbitcdFx0aWYgKHBndC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX1BHVEFCTEVfUzJfREJNKVxuK1x0XHRcdGF0dHIgfD0gS1ZNX1BURV9MRUFGX0FUVFJfSElfUzJfREJNO1xuK1x0fVxuK1xuIFx0aWYgKCFrdm1fbHBhMl9pc19lbmFibGVkKCkpXG4gXHRcdGF0dHIgfD0gRklFTERfUFJFUChLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TSCwgc2gpO1xuIFxuQEAgLTEzNjcsOSArMTM3MSwxMyBAQCBpbnQga3ZtX3BndGFibGVfc3RhZ2UyX3JlbGF4X3Blcm1zKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCB1NjQgYWRkcixcbiBcdGlmIChwcm90IFx1MDAyNiBLVk1fUEdUQUJMRV9QUk9UX1IpXG4gXHRcdHNldCB8PSBLVk1fUFRFX0xFQUZfQVRUUl9MT19TMl9TMkFQX1I7XG4gXG4tXHRpZiAocHJvdCBcdTAwMjYgS1ZNX1BHVEFCTEVfUFJPVF9XKVxuK1x0aWYgKHByb3QgXHUwMDI2IEtWTV9QR1RBQkxFX1BST1RfVykge1xuIFx0XHRzZXQgfD0gS1ZNX1BURV9MRUFGX0FUVFJfTE9fUzJfUzJBUF9XO1xuIFxuK1x0XHRpZiAocGd0LVx1MDAzZWZsYWdzIFx1MDAyNiBLVk1fUEdUQUJMRV9TMl9EQk0pXG4rXHRcdFx0c2V0IHw9IEtWTV9QVEVfTEVBRl9BVFRSX0hJX1MyX0RCTTtcbitcdH1cbitcbiBcdHJldCA9IHN0YWdlMl9zZXRfeG5fYXR0cihwcm90LCBcdTAwMjZ4bik7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTE1ODUsNiArMTU5Myw5IEBAIGludCBfX2t2bV9wZ3RhYmxlX3N0YWdlMl9pbml0KHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxuIFx0aWYgKCFwZ3QtXHUwMDNlcGdkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdGlmIChzeXN0ZW1fc3VwcG9ydHNfaGRic3MoKSlcbitcdFx0ZmxhZ3MgfD0gS1ZNX1BHVEFCTEVfUzJfREJNO1xuK1xuIFx0cGd0LVx1MDAzZWlhX2JpdHNcdFx0PSBpYV9iaXRzO1xuIFx0cGd0LVx1MDAzZXN0YXJ0X2xldmVsXHQ9IHN0YXJ0X2xldmVsO1xuIFx0cGd0LVx1MDAzZW1tX29wc1x0XHQ9IG1tX29wcztcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9tbXUuYyBiL2FyY2gvYXJtNjQva3ZtL21tdS5jXG5pbmRleCA2Yzk0MWFhYTEwYzYzOS4uMmY5ZDkwYzM1NjY4YjkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vbW11LmNcbkBAIC0xMTcsOCArMTE3LDggQEAgc3RhdGljIGJvb2wgbmVlZF9zcGxpdF9tZW1jYWNoZV90b3B1cF9vcl9yZXNjaGVkKHN0cnVjdCBrdm0gKmt2bSlcbiBcdHJldHVybiBrdm1fbW11X21lbW9yeV9jYWNoZV9ucl9mcmVlX29iamVjdHMoY2FjaGUpIFx1MDAzYyBtaW47XG4gfVxuIFxuLXN0YXRpYyBpbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkcixcbi1cdFx0XHRcdCAgICBwaHlzX2FkZHJfdCBlbmQpXG4raW50IGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0sIHBoeXNfYWRkcl90IGFkZHIsXG4rXHRcdFx0ICAgICBwaHlzX2FkZHJfdCBlbmQpXG4ge1xuIFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpjYWNoZTtcbiBcdHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0O1xuQEAgLTEwMjcsOCArMTAyNywxMiBAQCBpbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0KnBlcl9jcHVfcHRyKG1tdS1cdTAwM2VsYXN0X3ZjcHVfcmFuLCBjcHUpID0gLTE7XG4gXG4tXHQgLyogVGhlIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi9cbi1cdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSBLVk1fQVJNX0VBR0VSX1NQTElUX0NIVU5LX1NJWkVfREVGQVVMVDtcbitcdCAvKiBUaGUgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBpZiBzeXN0ZW0gaGFzIG5vIEhEQlNTICovXG4rXHRpZiAoc3lzdGVtX3N1cHBvcnRzX2hkYnNzKCkpXG4rXHRcdG1tdS1cdTAwM2VzcGxpdF9wYWdlX2NodW5rX3NpemUgPSAyNTYgKiAxMDI0ICogUEFHRV9TSVpFO1xuK1x0ZWxzZVxuK1x0XHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jaHVua19zaXplID0gS1ZNX0FSTV9FQUdFUl9TUExJVF9DSFVOS19TSVpFX0RFRkFVTFQ7XG4rXG4gXHRtbXUtXHUwMDNlc3BsaXRfcGFnZV9jYWNoZS5nZnBfemVybyA9IF9fR0ZQX1pFUk87XG4gXG4gXHRtbXUtXHUwMDNlcGdkX3BoeXMgPSBfX3BhKHBndC1cdTAwM2VwZ2QpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2FwcyBiL2FyY2gvYXJtNjQvdG9vbHMvY3B1Y2Fwc1xuaW5kZXggOWI4NWE4NGY2ZmQ0OTQuLmJkMmMwYmI5OGRhNjFlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC90b29scy9jcHVjYXBzXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL2NwdWNhcHNcbkBAIC02OSw4ICs2OSwxMCBAQCBIQVNfVkE1MlxuIEhBU19WSVJUX0hPU1RfRVhUTlxuIEhBU19XRlhUXG4gSEFTX1hOWFxuK0hBU19IREJTU1xuIEhBRlRcbiBIV19EQk1cbitIQUNEQlNcbiBLVk1fSFZIRVxuIEtWTV9QUk9URUNURURfTU9ERVxuIE1JU01BVENIRURfQ0FDSEVfVFlQRVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnIGIvYXJjaC9hcm02NC90b29scy9zeXNyZWdcbmluZGV4IGJjMTc4OGIxNjYyYjc2Li43YjdjM2Q2YTBmMDMwOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvdG9vbHMvc3lzcmVnXG4rKysgYi9hcmNoL2FybTY0L3Rvb2xzL3N5c3JlZ1xuQEAgLTQ2MzQsNiArNDYzNCwzNiBAQCBGaWVsZFx0Nzo2XHRTTDBcbiBGaWVsZFx0NTowXHRUMFNaXG4gRW5kU3lzcmVnXG4gXG4rU3lzcmVnXHRIQUNEQlNCUl9FTDJcdDNcdDRcdDJcdDNcdDRcbitSZXMwXHQ2Mzo1NlxuK0ZpZWxkXHQ1NToxMlx0QkFERFJcbitGaWVsZFx0MTFcdEVOXG4rUmVzMFx0MTA6NFxuK1Vuc2lnbmVkRW51bVx0MzowXHRTWlxuK1x0MGIwMDAwXHQ0S1xuK1x0MGIwMDAxXHQ4S1xuK1x0MGIwMDEwXHQxNktcbitcdDBiMDAxMVx0MzJLXG4rXHQwYjAxMDBcdDY0S1xuK1x0MGIwMTAxXHQxMjhLXG4rXHQwYjAxMTBcdDI1NktcbitcdDBiMDExMVx0NTEyS1xuK1x0MGIxMDAwXHQxTVxuK1x0MGIxMDAxXHQyTVxuK0VuZEVudW1cbitFbmRTeXNyZWdcbitcbitTeXNyZWdcdEhBQ0RCU0NPTlNfRUwyXHQzXHQ0XHQyXHQzXHQ1XG4rVW5zaWduZWRFbnVtXHQ2Mzo2Mlx0RVJSX1JFQVNPTlxuK1x0MGIwMFx0Tk9GXG4rXHQwYjAxXHRTVFJVQ1RGXG4rXHQwYjEwXHRJUEFGXG4rXHQwYjExXHRJUEFIQUNGXG4rRW5kRW51bVxuK1JlczBcdDYxOjE5XG4rRmllbGRcdDE4OjBcdElOREVYXG4rRW5kU3lzcmVnXG4rXG4gU3lzcmVnXHRHQ1NDUl9FTDJcdDNcdDRcdDJcdDVcdDBcbiBGaWVsZHNcdEdDU0NSX0VMeFxuIEVuZFN5c3JlZ1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaFxuaW5kZXggYmFlZjUyNTM2N2I1YzQuLmVhZWZiNDk0ZWY1OTcyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGJsMi5oXG4rKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmhcbkBAIC0xNDQ5LDYgKzE0NDksNyBAQCBzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfaW50ZXJydXB0IHtcbiBcdHUxNiB0cmJlX2ludGVycnVwdDtcdC8qIEFDUEkgNi41ICovXG4gXHR1MTYgaWFmZmlkO1x0XHQvKiBBQ1BJIDYuNyAqL1xuIFx0dTMyIGlyc19pZDtcbitcdHUzMiBoYWNkYnNpcnFfZ3NpO1x0LyogQUNQSSA2LlggKi9cbiB9O1xuIFxuIC8qIE1hc2tzIGZvciBGbGFncyBmaWVsZCBhYm92ZSAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oIGIvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODQ5Mjk3OWQ2OTRlNzBcbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oXG5AQCAtMCwwICsxLDM0IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFSTSBMdGQuXG4rICogQXV0aG9yOiBMZW9uYXJkbyBCcmFzIFx1MDAzY2xlby5icmFzQGFybS5jb21cdTAwM2VcbisgKi9cbitcbisjaWZuZGVmIF9fS1ZNX0RJUlRZX0JJVF9IX19cbisjZGVmaW5lIF9fS1ZNX0RJUlRZX0JJVF9IX19cbitcbisjaWZuZGVmIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVRcbitcbitzdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX2NsZWFyX2RpcnR5X2xvZyAqbG9nLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsXG4rXHRcdFx0XHRcdCAgIGJvb2wgKmZsdXNoKVxuK3tcbitcdHJldHVybiAtRU5YSU87XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuK1x0XHRcdFx0XHQgICAgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxuK3tcbitcdHJldHVybiAtRU5YSU87XG4rfVxuK1xuKyNlbHNlIC8qIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4rXG4rI2VuZGlmIC8qIENPTkZJR19IQVZFX0tWTV9IV19ESVJUWV9CSVQgKi9cbitcbisjZW5kaWYgLyogX19LVk1fRElSVFlfQklUX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaCBiL2luY2x1ZGUvbGludXgva3ZtX2RpcnR5X3JpbmcuaFxuaW5kZXggZWIxMGQ4N2FkZjdkNTkuLjE5MGQ5N2ZjZTRhNDJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rdm1fZGlydHlfcmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9yaW5nLmhcbkBAIC04NCw2ICs4NCwxOCBAQCB2b2lkIGt2bV9kaXJ0eV9yaW5nX3B1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc2xvdCwgdTY0IG9mZnNldCk7XG4gXG4gYm9vbCBrdm1fZGlydHlfcmluZ19jaGVja19yZXF1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4rc3RhdGljIGlubGluZSBib29sIGt2bV9kaXJ0eV9nZm5faGFydmVzdGVkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pXG4re1xuK1x0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Z2ZuLVx1MDAzZWZsYWdzKSBcdTAwMjYgS1ZNX0RJUlRZX0dGTl9GX1JFU0VUO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2RpcnR5X2dmbl9zZXRfaW52YWxpZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuK3tcbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmdmbi1cdTAwM2VmbGFncywgMCk7XG4rfVxuK1xuK3N0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpO1xuK1xuIC8qIGZvciB1c2UgaW4gdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKi9cbiBzdHJ1Y3QgcGFnZSAqa3ZtX2RpcnR5X3JpbmdfZ2V0X3BhZ2Uoc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLCB1MzIgb2Zmc2V0KTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IGFiOGNmYWVjODJkMzFlLi43ZWE2ZWQ3Y2UyMDNhYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtMTY2OSw2ICsxNjY5LDkgQEAgYm9vbCBrdm1fYXJjaF92Y3B1X3ByZWVtcHRlZF9pbl9rZXJuZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiB2b2lkIGt2bV9hcmNoX3ByZV9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSk7XG4gdm9pZCBrdm1fYXJjaF9jcmVhdGVfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pO1xuIFxuK2ludCBrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLCBwaHlzX2FkZHJfdCBhZGRyLFxuK1x0XHRcdCAgICAgcGh5c19hZGRyX3QgZW5kKTtcbitcbiAjaWZuZGVmIF9fS1ZNX0hBVkVfQVJDSF9WTV9BTExPQ1xuIC8qXG4gICogQWxsIGFyY2hpdGVjdHVyZXMgdGhhdCB3YW50IHRvIHVzZSB2emFsbG9jIGN1cnJlbnRseSBhbHNvXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0vS2NvbmZpZyBiL3ZpcnQva3ZtL0tjb25maWdcbmluZGV4IDc5NDk3NmI4OGM2Zjk3Li5mODc1N2I1Yjg0YjNlMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL0tjb25maWdcbisrKyBiL3ZpcnQva3ZtL0tjb25maWdcbkBAIC0yMCw2ICsyMCw5IEBAIGNvbmZpZyBIQVZFX0tWTV9JUlFfUk9VVElOR1xuIGNvbmZpZyBIQVZFX0tWTV9ESVJUWV9SSU5HXG4gICAgICAgIGJvb2xcbiBcbitjb25maWcgSEFWRV9LVk1fSFdfRElSVFlfQklUXG4rICAgICAgIGJvb2xcbitcbiAjIE9ubHkgc3Ryb25nbHkgb3JkZXJlZCBhcmNoaXRlY3R1cmVzIGNhbiBzZWxlY3QgdGhpcywgYXMgaXQgZG9lc24ndFxuICMgcHV0IGFueSBleHBsaWNpdCBjb25zdHJhaW50IG9uIHVzZXJzcGFjZSBvcmRlcmluZy4gVGhleSBjYW4gYWxzb1xuICMgc2VsZWN0IHRoZSBfQUNRX1JFTCB2ZXJzaW9uLlxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2RpcnR5X3JpbmcuYyBiL3ZpcnQva3ZtL2RpcnR5X3JpbmcuY1xuaW5kZXggNTcyYjg1NGVkZjc0MGQuLmZlNGU3ZGE2Y2M0YTZhIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0vZGlydHlfcmluZy5jXG4rKysgYi92aXJ0L2t2bS9kaXJ0eV9yaW5nLmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2RpcnR5X3JpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9kaXJ0eV9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rdm0uaFx1MDAzZVxuICNpbmNsdWRlIFwia3ZtX21tLmhcIlxuIFxuQEAgLTUwLDE4ICs1MSwzMCBAQCBzdGF0aWMgYm9vbCBrdm1fZGlydHlfcmluZ19mdWxsKHN0cnVjdCBrdm1fZGlydHlfcmluZyAqcmluZylcbiBcdHJldHVybiBrdm1fZGlydHlfcmluZ191c2VkKHJpbmcpIFx1MDAzZT0gcmluZy1cdTAwM2VzaXplO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fcmVzZXRfZGlydHlfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QsIHU2NCBvZmZzZXQsIHU2NCBtYXNrKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqXG4rX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KVxuIHtcbi1cdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7XG4gXHRpbnQgYXNfaWQsIGlkO1xuIFxuIFx0YXNfaWQgPSBzbG90IFx1MDAzZVx1MDAzZSAxNjtcbiBcdGlkID0gKHUxNilzbG90O1xuIFxuIFx0aWYgKGFzX2lkIFx1MDAzZT0ga3ZtX2FyY2hfbnJfbWVtc2xvdF9hc19pZHMoa3ZtKSB8fCBpZCBcdTAwM2U9IEtWTV9VU0VSX01FTV9TTE9UUylcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiBpZF90b19tZW1zbG90KF9fa3ZtX21lbXNsb3RzKGt2bSwgYXNfaWQpLCBpZCk7XG4rfVxuIFxuLVx0bWVtc2xvdCA9IGlkX3RvX21lbXNsb3QoX19rdm1fbWVtc2xvdHMoa3ZtLCBhc19pZCksIGlkKTtcbitzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICprdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90KVxuK3tcbitcdHJldHVybiBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgc2xvdCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGt2bV9yZXNldF9kaXJ0eV9nZm4oc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdCwgdTY0IG9mZnNldCwgdTY0IG1hc2spXG4re1xuK1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbitcbitcdG1lbXNsb3QgPSBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KGt2bSwgc2xvdCk7XG4gXG4gXHRpZiAoIW1lbXNsb3QgfHwgb2Zmc2V0IFx1MDAzZT0gbWVtc2xvdC1cdTAwM2VucGFnZXMgfHxcbiBcdCAgICBvZmZzZXQgKyBfX2ZscyhtYXNrKSBcdTAwM2U9IG1lbXNsb3QtXHUwMDNlbnBhZ2VzKVxuQEAgLTg4LDIxICsxMDEsMTEgQEAgaW50IGt2bV9kaXJ0eV9yaW5nX2FsbG9jKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZGlydHlfZ2ZuX3NldF9pbnZhbGlkKHN0cnVjdCBrdm1fZGlydHlfZ2ZuICpnZm4pXG4te1xuLVx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2Z2ZuLVx1MDAzZWZsYWdzLCAwKTtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2RpcnRpZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcbiB7XG4gXHRnZm4tXHUwMDNlZmxhZ3MgPSBLVk1fRElSVFlfR0ZOX0ZfRElSVFk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fZGlydHlfZ2ZuX2hhcnZlc3RlZChzdHJ1Y3Qga3ZtX2RpcnR5X2dmbiAqZ2ZuKVxuLXtcbi1cdHJldHVybiBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNmdmbi1cdTAwM2VmbGFncykgXHUwMDI2IEtWTV9ESVJUWV9HRk5fRl9SRVNFVDtcbi19XG4tXG4gaW50IGt2bV9kaXJ0eV9yaW5nX3Jlc2V0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxuIFx0XHRcdCBpbnQgKm5yX2VudHJpZXNfcmVzZXQpXG4ge1xuQEAgLTEzMSw2ICsxMzQsOSBAQCBpbnQga3ZtX2RpcnR5X3JpbmdfcmVzZXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXG4gXHQgKi9cbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuIFxuK1x0aWYgKGt2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoa3ZtLCByaW5nLCBucl9lbnRyaWVzX3Jlc2V0KSBcdTAwM2U9IDApXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0d2hpbGUgKGxpa2VseSgoKm5yX2VudHJpZXNfcmVzZXQpIFx1MDAzYyBJTlRfTUFYKSkge1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggZTQ0YzIwYzA0OTYxMGQuLmEyNWI4OTAyY2RmYzE3IDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuKysrIGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTY1LDYgKzY1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMva3ZtLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1fZGlydHlfcmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3ZtX2RpcnR5X2JpdC5oXHUwMDNlXG4gXG4gXG4gLyogV29yc3QgY2FzZSBidWZmZXIgc2l6ZSBuZWVkZWQgZm9yIGhvbGRpbmcgYW4gaW50ZWdlci4gKi9cbkBAIC0yMjYyLDYgKzIyNjMsMTAgQEAgc3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcbiBcdFx0ZGlydHlfYml0bWFwX2J1ZmZlciA9IGt2bV9zZWNvbmRfZGlydHlfYml0bWFwKG1lbXNsb3QpO1xuIFx0XHRtZW1zZXQoZGlydHlfYml0bWFwX2J1ZmZlciwgMCwgbik7XG4gXG4rXHRcdGlmIChrdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXIoa3ZtLCBtZW1zbG90LCBOVUxMLFxuK1x0XHRcdFx0XHQgICAgIGRpcnR5X2JpdG1hcF9idWZmZXIsIFx1MDAyNmZsdXNoKSBcdTAwM2U9IDApXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4gXHRcdEtWTV9NTVVfTE9DSyhrdm0pO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuIC8gc2l6ZW9mKGxvbmcpOyBpKyspIHtcbiBcdFx0XHR1bnNpZ25lZCBsb25nIG1hc2s7XG5AQCAtMjI4MSw2ICsyMjg2LDcgQEAgc3RhdGljIGludCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9sb2cgKmxvZylcbiBcdFx0S1ZNX01NVV9VTkxPQ0soa3ZtKTtcbiBcdH1cbiBcbitvdXQ6XG4gXHRpZiAoZmx1c2gpXG4gXHRcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KGt2bSwgbWVtc2xvdCk7XG4gXG5AQCAtMjM3Myw2ICsyMzc5LDEwIEBAIHN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdGlmIChjb3B5X2Zyb21fdXNlcihkaXJ0eV9iaXRtYXBfYnVmZmVyLCBsb2ctXHUwMDNlZGlydHlfYml0bWFwLCBuKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4rXHRpZiAoa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKGt2bSwgbWVtc2xvdCwgbG9nLCBkaXJ0eV9iaXRtYXBfYnVmZmVyLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZmbHVzaCkgXHUwMDNlPSAwKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdEtWTV9NTVVfTE9DSyhrdm0pO1xuIFx0Zm9yIChvZmZzZXQgPSBsb2ctXHUwMDNlZmlyc3RfcGFnZSwgaSA9IG9mZnNldCAvIEJJVFNfUEVSX0xPTkcsXG4gXHRcdCBuID0gRElWX1JPVU5EX1VQKGxvZy1cdTAwM2VudW1fcGFnZXMsIEJJVFNfUEVSX0xPTkcpOyBuLS07XG5AQCAtMjM5MiwxMiArMjQwMiwxMyBAQCBzdGF0aWMgaW50IGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdCovXG4gXHRcdGlmIChtYXNrKSB7XG4gXHRcdFx0Zmx1c2ggPSB0cnVlO1xuK1xuIFx0XHRcdGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChrdm0sIG1lbXNsb3QsXG4gXHRcdFx0XHRcdFx0XHRcdG9mZnNldCwgbWFzayk7XG4gXHRcdH1cbiBcdH1cbiBcdEtWTV9NTVVfVU5MT0NLKGt2bSk7XG4tXG4rb3V0OlxuIFx0aWYgKGZsdXNoKVxuIFx0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnNfbWVtc2xvdChrdm0sIG1lbXNsb3QpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDA6NTUuNjA0NTY2MjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3OTE4ODI0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEFSTTY0IEtWTSBIYXJkd2FyZSBEaXJ0eSBCaXQgQ2xlYW5pbmcgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBuZXcgcGF0Y2ggaW50cm9kdWNpbmcgSGFyZHdhcmUgQXNzaXN0ZWQgQ2xlYW4gRGlydHkgQml0IFN1cHBvcnQgKEhBQ0RCUykgZm9yIEFSTTY0IEtWTS4gSXQncyBjbGVhcmx5IGFkZGluZyB0aGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGhhcmR3YXJlLWFzc2lzdGVkIGRpcnR5IGJpdCB0cmFja2luZyAoSERCU1MpIGFuZCBjbGVhbmluZyAoSEFDREJTKSwgYW5kIGl0IGxvb2tzIGZ1bmN0aW9uYWwuIFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBkZWZpbml0ZWx5IGZ1enppbmcgdG8gZW5zdXJlIHJvYnVzdG5lc3MuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgaW50cm9kdWNpbmcgYSBoYW5kZnVsIG9mIG5ldyBmaWxlcywgYGFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jYCwgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2RpcnR5X2JpdC5oYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaGAsIHdoaWNoIGFyZSBhbGwgc3RhbmRhcmQgZm9yIGZlYXR1cmUgYWRkaXRpb25zLiBUaGVuIHdlIGhhdmUgbW9kaWZpY2F0aW9ucyBpbiBleGlzdGluZyBmaWxlcyB0aGF0IGluY2x1ZGUgYGFyY2gvYXJtNjQva3ZtL2FybS5jYCwgYGFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNgLCBgYXJjaC9hcm02NC9rdm0vbW11LmNgLCBgdmlydC9rdm0vZGlydHlfcmluZy5jYCwgYW5kIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gTWFrZXMgc2Vuc2UsIHRoZXkgbmVlZCB0byBob29rIGludG8gdGhlIGV4aXN0aW5nIGt2bSBhcmNoaXRlY3R1cmUuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgZnVuY3Rpb25zLiBJIHNlZSBhIGNvcmUgc2V0IG9mIGZ1bmN0aW9ucyBpbiBgYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNgIHRoYXQgYXJlIHRoZSBoZWFydCBvZiB0aGlzOiBgaGFjZGJzX3N0YXJ0YCwgYGhhY2Ric19zdG9wYCwgYGRpcnR5X2JpdF9jbGVhcmAsIGBoZGJzc190b19iaXRtYXBgLCBgbWFza190b19oZGJzc2AsIGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBgaGFjZGJzaXJxX2hhbmRsZXJgLCBga3ZtX2hhY2Ric19jcHVfdXBgLCBga3ZtX2hhY2Ric19jcHVfZG93bmAsIGBoYWNkYnNfYWNwaV9nZXRfaXJxYCwgYW5kIGBrdm1faGFjZGJzX2luaXRgLiBUaGlzIGxvb2tzIGxpa2UgdGhlIG1haW4gZW50cnkgcG9pbnRzLCB0aGUgc2V0dXAsIGFuZCB0aGUgY29udHJvbCBmdW5jdGlvbnMuXG5cblRoZSBvdGhlciBtb2RpZmllZCBmaWxlcyBsb29rIGxpa2Ugc3VwcG9ydCBmdW5jdGlvbnM6XG5cbiogICBgdmlydC9rdm0vZGlydHlfcmluZy5jYDogIGBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YCBhbmQgYGt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YC4gIFRoZXNlIGhhbmRsZSBtZW1zbG90IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBkaXJ0eSByaW5nLlxuKiAgIGBhcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jYDogYHN0YWdlMl9zZXRfcHJvdF9hdHRyYCwgYGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtc2AsIGFuZCBgX19rdm1fcGd0YWJsZV9zdGFnZTJfaW5pdGAuIFRoaXMgaXMgZGVhbGluZyB3aXRoIHRoZSBwYWdlIHRhYmxlIG9wZXJhdGlvbnMgYW5kIHRoZSBuZXcgcGVybWlzc2lvbnMuXG4qICAgYGFyY2gvYXJtNjQva3ZtL21tdS5jYDogYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AgYW5kIGBrdm1faW5pdF9zdGFnZTJfbW11YC4gVGhpcyBzZWVtcyByZWxhdGVkIHRvIHRoZSBNTVUgYW5kIHBvdGVudGlhbGx5IHRoZSBoYW5kbGluZyBvZiBsYXJnZSBwYWdlcyBhbmQgc3RhZ2UyIE1NVSBpbml0aWFsaXphdGlvbiB3aXRoIHRoZSBuZXcgSERCU1MvSEFDREJTIGZ1bmN0aW9uYWxpdHkuXG4qICAgYHZpcnQva3ZtL2t2bV9tYWluLmNgOiBga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdGAgYW5kIGBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3RgLiBUaGVzZSBmdW5jdGlvbnMgc2VlbSB0byBjb250cm9sIHRoZSBhY2Nlc3Mgb3IgcGVybWlzc2lvbnMgZm9yIHRoZSBkaXJ0eSBsb2cuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBjb25maWd1cmF0aW9uLiBUaGUgZGVwZW5kZW5jeSBvbiBgQUNQSWAgYmVpbmcgZW5hYmxlZCwgdGhyb3VnaCBgc2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJYCBpcyBpbXBvcnRhbnQuIEFsc28sIHRoZSBgaGFjZGJzX2FjcGlfZ2V0X2lycWAgZnVuY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1c2luZyBgI2lmZGVmIENPTkZJR19BQ1BJYC4gU28gaWYgQUNQSSBpc24ndCBlbmFibGVkLCB0aGlzIG5ldyBkaXJ0eSBiaXQgZmVhdHVyZSB3b24ndCB3b3JrLiBXZSBuZWVkIEFDUEkgc3VwcG9ydCBlbmFibGVkLCBhbmQgS1ZNIG9mIGNvdXJzZS4gVGltZSB0byBsb29rIGFyb3VuZCBmb3IgaG93IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpcyB1c2VkIGVsc2V3aGVyZSwgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM3NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjA2LjM5NjQ1MDY1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI3MTkzMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhBVkVfS1ZNX0hXX0RJUlRZX0JJVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnPTIwPW1lbnVjb25maWcgS1ZNXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM2LVxcdHNlbGVjdCBIQVZFX0tWTV9WQ1BVX1JVTl9QSURfQ0hBTkdFXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzozNzpcXHRzZWxlY3QgSEFWRV9LVk1fSFdfRElSVFlfQklUIGlmIEFDUElcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaC05LVxcbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oOjEwOiNpZm5kZWYgQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVFxcbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oLTExLVxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0Lmg9MjE9c3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaC0yNy1cXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaDoyODojZWxzZSAvKiBDT05GSUdfSEFWRV9LVk1fSFdfRElSVFlfQklUICovXFxuaW5jbHVkZS9saW51eC9rdm1fZGlydHlfYml0LmgtMjktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaC0zMS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9kaXJ0eV9iaXQuaDozMjojZW5kaWYgLyogQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVCAqL1xcbmluY2x1ZGUvbGludXgva3ZtX2RpcnR5X2JpdC5oLTMzLVxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz0yMD1jb25maWcgSEFWRV9LVk1fRElSVFlfUklOR1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0yMi1cXG52aXJ0L2t2bS9LY29uZmlnOjIzOmNvbmZpZyBIQVZFX0tWTV9IV19ESVJUWV9CSVRcXG52aXJ0L2t2bS9LY29uZmlnLTI0LSAgICAgICBib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjA5LjUyMzY1Mjg2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzMxNDQ2NjE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIEhhcmR3YXJlIERpcnR5IEJpdCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgSEFWRV9LVk1fSFdfRElSVFlfQklUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQncyBhIGhpZGRlbiBib29sLCBzZWxlY3RlZCBieSB0aGUgYEtWTWAgbW9kdWxlLCBhbmQgaXQncyBjb25kaXRpb25hbCBvbiBgQUNQSWAgYmVpbmcgZW5hYmxlZC4gUmlnaHQgYXdheSwgSSBzZWUgd2UgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBgS1ZNYCBhbmQgYEFDUElgIGFyZSBpbmNsdWRlZCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIE5vIGJyYWluZXIuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBoZXJlIHRvIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aC4gSSdtIGZvY3VzaW5nIG9uOlxuXG4qICAgYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYFxuKiAgIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgXG4qICAgYGRpcnR5X2JpdF9jbGVhcmBcbiogICBgaGFjZGJzX3N0YXJ0YFxuKiAgIGBoYWNkYnNfc3RvcGBcbiogICBgaGFjZGJzaXJxX2hhbmRsZXJgXG4qICAgYGt2bV9oYWNkYnNfaW5pdGBcbiogICBga3ZtX2hhY2Ric19jcHVfdXBgXG4qICAgYGt2bV9oYWNkYnNfY3B1X2Rvd25gXG4qICAgYGhkYnNzX3RvX2JpdG1hcGBcbiogICBgbWFza190b19oZGJzc2BcbiogICBgX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGBcbiogICBga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgXG5cbkFscmlnaHQsIGxldCdzIHF1aWNrbHkgY2xhc3NpZnkgdGhlc2UgZm9yIHNjb3BlLiBDb25maXJtZWQsIGBkaXJ0eV9iaXRfY2xlYXJgIGlzIHN0YXRpYy4gTG9va3MgbGlrZSBgaGFjZGJzX3N0YXJ0YCBhbmQgYGhhY2Ric19zdG9wYCBhcmUgc3RhdGljIHRvby4gYGhkYnNzX3RvX2JpdG1hcGAgYW5kIGBtYXNrX3RvX2hkYnNzYCBhcmUgc3RhdGljIGlubGluZSwgZ29vZC4gYGhhY2Ric2lycV9oYW5kbGVyYCBpcyBzdGF0aWMgYXMgd2VsbC4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBnbG9iYWwgb3IgZXhwb3J0ZWQgb25lcyBhcmU6IGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBga3ZtX2hhY2Ric19pbml0YCwgYGt2bV9oYWNkYnNfY3B1X3VwYCwgYGt2bV9oYWNkYnNfY3B1X2Rvd25gLCBhbmQgYGt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YC4gYF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgIGlzIHN0YXRpYyBpbmxpbmUuXG5cbkZpbmFsbHksIEkgc2hvdWxkIHRha2UgYSBwZWVrIGF0IGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AganVzdCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBlbHNlIHJlbGV2YW50IHRoZXJlLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MzAsIk91dHB1dFRva2VucyI6NjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6MTYuODM4MTIyNTY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDgzODY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKFthLXpfQS1aMC05XSsgKStbYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM9MjY9c3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBpbnQgaGFjZGJzaXJxID0gLTE7XFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjctXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6Mjg6c3RhdGljIHZvaWQgaGFjZGJzX3N0YXJ0KHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjkte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtNTEtXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6NTI6c3RhdGljIGludCBoYWNkYnNfc3RvcCh2b2lkKVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTUzLXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTc0LSAqL1xcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjc1OnN0YXRpYyBpbnQgZGlydHlfYml0X2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgdTY0ICpod19lbnRyaWVzLCBpbnQgc2l6ZSlcXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy03Ni17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xMDctXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MTA4OnN0YXRpYyBpbmxpbmUgdm9pZCBoZGJzc190b19iaXRtYXAodTY0ICpoZGJzc19hcnJheSwgaW50IHN0YXJ0LCBpbnQgZW5kLFxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTEwOS1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nICpkaXJ0eV9iaXRtYXAsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xMjktXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MTMwOnN0YXRpYyBpbmxpbmUgaW50IG1hc2tfdG9faGRic3ModW5zaWduZWQgbG9uZyAqbWFzaywgdTY0ICpod19lbnRyaWVzLCBjb25zdCBnZm5fdCBvZmZzZXQsXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMTMxLVxcdFxcdFxcdFxcdHU2NCB0dHdsLCBpbnQgaWR4LCBpbnQgZW50cmllc19zeilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTE0OC1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzoxNDk6aW50IF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0xNTAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0yNTgtXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MjU5OmludCBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjYwLVxcdFxcdFxcdFxcdGludCAqbnJfZW50cmllc19yZXNldClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTMyNC1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzozMjU6c3RhdGljIGlycXJldHVybl90IGhhY2Ric2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnBjcHUpXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzI2LXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM1MS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzozNTI6dm9pZCBrdm1faGFjZGJzX2NwdV91cCh2b2lkKVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM1My17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNjAtXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MzYxOnZvaWQga3ZtX2hhY2Ric19jcHVfZG93bih2b2lkKVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTM2Mi17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNzAtI2lmZGVmIENPTkZJR19BQ1BJXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MzcxOnN0YXRpYyBpbnQgX19pbml0IGhhY2Ric19hY3BpX2dldF9pcnEodm9pZClcXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zNzIte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzk0LVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjM5NTp2b2lkIF9faW5pdCBrdm1faGFjZGJzX2luaXQodm9pZClcXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zOTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0MToxNi45NDg5NjY3OTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODg0MzEwMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBLVk0gRGlydHkgTG9nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgS1ZNIGRpcnR5IGxvZyBpbXBsZW1lbnRhdGlvbiBhbmQgZmlndXJlIG91dCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSBoYW5kZnVsIG9mIGZ1bmN0aW9ucyB0aGF0IGxvb2sgaW1wb3J0YW50OiBgX19rdm1fYXJjaF9kaXJ0eV9sb2dfY2xlYXJgLCBgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyYCwgYGRpcnR5X2JpdF9jbGVhcmAsIHRob3NlIHNlZW0gb2J2aW91cyBmb3IgY2xlYXJpbmcgYW5kIG1hbmFnaW5nIHRoZSBkaXJ0eSBsb2cuIFRoZW4gdGhlcmUncyBgaGFjZGJzX3N0YXJ0YCwgYGhhY2Ric19zdG9wYCwgYW5kIGBoYWNkYnNpcnFfaGFuZGxlcmAsIHdoaWNoIHNlZW0gcmVsYXRlZCB0byB0aGUgaGFyZHdhcmUtYXNzaXN0ZWQgZGlydHkgYml0IHRyYWNraW5nLCB3aGljaCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEFuZCBvZiBjb3Vyc2UsIHRoZSBjb252ZXJzaW9ucyBiZXR3ZWVuIGRpcnR5IGJpdG1hcHMgYW5kIGhhcmR3YXJlIGRpcnR5IGJpdCBzdHJ1Y3R1cmVzOiBgaGRic3NfdG9fYml0bWFwYCwgYG1hc2tfdG9faGRic3NgLiBUaG9zZSBhcmUgZXNzZW50aWFsLiBGaW5hbGx5LCBJIHNlZSB0aGUgZnVuY3Rpb25zIGBrdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgYW5kIGBfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YC4gV2FpdCBhIHNlY29uZOKApiBpc24ndCBgX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdGAgZGVjbGFyZWQgYXMgc3RhdGljIGlubGluZT8gVGhhdCBtaWdodCBtYWtlIGl0IGEgbGl0dGxlIGxlc3MgdXNlZnVsIGFzIGEgc3ltYm9sIHRvIHRyYWNrIGRpcmVjdGx5LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgaW5saW5pbmcgaXMgaGFuZGxlZCBieSB0aGUgY29tcGlsZXIuIEJ1dCwgYGt2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90YCBpcyBnbG9iYWwsIHNvIEkgdGhpbmsgdGhhdCBpcyBzdGlsbCBzYWZlLiBMZXQncyBzZWUuLi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHZpcnQva3ZtL2RpcnR5X3JpbmcuY2AgdG8gY29uZmlybSB3aGVyZSBga3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCBpcyB1c2VkLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyByb2xlIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NjEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6MjMuODMzMjc4NzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3NTQ5NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vZGlydHlfcmluZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2RpcnR5X3JpbmcuYz01ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKlxcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo1NTpfX2t2bV9kaXJ0eV9yaW5nX2dldF9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwgdTMyIHNsb3QpXFxudmlydC9rdm0vZGlydHlfcmluZy5jLTU2LXtcXG4tLVxcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy02Ny1cXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmM6Njg6c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCB1MzIgc2xvdClcXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtNjkte1xcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYzo3MDpcXHRyZXR1cm4gX19rdm1fZGlydHlfcmluZ19nZXRfbWVtc2xvdChrdm0sIHNsb3QpO1xcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy03MS19XFxuLS1cXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmM9NzM9c3RhdGljIHZvaWQga3ZtX3Jlc2V0X2RpcnR5X2dmbihzdHJ1Y3Qga3ZtICprdm0sIHUzMiBzbG90LCB1NjQgb2Zmc2V0LCB1NjQgbWFzaylcXG4tLVxcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy03Ni1cXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmM6Nzc6XFx0bWVtc2xvdCA9IF9fa3ZtX2RpcnR5X3JpbmdfZ2V0X21lbXNsb3Qoa3ZtLCBzbG90KTtcXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmMtNzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjIzLjkxMjAzODY3MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2ODgyNjI3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEFSTTY0IEtWTSBTdGFnZSAyIFBhZ2UgVGFibGUgUHJvdGVjdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoZSBjb3JlIG9mIGhvdyBzdGFnZSAyIHBhZ2UgdGFibGUgcGVybWlzc2lvbnMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBBUk02NCBLVk0gaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgZm9jdXMgaGFzIHRvIGJlIG9uIGBhcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGZvciBzZXR0aW5nIGFuZCByZWxheGluZyBwcm90ZWN0aW9uIGF0dHJpYnV0ZXMuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHN0YWdlMl9zZXRfcHJvdF9hdHRyYC4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBndWVzdCdzIHZpcnR1YWwgYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIGFuZCBlbmZvcmNlZCBhdCB0aGUgaHlwZXJ2aXNvciBsZXZlbC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoaXMgZnVuY3Rpb24gbWFuaXB1bGF0ZXMgdGhlIHBhZ2UgdGFibGUgZW50cmllcywgd2hhdCBmbGFncyBhcmUgYmVpbmcgc2V0IChlLmcuLCByZWFkLCB3cml0ZSwgZXhlY3V0ZSBwZXJtaXNzaW9ucywgYW5kIHBvc3NpYmx5IGNhY2hlIGF0dHJpYnV0ZXMpLiBVbmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBoZXJlIGlzIHZpdGFsIGZvciBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UuXG5cbkZvbGxvd2luZyB0aGF0LCBJJ2xsIGV4YW1pbmUgYGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtc2AuIFRoZSBuYW1lIGFsb25lIHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB3ZWFrZW5pbmcgcGVybWlzc2lvbnMsIHBlcmhhcHMgdG8gZW5hYmxlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBndWVzdCBvciB0byBhdm9pZCBpc3N1ZXMgd2hlbiB0cmFuc2xhdGluZyBvciBtYW5pcHVsYXRpbmcgZGF0YS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoZSByZWxheGF0aW9uIG9jY3Vycy4gQXJlIHRoZXJlIHNwZWNpZmljIG1lbW9yeSByZWdpb25zIG9yIHVuZGVyIHBhcnRpY3VsYXIgY29uZGl0aW9ucyB3aGVyZSB0aGlzIGhhcHBlbnM/IEFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgb3IgdHJhZGUtb2Zmcz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHJlbGF4aW5nIHByb3RlY3Rpb25zIGludHJvZHVjZXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuXG5cbk15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGV4cGxvcmUgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgY29kZSBiYXNlLCBidXQgdGhpcyBpcyB3aGVyZSBJJ2xsIGdldCBteSBpbml0aWFsIGluc2lnaHQuIFRoaXMgd2lsbCBiZSBhbiBpbXBvcnRhbnQgcGxhY2UgdG8gc3RhcnQgdW5kZXJzdGFuZGluZyBob3cgZ3Vlc3QgdmlydHVhbCBtZW1vcnkgaXMgbWFuYWdlZCBhbmQgc2VjdXJlZCB3aXRoaW4gdGhlIEFSTTY0IEtWTSBoeXBlcnZpc29yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDUxMywiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjI5LjYwMDMwMzE3NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5NTc4MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhZ2UyX3NldF9wcm90X2F0dHJ8a3ZtX3BndGFibGVfc3RhZ2UyX3JlbGF4X3Blcm1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYz02Nzc9c3RhdGljIGludCBzdGFnZTJfc2V0X3huX2F0dHIoZW51bSBrdm1fcGd0YWJsZV9wcm90IHByb3QsIGt2bV9wdGVfdCAqYXR0cilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtNzAxLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM6NzAyOnN0YXRpYyBpbnQgc3RhZ2UyX3NldF9wcm90X2F0dHIoc3RydWN0IGt2bV9wZ3RhYmxlICpwZ3QsIGVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90LFxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtNzAzLVxcdFxcdFxcdFxcdGt2bV9wdGVfdCAqcHRlcClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9MTA5OD1pbnQga3ZtX3BndGFibGVfc3RhZ2UyX21hcChzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsIHU2NCBzaXplLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYy0xMTE5LVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM6MTEyMDpcXHRyZXQgPSBzdGFnZTJfc2V0X3Byb3RfYXR0cihwZ3QsIHByb3QsIFxcdTAwMjZtYXBfZGF0YS5hdHRyKTtcXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jLTExMjEtXFx0aWYgKHJldClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM9MTM0NT1ib29sIGt2bV9wZ3RhYmxlX3N0YWdlMl90ZXN0X2NsZWFyX3lvdW5nKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LCB1NjQgYWRkcixcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmMtMTM2MC1cXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jOjEzNjE6aW50IGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtcyhzdHJ1Y3Qga3ZtX3BndGFibGUgKnBndCwgdTY0IGFkZHIsXFxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYy0xMzYyLVxcdFxcdFxcdFxcdCAgIGVudW0ga3ZtX3BndGFibGVfcHJvdCBwcm90LCBlbnVtIGt2bV9wZ3RhYmxlX3dhbGtfZmxhZ3MgZmxhZ3MpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jPTE0MjM9a3ZtX3B0ZV90ICprdm1fcGd0YWJsZV9zdGFnZTJfY3JlYXRlX3VubGlua2VkKHN0cnVjdCBrdm1fcGd0YWJsZSAqcGd0LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL3BndGFibGUuYy0xNDU3LVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9wZ3RhYmxlLmM6MTQ1ODpcXHRyZXQgPSBzdGFnZTJfc2V0X3Byb3RfYXR0cihwZ3QsIHByb3QsIFxcdTAwMjZtYXBfZGF0YS5hdHRyKTtcXG5hcmNoL2FybTY0L2t2bS9oeXAvcGd0YWJsZS5jLTE0NTktXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6MjkuNjY2MjY1NzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4MjU5OTg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipLVk0gUGVybWlzc2lvbiBSZWxheGF0aW9uOiBBIExvZ2ljYWwgU3RhcnRpbmcgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIHRoaXMuLi4gYGt2bV9wZ3RhYmxlX3N0YWdlMl9yZWxheF9wZXJtc2AgZmVlbHMgbGlrZSBhIHN0cm9uZyBjb250ZW5kZXIgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBJdCdzIGluIHRoZSByZWFsbSBvZiBwZXJtaXNzaW9ucywgYW5kIHdlJ3JlIGxvb2tpbmcgdG8gcmVsYXggc29tZXRoaW5nLCByaWdodD8gTWFrZXMgc2Vuc2UgdG8gYmVnaW4gd2l0aCBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBoaW50cyBhdCB0aGF0LlxuXG5Ob3csIHdoZXJlIHdhcyB0aGF0IGh1Z2UgcGFnZSBzcGxpdCBjb2RlIGFnYWluPyBBaCwgcmlnaHQhIFdlIHNob3VsZCBjaGVjayBgYXJjaC9hcm02NC9rdm0vbW11LmNgLCBpbiBwYXJ0aWN1bGFyIGZvciB0aGUgZnVuY3Rpb24gYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIHN0dWZmIGNvbmNlcm5pbmcgaHVnZSBwYWdlcyBpcy4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIHBvdGVudGlhbCBjaGFuZ2VzLiBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjQwLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6MzQuODQ4ODY4MTEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3NzEwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL21tdS5jPTEwNj1zdGF0aWMgYm9vbCBuZWVkX3NwbGl0X21lbWNhY2hlX3RvcHVwX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE5LVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEyMDppbnQga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgcGh5c19hZGRyX3QgYWRkcixcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMjEtXFx0XFx0XFx0ICAgICBwaHlzX2FkZHJfdCBlbmQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMjk5PXN0YXRpYyB2b2lkIGt2bV9tbXVfc3BsaXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTMxMy1cXHR3cml0ZV9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMzE0OlxcdGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhrdm0sIHN0YXJ0LCBlbmQpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEzMTUtXFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTEzMjk9dm9pZCBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTM0OS1cXHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMzUwOlxcdFxcdGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlcyhrdm0sIHN0YXJ0LCBlbmQpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEzNTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjM1LjAxNjY0NDM4N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk3NDI0ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGEgUG90ZW50aWFsIFN0cmF0ZWd5KipcblxuUmlnaHQsIHRoaW5raW5nIGFib3V0IHRoaXMuLi4gYGt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc2AgaXMgbG9va2luZyBsaWtlIGEgc29saWQgbGVhZC4gTXkgaW5pdGlhbCBpbnR1aXRpb24gaXMgbGVhbmluZyB0b3dhcmRzIGl0LiBJJ20gc3RhcnRpbmcgdG8gdmlzdWFsaXplIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHBvc3NpYmlsaXRpZXMgd2l0aGluIHRoYXQgY29udGV4dC5cblxuTm93LCB3aGVyZSBkbyBJIG5lZWQgdG8gZ28gdG8gc3RhcnQgZGlnZ2luZyBpbj8gTGV0IG1lIHRha2UgYSBsb29rIGF0IGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRpcnR5IGxvZyBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgaW50ZXJhY3Qgd2l0aCB3aGF0IEknbSBsb29raW5nIGF0LiBJJ2xsIGZvY3VzIG9uIGBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0YCBhbmQgYGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdGAgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBkaXJ0eSBwYWdlIHRyYWNraW5nLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBzcGxpdHRpbmcgaHVnZSBwYWdlcyBpbXBhY3RzIHRob3NlIGZ1bmN0aW9ucywgYW5kIHZpY2UtdmVyc2EuIFVuZGVyc3RhbmRpbmcgdGhlIGxvY2tpbmcgYW5kIHRoZSBnZW5lcmFsIGZsb3cgaXMgY3JpdGljYWwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNzUsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0MTozOS4wMTQxMDU0ODZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDkyOTc2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0fGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MjE5OD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX2dldF9kaXJ0eV9sb2cpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMjAxLS8qKlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjIwMjogKiBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0IC0gZ2V0IGEgc25hcHNob3Qgb2YgZGlydHkgcGFnZXNcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIyMDMtICpcXHRhbmQgcmVlbmFibGUgZGlydHkgcGFnZSB0cmFja2luZyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcGFnZXMuXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIyMjEtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyMjIyOnN0YXRpYyBpbnQga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZGlydHlfbG9nICpsb2cpXFxudmlydC9rdm0va3ZtX21haW4uYy0yMjIzLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjI1Ny1cXHRcXHQgKiBrdm1fZ2V0X2RpcnR5X2xvZywgYnV0IGhvcGVmdWxseSBhbGwgYXJjaGl0ZWN0dXJlXFxudmlydC9rdm0va3ZtX21haW4uYzoyMjU4OlxcdFxcdCAqIHRyYW5zaXRpb24gdG8ga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdCBhbmQga3ZtX2dldF9kaXJ0eV9sb2dcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIyNTktXFx0XFx0ICogY2FuIGJlIGVsaW1pbmF0ZWQuXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMDQtICogU3RlcHMgMS00IGJlbG93IHByb3ZpZGUgZ2VuZXJhbCBvdmVydmlldyBvZiBkaXJ0eSBwYWdlIGxvZ2dpbmcuIFNlZVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMwNTogKiBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KCkgZnVuY3Rpb24gZGVzY3JpcHRpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy5cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMDYtICpcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIzMDc6ICogV2UgY2FsbCBrdm1fZ2V0X2RpcnR5X2xvZ19wcm90ZWN0KCkgdG8gaGFuZGxlIHN0ZXBzIDEtMywgdXBvbiByZXR1cm4gd2VcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMDgtICogYWx3YXlzIGZsdXNoIHRoZSBUTEIgKHN0ZXAgNCkgZXZlbiBpZiBwcmV2aW91cyBzdGVwIGZhaWxlZCAgYW5kIHRoZSBkaXJ0eVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0yMzE4PXN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMzI0LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMyNTpcXHRyID0ga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdChrdm0sIGxvZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yMzI2LVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yMzMxLS8qKlxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjMzMjogKiBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3QgLSBjbGVhciBkaXJ0eSBiaXRzIGluIHRoZSBiaXRtYXBcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzMtICpcXHRhbmQgcmVlbmFibGUgZGlydHkgcGFnZSB0cmFja2luZyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcGFnZXMuXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzYtICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyMzM3OnN0YXRpYyBpbnQga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0KHN0cnVjdCBrdm0gKmt2bSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIzMzgtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBrdm1fY2xlYXJfZGlydHlfbG9nICpsb2cpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI0MTg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjQyNC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI0MjU6XFx0ciA9IGt2bV9jbGVhcl9kaXJ0eV9sb2dfcHJvdGVjdChrdm0sIGxvZyk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yNDI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0MTozOS4xNDUwNDExMTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMjA4NDY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIERpcnR5IExvZyBhbmQgUmluZyBSZXNldCBNZWNoYW5pc21zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkaXJ0eSBsb2cgYW5kIHJpbmcgcmVzZXQgaW1wbGVtZW50YXRpb25zIHdpdGhpbiBLVk0uIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBga3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdGAgYW5kIGBrdm1fY2xlYXJfZGlydHlfbG9nX3Byb3RlY3RgIGFyZSBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGhlbHBlciBmdW5jdGlvbnMuIExldCBtZSB0aGluaywgc28gdGhlc2UgYXJlIGhlbHBlciBmdW5jdGlvbnMuIEFoLCBhbmQgaGVyZSBhcmUgdGhlIHJlbGV2YW50IGlvY3RsIGhhbmRsZXJzIOKAkyBga3ZtX3ZtX2lvY3RsX2dldF9kaXJ0eV9sb2dgIGFuZCBga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZ2AuIFRoZXkgbGlrZWx5IHdyYXAgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBhbHNvIHNlZSB0aGF0IGBrdm1fZGlydHlfcmluZ19yZXNldGAgaXMgYW4gaW9jdGwgaGFuZGxlciBhcyB3ZWxsLiBSaWdodCwgSSBuZWVkIHRvIHNlZSBob3cgYGt2bV9kaXJ0eV9yaW5nX3Jlc2V0YCBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgYGt2bV9kaXJ0eV9yaW5nX3Jlc2V0YCBpcyBkZWZpbmVkIGluIGB2aXJ0L2t2bS9kaXJ0eV9yaW5nLmNgLCBzbyBJIHNob3VsZCBzdGFydCB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSByZXNldCBwcm9jZWR1cmUuIExldCdzIGRpZyBpbiBhbmQgZmlndXJlIG91dCBob3cgaXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNjEyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjQzLjI2NzEyODI0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI2NTM0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2RpcnR5X3JpbmdfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vZGlydHlfcmluZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2RpcnR5X3JpbmcuYz0xMDQ9c3RhdGljIGlubGluZSB2b2lkIGt2bV9kaXJ0eV9nZm5fc2V0X2RpcnRpZWQoc3RydWN0IGt2bV9kaXJ0eV9nZm4gKmdmbilcXG4tLVxcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy0xMDgtXFxudmlydC9rdm0vZGlydHlfcmluZy5jOjEwOTppbnQga3ZtX2RpcnR5X3JpbmdfcmVzZXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2RpcnR5X3JpbmcgKnJpbmcsXFxudmlydC9rdm0vZGlydHlfcmluZy5jLTExMC1cXHRcXHRcXHQgaW50ICpucl9lbnRyaWVzX3Jlc2V0KVxcbi0tXFxudmlydC9rdm0vZGlydHlfcmluZy5jLTIxOS1cXG52aXJ0L2t2bS9kaXJ0eV9yaW5nLmM6MjIwOlxcdHRyYWNlX2t2bV9kaXJ0eV9yaW5nX3Jlc2V0KHJpbmcpO1xcbnZpcnQva3ZtL2RpcnR5X3JpbmcuYy0yMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjQzLjM5OTc4OTg5N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjIxMTQwNDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGlydHkgTG9nIGFuZCBSZWxhdGVkIEtWTSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgZGlydHkgbG9nIG1lY2hhbmlzbSB3aXRoaW4gS1ZNLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgaW52b2x2ZWQ6IGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzYCwgYGt2bV9kaXJ0eV9yaW5nX3Jlc2V0YCwgYGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nYCwgYW5kIGBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nYCwgYW5kIGBrdm1fcGd0YWJsZV9zdGFnZTJfcmVsYXhfcGVybXNgLiBUaGUga2V5IGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRpcnR5IGxvZyBpcyBtYW5hZ2VkIGFuZCBjbGVhcmVkLlxuXG5JIGhhZCB0byBkb3VibGUtY2hlY2sgYGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nYCBhbmQgYGt2bV92bV9pb2N0bF9jbGVhcl9kaXJ0eV9sb2dgLCBzaW5jZSB0aG9zZSBJT0NUTHMgY2FuIGJlIHF1aXRlIHRyaWNreS4gQWgsIHJpZ2h0LCB0aGUgYWN0dWFsIG1vZGlmaWNhdGlvbnMgYXJlIGhpdHRpbmcgdGhlICpwcm90ZWN0KiB2ZXJzaW9uczogYGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3RgIGFuZCBga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0YC4gTm8gcHJvYmxlbTsgZXZlbiB0aG91Z2ggdGhvc2UgYXJlIHN0YXRpYywgdGhleSBhcmUgcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aCwgc28gSSBuZWVkIHRvIGluY2x1ZGUgdGhlbSBpbiBteSBhbmFseXNpcy5cblxuTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9mIGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AuIEkgcmVjYWxsIHRoYXQgYGRpcnR5X2JpdF9jbGVhcmAgaXMgc3RhdGljLCBidXQgaXQncyAqdGhlKiBjb3JlIGNsZWFyaW5nIGxvZ2ljLiBBbHNvLCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBgaGFjZGJzX3N0YXJ0YCwgYGhhY2Ric19zdG9wYCwgYW5kIGBoYWNkYnNpcnFfaGFuZGxlcmAgYXMgdGhleSBhcmUgaW50ZWdyYWwgdG8gdGhlIGhhcmR3YXJlLWFzc2lzdGVkIGRpcnR5IGJpdCB0cmFja2luZyBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biBhIG1vcmUgcmVmaW5lZCBsaXN0LiBDb25zaWRlcmluZyB0aGUgY29yZSBvcGVyYXRpb25zLCBJJ2xsIGRlZmluaXRlbHkgaW5jbHVkZTogYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBkaXJ0eV9iaXRfY2xlYXJgLCBgaGFjZGJzaXJxX2hhbmRsZXJgLCBga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzYCwgYGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3RgLCBga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0YCwgYW5kIGBrdm1fZGlydHlfcmluZ19yZXNldGAuXG5cbkkgY2FuIHNlZSB0aGF0IG15IGluaXRpYWwgbGlzdCBjYW4gYmUgdHJpbW1lZCBhIGJpdC4gRm9jdXNpbmcgb24gdGhlIGNlbnRyYWwgbG9naWMsIEkgd2lsbCByZWZpbmUgaXQgdG86IGBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcmAsIGBfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJgLCBgZGlydHlfYml0X2NsZWFyYCwgYGhhY2Ric2lycV9oYW5kbGVyYCwgYW5kIGBrdm1fbW11X3NwbGl0X2h1Z2VfcGFnZXNgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgdXNlIG9mIHN0YXRpYyBmdW5jdGlvbnMuIEl0J3MgcGVyZmVjdGx5IGZpbmUgdG8gaW5jbHVkZSB0aGVtIGJlY2F1c2UgdGhleSBhcmUgZXNzZW50aWFsIHRvIGhvdyB0aGUgZmVhdHVyZSBpcyBpbXBsZW1lbnRlZC4gQWxzbywgYGRpcnR5X2JpdF9jbGVhcmAgaXMgdW5pcXVlIHNvIGl0IGlzIHVubGlrZWx5IHRvIGhhdmUgYW55IG5hbWUgY29sbGlzaW9uLiBHb29kLiBCYWNrIHRvIGBhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY2AgdG8gc2VlIGhvdyBpdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6NTIuNjIwOTMyMzM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ3ODE2MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpcnR5X2JpdF9jbGVhclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYz01Mj1zdGF0aWMgaW50IGhhY2Ric19zdG9wKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy03NC0gKi9cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYzo3NTpzdGF0aWMgaW50IGRpcnR5X2JpdF9jbGVhcihzdHJ1Y3Qga3ZtICprdm0sIHU2NCAqaHdfZW50cmllcywgaW50IHNpemUpXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtNzYte1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM9MTQ5PWludCBfX2t2bV9hcmNoX2RpcnR5X2xvZ19jbGVhcihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0yMTktXFx0XFx0XFx0aWYgKGlkeCBcXHUwMDNlPSBlbnRyaWVzX3N6KSB7XFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmM6MjIwOlxcdFxcdFxcdFxcdHJldCA9IGRpcnR5X2JpdF9jbGVhcihrdm0sIGh3X2VudHJpZXMsIGlkeCk7XFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjIxLVxcdFxcdFxcdFxcdCpmbHVzaCA9ICpmbHVzaCB8fCByZXQgXFx1MDAzZSAwO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMjMyLVxcdGlmIChpZHggIT0gMCkge1xcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjIzMzpcXHRcXHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpZHgpO1xcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jLTIzNC1cXHRcXHQqZmx1c2ggPSAqZmx1c2ggfHwgcmV0IFxcdTAwM2UgMDtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jPTI1OT1pbnQgX19rdm1fYXJjaF9kaXJ0eV9yaW5nX2NsZWFyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9kaXJ0eV9yaW5nICpyaW5nLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vZGlydHlfYml0LmMtMzAwLVxcbmFyY2gvYXJtNjQva3ZtL2RpcnR5X2JpdC5jOjMwMTpcXHRyZXQgPSBkaXJ0eV9iaXRfY2xlYXIoa3ZtLCBod19lbnRyaWVzLCBpKTtcXG5hcmNoL2FybTY0L2t2bS9kaXJ0eV9iaXQuYy0zMDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjQxOjUzLjc2ODc1NDcyNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTEwMDExNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBjbGVhciB0aGF0IHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHksIEkgYWJzb2x1dGVseSBuZWVkIGBLVk1gIGFuZCBgQUNQSWAgZW5hYmxlZC4gSSBzZWUgdGhhdCB0aGUgYEhBVkVfS1ZNX0hXX0RJUlRZX0JJVGAgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCAqYnkqIGBLVk1gIGlmIGBBQ1BJYCBpcyBhbHNvIGNvbmZpZ3VyZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIHNvIHRob3NlIHR3byBhcmUgdGhlIGNvcmUgcmVxdWlyZW1lbnRzLlxuXG5Ob3csIEkgYWx3YXlzIGxpa2UgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgYW55IG90aGVyIGltcGxpY2l0IGRlcGVuZGVuY2llcy4gQWgsIHJpZ2h0LCBvZiBjb3Vyc2UsIGBDT05GSUdfQVJNNjRgIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgaW1wbGllZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIEFuZCwgSSBzZWUgdGhhdCBgQ09ORklHX0hBVkVfS1ZNX0hXX0RJUlRZX0JJVGAgaXRzZWxmIGlzIGEgaGlkZGVuIGNvbmZpZywgc28gaXQncyBub3Qgc29tZXRoaW5nIEknbGwgYmUgZGlyZWN0bHkgc2V0dGluZy4gSSBzaG91bGQgbWFrZSBhIG5vdGUgb2YgdGhhdCBmb3Igd2hlbiBJIHNldCB1cCB0aGUgYnVpbGQuXG5cbk9rYXksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gvYXJtNjQva3ZtL0tjb25maWdgIGZpbGUgYWdhaW4sIG1ha2Ugc3VyZSBJIGRpZG4ndCBtaXNzIHNvbWV0aGluZy4gTGV0J3MgbWFrZSBzdXJlIEkgZGlkbid0IHNraXAgb3ZlciBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDE6NTguODc4NzY4NDI0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE4NTYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9LVk1fSFdfRElSVFlfQklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0yMD1tZW51Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zNi1cXHRzZWxlY3QgSEFWRV9LVk1fVkNQVV9SVU5fUElEX0NIQU5HRVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6Mzc6XFx0c2VsZWN0IEhBVkVfS1ZNX0hXX0RJUlRZX0JJVCBpZiBBQ1BJXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgU0NIRURfSU5GT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMTo0MTo1OC45ODA2MzA2MzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIzNDc5MTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0vQUNQSSBQYXRjaCBmb3IgQVJNNjQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBwb2ludHMgdG8gYEtWTWAgYW5kIGBBQ1BJYCBhcyB0aGUga2V5IHBsYXllcnMgaGVyZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgYXJlYSByaXBlIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IHRha2Vhd2F5IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBoYXJkd2FyZSBkaXJ0eSBiaXQgdHJhY2tpbmcgYW5kIGNsZWFuaW5nIChIREJTUyBhbmQgSEFDREJTLCByZXNwZWN0aXZlbHkpIHNwZWNpZmljYWxseSBmb3IgQVJNNjQgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBUaGlzIG1lYW5zIHdlJ3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyB0byBjb3JlIEtWTSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGlydHkgbG9nZ2luZyBsb2dpYy4gQmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIHRoZXNlIG5ldyBpbnRlcnJ1cHQgaGFuZGxlcnMgYW5kIGlvY3RsIHBhdGhzLCBpdCBtZWFucyB0aGVyZSBhcmUgbmV3IHBvaW50cyBvZiBpbnRlcmFjdGlvbiBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGNvcmUgb2YgdGhlIGZ1enppbmcgdGFyZ2V0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBzZXZlcmFsIGZ1bmN0aW9uczogYF9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyYCwgYF9fa3ZtX2FyY2hfZGlydHlfcmluZ19jbGVhcmAsIGBkaXJ0eV9iaXRfY2xlYXJgLCBgaGFjZGJzaXJxX2hhbmRsZXJgLCBga3ZtX21tdV9zcGxpdF9odWdlX3BhZ2VzYCwgYGt2bV9nZXRfZGlydHlfbG9nX3Byb3RlY3RgLCBga3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0YCBhbmQgYGt2bV9kaXJ0eV9yaW5nX3Jlc2V0YC4gVGhleSBhcmUgZGlyZWN0bHkgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIGxvdy1sZXZlbCBkaXJ0eSBiaXQgbWFuYWdlbWVudC4gVGhleSBzaG91bGQgYmUgcHJpb3JpdGl6ZWQgZHVyaW5nIGZ1enppbmcuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBtYXJrZWQgYXMgXCJXb3J0aEZ1enppbmdcIiBiZWNhdXNlIHRoZSBtb2RpZmljYXRpb25zIGludHJvZHVjZSBuZXcsIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgaW50ZXJhY3QgY2xvc2VseSB3aXRoIGhhcmR3YXJlLiBUaGUgYEtWTWAgYW5kIGBBQ1BJYCBjb25maWdzIGFyZSBhY3RpdmF0ZWQsIGFuZCB0aGUgZW51bWVyYXRlZCBmdW5jdGlvbnMgd2lsbCBmb3JtIHRoZSBjb3JlIG9mIG15IGZ1enppbmcgY2FtcGFpZ25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ5OSwiT3V0cHV0VG9rZW5zIjoxOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6NDI6MDYuMjE1NDI0MzE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4MTA2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiQUNQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyXCIsXG4gICAgXCJfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJcIixcbiAgICBcImRpcnR5X2JpdF9jbGVhclwiLFxuICAgIFwiaGFjZGJzaXJxX2hhbmRsZXJcIixcbiAgICBcImt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc1wiLFxuICAgIFwia3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdFwiLFxuICAgIFwia3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0XCIsXG4gICAgXCJrdm1fZGlydHlfcmluZ19yZXNldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiQUNQSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fa3ZtX2FyY2hfZGlydHlfbG9nX2NsZWFyXCIsXG4gICAgXCJfX2t2bV9hcmNoX2RpcnR5X3JpbmdfY2xlYXJcIixcbiAgICBcImRpcnR5X2JpdF9jbGVhclwiLFxuICAgIFwiaGFjZGJzaXJxX2hhbmRsZXJcIixcbiAgICBcImt2bV9tbXVfc3BsaXRfaHVnZV9wYWdlc1wiLFxuICAgIFwia3ZtX2dldF9kaXJ0eV9sb2dfcHJvdGVjdFwiLFxuICAgIFwia3ZtX2NsZWFyX2RpcnR5X2xvZ19wcm90ZWN0XCIsXG4gICAgXCJrdm1fZGlydHlfcmluZ19yZXNldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgaGFyZHdhcmUgZGlydHkgYml0IHRyYWNraW5nIChIREJTUykgYW5kIGNsZWFuaW5nIChIQUNEQlMpIGZvciBBUk02NCBLVk0uIEl0IG1vZGlmaWVzIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIGxvZ2ljLCBhZGRpbmcgbmV3IGlvY3RsIHBhdGhzIGFuZCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzbng[1] Phase: Succeeded StartedAt: 2026-06-29 11:43:00 +0000 UTC FinishedAt: 2026-06-29 11:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 11:43:00 +0000 UTC FinishedAt: 2026-06-29 11:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2] Phase: Succeeded StartedAt: 2026-06-29 11:43:00 +0000 UTC FinishedAt: 2026-06-29 15:51:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 11:43:00 +0000 UTC FinishedAt: 2026-06-29 15:51:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 11:43:00 +0000 UTC FinishedAt: 2026-06-29 11:43:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 11:43:00 +0000 UTC FinishedAt: 2026-06-29 11:43:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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-workflowdzbng/series-workflowdzbng-convert-artifact-2175738097/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 11:43:20 +0000 UTC FinishedAt: 2026-06-29 12:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 11:43:20 +0000 UTC FinishedAt: 2026-06-29 12:13:47 +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:*57d2c496-36c4-4e10-9d4e-eece0b11ddc5,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-workflowdzbng/series-workflowdzbng-convert-artifact-2175738097/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": "5dfeb294-8765-43fd-a917-4ede1121e7d2", "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-workflowdzbng/series-workflowdzbng-build-action-2920930079/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 11:43:20 +0000 UTC FinishedAt: 2026-06-29 12:13:35 +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:*57d2c496-36c4-4e10-9d4e-eece0b11ddc5,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-workflowdzbng/series-workflowdzbng-convert-artifact-2175738097/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": "5dfeb294-8765-43fd-a917-4ede1121e7d2", "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-workflowdzbng/series-workflowdzbng-build-action-2920930079/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:13:47 +0000 UTC FinishedAt: 2026-06-29 12:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:13:47 +0000 UTC FinishedAt: 2026-06-29 12:13:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:13:47 +0000 UTC FinishedAt: 2026-06-29 12:14:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:13:47 +0000 UTC FinishedAt: 2026-06-29 12:14:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-workflowdzbng/series-workflowdzbng-convert-artifact-1760876356/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:14:34 +0000 UTC FinishedAt: 2026-06-29 12:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:14:34 +0000 UTC FinishedAt: 2026-06-29 12:16:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5dfeb294-8765-43fd-a917-4ede1121e7d2,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-workflowdzbng/series-workflowdzbng-build-action-2920930079/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-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:16:51 +0000 UTC FinishedAt: 2026-06-29 12:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:16:51 +0000 UTC FinishedAt: 2026-06-29 12:16:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:16:51 +0000 UTC FinishedAt: 2026-06-29 12:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:16:51 +0000 UTC FinishedAt: 2026-06-29 12:47: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:*57d2c496-36c4-4e10-9d4e-eece0b11ddc5,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-workflowdzbng/series-workflowdzbng-convert-artifact-1760876356/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": "977aa97b-d3d3-4d4e-9672-518d1df8353a", "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-workflowdzbng/series-workflowdzbng-build-action-3630890832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:16:51 +0000 UTC FinishedAt: 2026-06-29 12:47:37 +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:*57d2c496-36c4-4e10-9d4e-eece0b11ddc5,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-workflowdzbng/series-workflowdzbng-convert-artifact-1760876356/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": "977aa97b-d3d3-4d4e-9672-518d1df8353a", "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-workflowdzbng/series-workflowdzbng-build-action-3630890832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:47:48 +0000 UTC FinishedAt: 2026-06-29 12:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:47:48 +0000 UTC FinishedAt: 2026-06-29 12:47:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:47:48 +0000 UTC FinishedAt: 2026-06-29 12:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:47:48 +0000 UTC FinishedAt: 2026-06-29 12:49:40 +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:*977aa97b-d3d3-4d4e-9672-518d1df8353a,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-workflowdzbng/series-workflowdzbng-build-action-3630890832/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-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:49:52 +0000 UTC FinishedAt: 2026-06-29 15:51:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:49:52 +0000 UTC FinishedAt: 2026-06-29 15:51:29 +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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5dfeb294-8765-43fd-a917-4ede1121e7d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*977aa97b-d3d3-4d4e-9672-518d1df8353a,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-workflowdzbng/series-workflowdzbng-build-action-2920930079/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-workflowdzbng/series-workflowdzbng-build-action-3630890832/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:49:52 +0000 UTC FinishedAt: 2026-06-29 12:50:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:49:52 +0000 UTC FinishedAt: 2026-06-29 12:50: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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdzbng/series-workflowdzbng-convert-artifact-3891548237/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:49:52 +0000 UTC FinishedAt: 2026-06-29 12:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:49:52 +0000 UTC FinishedAt: 2026-06-29 12:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:49:52 +0000 UTC FinishedAt: 2026-06-29 12:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:50:15 +0000 UTC FinishedAt: 2026-06-29 15:51:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdzbng[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"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":["kvm"],"focus_symbols":["__kvm_arch_dirty_log_clear","__kvm_arch_dirty_ring_clear","dirty_bit_clear","hacdbsirq_handler","kvm_mmu_split_huge_pages","kvm_get_dirty_log_protect","kvm_clear_dirty_log_protect","kvm_dirty_ring_reset"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","ACPI"],"series_id":"4fb42990-363d-4513-a4dc-cab931d98fd5","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-06-29 12:50:15 +0000 UTC FinishedAt: 2026-06-29 15:51:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5dfeb294-8765-43fd-a917-4ede1121e7d2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*977aa97b-d3d3-4d4e-9672-518d1df8353a,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-workflowdzbng/series-workflowdzbng-build-action-2920930079/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-workflowdzbng/series-workflowdzbng-build-action-3630890832/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-workflowdzbng/series-workflowdzbng-convert-artifact-3891548237/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,}