Name: series-workflowqnvp9 Phase: Succeeded StartedAt: 2026-07-03 12:27:29 +0000 UTC FinishedAt: 2026-07-03 13:40:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[0] Phase: Succeeded StartedAt: 2026-07-03 12:27:29 +0000 UTC FinishedAt: 2026-07-03 12:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 12:27:29 +0000 UTC FinishedAt: 2026-07-03 12:44:35 +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": "6476418cb871288d93c0241d94793c181b61d033", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE", "MIGRATION" ], "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": "6476418cb871288d93c0241d94793c181b61d033", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE", "MIGRATION" ], "series_id": "ff6e67cd-e960-43ad-ab95-8bde17ac4f81" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "remove_migration_pte", "prot_none_hugetlb_entry", "check_pte", "try_to_unmap_one", "try_to_migrate_one", "huge_ptep_get", "find_num_contig" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZW1vdmVfbWlncmF0aW9uX3B0ZSYjMzQ7LAogICAgJiMzNDtwcm90X25vbmVfaHVnZXRsYl9lbnRyeSYjMzQ7LAogICAgJiMzNDtjaGVja19wdGUmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fbWlncmF0ZV9vbmUmIzM0OywKICAgICYjMzQ7aHVnZV9wdGVwX2dldCYjMzQ7LAogICAgJiMzNDtmaW5kX251bV9jb250aWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgaHVnZXRsYiBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIHJlYWQgYnkgaW50cm9kdWNpbmcgYW5kIHVzaW5nIGBodWdlX3B0ZXBfZ2V0YCBpbnN0ZWFkIG9mIGBwdGVwX2dldGAgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgaW5jbHVkaW5nIG1pZ3JhdGlvbiwgcm1hcCwgbXByb3RlY3QsIGFuZCBwYWdlX3ZtYV9tYXBwZWQuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYGZpbmRfbnVtX2NvbnRpZ2AgZm9yIGFybTY0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE1YTllMGQwYmJlMTNhMzU3NDA0MjJhZGY0MDc4YmM4NjIyZjVlYTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjQyOjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuaW5kZXggMzA3NzJhOTA5YWVhM2UuLjhlNzk5YzFmZTBhYTY5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbkBAIC04Nyw3ICYjNDM7ODcsNyBAQCBzdGF0aWMgaW50IGZpbmRfbnVtX2NvbnRpZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gXHRwdWRwID0gcHVkX29mZnNldChwNGRwLCBhZGRyKTtcbiBcdHBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuLVx0aWYgKChwdGVfdCAqKXBtZHAgPT0gcHRlcCkge1xuJiM0MztcdGlmICgocHRlX3QgKilQVFJfQUxJR05fRE9XTihwbWRwLCBzaXplb2YoKnBtZHApICogQ09OVF9QTURTKSA9PSBwdGVwKSB7XG4gXHRcdCpwZ3NpemUgPSBQTURfU0laRTtcbiBcdFx0cmV0dXJuIENPTlRfUE1EUztcbiBcdH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uNjk5NmQwMmFjZjE3MTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xMjYxLDYgJiM0MzsxMjYxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY291bnRfc3ViKGxvbmcgbCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIH1cbiBcbiYjNDM7cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4ge1xuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggZDliMjM5MDlkNzE2YzYuLmM2NWYwZjQzZGY3ZWJiIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC0zNzEsNyAmIzQzOzM3MSwxMSBAQCBzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gI2VuZGlmXG4tXHRcdG9sZF9wdGUgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiYjNDM7XHRcdFx0b2xkX3B0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBwdm13LmFkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHRcdHB2bXcucHRlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0b2xkX3B0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbiBcdFx0aWYgKHJtYXBfd2Fsa19hcmctXHUwMDNlbWFwX3VudXNlZF90b196ZXJvcGFnZSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHRyeV90b19tYXBfdW51c2VkX3RvX3plcm9wYWdlKFx1MDAyNnB2bXcsIGZvbGlvLCBvbGRfcHRlLCBpZHgpKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL21tL21wcm90ZWN0LmMgYi9tbS9tcHJvdGVjdC5jXG5pbmRleCA5Y2JmOTMyYjAyOGNmOS4uNjM2MGQ4YTM3ODAyMzQgMTAwNjQ0XG4tLS0gYS9tbS9tcHJvdGVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tcHJvdGVjdC5jXG5AQCAtNjk5LDE0ICYjNDM7Njk5LDIwIEBAIHN0YXRpYyBpbnQgcHJvdF9ub25lX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdDAgOiAtRUFDQ0VTO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBzdGF0aWMgaW50IHByb3Rfbm9uZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIHtcbi1cdHJldHVybiBwZm5fbW9kaWZ5X2FsbG93ZWQocHRlX3BmbihwdGVwX2dldChwdGUpKSxcbi1cdFx0XHRcdCAgKihwZ3Byb3RfdCAqKSh3YWxrLVx1MDAzZXByaXZhdGUpKSA/XG4tXHRcdDAgOiAtRUFDQ0VTO1xuJiM0MztcdGNvbnN0IHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuJiM0MztcbiYjNDM7XHRpZiAocGZuX21vZGlmeV9hbGxvd2VkKHB0ZV9wZm4oZW50cnkpLCAqKHBncHJvdF90ICopKHdhbGstXHUwMDNlcHJpdmF0ZSkpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FQUNDRVNTO1xuIH1cbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBwcm90X25vbmVfaHVnZXRsYl9lbnRyeVx0TlVMTFxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgaW50IHByb3Rfbm9uZV90ZXN0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0LFxuIFx0XHRcdCAgc3RydWN0IG1tX3dhbGsgKndhbGspXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuaW5kZXggMmNjYmFiZmIyY2MxN2EuLjE4ZTFkMzQxZjQ2M2M5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV92bWFfbWFwcGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5AQCAtMTA3LDcgJiM0MzsxMDcsMTMgQEAgc3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLFxuIHN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuO1xuLVx0cHRlX3QgcHRlbnQgPSBwdGVwX2dldChwdm13LVx1MDAzZXB0ZSk7XG4mIzQzO1x0cHRlX3QgcHRlbnQ7XG4mIzQzO1xuJiM0MztcdGlmIChpc192bV9odWdldGxiX3BhZ2UocHZtdy1cdTAwM2V2bWEpKVxuJiM0MztcdFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctXHUwMDNldm1hLVx1MDAzZXZtX21tLCBwdm13LVx1MDAzZWFkZHJlc3MsXG4mIzQzO1x0XHRcdFx0ICAgICAgcHZtdy1cdTAwM2VwdGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHB0ZW50ID0gcHRlcF9nZXQocHZtdy1cdTAwM2VwdGUpO1xuIFxuIFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKSB7XG4gXHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCAxYzc3ZDVkYzA2ZTlmYS4uZWE0YWQ1ZTY2MmY3ZGIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuY1xuQEAgLTIwOTUsMTQgJiM0MzsyMDk1LDE5IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVuZXhwZWN0ZWQgUE1ELW1hcHBlZCBUSFA/ICovXG4gXHRcdFZNX0JVR19PTl9GT0xJTyghcHZtdy5wdGUsIGZvbGlvKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0XG4tXHRcdCAqIGFjdHVhbGx5IG1hcCBwYWdlcy5cbi1cdFx0ICovXG4tXHRcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbiYjNDM7XHRcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuJiM0MztcdFx0XHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbiBcdFx0XHRwZm4gPSBwdGVfcGZuKHB0ZXZhbCk7XG4gXHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcyxcbiYjNDM7XHRcdFx0ICogdGhhdCBhY3R1YWxseSBtYXAgcGFnZXMuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGV2YWwpO1xuIFxuIFx0XHRcdHBmbiA9IHNvZnRsZWFmX3RvX3BmbihlbnRyeSk7XG5AQCAtMjExMCw3ICYjNDM7MjExNSw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdH1cbiBcbiBcdFx0c3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpO1xuLVx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7XG4gXG5AQCAtMjUwMSwxNCAmIzQzOzI1MDUsMTkgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQvKiBVbmV4cGVjdGVkIFBNRC1tYXBwZWQgVEhQPyAqL1xuIFx0XHRWTV9CVUdfT05fRk9MSU8oIXB2bXcucHRlLCBmb2xpbyk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdFxuLVx0XHQgKiBhY3R1YWxseSBtYXAgcGFnZXMuXG4tXHRcdCAqL1xuLVx0XHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4mIzQzO1x0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuJiM0MztcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiYjNDM7XHRcdFx0cHRldmFsID0gaHVnZV9wdGVwX2dldChtbSwgYWRkcmVzcywgcHZtdy5wdGUpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuJiM0MztcdFx0fVxuIFx0XHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7XG4gXHRcdFx0cGZuID0gcHRlX3BmbihwdGV2YWwpO1xuIFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBIYW5kbGUgUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsXG4mIzQzO1x0XHRcdCAqIHRoYXQgYWN0dWFsbHkgbWFwIHBhZ2VzLlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKTtcbiBcbiBcdFx0XHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xuQEAgLTI1MTYsNyAmIzQzOzI1MjUsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdH1cbiBcbiBcdFx0c3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpO1xuLVx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbW92ZV9taWdyYXRpb25fcHRlJiMzNDssCiAgICAmIzM0O3Byb3Rfbm9uZV9odWdldGxiX2VudHJ5JiMzNDssCiAgICAmIzM0O2NoZWNrX3B0ZSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fdW5tYXBfb25lJiMzNDssCiAgICAmIzM0O3RyeV90b19taWdyYXRlX29uZSYjMzQ7LAogICAgJiMzNDtodWdlX3B0ZXBfZ2V0JiMzNDssCiAgICAmIzM0O2ZpbmRfbnVtX2NvbnRpZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyBodWdldGxiIHBhZ2UgdGFibGUgZW50cmllcyBhcmUgcmVhZCBieSBpbnRyb2R1Y2luZyBhbmQgdXNpbmcgYGh1Z2VfcHRlcF9nZXRgIGluc3RlYWQgb2YgYHB0ZXBfZ2V0YCBhY3Jvc3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBpbmNsdWRpbmcgbWlncmF0aW9uLCBybWFwLCBtcHJvdGVjdCwgYW5kIHBhZ2Vfdm1hX21hcHBlZC4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgZmluZF9udW1fY29udGlnYCBmb3IgYXJtNjQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNWE5ZTBkMGJiZTEzYTM1NzQwNDIyYWRmNDA3OGJjODYyMmY1ZWE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAxMjo0MjozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCAzMDc3MmE5MDlhZWEzZS4uOGU3OTljMWZlMGFhNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTg3LDcgJiM0Mzs4Nyw3IEBAIHN0YXRpYyBpbnQgZmluZF9udW1fY29udGlnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJcDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7CiAJcHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7CiAJcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7Ci0JaWYgKChwdGVfdCAqKXBtZHAgPT0gcHRlcCkgewomIzQzOwlpZiAoKHB0ZV90ICopUFRSX0FMSUdOX0RPV04ocG1kcCwgc2l6ZW9mKCpwbWRwKSAqIENPTlRfUE1EUykgPT0gcHRlcCkgewogCQkqcGdzaXplID0gUE1EX1NJWkU7CiAJCXJldHVybiBDT05UX1BNRFM7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAyYWJhZjk5MzIxZTkwZC4uNjk5NmQwMmFjZjE3MTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0xMjYxLDYgJiM0MzsxMjYxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY291bnRfc3ViKGxvbmcgbCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiB9CiAKJiM0MztwdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggZDliMjM5MDlkNzE2YzYuLmM2NWYwZjQzZGY3ZWJiIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC0zNzEsNyAmIzQzOzM3MSwxMSBAQCBzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJY29udGludWU7CiAJCX0KICNlbmRpZgotCQlvbGRfcHRlID0gcHRlcF9nZXQocHZtdy5wdGUpOwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQkJb2xkX3B0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLSZndDt2bV9tbSwgcHZtdy5hZGRyZXNzLAomIzQzOwkJCQkJCXB2bXcucHRlKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlvbGRfcHRlID0gcHRlcF9nZXQocHZtdy5wdGUpOwogCQlpZiAocm1hcF93YWxrX2FyZy0mZ3Q7bWFwX3VudXNlZF90b196ZXJvcGFnZSAmYW1wOyZhbXA7CiAJCSAgICB0cnlfdG9fbWFwX3VudXNlZF90b196ZXJvcGFnZSgmYW1wO3B2bXcsIGZvbGlvLCBvbGRfcHRlLCBpZHgpKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuYwppbmRleCA5Y2JmOTMyYjAyOGNmOS4uNjM2MGQ4YTM3ODAyMzQgMTAwNjQ0Ci0tLSBhL21tL21wcm90ZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXByb3RlY3QuYwpAQCAtNjk5LDE0ICYjNDM7Njk5LDIwIEBAIHN0YXRpYyBpbnQgcHJvdF9ub25lX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCTAgOiAtRUFDQ0VTOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIHN0YXRpYyBpbnQgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzaywKIAkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCwKIAkJCQkgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKIHsKLQlyZXR1cm4gcGZuX21vZGlmeV9hbGxvd2VkKHB0ZV9wZm4ocHRlcF9nZXQocHRlKSksCi0JCQkJICAqKHBncHJvdF90ICopKHdhbGstJmd0O3ByaXZhdGUpKSA/Ci0JCTAgOiAtRUFDQ0VTOwomIzQzOwljb25zdCBwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay0mZ3Q7bW0sIGFkZHIsIHB0ZSk7CiYjNDM7CiYjNDM7CWlmIChwZm5fbW9kaWZ5X2FsbG93ZWQocHRlX3BmbihlbnRyeSksICoocGdwcm90X3QgKikod2Fsay0mZ3Q7cHJpdmF0ZSkpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAtRUFDQ0VTUzsKIH0KJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnkJTlVMTAomIzQzOyNlbmRpZgogCiBzdGF0aWMgaW50IHByb3Rfbm9uZV90ZXN0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0LAogCQkJICBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKZGlmZiAtLWdpdCBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jIGIvbW0vcGFnZV92bWFfbWFwcGVkLmMKaW5kZXggMmNjYmFiZmIyY2MxN2EuLjE4ZTFkMzQxZjQ2M2M5IDEwMDY0NAotLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuYwpAQCAtMTA3LDcgJiM0MzsxMDcsMTMgQEAgc3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLAogc3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47Ci0JcHRlX3QgcHRlbnQgPSBwdGVwX2dldChwdm13LSZndDtwdGUpOwomIzQzOwlwdGVfdCBwdGVudDsKJiM0MzsKJiM0MzsJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZShwdm13LSZndDt2bWEpKQomIzQzOwkJcHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctJmd0O3ZtYS0mZ3Q7dm1fbW0sIHB2bXctJmd0O2FkZHJlc3MsCiYjNDM7CQkJCSAgICAgIHB2bXctJmd0O3B0ZSk7CiYjNDM7CWVsc2UKJiM0MzsJCXB0ZW50ID0gcHRlcF9nZXQocHZtdy0mZ3Q7cHRlKTsKIAogCWlmIChwdm13LSZndDtmbGFncyAmYW1wOyBQVk1XX01JR1JBVElPTikgewogCQljb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpOwpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDFjNzdkNWRjMDZlOWZhLi5lYTRhZDVlNjYyZjdkYiAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMjA5NSwxNCAmIzQzOzIwOTUsMTkgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJLyogVW5leHBlY3RlZCBQTUQtbWFwcGVkIFRIUD8gKi8KIAkJVk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pOwogCi0JCS8qCi0JCSAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdAotCQkgKiBhY3R1YWxseSBtYXAgcGFnZXMuCi0JCSAqLwotCQlwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7CiYjNDM7CQlhZGRyZXNzID0gcHZtdy5hZGRyZXNzOwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKJiM0MzsJCQlwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTsKJiM0MzsJCX0KIAkJaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkgewogCQkJcGZuID0gcHRlX3BmbihwdGV2YWwpOwogCQl9IGVsc2UgewomIzQzOwkJCS8qCiYjNDM7CQkJICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLAomIzQzOwkJCSAqIHRoYXQgYWN0dWFsbHkgbWFwIHBhZ2VzLgomIzQzOwkJCSAqLwogCQkJY29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCk7CiAKIAkJCXBmbiA9IHNvZnRsZWFmX3RvX3BmbihlbnRyeSk7CkBAIC0yMTEwLDcgJiM0MzsyMTE1LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJfQogCiAJCXN1YnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBwZm4gLSBmb2xpb19wZm4oZm9saW8pKTsKLQkJYWRkcmVzcyA9IHB2bXcuYWRkcmVzczsKIAkJYW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsKIAkJCQkgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7CiAKQEAgLTI1MDEsMTQgJiM0MzsyNTA1LDE5IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJLyogVW5leHBlY3RlZCBQTUQtbWFwcGVkIFRIUD8gKi8KIAkJVk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pOwogCi0JCS8qCi0JCSAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdAotCQkgKiBhY3R1YWxseSBtYXAgcGFnZXMuCi0JCSAqLwotCQlwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7CiYjNDM7CQlhZGRyZXNzID0gcHZtdy5hZGRyZXNzOwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKJiM0MzsJCQlwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTsKJiM0MzsJCX0KIAkJaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkgewogCQkJcGZuID0gcHRlX3BmbihwdGV2YWwpOwogCQl9IGVsc2UgewomIzQzOwkJCS8qCiYjNDM7CQkJICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLAomIzQzOwkJCSAqIHRoYXQgYWN0dWFsbHkgbWFwIHBhZ2VzLgomIzQzOwkJCSAqLwogCQkJY29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCk7CiAKIAkJCXBmbiA9IHNvZnRsZWFmX3RvX3BmbihlbnRyeSk7CkBAIC0yNTE2LDcgJiM0MzsyNTI1LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl9CiAKIAkJc3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpOwotCQlhZGRyZXNzID0gcHZtdy5hZGRyZXNzOwogCQlhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOwogCQkJCSBQYWdlQW5vbkV4Y2x1c2l2ZShzdWJwYWdlKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTc1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIEh1Z2V0bGIgUGFnZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIGBwdGVwX2dldGAgd2l0aCBodWdldGxiIHBhZ2VzLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHJldm9sdmVzIGFyb3VuZCBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiwgYGh1Z2VfcHRlcF9nZXRgLCBhbmQgdGhlbiBzdHJhdGVnaWNhbGx5IHJlcGxhY2luZyBjYWxscyB0byBgcHRlcF9nZXRgIHdpdGggaXQgaW4gYSBmZXcga2V5IGFyZWFzIG9mIHRoZSBrZXJuZWwuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBtbS9taWdyYXRlLmNgIChzcGVjaWZpY2FsbHkgYHJlbW92ZV9taWdyYXRpb25fcHRlYCksIGBtbS9tcHJvdGVjdC5jYCAoYHByb3Rfbm9uZV9odWdldGxiX2VudHJ5YCksIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AgKGBjaGVja19wdGVgKSwgYW5kIGBtbS9ybWFwLmNgIChgdHJ5X3RvX3VubWFwX29uZWAgYW5kIGB0cnlfdG9fbWlncmF0ZV9vbmVgKS4gVGhvc2UgYXJlIGRlZmluaXRlbHkgY3JpdGljYWwgcGFydHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQuCgpUaGUgY29kZSBhbHNvIG1vZGlmaWVzIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLiBUaGF0JiMzOTtzIGEgYml0IG1vcmUgdGFyZ2V0ZWQsIGJ1dCBzdGlsbCBpbmRpY2F0ZXMgYSBjaGFuZ2UgdG8gY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoYXQgYFBUUl9BTElHTl9ET1dOYCBjaGFuZ2UuIEl0JiMzOTtzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgYWx0ZXJhdGlvbiB0byBob3cgUFRFcyBhcmUgYWNjZXNzZWQgZm9yIGh1Z2V0bGIgcGFnZXMgb24gYXJtNjQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB2ZXJ5IGNsb3NlbHkgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFsaWdubWVudC4KCkdpdmVuIHRoZXNlIGNoYW5nZXMsIHRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCBkZW1hbmRzIGZ1enppbmcuIEFueSBtb2RpZmljYXRpb24gdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGVzcGVjaWFsbHkgaHVnZXRsYiwgbWlncmF0aW9uLCBybWFwLCBhbmQgbXByb3RlY3QsIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IENPTkZJRyBvcHRpb25zIHRvIGVuc3VyZSBwcm9wZXIgZnV6emluZyBjb3ZlcmFnZS4gSSBrbm93IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhIGdpdmVuOyB3ZSBuZWVkIHRoYXQgZW5hYmxlZCB0byBldmVuIGJlIHJlbGV2YW50LiBHaXZlbiB0aGUgZmlsZXMgdG91Y2hlZCwgYENPTkZJR19NSUdSQVRJT05gIGlzIGxvb2tpbmcgbGlrZSBhIHN0cm9uZyBjYW5kaWRhdGUsIHBhcnRpY3VsYXJseSBiZWNhdXNlIG9mIHRoZSBgbW0vbWlncmF0ZS5jYCBhbmQgYHRyeV90b19taWdyYXRlX29uZWAgcmVmZXJlbmNlcy4gV2UmIzM5O2xsIGhhdmUgdG8ga2VlcCB0aGF0IGluIG1pbmQuIEFuZCBvZiBjb3Vyc2UsIHRoZSBgYXJjaC9hcm02NGAgY2hhbmdlIHJlcXVpcmVzIGBDT05GSUdfQVJNNjRgLCB0aG91Z2ggSSYjMzk7bGwgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdlIGNhbiYjMzk7dCBleHByZXNzIGFyY2ggY29uZmlnIG9wdGlvbnMgaW4gYEVuYWJsZUNvbmZpZ3NgLiBXZSBjYW4ganVzdCBtYWtlIHN1cmUgYEhVR0VUTEJfUEFHRWAgaXMgZW5hYmxlZC4KCkkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaHVnZV9wdGVwX2dldGAgKmlzKiBkb2luZywgc28gSSYjMzk7bGwgZ28gY2hlY2sgaXRzIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYW5kIHRoZW4gdHJhY2sgZG93biB3aGVyZSBpdCYjMzk7cyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfcHRlcF9nZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3Q9MjAzPUh1Z2VUTEIgUGFnZSBUYWJsZSBIZWxwZXJzXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3QtMjIwLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7XG5Eb2N1bWVudGF0aW9uL21tL2FyY2hfcGd0YWJsZV9oZWxwZXJzLnJzdDoyMjE6fCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhciAgIHwgQ2xlYXJzIGEgSHVnZVRMQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0LTIyMi0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzO1xuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL2h1Z2V0bGItM2xldmVsLmgtMTUtICogSWYgb3VyIGh1Z2UgcHRlIGlzIG5vbi16ZXJvIHRoZW4gbWFyayB0aGUgdmFsaWQgYml0LlxuYXJjaC9hcm0vaW5jbHVkZS9hc20vaHVnZXRsYi0zbGV2ZWwuaDoxNjogKiBUaGlzIGFsbG93cyBwdGVfcHJlc2VudChodWdlX3B0ZXBfZ2V0KG1tLGFkZHIscHRlcCkpIHRvIHJldHVybiB0cnVlIGZvciBub24temVyb1xuYXJjaC9hcm0vaW5jbHVkZS9hc20vaHVnZXRsYi0zbGV2ZWwuaC0xNy0gKiBwdGVzLlxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL2h1Z2V0bGItM2xldmVsLmgtMjAtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9odWdldGxiLTNsZXZlbC5oOjIxOnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL2h1Z2V0bGItM2xldmVsLmgtMjIte1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTQxPWV4dGVybiBpbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDQtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmg6NDU6ZXh0ZXJuIHB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00Ni1cdFx0XHRcdCAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTU0PWV4dGVybiB2b2lkIGh1Z2VfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNTYtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo1NzpleHRlcm4gcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC01OC1cbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9OTc9c3RhdGljIGlubGluZSBpbnQgbnVtX2NvbnRpZ19wdGVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc2l6ZV90ICpwZ3NpemUpXG4tLVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTExOC1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzoxMTk6cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0xMjAte1xuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz0zNjk9dm9pZCBodWdlX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zODAtXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6MzgxOnB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMzgyLVx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIHN6KVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz01MTc9cHRlX3QgaHVnZV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy01MjktXHR9XG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6NTMwOlx0cmV0dXJuIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgcHNpemUpO1xuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTUzMS19XG4tLVxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTE0PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0yMy0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9odWdldGxiLmg6MjQ6c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0yNS1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4tLVxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTM3PXN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00Mi1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo0MzpcdHB0ZSA9IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgc3opO1xuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ0LVx0Zmx1c2hfdGxiX3BhZ2Uodm1hLCBhZGRyKTtcbi0tXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTE0LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVF9BTkRfQ0xFQVJcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmg6MTU6c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMTYtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmg9Mjg9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0zOC1cdCAqL1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDozOTpcdHB0ZSA9IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgc3opO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00MC1cdGZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcik7XG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTg9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMTEtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjEyOnB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMTMtXHRcdFx0ICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opO1xuLS1cbmFyY2gvcGFyaXNjL21tL2h1Z2V0bGJwYWdlLmM9MTIxPXZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9wYXJpc2MvbW0vaHVnZXRsYnBhZ2UuYy0xMjctXG5hcmNoL3BhcmlzYy9tbS9odWdldGxicGFnZS5jOjEyODpwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuYXJjaC9wYXJpc2MvbW0vaHVnZXRsYnBhZ2UuYy0xMjktXHRcdFx0ICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD00Mz12b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ2LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVF9BTkRfQ0xFQVJcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6NDc6c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDgtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9NTU9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02MC1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6NjE6XHRwdGUgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcih2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHN6KTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtNjItXHRmbHVzaF9odWdldGxiX3BhZ2Uodm1hLCBhZGRyKTtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4Lmg9MTk9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oLTIyLSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oOjIzOnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaC0yNC17XG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg9MjU9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjktI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg6MzA6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0zMS1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTQzPWludCBodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjQ4OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDktXG4tLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTUtI2lmZGVmIENPTkZJR19SSVNDVl9JU0FfU1ZOQVBPVFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjY6cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy03LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9Mjc0PWludCBodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtMzA0LVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjMwNTpwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy0zMDYtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg9MjM9dm9pZCBfX3NldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjYtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjI3OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0yOC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg6Mjk6cHRlX3QgX19odWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0zMC1cdFx0XHRcdHB0ZV90ICpwdGVwKTtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTMyLSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVF9BTkRfQ0xFQVJcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg6MzM6c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzQtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzYte1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDozNzpcdHJldHVybiBfX2h1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzgtfVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg9NTE9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC01My17XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjU0Olx0cmV0dXJuIF9faHVnZV9wdGVwX2dldF9hbmRfY2xlYXIodm1hLVx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdGVwKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNTUtfVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg9NTg9c3RhdGljIGlubGluZSBpbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02MS17XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjYyOlx0aW50IGNoYW5nZWQgPSAhcHRlX3NhbWUoaHVnZV9wdGVwX2dldCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXApLCBwdGUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02My1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNjQtXHRpZiAoY2hhbmdlZCkge1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo2NTpcdFx0X19odWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcih2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXApO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02Ni1cdFx0X19zZXRfaHVnZV9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBwdGUpO1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg9NzI9c3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNzQte1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo3NTpcdHB0ZV90IHB0ZSA9IF9faHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZXApO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC03Ni1cbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0xNTY9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0xNjEtXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYzoxNjI6cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTE2My17XG4tLVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMTY2LVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM6MTY3OnB0ZV90IF9faHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0xNjgtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMTY5LXtcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjE3MDpcdHB0ZV90IHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZXApO1xuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMTcxLVx0cG1kX3QgKnBtZHAgPSAocG1kX3QgKikgcHRlcDtcbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD0xOD12b2lkIF9fc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjEtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6MjI6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTIzLVx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIHN6KTtcbi0tXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmM9Mjc2PXZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jLTI4MS1cbmFyY2gvc3BhcmMvbW0vaHVnZXRsYnBhZ2UuYzoyODI6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmFyY2gvc3BhcmMvbW0vaHVnZXRsYnBhZ2UuYy0yODMtXHRcdFx0ICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MzI3PXN0YXRpYyBib29sIGh1Z2V0bGJfdm1hX21hcHNfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTMzNS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjMzNjpcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTMzNy1cdGlmIChodWdlX3B0ZV9ub25lKHB0ZSkgfHwgIXB0ZV9wcmVzZW50KHB0ZSkpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTEyNjM9c3RhdGljIGludCBzbWFwc19odWdldGxiX3JhbmdlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTEyNzQtXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGhzdGF0ZV92bWEodm1hKSwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbmZzL3Byb2MvdGFza19tbXUuYzoxMjc1Olx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI3Ni1cdGlmIChwdGVfcHJlc2VudChwdGVudCkpIHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjIwOT1zdGF0aWMgaW50IHBhZ2VtYXBfaHVnZXRsYl9yYW5nZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBobWFzayxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjIyMy1cdHB0bCA9IGh1Z2VfcHRlX2xvY2soaHN0YXRlX3ZtYSh2bWEpLCB3YWxrLVx1MDAzZW1tLCBwdGVwKTtcbmZzL3Byb2MvdGFza19tbXUuYzoyMjI0Olx0cHRlID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGVwKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMjI1LVx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjkyMz1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTM2LVxuZnMvcHJvYy90YXNrX21tdS5jOjI5Mzc6XHRcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgc3RhcnQsIHB0ZXApO1xuZnMvcHJvYy90YXNrX21tdS5jLTI5MzgtXHRcdGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfCBwYWdlbWFwX2h1Z2V0bGJfY2F0ZWdvcnkocHRlKTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk0OC1cbmZzL3Byb2MvdGFza19tbXUuYzoyOTQ5Olx0cHRlID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBzdGFydCwgcHRlcCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk1MC1cdGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfCBwYWdlbWFwX2h1Z2V0bGJfY2F0ZWdvcnkocHRlKTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9Mjk5Nj1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMwMTItXHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgbW0sIHB0ZXApO1xuZnMvcHJvYy90YXNrX21tdS5jOjMwMTM6XHRcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZXApO1xuZnMvcHJvYy90YXNrX21tdS5jLTMwMTQtXHRcdG1ha2VfdWZmZF93cF9odWdlX3B0ZSh2bWEsIGFkZHIsIHB0ZXAsIHB0ZSk7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTM0MDU9c3RhdGljIGludCBnYXRoZXJfaHVnZXRsYl9zdGF0cyhwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zNDEzLVx0cHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKSwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbmZzL3Byb2MvdGFza19tbXUuYzozNDE0Olx0aHVnZV9wdGUgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMzQxNS1cdGlmICghcHRlX3ByZXNlbnQoaHVnZV9wdGUpKVxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oPTcwPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC03Ny0jaWZuZGVmIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaDo3ODpzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtNzktXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmg9MTA5PXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oLTExNy0jaWZuZGVmIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oOjExODpzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC0xMTkte1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEwNDc9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTA1MS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEwNTI6XHRyZXR1cm4gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBwc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMDUzLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMjYwPXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NvdW50X3N1Yihsb25nIGwsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyNjMtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMjY0OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTI2NS1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTI5NT1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjk4LVx0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XG5tbS9kYW1vbi92YWRkci5jOjI5OTpcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMzAwLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4tLVxubW0vZGFtb24vdmFkZHIuYz0zMjI9c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vZGFtb24vdmFkZHIuYy0zMzAtXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXHUwMDNlbW0sIHB0ZSk7XG5tbS9kYW1vbi92YWRkci5jOjMzMTpcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xubW0vZGFtb24vdmFkZHIuYy0zMzItXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbi0tXG5tbS9kYW1vbi92YWRkci5jPTQzOT1zdGF0aWMgaW50IGRhbW9uX3lvdW5nX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQ0OS1cdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbm1tL2RhbW9uL3ZhZGRyLmM6NDUwOlx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG5tbS9kYW1vbi92YWRkci5jLTQ1MS1cdGlmICghcHRlX3ByZXNlbnQoZW50cnkpKVxuLS1cbm1tL2htbS5jPTU0Mz1zdGF0aWMgaW50IGhtbV92bWFfd2Fsa19odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vaG1tLmMtNTU3LVx0cHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHZtYSksIHdhbGstXHUwMDNlbW0sIHB0ZSk7XG5tbS9obW0uYzo1NTg6XHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbm1tL2htbS5jLTU1OS1cbi0tXG5tbS9odWdldGxiLmM9NDgyMT1zdGF0aWMgdm9pZCBzZXRfaHVnZV9wdGVwX3dyaXRhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy00ODI1LVxubW0vaHVnZXRsYi5jOjQ4MjY6XHRlbnRyeSA9IGh1Z2VfcHRlX21rd3JpdGUoaHVnZV9wdGVfbWtkaXJ0eShodWdlX3B0ZXBfZ2V0KHZtYS1cdTAwM2V2bV9tbSwgYWRkcmVzcywgcHRlcCkpKTtcbm1tL2h1Z2V0bGIuYy00ODI3LVx0aWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlcCwgZW50cnksIDEpKVxuLS1cbm1tL2h1Z2V0bGIuYz00ODUzPWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9odWdldGxiLmMtNDkxMC1cdFx0c3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG5tbS9odWdldGxiLmM6NDkxMTpcdFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHNyY192bWEtXHUwMDNldm1fbW0sIGFkZHIsIHNyY19wdGUpO1xubW0vaHVnZXRsYi5jLTQ5MTItYWdhaW46XG4tLVxubW0vaHVnZXRsYi5jLTQ5NDctXHRcdH0gZWxzZSB7XG5tbS9odWdldGxiLmM6NDk0ODpcdFx0XHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQoc3JjX3ZtYS1cdTAwM2V2bV9tbSwgYWRkciwgc3JjX3B0ZSk7XG5tbS9odWdldGxiLmMtNDk0OS1cdFx0XHRwdGVfZm9saW8gPSBwYWdlX2ZvbGlvKHB0ZV9wYWdlKGVudHJ5KSk7XG4tLVxubW0vaHVnZXRsYi5jLTQ5ODktXHRcdFx0XHRzcGluX2xvY2tfbmVzdGVkKHNyY19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbm1tL2h1Z2V0bGIuYzo0OTkwOlx0XHRcdFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHNyY192bWEtXHUwMDNldm1fbW0sIGFkZHIsIHNyY19wdGUpO1xubW0vaHVnZXRsYi5jLTQ5OTEtXHRcdFx0XHRpZiAoIXB0ZV9zYW1lKHNyY19wdGVfb2xkLCBlbnRyeSkpIHtcbi0tXG5tbS9odWdldGxiLmM9NTAzNz1zdGF0aWMgdm9pZCBtb3ZlX2h1Z2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIG9sZF9hZGRyLFxuLS1cbm1tL2h1Z2V0bGIuYy01MDU2LVxubW0vaHVnZXRsYi5jOjUwNTc6XHRwdGUgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgb2xkX2FkZHIsIHNyY19wdGUsIHN6KTtcbm1tL2h1Z2V0bGIuYy01MDU4LVxuLS1cbm1tL2h1Z2V0bGIuYz01MDc2PWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUxMTItXHRcdH1cbm1tL2h1Z2V0bGIuYzo1MTEzOlx0XHRpZiAoaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KG1tLCBvbGRfYWRkciwgc3JjX3B0ZSkpKVxubW0vaHVnZXRsYi5jLTUxMTQtXHRcdFx0Y29udGludWU7XG4tLVxubW0vaHVnZXRsYi5jPTUxNDE9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01MTgyLVxubW0vaHVnZXRsYi5jOjUxODM6XHRcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB0ZXApO1xubW0vaHVnZXRsYi5jLTUxODQtXHRcdGlmIChodWdlX3B0ZV9ub25lKHB0ZSkpIHtcbi0tXG5tbS9odWdldGxiLmMtNTIzMC1cbm1tL2h1Z2V0bGIuYzo1MjMxOlx0XHRwdGUgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkcmVzcywgcHRlcCwgc3opO1xubW0vaHVnZXRsYi5jLTUyMzItXHRcdHRsYl9yZW1vdmVfaHVnZV90bGJfZW50cnkoaCwgdGxiLCBwdGVwLCBhZGRyZXNzKTtcbi0tXG5tbS9odWdldGxiLmM9NTQxOT1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2V0bGIuYy01NDIzLVx0Y29uc3QgYm9vbCB1bnNoYXJlID0gdm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VOU0hBUkU7XG5tbS9odWdldGxiLmM6NTQyNDpcdHB0ZV90IHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIHZtZi1cdTAwM2VhZGRyZXNzLCB2bWYtXHUwMDNlcHRlKTtcbm1tL2h1Z2V0bGIuYy01NDI1LVx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbi0tXG5tbS9odWdldGxiLmMtNTUzOC1cdFx0XHRpZiAobGlrZWx5KHZtZi1cdTAwM2VwdGUgXHUwMDI2XHUwMDI2XG5tbS9odWdldGxiLmM6NTUzOTpcdFx0XHRcdCAgIHB0ZV9zYW1lKGh1Z2VfcHRlcF9nZXQobW0sIHZtZi1cdTAwM2VhZGRyZXNzLCB2bWYtXHUwMDNlcHRlKSwgcHRlKSkpXG5tbS9odWdldGxiLmMtNTU0MC1cdFx0XHRcdGdvdG8gcmV0cnlfYXZvaWRjb3B5O1xuLS1cbm1tL2h1Z2V0bGIuYy01NTc2LVx0dm1mLVx1MDAzZXB0ZSA9IGh1Z2V0bGJfd2Fsayh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBodWdlX3BhZ2Vfc2l6ZShoKSk7XG5tbS9odWdldGxiLmM6NTU3NzpcdGlmIChsaWtlbHkodm1mLVx1MDAzZXB0ZSBcdTAwMjZcdTAwMjYgcHRlX3NhbWUoaHVnZV9wdGVwX2dldChtbSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VwdGUpLCBwdGUpKSkge1xubW0vaHVnZXRsYi5jLTU1NzgtXHRcdHB0ZV90IG5ld3B0ZSA9IG1ha2VfaHVnZV9wdGUodm1hLCBuZXdfZm9saW8sICF1bnNoYXJlKTtcbi0tXG5tbS9odWdldGxiLmM9NTY3OD1zdGF0aWMgYm9vbCBodWdldGxiX3B0ZV9zdGFibGUoc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9odWdldGxiLmMtNTY4NC1cdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgbW0sIHB0ZXApO1xubW0vaHVnZXRsYi5jOjU2ODU6XHRzYW1lID0gcHRlX3NhbWUoaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlcCksIG9sZF9wdGUpO1xubW0vaHVnZXRsYi5jLTU2ODYtXHRzcGluX3VubG9jayhwdGwpO1xuLS1cbm1tL2h1Z2V0bGIuYz01NjkxPXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTg0OS1cdC8qIElmIHB0ZSBjaGFuZ2VkIGZyb20gdW5kZXIgdXMsIHJldHJ5ICovXG5tbS9odWdldGxiLmM6NTg1MDpcdGlmICghcHRlX3NhbWUoaHVnZV9wdGVwX2dldChtbSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VwdGUpLCB2bWYtXHUwMDNlb3JpZ19wdGUpKVxubW0vaHVnZXRsYi5jLTU4NTEtXHRcdGdvdG8gYmFja291dDtcbi0tXG5tbS9odWdldGxiLmM9NTk0MT12bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01OTg2LVxubW0vaHVnZXRsYi5jOjU5ODc6XHR2bWYub3JpZ19wdGUgPSBodWdlX3B0ZXBfZ2V0KG1tLCB2bWYuYWRkcmVzcywgdm1mLnB0ZSk7XG5tbS9odWdldGxiLmMtNTk4OC1cdGlmIChodWdlX3B0ZV9ub25lKHZtZi5vcmlnX3B0ZSkpXG4tLVxubW0vaHVnZXRsYi5jLTYwNTYtXHQvKiBDaGVjayBmb3IgYSByYWNpbmcgdXBkYXRlIGJlZm9yZSBjYWxsaW5nIGh1Z2V0bGJfd3AoKSAqL1xubW0vaHVnZXRsYi5jOjYwNTc6XHRpZiAodW5saWtlbHkoIXB0ZV9zYW1lKHZtZi5vcmlnX3B0ZSwgaHVnZV9wdGVwX2dldChtbSwgdm1mLmFkZHJlc3MsIHZtZi5wdGUpKSkpXG5tbS9odWdldGxiLmMtNjA1OC1cdFx0Z290byBvdXRfcHRsO1xuLS1cbm1tL2h1Z2V0bGIuYy02MDYwLVx0LyogSGFuZGxlIHVzZXJmYXVsdC13cCBmaXJzdCwgYmVmb3JlIHRyeWluZyB0byBsb2NrIG1vcmUgcGFnZXMgKi9cbm1tL2h1Z2V0bGIuYzo2MDYxOlx0aWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkgXHUwMDI2XHUwMDI2IGh1Z2VfcHRlX3VmZmRfd3AoaHVnZV9wdGVwX2dldChtbSwgdm1mLmFkZHJlc3MsIHZtZi5wdGUpKSBcdTAwMjZcdTAwMjZcbm1tL2h1Z2V0bGIuYy02MDYyLVx0ICAgIChmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSkgXHUwMDI2XHUwMDI2ICFodWdlX3B0ZV93cml0ZSh2bWYub3JpZ19wdGUpKSB7XG4tLVxubW0vaHVnZXRsYi5jPTYxNjM9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbi0tXG5tbS9odWdldGxiLmMtNjE4OC1cdFx0LyogRG9uJiMzOTt0IG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgUFRFcyAoZXZlbiBtYXJrZXJzKSAqL1xubW0vaHVnZXRsYi5jOjYxODk6XHRcdGlmICghaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUpKSkge1xubW0vaHVnZXRsYi5jLTYxOTAtXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi0tXG5tbS9odWdldGxiLmMtNjMyNS1cbm1tL2h1Z2V0bGIuYzo2MzI2Olx0ZHN0X3B0ZXAgPSBodWdlX3B0ZXBfZ2V0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUpO1xubW0vaHVnZXRsYi5jLTYzMjctXHQvKlxuLS1cbm1tL2h1Z2V0bGIuYz02Mzg0PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjQ0OS1cdFx0fVxubW0vaHVnZXRsYi5jOjY0NTA6XHRcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB0ZXApO1xubW0vaHVnZXRsYi5jLTY0NTEtXHRcdGlmIChodWdlX3B0ZV9ub25lKHB0ZSkpIHtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTc2Mz1zdGF0aWMgaW50IGh3cG9pc29uX2h1Z2V0bGJfcmFuZ2UocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy03NzMtXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXHUwMDNlbW0sIHB0ZXApO1xubW0vbWVtb3J5LWZhaWx1cmUuYzo3NzQ6XHRwdGUgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZXApO1xubW0vbWVtb3J5LWZhaWx1cmUuYy03NzUtXHRyZXQgPSBjaGVja19od3BvaXNvbmVkX2VudHJ5KHB0ZSwgYWRkciwgaHVnZV9wYWdlX3NoaWZ0KGgpLFxuLS1cbm1tL21lbXBvbGljeS5jPTc3MT1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtNzgyLVx0cHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKSwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbm1tL21lbXBvbGljeS5jOjc4MzpcdHB0ZXAgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG5tbS9tZW1wb2xpY3kuYy03ODQtXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZXApKSB7XG4tLVxubW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0zNzQtXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxubW0vbWlncmF0ZS5jOjM3NTpcdFx0XHRvbGRfcHRlID0gaHVnZV9wdGVwX2dldCh2bWEtXHUwMDNldm1fbW0sIHB2bXcuYWRkcmVzcyxcbm1tL21pZ3JhdGUuYy0zNzYtXHRcdFx0XHRcdFx0cHZtdy5wdGUpO1xuLS1cbm1tL21pZ3JhdGUuYz01MjA9dm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdF9odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuLS1cbm1tL21pZ3JhdGUuYy01MjctXHRzcGluX2xvY2socHRsKTtcbm1tL21pZ3JhdGUuYzo1Mjg6XHRwdGUgPSBodWdlX3B0ZXBfZ2V0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCk7XG5tbS9taWdyYXRlLmMtNTI5LVxuLS1cbm1tL21pbmNvcmUuYz0yNj1zdGF0aWMgaW50IG1pbmNvcmVfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWluY29yZS5jLTQyLVx0fSBlbHNlIHtcbm1tL21pbmNvcmUuYzo0MzpcdFx0Y29uc3QgcHRlX3QgcHRlcCA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbm1tL21pbmNvcmUuYy00NC1cbi0tXG5tbS9tcHJvdGVjdC5jPTcwMz1zdGF0aWMgaW50IHByb3Rfbm9uZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbXByb3RlY3QuYy03MDYte1xubW0vbXByb3RlY3QuYzo3MDc6XHRjb25zdCBwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbm1tL21wcm90ZWN0LmMtNzA4LVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMTItXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHB2bXctXHUwMDNldm1hKSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjExMzpcdFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctXHUwMDNldm1hLVx1MDAzZXZtX21tLCBwdm13LVx1MDAzZWFkZHJlc3MsXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMTQtXHRcdFx0XHQgICAgICBwdm13LVx1MDAzZXB0ZSk7XG4tLVxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjA5OS1cdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbm1tL3JtYXAuYzoyMTAwOlx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbm1tL3JtYXAuYy0yMTAxLVx0XHR9IGVsc2Uge1xuLS1cbm1tL3JtYXAuYz0yNDE5PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjUwOS1cdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbm1tL3JtYXAuYzoyNTEwOlx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbm1tL3JtYXAuYy0yNTExLVx0XHR9IGVsc2Uge1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9Nzc3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3NpemVfdCBtZmlsbF9hdG9taWNfaHVnZXRsYihcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTg3NS1cdFx0aWYgKCF1ZmZkX2ZsYWdzX21vZGVfaXMoZmxhZ3MsIE1GSUxMX0FUT01JQ19DT05USU5VRSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6ODc2Olx0XHRcdGNvbnN0IHB0ZV90IHB0ZXAgPSBodWdlX3B0ZXBfZ2V0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUpO1xubW0vdXNlcmZhdWx0ZmQuYy04NzctXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0yNTE5PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9odWdlX211c3Rfd2FpdChzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yNTMxLVxubW0vdXNlcmZhdWx0ZmQuYzoyNTMyOlx0cHRlID0gaHVnZV9wdGVwX2dldCh2bWEtXHUwMDNldm1fbW0sIHZtZi1cdTAwM2VhZGRyZXNzLCBwdGVwKTtcbm1tL3VzZXJmYXVsdGZkLmMtMjUzMy1cbi0tXG5tbS92bWFsbG9jLmM9MzY2PXN0YXRpYyB2b2lkIHZ1bm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMzgzLVx0XHRcdH1cbm1tL3ZtYWxsb2MuYzozODQ6XHRcdFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHNpemUpO1xubW0vdm1hbGxvYy5jLTM4NS1cdFx0XHRpZiAoV0FSTl9PTihlbmQgLSBhZGRyIFx1MDAzYyBzaXplKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIwNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBIdWdlVExCIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBmb2N1c2VkIG9uIEh1Z2VUTEIgcGFnZXMsIHNwZWNpZmljYWxseSBmb3IgYXJtNjQuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLCBhbmQgdGhhdCB0aGUga2V5IGFkZGl0aW9uIHNlZW1zIHRvIGJlIHRoaXMgbmV3IGZ1bmN0aW9uLCBgaHVnZV9wdGVwX2dldGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgbm90aWNpbmcgdGhhdCBpdCYjMzk7cyBkZWNsYXJlZCBpbiBib3RoIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgYW5kIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaGAuIEhhbmcgb24sIGxldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCB0aGUgcGF0Y2ggaXRzZWxmICphZGRzKiB0aGUgZGVjbGFyYXRpb24gdG8gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYDoKCmBgYGMKJiM0MztwdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKYGBgCgpXYWl0LCB0aGUgYGdyZXBgIHJlc3VsdHMgc2hvdyB0aGF0IGBodWdlX3B0ZXBfZ2V0YCBpcyBkZWZpbmVkIGluIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgIGFuZCBpbiBvdGhlciBhcmNoaXRlY3R1cmVzLiBJbnRlcmVzdGluZy4gSXQmIzM5O3Mgbm90IGp1c3QgYW4gYXJtNjQgdGhpbmcsIHRoZW4uIFRoaXMgaXMgbWVhbnQgdG8gYmUgYSBnZW5lcmFsIG1lY2hhbmlzbS4KCk5vdywgSSYjMzk7bSBzZWVpbmcgYSB3aG9sZSBidW5jaCBvZiBvdGhlciBmaWxlcyBiZWluZyBtb2RpZmllZDogYG1tL21pZ3JhdGUuY2AsIGBtbS9tcHJvdGVjdC5jYCwgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgYW5kIGBtbS9ybWFwLmNgLiBUaGV5JiMzOTtyZSBhbGwgdXNpbmcgdGhpcyBuZXcgYGh1Z2VfcHRlcF9nZXRgIGZ1bmN0aW9uLiBUaGF0IGdpdmVzIGEgYnJvYWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZC4KCk9rYXksIGJhY2sgdG8gYGFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY2AuIEkgc2VlIHRoaXMgY2hhbmdlIGluIGBmaW5kX251bV9jb250aWdgOgoKYGBgYwotCWlmICgocHRlX3QgKilwbWRwID09IHB0ZXApIHsKJiM0MzsJaWYgKChwdGVfdCAqKVBUUl9BTElHTl9ET1dOKHBtZHAsIHNpemVvZigqcG1kcCkgKiBDT05UX1BNRFMpID09IHB0ZXApIHsKYGBgCgpUaGF0JiMzOTtzIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNoYW5nZS4gSXQgbG9va3MgbGlrZSBhbiBhbGlnbm1lbnQgY2hlY2sgaGFzIGJlZW4gYWRkZWQsIHVzaW5nIGBQVFJfQUxJR05fRE9XTmAgdG8gZW5zdXJlIHRoZSBjb21wYXJpc29uIGlzIGNvcnJlY3QgZ2l2ZW4gaG93IHBhZ2UgdGFibGVzIGFyZSBzdHJ1Y3R1cmVkLgoKQWxyaWdodCwgbGV0JiMzOTtzIG5vdyBjaGVjayBgbW0vbXByb3RlY3QuY2AgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBwcm90X25vbmVfaHVnZXRsYl9lbnRyeWAuIEFoLCB5ZXMsIHRoZXJlIGl0IGlzLCBpdCYjMzk7cyBpbnNpZGUgYW4gYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBibG9jay4gU28gdGhhdCBjb25maXJtcyB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4KCk5vdywgYSBxdWljayB0aG91Z2h0IGFib3V0IGBtbS9taWdyYXRlLmNgIOKAkyBpcyBgQ09ORklHX01JR1JBVElPTmAgYSBoYXJkIGRlcGVuZGVuY3k/IEl0JiMzOTtzIGVzc2VudGlhbCB0aGF0IEkgY2hlY2suIExldCBtZSB2ZXJpZnkuLi4gWWVzLCBsZXQmIzM5O3MgbG9vayBhdCBgbW0vbWlncmF0ZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZW1vdmVfbWlncmF0aW9uX3B0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JtYXAuaD05MzQ9aW50IHBmbl9ta2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBwZ29mZl90IHBnb2ZmLFxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTkzNi1cbmluY2x1ZGUvbGludXgvcm1hcC5oOjkzNzp2b2lkIHJlbW92ZV9taWdyYXRpb25fcHRlcyhzdHJ1Y3QgZm9saW8gKnNyYywgc3RydWN0IGZvbGlvICpkc3QsXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MzgtXHRcdGVudW0gdHR1X2ZsYWdzIGZsYWdzKTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmg9MTM0PURFRklORV9FVkVOVChtaWdyYXRpb25fcHRlLCBzZXRfbWlncmF0aW9uX3B0ZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtMTM4LVxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjEzOTpERUZJTkVfRVZFTlQobWlncmF0aW9uX3B0ZSwgcmVtb3ZlX21pZ3JhdGlvbl9wdGUsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtMTQwLVx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHB0ZSwgaW50IG9yZGVyKSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM0NzQ9c3RhdGljIHZvaWQgcmVtYXBfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIG5yLCBpbnQgZmxhZ3MpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNDgxLVx0Zm9yICg7Oykge1xubW0vaHVnZV9tZW1vcnkuYzozNDgyOlx0XHRyZW1vdmVfbWlncmF0aW9uX3B0ZXMoZm9saW8sIGZvbGlvLCBUVFVfUk1BUF9MT0NLRUQgfCBmbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTM0ODMtXHRcdGkgJiM0Mzs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi0tXG5tbS9taWdyYXRlLmM9MzM4PXN0cnVjdCBybWFwX3dhbGtfYXJnIHtcbi0tXG5tbS9taWdyYXRlLmMtMzQ1LSAqL1xubW0vbWlncmF0ZS5jOjM0NjpzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vbWlncmF0ZS5jLTM0Ny1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKVxuLS1cbm1tL21pZ3JhdGUuYy00NDQtXG5tbS9taWdyYXRlLmM6NDQ1Olx0XHR0cmFjZV9yZW1vdmVfbWlncmF0aW9uX3B0ZShwdm13LmFkZHJlc3MsIHB0ZV92YWwocHRlKSxcbm1tL21pZ3JhdGUuYy00NDYtXHRcdFx0XHRcdCAgIGNvbXBvdW5kX29yZGVyKG5ldykpO1xuLS1cbm1tL21pZ3JhdGUuYy00NTgtICovXG5tbS9taWdyYXRlLmM6NDU5OnZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKHN0cnVjdCBmb2xpbyAqc3JjLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbm1tL21pZ3JhdGUuYy00NjAtXHRcdGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL21pZ3JhdGUuYy00NjctXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xubW0vbWlncmF0ZS5jOjQ2ODpcdFx0LnJtYXBfb25lID0gcmVtb3ZlX21pZ3JhdGlvbl9wdGUsXG5tbS9taWdyYXRlLmMtNDY5LVx0XHQuYXJnID0gXHUwMDI2cm1hcF93YWxrX2FyZyxcbi0tXG5tbS9taWdyYXRlLmM9MTE2ND1zdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvX3VuZG9fc3JjKHN0cnVjdCBmb2xpbyAqc3JjLFxuLS1cbm1tL21pZ3JhdGUuYy0xMTcwLVx0aWYgKHBhZ2Vfd2FzX21hcHBlZClcbm1tL21pZ3JhdGUuYzoxMTcxOlx0XHRyZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3JjLCBzcmMsIDApO1xubW0vbWlncmF0ZS5jLTExNzItXHQvKiBEcm9wIGFuIGFub25fdm1hIHJlZmVyZW5jZSBpZiB3ZSB0b29rIG9uZSAqL1xuLS1cbm1tL21pZ3JhdGUuYz0xMzU3PXN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tLVxubW0vbWlncmF0ZS5jLTE0MDAtXHQgKiBXaGVuIHN1Y2Nlc3NmdWwsIHB1c2ggZHN0IHRvIExSVSBpbW1lZGlhdGVseTogc28gdGhhdCBpZiBpdFxubW0vbWlncmF0ZS5jOjE0MDE6XHQgKiB0dXJucyBvdXQgdG8gYmUgYW4gbWxvY2tlZCBwYWdlLCByZW1vdmVfbWlncmF0aW9uX3B0ZXMoKSB3aWxsXG5tbS9taWdyYXRlLmMtMTQwMi1cdCAqIGF1dG9tYXRpY2FsbHkgYnVpbGQgdXAgdGhlIGNvcnJlY3QgZHN0LVx1MDAzZW1sb2NrX2NvdW50IGZvciBpdC5cbi0tXG5tbS9taWdyYXRlLmMtMTQxMi1cdGlmIChvbGRfZm9saW9fc3RhdGUgXHUwMDI2IEZPTElPX1dBU19NQVBQRUQpXG5tbS9taWdyYXRlLmM6MTQxMzpcdFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKHNyYywgZHN0LCAwKTtcbm1tL21pZ3JhdGUuYy0xNDE0LVxuLS1cbm1tL21pZ3JhdGUuYz0xNDczPXN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTE1NDUtXHRpZiAocGFnZV93YXNfbWFwcGVkKVxubW0vbWlncmF0ZS5jOjE1NDY6XHRcdHJlbW92ZV9taWdyYXRpb25fcHRlcyhzcmMsICFyYyA/IGRzdCA6IHNyYywgdHR1KTtcbm1tL21pZ3JhdGUuYy0xNTQ3LVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NTYwPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3VubWFwKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjM1LVx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG5tbS9taWdyYXRlX2RldmljZS5jOjYzNjpcdFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKGZvbGlvLCBmb2xpbywgMCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTYzNy1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNjg9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9maW5hbGl6ZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzMDYtXHRcdFx0Zm9saW9fYWRkX2xydShkc3QpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzA3Olx0XHRyZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3JjLCBkc3QsIDApO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzA4LVx0XHRpZiAoZmF1bHRfZm9saW8gIT0gc3JjKVxuLS1cbm1tL3JtYXAuYz0yOTMwPXN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJtYXBfd2Fsa19hbm9uX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMjkzOC1cdC8qXG5tbS9ybWFwLmM6MjkzOTpcdCAqIE5vdGU6IHJlbW92ZV9taWdyYXRpb25fcHRlcygpIGNhbm5vdCB1c2UgZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKClcbm1tL3JtYXAuYy0yOTQwLVx0ICogYmVjYXVzZSB0aGF0IGRlcGVuZHMgb24gZm9saW9fbWFwcGVkKCk7IGJ1dCBub3QgYWxsIGl0cyB1c2FnZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU2OAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTWlncmF0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IG1lbW9yeSBtaWdyYXRpb24gaXMgaGFuZGxlZCBpbiB0aGUga2VybmVsLiBUaGUgY29kZSBJJiMzOTttIGZvY3VzaW5nIG9uLCBgbW0vbWlncmF0ZS5jYCwgaXMgb25seSBjb21waWxlZCB3aGVuIHRoZSBgQ09ORklHX01JR1JBVElPTmAgb3B0aW9uIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaG93IHRoaXMgZmlsZSBpbnRlZ3JhdGVzIGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQuIFRoZXJlZm9yZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG1tL01ha2VmaWxlYCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBkZXBlbmRlbmN5IGlzIG1hbmFnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmM9NjI3PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG1hX2J1Zl9nZXRmaWxlKHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYy02NzQtICpcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmM6Njc1OiAqICAgIFVwIHRvIHRoaXMgc3RhZ2UgdGhlIGV4cG9ydGVyIGlzIHN0aWxsIGZyZWUgdG8gbWlncmF0ZSBvciByZWFsbG9jYXRlIHRoZVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYy02NzYtICogICAgYmFja2luZyBzdG9yYWdlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlPTcxPUFNREtGRF9GSUxFUyAmIzQzOz0gJChBTURLRkRfUEFUSCkva2ZkX3N2bS5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9NYWtlZmlsZTo3MjpcdFx0JChBTURLRkRfUEFUSCkva2ZkX21pZ3JhdGUub1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvTWFrZWZpbGUtNzMtZW5kaWZcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZT05MD1ndC15ICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTEyMy1cdGd0L2ludGVsX2xyYy5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZToxMjQ6XHRndC9pbnRlbF9taWdyYXRlLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTEyNS1cdGd0L2ludGVsX21vY3MubyBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYz0xNjY9c3RhdGljIGludCBpOTE1X2dlbV9kbWFidWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jLTE3Mi1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYzoxNzM6XHRpZiAoIWk5MTVfZ2VtX29iamVjdF9jYW5fbWlncmF0ZShvYmosIElOVEVMX1JFR0lPTl9TTUVNKSlcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYy0xNzQtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG1hYnVmLmMtMTgwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jOjE4MTpcdFx0ZXJyID0gaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUob2JqLCBcdTAwMjZ3dywgSU5URUxfUkVHSU9OX1NNRU0pO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jLTE4Mi1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmM9NjM0PWJvb2wgaTkxNV9nZW1fb2JqZWN0X2hhc19pb21lbShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYy02NTQtICogVGhpcyBmdW5jdGlvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgYXMgYSBoZWxwZXIgZm9yIGNoZWNraW5nIHRoZVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jOjY1NTogKiBwb3NzaWJpbGl0eSB0byBtaWdyYXRlIG9iamVjdHMgYW5kIG1pZ2h0IGJlIHNsaWdodGx5IGxlc3MgcGVybWlzc2l2ZVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTY1Ni0gKiB0aGFuIGk5MTVfZ2VtX29iamVjdF9taWdyYXRlKCkgd2hlbiBpdCBjb21lcyB0byBvYmplY3RzIHdpdGggdGhlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jPTcyNz1pbnQgaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMtNzMwLXtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYzo3MzE6XHRyZXR1cm4gX19pOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIHd3LCBpZCwgb2JqLVx1MDAzZWZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYy03MzItfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYz03NjE9aW50IF9faTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMtNzc1LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jOjc3NjpcdGlmICghaTkxNV9nZW1fb2JqZWN0X2Nhbl9taWdyYXRlKG9iaiwgaWQpKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTc3Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTc4NC1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYzo3ODU6XHRyZXR1cm4gb2JqLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlKG9iaiwgbXIsIGZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYy03ODYtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYz05MDQ9c3RhdGljIGludCBpOTE1X3R0bV9taWdyYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jLTkwNy17XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmM6OTA4Olx0cmV0dXJuIF9faTkxNV90dG1fbWlncmF0ZShvYmosIG1yLCBmbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMtOTA5LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmM9MTA0Mj1zdGF0aWMgdm1fZmF1bHRfdCB2bV9mYXVsdF90dG0oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jLTEwOTgtXHRcdFx0ZmxhZ3MgXHUwMDI2PSB+STkxNV9CT19BTExPQ19HUFVfT05MWTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYzoxMDk5Olx0XHRcdGVyciA9IF9faTkxNV90dG1fbWlncmF0ZShvYmosIG1yLCBmbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMtMTEwMC1cdFx0XHRpZiAoIWVycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYz00Nj1zdGF0aWMgaW50IGlndF9jcmVhdGVfbWlncmF0ZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBlbnVtIGludGVsX3JlZ2lvbl9pZCBzcmMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtNzItXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYzo3MzpcdFx0ZXJyID0gaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUob2JqLCBcdTAwMjZ3dywgZHN0KTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTc0LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTgwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6ODE6XHRcdGlmIChpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2JqLCBzcmMpKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtODItXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYz0xMDY9c3RhdGljIGludCBpZ3Rfc2FtZV9jcmVhdGVfbWlncmF0ZSh2b2lkICphcmcpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtMTEwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTExOnN0YXRpYyBpbnQgbG1lbV9wYWdlc19taWdyYXRlX29uZShzdHJ1Y3QgaTkxNV9nZW1fd3dfY3R4ICp3dyxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTExMi1cdFx0XHRcdCAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xNDAtXHRpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX2xtZW0ob2JqKSkge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTQxOlx0XHRlcnIgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIHd3LCBJTlRFTF9SRUdJT05fU01FTSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xNDItXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xNTktXHR9IGVsc2Uge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTYwOlx0XHRlcnIgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIHd3LCBJTlRFTF9SRUdJT05fTE1FTV8wKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTE2MS1cdFx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jPTE4Mj1zdGF0aWMgaW50IF9faWd0X2xtZW1fcGFnZXNfbWlncmF0ZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTI0OS1cdFx0Zm9yX2k5MTVfZ2VtX3d3KFx1MDAyNnd3LCBlcnIsIHRydWUpXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYzoyNTA6XHRcdFx0ZXJyID0gbG1lbV9wYWdlc19taWdyYXRlX29uZShcdTAwMjZ3dywgb2JqLCB2bWEsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0yNTEtXHRcdFx0XHRcdFx0ICAgICBib3JrZWRfbWlncmF0ZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9iby5jPTEyNT1pOTE1X2JvX2ZyYW1lYnVmZmVyX2xvb2t1cChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYm8uYy0xMzYtXHQvKiBvYmplY3QgaXMgYmFja2VkIHdpdGggTE1FTSBmb3IgZGlzY3JldGUgKi9cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYm8uYzoxMzc6XHRpZiAoSEFTX0xNRU0oaTkxNSkgXHUwMDI2XHUwMDI2ICFpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2JqLCBJTlRFTF9SRUdJT05fTE1FTV8wKSkge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9iby5jLTEzOC1cdFx0Lyogb2JqZWN0IGlzIFwmIzM0O3JlbW90ZVwmIzM0Oywgbm90IGluIGxvY2FsIG1lbW9yeSAqL1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmM9MTg9aW50ZWxfZmJfcGluX3RvX2RwdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKl9vYmosIHN0cnVjdCBpbnRlbF9kcHQgKmRwdCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZiX3Bpbi5jLTU1LVx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+STkxNV9CT19BTExPQ19HUFVfT05MWTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmM6NTY6XHRcdFx0cmV0ID0gX19pOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIFx1MDAyNnd3LCBJTlRFTF9SRUdJT05fTE1FTV8wLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9mYl9waW4uYy01Ny1cdFx0XHRcdFx0XHRcdGZsYWdzKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZiX3Bpbi5jPTEwNz1pbnRlbF9mYl9waW5fdG9fZ2d0dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKl9vYmosXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9mYl9waW4uYy0xNDctXHRlbHNlIGlmICghcmV0IFx1MDAyNlx1MDAyNiBIQVNfTE1FTShpOTE1KSlcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmM6MTQ4Olx0XHRyZXQgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIFx1MDAyNnd3LCBJTlRFTF9SRUdJT05fTE1FTV8wKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmMtMTQ5LVx0aWYgKCFyZXQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTM1PXhlLXkgJiM0Mzs9IHhlX2JiLm8gXFxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtOTEtXHR4ZV9tZW1fcG9vbC5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6OTI6XHR4ZV9taWdyYXRlLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZS05My1cdHhlX21taW8ubyBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRlLmM9MTI4PXN0YXRpYyB1NjQgeGVfbWlncmF0ZV92cmFtX29mcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTY0IGFkZHIsIGJvb2wgaXNfY29tcF9wdGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYy0xMzEtXHQgKiBSZW1vdmUgdGhlIERQQSB0byBnZXQgYSBjb3JyZWN0IG9mZnNldCBpbnRvIGlkZW50aXR5IHRhYmxlIGZvciB0aGVcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRlLmM6MTMyOlx0ICogbWlncmF0ZSBvZmZzZXRcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRlLmMtMTMzLVx0ICovXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYz00MDc9c3RhdGljIGJvb2wgeGVfbWlncmF0ZV9uZWVkc19jY3NfZW1pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbWlncmF0ZS5jLTQxNy0gKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYzo0MTg6ICogUmV0dXJuOiBcdTAwMjZ4ZV9taWdyYXRlIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYy00MTktICovXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjQ1NT1zdGF0aWMgdm9pZCBvcF9jb21taXQoc3RydWN0IHhlX3ZtICp2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNTMwLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjUzMTpzdGF0aWMgY29uc3Qgc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlX29wcyBtaWdyYXRlX29wcyA9IHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1MzItXHQucG9wdWxhdGUgPSB4ZV92bV9wb3B1bGF0ZV9wZ3RhYmxlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1MzctI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNTM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVfbWlncmF0ZV9wdF91cGRhdGVfb3BzIHN2bV91c2VycHRyX21pZ3JhdGVfb3BzID0ge1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjUzOS1cdC5wb3B1bGF0ZSA9IHhlX3ZtX3BvcHVsYXRlX3BndGFibGUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjU0My0jZWxzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjU0NDpzdGF0aWMgY29uc3Qgc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlX29wcyBzdm1fdXNlcnB0cl9taWdyYXRlX29wcztcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1NDUtI2VuZGlmXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjU2OD14ZV9wdF91cGRhdGVfb3BzX3J1bihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgc3RydWN0IHhlX3ZtYV9vcHMgKnZvcHMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjU4MC1cdFx0Lm9wcyA9IHB0X3VwZGF0ZV9vcHMtXHUwMDNlbmVlZHNfc3ZtX2xvY2sgP1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjU4MTpcdFx0XHRcdTAwMjZzdm1fdXNlcnB0cl9taWdyYXRlX29wcyA6XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNTgyOlx0XHRcdFx1MDAyNm1pZ3JhdGVfb3BzLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjU4My1cdFx0LnZvcHMgPSB2b3BzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90cmFjZV9iby5oPTYxPVRSQUNFX0VWRU5UKHhlX2JvX21vdmUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RyYWNlX2JvLmgtODEtXHRcdCAgICksXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHJhY2VfYm8uaDo4MjpcdCAgICBUUF9wcmludGsoXCYjMzQ7bW92ZV9sYWNrc19zb3VyY2U6JXMsIG1pZ3JhdGUgb2JqZWN0ICVwIFtzaXplICV6dV0gZnJvbSAlcyB0byAlcyBkZXZpY2VfaWQ6JXNcJiMzNDssXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHJhY2VfYm8uaC04My1cdFx0ICAgICAgX19lbnRyeS1cdTAwM2Vtb3ZlX2xhY2tzX3NvdXJjZSA/IFwmIzM0O3llc1wmIzM0OyA6IFwmIzM0O25vXCYjMzQ7LCBfX2VudHJ5LVx1MDAzZWJvLCBfX2VudHJ5LVx1MDAzZXNpemUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYWNsX3RjYW0uYz0xMjQxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmM6MTI0MjptbHhzd19zcF9hY2xfdGNhbV92Y2h1bmtfbWlncmF0ZV9vbmUoc3RydWN0IG1seHN3X3NwICptbHhzd19zcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmMtMTI0My1cdFx0XHRcdCAgICAgc3RydWN0IG1seHN3X3NwX2FjbF90Y2FtX3ZjaHVuayAqdmNodW5rLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmM9MTMyMT1tbHhzd19zcF9hY2xfdGNhbV92Y2h1bmtfbWlncmF0ZV9hbGwoc3RydWN0IG1seHN3X3NwICptbHhzd19zcCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9hY2xfdGNhbS5jLTEzNDEtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20odmNodW5rLCBcdTAwMjZ2cmVnaW9uLVx1MDAzZXZjaHVua19saXN0LCBsaXN0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9hY2xfdGNhbS5jOjEzNDI6XHRcdGVyciA9IG1seHN3X3NwX2FjbF90Y2FtX3ZjaHVua19taWdyYXRlX29uZShtbHhzd19zcCwgdmNodW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYWNsX3RjYW0uYy0xMzQzLVx0XHRcdFx0XHRcdFx0ICAgdnJlZ2lvbi1cdTAwM2VyZWdpb24sXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM9NjEwPXN0YXRpYyB2b2lkIGh2X2lycV9yZXRhcmdldF9pbnRlcnJ1cHQoc3RydWN0IGlycV9kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTcwMC1cdCAqIHJlZmVyIHRvIGNwdV9kaXNhYmxlX2NvbW1vbigpIC1cdTAwM2UgZml4dXBfaXJxcygpIC1cdTAwM2VcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjcwMTpcdCAqIGlycV9taWdyYXRlX2FsbF9vZmZfdGhpc19jcHUoKSAtXHUwMDNlIG1pZ3JhdGVfb25lX2lycSgpLlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtNzAyLVx0ICpcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy03MDUtXHQgKiBoYXZlIGJlZW4gZnJvemVuKS4gTm90ZTogdGhlIGNvcnJlY3QgYWZmaW5pdHkgaW5mbyBpcyBzdGlsbCB1cGRhdGVkXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYzo3MDY6XHQgKiBpbnRvIHRoZSBpcnFkYXRhIGRhdGEgc3RydWN0dXJlIGluIG1pZ3JhdGVfb25lX2lycSgpIC1cdTAwM2VcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTcwNy1cdCAqIGlycV9kb19zZXRfYWZmaW5pdHkoKSwgc28gbGF0ZXIgd2hlbiB0aGUgVk0gcmVzdW1lcyxcbi0tXG5kcml2ZXJzL3BlcmYvYXJtX2NzcG11L2FybV9jc3BtdS5jPTEzMjg9c3RhdGljIGludCBhcm1fY3NwbXVfY3B1X3RlYXJkb3duKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvcGVyZi9hcm1fY3NwbXUvYXJtX2NzcG11LmMtMTMzOC1cbmRyaXZlcnMvcGVyZi9hcm1fY3NwbXUvYXJtX2NzcG11LmM6MTMzOTpcdC8qIENob29zZSBhIG5ldyBDUFUgdG8gbWlncmF0ZSBvd25lcnNoaXAgb2YgdGhlIFBNVSB0byAqL1xuZHJpdmVycy9wZXJmL2FybV9jc3BtdS9hcm1fY3NwbXUuYy0xMzQwLVx0ZHN0ID0gY3B1bWFza19hbnlfYW5kX2J1dChcdTAwMjZjc3BtdS1cdTAwM2Vhc3NvY2lhdGVkX2NwdXMsXG4tLVxuZHJpdmVycy9wZXJmL252aWRpYV90NDEwX2MyY19wbXUuYz03MjY9c3RhdGljIGludCBudl9jMmNfcG11X2NwdV90ZWFyZG93bih1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfYzJjX3BtdS5jLTczNi1cbmRyaXZlcnMvcGVyZi9udmlkaWFfdDQxMF9jMmNfcG11LmM6NzM3Olx0LyogQ2hvb3NlIGEgbmV3IENQVSB0byBtaWdyYXRlIG93bmVyc2hpcCBvZiB0aGUgUE1VIHRvICovXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfYzJjX3BtdS5jLTczOC1cdGRzdCA9IGNwdW1hc2tfYW55X2FuZF9idXQoXHUwMDI2YzJjX3BtdS1cdTAwM2Vhc3NvY2lhdGVkX2NwdXMsXG4tLVxuZHJpdmVycy9wZXJmL252aWRpYV90NDEwX2NtZW1fbGF0ZW5jeV9wbXUuYz01NDk9c3RhdGljIGludCBjbWVtX2xhdF9wbXVfY3B1X3RlYXJkb3duKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvcGVyZi9udmlkaWFfdDQxMF9jbWVtX2xhdGVuY3lfcG11LmMtNTU5LVxuZHJpdmVycy9wZXJmL252aWRpYV90NDEwX2NtZW1fbGF0ZW5jeV9wbXUuYzo1NjA6XHQvKiBDaG9vc2UgYSBuZXcgQ1BVIHRvIG1pZ3JhdGUgb3duZXJzaGlwIG9mIHRoZSBQTVUgdG8gKi9cbmRyaXZlcnMvcGVyZi9udmlkaWFfdDQxMF9jbWVtX2xhdGVuY3lfcG11LmMtNTYxLVx0ZHN0ID0gY3B1bWFza19hbnlfYW5kX2J1dChcdTAwMjZjbWVtX2xhdF9wbXUtXHUwMDNlYXNzb2NpYXRlZF9jcHVzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX1ZJUlRJT19WRklPX1BDSSkgJiM0Mzs9IHZpcnRpby12ZmlvLXBjaS5vXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9NYWtlZmlsZTozOnZpcnRpby12ZmlvLXBjaS15IDo9IG1haW4ubyBtaWdyYXRlLm9cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL01ha2VmaWxlLTQtdmlydGlvLXZmaW8tcGNpLSQoQ09ORklHX1ZJUlRJT19WRklPX1BDSV9BRE1JTl9MRUdBQ1kpICYjNDM7PSBsZWdhY3lfaW8ub1xuLS1cbmZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG5mcy9leHQ0L01ha2VmaWxlLTktXHRcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTA6XHRcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuLS1cbmluY2x1ZGUvbGludXgvaW9tbXUuaD04NDg9c3RydWN0IGlvbW11X2ZhdWx0X3BhcmFtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtODczLSAqXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg6ODc0OiAqIFRPRE86IG1pZ3JhdGUgb3RoZXIgcGVyIGRldmljZSBkYXRhIHBvaW50ZXJzIHVuZGVyIGlvbW11X2Rldl9kYXRhLCBlLmcuXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtODc1LSAqXHRzdHJ1Y3QgaW9tbXVfZ3JvdXBcdCppb21tdV9ncm91cDtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5Lmg9MTk9ZW51bSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTU0LSNkZWZpbmUgTVBPTF9NRl9NT1ZFX0FMTCAoMVx1MDAzY1x1MDAzYzIpXHQvKiBNb3ZlIGV2ZXJ5IHBhZ2UgdG8gY29uZm9ybSB0byBwb2xpY3kgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaDo1NTojZGVmaW5lIE1QT0xfTUZfTEFaWVx0ICgxXHUwMDNjXHUwMDNjMylcdC8qIFVOU1VQUE9SVEVEIEZMQUc6IExhenkgbWlncmF0ZSBvbiBmYXVsdCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTU2LSNkZWZpbmUgTVBPTF9NRl9JTlRFUk5BTCAoMVx1MDAzY1x1MDAzYzQpXHQvKiBJbnRlcm5hbCBmbGFncyBzdGFydCBoZXJlICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTY3LSNkZWZpbmUgTVBPTF9GX1NIQVJFRCAgKDEgXHUwMDNjXHUwMDNjIDApXHQvKiBpZGVudGlmeSBzaGFyZWQgcG9saWNpZXMgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaDo2ODojZGVmaW5lIE1QT0xfRl9NT0ZcdCgxIFx1MDAzY1x1MDAzYyAzKSAvKiB0aGlzIHBvbGljeSB3YW50cyBtaWdyYXRlIG9uIGZhdWx0ICovXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgtNjktI2RlZmluZSBNUE9MX0ZfTU9ST05cdCgxIFx1MDAzY1x1MDAzYyA0KSAvKiBNaWdyYXRlIE9uIHByb3Rub25lIFJlZmVyZW5jZSBPbiBOb2RlICovXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYz0yOTk1PXN0YXRpYyBpbnQgY3B1c2V0X2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtMzAyNy1cdCAqIGNwdXNldC5jcHVzIHdoZW4gdGhlcmUgYXJlIGFjdGl2ZSB0YXNrcyBpbnNpZGUuIFdoZW4gdGhhdCBoYXBwZW5zLFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzozMDI4Olx0ICogd2Ugc2hvdWxkIGFsbG93IHRhc2tzIHRvIG1pZ3JhdGUgb3V0IHdpdGhvdXQgc2VjdXJpdHkgY2hlY2sgdG8gbWFrZVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zMDI5LVx0ICogc3VyZSB0aGV5IHdpbGwgYmUgYWJsZSB0byBydW4gYWZ0ZXIgbWlncmF0aW9uLlxuLS1cbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jPTIwPXN0YXRpYyBpbmxpbmUgYm9vbCBpcnFfbmVlZHNfZml4dXAoc3RydWN0IGlycV9kYXRhICpkKVxuLS1cbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jLTUyLVxua2VybmVsL2lycS9jcHVob3RwbHVnLmM6NTM6c3RhdGljIGJvb2wgbWlncmF0ZV9vbmVfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYylcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jLTU0LXtcbi0tXG5rZXJuZWwvaXJxL2NwdWhvdHBsdWcuYz0xNzE9dm9pZCBpcnFfbWlncmF0ZV9hbGxfb2ZmX3RoaXNfY3B1KHZvaWQpXG4tLVxua2VybmVsL2lycS9jcHVob3RwbHVnLmMtMTgwLVx0XHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrLCBcdTAwMjZkZXNjLVx1MDAzZWxvY2spIHtcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jOjE4MTpcdFx0XHRhZmZpbml0eV9icm9rZW4gPSBtaWdyYXRlX29uZV9pcnEoZGVzYyk7XG5rZXJuZWwvaXJxL2NwdWhvdHBsdWcuYy0xODItXHRcdFx0aWYgKGFmZmluaXR5X2Jyb2tlbiBcdTAwMjZcdTAwMjYgZGVzYy1cdTAwM2VhZmZpbml0eV9ub3RpZnkpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04OTE5PV9fYnBmX2tmdW5jIGJvb2wgc2N4X2JwZl9kc3FfbW92ZV90b19sb2NhbF9fX3YyKHU2NCBkc3FfaWQsIHU2NCBlbnFfZmxhZ3MsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04OTQ3LVx0XHQgKiBBIHN1Y2Nlc3NmdWxseSBjb25zdW1lZCB0YXNrIGNhbiBiZSBkZXF1ZXVlZCBiZWZvcmUgaXQgc3RhcnRzXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjg5NDg6XHRcdCAqIHJ1bm5pbmcgd2hpbGUgdGhlIENQVSBpcyB0cnlpbmcgdG8gbWlncmF0ZSBvdGhlciBkaXNwYXRjaGVkXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTg5NDktXHRcdCAqIHRhc2tzLiBCdW1wIG5yX3Rhc2tzIHRvIHRlbGwgYmFsYW5jZV9vbmUoKSB0byByZXRyeSBvbiBlbXB0eVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MjY3Nj1ib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI3NTYtXG5rZXJuZWwvc2NoZWQvZmFpci5jOjI3NTc6XHQvKiBBbHdheXMgYWxsb3cgbWlncmF0ZSBvbiBwcml2YXRlIGZhdWx0cyAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0yNzU4LVx0aWYgKGNwdXBpZF9tYXRjaF9waWQocCwgbGFzdF9jcHVwaWQpKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9Mjg3Nz1zdGF0aWMgdm9pZCB1cGRhdGVfbnVtYV9zdGF0cyhzdHJ1Y3QgdGFza19udW1hX2VudiAqZW52LFxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjg5Ni1cdFx0aWYgKGZpbmRfaWRsZSBcdTAwMjZcdTAwMjYgaWRsZV9jb3JlIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiAhcnEtXHUwMDNlbnJfcnVubmluZyBcdTAwMjZcdTAwMjYgaWRsZV9jcHUoY3B1KSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYzoyODk3Olx0XHRcdGlmIChSRUFEX09OQ0UocnEtXHUwMDNlbnVtYV9taWdyYXRlX29uKSB8fFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yODk4LVx0XHRcdCAgICAhY3B1bWFza190ZXN0X2NwdShjcHUsIGVudi1cdTAwM2VwLVx1MDAzZWNwdXNfcHRyKSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTI5MTc9c3RhdGljIHZvaWQgdGFza19udW1hX2Fzc2lnbihzdHJ1Y3QgdGFza19udW1hX2VudiAqZW52LFxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjkyMi1cdC8qIENoZWNrIGlmIHJ1bi1xdWV1ZSBwYXJ0IG9mIGFjdGl2ZSBOVU1BIGJhbGFuY2UuICovXG5rZXJuZWwvc2NoZWQvZmFpci5jOjI5MjM6XHRpZiAoZW52LVx1MDAzZWJlc3RfY3B1ICE9IGVudi1cdTAwM2Vkc3RfY3B1IFx1MDAyNlx1MDAyNiB4Y2hnKFx1MDAyNnJxLVx1MDAzZW51bWFfbWlncmF0ZV9vbiwgMSkpIHtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjkyNC1cdFx0aW50IGNwdTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI5MzUtXHRcdFx0cnEgPSBjcHVfcnEoZW52LVx1MDAzZWRzdF9jcHUpO1xua2VybmVsL3NjaGVkL2ZhaXIuYzoyOTM2Olx0XHRcdGlmICgheGNoZyhcdTAwMjZycS1cdTAwM2VudW1hX21pZ3JhdGVfb24sIDEpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTM3LVx0XHRcdFx0Z290byBhc3NpZ247XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTUwLVx0XHRycSA9IGNwdV9ycShlbnYtXHUwMDNlYmVzdF9jcHUpO1xua2VybmVsL3NjaGVkL2ZhaXIuYzoyOTUxOlx0XHRXUklURV9PTkNFKHJxLVx1MDAzZW51bWFfbWlncmF0ZV9vbiwgMCk7XG5rZXJuZWwvc2NoZWQvZmFpci5jLTI5NTItXHR9XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0zMDA1PXN0YXRpYyBib29sIHRhc2tfbnVtYV9jb21wYXJlKHN0cnVjdCB0YXNrX251bWFfZW52ICplbnYsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0zMDE3LVxua2VybmVsL3NjaGVkL2ZhaXIuYzozMDE4Olx0aWYgKFJFQURfT05DRShkc3RfcnEtXHUwMDNlbnVtYV9taWdyYXRlX29uKSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzAxOS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzI0OT1zdGF0aWMgaW50IHRhc2tfbnVtYV9taWdyYXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTMzNjgtXHRcdHJldCA9IG1pZ3JhdGVfdGFza190byhwLCBlbnYuYmVzdF9jcHUpO1xua2VybmVsL3NjaGVkL2ZhaXIuYzozMzY5Olx0XHRXUklURV9PTkNFKGJlc3RfcnEtXHUwMDNlbnVtYV9taWdyYXRlX29uLCAwKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzM3MC1cdFx0aWYgKHJldCAhPSAwKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzM3NS1cdHJldCA9IG1pZ3JhdGVfc3dhcChwLCBlbnYuYmVzdF90YXNrLCBlbnYuYmVzdF9jcHUsIGVudi5zcmNfY3B1KTtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MzM3NjpcdFdSSVRFX09OQ0UoYmVzdF9ycS1cdTAwM2VudW1hX21pZ3JhdGVfb24sIDApO1xua2VybmVsL3NjaGVkL2ZhaXIuYy0zMzc3LVxuLS1cbmtlcm5lbC9zY2hlZC9ydC5jPTE4OTY9c3RhdGljIHN0cnVjdCBycSAqZmluZF9sb2NrX2xvd2VzdF9ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL3J0LmMtMTk1NS0gKiBJZiB0aGUgY3VycmVudCBDUFUgaGFzIG1vcmUgdGhhbiBvbmUgUlQgdGFzaywgc2VlIGlmIHRoZSBub25cbmtlcm5lbC9zY2hlZC9ydC5jOjE5NTY6ICogcnVubmluZyB0YXNrIGNhbiBtaWdyYXRlIG92ZXIgdG8gYSBDUFUgdGhhdCBpcyBydW5uaW5nIGEgdGFza1xua2VybmVsL3NjaGVkL3J0LmMtMTk1Ny0gKiBvZiBsZXNzZXIgcHJpb3JpdHkuXG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTEzNT1zdHJ1Y3QgcnEge1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyMDktI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL3NjaGVkLmg6MTIxMDpcdHVuc2lnbmVkIGludFx0XHRudW1hX21pZ3JhdGVfb247XG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjExLSNlbmRpZlxuLS1cbm1tL01ha2VmaWxlPTk3PW9iai0kKENPTkZJR19NRU1URVNUKVx0XHQmIzQzOz0gbWVtdGVzdC5vXG5tbS9NYWtlZmlsZTo5ODpvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG5tbS9NYWtlZmlsZS05OS1vYmotJChDT05GSUdfTlVNQSkgJiM0Mzs9IG1lbW9yeS10aWVycy5vXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzE5NC1cdFx0ICogSW4gY2FzZSB3ZSBjYW5ub3QgY2xlYXIgUGFnZUFub25FeGNsdXNpdmUoKSwgc3BsaXQgdGhlIFBNRFxubW0vaHVnZV9tZW1vcnkuYzozMTk1Olx0XHQgKiBvbmx5IGFuZCBsZXQgdHJ5X3RvX21pZ3JhdGVfb25lKCkgZmFpbCBsYXRlci5cbm1tL2h1Z2VfbWVtb3J5LmMtMzE5Ni1cdFx0ICpcbi0tXG5tbS9odWdldGxiLmM9NzE4NT12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4tLVxubW0vaHVnZXRsYi5jLTcxODgtXG5tbS9odWdldGxiLmM6NzE4OTpcdGh1Z2V0bGJfY2dyb3VwX21pZ3JhdGUob2xkX2ZvbGlvLCBuZXdfZm9saW8pO1xubW0vaHVnZXRsYi5jLTcxOTAtXHRmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24obmV3X2ZvbGlvLCByZWFzb24pO1xuLS1cbm1tL3JtYXAuYz0yMzk4PXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNDE4LSAqL1xubW0vcm1hcC5jOjI0MTk6c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTI0MjAtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTI3NDc9dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcbi0tXG5tbS9ybWFwLmMtMjc0OS1cdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG5tbS9ybWFwLmM6Mjc1MDpcdFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxubW0vcm1hcC5jLTI3NTEtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuLS1cbnRvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL2FybTY0L2hpc2lsaWNvbi9oaXAwOC91bmNvcmUtaGhhLmpzb24tMTQ4LVx0ICAgIFwmIzM0O0V2ZW50TmFtZVwmIzM0OzogXCYjMzQ7c2Rpci1ob21lLW1pZ3JhdGVcJiMzNDssXG50b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC9hcm02NC9oaXNpbGljb24vaGlwMDgvdW5jb3JlLWhoYS5qc29uOjE0OTpcdCAgICBcJiMzNDtCcmllZkRlc2NyaXB0aW9uXCYjMzQ7OiBcJiMzNDtDb3VudCBvZiB0aGUgbnVtYmVyIG9mIEhIQSBTLURpciByZWFkIGhvbWUgbWlncmF0ZSBvcGVyYXRpb25zXCYjMzQ7LFxudG9vbHMvcGVyZi9wbXUtZXZlbnRzL2FyY2gvYXJtNjQvaGlzaWxpY29uL2hpcDA4L3VuY29yZS1oaGEuanNvbi0xNTAtXHQgICAgXCYjMzQ7VW5pdFwmIzM0OzogXCYjMzQ7aGlzaV9zY2NsLGhoYVwmIzM0O1xuLS1cbnRvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL2FybTY0L2hpc2lsaWNvbi9oaXAwOC91bmNvcmUtaGhhLmpzb24tMTU0LVx0ICAgIFwmIzM0O0V2ZW50TmFtZVwmIzM0OzogXCYjMzQ7ZWRpci1ob21lLW1pZ3JhdGVcJiMzNDssXG50b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC9hcm02NC9oaXNpbGljb24vaGlwMDgvdW5jb3JlLWhoYS5qc29uOjE1NTpcdCAgICBcJiMzNDtCcmllZkRlc2NyaXB0aW9uXCYjMzQ7OiBcJiMzNDtDb3VudCBvZiB0aGUgbnVtYmVyIG9mIEhIQSBFLURpciByZWFkIGhvbWUgbWlncmF0ZSBvcGVyYXRpb25zXCYjMzQ7LFxudG9vbHMvcGVyZi9wbXUtZXZlbnRzL2FyY2gvYXJtNjQvaGlzaWxpY29uL2hpcDA4L3VuY29yZS1oaGEuanNvbi0xNTYtXHQgICAgXCYjMzQ7VW5pdFwmIzM0OzogXCYjMzQ7aGlzaV9zY2NsLGhoYVwmIzM0O1xuLS1cbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5PTk5PWNsYXNzIFJ1bnF1ZXVlU25hcHNob3Q6XG4tLVxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHktMTI1LVxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHk6MTI2Olx0ZGVmIG1pZ3JhdGVfb3V0KHNlbGYsIG9sZCk6XG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weS0xMjctXHRcdGlmIG9sZCBub3QgaW4gc2VsZi50YXNrczpcbi0tXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weT0xNjE9Y2xhc3MgVGltZVNsaWNlOlxuLS1cbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5LTE5NC1cdFx0b2xkX3JxID0gc2VsZi5wcmV2LnJxc1tvbGRfY3B1XVxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHk6MTk1Olx0XHRvdXRfcnEgPSBvbGRfcnEubWlncmF0ZV9vdXQobmV3KVxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHktMTk2LVx0XHRzZWxmLnJxc1tvbGRfY3B1XSA9IG91dF9ycVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzUyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IG9mIGB0cnlfdG9fbWlncmF0ZV9vbmVgKioKCk9rYXksIHNvIEkmIzM5O3ZlIGVzdGFibGlzaGVkIHRoYXQgYG1tL21pZ3JhdGUuY2AgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2Ugd2hlbiBgQ09ORklHX01JR1JBVElPTmAgaXMgZW5hYmxlZC4gTXkgbmV4dCBxdWVzdGlvbiBpczogRG9lcyB0aGUgYHRyeV90b19taWdyYXRlX29uZWAgZnVuY3Rpb24sIGZvdW5kIGluIGBtbS9ybWFwLmNgLCBhbHNvIGRlcGVuZCBvbiB0aGF0IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24/IEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBtZW1vcnkgbWlncmF0aW9uLCBzbyBpdCB3b3VsZCBtYWtlIHNlbnNlIGlmIGl0IGRpZC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBtbS9ybWFwLmNgIGFuZCB2ZXJpZnkgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvZGUgYXJvdW5kIHRoZSBgdHJ5X3RvX21pZ3JhdGVfb25lYCBkZWNsYXJhdGlvbiBhbmQgaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBDT05GSUdfTUlHUkFUSU9OYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX21pZ3JhdGVfb25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MzAzMD1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxOTQtXHRcdCAqIEluIGNhc2Ugd2UgY2Fubm90IGNsZWFyIFBhZ2VBbm9uRXhjbHVzaXZlKCksIHNwbGl0IHRoZSBQTURcbm1tL2h1Z2VfbWVtb3J5LmM6MzE5NTpcdFx0ICogb25seSBhbmQgbGV0IHRyeV90b19taWdyYXRlX29uZSgpIGZhaWwgbGF0ZXIuXG5tbS9odWdlX21lbW9yeS5jLTMxOTYtXHRcdCAqXG4tLVxubW0vcm1hcC5jPTIzOTg9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0MTgtICovXG5tbS9ybWFwLmM6MjQxOTpzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9ybWFwLmMtMjQyMC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcbi0tXG5tbS9ybWFwLmM9Mjc0Nz12b2lkIHRyeV90b19taWdyYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNzQ5LVx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcbm1tL3JtYXAuYzoyNzUwOlx0XHQucm1hcF9vbmUgPSB0cnlfdG9fbWlncmF0ZV9vbmUsXG5tbS9ybWFwLmMtMjc1MS1cdFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTQ1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBNaWdyYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgdHJ5X3RvX21pZ3JhdGVgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiBpdCYjMzk7cyBwcm90ZWN0ZWQgYnkgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBsaWtlIGAjaWZkZWYgQ09ORklHX01JR1JBVElPTmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRoYXQgd291bGQgY29udHJvbCBpdHMgaW5jbHVzaW9uIGJhc2VkIG9uIGEgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIGlzIHRoZSBmaXJzdCB0aGluZyBJJiMzOTtkIGNoZWNrLiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYnVpbGQtdGltZSBiZWhhdmlvciBhbmQgcG9ydGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19taWdyYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcm1hcC5oPTg0NT1pbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKiwgaW50IGlzX2xvY2tlZCxcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NDctXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4NDg6dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NDktdm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICosIGVudW0gdHR1X2ZsYWdzIGZsYWdzKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMTk0LVx0XHQgKiBJbiBjYXNlIHdlIGNhbm5vdCBjbGVhciBQYWdlQW5vbkV4Y2x1c2l2ZSgpLCBzcGxpdCB0aGUgUE1EXG5tbS9odWdlX21lbW9yeS5jOjMxOTU6XHRcdCAqIG9ubHkgYW5kIGxldCB0cnlfdG9fbWlncmF0ZV9vbmUoKSBmYWlsIGxhdGVyLlxubW0vaHVnZV9tZW1vcnkuYy0zMTk2LVx0XHQgKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzM3Nj1zdGF0aWMgdm9pZCB1bm1hcF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzM5MS1cdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxubW0vaHVnZV9tZW1vcnkuYzozMzkyOlx0XHR0cnlfdG9fbWlncmF0ZShmb2xpbywgdHR1X2ZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzM5My1cdGVsc2Vcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM0NzQ9c3RhdGljIHZvaWQgcmVtYXBfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIG5yLCBpbnQgZmxhZ3MpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNDc3LVxubW0vaHVnZV9tZW1vcnkuYzozNDc4Olx0LyogSWYgdW5tYXBfZm9saW8oKSB1c2VzIHRyeV90b19taWdyYXRlKCkgb24gZmlsZSwgcmVtb3ZlIHRoaXMgY2hlY2sgKi9cbm1tL2h1Z2VfbWVtb3J5LmMtMzQ3OS1cdGlmICghZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbi0tXG5tbS9taWdyYXRlLmM9MTIwNz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fdW5tYXAobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTI3Ny1cdC8qXG5tbS9taWdyYXRlLmM6MTI3ODpcdCAqIEJ5IHRyeV90b19taWdyYXRlKCksIHNyYy1cdTAwM2VtYXBjb3VudCBnb2VzIGRvd24gdG8gMCBoZXJlLiBJbiB0aGlzIGNhc2UsXG5tbS9taWdyYXRlLmMtMTI3OS1cdCAqIHdlIGNhbm5vdCBub3RpY2UgdGhhdCBhbm9uX3ZtYSBpcyBmcmVlZCB3aGlsZSB3ZSBtaWdyYXRlIGEgcGFnZS5cbi0tXG5tbS9taWdyYXRlLmMtMTMzMS1cdFx0XHQgICAgICAgIWZvbGlvX3Rlc3Rfa3NtKHNyYykgXHUwMDI2XHUwMDI2ICFhbm9uX3ZtYSwgc3JjKTtcbm1tL21pZ3JhdGUuYzoxMzMyOlx0XHR0cnlfdG9fbWlncmF0ZShzcmMsIG1vZGUgPT0gTUlHUkFURV9BU1lOQyA/IFRUVV9CQVRDSF9GTFVTSCA6IDApO1xubW0vbWlncmF0ZS5jLTEzMzMtXHRcdG9sZF9mb2xpb19zdGF0ZSB8PSBGT0xJT19XQVNfTUFQUEVEO1xuLS1cbm1tL21pZ3JhdGUuYz0xNDczPXN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTE1MzctXG5tbS9taWdyYXRlLmM6MTUzODpcdFx0dHJ5X3RvX21pZ3JhdGUoc3JjLCB0dHUpO1xubW0vbWlncmF0ZS5jLTE1MzktXHRcdHBhZ2Vfd2FzX21hcHBlZCA9IDE7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDE9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTM5Ny1cdFx0ICogb3B0aW1pc2F0aW9uIHRvIGF2b2lkIHdhbGtpbmcgdGhlIHJtYXAgbGF0ZXIgd2l0aFxubW0vbWlncmF0ZV9kZXZpY2UuYzozOTg6XHRcdCAqIHRyeV90b19taWdyYXRlKCkuXG5tbS9taWdyYXRlX2RldmljZS5jLTM5OS1cdFx0ICovXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz01NjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy02MDgtXHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MDk6XHRcdFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIDApO1xubW0vbWlncmF0ZV9kZXZpY2UuYy02MTAtXG4tLVxubW0vcm1hcC5jPTIzOTg9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0MTgtICovXG5tbS9ybWFwLmM6MjQxOTpzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9ybWFwLmMtMjQyMC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcbi0tXG5tbS9ybWFwLmMtMjQzNC1cdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcbm1tL3JtYXAuYzoyNDM1Olx0ICogdHJ5X3RvX21pZ3JhdGUoKSBtYXkgcmV0dXJuIGJlZm9yZSBmb2xpb19tYXBwZWQoKSBoYXMgYmVjb21lIGZhbHNlLFxubW0vcm1hcC5jLTI0MzYtXHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXG4tLVxubW0vcm1hcC5jLTI3MzktLyoqXG5tbS9ybWFwLmM6Mjc0MDogKiB0cnlfdG9fbWlncmF0ZSAtIHRyeSB0byByZXBsYWNlIGFsbCBwYWdlIHRhYmxlIG1hcHBpbmdzIHdpdGggc3dhcCBlbnRyaWVzXG5tbS9ybWFwLmMtMjc0MS0gKiBAZm9saW86IHRoZSBmb2xpbyB0byByZXBsYWNlIHBhZ2UgdGFibGUgZW50cmllcyBmb3Jcbi0tXG5tbS9ybWFwLmMtMjc0Ni0gKi9cbm1tL3JtYXAuYzoyNzQ3OnZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG5tbS9ybWFwLmMtMjc0OC17XG5tbS9ybWFwLmMtMjc0OS1cdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG5tbS9ybWFwLmM6Mjc1MDpcdFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxubW0vcm1hcC5jLTI3NTEtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ2OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXJuZWwgTWlncmF0aW9uIGFuZCBIdWdlIFBhZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBtZW1vcnkgbWlncmF0aW9uIGFuZCBIdWdlVExCIHBhZ2VzLiBgdHJ5X3RvX21pZ3JhdGVgIGlzIGluIGBtbS9ybWFwLmNgLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgdGhhdCYjMzk7cyBiYXNlbGluZSBmdW5jdGlvbmFsaXR5LiBUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgYHJlbW92ZV9taWdyYXRpb25fcHRlYCByZXNpZGVzIGluIGBtbS9taWdyYXRlLmNgLCBidXQgb25seSBpZiBgQ09ORklHX01JR1JBVElPTmAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiwgbWVhbmluZyBlbmFibGluZyBgQ09ORklHX01JR1JBVElPTmAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLgoKTXkgcHJpbWFyeSBmb2N1cywgdGhvdWdoLCBpcyBvbiBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIE5vdywgSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IGFib3V0IGBDT05GSUdfQVJNNjRgPyYjMzQ7IEkgY2FuJiMzOTt0IGRpcmVjdGx5IHNwZWNpZnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBidXQgYXJlIHRoZXJlIGFueSBpbmRpcmVjdCBkZXBlbmRlbmNpZXM/IExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgYG1tL21wcm90ZWN0LmNgIGhhcyBhbiBgI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VgIGd1YXJkLCBzbyB0aGF0JiMzOTtzIGFub3RoZXIgaW1wb3J0YW50IG1vZHVsZSB0byBjb25zaWRlci4gQWxzbywgaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgdGhlcmUmIzM5O3MgdGhlIGBpc192bV9odWdldGxiX3BhZ2UocHZtdy0mZ3Q7dm1hKWAgY2hlY2suCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgYXJlIHJlYWxseSBjZW50cmFsIHRvIHRoaXMgYXJlYS4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgCiogICBgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgCiogICBgY2hlY2tfcHRlYAoqICAgYHRyeV90b191bm1hcF9vbmVgCiogICBgdHJ5X3RvX21pZ3JhdGVfb25lYAoKQW5kIGZpbmFsbHksIGBmaW5kX251bV9jb250aWdgIC0gd2hpY2ggaXMgYXJjaC1zcGVjaWZpYyAoaW4gYGFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY2ApLiBXaGlsZSB0aGlzIGlzIGFybTY0LCBpdCYjMzk7cyBzdGlsbCBnb29kIHRvIGluY2x1ZGUsIHNvIGxldCYjMzk7cyBjaGVjayB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluZF9udW1fY29udGlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz02NT1ib29sIGFyY2hfaHVnZXRsYl9taWdyYXRpb25fc3VwcG9ydGVkKHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTc3LVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjc4OnN0YXRpYyBpbnQgZmluZF9udW1fY29udGlnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNzktXHRcdFx0ICAgcHRlX3QgKnB0ZXAsIHNpemVfdCAqcGdzaXplKVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz0xMTk9cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMTI3LVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjEyODpcdG5jb250aWcgPSBmaW5kX251bV9jb250aWcobW0sIGFkZHIsIHB0ZXAsIFx1MDAyNnBnc2l6ZSk7XG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMTI5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmNvbnRpZzsgaSYjNDM7JiM0MzssIHB0ZXAmIzQzOyYjNDM7KSB7XG4tLVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jPTQ1Mz12b2lkIGh1Z2VfcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00NjctXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6NDY4Olx0bmNvbnRpZyA9IGZpbmRfbnVtX2NvbnRpZyhtbSwgYWRkciwgcHRlcCwgXHUwMDI2cGdzaXplKTtcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00NjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTk5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgS2VybmVsIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlkZW50aWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaDogYHJlbW92ZV9taWdyYXRpb25fcHRlYCwgYHByb3Rfbm9uZV9odWdldGxiX2VudHJ5YCwgYGNoZWNrX3B0ZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYHRyeV90b19taWdyYXRlX29uZWAsIGFuZCBgaHVnZV9wdGVwX2dldGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgbm90aW5nIHRoYXQgd2hpbGUgYGh1Z2VfcHRlcF9nZXRgIGlzIGdsb2JhbCwgdGhlIG90aGVycyBhcmUgc3RhdGljIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIHNvdXJjZSBmaWxlcy4gU3BlY2lmaWNhbGx5OiBgY2hlY2tfcHRlYCBpcyBpbiBgbW0vcGFnZV92bWFfbWFwcGVkLmNgLCBgdHJ5X3RvX3VubWFwX29uZWAgYW5kIGB0cnlfdG9fbWlncmF0ZV9vbmVgIGFyZSBpbiBgbW0vcm1hcC5jYCwgYHJlbW92ZV9taWdyYXRpb25fcHRlYCByZXNpZGVzIGluIGBtbS9taWdyYXRlLmNgLCBhbmQgYHByb3Rfbm9uZV9odWdldGxiX2VudHJ5YCBpcyBkZWZpbmVkIGluIGBtbS9tcHJvdGVjdC5jYC4KCkkgbmVlZCB0byBjb25maXJtIGBodWdlX3B0ZXBfZ2V0YCBpcyBpbmRlZWQgZ2xvYmFsLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQmIzM5O3MgaW4gYGFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY2AgYW5kLCB5ZXMsIGl0JiMzOTtzIGdsb2JhbGx5IGFjY2Vzc2libGUuCgpUbyByZWNhcCwgdGhlIHRhcmdldGVkIGZ1bmN0aW9ucyBhcmU6CiogICBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgCiogICBgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgCiogICBgY2hlY2tfcHRlYAoqICAgYHRyeV90b191bm1hcF9vbmVgCiogICBgdHJ5X3RvX21pZ3JhdGVfb25lYAoqICAgYGh1Z2VfcHRlcF9nZXRgCgpUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBodWdlX3B0ZXBfZ2V0YCBmb3IgcmVhZGluZyBodWdlIHBhZ2UgUFRFcyBhbmQgdGhlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIG9mIG11bHRpcGxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgKG1pZ3JhdGlvbiwgbXByb3RlY3QsIHJtYXAsIHBhZ2VcX3ZtYVxfbWFwcGVkKSB0byB1c2UgaXQgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgYHB0ZXBfZ2V0YC4gVGhlcmUmIzM5O3MgYWxzbyBhIG1lbnRpb24gb2YgYSBidWcgZml4IGluIGBmaW5kX251bV9jb250aWdgIGZvciBhcm02NC4gVGhlc2UgYXJlIGFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgd2l0aGluIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGZvciBmdXp6aW5nLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgTUlHUkFUSU9OYCBhbmQgYEhVR0VUTEJfUEFHRWAgYXJlIHRoZSBrZXkgY29udGVuZGVycy4gSSBjYW4gcXVpY2tseSBjb25maXJtIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIGluZGVlZCB0aGUgc3RhbmRhcmQgY29uZmlnIG5hbWVzLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIGdvb2QuIE5vdywgbGV0JiMzOTtzIHByb2NlZWQgdG8gZnVydGhlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE3NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvICpIVUdFVExCX1BBR0UqIGlzIGluZGVlZCBkZWZpbmVkIHdpdGhpbiBgZnMvS2NvbmZpZ2AuIEdvb2QuIFRoYXQgY29uZmlybXMgaXQmIzM5O3MgYSBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcuIE5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBvbiBteSBtaW5kIGlzLCBsZXQmIzM5O3Mgc2VlIGhvdyBgTUlHUkFUSU9OYCBpbnRlcmFjdHMgd2l0aCB0aGF04oCmIHRpbWUgdG8gbG9vayBpbnRvIHRoYXQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcGFnZSBtaWdyYXRpb24gYW5kIGh1Z2VwYWdlcyB0byBkZXRlcm1pbmUgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcyBjb25maWd1cmF0aW9uJiMzOTtzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JR1JBVElPTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY5NS1cbm1tL0tjb25maWc6Njk2OmNvbmZpZyBNSUdSQVRJT05cbm1tL0tjb25maWctNjk3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQyMAoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWlncmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfTUlHUkFUSU9OYCBpcyBpbmRlZWQgZGVmaW5lZCB3aXRoaW4gYG1tL0tjb25maWdgIOKAkyBjaGVjay4gTm93LCBsZXQmIzM5O3MgZG8gYSBmaW5hbCBwYXNzIG9uIHRoaXMgcGF0Y2guIEl0JiMzOTtzIHRvdWNoaW5nIGEgZmFpciBhbW91bnQgb2YgY29kZSwgc3BlY2lmaWNhbGx5IGBtbS9taWdyYXRlLmNgLCBgbW0vbXByb3RlY3QuY2AsIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AsIGBtbS9ybWFwLmNgLCBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAuIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlZmFjdG9yLiBDb25zaWRlcmluZyB0aGF0LCBhbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgSSYjMzk7bSBnb2luZyB0byBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGg6IGByZW1vdmVfbWlncmF0aW9uX3B0ZWAsIGBwcm90X25vbmVfaHVnZXRsYl9lbnRyeWAsIGBjaGVja19wdGVgLCBgdHJ5X3RvX3VubWFwX29uZWAsIGB0cnlfdG9fbWlncmF0ZV9vbmVgLCBgaHVnZV9wdGVwX2dldGAsIGFuZCBgZmluZF9udW1fY29udGlnYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGR1cmluZyBhbmFseXNpcyBhbmQgZnV6emluZy4KClRoZSBmdW5kYW1lbnRhbCBjaGFuZ2UgaGVyZSBpcyBpbnRyb2R1Y2luZyBhbmQgdXNpbmcgYGh1Z2VfcHRlcF9nZXRgIHdoZXJlIGBwdGVwX2dldGAgd2FzIHByZXZpb3VzbHkgYmVpbmcgdXNlZCBpbiB0aGUgaHVnZXRsYiBwYWdlIHRhYmxlIGVudHJ5IGFjY2Vzcywgd2hpY2ggaGFzIGNvcmUgaW1wbGljYXRpb25zLCBhcyBpdCBzcGFucyB0aGUgbWlncmF0aW9uLCBybWFwLCBtcHJvdGVjdCwgYW5kIHBhZ2Vfdm1hX21hcHBlZCBjb2RlIHBhdGhzLiBUaGlzIGlzIGEgYmlnIGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBwYXRjaCBhbHNvIGFwcGVhcnMgdG8gYWRkcmVzcyBhbiBBUk02NC1zcGVjaWZpYyBidWcgaW4gYGZpbmRfbnVtX2NvbnRpZ2AuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcywgdG91Y2hpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIHRodXMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuCgpJJiMzOTttIG1ha2luZyBzdXJlIGBIVUdFVExCX1BBR0VgIGFuZCBgTUlHUkFUSU9OYCBhcmUgZW5hYmxlZCBhcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGFueSB0ZXN0IGJ1aWxkcyBzaW5jZSB0aGVzZSBhcmUgZnVuZGFtZW50YWwgdG8gdGhpcyBwYXRjaCYjMzk7cyBzY29wZS4gR2l2ZW4gdGhlIHdpZGVzcHJlYWQgaW1wYWN0IGFuZCB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhvcm91Z2hseSB0ZXN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVtb3ZlX21pZ3JhdGlvbl9wdGUmIzM0OywKICAgICYjMzQ7cHJvdF9ub25lX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHRlJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21pZ3JhdGVfb25lJiMzNDssCiAgICAmIzM0O2h1Z2VfcHRlcF9nZXQmIzM0OywKICAgICYjMzQ7ZmluZF9udW1fY29udGlnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGh1Z2V0bGIgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSByZWFkIGJ5IGludHJvZHVjaW5nIGFuZCB1c2luZyBgaHVnZV9wdGVwX2dldGAgaW5zdGVhZCBvZiBgcHRlcF9nZXRgIGFjcm9zcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGluY2x1ZGluZyBtaWdyYXRpb24sIHJtYXAsIG1wcm90ZWN0LCBhbmQgcGFnZV92bWFfbWFwcGVkLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBmaW5kX251bV9jb250aWdgIGZvciBhcm02NC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZW1vdmVfbWlncmF0aW9uX3B0ZSYjMzQ7LAogICAgJiMzNDtwcm90X25vbmVfaHVnZXRsYl9lbnRyeSYjMzQ7LAogICAgJiMzNDtjaGVja19wdGUmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fbWlncmF0ZV9vbmUmIzM0OywKICAgICYjMzQ7aHVnZV9wdGVwX2dldCYjMzQ7LAogICAgJiMzNDtmaW5kX251bV9jb250aWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgaHVnZXRsYiBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIHJlYWQgYnkgaW50cm9kdWNpbmcgYW5kIHVzaW5nIGBodWdlX3B0ZXBfZ2V0YCBpbnN0ZWFkIG9mIGBwdGVwX2dldGAgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgaW5jbHVkaW5nIG1pZ3JhdGlvbiwgcm1hcCwgbXByb3RlY3QsIGFuZCBwYWdlX3ZtYV9tYXBwZWQuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYGZpbmRfbnVtX2NvbnRpZ2AgZm9yIGFybTY0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQyOjMyLjMxNzU4NDg2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDQ5MTQ4OTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCX1BBR0VcIixcbiAgICBcIk1JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlbW92ZV9taWdyYXRpb25fcHRlXCIsXG4gICAgXCJwcm90X25vbmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiY2hlY2tfcHRlXCIsXG4gICAgXCJ0cnlfdG9fdW5tYXBfb25lXCIsXG4gICAgXCJ0cnlfdG9fbWlncmF0ZV9vbmVcIixcbiAgICBcImh1Z2VfcHRlcF9nZXRcIixcbiAgICBcImZpbmRfbnVtX2NvbnRpZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGh1Z2V0bGIgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSByZWFkIGJ5IGludHJvZHVjaW5nIGFuZCB1c2luZyBgaHVnZV9wdGVwX2dldGAgaW5zdGVhZCBvZiBgcHRlcF9nZXRgIGFjcm9zcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGluY2x1ZGluZyBtaWdyYXRpb24sIHJtYXAsIG1wcm90ZWN0LCBhbmQgcGFnZV92bWFfbWFwcGVkLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBmaW5kX251bV9jb250aWdgIGZvciBhcm02NC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQyOjMyLjMxNzU5NzcwN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1MDIxOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTVhOWUwZDBiYmUxM2EzNTc0MDQyMmFkZjQwNzhiYzg2MjJmNWVhN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjQyOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xcbmluZGV4IDMwNzcyYTkwOWFlYTNlLi44ZTc5OWMxZmUwYWE2OSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcXG5AQCAtODcsNyArODcsNyBAQCBzdGF0aWMgaW50IGZpbmRfbnVtX2NvbnRpZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcXG4gXFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XFxuIFxcdHBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xcbi1cXHRpZiAoKHB0ZV90ICopcG1kcCA9PSBwdGVwKSB7XFxuK1xcdGlmICgocHRlX3QgKilQVFJfQUxJR05fRE9XTihwbWRwLCBzaXplb2YoKnBtZHApICogQ09OVF9QTURTKSA9PSBwdGVwKSB7XFxuIFxcdFxcdCpwZ3NpemUgPSBQTURfU0laRTtcXG4gXFx0XFx0cmV0dXJuIENPTlRfUE1EUztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjY5OTZkMDJhY2YxNzE0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMTI2MSw2ICsxMjYxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY291bnRfc3ViKGxvbmcgbCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG4gfVxcbiBcXG4rcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XFxuK1xcbiBzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li5jNjVmMGY0M2RmN2ViYiAxMDA2NDRcXG4tLS0gYS9tbS9taWdyYXRlLmNcXG4rKysgYi9tbS9taWdyYXRlLmNcXG5AQCAtMzcxLDcgKzM3MSwxMSBAQCBzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiAjZW5kaWZcXG4tXFx0XFx0b2xkX3B0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXFxuK1xcdFxcdFxcdG9sZF9wdGUgPSBodWdlX3B0ZXBfZ2V0KHZtYS1cXHUwMDNldm1fbW0sIHB2bXcuYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cHZtdy5wdGUpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG9sZF9wdGUgPSBwdGVwX2dldChwdm13LnB0ZSk7XFxuIFxcdFxcdGlmIChybWFwX3dhbGtfYXJnLVxcdTAwM2VtYXBfdW51c2VkX3RvX3plcm9wYWdlIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICB0cnlfdG9fbWFwX3VudXNlZF90b196ZXJvcGFnZShcXHUwMDI2cHZtdywgZm9saW8sIG9sZF9wdGUsIGlkeCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuY1xcbmluZGV4IDljYmY5MzJiMDI4Y2Y5Li42MzYwZDhhMzc4MDIzNCAxMDA2NDRcXG4tLS0gYS9tbS9tcHJvdGVjdC5jXFxuKysrIGIvbW0vbXByb3RlY3QuY1xcbkBAIC02OTksMTQgKzY5OSwyMCBAQCBzdGF0aWMgaW50IHByb3Rfbm9uZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHQwIDogLUVBQ0NFUztcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gc3RhdGljIGludCBwcm90X25vbmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiBcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIHtcXG4tXFx0cmV0dXJuIHBmbl9tb2RpZnlfYWxsb3dlZChwdGVfcGZuKHB0ZXBfZ2V0KHB0ZSkpLFxcbi1cXHRcXHRcXHRcXHQgICoocGdwcm90X3QgKikod2Fsay1cXHUwMDNlcHJpdmF0ZSkpID9cXG4tXFx0XFx0MCA6IC1FQUNDRVM7XFxuK1xcdGNvbnN0IHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG4rXFxuK1xcdGlmIChwZm5fbW9kaWZ5X2FsbG93ZWQocHRlX3BmbihlbnRyeSksICoocGdwcm90X3QgKikod2Fsay1cXHUwMDNlcHJpdmF0ZSkpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FQUNDRVNTO1xcbiB9XFxuKyNlbHNlXFxuKyNkZWZpbmUgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlcXHROVUxMXFxuKyNlbmRpZlxcbiBcXG4gc3RhdGljIGludCBwcm90X25vbmVfdGVzdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xcbmluZGV4IDJjY2JhYmZiMmNjMTdhLi4xOGUxZDM0MWY0NjNjOSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xcbisrKyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuQEAgLTEwNyw3ICsxMDcsMTMgQEAgc3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLFxcbiBzdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4tXFx0cHRlX3QgcHRlbnQgPSBwdGVwX2dldChwdm13LVxcdTAwM2VwdGUpO1xcbitcXHRwdGVfdCBwdGVudDtcXG4rXFxuK1xcdGlmIChpc192bV9odWdldGxiX3BhZ2UocHZtdy1cXHUwMDNldm1hKSlcXG4rXFx0XFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctXFx1MDAzZXZtYS1cXHUwMDNldm1fbW0sIHB2bXctXFx1MDAzZWFkZHJlc3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHB2bXctXFx1MDAzZXB0ZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cHRlbnQgPSBwdGVwX2dldChwdm13LVxcdTAwM2VwdGUpO1xcbiBcXG4gXFx0aWYgKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19NSUdSQVRJT04pIHtcXG4gXFx0XFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggMWM3N2Q1ZGMwNmU5ZmEuLmVhNGFkNWU2NjJmN2RiIDEwMDY0NFxcbi0tLSBhL21tL3JtYXAuY1xcbisrKyBiL21tL3JtYXAuY1xcbkBAIC0yMDk1LDE0ICsyMDk1LDE5IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdC8qIFVuZXhwZWN0ZWQgUE1ELW1hcHBlZCBUSFA/ICovXFxuIFxcdFxcdFZNX0JVR19PTl9GT0xJTyghcHZtdy5wdGUsIGZvbGlvKTtcXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdFxcbi1cXHRcXHQgKiBhY3R1YWxseSBtYXAgcGFnZXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XFxuK1xcdFxcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuK1xcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuK1xcdFxcdFxcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcXG4gXFx0XFx0XFx0cGZuID0gcHRlX3BmbihwdGV2YWwpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBIYW5kbGUgUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsXFxuK1xcdFxcdFxcdCAqIHRoYXQgYWN0dWFsbHkgbWFwIHBhZ2VzLlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCk7XFxuIFxcbiBcXHRcXHRcXHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xcbkBAIC0yMTEwLDcgKzIxMTUsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRzdWJwYWdlID0gZm9saW9fcGFnZShmb2xpbywgcGZuIC0gZm9saW9fcGZuKGZvbGlvKSk7XFxuLVxcdFxcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuIFxcdFxcdGFub25fZXhjbHVzaXZlID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHQgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7XFxuIFxcbkBAIC0yNTAxLDE0ICsyNTA1LDE5IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0LyogVW5leHBlY3RlZCBQTUQtbWFwcGVkIFRIUD8gKi9cXG4gXFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pO1xcbiBcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0XFxuLVxcdFxcdCAqIGFjdHVhbGx5IG1hcCBwYWdlcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcXG4rXFx0XFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4rXFx0XFx0XFx0cHRldmFsID0gaHVnZV9wdGVwX2dldChtbSwgYWRkcmVzcywgcHZtdy5wdGUpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xcbiBcXHRcXHRcXHRwZm4gPSBwdGVfcGZuKHB0ZXZhbCk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcyxcXG4rXFx0XFx0XFx0ICogdGhhdCBhY3R1YWxseSBtYXAgcGFnZXMuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKTtcXG4gXFxuIFxcdFxcdFxcdHBmbiA9IHNvZnRsZWFmX3RvX3BmbihlbnRyeSk7XFxuQEAgLTI1MTYsNyArMjUyNSw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0c3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpO1xcbi1cXHRcXHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xcbiBcXHRcXHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0IFBhZ2VBbm9uRXhjbHVzaXZlKHN1YnBhZ2UpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDI6MzMuMDgzNjk0NTc4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk3MjUzNjIzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZW1vdmVfbWlncmF0aW9uX3B0ZVwiLFxuICAgIFwicHJvdF9ub25lX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImNoZWNrX3B0ZVwiLFxuICAgIFwidHJ5X3RvX3VubWFwX29uZVwiLFxuICAgIFwidHJ5X3RvX21pZ3JhdGVfb25lXCIsXG4gICAgXCJodWdlX3B0ZXBfZ2V0XCIsXG4gICAgXCJmaW5kX251bV9jb250aWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBodWdldGxiIHBhZ2UgdGFibGUgZW50cmllcyBhcmUgcmVhZCBieSBpbnRyb2R1Y2luZyBhbmQgdXNpbmcgYGh1Z2VfcHRlcF9nZXRgIGluc3RlYWQgb2YgYHB0ZXBfZ2V0YCBhY3Jvc3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBpbmNsdWRpbmcgbWlncmF0aW9uLCBybWFwLCBtcHJvdGVjdCwgYW5kIHBhZ2Vfdm1hX21hcHBlZC4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgZmluZF9udW1fY29udGlnYCBmb3IgYXJtNjQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE1YTllMGQwYmJlMTNhMzU3NDA0MjJhZGY0MDc4YmM4NjIyZjVlYTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjQyOjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG5pbmRleCAzMDc3MmE5MDlhZWEzZS4uOGU3OTljMWZlMGFhNjkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbisrKyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIGludCBmaW5kX251bV9jb250aWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHA0ZHAgPSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpO1xuIFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XG4gXHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbi1cdGlmICgocHRlX3QgKilwbWRwID09IHB0ZXApIHtcbitcdGlmICgocHRlX3QgKilQVFJfQUxJR05fRE9XTihwbWRwLCBzaXplb2YoKnBtZHApICogQ09OVF9QTURTKSA9PSBwdGVwKSB7XG4gXHRcdCpwZ3NpemUgPSBQTURfU0laRTtcbiBcdFx0cmV0dXJuIENPTlRfUE1EUztcbiBcdH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uNjk5NmQwMmFjZjE3MTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xMjYxLDYgKzEyNjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jb3VudF9zdWIobG9uZyBsLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gfVxuIFxuK3B0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuK1xuIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4ge1xuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggZDliMjM5MDlkNzE2YzYuLmM2NWYwZjQzZGY3ZWJiIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC0zNzEsNyArMzcxLDExIEBAIHN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiAjZW5kaWZcbi1cdFx0b2xkX3B0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbitcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4rXHRcdFx0b2xkX3B0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBwdm13LmFkZHJlc3MsXG4rXHRcdFx0XHRcdFx0cHZtdy5wdGUpO1xuK1x0XHRlbHNlXG4rXHRcdFx0b2xkX3B0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbiBcdFx0aWYgKHJtYXBfd2Fsa19hcmctXHUwMDNlbWFwX3VudXNlZF90b196ZXJvcGFnZSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHRyeV90b19tYXBfdW51c2VkX3RvX3plcm9wYWdlKFx1MDAyNnB2bXcsIGZvbGlvLCBvbGRfcHRlLCBpZHgpKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL21tL21wcm90ZWN0LmMgYi9tbS9tcHJvdGVjdC5jXG5pbmRleCA5Y2JmOTMyYjAyOGNmOS4uNjM2MGQ4YTM3ODAyMzQgMTAwNjQ0XG4tLS0gYS9tbS9tcHJvdGVjdC5jXG4rKysgYi9tbS9tcHJvdGVjdC5jXG5AQCAtNjk5LDE0ICs2OTksMjAgQEAgc3RhdGljIGludCBwcm90X25vbmVfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0MCA6IC1FQUNDRVM7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gc3RhdGljIGludCBwcm90X25vbmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiB7XG4tXHRyZXR1cm4gcGZuX21vZGlmeV9hbGxvd2VkKHB0ZV9wZm4ocHRlcF9nZXQocHRlKSksXG4tXHRcdFx0XHQgICoocGdwcm90X3QgKikod2Fsay1cdTAwM2Vwcml2YXRlKSkgP1xuLVx0XHQwIDogLUVBQ0NFUztcbitcdGNvbnN0IHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuK1xuK1x0aWYgKHBmbl9tb2RpZnlfYWxsb3dlZChwdGVfcGZuKGVudHJ5KSwgKihwZ3Byb3RfdCAqKSh3YWxrLVx1MDAzZXByaXZhdGUpKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVBQ0NFU1M7XG4gfVxuKyNlbHNlXG4rI2RlZmluZSBwcm90X25vbmVfaHVnZXRsYl9lbnRyeVx0TlVMTFxuKyNlbmRpZlxuIFxuIHN0YXRpYyBpbnQgcHJvdF9ub25lX3Rlc3QodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQsXG4gXHRcdFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5pbmRleCAyY2NiYWJmYjJjYzE3YS4uMThlMWQzNDFmNDYzYzkgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuKysrIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcbkBAIC0xMDcsNyArMTA3LDEzIEBAIHN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbiBzdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHB0ZV90IHB0ZW50ID0gcHRlcF9nZXQocHZtdy1cdTAwM2VwdGUpO1xuK1x0cHRlX3QgcHRlbnQ7XG4rXG4rXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHB2bXctXHUwMDNldm1hKSlcbitcdFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctXHUwMDNldm1hLVx1MDAzZXZtX21tLCBwdm13LVx1MDAzZWFkZHJlc3MsXG4rXHRcdFx0XHQgICAgICBwdm13LVx1MDAzZXB0ZSk7XG4rXHRlbHNlXG4rXHRcdHB0ZW50ID0gcHRlcF9nZXQocHZtdy1cdTAwM2VwdGUpO1xuIFxuIFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKSB7XG4gXHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCAxYzc3ZDVkYzA2ZTlmYS4uZWE0YWQ1ZTY2MmY3ZGIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTIwOTUsMTQgKzIwOTUsMTkgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0LyogVW5leHBlY3RlZCBQTUQtbWFwcGVkIFRIUD8gKi9cbiBcdFx0Vk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBIYW5kbGUgUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXRcbi1cdFx0ICogYWN0dWFsbHkgbWFwIHBhZ2VzLlxuLVx0XHQgKi9cbi1cdFx0cHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuK1x0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuK1x0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuK1x0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4rXHRcdH1cbiBcdFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuIFx0XHRcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcbiBcdFx0fSBlbHNlIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcyxcbitcdFx0XHQgKiB0aGF0IGFjdHVhbGx5IG1hcCBwYWdlcy5cbitcdFx0XHQgKi9cbiBcdFx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKTtcbiBcbiBcdFx0XHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xuQEAgLTIxMTAsNyArMjExNSw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdH1cbiBcbiBcdFx0c3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpO1xuLVx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7XG4gXG5AQCAtMjUwMSwxNCArMjUwNSwxOSBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVuZXhwZWN0ZWQgUE1ELW1hcHBlZCBUSFA/ICovXG4gXHRcdFZNX0JVR19PTl9GT0xJTyghcHZtdy5wdGUsIGZvbGlvKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0XG4tXHRcdCAqIGFjdHVhbGx5IG1hcCBwYWdlcy5cbi1cdFx0ICovXG4tXHRcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbitcdFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcbitcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbitcdFx0XHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuK1x0XHR9XG4gXHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbiBcdFx0XHRwZm4gPSBwdGVfcGZuKHB0ZXZhbCk7XG4gXHRcdH0gZWxzZSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBIYW5kbGUgUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsXG4rXHRcdFx0ICogdGhhdCBhY3R1YWxseSBtYXAgcGFnZXMuXG4rXHRcdFx0ICovXG4gXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCk7XG4gXG4gXHRcdFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKGVudHJ5KTtcbkBAIC0yNTE2LDcgKzI1MjUsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdH1cbiBcbiBcdFx0c3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpO1xuLVx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0MjozMy4wODM2OTY5NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzMwMjM3ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIEh1Z2V0bGIgUGFnZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIGBwdGVwX2dldGAgd2l0aCBodWdldGxiIHBhZ2VzLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHJldm9sdmVzIGFyb3VuZCBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiwgYGh1Z2VfcHRlcF9nZXRgLCBhbmQgdGhlbiBzdHJhdGVnaWNhbGx5IHJlcGxhY2luZyBjYWxscyB0byBgcHRlcF9nZXRgIHdpdGggaXQgaW4gYSBmZXcga2V5IGFyZWFzIG9mIHRoZSBrZXJuZWwuIEkgc2VlIGl0J3MgdG91Y2hpbmcgYG1tL21pZ3JhdGUuY2AgKHNwZWNpZmljYWxseSBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgKSwgYG1tL21wcm90ZWN0LmNgIChgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgKSwgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCAoYGNoZWNrX3B0ZWApLCBhbmQgYG1tL3JtYXAuY2AgKGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYHRyeV90b19taWdyYXRlX29uZWApLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBjcml0aWNhbCBwYXJ0cyBvZiBtZW1vcnkgbWFuYWdlbWVudC5cblxuVGhlIGNvZGUgYWxzbyBtb2RpZmllcyBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYC4gVGhhdCdzIGEgYml0IG1vcmUgdGFyZ2V0ZWQsIGJ1dCBzdGlsbCBpbmRpY2F0ZXMgYSBjaGFuZ2UgdG8gY29yZSBmdW5jdGlvbmFsaXR5LiBJJ20gZm9jdXNpbmcgb24gdGhhdCBgUFRSX0FMSUdOX0RPV05gIGNoYW5nZS4gSXQncyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGFsdGVyYXRpb24gdG8gaG93IFBURXMgYXJlIGFjY2Vzc2VkIGZvciBodWdldGxiIHBhZ2VzIG9uIGFybTY0LiBJJ2xsIG5lZWQgdG8gbG9vayB2ZXJ5IGNsb3NlbHkgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFsaWdubWVudC5cblxuR2l2ZW4gdGhlc2UgY2hhbmdlcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHNvbWV0aGluZyB0aGF0IGRlbWFuZHMgZnV6emluZy4gQW55IG1vZGlmaWNhdGlvbiB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgZXNwZWNpYWxseSBodWdldGxiLCBtaWdyYXRpb24sIHJtYXAsIGFuZCBtcHJvdGVjdCwgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgaXNzdWVzLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IENPTkZJRyBvcHRpb25zIHRvIGVuc3VyZSBwcm9wZXIgZnV6emluZyBjb3ZlcmFnZS4gSSBrbm93IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhIGdpdmVuOyB3ZSBuZWVkIHRoYXQgZW5hYmxlZCB0byBldmVuIGJlIHJlbGV2YW50LiBHaXZlbiB0aGUgZmlsZXMgdG91Y2hlZCwgYENPTkZJR19NSUdSQVRJT05gIGlzIGxvb2tpbmcgbGlrZSBhIHN0cm9uZyBjYW5kaWRhdGUsIHBhcnRpY3VsYXJseSBiZWNhdXNlIG9mIHRoZSBgbW0vbWlncmF0ZS5jYCBhbmQgYHRyeV90b19taWdyYXRlX29uZWAgcmVmZXJlbmNlcy4gV2UnbGwgaGF2ZSB0byBrZWVwIHRoYXQgaW4gbWluZC4gQW5kIG9mIGNvdXJzZSwgdGhlIGBhcmNoL2FybTY0YCBjaGFuZ2UgcmVxdWlyZXMgYENPTkZJR19BUk02NGAsIHRob3VnaCBJJ2xsIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB3ZSBjYW4ndCBleHByZXNzIGFyY2ggY29uZmlnIG9wdGlvbnMgaW4gYEVuYWJsZUNvbmZpZ3NgLiBXZSBjYW4ganVzdCBtYWtlIHN1cmUgYEhVR0VUTEJfUEFHRWAgaXMgZW5hYmxlZC5cblxuSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBodWdlX3B0ZXBfZ2V0YCAqaXMqIGRvaW5nLCBzbyBJJ2xsIGdvIGNoZWNrIGl0cyBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGFuZCB0aGVuIHRyYWNrIGRvd24gd2hlcmUgaXQncyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gVGhhdCdsbCBnaXZlIG1lIGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0Mjo0MC40MTM5MzgwODJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2NzEyOTQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX3B0ZXBfZ2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0PTIwMz1IdWdlVExCIFBhZ2UgVGFibGUgSGVscGVyc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3QtMjIwLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXFxuRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3Q6MjIxOnwgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIgICB8IENsZWFycyBhIEh1Z2VUTEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XFxuRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3QtMjIyLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXFxuLS1cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9odWdldGxiLTNsZXZlbC5oLTE1LSAqIElmIG91ciBodWdlIHB0ZSBpcyBub24temVybyB0aGVuIG1hcmsgdGhlIHZhbGlkIGJpdC5cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9odWdldGxiLTNsZXZlbC5oOjE2OiAqIFRoaXMgYWxsb3dzIHB0ZV9wcmVzZW50KGh1Z2VfcHRlcF9nZXQobW0sYWRkcixwdGVwKSkgdG8gcmV0dXJuIHRydWUgZm9yIG5vbi16ZXJvXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vaHVnZXRsYi0zbGV2ZWwuaC0xNy0gKiBwdGVzLlxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vaHVnZXRsYi0zbGV2ZWwuaC0yMC0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9odWdldGxiLTNsZXZlbC5oOjIxOnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9odWdldGxiLTNsZXZlbC5oLTIyLXtcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTQxPWV4dGVybiBpbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00NC0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmg6NDU6ZXh0ZXJuIHB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDYtXFx0XFx0XFx0XFx0ICAgICBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBzeik7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD01ND1leHRlcm4gdm9pZCBodWdlX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNTYtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmg6NTc6ZXh0ZXJuIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTU4LVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jPTk3PXN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTExOC1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6MTE5OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTEyMC17XFxuLS1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9MzY5PXZvaWQgaHVnZV9wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zODAtXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM4MTpwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zODItXFx0XFx0XFx0ICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opXFxuLS1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9NTE3PXB0ZV90IGh1Z2VfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy01MjktXFx0fVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzo1MzA6XFx0cmV0dXJuIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHBzaXplKTtcXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNTMxLX1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD0xND1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0yMy0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjI0OnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTI1LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTM3PXN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQyLVxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo0MzpcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcih2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBzeik7XFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ0LVxcdGZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcik7XFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTE0LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVF9BTkRfQ0xFQVJcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjE1OnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0xNi1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmg9Mjg9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTM4LVxcdCAqL1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmg6Mzk6XFx0cHRlID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgc3opO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDAtXFx0Zmx1c2hfdGxiX3BhZ2Uodm1hLCBhZGRyKTtcXG4tLVxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD04PXZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMTEtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDoxMjpwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0xMy1cXHRcXHRcXHQgICAgICBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBzeik7XFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9odWdldGxicGFnZS5jPTEyMT12b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9wYXJpc2MvbW0vaHVnZXRsYnBhZ2UuYy0xMjctXFxuYXJjaC9wYXJpc2MvbW0vaHVnZXRsYnBhZ2UuYzoxMjg6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5hcmNoL3BhcmlzYy9tbS9odWdldGxicGFnZS5jLTEyOS1cXHRcXHRcXHQgICAgICBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBzeilcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9NDM9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ2LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVF9BTkRfQ0xFQVJcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjQ3OnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00OC1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9NTU9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTYwLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6NjE6XFx0cHRlID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgc3opO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtNjItXFx0Zmx1c2hfaHVnZXRsYl9wYWdlKHZtYSwgYWRkcik7XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4Lmg9MTk9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4LmgtMjItI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oOjIzOnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4LmgtMjQte1xcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg9MjU9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0yOS0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg6MzA6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzEtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTQzPWludCBodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ3LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVFxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjQ4OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ5LVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTUtI2lmZGVmIENPTkZJR19SSVNDVl9JU0FfU1ZOQVBPVFxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo2OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTcte1xcbi0tXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jPTI3ND1pbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtMzA0LVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzozMDU6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTMwNi1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTIzPXZvaWQgX19zZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjYtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDoyNzpwdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTI4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg6Mjk6cHRlX3QgX19odWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzAtXFx0XFx0XFx0XFx0cHRlX3QgKnB0ZXApO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0zMi0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDozMzpzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzQtXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTM2LXtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjM3OlxcdHJldHVybiBfX2h1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTM4LX1cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg9NTE9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTUzLXtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjU0OlxcdHJldHVybiBfX2h1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXApO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNTUtfVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD01OD1zdGF0aWMgaW5saW5lIGludCBodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNjEte1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg6NjI6XFx0aW50IGNoYW5nZWQgPSAhcHRlX3NhbWUoaHVnZV9wdGVwX2dldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwKSwgcHRlKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTYzLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNjQtXFx0aWYgKGNoYW5nZWQpIHtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjY1OlxcdFxcdF9faHVnZV9wdGVwX2dldF9hbmRfY2xlYXIodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02Ni1cXHRcXHRfX3NldF9odWdlX3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBwdGUpO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD03Mj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTc0LXtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjc1OlxcdHB0ZV90IHB0ZSA9IF9faHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZXApO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNzYtXFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0xNTY9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTE2MS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYzoxNjI6cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0xNjMte1xcbi0tXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMTY2LVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjE2NzpwdGVfdCBfX2h1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTE2OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTE2OS17XFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM6MTcwOlxcdHB0ZV90IHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZXApO1xcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTE3MS1cXHRwbWRfdCAqcG1kcCA9IChwbWRfdCAqKSBwdGVwO1xcbi0tXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9MTg9dm9pZCBfX3NldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjEtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjIyOnB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjMtXFx0XFx0XFx0ICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opO1xcbi0tXFxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jPTI3Nj12b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jLTI4MS1cXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmM6MjgyOnB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jLTI4My1cXHRcXHRcXHQgICAgICBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBzeilcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTMyNz1zdGF0aWMgYm9vbCBodWdldGxiX3ZtYV9tYXBzX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTMzNS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzozMzY6XFx0cHRlID0gaHVnZV9wdGVwX2dldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0zMzctXFx0aWYgKGh1Z2VfcHRlX25vbmUocHRlKSB8fCAhcHRlX3ByZXNlbnQocHRlKSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0xMjYzPXN0YXRpYyBpbnQgc21hcHNfaHVnZXRsYl9yYW5nZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyNzQtXFx0cHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHZtYSksIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMjc1OlxcdHB0ZW50ID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI3Ni1cXHRpZiAocHRlX3ByZXNlbnQocHRlbnQpKSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjIwOT1zdGF0aWMgaW50IHBhZ2VtYXBfaHVnZXRsYl9yYW5nZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMjIzLVxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaHN0YXRlX3ZtYSh2bWEpLCB3YWxrLVxcdTAwM2VtbSwgcHRlcCk7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIyMjQ6XFx0cHRlID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlcCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIyMjUtXFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0yOTIzPXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkzNi1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjkzNzpcXHRcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBzdGFydCwgcHRlcCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI5MzgtXFx0XFx0Y2F0ZWdvcmllcyA9IHAtXFx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfCBwYWdlbWFwX2h1Z2V0bGJfY2F0ZWdvcnkocHRlKTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTQ4LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTQ5OlxcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIHN0YXJ0LCBwdGVwKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk1MC1cXHRjYXRlZ29yaWVzID0gcC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8IHBhZ2VtYXBfaHVnZXRsYl9jYXRlZ29yeShwdGUpO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTI5OTY9c3RhdGljIGludCBwYWdlbWFwX3NjYW5faHVnZXRsYl9ob2xlX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwMTItXFx0XFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBtbSwgcHRlcCk7XFxuZnMvcHJvYy90YXNrX21tdS5jOjMwMTM6XFx0XFx0cHRlID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlcCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTMwMTQtXFx0XFx0bWFrZV91ZmZkX3dwX2h1Z2VfcHRlKHZtYSwgYWRkciwgcHRlcCwgcHRlKTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zNDA1PXN0YXRpYyBpbnQgZ2F0aGVyX2h1Z2V0bGJfc3RhdHMocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zNDEzLVxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaHN0YXRlX3ZtYSh3YWxrLVxcdTAwM2V2bWEpLCB3YWxrLVxcdTAwM2VtbSwgcHRlKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzQxNDpcXHRodWdlX3B0ZSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTM0MTUtXFx0aWYgKCFwdGVfcHJlc2VudChodWdlX3B0ZSkpXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaD03MD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC03Ny0jaWZuZGVmIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmg6Nzg6c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC03OS1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIHN6KVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmg9MTA5PXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtMTE3LSNpZm5kZWYgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oOjExODpzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtMTE5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEwNDc9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMDUxLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEwNTI6XFx0cmV0dXJuIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMDUzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyNjA9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY291bnRfc3ViKGxvbmcgbCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjYzLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyNjQ6cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTI2NS1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Mjk1PXN0YXRpYyB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTI5OC1cXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcXG5tbS9kYW1vbi92YWRkci5jOjI5OTpcXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XFxubW0vZGFtb24vdmFkZHIuYy0zMDAtXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTMyMj1zdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzMwLVxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cXHUwMDNlbW0sIHB0ZSk7XFxubW0vZGFtb24vdmFkZHIuYzozMzE6XFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMzMyLVxcdGlmICghcHRlX3ByZXNlbnQoZW50cnkpKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz00Mzk9c3RhdGljIGludCBkYW1vbl95b3VuZ19odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTQ0OS1cXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbm1tL2RhbW9uL3ZhZGRyLmM6NDUwOlxcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG5tbS9kYW1vbi92YWRkci5jLTQ1MS1cXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcXG4tLVxcbm1tL2htbS5jPTU0Mz1zdGF0aWMgaW50IGhtbV92bWFfd2Fsa19odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9obW0uYy01NTctXFx0cHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHZtYSksIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbm1tL2htbS5jOjU1ODpcXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XFxubW0vaG1tLmMtNTU5LVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ4MjE9c3RhdGljIHZvaWQgc2V0X2h1Z2VfcHRlcF93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00ODI1LVxcbm1tL2h1Z2V0bGIuYzo0ODI2OlxcdGVudHJ5ID0gaHVnZV9wdGVfbWt3cml0ZShodWdlX3B0ZV9ta2RpcnR5KGh1Z2VfcHRlcF9nZXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkcmVzcywgcHRlcCkpKTtcXG5tbS9odWdldGxiLmMtNDgyNy1cXHRpZiAoaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCBhZGRyZXNzLCBwdGVwLCBlbnRyeSwgMSkpXFxuLS1cXG5tbS9odWdldGxiLmM9NDg1Mz1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9odWdldGxiLmMtNDkxMC1cXHRcXHRzcGluX2xvY2tfbmVzdGVkKHNyY19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG5tbS9odWdldGxiLmM6NDkxMTpcXHRcXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQoc3JjX3ZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHNyY19wdGUpO1xcbm1tL2h1Z2V0bGIuYy00OTEyLWFnYWluOlxcbi0tXFxubW0vaHVnZXRsYi5jLTQ5NDctXFx0XFx0fSBlbHNlIHtcXG5tbS9odWdldGxiLmM6NDk0ODpcXHRcXHRcXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQoc3JjX3ZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHNyY19wdGUpO1xcbm1tL2h1Z2V0bGIuYy00OTQ5LVxcdFxcdFxcdHB0ZV9mb2xpbyA9IHBhZ2VfZm9saW8ocHRlX3BhZ2UoZW50cnkpKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00OTg5LVxcdFxcdFxcdFxcdHNwaW5fbG9ja19uZXN0ZWQoc3JjX3B0bCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbm1tL2h1Z2V0bGIuYzo0OTkwOlxcdFxcdFxcdFxcdGVudHJ5ID0gaHVnZV9wdGVwX2dldChzcmNfdm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgc3JjX3B0ZSk7XFxubW0vaHVnZXRsYi5jLTQ5OTEtXFx0XFx0XFx0XFx0aWYgKCFwdGVfc2FtZShzcmNfcHRlX29sZCwgZW50cnkpKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9NTAzNz1zdGF0aWMgdm9pZCBtb3ZlX2h1Z2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIG9sZF9hZGRyLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUwNTYtXFxubW0vaHVnZXRsYi5jOjUwNTc6XFx0cHRlID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIG9sZF9hZGRyLCBzcmNfcHRlLCBzeik7XFxubW0vaHVnZXRsYi5jLTUwNTgtXFxuLS1cXG5tbS9odWdldGxiLmM9NTA3Nj1pbnQgbW92ZV9odWdldGxiX3BhZ2VfdGFibGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUxMTItXFx0XFx0fVxcbm1tL2h1Z2V0bGIuYzo1MTEzOlxcdFxcdGlmIChodWdlX3B0ZV9ub25lKGh1Z2VfcHRlcF9nZXQobW0sIG9sZF9hZGRyLCBzcmNfcHRlKSkpXFxubW0vaHVnZXRsYi5jLTUxMTQtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9odWdldGxiLmM9NTE0MT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTE4Mi1cXG5tbS9odWdldGxiLmM6NTE4MzpcXHRcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdGVwKTtcXG5tbS9odWdldGxiLmMtNTE4NC1cXHRcXHRpZiAoaHVnZV9wdGVfbm9uZShwdGUpKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNTIzMC1cXG5tbS9odWdldGxiLmM6NTIzMTpcXHRcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkcmVzcywgcHRlcCwgc3opO1xcbm1tL2h1Z2V0bGIuYy01MjMyLVxcdFxcdHRsYl9yZW1vdmVfaHVnZV90bGJfZW50cnkoaCwgdGxiLCBwdGVwLCBhZGRyZXNzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz01NDE5PXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfd3Aoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdldGxiLmMtNTQyMy1cXHRjb25zdCBib29sIHVuc2hhcmUgPSB2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19VTlNIQVJFO1xcbm1tL2h1Z2V0bGIuYzo1NDI0OlxcdHB0ZV90IHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIHZtZi1cXHUwMDNlYWRkcmVzcywgdm1mLVxcdTAwM2VwdGUpO1xcbm1tL2h1Z2V0bGIuYy01NDI1LVxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XFxuLS1cXG5tbS9odWdldGxiLmMtNTUzOC1cXHRcXHRcXHRpZiAobGlrZWx5KHZtZi1cXHUwMDNlcHRlIFxcdTAwMjZcXHUwMDI2XFxubW0vaHVnZXRsYi5jOjU1Mzk6XFx0XFx0XFx0XFx0ICAgcHRlX3NhbWUoaHVnZV9wdGVwX2dldChtbSwgdm1mLVxcdTAwM2VhZGRyZXNzLCB2bWYtXFx1MDAzZXB0ZSksIHB0ZSkpKVxcbm1tL2h1Z2V0bGIuYy01NTQwLVxcdFxcdFxcdFxcdGdvdG8gcmV0cnlfYXZvaWRjb3B5O1xcbi0tXFxubW0vaHVnZXRsYi5jLTU1NzYtXFx0dm1mLVxcdTAwM2VwdGUgPSBodWdldGxiX3dhbGsodm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGh1Z2VfcGFnZV9zaXplKGgpKTtcXG5tbS9odWdldGxiLmM6NTU3NzpcXHRpZiAobGlrZWx5KHZtZi1cXHUwMDNlcHRlIFxcdTAwMjZcXHUwMDI2IHB0ZV9zYW1lKGh1Z2VfcHRlcF9nZXQobW0sIHZtZi1cXHUwMDNlYWRkcmVzcywgdm1mLVxcdTAwM2VwdGUpLCBwdGUpKSkge1xcbm1tL2h1Z2V0bGIuYy01NTc4LVxcdFxcdHB0ZV90IG5ld3B0ZSA9IG1ha2VfaHVnZV9wdGUodm1hLCBuZXdfZm9saW8sICF1bnNoYXJlKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz01Njc4PXN0YXRpYyBib29sIGh1Z2V0bGJfcHRlX3N0YWJsZShzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU2ODQtXFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBtbSwgcHRlcCk7XFxubW0vaHVnZXRsYi5jOjU2ODU6XFx0c2FtZSA9IHB0ZV9zYW1lKGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZXApLCBvbGRfcHRlKTtcXG5tbS9odWdldGxiLmMtNTY4Ni1cXHRzcGluX3VubG9jayhwdGwpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTU2OTE9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU4NDktXFx0LyogSWYgcHRlIGNoYW5nZWQgZnJvbSB1bmRlciB1cywgcmV0cnkgKi9cXG5tbS9odWdldGxiLmM6NTg1MDpcXHRpZiAoIXB0ZV9zYW1lKGh1Z2VfcHRlcF9nZXQobW0sIHZtZi1cXHUwMDNlYWRkcmVzcywgdm1mLVxcdTAwM2VwdGUpLCB2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG5tbS9odWdldGxiLmMtNTg1MS1cXHRcXHRnb3RvIGJhY2tvdXQ7XFxuLS1cXG5tbS9odWdldGxiLmM9NTk0MT12bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU5ODYtXFxubW0vaHVnZXRsYi5jOjU5ODc6XFx0dm1mLm9yaWdfcHRlID0gaHVnZV9wdGVwX2dldChtbSwgdm1mLmFkZHJlc3MsIHZtZi5wdGUpO1xcbm1tL2h1Z2V0bGIuYy01OTg4LVxcdGlmIChodWdlX3B0ZV9ub25lKHZtZi5vcmlnX3B0ZSkpXFxuLS1cXG5tbS9odWdldGxiLmMtNjA1Ni1cXHQvKiBDaGVjayBmb3IgYSByYWNpbmcgdXBkYXRlIGJlZm9yZSBjYWxsaW5nIGh1Z2V0bGJfd3AoKSAqL1xcbm1tL2h1Z2V0bGIuYzo2MDU3OlxcdGlmICh1bmxpa2VseSghcHRlX3NhbWUodm1mLm9yaWdfcHRlLCBodWdlX3B0ZXBfZ2V0KG1tLCB2bWYuYWRkcmVzcywgdm1mLnB0ZSkpKSlcXG5tbS9odWdldGxiLmMtNjA1OC1cXHRcXHRnb3RvIG91dF9wdGw7XFxuLS1cXG5tbS9odWdldGxiLmMtNjA2MC1cXHQvKiBIYW5kbGUgdXNlcmZhdWx0LXdwIGZpcnN0LCBiZWZvcmUgdHJ5aW5nIHRvIGxvY2sgbW9yZSBwYWdlcyAqL1xcbm1tL2h1Z2V0bGIuYzo2MDYxOlxcdGlmICh1c2VyZmF1bHRmZF93cCh2bWEpIFxcdTAwMjZcXHUwMDI2IGh1Z2VfcHRlX3VmZmRfd3AoaHVnZV9wdGVwX2dldChtbSwgdm1mLmFkZHJlc3MsIHZtZi5wdGUpKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2h1Z2V0bGIuYy02MDYyLVxcdCAgICAoZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1dSSVRFKSBcXHUwMDI2XFx1MDAyNiAhaHVnZV9wdGVfd3JpdGUodm1mLm9yaWdfcHRlKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTYxNjM9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MTg4LVxcdFxcdC8qIERvbid0IG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgUFRFcyAoZXZlbiBtYXJrZXJzKSAqL1xcbm1tL2h1Z2V0bGIuYzo2MTg5OlxcdFxcdGlmICghaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUpKSkge1xcbm1tL2h1Z2V0bGIuYy02MTkwLVxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuLS1cXG5tbS9odWdldGxiLmMtNjMyNS1cXG5tbS9odWdldGxiLmM6NjMyNjpcXHRkc3RfcHRlcCA9IGh1Z2VfcHRlcF9nZXQoZHN0X21tLCBkc3RfYWRkciwgZHN0X3B0ZSk7XFxubW0vaHVnZXRsYi5jLTYzMjctXFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYz02Mzg0PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NDQ5LVxcdFxcdH1cXG5tbS9odWdldGxiLmM6NjQ1MDpcXHRcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdGVwKTtcXG5tbS9odWdldGxiLmMtNjQ1MS1cXHRcXHRpZiAoaHVnZV9wdGVfbm9uZShwdGUpKSB7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTc2Mz1zdGF0aWMgaW50IGh3cG9pc29uX2h1Z2V0bGJfcmFuZ2UocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc3My1cXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXFx1MDAzZW1tLCBwdGVwKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjc3NDpcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGVwKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc3NS1cXHRyZXQgPSBjaGVja19od3BvaXNvbmVkX2VudHJ5KHB0ZSwgYWRkciwgaHVnZV9wYWdlX3NoaWZ0KGgpLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9NzcxPXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTc4Mi1cXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGhzdGF0ZV92bWEod2Fsay1cXHUwMDNldm1hKSwgd2Fsay1cXHUwMDNlbW0sIHB0ZSk7XFxubW0vbWVtcG9saWN5LmM6NzgzOlxcdHB0ZXAgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbm1tL21lbXBvbGljeS5jLTc4NC1cXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZXApKSB7XFxuLS1cXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMzc0LVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbm1tL21pZ3JhdGUuYzozNzU6XFx0XFx0XFx0b2xkX3B0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLVxcdTAwM2V2bV9tbSwgcHZtdy5hZGRyZXNzLFxcbm1tL21pZ3JhdGUuYy0zNzYtXFx0XFx0XFx0XFx0XFx0XFx0cHZtdy5wdGUpO1xcbi0tXFxubW0vbWlncmF0ZS5jPTUyMD12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0X2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuLS1cXG5tbS9taWdyYXRlLmMtNTI3LVxcdHNwaW5fbG9jayhwdGwpO1xcbm1tL21pZ3JhdGUuYzo1Mjg6XFx0cHRlID0gaHVnZV9wdGVwX2dldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwKTtcXG5tbS9taWdyYXRlLmMtNTI5LVxcbi0tXFxubW0vbWluY29yZS5jPTI2PXN0YXRpYyBpbnQgbWluY29yZV9odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21pbmNvcmUuYy00Mi1cXHR9IGVsc2Uge1xcbm1tL21pbmNvcmUuYzo0MzpcXHRcXHRjb25zdCBwdGVfdCBwdGVwID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG5tbS9taW5jb3JlLmMtNDQtXFxuLS1cXG5tbS9tcHJvdGVjdC5jPTcwMz1zdGF0aWMgaW50IHByb3Rfbm9uZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9tcHJvdGVjdC5jLTcwNi17XFxubW0vbXByb3RlY3QuYzo3MDc6XFx0Y29uc3QgcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbm1tL21wcm90ZWN0LmMtNzA4LVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTEyLVxcdGlmIChpc192bV9odWdldGxiX3BhZ2UocHZtdy1cXHUwMDNldm1hKSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMTM6XFx0XFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctXFx1MDAzZXZtYS1cXHUwMDNldm1fbW0sIHB2bXctXFx1MDAzZWFkZHJlc3MsXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTE0LVxcdFxcdFxcdFxcdCAgICAgIHB2bXctXFx1MDAzZXB0ZSk7XFxuLS1cXG5tbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTIwOTktXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG5tbS9ybWFwLmM6MjEwMDpcXHRcXHRcXHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XFxubW0vcm1hcC5jLTIxMDEtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm1tL3JtYXAuYz0yNDE5PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNTA5LVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxubW0vcm1hcC5jOjI1MTA6XFx0XFx0XFx0cHRldmFsID0gaHVnZV9wdGVwX2dldChtbSwgYWRkcmVzcywgcHZtdy5wdGUpO1xcbm1tL3JtYXAuYy0yNTExLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTc3Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHNzaXplX3QgbWZpbGxfYXRvbWljX2h1Z2V0bGIoXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTg3NS1cXHRcXHRpZiAoIXVmZmRfZmxhZ3NfbW9kZV9pcyhmbGFncywgTUZJTExfQVRPTUlDX0NPTlRJTlVFKSkge1xcbm1tL3VzZXJmYXVsdGZkLmM6ODc2OlxcdFxcdFxcdGNvbnN0IHB0ZV90IHB0ZXAgPSBodWdlX3B0ZXBfZ2V0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUpO1xcbm1tL3VzZXJmYXVsdGZkLmMtODc3LVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0yNTE5PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9odWdlX211c3Rfd2FpdChzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTI1MzEtXFxubW0vdXNlcmZhdWx0ZmQuYzoyNTMyOlxcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLVxcdTAwM2V2bV9tbSwgdm1mLVxcdTAwM2VhZGRyZXNzLCBwdGVwKTtcXG5tbS91c2VyZmF1bHRmZC5jLTI1MzMtXFxuLS1cXG5tbS92bWFsbG9jLmM9MzY2PXN0YXRpYyB2b2lkIHZ1bm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zODMtXFx0XFx0XFx0fVxcbm1tL3ZtYWxsb2MuYzozODQ6XFx0XFx0XFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBzaXplKTtcXG5tbS92bWFsbG9jLmMtMzg1LVxcdFxcdFxcdGlmIChXQVJOX09OKGVuZCAtIGFkZHIgXFx1MDAzYyBzaXplKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDI6NDYuMDgxMDc5MDA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgzOTA4MDgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBIdWdlVExCIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gSHVnZVRMQiBwYWdlcywgc3BlY2lmaWNhbGx5IGZvciBhcm02NC4gSSBzZWUgaXQncyB0b3VjaGluZyBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCwgYW5kIHRoYXQgdGhlIGtleSBhZGRpdGlvbiBzZWVtcyB0byBiZSB0aGlzIG5ldyBmdW5jdGlvbiwgYGh1Z2VfcHRlcF9nZXRgLiBJJ20gaW1tZWRpYXRlbHkgbm90aWNpbmcgdGhhdCBpdCdzIGRlY2xhcmVkIGluIGJvdGggYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBhbmQgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oYC4gSGFuZyBvbiwgbGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMsIHRoZSBwYXRjaCBpdHNlbGYgKmFkZHMqIHRoZSBkZWNsYXJhdGlvbiB0byBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgOlxuXG5gYGBjXG4rcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XG5gYGBcblxuV2FpdCwgdGhlIGBncmVwYCByZXN1bHRzIHNob3cgdGhhdCBgaHVnZV9wdGVwX2dldGAgaXMgZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCBhbmQgaW4gb3RoZXIgYXJjaGl0ZWN0dXJlcy4gSW50ZXJlc3RpbmcuIEl0J3Mgbm90IGp1c3QgYW4gYXJtNjQgdGhpbmcsIHRoZW4uIFRoaXMgaXMgbWVhbnQgdG8gYmUgYSBnZW5lcmFsIG1lY2hhbmlzbS5cblxuTm93LCBJJ20gc2VlaW5nIGEgd2hvbGUgYnVuY2ggb2Ygb3RoZXIgZmlsZXMgYmVpbmcgbW9kaWZpZWQ6IGBtbS9taWdyYXRlLmNgLCBgbW0vbXByb3RlY3QuY2AsIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AsIGFuZCBgbW0vcm1hcC5jYC4gVGhleSdyZSBhbGwgdXNpbmcgdGhpcyBuZXcgYGh1Z2VfcHRlcF9nZXRgIGZ1bmN0aW9uLiBUaGF0IGdpdmVzIGEgYnJvYWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZC5cblxuT2theSwgYmFjayB0byBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYC4gSSBzZWUgdGhpcyBjaGFuZ2UgaW4gYGZpbmRfbnVtX2NvbnRpZ2A6XG5cbmBgYGNcbi1cdGlmICgocHRlX3QgKilwbWRwID09IHB0ZXApIHtcbitcdGlmICgocHRlX3QgKilQVFJfQUxJR05fRE9XTihwbWRwLCBzaXplb2YoKnBtZHApICogQ09OVF9QTURTKSA9PSBwdGVwKSB7XG5gYGBcblxuVGhhdCdzIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNoYW5nZS4gSXQgbG9va3MgbGlrZSBhbiBhbGlnbm1lbnQgY2hlY2sgaGFzIGJlZW4gYWRkZWQsIHVzaW5nIGBQVFJfQUxJR05fRE9XTmAgdG8gZW5zdXJlIHRoZSBjb21wYXJpc29uIGlzIGNvcnJlY3QgZ2l2ZW4gaG93IHBhZ2UgdGFibGVzIGFyZSBzdHJ1Y3R1cmVkLlxuXG5BbHJpZ2h0LCBsZXQncyBub3cgY2hlY2sgYG1tL21wcm90ZWN0LmNgIGZvciBhbnkgcmVmZXJlbmNlcyB0byBgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgLiBBaCwgeWVzLCB0aGVyZSBpdCBpcywgaXQncyBpbnNpZGUgYW4gYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBibG9jay4gU28gdGhhdCBjb25maXJtcyB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS5cblxuTm93LCBhIHF1aWNrIHRob3VnaHQgYWJvdXQgYG1tL21pZ3JhdGUuY2Ag4oCTIGlzIGBDT05GSUdfTUlHUkFUSU9OYCBhIGhhcmQgZGVwZW5kZW5jeT8gSXQncyBlc3NlbnRpYWwgdGhhdCBJIGNoZWNrLiBMZXQgbWUgdmVyaWZ5Li4uIFllcywgbGV0J3MgbG9vayBhdCBgbW0vbWlncmF0ZS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDI6NTIuOTIwMTYyODE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjE2ODg3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVtb3ZlX21pZ3JhdGlvbl9wdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ybWFwLmg9OTM0PWludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTkzNi1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo5Mzc6dm9pZCByZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3RydWN0IGZvbGlvICpzcmMsIHN0cnVjdCBmb2xpbyAqZHN0LFxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTkzOC1cXHRcXHRlbnVtIHR0dV9mbGFncyBmbGFncyk7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmg9MTM0PURFRklORV9FVkVOVChtaWdyYXRpb25fcHRlLCBzZXRfbWlncmF0aW9uX3B0ZSxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC0xMzgtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjEzOTpERUZJTkVfRVZFTlQobWlncmF0aW9uX3B0ZSwgcmVtb3ZlX21pZ3JhdGlvbl9wdGUsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTE0MC1cXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcHRlLCBpbnQgb3JkZXIpLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNDc0PXN0YXRpYyB2b2lkIHJlbWFwX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBuciwgaW50IGZsYWdzKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNDgxLVxcdGZvciAoOzspIHtcXG5tbS9odWdlX21lbW9yeS5jOjM0ODI6XFx0XFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKGZvbGlvLCBmb2xpbywgVFRVX1JNQVBfTE9DS0VEIHwgZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzQ4My1cXHRcXHRpICs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tLVxcbm1tL21pZ3JhdGUuYz0zMzg9c3RydWN0IHJtYXBfd2Fsa19hcmcge1xcbi0tXFxubW0vbWlncmF0ZS5jLTM0NS0gKi9cXG5tbS9taWdyYXRlLmM6MzQ2OnN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vbWlncmF0ZS5jLTM0Ny1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXFxuLS1cXG5tbS9taWdyYXRlLmMtNDQ0LVxcbm1tL21pZ3JhdGUuYzo0NDU6XFx0XFx0dHJhY2VfcmVtb3ZlX21pZ3JhdGlvbl9wdGUocHZtdy5hZGRyZXNzLCBwdGVfdmFsKHB0ZSksXFxubW0vbWlncmF0ZS5jLTQ0Ni1cXHRcXHRcXHRcXHRcXHQgICBjb21wb3VuZF9vcmRlcihuZXcpKTtcXG4tLVxcbm1tL21pZ3JhdGUuYy00NTgtICovXFxubW0vbWlncmF0ZS5jOjQ1OTp2b2lkIHJlbW92ZV9taWdyYXRpb25fcHRlcyhzdHJ1Y3QgZm9saW8gKnNyYywgc3RydWN0IGZvbGlvICpkc3QsXFxubW0vbWlncmF0ZS5jLTQ2MC1cXHRcXHRlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL21pZ3JhdGUuYy00NjctXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG5tbS9taWdyYXRlLmM6NDY4OlxcdFxcdC5ybWFwX29uZSA9IHJlbW92ZV9taWdyYXRpb25fcHRlLFxcbm1tL21pZ3JhdGUuYy00NjktXFx0XFx0LmFyZyA9IFxcdTAwMjZybWFwX3dhbGtfYXJnLFxcbi0tXFxubW0vbWlncmF0ZS5jPTExNjQ9c3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb191bmRvX3NyYyhzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xMTcwLVxcdGlmIChwYWdlX3dhc19tYXBwZWQpXFxubW0vbWlncmF0ZS5jOjExNzE6XFx0XFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKHNyYywgc3JjLCAwKTtcXG5tbS9taWdyYXRlLmMtMTE3Mi1cXHQvKiBEcm9wIGFuIGFub25fdm1hIHJlZmVyZW5jZSBpZiB3ZSB0b29rIG9uZSAqL1xcbi0tXFxubW0vbWlncmF0ZS5jPTEzNTc9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNDAwLVxcdCAqIFdoZW4gc3VjY2Vzc2Z1bCwgcHVzaCBkc3QgdG8gTFJVIGltbWVkaWF0ZWx5OiBzbyB0aGF0IGlmIGl0XFxubW0vbWlncmF0ZS5jOjE0MDE6XFx0ICogdHVybnMgb3V0IHRvIGJlIGFuIG1sb2NrZWQgcGFnZSwgcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgd2lsbFxcbm1tL21pZ3JhdGUuYy0xNDAyLVxcdCAqIGF1dG9tYXRpY2FsbHkgYnVpbGQgdXAgdGhlIGNvcnJlY3QgZHN0LVxcdTAwM2VtbG9ja19jb3VudCBmb3IgaXQuXFxuLS1cXG5tbS9taWdyYXRlLmMtMTQxMi1cXHRpZiAob2xkX2ZvbGlvX3N0YXRlIFxcdTAwMjYgRk9MSU9fV0FTX01BUFBFRClcXG5tbS9taWdyYXRlLmM6MTQxMzpcXHRcXHRyZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3JjLCBkc3QsIDApO1xcbm1tL21pZ3JhdGUuYy0xNDE0LVxcbi0tXFxubW0vbWlncmF0ZS5jPTE0NzM9c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNTQ1LVxcdGlmIChwYWdlX3dhc19tYXBwZWQpXFxubW0vbWlncmF0ZS5jOjE1NDY6XFx0XFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKHNyYywgIXJjID8gZHN0IDogc3JjLCB0dHUpO1xcbm1tL21pZ3JhdGUuYy0xNTQ3LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01NjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTYzNS1cXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MzY6XFx0XFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKGZvbGlvLCBmb2xpbywgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02MzctXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNjg9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9maW5hbGl6ZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTMwNi1cXHRcXHRcXHRmb2xpb19hZGRfbHJ1KGRzdCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzA3OlxcdFxcdHJlbW92ZV9taWdyYXRpb25fcHRlcyhzcmMsIGRzdCwgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzA4LVxcdFxcdGlmIChmYXVsdF9mb2xpbyAhPSBzcmMpXFxuLS1cXG5tbS9ybWFwLmM9MjkzMD1zdGF0aWMgc3RydWN0IGFub25fdm1hICpybWFwX3dhbGtfYW5vbl9sb2NrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtMjkzOC1cXHQvKlxcbm1tL3JtYXAuYzoyOTM5OlxcdCAqIE5vdGU6IHJlbW92ZV9taWdyYXRpb25fcHRlcygpIGNhbm5vdCB1c2UgZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKClcXG5tbS9ybWFwLmMtMjk0MC1cXHQgKiBiZWNhdXNlIHRoYXQgZGVwZW5kcyBvbiBmb2xpb19tYXBwZWQoKTsgYnV0IG5vdCBhbGwgaXRzIHVzYWdlc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0Mjo1OC4zODE4NjA4MDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTE3MjYzMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTWlncmF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBtZW1vcnkgbWlncmF0aW9uIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gVGhlIGNvZGUgSSdtIGZvY3VzaW5nIG9uLCBgbW0vbWlncmF0ZS5jYCwgaXMgb25seSBjb21waWxlZCB3aGVuIHRoZSBgQ09ORklHX01JR1JBVElPTmAgb3B0aW9uIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaG93IHRoaXMgZmlsZSBpbnRlZ3JhdGVzIGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQuIFRoZXJlZm9yZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG1tL01ha2VmaWxlYCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBkZXBlbmRlbmN5IGlzIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTY4LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDM6MDcuNDk5MTI3MTgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDgyOTkxNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmM9NjI3PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG1hX2J1Zl9nZXRmaWxlKHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jLTY3NC0gKlxcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmM6Njc1OiAqICAgIFVwIHRvIHRoaXMgc3RhZ2UgdGhlIGV4cG9ydGVyIGlzIHN0aWxsIGZyZWUgdG8gbWlncmF0ZSBvciByZWFsbG9jYXRlIHRoZVxcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMtNjc2LSAqICAgIGJhY2tpbmcgc3RvcmFnZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlPTcxPUFNREtGRF9GSUxFUyArPSAkKEFNREtGRF9QQVRIKS9rZmRfc3ZtLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlOjcyOlxcdFxcdCQoQU1ES0ZEX1BBVEgpL2tmZF9taWdyYXRlLm9cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9NYWtlZmlsZS03My1lbmRpZlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU9OTA9Z3QteSArPSBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS0xMjMtXFx0Z3QvaW50ZWxfbHJjLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlOjEyNDpcXHRndC9pbnRlbF9taWdyYXRlLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTEyNS1cXHRndC9pbnRlbF9tb2NzLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jPTE2Nj1zdGF0aWMgaW50IGk5MTVfZ2VtX2RtYWJ1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYy0xNzItXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jOjE3MzpcXHRpZiAoIWk5MTVfZ2VtX29iamVjdF9jYW5fbWlncmF0ZShvYmosIElOVEVMX1JFR0lPTl9TTUVNKSlcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG1hYnVmLmMtMTc0LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYy0xODAtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jOjE4MTpcXHRcXHRlcnIgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIFxcdTAwMjZ3dywgSU5URUxfUkVHSU9OX1NNRU0pO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYy0xODItXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYz02MzQ9Ym9vbCBpOTE1X2dlbV9vYmplY3RfaGFzX2lvbWVtKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMtNjU0LSAqIFRoaXMgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGFzIGEgaGVscGVyIGZvciBjaGVja2luZyB0aGVcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmM6NjU1OiAqIHBvc3NpYmlsaXR5IHRvIG1pZ3JhdGUgb2JqZWN0cyBhbmQgbWlnaHQgYmUgc2xpZ2h0bHkgbGVzcyBwZXJtaXNzaXZlXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTY1Ni0gKiB0aGFuIGk5MTVfZ2VtX29iamVjdF9taWdyYXRlKCkgd2hlbiBpdCBjb21lcyB0byBvYmplY3RzIHdpdGggdGhlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmM9NzI3PWludCBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTczMC17XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jOjczMTpcXHRyZXR1cm4gX19pOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIHd3LCBpZCwgb2JqLVxcdTAwM2VmbGFncyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTczMi19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmM9NzYxPWludCBfX2k5MTVfZ2VtX29iamVjdF9taWdyYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMtNzc1LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYzo3NzY6XFx0aWYgKCFpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2JqLCBpZCkpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTc3Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYy03ODQtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jOjc4NTpcXHRyZXR1cm4gb2JqLVxcdTAwM2VvcHMtXFx1MDAzZW1pZ3JhdGUob2JqLCBtciwgZmxhZ3MpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYy03ODYtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jPTkwND1zdGF0aWMgaW50IGk5MTVfdHRtX21pZ3JhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYy05MDcte1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYzo5MDg6XFx0cmV0dXJuIF9faTkxNV90dG1fbWlncmF0ZShvYmosIG1yLCBmbGFncyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jLTkwOS19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmM9MTA0Mj1zdGF0aWMgdm1fZmF1bHRfdCB2bV9mYXVsdF90dG0oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMtMTA5OC1cXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+STkxNV9CT19BTExPQ19HUFVfT05MWTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmM6MTA5OTpcXHRcXHRcXHRlcnIgPSBfX2k5MTVfdHRtX21pZ3JhdGUob2JqLCBtciwgZmxhZ3MpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYy0xMTAwLVxcdFxcdFxcdGlmICghZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM9NDY9c3RhdGljIGludCBpZ3RfY3JlYXRlX21pZ3JhdGUoc3RydWN0IGludGVsX2d0ICpndCwgZW51bSBpbnRlbF9yZWdpb25faWQgc3JjLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtNzItXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6NzM6XFx0XFx0ZXJyID0gaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUob2JqLCBcXHUwMDI2d3csIGRzdCk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtNzQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTgwLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jOjgxOlxcdFxcdGlmIChpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2JqLCBzcmMpKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTgyLVxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYz0xMDY9c3RhdGljIGludCBpZ3Rfc2FtZV9jcmVhdGVfbWlncmF0ZSh2b2lkICphcmcpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xMTAtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTExOnN0YXRpYyBpbnQgbG1lbV9wYWdlc19taWdyYXRlX29uZShzdHJ1Y3QgaTkxNV9nZW1fd3dfY3R4ICp3dyxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xMTItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtMTQwLVxcdGlmIChpOTE1X2dlbV9vYmplY3RfaXNfbG1lbShvYmopKSB7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTQxOlxcdFxcdGVyciA9IGk5MTVfZ2VtX29iamVjdF9taWdyYXRlKG9iaiwgd3csIElOVEVMX1JFR0lPTl9TTUVNKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xNDItXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtMTU5LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTYwOlxcdFxcdGVyciA9IGk5MTVfZ2VtX29iamVjdF9taWdyYXRlKG9iaiwgd3csIElOVEVMX1JFR0lPTl9MTUVNXzApO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTE2MS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYz0xODI9c3RhdGljIGludCBfX2lndF9sbWVtX3BhZ2VzX21pZ3JhdGUoc3RydWN0IGludGVsX2d0ICpndCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTI0OS1cXHRcXHRmb3JfaTkxNV9nZW1fd3coXFx1MDAyNnd3LCBlcnIsIHRydWUpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MjUwOlxcdFxcdFxcdGVyciA9IGxtZW1fcGFnZXNfbWlncmF0ZV9vbmUoXFx1MDAyNnd3LCBvYmosIHZtYSxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0yNTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBib3JrZWRfbWlncmF0ZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2JvLmM9MTI1PWk5MTVfYm9fZnJhbWVidWZmZXJfbG9va3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2JvLmMtMTM2LVxcdC8qIG9iamVjdCBpcyBiYWNrZWQgd2l0aCBMTUVNIGZvciBkaXNjcmV0ZSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYm8uYzoxMzc6XFx0aWYgKEhBU19MTUVNKGk5MTUpIFxcdTAwMjZcXHUwMDI2ICFpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2JqLCBJTlRFTF9SRUdJT05fTE1FTV8wKSkge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYm8uYy0xMzgtXFx0XFx0Lyogb2JqZWN0IGlzIFxcXCJyZW1vdGVcXFwiLCBub3QgaW4gbG9jYWwgbWVtb3J5ICovXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZiX3Bpbi5jPTE4PWludGVsX2ZiX3Bpbl90b19kcHQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpfb2JqLCBzdHJ1Y3QgaW50ZWxfZHB0ICpkcHQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZiX3Bpbi5jLTU1LVxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JOTE1X0JPX0FMTE9DX0dQVV9PTkxZO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmM6NTY6XFx0XFx0XFx0cmV0ID0gX19pOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIFxcdTAwMjZ3dywgSU5URUxfUkVHSU9OX0xNRU1fMCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZiX3Bpbi5jLTU3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmM9MTA3PWludGVsX2ZiX3Bpbl90b19nZ3R0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqX29iaixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmMtMTQ3LVxcdGVsc2UgaWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgSEFTX0xNRU0oaTkxNSkpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9mYl9waW4uYzoxNDg6XFx0XFx0cmV0ID0gaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUob2JqLCBcXHUwMDI2d3csIElOVEVMX1JFR0lPTl9MTUVNXzApO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmMtMTQ5LVxcdGlmICghcmV0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTM1PXhlLXkgKz0geGVfYmIubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtOTEtXFx0eGVfbWVtX3Bvb2wubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjkyOlxcdHhlX21pZ3JhdGUubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTkzLVxcdHhlX21taW8ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbWlncmF0ZS5jPTEyOD1zdGF0aWMgdTY0IHhlX21pZ3JhdGVfdnJhbV9vZnMoc3RydWN0IHhlX2RldmljZSAqeGUsIHU2NCBhZGRyLCBib29sIGlzX2NvbXBfcHRlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYy0xMzEtXFx0ICogUmVtb3ZlIHRoZSBEUEEgdG8gZ2V0IGEgY29ycmVjdCBvZmZzZXQgaW50byBpZGVudGl0eSB0YWJsZSBmb3IgdGhlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYzoxMzI6XFx0ICogbWlncmF0ZSBvZmZzZXRcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbWlncmF0ZS5jLTEzMy1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRlLmM9NDA3PXN0YXRpYyBib29sIHhlX21pZ3JhdGVfbmVlZHNfY2NzX2VtaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbWlncmF0ZS5jLTQxNy0gKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRlLmM6NDE4OiAqIFJldHVybjogXFx1MDAyNnhlX21pZ3JhdGUgb24gc3VjY2Vzcywgb3IgTlVMTCB3aGVuIG91dCBvZiBtZW1vcnkuXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYy00MTktICovXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNDU1PXN0YXRpYyB2b2lkIG9wX2NvbW1pdChzdHJ1Y3QgeGVfdm0gKnZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjUzMC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNTMxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVfbWlncmF0ZV9wdF91cGRhdGVfb3BzIG1pZ3JhdGVfb3BzID0ge1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1MzItXFx0LnBvcHVsYXRlID0geGVfdm1fcG9wdWxhdGVfcGd0YWJsZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1MzctI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjUzODpzdGF0aWMgY29uc3Qgc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlX29wcyBzdm1fdXNlcnB0cl9taWdyYXRlX29wcyA9IHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNTM5LVxcdC5wb3B1bGF0ZSA9IHhlX3ZtX3BvcHVsYXRlX3BndGFibGUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNTQzLSNlbHNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjU0NDpzdGF0aWMgY29uc3Qgc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlX29wcyBzdm1fdXNlcnB0cl9taWdyYXRlX29wcztcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNTQ1LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjU2OD14ZV9wdF91cGRhdGVfb3BzX3J1bihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgc3RydWN0IHhlX3ZtYV9vcHMgKnZvcHMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNTgwLVxcdFxcdC5vcHMgPSBwdF91cGRhdGVfb3BzLVxcdTAwM2VuZWVkc19zdm1fbG9jayA/XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjU4MTpcXHRcXHRcXHRcXHUwMDI2c3ZtX3VzZXJwdHJfbWlncmF0ZV9vcHMgOlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjI1ODI6XFx0XFx0XFx0XFx1MDAyNm1pZ3JhdGVfb3BzLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1ODMtXFx0XFx0LnZvcHMgPSB2b3BzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RyYWNlX2JvLmg9NjE9VFJBQ0VfRVZFTlQoeGVfYm9fbW92ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90cmFjZV9iby5oLTgxLVxcdFxcdCAgICksXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RyYWNlX2JvLmg6ODI6XFx0ICAgIFRQX3ByaW50ayhcXFwibW92ZV9sYWNrc19zb3VyY2U6JXMsIG1pZ3JhdGUgb2JqZWN0ICVwIFtzaXplICV6dV0gZnJvbSAlcyB0byAlcyBkZXZpY2VfaWQ6JXNcXFwiLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90cmFjZV9iby5oLTgzLVxcdFxcdCAgICAgIF9fZW50cnktXFx1MDAzZW1vdmVfbGFja3Nfc291cmNlID8gXFxcInllc1xcXCIgOiBcXFwibm9cXFwiLCBfX2VudHJ5LVxcdTAwM2VibywgX19lbnRyeS1cXHUwMDNlc2l6ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmM9MTI0MT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYWNsX3RjYW0uYzoxMjQyOm1seHN3X3NwX2FjbF90Y2FtX3ZjaHVua19taWdyYXRlX29uZShzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmMtMTI0My1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtbHhzd19zcF9hY2xfdGNhbV92Y2h1bmsgKnZjaHVuayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmM9MTMyMT1tbHhzd19zcF9hY2xfdGNhbV92Y2h1bmtfbWlncmF0ZV9hbGwoc3RydWN0IG1seHN3X3NwICptbHhzd19zcCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmMtMTM0MS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20odmNodW5rLCBcXHUwMDI2dnJlZ2lvbi1cXHUwMDNldmNodW5rX2xpc3QsIGxpc3QpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9hY2xfdGNhbS5jOjEzNDI6XFx0XFx0ZXJyID0gbWx4c3dfc3BfYWNsX3RjYW1fdmNodW5rX21pZ3JhdGVfb25lKG1seHN3X3NwLCB2Y2h1bmssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYWNsX3RjYW0uYy0xMzQzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHZyZWdpb24tXFx1MDAzZXJlZ2lvbixcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jPTYxMD1zdGF0aWMgdm9pZCBodl9pcnFfcmV0YXJnZXRfaW50ZXJydXB0KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTcwMC1cXHQgKiByZWZlciB0byBjcHVfZGlzYWJsZV9jb21tb24oKSAtXFx1MDAzZSBmaXh1cF9pcnFzKCkgLVxcdTAwM2VcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYzo3MDE6XFx0ICogaXJxX21pZ3JhdGVfYWxsX29mZl90aGlzX2NwdSgpIC1cXHUwMDNlIG1pZ3JhdGVfb25lX2lycSgpLlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTcwMi1cXHQgKlxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtNzA1LVxcdCAqIGhhdmUgYmVlbiBmcm96ZW4pLiBOb3RlOiB0aGUgY29ycmVjdCBhZmZpbml0eSBpbmZvIGlzIHN0aWxsIHVwZGF0ZWRcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYzo3MDY6XFx0ICogaW50byB0aGUgaXJxZGF0YSBkYXRhIHN0cnVjdHVyZSBpbiBtaWdyYXRlX29uZV9pcnEoKSAtXFx1MDAzZVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTcwNy1cXHQgKiBpcnFfZG9fc2V0X2FmZmluaXR5KCksIHNvIGxhdGVyIHdoZW4gdGhlIFZNIHJlc3VtZXMsXFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2NzcG11L2FybV9jc3BtdS5jPTEzMjg9c3RhdGljIGludCBhcm1fY3NwbXVfY3B1X3RlYXJkb3duKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxcbi0tXFxuZHJpdmVycy9wZXJmL2FybV9jc3BtdS9hcm1fY3NwbXUuYy0xMzM4LVxcbmRyaXZlcnMvcGVyZi9hcm1fY3NwbXUvYXJtX2NzcG11LmM6MTMzOTpcXHQvKiBDaG9vc2UgYSBuZXcgQ1BVIHRvIG1pZ3JhdGUgb3duZXJzaGlwIG9mIHRoZSBQTVUgdG8gKi9cXG5kcml2ZXJzL3BlcmYvYXJtX2NzcG11L2FybV9jc3BtdS5jLTEzNDAtXFx0ZHN0ID0gY3B1bWFza19hbnlfYW5kX2J1dChcXHUwMDI2Y3NwbXUtXFx1MDAzZWFzc29jaWF0ZWRfY3B1cyxcXG4tLVxcbmRyaXZlcnMvcGVyZi9udmlkaWFfdDQxMF9jMmNfcG11LmM9NzI2PXN0YXRpYyBpbnQgbnZfYzJjX3BtdV9jcHVfdGVhcmRvd24odW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfYzJjX3BtdS5jLTczNi1cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfYzJjX3BtdS5jOjczNzpcXHQvKiBDaG9vc2UgYSBuZXcgQ1BVIHRvIG1pZ3JhdGUgb3duZXJzaGlwIG9mIHRoZSBQTVUgdG8gKi9cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfYzJjX3BtdS5jLTczOC1cXHRkc3QgPSBjcHVtYXNrX2FueV9hbmRfYnV0KFxcdTAwMjZjMmNfcG11LVxcdTAwM2Vhc3NvY2lhdGVkX2NwdXMsXFxuLS1cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfY21lbV9sYXRlbmN5X3BtdS5jPTU0OT1zdGF0aWMgaW50IGNtZW1fbGF0X3BtdV9jcHVfdGVhcmRvd24odW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfY21lbV9sYXRlbmN5X3BtdS5jLTU1OS1cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfY21lbV9sYXRlbmN5X3BtdS5jOjU2MDpcXHQvKiBDaG9vc2UgYSBuZXcgQ1BVIHRvIG1pZ3JhdGUgb3duZXJzaGlwIG9mIHRoZSBQTVUgdG8gKi9cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfY21lbV9sYXRlbmN5X3BtdS5jLTU2MS1cXHRkc3QgPSBjcHVtYXNrX2FueV9hbmRfYnV0KFxcdTAwMjZjbWVtX2xhdF9wbXUtXFx1MDAzZWFzc29jaWF0ZWRfY3B1cyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX1ZJUlRJT19WRklPX1BDSSkgKz0gdmlydGlvLXZmaW8tcGNpLm9cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9NYWtlZmlsZTozOnZpcnRpby12ZmlvLXBjaS15IDo9IG1haW4ubyBtaWdyYXRlLm9cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9NYWtlZmlsZS00LXZpcnRpby12ZmlvLXBjaS0kKENPTkZJR19WSVJUSU9fVkZJT19QQ0lfQURNSU5fTEVHQUNZKSArPSBsZWdhY3lfaW8ub1xcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlLTktXFx0XFx0ZXh0ZW50c19zdGF0dXMubyBmaWxlLm8gZnNtYXAubyBmc3luYy5vIGhhc2gubyBpYWxsb2MubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZToxMDpcXHRcXHRpbmRpcmVjdC5vIGlubGluZS5vIGlub2RlLm8gaW9jdGwubyBtYmFsbG9jLm8gbWlncmF0ZS5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlLTExLVxcdFxcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg9ODQ4PXN0cnVjdCBpb21tdV9mYXVsdF9wYXJhbSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtODczLSAqXFxuaW5jbHVkZS9saW51eC9pb21tdS5oOjg3NDogKiBUT0RPOiBtaWdyYXRlIG90aGVyIHBlciBkZXZpY2UgZGF0YSBwb2ludGVycyB1bmRlciBpb21tdV9kZXZfZGF0YSwgZS5nLlxcbmluY2x1ZGUvbGludXgvaW9tbXUuaC04NzUtICpcXHRzdHJ1Y3QgaW9tbXVfZ3JvdXBcXHQqaW9tbXVfZ3JvdXA7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5Lmg9MTk9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgtNTQtI2RlZmluZSBNUE9MX01GX01PVkVfQUxMICgxXFx1MDAzY1xcdTAwM2MyKVxcdC8qIE1vdmUgZXZlcnkgcGFnZSB0byBjb25mb3JtIHRvIHBvbGljeSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaDo1NTojZGVmaW5lIE1QT0xfTUZfTEFaWVxcdCAoMVxcdTAwM2NcXHUwMDNjMylcXHQvKiBVTlNVUFBPUlRFRCBGTEFHOiBMYXp5IG1pZ3JhdGUgb24gZmF1bHQgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgtNTYtI2RlZmluZSBNUE9MX01GX0lOVEVSTkFMICgxXFx1MDAzY1xcdTAwM2M0KVxcdC8qIEludGVybmFsIGZsYWdzIHN0YXJ0IGhlcmUgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaC02Ny0jZGVmaW5lIE1QT0xfRl9TSEFSRUQgICgxIFxcdTAwM2NcXHUwMDNjIDApXFx0LyogaWRlbnRpZnkgc2hhcmVkIHBvbGljaWVzICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oOjY4OiNkZWZpbmUgTVBPTF9GX01PRlxcdCgxIFxcdTAwM2NcXHUwMDNjIDMpIC8qIHRoaXMgcG9saWN5IHdhbnRzIG1pZ3JhdGUgb24gZmF1bHQgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgtNjktI2RlZmluZSBNUE9MX0ZfTU9ST05cXHQoMSBcXHUwMDNjXFx1MDAzYyA0KSAvKiBNaWdyYXRlIE9uIHByb3Rub25lIFJlZmVyZW5jZSBPbiBOb2RlICovXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTI5OTU9c3RhdGljIGludCBjcHVzZXRfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTMwMjctXFx0ICogY3B1c2V0LmNwdXMgd2hlbiB0aGVyZSBhcmUgYWN0aXZlIHRhc2tzIGluc2lkZS4gV2hlbiB0aGF0IGhhcHBlbnMsXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzozMDI4OlxcdCAqIHdlIHNob3VsZCBhbGxvdyB0YXNrcyB0byBtaWdyYXRlIG91dCB3aXRob3V0IHNlY3VyaXR5IGNoZWNrIHRvIG1ha2VcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTMwMjktXFx0ICogc3VyZSB0aGV5IHdpbGwgYmUgYWJsZSB0byBydW4gYWZ0ZXIgbWlncmF0aW9uLlxcbi0tXFxua2VybmVsL2lycS9jcHVob3RwbHVnLmM9MjA9c3RhdGljIGlubGluZSBib29sIGlycV9uZWVkc19maXh1cChzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuLS1cXG5rZXJuZWwvaXJxL2NwdWhvdHBsdWcuYy01Mi1cXG5rZXJuZWwvaXJxL2NwdWhvdHBsdWcuYzo1MzpzdGF0aWMgYm9vbCBtaWdyYXRlX29uZV9pcnEoc3RydWN0IGlycV9kZXNjICpkZXNjKVxcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jLTU0LXtcXG4tLVxcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jPTE3MT12b2lkIGlycV9taWdyYXRlX2FsbF9vZmZfdGhpc19jcHUodm9pZClcXG4tLVxcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jLTE4MC1cXHRcXHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrLCBcXHUwMDI2ZGVzYy1cXHUwMDNlbG9jaykge1xcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jOjE4MTpcXHRcXHRcXHRhZmZpbml0eV9icm9rZW4gPSBtaWdyYXRlX29uZV9pcnEoZGVzYyk7XFxua2VybmVsL2lycS9jcHVob3RwbHVnLmMtMTgyLVxcdFxcdFxcdGlmIChhZmZpbml0eV9icm9rZW4gXFx1MDAyNlxcdTAwMjYgZGVzYy1cXHUwMDNlYWZmaW5pdHlfbm90aWZ5KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04OTE5PV9fYnBmX2tmdW5jIGJvb2wgc2N4X2JwZl9kc3FfbW92ZV90b19sb2NhbF9fX3YyKHU2NCBkc3FfaWQsIHU2NCBlbnFfZmxhZ3MsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTg5NDctXFx0XFx0ICogQSBzdWNjZXNzZnVsbHkgY29uc3VtZWQgdGFzayBjYW4gYmUgZGVxdWV1ZWQgYmVmb3JlIGl0IHN0YXJ0c1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODk0ODpcXHRcXHQgKiBydW5uaW5nIHdoaWxlIHRoZSBDUFUgaXMgdHJ5aW5nIHRvIG1pZ3JhdGUgb3RoZXIgZGlzcGF0Y2hlZFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODk0OS1cXHRcXHQgKiB0YXNrcy4gQnVtcCBucl90YXNrcyB0byB0ZWxsIGJhbGFuY2Vfb25lKCkgdG8gcmV0cnkgb24gZW1wdHlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MjY3Nj1ib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjc1Ni1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjI3NTc6XFx0LyogQWx3YXlzIGFsbG93IG1pZ3JhdGUgb24gcHJpdmF0ZSBmYXVsdHMgKi9cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI3NTgtXFx0aWYgKGNwdXBpZF9tYXRjaF9waWQocCwgbGFzdF9jcHVwaWQpKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0yODc3PXN0YXRpYyB2b2lkIHVwZGF0ZV9udW1hX3N0YXRzKHN0cnVjdCB0YXNrX251bWFfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI4OTYtXFx0XFx0aWYgKGZpbmRfaWRsZSBcXHUwMDI2XFx1MDAyNiBpZGxlX2NvcmUgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2ICFycS1cXHUwMDNlbnJfcnVubmluZyBcXHUwMDI2XFx1MDAyNiBpZGxlX2NwdShjcHUpKSB7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoyODk3OlxcdFxcdFxcdGlmIChSRUFEX09OQ0UocnEtXFx1MDAzZW51bWFfbWlncmF0ZV9vbikgfHxcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI4OTgtXFx0XFx0XFx0ICAgICFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgZW52LVxcdTAwM2VwLVxcdTAwM2VjcHVzX3B0cikpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTI5MTc9c3RhdGljIHZvaWQgdGFza19udW1hX2Fzc2lnbihzdHJ1Y3QgdGFza19udW1hX2VudiAqZW52LFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTIyLVxcdC8qIENoZWNrIGlmIHJ1bi1xdWV1ZSBwYXJ0IG9mIGFjdGl2ZSBOVU1BIGJhbGFuY2UuICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoyOTIzOlxcdGlmIChlbnYtXFx1MDAzZWJlc3RfY3B1ICE9IGVudi1cXHUwMDNlZHN0X2NwdSBcXHUwMDI2XFx1MDAyNiB4Y2hnKFxcdTAwMjZycS1cXHUwMDNlbnVtYV9taWdyYXRlX29uLCAxKSkge1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjkyNC1cXHRcXHRpbnQgY3B1O1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTM1LVxcdFxcdFxcdHJxID0gY3B1X3JxKGVudi1cXHUwMDNlZHN0X2NwdSk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoyOTM2OlxcdFxcdFxcdGlmICgheGNoZyhcXHUwMDI2cnEtXFx1MDAzZW51bWFfbWlncmF0ZV9vbiwgMSkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTM3LVxcdFxcdFxcdFxcdGdvdG8gYXNzaWduO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTUwLVxcdFxcdHJxID0gY3B1X3JxKGVudi1cXHUwMDNlYmVzdF9jcHUpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Mjk1MTpcXHRcXHRXUklURV9PTkNFKHJxLVxcdTAwM2VudW1hX21pZ3JhdGVfb24sIDApO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjk1Mi1cXHR9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTMwMDU9c3RhdGljIGJvb2wgdGFza19udW1hX2NvbXBhcmUoc3RydWN0IHRhc2tfbnVtYV9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzAxNy1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjMwMTg6XFx0aWYgKFJFQURfT05DRShkc3RfcnEtXFx1MDAzZW51bWFfbWlncmF0ZV9vbikpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0zMDE5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzI0OT1zdGF0aWMgaW50IHRhc2tfbnVtYV9taWdyYXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzM2OC1cXHRcXHRyZXQgPSBtaWdyYXRlX3Rhc2tfdG8ocCwgZW52LmJlc3RfY3B1KTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjMzNjk6XFx0XFx0V1JJVEVfT05DRShiZXN0X3JxLVxcdTAwM2VudW1hX21pZ3JhdGVfb24sIDApO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzM3MC1cXHRcXHRpZiAocmV0ICE9IDApXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTMzNzUtXFx0cmV0ID0gbWlncmF0ZV9zd2FwKHAsIGVudi5iZXN0X3Rhc2ssIGVudi5iZXN0X2NwdSwgZW52LnNyY19jcHUpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MzM3NjpcXHRXUklURV9PTkNFKGJlc3RfcnEtXFx1MDAzZW51bWFfbWlncmF0ZV9vbiwgMCk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYy0zMzc3LVxcbi0tXFxua2VybmVsL3NjaGVkL3J0LmM9MTg5Nj1zdGF0aWMgc3RydWN0IHJxICpmaW5kX2xvY2tfbG93ZXN0X3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9ydC5jLTE5NTUtICogSWYgdGhlIGN1cnJlbnQgQ1BVIGhhcyBtb3JlIHRoYW4gb25lIFJUIHRhc2ssIHNlZSBpZiB0aGUgbm9uXFxua2VybmVsL3NjaGVkL3J0LmM6MTk1NjogKiBydW5uaW5nIHRhc2sgY2FuIG1pZ3JhdGUgb3ZlciB0byBhIENQVSB0aGF0IGlzIHJ1bm5pbmcgYSB0YXNrXFxua2VybmVsL3NjaGVkL3J0LmMtMTk1Ny0gKiBvZiBsZXNzZXIgcHJpb3JpdHkuXFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0xMTM1PXN0cnVjdCBycSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjA5LSNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxMjEwOlxcdHVuc2lnbmVkIGludFxcdFxcdG51bWFfbWlncmF0ZV9vbjtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjExLSNlbmRpZlxcbi0tXFxubW0vTWFrZWZpbGU9OTc9b2JqLSQoQ09ORklHX01FTVRFU1QpXFx0XFx0Kz0gbWVtdGVzdC5vXFxubW0vTWFrZWZpbGU6OTg6b2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0gbWlncmF0ZS5vXFxubW0vTWFrZWZpbGUtOTktb2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxOTQtXFx0XFx0ICogSW4gY2FzZSB3ZSBjYW5ub3QgY2xlYXIgUGFnZUFub25FeGNsdXNpdmUoKSwgc3BsaXQgdGhlIFBNRFxcbm1tL2h1Z2VfbWVtb3J5LmM6MzE5NTpcXHRcXHQgKiBvbmx5IGFuZCBsZXQgdHJ5X3RvX21pZ3JhdGVfb25lKCkgZmFpbCBsYXRlci5cXG5tbS9odWdlX21lbW9yeS5jLTMxOTYtXFx0XFx0ICpcXG4tLVxcbm1tL2h1Z2V0bGIuYz03MTg1PXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MTg4LVxcbm1tL2h1Z2V0bGIuYzo3MTg5OlxcdGh1Z2V0bGJfY2dyb3VwX21pZ3JhdGUob2xkX2ZvbGlvLCBuZXdfZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy03MTkwLVxcdGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihuZXdfZm9saW8sIHJlYXNvbik7XFxuLS1cXG5tbS9ybWFwLmM9MjM5OD12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNDE4LSAqL1xcbm1tL3JtYXAuYzoyNDE5OnN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9ybWFwLmMtMjQyMC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jPTI3NDc9dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNzQ5LVxcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XFxubW0vcm1hcC5jOjI3NTA6XFx0XFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxcbm1tL3JtYXAuYy0yNzUxLVxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcbi0tXFxudG9vbHMvcGVyZi9wbXUtZXZlbnRzL2FyY2gvYXJtNjQvaGlzaWxpY29uL2hpcDA4L3VuY29yZS1oaGEuanNvbi0xNDgtXFx0ICAgIFxcXCJFdmVudE5hbWVcXFwiOiBcXFwic2Rpci1ob21lLW1pZ3JhdGVcXFwiLFxcbnRvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL2FybTY0L2hpc2lsaWNvbi9oaXAwOC91bmNvcmUtaGhhLmpzb246MTQ5OlxcdCAgICBcXFwiQnJpZWZEZXNjcmlwdGlvblxcXCI6IFxcXCJDb3VudCBvZiB0aGUgbnVtYmVyIG9mIEhIQSBTLURpciByZWFkIGhvbWUgbWlncmF0ZSBvcGVyYXRpb25zXFxcIixcXG50b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC9hcm02NC9oaXNpbGljb24vaGlwMDgvdW5jb3JlLWhoYS5qc29uLTE1MC1cXHQgICAgXFxcIlVuaXRcXFwiOiBcXFwiaGlzaV9zY2NsLGhoYVxcXCJcXG4tLVxcbnRvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL2FybTY0L2hpc2lsaWNvbi9oaXAwOC91bmNvcmUtaGhhLmpzb24tMTU0LVxcdCAgICBcXFwiRXZlbnROYW1lXFxcIjogXFxcImVkaXItaG9tZS1taWdyYXRlXFxcIixcXG50b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC9hcm02NC9oaXNpbGljb24vaGlwMDgvdW5jb3JlLWhoYS5qc29uOjE1NTpcXHQgICAgXFxcIkJyaWVmRGVzY3JpcHRpb25cXFwiOiBcXFwiQ291bnQgb2YgdGhlIG51bWJlciBvZiBISEEgRS1EaXIgcmVhZCBob21lIG1pZ3JhdGUgb3BlcmF0aW9uc1xcXCIsXFxudG9vbHMvcGVyZi9wbXUtZXZlbnRzL2FyY2gvYXJtNjQvaGlzaWxpY29uL2hpcDA4L3VuY29yZS1oaGEuanNvbi0xNTYtXFx0ICAgIFxcXCJVbml0XFxcIjogXFxcImhpc2lfc2NjbCxoaGFcXFwiXFxuLS1cXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weT05OT1jbGFzcyBSdW5xdWV1ZVNuYXBzaG90Olxcbi0tXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHktMTI1LVxcbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5OjEyNjpcXHRkZWYgbWlncmF0ZV9vdXQoc2VsZiwgb2xkKTpcXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weS0xMjctXFx0XFx0aWYgb2xkIG5vdCBpbiBzZWxmLnRhc2tzOlxcbi0tXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHk9MTYxPWNsYXNzIFRpbWVTbGljZTpcXG4tLVxcbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5LTE5NC1cXHRcXHRvbGRfcnEgPSBzZWxmLnByZXYucnFzW29sZF9jcHVdXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHk6MTk1OlxcdFxcdG91dF9ycSA9IG9sZF9ycS5taWdyYXRlX291dChuZXcpXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHktMTk2LVxcdFxcdHNlbGYucnFzW29sZF9jcHVdID0gb3V0X3JxXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQzOjEzLjMwNzQ0NTI2MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMDgzOTA3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IG9mIGB0cnlfdG9fbWlncmF0ZV9vbmVgKipcblxuT2theSwgc28gSSd2ZSBlc3RhYmxpc2hlZCB0aGF0IGBtbS9taWdyYXRlLmNgIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGltYWdlIHdoZW4gYENPTkZJR19NSUdSQVRJT05gIGlzIGVuYWJsZWQuIE15IG5leHQgcXVlc3Rpb24gaXM6IERvZXMgdGhlIGB0cnlfdG9fbWlncmF0ZV9vbmVgIGZ1bmN0aW9uLCBmb3VuZCBpbiBgbW0vcm1hcC5jYCwgYWxzbyBkZXBlbmQgb24gdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBtZW1vcnkgbWlncmF0aW9uLCBzbyBpdCB3b3VsZCBtYWtlIHNlbnNlIGlmIGl0IGRpZC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBtbS9ybWFwLmNgIGFuZCB2ZXJpZnkgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIEknbGwgZXhhbWluZSB0aGUgY29kZSBhcm91bmQgdGhlIGB0cnlfdG9fbWlncmF0ZV9vbmVgIGRlY2xhcmF0aW9uIGFuZCBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIHdpdGggYENPTkZJR19NSUdSQVRJT05gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM1MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQzOjIxLjMxNTg0MTgzNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxMjExODQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fbWlncmF0ZV9vbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTk0LVxcdFxcdCAqIEluIGNhc2Ugd2UgY2Fubm90IGNsZWFyIFBhZ2VBbm9uRXhjbHVzaXZlKCksIHNwbGl0IHRoZSBQTURcXG5tbS9odWdlX21lbW9yeS5jOjMxOTU6XFx0XFx0ICogb25seSBhbmQgbGV0IHRyeV90b19taWdyYXRlX29uZSgpIGZhaWwgbGF0ZXIuXFxubW0vaHVnZV9tZW1vcnkuYy0zMTk2LVxcdFxcdCAqXFxuLS1cXG5tbS9ybWFwLmM9MjM5OD12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNDE4LSAqL1xcbm1tL3JtYXAuYzoyNDE5OnN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9ybWFwLmMtMjQyMC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jPTI3NDc9dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNzQ5LVxcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XFxubW0vcm1hcC5jOjI3NTA6XFx0XFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxcbm1tL3JtYXAuYy0yNzUxLVxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0MzoyNy4xMjc5NzE0MjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1Nzc4NjM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBNaWdyYXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGB0cnlfdG9fbWlncmF0ZWAgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0J3MgcHJvdGVjdGVkIGJ5IGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgbGlrZSBgI2lmZGVmIENPTkZJR19NSUdSQVRJT05gIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB0aGF0IHdvdWxkIGNvbnRyb2wgaXRzIGluY2x1c2lvbiBiYXNlZCBvbiBhIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyB0aGUgZmlyc3QgdGhpbmcgSSdkIGNoZWNrLiBJdCdzIGEgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBhbmQgaXQncyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGJ1aWxkLXRpbWUgYmVoYXZpb3IgYW5kIHBvcnRhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk0NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQzOjMzLjM4NTc2MDk2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzNTMzMTEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fbWlncmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JtYXAuaD04NDU9aW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NDctXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODQ4OnZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg0OS12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKiwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTk0LVxcdFxcdCAqIEluIGNhc2Ugd2UgY2Fubm90IGNsZWFyIFBhZ2VBbm9uRXhjbHVzaXZlKCksIHNwbGl0IHRoZSBQTURcXG5tbS9odWdlX21lbW9yeS5jOjMxOTU6XFx0XFx0ICogb25seSBhbmQgbGV0IHRyeV90b19taWdyYXRlX29uZSgpIGZhaWwgbGF0ZXIuXFxubW0vaHVnZV9tZW1vcnkuYy0zMTk2LVxcdFxcdCAqXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMzNzY9c3RhdGljIHZvaWQgdW5tYXBfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzM5MS1cXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG5tbS9odWdlX21lbW9yeS5jOjMzOTI6XFx0XFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIHR0dV9mbGFncyk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMzkzLVxcdGVsc2VcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzQ3ND1zdGF0aWMgdm9pZCByZW1hcF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgbnIsIGludCBmbGFncylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzQ3Ny1cXG5tbS9odWdlX21lbW9yeS5jOjM0Nzg6XFx0LyogSWYgdW5tYXBfZm9saW8oKSB1c2VzIHRyeV90b19taWdyYXRlKCkgb24gZmlsZSwgcmVtb3ZlIHRoaXMgY2hlY2sgKi9cXG5tbS9odWdlX21lbW9yeS5jLTM0NzktXFx0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbi0tXFxubW0vbWlncmF0ZS5jPTEyMDc9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX3VubWFwKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTI3Ny1cXHQvKlxcbm1tL21pZ3JhdGUuYzoxMjc4OlxcdCAqIEJ5IHRyeV90b19taWdyYXRlKCksIHNyYy1cXHUwMDNlbWFwY291bnQgZ29lcyBkb3duIHRvIDAgaGVyZS4gSW4gdGhpcyBjYXNlLFxcbm1tL21pZ3JhdGUuYy0xMjc5LVxcdCAqIHdlIGNhbm5vdCBub3RpY2UgdGhhdCBhbm9uX3ZtYSBpcyBmcmVlZCB3aGlsZSB3ZSBtaWdyYXRlIGEgcGFnZS5cXG4tLVxcbm1tL21pZ3JhdGUuYy0xMzMxLVxcdFxcdFxcdCAgICAgICAhZm9saW9fdGVzdF9rc20oc3JjKSBcXHUwMDI2XFx1MDAyNiAhYW5vbl92bWEsIHNyYyk7XFxubW0vbWlncmF0ZS5jOjEzMzI6XFx0XFx0dHJ5X3RvX21pZ3JhdGUoc3JjLCBtb2RlID09IE1JR1JBVEVfQVNZTkMgPyBUVFVfQkFUQ0hfRkxVU0ggOiAwKTtcXG5tbS9taWdyYXRlLmMtMTMzMy1cXHRcXHRvbGRfZm9saW9fc3RhdGUgfD0gRk9MSU9fV0FTX01BUFBFRDtcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNDczPXN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTUzNy1cXG5tbS9taWdyYXRlLmM6MTUzODpcXHRcXHR0cnlfdG9fbWlncmF0ZShzcmMsIHR0dSk7XFxubW0vbWlncmF0ZS5jLTE1MzktXFx0XFx0cGFnZV93YXNfbWFwcGVkID0gMTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQxPXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTM5Ny1cXHRcXHQgKiBvcHRpbWlzYXRpb24gdG8gYXZvaWQgd2Fsa2luZyB0aGUgcm1hcCBsYXRlciB3aXRoXFxubW0vbWlncmF0ZV9kZXZpY2UuYzozOTg6XFx0XFx0ICogdHJ5X3RvX21pZ3JhdGUoKS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTM5OS1cXHRcXHQgKi9cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NTYwPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3VubWFwKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02MDgtXFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MDk6XFx0XFx0XFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIDApO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjEwLVxcbi0tXFxubW0vcm1hcC5jPTIzOTg9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXFxuLS1cXG5tbS9ybWFwLmMtMjQxOC0gKi9cXG5tbS9ybWFwLmM6MjQxOTpzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vcm1hcC5jLTI0MjAtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcXG4tLVxcbm1tL3JtYXAuYy0yNDM0LVxcdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcXG5tbS9ybWFwLmM6MjQzNTpcXHQgKiB0cnlfdG9fbWlncmF0ZSgpIG1heSByZXR1cm4gYmVmb3JlIGZvbGlvX21hcHBlZCgpIGhhcyBiZWNvbWUgZmFsc2UsXFxubW0vcm1hcC5jLTI0MzYtXFx0ICogaWYgcGFnZSB0YWJsZSBsb2NraW5nIGlzIHNraXBwZWQ6IHVzZSBUVFVfU1lOQyB0byB3YWl0IGZvciB0aGF0Llxcbi0tXFxubW0vcm1hcC5jLTI3MzktLyoqXFxubW0vcm1hcC5jOjI3NDA6ICogdHJ5X3RvX21pZ3JhdGUgLSB0cnkgdG8gcmVwbGFjZSBhbGwgcGFnZSB0YWJsZSBtYXBwaW5ncyB3aXRoIHN3YXAgZW50cmllc1xcbm1tL3JtYXAuYy0yNzQxLSAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIHJlcGxhY2UgcGFnZSB0YWJsZSBlbnRyaWVzIGZvclxcbi0tXFxubW0vcm1hcC5jLTI3NDYtICovXFxubW0vcm1hcC5jOjI3NDc6dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG5tbS9ybWFwLmMtMjc0OC17XFxubW0vcm1hcC5jLTI3NDktXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG5tbS9ybWFwLmM6Mjc1MDpcXHRcXHQucm1hcF9vbmUgPSB0cnlfdG9fbWlncmF0ZV9vbmUsXFxubW0vcm1hcC5jLTI3NTEtXFx0XFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQzOjM5LjMyMTE2OTgzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTcyMzczMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBNaWdyYXRpb24gYW5kIEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBtZW1vcnkgbWlncmF0aW9uIGFuZCBIdWdlVExCIHBhZ2VzLiBgdHJ5X3RvX21pZ3JhdGVgIGlzIGluIGBtbS9ybWFwLmNgLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgdGhhdCdzIGJhc2VsaW5lIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgIHJlc2lkZXMgaW4gYG1tL21pZ3JhdGUuY2AsIGJ1dCBvbmx5IGlmIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24sIG1lYW5pbmcgZW5hYmxpbmcgYENPTkZJR19NSUdSQVRJT05gIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuTXkgcHJpbWFyeSBmb2N1cywgdGhvdWdoLCBpcyBvbiBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIE5vdywgSSdtIHRoaW5raW5nLCBcIndoYXQgYWJvdXQgYENPTkZJR19BUk02NGA/XCIgSSBjYW4ndCBkaXJlY3RseSBzcGVjaWZ5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYnV0IGFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzPyBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgYG1tL21wcm90ZWN0LmNgIGhhcyBhbiBgI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VgIGd1YXJkLCBzbyB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgbW9kdWxlIHRvIGNvbnNpZGVyLiBBbHNvLCBpbiBgbW0vcGFnZV92bWFfbWFwcGVkLmNgLCB0aGVyZSdzIHRoZSBgaXNfdm1faHVnZXRsYl9wYWdlKHB2bXctXHUwMDNldm1hKWAgY2hlY2suXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoYXQgZnVuY3Rpb25zIGFyZSByZWFsbHkgY2VudHJhbCB0byB0aGlzIGFyZWEuIEknbSBmb2N1c2luZyBvbjpcblxuKiAgIGByZW1vdmVfbWlncmF0aW9uX3B0ZWBcbiogICBgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgXG4qICAgYGNoZWNrX3B0ZWBcbiogICBgdHJ5X3RvX3VubWFwX29uZWBcbiogICBgdHJ5X3RvX21pZ3JhdGVfb25lYFxuXG5BbmQgZmluYWxseSwgYGZpbmRfbnVtX2NvbnRpZ2AgLSB3aGljaCBpcyBhcmNoLXNwZWNpZmljIChpbiBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCkuIFdoaWxlIHRoaXMgaXMgYXJtNjQsIGl0J3Mgc3RpbGwgZ29vZCB0byBpbmNsdWRlLCBzbyBsZXQncyBjaGVjayB0aGF0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NjgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDM6NDUuMjkzNTQ3MDgxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjAzNDAyNzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfbnVtX2NvbnRpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9NjU9Ym9vbCBhcmNoX2h1Z2V0bGJfbWlncmF0aW9uX3N1cHBvcnRlZChzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTc3LVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzo3ODpzdGF0aWMgaW50IGZpbmRfbnVtX2NvbnRpZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy03OS1cXHRcXHRcXHQgICBwdGVfdCAqcHRlcCwgc2l6ZV90ICpwZ3NpemUpXFxuLS1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9MTE5PXB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuLS1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMTI3LVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzoxMjg6XFx0bmNvbnRpZyA9IGZpbmRfbnVtX2NvbnRpZyhtbSwgYWRkciwgcHRlcCwgXFx1MDAyNnBnc2l6ZSk7XFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTEyOS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmNvbnRpZzsgaSsrLCBwdGVwKyspIHtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz00NTM9dm9pZCBodWdlX3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00NjctXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjQ2ODpcXHRuY29udGlnID0gZmluZF9udW1fY29udGlnKG1tLCBhZGRyLCBwdGVwLCBcXHUwMDI2cGdzaXplKTtcXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNDY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0Mzo1MS40OTY5NTYzMjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0NzM1NjIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3Bvc2VkIEtlcm5lbCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaWRlbnRpZmllcyBzZXZlcmFsIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoOiBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgLCBgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgLCBgY2hlY2tfcHRlYCwgYHRyeV90b191bm1hcF9vbmVgLCBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYW5kIGBodWdlX3B0ZXBfZ2V0YC4gSSdtIGltbWVkaWF0ZWx5IG5vdGluZyB0aGF0IHdoaWxlIGBodWdlX3B0ZXBfZ2V0YCBpcyBnbG9iYWwsIHRoZSBvdGhlcnMgYXJlIHN0YXRpYyB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZXMuIFNwZWNpZmljYWxseTogYGNoZWNrX3B0ZWAgaXMgaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgYHRyeV90b191bm1hcF9vbmVgIGFuZCBgdHJ5X3RvX21pZ3JhdGVfb25lYCBhcmUgaW4gYG1tL3JtYXAuY2AsIGByZW1vdmVfbWlncmF0aW9uX3B0ZWAgcmVzaWRlcyBpbiBgbW0vbWlncmF0ZS5jYCwgYW5kIGBwcm90X25vbmVfaHVnZXRsYl9lbnRyeWAgaXMgZGVmaW5lZCBpbiBgbW0vbXByb3RlY3QuY2AuXG5cbkkgbmVlZCB0byBjb25maXJtIGBodWdlX3B0ZXBfZ2V0YCBpcyBpbmRlZWQgZ2xvYmFsLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQncyBpbiBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCBhbmQsIHllcywgaXQncyBnbG9iYWxseSBhY2Nlc3NpYmxlLlxuXG5UbyByZWNhcCwgdGhlIHRhcmdldGVkIGZ1bmN0aW9ucyBhcmU6XG4qICAgYHJlbW92ZV9taWdyYXRpb25fcHRlYFxuKiAgIGBwcm90X25vbmVfaHVnZXRsYl9lbnRyeWBcbiogICBgY2hlY2tfcHRlYFxuKiAgIGB0cnlfdG9fdW5tYXBfb25lYFxuKiAgIGB0cnlfdG9fbWlncmF0ZV9vbmVgXG4qICAgYGh1Z2VfcHRlcF9nZXRgXG5cblRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGh1Z2VfcHRlcF9nZXRgIGZvciByZWFkaW5nIGh1Z2UgcGFnZSBQVEVzIGFuZCB0aGUgc3Vic2VxdWVudCBtb2RpZmljYXRpb24gb2YgbXVsdGlwbGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAobWlncmF0aW9uLCBtcHJvdGVjdCwgcm1hcCwgcGFnZVxcX3ZtYVxcX21hcHBlZCkgdG8gdXNlIGl0IGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIGBwdGVwX2dldGAuIFRoZXJlJ3MgYWxzbyBhIG1lbnRpb24gb2YgYSBidWcgZml4IGluIGBmaW5kX251bV9jb250aWdgIGZvciBhcm02NC4gVGhlc2UgYXJlIGFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgd2l0aGluIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGZvciBmdXp6aW5nLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBNSUdSQVRJT05gIGFuZCBgSFVHRVRMQl9QQUdFYCBhcmUgdGhlIGtleSBjb250ZW5kZXJzLiBJIGNhbiBxdWlja2x5IGNvbmZpcm0gdGhhdCBgQ09ORklHX01JR1JBVElPTmAgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhcmUgaW5kZWVkIHRoZSBzdGFuZGFyZCBjb25maWcgbmFtZXMuIEFscmlnaHQsIHRoYXQncyBnb29kLiBOb3csIGxldCdzIHByb2NlZWQgdG8gZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1OTksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDM6NTguNTQ0MzE3Nzk3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTIyNjEwODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCX1BBR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cXHRib29sIFxcXCI2NGtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cXHRib29sIFxcXCIyNTZrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cXHRib29sIFxcXCIxTUJcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIjRNQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXFx0Ym9vbCBcXFwiNjRNQlxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5tbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy03MDgtXFxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy03MTAtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0NDowMy42NjY5MzQ1MzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYwMzI3NTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvICpIVUdFVExCX1BBR0UqIGlzIGluZGVlZCBkZWZpbmVkIHdpdGhpbiBgZnMvS2NvbmZpZ2AuIEdvb2QuIFRoYXQgY29uZmlybXMgaXQncyBhIGZpbGVzeXN0ZW0tcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiwgd2hpY2ggYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZy4gTm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIG9uIG15IG1pbmQgaXMsIGxldCdzIHNlZSBob3cgYE1JR1JBVElPTmAgaW50ZXJhY3RzIHdpdGggdGhhdOKApiB0aW1lIHRvIGxvb2sgaW50byB0aGF0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcGFnZSBtaWdyYXRpb24gYW5kIGh1Z2VwYWdlcyB0byBkZXRlcm1pbmUgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcyBjb25maWd1cmF0aW9uJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTE3NSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQ0OjEwLjI3MDIxMzQ2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNzEwNjE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlHUkFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTUtXFxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxcbm1tL0tjb25maWctNjk3LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDQ6MTUuNzk3MzI4Nzg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MjgyMzQxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgQ09ORklHX01JR1JBVElPTmAgaXMgaW5kZWVkIGRlZmluZWQgd2l0aGluIGBtbS9LY29uZmlnYCDigJMgY2hlY2suIE5vdywgbGV0J3MgZG8gYSBmaW5hbCBwYXNzIG9uIHRoaXMgcGF0Y2guIEl0J3MgdG91Y2hpbmcgYSBmYWlyIGFtb3VudCBvZiBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL21pZ3JhdGUuY2AsIGBtbS9tcHJvdGVjdC5jYCwgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgYG1tL3JtYXAuY2AsIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgcmVmYWN0b3IuIENvbnNpZGVyaW5nIHRoYXQsIGFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zLCBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkkndmUgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aDogYHJlbW92ZV9taWdyYXRpb25fcHRlYCwgYHByb3Rfbm9uZV9odWdldGxiX2VudHJ5YCwgYGNoZWNrX3B0ZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYHRyeV90b19taWdyYXRlX29uZWAsIGBodWdlX3B0ZXBfZ2V0YCwgYW5kIGBmaW5kX251bV9jb250aWdgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBkdXJpbmcgYW5hbHlzaXMgYW5kIGZ1enppbmcuXG5cblRoZSBmdW5kYW1lbnRhbCBjaGFuZ2UgaGVyZSBpcyBpbnRyb2R1Y2luZyBhbmQgdXNpbmcgYGh1Z2VfcHRlcF9nZXRgIHdoZXJlIGBwdGVwX2dldGAgd2FzIHByZXZpb3VzbHkgYmVpbmcgdXNlZCBpbiB0aGUgaHVnZXRsYiBwYWdlIHRhYmxlIGVudHJ5IGFjY2Vzcywgd2hpY2ggaGFzIGNvcmUgaW1wbGljYXRpb25zLCBhcyBpdCBzcGFucyB0aGUgbWlncmF0aW9uLCBybWFwLCBtcHJvdGVjdCwgYW5kIHBhZ2Vfdm1hX21hcHBlZCBjb2RlIHBhdGhzLiBUaGlzIGlzIGEgYmlnIGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBwYXRjaCBhbHNvIGFwcGVhcnMgdG8gYWRkcmVzcyBhbiBBUk02NC1zcGVjaWZpYyBidWcgaW4gYGZpbmRfbnVtX2NvbnRpZ2AuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcywgdG91Y2hpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIHRodXMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbkknbSBtYWtpbmcgc3VyZSBgSFVHRVRMQl9QQUdFYCBhbmQgYE1JR1JBVElPTmAgYXJlIGVuYWJsZWQgYXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhbnkgdGVzdCBidWlsZHMgc2luY2UgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIHRvIHRoaXMgcGF0Y2gncyBzY29wZS4gR2l2ZW4gdGhlIHdpZGVzcHJlYWQgaW1wYWN0IGFuZCB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhvcm91Z2hseSB0ZXN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDIwLCJPdXRwdXRUb2tlbnMiOjE5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0NDoyMi41MjU1NjYzMDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM0ODE1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVtb3ZlX21pZ3JhdGlvbl9wdGVcIixcbiAgICBcInByb3Rfbm9uZV9odWdldGxiX2VudHJ5XCIsXG4gICAgXCJjaGVja19wdGVcIixcbiAgICBcInRyeV90b191bm1hcF9vbmVcIixcbiAgICBcInRyeV90b19taWdyYXRlX29uZVwiLFxuICAgIFwiaHVnZV9wdGVwX2dldFwiLFxuICAgIFwiZmluZF9udW1fY29udGlnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgaHVnZXRsYiBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIHJlYWQgYnkgaW50cm9kdWNpbmcgYW5kIHVzaW5nIGBodWdlX3B0ZXBfZ2V0YCBpbnN0ZWFkIG9mIGBwdGVwX2dldGAgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgaW5jbHVkaW5nIG1pZ3JhdGlvbiwgcm1hcCwgbXByb3RlY3QsIGFuZCBwYWdlX3ZtYV9tYXBwZWQuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYGZpbmRfbnVtX2NvbnRpZ2AgZm9yIGFybTY0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCX1BBR0VcIixcbiAgICBcIk1JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlbW92ZV9taWdyYXRpb25fcHRlXCIsXG4gICAgXCJwcm90X25vbmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiY2hlY2tfcHRlXCIsXG4gICAgXCJ0cnlfdG9fdW5tYXBfb25lXCIsXG4gICAgXCJ0cnlfdG9fbWlncmF0ZV9vbmVcIixcbiAgICBcImh1Z2VfcHRlcF9nZXRcIixcbiAgICBcImZpbmRfbnVtX2NvbnRpZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGh1Z2V0bGIgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSByZWFkIGJ5IGludHJvZHVjaW5nIGFuZCB1c2luZyBgaHVnZV9wdGVwX2dldGAgaW5zdGVhZCBvZiBgcHRlcF9nZXRgIGFjcm9zcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGluY2x1ZGluZyBtaWdyYXRpb24sIHJtYXAsIG1wcm90ZWN0LCBhbmQgcGFnZV92bWFfbWFwcGVkLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBmaW5kX251bV9jb250aWdgIGZvciBhcm02NC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqnvp9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 12:27:29 +0000 UTC FinishedAt: 2026-07-03 12:44:25 +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": "6476418cb871288d93c0241d94793c181b61d033", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE", "MIGRATION" ], "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": "6476418cb871288d93c0241d94793c181b61d033", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLB_PAGE", "MIGRATION" ], "series_id": "ff6e67cd-e960-43ad-ab95-8bde17ac4f81" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "remove_migration_pte", "prot_none_hugetlb_entry", "check_pte", "try_to_unmap_one", "try_to_migrate_one", "huge_ptep_get", "find_num_contig" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZW1vdmVfbWlncmF0aW9uX3B0ZSYjMzQ7LAogICAgJiMzNDtwcm90X25vbmVfaHVnZXRsYl9lbnRyeSYjMzQ7LAogICAgJiMzNDtjaGVja19wdGUmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fbWlncmF0ZV9vbmUmIzM0OywKICAgICYjMzQ7aHVnZV9wdGVwX2dldCYjMzQ7LAogICAgJiMzNDtmaW5kX251bV9jb250aWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgaHVnZXRsYiBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIHJlYWQgYnkgaW50cm9kdWNpbmcgYW5kIHVzaW5nIGBodWdlX3B0ZXBfZ2V0YCBpbnN0ZWFkIG9mIGBwdGVwX2dldGAgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgaW5jbHVkaW5nIG1pZ3JhdGlvbiwgcm1hcCwgbXByb3RlY3QsIGFuZCBwYWdlX3ZtYV9tYXBwZWQuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYGZpbmRfbnVtX2NvbnRpZ2AgZm9yIGFybTY0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE1YTllMGQwYmJlMTNhMzU3NDA0MjJhZGY0MDc4YmM4NjIyZjVlYTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjQyOjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuaW5kZXggMzA3NzJhOTA5YWVhM2UuLjhlNzk5YzFmZTBhYTY5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbkBAIC04Nyw3ICYjNDM7ODcsNyBAQCBzdGF0aWMgaW50IGZpbmRfbnVtX2NvbnRpZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gXHRwdWRwID0gcHVkX29mZnNldChwNGRwLCBhZGRyKTtcbiBcdHBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuLVx0aWYgKChwdGVfdCAqKXBtZHAgPT0gcHRlcCkge1xuJiM0MztcdGlmICgocHRlX3QgKilQVFJfQUxJR05fRE9XTihwbWRwLCBzaXplb2YoKnBtZHApICogQ09OVF9QTURTKSA9PSBwdGVwKSB7XG4gXHRcdCpwZ3NpemUgPSBQTURfU0laRTtcbiBcdFx0cmV0dXJuIENPTlRfUE1EUztcbiBcdH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uNjk5NmQwMmFjZjE3MTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xMjYxLDYgJiM0MzsxMjYxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY291bnRfc3ViKGxvbmcgbCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIH1cbiBcbiYjNDM7cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4ge1xuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggZDliMjM5MDlkNzE2YzYuLmM2NWYwZjQzZGY3ZWJiIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC0zNzEsNyAmIzQzOzM3MSwxMSBAQCBzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gI2VuZGlmXG4tXHRcdG9sZF9wdGUgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcbiYjNDM7XHRcdFx0b2xkX3B0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBwdm13LmFkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHRcdHB2bXcucHRlKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0b2xkX3B0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbiBcdFx0aWYgKHJtYXBfd2Fsa19hcmctXHUwMDNlbWFwX3VudXNlZF90b196ZXJvcGFnZSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHRyeV90b19tYXBfdW51c2VkX3RvX3plcm9wYWdlKFx1MDAyNnB2bXcsIGZvbGlvLCBvbGRfcHRlLCBpZHgpKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL21tL21wcm90ZWN0LmMgYi9tbS9tcHJvdGVjdC5jXG5pbmRleCA5Y2JmOTMyYjAyOGNmOS4uNjM2MGQ4YTM3ODAyMzQgMTAwNjQ0XG4tLS0gYS9tbS9tcHJvdGVjdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tcHJvdGVjdC5jXG5AQCAtNjk5LDE0ICYjNDM7Njk5LDIwIEBAIHN0YXRpYyBpbnQgcHJvdF9ub25lX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdDAgOiAtRUFDQ0VTO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcbiBzdGF0aWMgaW50IHByb3Rfbm9uZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBtbV93YWxrICp3YWxrKVxuIHtcbi1cdHJldHVybiBwZm5fbW9kaWZ5X2FsbG93ZWQocHRlX3BmbihwdGVwX2dldChwdGUpKSxcbi1cdFx0XHRcdCAgKihwZ3Byb3RfdCAqKSh3YWxrLVx1MDAzZXByaXZhdGUpKSA/XG4tXHRcdDAgOiAtRUFDQ0VTO1xuJiM0MztcdGNvbnN0IHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuJiM0MztcbiYjNDM7XHRpZiAocGZuX21vZGlmeV9hbGxvd2VkKHB0ZV9wZm4oZW50cnkpLCAqKHBncHJvdF90ICopKHdhbGstXHUwMDNlcHJpdmF0ZSkpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FQUNDRVNTO1xuIH1cbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBwcm90X25vbmVfaHVnZXRsYl9lbnRyeVx0TlVMTFxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgaW50IHByb3Rfbm9uZV90ZXN0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0LFxuIFx0XHRcdCAgc3RydWN0IG1tX3dhbGsgKndhbGspXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuaW5kZXggMmNjYmFiZmIyY2MxN2EuLjE4ZTFkMzQxZjQ2M2M5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV92bWFfbWFwcGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5AQCAtMTA3LDcgJiM0MzsxMDcsMTMgQEAgc3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLFxuIHN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuO1xuLVx0cHRlX3QgcHRlbnQgPSBwdGVwX2dldChwdm13LVx1MDAzZXB0ZSk7XG4mIzQzO1x0cHRlX3QgcHRlbnQ7XG4mIzQzO1xuJiM0MztcdGlmIChpc192bV9odWdldGxiX3BhZ2UocHZtdy1cdTAwM2V2bWEpKVxuJiM0MztcdFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctXHUwMDNldm1hLVx1MDAzZXZtX21tLCBwdm13LVx1MDAzZWFkZHJlc3MsXG4mIzQzO1x0XHRcdFx0ICAgICAgcHZtdy1cdTAwM2VwdGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHB0ZW50ID0gcHRlcF9nZXQocHZtdy1cdTAwM2VwdGUpO1xuIFxuIFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKSB7XG4gXHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCAxYzc3ZDVkYzA2ZTlmYS4uZWE0YWQ1ZTY2MmY3ZGIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuY1xuQEAgLTIwOTUsMTQgJiM0MzsyMDk1LDE5IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVuZXhwZWN0ZWQgUE1ELW1hcHBlZCBUSFA/ICovXG4gXHRcdFZNX0JVR19PTl9GT0xJTyghcHZtdy5wdGUsIGZvbGlvKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0XG4tXHRcdCAqIGFjdHVhbGx5IG1hcCBwYWdlcy5cbi1cdFx0ICovXG4tXHRcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbiYjNDM7XHRcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuJiM0MztcdFx0XHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4mIzQzO1x0XHR9XG4gXHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbiBcdFx0XHRwZm4gPSBwdGVfcGZuKHB0ZXZhbCk7XG4gXHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcyxcbiYjNDM7XHRcdFx0ICogdGhhdCBhY3R1YWxseSBtYXAgcGFnZXMuXG4mIzQzO1x0XHRcdCAqL1xuIFx0XHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGV2YWwpO1xuIFxuIFx0XHRcdHBmbiA9IHNvZnRsZWFmX3RvX3BmbihlbnRyeSk7XG5AQCAtMjExMCw3ICYjNDM7MjExNSw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdH1cbiBcbiBcdFx0c3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpO1xuLVx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7XG4gXG5AQCAtMjUwMSwxNCAmIzQzOzI1MDUsMTkgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQvKiBVbmV4cGVjdGVkIFBNRC1tYXBwZWQgVEhQPyAqL1xuIFx0XHRWTV9CVUdfT05fRk9MSU8oIXB2bXcucHRlLCBmb2xpbyk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdFxuLVx0XHQgKiBhY3R1YWxseSBtYXAgcGFnZXMuXG4tXHRcdCAqL1xuLVx0XHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4mIzQzO1x0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuJiM0MztcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbiYjNDM7XHRcdFx0cHRldmFsID0gaHVnZV9wdGVwX2dldChtbSwgYWRkcmVzcywgcHZtdy5wdGUpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuJiM0MztcdFx0fVxuIFx0XHRpZiAobGlrZWx5KHB0ZV9wcmVzZW50KHB0ZXZhbCkpKSB7XG4gXHRcdFx0cGZuID0gcHRlX3BmbihwdGV2YWwpO1xuIFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBIYW5kbGUgUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsXG4mIzQzO1x0XHRcdCAqIHRoYXQgYWN0dWFsbHkgbWFwIHBhZ2VzLlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKTtcbiBcbiBcdFx0XHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xuQEAgLTI1MTYsNyAmIzQzOzI1MjUsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdH1cbiBcbiBcdFx0c3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpO1xuLVx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbW92ZV9taWdyYXRpb25fcHRlJiMzNDssCiAgICAmIzM0O3Byb3Rfbm9uZV9odWdldGxiX2VudHJ5JiMzNDssCiAgICAmIzM0O2NoZWNrX3B0ZSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fdW5tYXBfb25lJiMzNDssCiAgICAmIzM0O3RyeV90b19taWdyYXRlX29uZSYjMzQ7LAogICAgJiMzNDtodWdlX3B0ZXBfZ2V0JiMzNDssCiAgICAmIzM0O2ZpbmRfbnVtX2NvbnRpZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGhvdyBodWdldGxiIHBhZ2UgdGFibGUgZW50cmllcyBhcmUgcmVhZCBieSBpbnRyb2R1Y2luZyBhbmQgdXNpbmcgYGh1Z2VfcHRlcF9nZXRgIGluc3RlYWQgb2YgYHB0ZXBfZ2V0YCBhY3Jvc3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBpbmNsdWRpbmcgbWlncmF0aW9uLCBybWFwLCBtcHJvdGVjdCwgYW5kIHBhZ2Vfdm1hX21hcHBlZC4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgZmluZF9udW1fY29udGlnYCBmb3IgYXJtNjQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNWE5ZTBkMGJiZTEzYTM1NzQwNDIyYWRmNDA3OGJjODYyMmY1ZWE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAxMjo0MjozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCAzMDc3MmE5MDlhZWEzZS4uOGU3OTljMWZlMGFhNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTg3LDcgJiM0Mzs4Nyw3IEBAIHN0YXRpYyBpbnQgZmluZF9udW1fY29udGlnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJcDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7CiAJcHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7CiAJcG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7Ci0JaWYgKChwdGVfdCAqKXBtZHAgPT0gcHRlcCkgewomIzQzOwlpZiAoKHB0ZV90ICopUFRSX0FMSUdOX0RPV04ocG1kcCwgc2l6ZW9mKCpwbWRwKSAqIENPTlRfUE1EUykgPT0gcHRlcCkgewogCQkqcGdzaXplID0gUE1EX1NJWkU7CiAJCXJldHVybiBDT05UX1BNRFM7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAyYWJhZjk5MzIxZTkwZC4uNjk5NmQwMmFjZjE3MTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0xMjYxLDYgJiM0MzsxMjYxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY291bnRfc3ViKGxvbmcgbCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiB9CiAKJiM0MztwdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKJiM0MzsKIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggZDliMjM5MDlkNzE2YzYuLmM2NWYwZjQzZGY3ZWJiIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC0zNzEsNyAmIzQzOzM3MSwxMSBAQCBzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJY29udGludWU7CiAJCX0KICNlbmRpZgotCQlvbGRfcHRlID0gcHRlcF9nZXQocHZtdy5wdGUpOwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpCiYjNDM7CQkJb2xkX3B0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLSZndDt2bV9tbSwgcHZtdy5hZGRyZXNzLAomIzQzOwkJCQkJCXB2bXcucHRlKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlvbGRfcHRlID0gcHRlcF9nZXQocHZtdy5wdGUpOwogCQlpZiAocm1hcF93YWxrX2FyZy0mZ3Q7bWFwX3VudXNlZF90b196ZXJvcGFnZSAmYW1wOyZhbXA7CiAJCSAgICB0cnlfdG9fbWFwX3VudXNlZF90b196ZXJvcGFnZSgmYW1wO3B2bXcsIGZvbGlvLCBvbGRfcHRlLCBpZHgpKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuYwppbmRleCA5Y2JmOTMyYjAyOGNmOS4uNjM2MGQ4YTM3ODAyMzQgMTAwNjQ0Ci0tLSBhL21tL21wcm90ZWN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbXByb3RlY3QuYwpAQCAtNjk5LDE0ICYjNDM7Njk5LDIwIEBAIHN0YXRpYyBpbnQgcHJvdF9ub25lX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCTAgOiAtRUFDQ0VTOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIHN0YXRpYyBpbnQgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzaywKIAkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCwKIAkJCQkgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKIHsKLQlyZXR1cm4gcGZuX21vZGlmeV9hbGxvd2VkKHB0ZV9wZm4ocHRlcF9nZXQocHRlKSksCi0JCQkJICAqKHBncHJvdF90ICopKHdhbGstJmd0O3ByaXZhdGUpKSA/Ci0JCTAgOiAtRUFDQ0VTOwomIzQzOwljb25zdCBwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay0mZ3Q7bW0sIGFkZHIsIHB0ZSk7CiYjNDM7CiYjNDM7CWlmIChwZm5fbW9kaWZ5X2FsbG93ZWQocHRlX3BmbihlbnRyeSksICoocGdwcm90X3QgKikod2Fsay0mZ3Q7cHJpdmF0ZSkpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJldHVybiAtRUFDQ0VTUzsKIH0KJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnkJTlVMTAomIzQzOyNlbmRpZgogCiBzdGF0aWMgaW50IHByb3Rfbm9uZV90ZXN0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0LAogCQkJICBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKZGlmZiAtLWdpdCBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jIGIvbW0vcGFnZV92bWFfbWFwcGVkLmMKaW5kZXggMmNjYmFiZmIyY2MxN2EuLjE4ZTFkMzQxZjQ2M2M5IDEwMDY0NAotLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuYwpAQCAtMTA3LDcgJiM0MzsxMDcsMTMgQEAgc3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLAogc3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47Ci0JcHRlX3QgcHRlbnQgPSBwdGVwX2dldChwdm13LSZndDtwdGUpOwomIzQzOwlwdGVfdCBwdGVudDsKJiM0MzsKJiM0MzsJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZShwdm13LSZndDt2bWEpKQomIzQzOwkJcHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctJmd0O3ZtYS0mZ3Q7dm1fbW0sIHB2bXctJmd0O2FkZHJlc3MsCiYjNDM7CQkJCSAgICAgIHB2bXctJmd0O3B0ZSk7CiYjNDM7CWVsc2UKJiM0MzsJCXB0ZW50ID0gcHRlcF9nZXQocHZtdy0mZ3Q7cHRlKTsKIAogCWlmIChwdm13LSZndDtmbGFncyAmYW1wOyBQVk1XX01JR1JBVElPTikgewogCQljb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpOwpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDFjNzdkNWRjMDZlOWZhLi5lYTRhZDVlNjYyZjdkYiAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMjA5NSwxNCAmIzQzOzIwOTUsMTkgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJLyogVW5leHBlY3RlZCBQTUQtbWFwcGVkIFRIUD8gKi8KIAkJVk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pOwogCi0JCS8qCi0JCSAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdAotCQkgKiBhY3R1YWxseSBtYXAgcGFnZXMuCi0JCSAqLwotCQlwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7CiYjNDM7CQlhZGRyZXNzID0gcHZtdy5hZGRyZXNzOwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKJiM0MzsJCQlwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTsKJiM0MzsJCX0KIAkJaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkgewogCQkJcGZuID0gcHRlX3BmbihwdGV2YWwpOwogCQl9IGVsc2UgewomIzQzOwkJCS8qCiYjNDM7CQkJICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLAomIzQzOwkJCSAqIHRoYXQgYWN0dWFsbHkgbWFwIHBhZ2VzLgomIzQzOwkJCSAqLwogCQkJY29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCk7CiAKIAkJCXBmbiA9IHNvZnRsZWFmX3RvX3BmbihlbnRyeSk7CkBAIC0yMTEwLDcgJiM0MzsyMTE1LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJfQogCiAJCXN1YnBhZ2UgPSBmb2xpb19wYWdlKGZvbGlvLCBwZm4gLSBmb2xpb19wZm4oZm9saW8pKTsKLQkJYWRkcmVzcyA9IHB2bXcuYWRkcmVzczsKIAkJYW5vbl9leGNsdXNpdmUgPSBmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsKIAkJCQkgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7CiAKQEAgLTI1MDEsMTQgJiM0MzsyNTA1LDE5IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJLyogVW5leHBlY3RlZCBQTUQtbWFwcGVkIFRIUD8gKi8KIAkJVk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pOwogCi0JCS8qCi0JCSAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdAotCQkgKiBhY3R1YWxseSBtYXAgcGFnZXMuCi0JCSAqLwotCQlwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7CiYjNDM7CQlhZGRyZXNzID0gcHZtdy5hZGRyZXNzOwomIzQzOwkJaWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHsKJiM0MzsJCQlwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTsKJiM0MzsJCX0KIAkJaWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkgewogCQkJcGZuID0gcHRlX3BmbihwdGV2YWwpOwogCQl9IGVsc2UgewomIzQzOwkJCS8qCiYjNDM7CQkJICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLAomIzQzOwkJCSAqIHRoYXQgYWN0dWFsbHkgbWFwIHBhZ2VzLgomIzQzOwkJCSAqLwogCQkJY29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCk7CiAKIAkJCXBmbiA9IHNvZnRsZWFmX3RvX3BmbihlbnRyeSk7CkBAIC0yNTE2LDcgJiM0MzsyNTI1LDYgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl9CiAKIAkJc3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpOwotCQlhZGRyZXNzID0gcHZtdy5hZGRyZXNzOwogCQlhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOwogCQkJCSBQYWdlQW5vbkV4Y2x1c2l2ZShzdWJwYWdlKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTc1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIEh1Z2V0bGIgUGFnZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIGBwdGVwX2dldGAgd2l0aCBodWdldGxiIHBhZ2VzLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHJldm9sdmVzIGFyb3VuZCBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiwgYGh1Z2VfcHRlcF9nZXRgLCBhbmQgdGhlbiBzdHJhdGVnaWNhbGx5IHJlcGxhY2luZyBjYWxscyB0byBgcHRlcF9nZXRgIHdpdGggaXQgaW4gYSBmZXcga2V5IGFyZWFzIG9mIHRoZSBrZXJuZWwuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBtbS9taWdyYXRlLmNgIChzcGVjaWZpY2FsbHkgYHJlbW92ZV9taWdyYXRpb25fcHRlYCksIGBtbS9tcHJvdGVjdC5jYCAoYHByb3Rfbm9uZV9odWdldGxiX2VudHJ5YCksIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AgKGBjaGVja19wdGVgKSwgYW5kIGBtbS9ybWFwLmNgIChgdHJ5X3RvX3VubWFwX29uZWAgYW5kIGB0cnlfdG9fbWlncmF0ZV9vbmVgKS4gVGhvc2UgYXJlIGRlZmluaXRlbHkgY3JpdGljYWwgcGFydHMgb2YgbWVtb3J5IG1hbmFnZW1lbnQuCgpUaGUgY29kZSBhbHNvIG1vZGlmaWVzIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLiBUaGF0JiMzOTtzIGEgYml0IG1vcmUgdGFyZ2V0ZWQsIGJ1dCBzdGlsbCBpbmRpY2F0ZXMgYSBjaGFuZ2UgdG8gY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoYXQgYFBUUl9BTElHTl9ET1dOYCBjaGFuZ2UuIEl0JiMzOTtzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgYWx0ZXJhdGlvbiB0byBob3cgUFRFcyBhcmUgYWNjZXNzZWQgZm9yIGh1Z2V0bGIgcGFnZXMgb24gYXJtNjQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB2ZXJ5IGNsb3NlbHkgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFsaWdubWVudC4KCkdpdmVuIHRoZXNlIGNoYW5nZXMsIHRoaXMgaXMgYWJzb2x1dGVseSBzb21ldGhpbmcgdGhhdCBkZW1hbmRzIGZ1enppbmcuIEFueSBtb2RpZmljYXRpb24gdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGVzcGVjaWFsbHkgaHVnZXRsYiwgbWlncmF0aW9uLCBybWFwLCBhbmQgbXByb3RlY3QsIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IENPTkZJRyBvcHRpb25zIHRvIGVuc3VyZSBwcm9wZXIgZnV6emluZyBjb3ZlcmFnZS4gSSBrbm93IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhIGdpdmVuOyB3ZSBuZWVkIHRoYXQgZW5hYmxlZCB0byBldmVuIGJlIHJlbGV2YW50LiBHaXZlbiB0aGUgZmlsZXMgdG91Y2hlZCwgYENPTkZJR19NSUdSQVRJT05gIGlzIGxvb2tpbmcgbGlrZSBhIHN0cm9uZyBjYW5kaWRhdGUsIHBhcnRpY3VsYXJseSBiZWNhdXNlIG9mIHRoZSBgbW0vbWlncmF0ZS5jYCBhbmQgYHRyeV90b19taWdyYXRlX29uZWAgcmVmZXJlbmNlcy4gV2UmIzM5O2xsIGhhdmUgdG8ga2VlcCB0aGF0IGluIG1pbmQuIEFuZCBvZiBjb3Vyc2UsIHRoZSBgYXJjaC9hcm02NGAgY2hhbmdlIHJlcXVpcmVzIGBDT05GSUdfQVJNNjRgLCB0aG91Z2ggSSYjMzk7bGwgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdlIGNhbiYjMzk7dCBleHByZXNzIGFyY2ggY29uZmlnIG9wdGlvbnMgaW4gYEVuYWJsZUNvbmZpZ3NgLiBXZSBjYW4ganVzdCBtYWtlIHN1cmUgYEhVR0VUTEJfUEFHRWAgaXMgZW5hYmxlZC4KCkkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaHVnZV9wdGVwX2dldGAgKmlzKiBkb2luZywgc28gSSYjMzk7bGwgZ28gY2hlY2sgaXRzIGRlZmluaXRpb24gaW4gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYW5kIHRoZW4gdHJhY2sgZG93biB3aGVyZSBpdCYjMzk7cyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2VfcHRlcF9nZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3Q9MjAzPUh1Z2VUTEIgUGFnZSBUYWJsZSBIZWxwZXJzXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3QtMjIwLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7XG5Eb2N1bWVudGF0aW9uL21tL2FyY2hfcGd0YWJsZV9oZWxwZXJzLnJzdDoyMjE6fCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhciAgIHwgQ2xlYXJzIGEgSHVnZVRMQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0LTIyMi0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzO1xuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL2h1Z2V0bGItM2xldmVsLmgtMTUtICogSWYgb3VyIGh1Z2UgcHRlIGlzIG5vbi16ZXJvIHRoZW4gbWFyayB0aGUgdmFsaWQgYml0LlxuYXJjaC9hcm0vaW5jbHVkZS9hc20vaHVnZXRsYi0zbGV2ZWwuaDoxNjogKiBUaGlzIGFsbG93cyBwdGVfcHJlc2VudChodWdlX3B0ZXBfZ2V0KG1tLGFkZHIscHRlcCkpIHRvIHJldHVybiB0cnVlIGZvciBub24temVyb1xuYXJjaC9hcm0vaW5jbHVkZS9hc20vaHVnZXRsYi0zbGV2ZWwuaC0xNy0gKiBwdGVzLlxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL2h1Z2V0bGItM2xldmVsLmgtMjAtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9odWdldGxiLTNsZXZlbC5oOjIxOnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL2h1Z2V0bGItM2xldmVsLmgtMjIte1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTQxPWV4dGVybiBpbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDQtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmg6NDU6ZXh0ZXJuIHB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00Ni1cdFx0XHRcdCAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opO1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTU0PWV4dGVybiB2b2lkIGh1Z2VfcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNTYtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo1NzpleHRlcm4gcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC01OC1cbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9OTc9c3RhdGljIGlubGluZSBpbnQgbnVtX2NvbnRpZ19wdGVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc2l6ZV90ICpwZ3NpemUpXG4tLVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTExOC1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzoxMTk6cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0xMjAte1xuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz0zNjk9dm9pZCBodWdlX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zODAtXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6MzgxOnB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMzgyLVx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIHN6KVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz01MTc9cHRlX3QgaHVnZV9wdGVwX21vZGlmeV9wcm90X3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy01MjktXHR9XG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6NTMwOlx0cmV0dXJuIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgcHNpemUpO1xuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTUzMS19XG4tLVxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTE0PXN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0yMy0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXG5hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9odWdldGxiLmg6MjQ6c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0yNS1cdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4tLVxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTM3PXN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00Mi1cbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo0MzpcdHB0ZSA9IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgc3opO1xuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ0LVx0Zmx1c2hfdGxiX3BhZ2Uodm1hLCBhZGRyKTtcbi0tXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTE0LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVF9BTkRfQ0xFQVJcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmg6MTU6c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMTYtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmg9Mjg9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0zOC1cdCAqL1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDozOTpcdHB0ZSA9IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgc3opO1xuYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00MC1cdGZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcik7XG4tLVxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTg9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMTEtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxuYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjEyOnB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMTMtXHRcdFx0ICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opO1xuLS1cbmFyY2gvcGFyaXNjL21tL2h1Z2V0bGJwYWdlLmM9MTIxPXZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9wYXJpc2MvbW0vaHVnZXRsYnBhZ2UuYy0xMjctXG5hcmNoL3BhcmlzYy9tbS9odWdldGxicGFnZS5jOjEyODpwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuYXJjaC9wYXJpc2MvbW0vaHVnZXRsYnBhZ2UuYy0xMjktXHRcdFx0ICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD00Mz12b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ2LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVF9BTkRfQ0xFQVJcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6NDc6c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDgtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9NTU9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02MC1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6NjE6XHRwdGUgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcih2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHN6KTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtNjItXHRmbHVzaF9odWdldGxiX3BhZ2Uodm1hLCBhZGRyKTtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4Lmg9MTk9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oLTIyLSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oOjIzOnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ub2hhc2gvMzIvaHVnZXRsYi04eHguaC0yNC17XG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg9MjU9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjktI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg6MzA6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0zMS1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTQzPWludCBodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjQ4OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDktXG4tLVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTUtI2lmZGVmIENPTkZJR19SSVNDVl9JU0FfU1ZOQVBPVFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjY6cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy03LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmM9Mjc0PWludCBodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtMzA0LVxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jOjMwNTpwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYy0zMDYtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg9MjM9dm9pZCBfX3NldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjYtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjI3OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0yOC1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg6Mjk6cHRlX3QgX19odWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0zMC1cdFx0XHRcdHB0ZV90ICpwdGVwKTtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTMyLSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVF9BTkRfQ0xFQVJcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg6MzM6c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzQtXHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzYte1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDozNzpcdHJldHVybiBfX2h1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzgtfVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg9NTE9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC01My17XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjU0Olx0cmV0dXJuIF9faHVnZV9wdGVwX2dldF9hbmRfY2xlYXIodm1hLVx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdGVwKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNTUtfVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg9NTg9c3RhdGljIGlubGluZSBpbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02MS17XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjYyOlx0aW50IGNoYW5nZWQgPSAhcHRlX3NhbWUoaHVnZV9wdGVwX2dldCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXApLCBwdGUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02My1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNjQtXHRpZiAoY2hhbmdlZCkge1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo2NTpcdFx0X19odWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcih2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXApO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02Ni1cdFx0X19zZXRfaHVnZV9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBwdGUpO1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg9NzI9c3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNzQte1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo3NTpcdHB0ZV90IHB0ZSA9IF9faHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZXApO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC03Ni1cbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0xNTY9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0xNjEtXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYzoxNjI6cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTE2My17XG4tLVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMTY2LVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM6MTY3OnB0ZV90IF9faHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0xNjgtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMTY5LXtcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjE3MDpcdHB0ZV90IHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZXApO1xuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMTcxLVx0cG1kX3QgKnBtZHAgPSAocG1kX3QgKikgcHRlcDtcbi0tXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD0xOD12b2lkIF9fc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjEtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6MjI6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTIzLVx0XHRcdCAgICAgIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIHN6KTtcbi0tXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmM9Mjc2PXZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jLTI4MS1cbmFyY2gvc3BhcmMvbW0vaHVnZXRsYnBhZ2UuYzoyODI6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbmFyY2gvc3BhcmMvbW0vaHVnZXRsYnBhZ2UuYy0yODMtXHRcdFx0ICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MzI3PXN0YXRpYyBib29sIGh1Z2V0bGJfdm1hX21hcHNfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTMzNS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjMzNjpcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTMzNy1cdGlmIChodWdlX3B0ZV9ub25lKHB0ZSkgfHwgIXB0ZV9wcmVzZW50KHB0ZSkpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTEyNjM9c3RhdGljIGludCBzbWFwc19odWdldGxiX3JhbmdlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTEyNzQtXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGhzdGF0ZV92bWEodm1hKSwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbmZzL3Byb2MvdGFza19tbXUuYzoxMjc1Olx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI3Ni1cdGlmIChwdGVfcHJlc2VudChwdGVudCkpIHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjIwOT1zdGF0aWMgaW50IHBhZ2VtYXBfaHVnZXRsYl9yYW5nZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBobWFzayxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjIyMy1cdHB0bCA9IGh1Z2VfcHRlX2xvY2soaHN0YXRlX3ZtYSh2bWEpLCB3YWxrLVx1MDAzZW1tLCBwdGVwKTtcbmZzL3Byb2MvdGFza19tbXUuYzoyMjI0Olx0cHRlID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGVwKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yMjI1LVx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjkyMz1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yOTM2LVxuZnMvcHJvYy90YXNrX21tdS5jOjI5Mzc6XHRcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgc3RhcnQsIHB0ZXApO1xuZnMvcHJvYy90YXNrX21tdS5jLTI5MzgtXHRcdGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfCBwYWdlbWFwX2h1Z2V0bGJfY2F0ZWdvcnkocHRlKTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk0OC1cbmZzL3Byb2MvdGFza19tbXUuYzoyOTQ5Olx0cHRlID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBzdGFydCwgcHRlcCk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk1MC1cdGNhdGVnb3JpZXMgPSBwLVx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfCBwYWdlbWFwX2h1Z2V0bGJfY2F0ZWdvcnkocHRlKTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9Mjk5Nj1zdGF0aWMgaW50IHBhZ2VtYXBfc2Nhbl9odWdldGxiX2hvbGVfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMwMTItXHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgbW0sIHB0ZXApO1xuZnMvcHJvYy90YXNrX21tdS5jOjMwMTM6XHRcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZXApO1xuZnMvcHJvYy90YXNrX21tdS5jLTMwMTQtXHRcdG1ha2VfdWZmZF93cF9odWdlX3B0ZSh2bWEsIGFkZHIsIHB0ZXAsIHB0ZSk7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTM0MDU9c3RhdGljIGludCBnYXRoZXJfaHVnZXRsYl9zdGF0cyhwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0zNDEzLVx0cHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKSwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbmZzL3Byb2MvdGFza19tbXUuYzozNDE0Olx0aHVnZV9wdGUgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMzQxNS1cdGlmICghcHRlX3ByZXNlbnQoaHVnZV9wdGUpKVxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oPTcwPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC03Ny0jaWZuZGVmIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaDo3ODpzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtNzktXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opXG4tLVxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmg9MTA5PXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oLTExNy0jaWZuZGVmIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oOjExODpzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC0xMTkte1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEwNDc9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTA1MS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEwNTI6XHRyZXR1cm4gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBwc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMDUzLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMjYwPXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2NvdW50X3N1Yihsb25nIGwsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTEyNjMtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMjY0OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTI2NS1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTI5NT1zdGF0aWMgdm9pZCBkYW1vbl9odWdldGxiX21rb2xkKHB0ZV90ICpwdGUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjk4LVx0Ym9vbCByZWZlcmVuY2VkID0gZmFsc2U7XG5tbS9kYW1vbi92YWRkci5jOjI5OTpcdHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlKTtcbm1tL2RhbW9uL3ZhZGRyLmMtMzAwLVx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XG4tLVxubW0vZGFtb24vdmFkZHIuYz0zMjI9c3RhdGljIGludCBkYW1vbl9ta29sZF9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vZGFtb24vdmFkZHIuYy0zMzAtXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXHUwMDNlbW0sIHB0ZSk7XG5tbS9kYW1vbi92YWRkci5jOjMzMTpcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xubW0vZGFtb24vdmFkZHIuYy0zMzItXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcbi0tXG5tbS9kYW1vbi92YWRkci5jPTQzOT1zdGF0aWMgaW50IGRhbW9uX3lvdW5nX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcbi0tXG5tbS9kYW1vbi92YWRkci5jLTQ0OS1cdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbm1tL2RhbW9uL3ZhZGRyLmM6NDUwOlx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG5tbS9kYW1vbi92YWRkci5jLTQ1MS1cdGlmICghcHRlX3ByZXNlbnQoZW50cnkpKVxuLS1cbm1tL2htbS5jPTU0Mz1zdGF0aWMgaW50IGhtbV92bWFfd2Fsa19odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vaG1tLmMtNTU3LVx0cHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHZtYSksIHdhbGstXHUwMDNlbW0sIHB0ZSk7XG5tbS9obW0uYzo1NTg6XHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbm1tL2htbS5jLTU1OS1cbi0tXG5tbS9odWdldGxiLmM9NDgyMT1zdGF0aWMgdm9pZCBzZXRfaHVnZV9wdGVwX3dyaXRhYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy00ODI1LVxubW0vaHVnZXRsYi5jOjQ4MjY6XHRlbnRyeSA9IGh1Z2VfcHRlX21rd3JpdGUoaHVnZV9wdGVfbWtkaXJ0eShodWdlX3B0ZXBfZ2V0KHZtYS1cdTAwM2V2bV9tbSwgYWRkcmVzcywgcHRlcCkpKTtcbm1tL2h1Z2V0bGIuYy00ODI3LVx0aWYgKGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgYWRkcmVzcywgcHRlcCwgZW50cnksIDEpKVxuLS1cbm1tL2h1Z2V0bGIuYz00ODUzPWludCBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3QsIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9odWdldGxiLmMtNDkxMC1cdFx0c3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG5tbS9odWdldGxiLmM6NDkxMTpcdFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHNyY192bWEtXHUwMDNldm1fbW0sIGFkZHIsIHNyY19wdGUpO1xubW0vaHVnZXRsYi5jLTQ5MTItYWdhaW46XG4tLVxubW0vaHVnZXRsYi5jLTQ5NDctXHRcdH0gZWxzZSB7XG5tbS9odWdldGxiLmM6NDk0ODpcdFx0XHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQoc3JjX3ZtYS1cdTAwM2V2bV9tbSwgYWRkciwgc3JjX3B0ZSk7XG5tbS9odWdldGxiLmMtNDk0OS1cdFx0XHRwdGVfZm9saW8gPSBwYWdlX2ZvbGlvKHB0ZV9wYWdlKGVudHJ5KSk7XG4tLVxubW0vaHVnZXRsYi5jLTQ5ODktXHRcdFx0XHRzcGluX2xvY2tfbmVzdGVkKHNyY19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbm1tL2h1Z2V0bGIuYzo0OTkwOlx0XHRcdFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHNyY192bWEtXHUwMDNldm1fbW0sIGFkZHIsIHNyY19wdGUpO1xubW0vaHVnZXRsYi5jLTQ5OTEtXHRcdFx0XHRpZiAoIXB0ZV9zYW1lKHNyY19wdGVfb2xkLCBlbnRyeSkpIHtcbi0tXG5tbS9odWdldGxiLmM9NTAzNz1zdGF0aWMgdm9pZCBtb3ZlX2h1Z2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIG9sZF9hZGRyLFxuLS1cbm1tL2h1Z2V0bGIuYy01MDU2LVxubW0vaHVnZXRsYi5jOjUwNTc6XHRwdGUgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgb2xkX2FkZHIsIHNyY19wdGUsIHN6KTtcbm1tL2h1Z2V0bGIuYy01MDU4LVxuLS1cbm1tL2h1Z2V0bGIuYz01MDc2PWludCBtb3ZlX2h1Z2V0bGJfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUxMTItXHRcdH1cbm1tL2h1Z2V0bGIuYzo1MTEzOlx0XHRpZiAoaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KG1tLCBvbGRfYWRkciwgc3JjX3B0ZSkpKVxubW0vaHVnZXRsYi5jLTUxMTQtXHRcdFx0Y29udGludWU7XG4tLVxubW0vaHVnZXRsYi5jPTUxNDE9dm9pZCBfX3VubWFwX2h1Z2VwYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01MTgyLVxubW0vaHVnZXRsYi5jOjUxODM6XHRcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB0ZXApO1xubW0vaHVnZXRsYi5jLTUxODQtXHRcdGlmIChodWdlX3B0ZV9ub25lKHB0ZSkpIHtcbi0tXG5tbS9odWdldGxiLmMtNTIzMC1cbm1tL2h1Z2V0bGIuYzo1MjMxOlx0XHRwdGUgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkcmVzcywgcHRlcCwgc3opO1xubW0vaHVnZXRsYi5jLTUyMzItXHRcdHRsYl9yZW1vdmVfaHVnZV90bGJfZW50cnkoaCwgdGxiLCBwdGVwLCBhZGRyZXNzKTtcbi0tXG5tbS9odWdldGxiLmM9NTQxOT1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2V0bGIuYy01NDIzLVx0Y29uc3QgYm9vbCB1bnNoYXJlID0gdm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1VOU0hBUkU7XG5tbS9odWdldGxiLmM6NTQyNDpcdHB0ZV90IHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIHZtZi1cdTAwM2VhZGRyZXNzLCB2bWYtXHUwMDNlcHRlKTtcbm1tL2h1Z2V0bGIuYy01NDI1LVx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbi0tXG5tbS9odWdldGxiLmMtNTUzOC1cdFx0XHRpZiAobGlrZWx5KHZtZi1cdTAwM2VwdGUgXHUwMDI2XHUwMDI2XG5tbS9odWdldGxiLmM6NTUzOTpcdFx0XHRcdCAgIHB0ZV9zYW1lKGh1Z2VfcHRlcF9nZXQobW0sIHZtZi1cdTAwM2VhZGRyZXNzLCB2bWYtXHUwMDNlcHRlKSwgcHRlKSkpXG5tbS9odWdldGxiLmMtNTU0MC1cdFx0XHRcdGdvdG8gcmV0cnlfYXZvaWRjb3B5O1xuLS1cbm1tL2h1Z2V0bGIuYy01NTc2LVx0dm1mLVx1MDAzZXB0ZSA9IGh1Z2V0bGJfd2Fsayh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBodWdlX3BhZ2Vfc2l6ZShoKSk7XG5tbS9odWdldGxiLmM6NTU3NzpcdGlmIChsaWtlbHkodm1mLVx1MDAzZXB0ZSBcdTAwMjZcdTAwMjYgcHRlX3NhbWUoaHVnZV9wdGVwX2dldChtbSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VwdGUpLCBwdGUpKSkge1xubW0vaHVnZXRsYi5jLTU1NzgtXHRcdHB0ZV90IG5ld3B0ZSA9IG1ha2VfaHVnZV9wdGUodm1hLCBuZXdfZm9saW8sICF1bnNoYXJlKTtcbi0tXG5tbS9odWdldGxiLmM9NTY3OD1zdGF0aWMgYm9vbCBodWdldGxiX3B0ZV9zdGFibGUoc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9odWdldGxiLmMtNTY4NC1cdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgbW0sIHB0ZXApO1xubW0vaHVnZXRsYi5jOjU2ODU6XHRzYW1lID0gcHRlX3NhbWUoaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlcCksIG9sZF9wdGUpO1xubW0vaHVnZXRsYi5jLTU2ODYtXHRzcGluX3VubG9jayhwdGwpO1xuLS1cbm1tL2h1Z2V0bGIuYz01NjkxPXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTg0OS1cdC8qIElmIHB0ZSBjaGFuZ2VkIGZyb20gdW5kZXIgdXMsIHJldHJ5ICovXG5tbS9odWdldGxiLmM6NTg1MDpcdGlmICghcHRlX3NhbWUoaHVnZV9wdGVwX2dldChtbSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VwdGUpLCB2bWYtXHUwMDNlb3JpZ19wdGUpKVxubW0vaHVnZXRsYi5jLTU4NTEtXHRcdGdvdG8gYmFja291dDtcbi0tXG5tbS9odWdldGxiLmM9NTk0MT12bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy01OTg2LVxubW0vaHVnZXRsYi5jOjU5ODc6XHR2bWYub3JpZ19wdGUgPSBodWdlX3B0ZXBfZ2V0KG1tLCB2bWYuYWRkcmVzcywgdm1mLnB0ZSk7XG5tbS9odWdldGxiLmMtNTk4OC1cdGlmIChodWdlX3B0ZV9ub25lKHZtZi5vcmlnX3B0ZSkpXG4tLVxubW0vaHVnZXRsYi5jLTYwNTYtXHQvKiBDaGVjayBmb3IgYSByYWNpbmcgdXBkYXRlIGJlZm9yZSBjYWxsaW5nIGh1Z2V0bGJfd3AoKSAqL1xubW0vaHVnZXRsYi5jOjYwNTc6XHRpZiAodW5saWtlbHkoIXB0ZV9zYW1lKHZtZi5vcmlnX3B0ZSwgaHVnZV9wdGVwX2dldChtbSwgdm1mLmFkZHJlc3MsIHZtZi5wdGUpKSkpXG5tbS9odWdldGxiLmMtNjA1OC1cdFx0Z290byBvdXRfcHRsO1xuLS1cbm1tL2h1Z2V0bGIuYy02MDYwLVx0LyogSGFuZGxlIHVzZXJmYXVsdC13cCBmaXJzdCwgYmVmb3JlIHRyeWluZyB0byBsb2NrIG1vcmUgcGFnZXMgKi9cbm1tL2h1Z2V0bGIuYzo2MDYxOlx0aWYgKHVzZXJmYXVsdGZkX3dwKHZtYSkgXHUwMDI2XHUwMDI2IGh1Z2VfcHRlX3VmZmRfd3AoaHVnZV9wdGVwX2dldChtbSwgdm1mLmFkZHJlc3MsIHZtZi5wdGUpKSBcdTAwMjZcdTAwMjZcbm1tL2h1Z2V0bGIuYy02MDYyLVx0ICAgIChmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSkgXHUwMDI2XHUwMDI2ICFodWdlX3B0ZV93cml0ZSh2bWYub3JpZ19wdGUpKSB7XG4tLVxubW0vaHVnZXRsYi5jPTYxNjM9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbi0tXG5tbS9odWdldGxiLmMtNjE4OC1cdFx0LyogRG9uJiMzOTt0IG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgUFRFcyAoZXZlbiBtYXJrZXJzKSAqL1xubW0vaHVnZXRsYi5jOjYxODk6XHRcdGlmICghaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUpKSkge1xubW0vaHVnZXRsYi5jLTYxOTAtXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi0tXG5tbS9odWdldGxiLmMtNjMyNS1cbm1tL2h1Z2V0bGIuYzo2MzI2Olx0ZHN0X3B0ZXAgPSBodWdlX3B0ZXBfZ2V0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUpO1xubW0vaHVnZXRsYi5jLTYzMjctXHQvKlxuLS1cbm1tL2h1Z2V0bGIuYz02Mzg0PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjQ0OS1cdFx0fVxubW0vaHVnZXRsYi5jOjY0NTA6XHRcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB0ZXApO1xubW0vaHVnZXRsYi5jLTY0NTEtXHRcdGlmIChodWdlX3B0ZV9ub25lKHB0ZSkpIHtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTc2Mz1zdGF0aWMgaW50IGh3cG9pc29uX2h1Z2V0bGJfcmFuZ2UocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy03NzMtXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXHUwMDNlbW0sIHB0ZXApO1xubW0vbWVtb3J5LWZhaWx1cmUuYzo3NzQ6XHRwdGUgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZXApO1xubW0vbWVtb3J5LWZhaWx1cmUuYy03NzUtXHRyZXQgPSBjaGVja19od3BvaXNvbmVkX2VudHJ5KHB0ZSwgYWRkciwgaHVnZV9wYWdlX3NoaWZ0KGgpLFxuLS1cbm1tL21lbXBvbGljeS5jPTc3MT1zdGF0aWMgaW50IHF1ZXVlX2ZvbGlvc19odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtNzgyLVx0cHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHdhbGstXHUwMDNldm1hKSwgd2Fsay1cdTAwM2VtbSwgcHRlKTtcbm1tL21lbXBvbGljeS5jOjc4MzpcdHB0ZXAgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XG5tbS9tZW1wb2xpY3kuYy03ODQtXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZXApKSB7XG4tLVxubW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0zNzQtXHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxubW0vbWlncmF0ZS5jOjM3NTpcdFx0XHRvbGRfcHRlID0gaHVnZV9wdGVwX2dldCh2bWEtXHUwMDNldm1fbW0sIHB2bXcuYWRkcmVzcyxcbm1tL21pZ3JhdGUuYy0zNzYtXHRcdFx0XHRcdFx0cHZtdy5wdGUpO1xuLS1cbm1tL21pZ3JhdGUuYz01MjA9dm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdF9odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxuLS1cbm1tL21pZ3JhdGUuYy01MjctXHRzcGluX2xvY2socHRsKTtcbm1tL21pZ3JhdGUuYzo1Mjg6XHRwdGUgPSBodWdlX3B0ZXBfZ2V0KHZtYS1cdTAwM2V2bV9tbSwgYWRkciwgcHRlcCk7XG5tbS9taWdyYXRlLmMtNTI5LVxuLS1cbm1tL21pbmNvcmUuYz0yNj1zdGF0aWMgaW50IG1pbmNvcmVfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWluY29yZS5jLTQyLVx0fSBlbHNlIHtcbm1tL21pbmNvcmUuYzo0MzpcdFx0Y29uc3QgcHRlX3QgcHRlcCA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbm1tL21pbmNvcmUuYy00NC1cbi0tXG5tbS9tcHJvdGVjdC5jPTcwMz1zdGF0aWMgaW50IHByb3Rfbm9uZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXG4tLVxubW0vbXByb3RlY3QuYy03MDYte1xubW0vbXByb3RlY3QuYzo3MDc6XHRjb25zdCBwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cdTAwM2VtbSwgYWRkciwgcHRlKTtcbm1tL21wcm90ZWN0LmMtNzA4LVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMTItXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHB2bXctXHUwMDNldm1hKSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjExMzpcdFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctXHUwMDNldm1hLVx1MDAzZXZtX21tLCBwdm13LVx1MDAzZWFkZHJlc3MsXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMTQtXHRcdFx0XHQgICAgICBwdm13LVx1MDAzZXB0ZSk7XG4tLVxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjA5OS1cdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbm1tL3JtYXAuYzoyMTAwOlx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbm1tL3JtYXAuYy0yMTAxLVx0XHR9IGVsc2Uge1xuLS1cbm1tL3JtYXAuYz0yNDE5PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjUwOS1cdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbm1tL3JtYXAuYzoyNTEwOlx0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbm1tL3JtYXAuYy0yNTExLVx0XHR9IGVsc2Uge1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9Nzc3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3NpemVfdCBtZmlsbF9hdG9taWNfaHVnZXRsYihcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTg3NS1cdFx0aWYgKCF1ZmZkX2ZsYWdzX21vZGVfaXMoZmxhZ3MsIE1GSUxMX0FUT01JQ19DT05USU5VRSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6ODc2Olx0XHRcdGNvbnN0IHB0ZV90IHB0ZXAgPSBodWdlX3B0ZXBfZ2V0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUpO1xubW0vdXNlcmZhdWx0ZmQuYy04NzctXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0yNTE5PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9odWdlX211c3Rfd2FpdChzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yNTMxLVxubW0vdXNlcmZhdWx0ZmQuYzoyNTMyOlx0cHRlID0gaHVnZV9wdGVwX2dldCh2bWEtXHUwMDNldm1fbW0sIHZtZi1cdTAwM2VhZGRyZXNzLCBwdGVwKTtcbm1tL3VzZXJmYXVsdGZkLmMtMjUzMy1cbi0tXG5tbS92bWFsbG9jLmM9MzY2PXN0YXRpYyB2b2lkIHZ1bm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bWFsbG9jLmMtMzgzLVx0XHRcdH1cbm1tL3ZtYWxsb2MuYzozODQ6XHRcdFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihcdTAwMjZpbml0X21tLCBhZGRyLCBwdGUsIHNpemUpO1xubW0vdm1hbGxvYy5jLTM4NS1cdFx0XHRpZiAoV0FSTl9PTihlbmQgLSBhZGRyIFx1MDAzYyBzaXplKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIwNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBIdWdlVExCIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBmb2N1c2VkIG9uIEh1Z2VUTEIgcGFnZXMsIHNwZWNpZmljYWxseSBmb3IgYXJtNjQuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLCBhbmQgdGhhdCB0aGUga2V5IGFkZGl0aW9uIHNlZW1zIHRvIGJlIHRoaXMgbmV3IGZ1bmN0aW9uLCBgaHVnZV9wdGVwX2dldGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgbm90aWNpbmcgdGhhdCBpdCYjMzk7cyBkZWNsYXJlZCBpbiBib3RoIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgYW5kIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaGAuIEhhbmcgb24sIGxldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCB0aGUgcGF0Y2ggaXRzZWxmICphZGRzKiB0aGUgZGVjbGFyYXRpb24gdG8gYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYDoKCmBgYGMKJiM0MztwdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTsKYGBgCgpXYWl0LCB0aGUgYGdyZXBgIHJlc3VsdHMgc2hvdyB0aGF0IGBodWdlX3B0ZXBfZ2V0YCBpcyBkZWZpbmVkIGluIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgIGFuZCBpbiBvdGhlciBhcmNoaXRlY3R1cmVzLiBJbnRlcmVzdGluZy4gSXQmIzM5O3Mgbm90IGp1c3QgYW4gYXJtNjQgdGhpbmcsIHRoZW4uIFRoaXMgaXMgbWVhbnQgdG8gYmUgYSBnZW5lcmFsIG1lY2hhbmlzbS4KCk5vdywgSSYjMzk7bSBzZWVpbmcgYSB3aG9sZSBidW5jaCBvZiBvdGhlciBmaWxlcyBiZWluZyBtb2RpZmllZDogYG1tL21pZ3JhdGUuY2AsIGBtbS9tcHJvdGVjdC5jYCwgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgYW5kIGBtbS9ybWFwLmNgLiBUaGV5JiMzOTtyZSBhbGwgdXNpbmcgdGhpcyBuZXcgYGh1Z2VfcHRlcF9nZXRgIGZ1bmN0aW9uLiBUaGF0IGdpdmVzIGEgYnJvYWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZC4KCk9rYXksIGJhY2sgdG8gYGFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY2AuIEkgc2VlIHRoaXMgY2hhbmdlIGluIGBmaW5kX251bV9jb250aWdgOgoKYGBgYwotCWlmICgocHRlX3QgKilwbWRwID09IHB0ZXApIHsKJiM0MzsJaWYgKChwdGVfdCAqKVBUUl9BTElHTl9ET1dOKHBtZHAsIHNpemVvZigqcG1kcCkgKiBDT05UX1BNRFMpID09IHB0ZXApIHsKYGBgCgpUaGF0JiMzOTtzIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNoYW5nZS4gSXQgbG9va3MgbGlrZSBhbiBhbGlnbm1lbnQgY2hlY2sgaGFzIGJlZW4gYWRkZWQsIHVzaW5nIGBQVFJfQUxJR05fRE9XTmAgdG8gZW5zdXJlIHRoZSBjb21wYXJpc29uIGlzIGNvcnJlY3QgZ2l2ZW4gaG93IHBhZ2UgdGFibGVzIGFyZSBzdHJ1Y3R1cmVkLgoKQWxyaWdodCwgbGV0JiMzOTtzIG5vdyBjaGVjayBgbW0vbXByb3RlY3QuY2AgZm9yIGFueSByZWZlcmVuY2VzIHRvIGBwcm90X25vbmVfaHVnZXRsYl9lbnRyeWAuIEFoLCB5ZXMsIHRoZXJlIGl0IGlzLCBpdCYjMzk7cyBpbnNpZGUgYW4gYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBibG9jay4gU28gdGhhdCBjb25maXJtcyB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4KCk5vdywgYSBxdWljayB0aG91Z2h0IGFib3V0IGBtbS9taWdyYXRlLmNgIOKAkyBpcyBgQ09ORklHX01JR1JBVElPTmAgYSBoYXJkIGRlcGVuZGVuY3k/IEl0JiMzOTtzIGVzc2VudGlhbCB0aGF0IEkgY2hlY2suIExldCBtZSB2ZXJpZnkuLi4gWWVzLCBsZXQmIzM5O3MgbG9vayBhdCBgbW0vbWlncmF0ZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZW1vdmVfbWlncmF0aW9uX3B0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3JtYXAuaD05MzQ9aW50IHBmbl9ta2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBwZ29mZl90IHBnb2ZmLFxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTkzNi1cbmluY2x1ZGUvbGludXgvcm1hcC5oOjkzNzp2b2lkIHJlbW92ZV9taWdyYXRpb25fcHRlcyhzdHJ1Y3QgZm9saW8gKnNyYywgc3RydWN0IGZvbGlvICpkc3QsXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MzgtXHRcdGVudW0gdHR1X2ZsYWdzIGZsYWdzKTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmg9MTM0PURFRklORV9FVkVOVChtaWdyYXRpb25fcHRlLCBzZXRfbWlncmF0aW9uX3B0ZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtMTM4LVxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjEzOTpERUZJTkVfRVZFTlQobWlncmF0aW9uX3B0ZSwgcmVtb3ZlX21pZ3JhdGlvbl9wdGUsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgtMTQwLVx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHB0ZSwgaW50IG9yZGVyKSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM0NzQ9c3RhdGljIHZvaWQgcmVtYXBfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIG5yLCBpbnQgZmxhZ3MpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNDgxLVx0Zm9yICg7Oykge1xubW0vaHVnZV9tZW1vcnkuYzozNDgyOlx0XHRyZW1vdmVfbWlncmF0aW9uX3B0ZXMoZm9saW8sIGZvbGlvLCBUVFVfUk1BUF9MT0NLRUQgfCBmbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTM0ODMtXHRcdGkgJiM0Mzs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbi0tXG5tbS9taWdyYXRlLmM9MzM4PXN0cnVjdCBybWFwX3dhbGtfYXJnIHtcbi0tXG5tbS9taWdyYXRlLmMtMzQ1LSAqL1xubW0vbWlncmF0ZS5jOjM0NjpzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vbWlncmF0ZS5jLTM0Ny1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKVxuLS1cbm1tL21pZ3JhdGUuYy00NDQtXG5tbS9taWdyYXRlLmM6NDQ1Olx0XHR0cmFjZV9yZW1vdmVfbWlncmF0aW9uX3B0ZShwdm13LmFkZHJlc3MsIHB0ZV92YWwocHRlKSxcbm1tL21pZ3JhdGUuYy00NDYtXHRcdFx0XHRcdCAgIGNvbXBvdW5kX29yZGVyKG5ldykpO1xuLS1cbm1tL21pZ3JhdGUuYy00NTgtICovXG5tbS9taWdyYXRlLmM6NDU5OnZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKHN0cnVjdCBmb2xpbyAqc3JjLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbm1tL21pZ3JhdGUuYy00NjAtXHRcdGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL21pZ3JhdGUuYy00NjctXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xubW0vbWlncmF0ZS5jOjQ2ODpcdFx0LnJtYXBfb25lID0gcmVtb3ZlX21pZ3JhdGlvbl9wdGUsXG5tbS9taWdyYXRlLmMtNDY5LVx0XHQuYXJnID0gXHUwMDI2cm1hcF93YWxrX2FyZyxcbi0tXG5tbS9taWdyYXRlLmM9MTE2ND1zdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvX3VuZG9fc3JjKHN0cnVjdCBmb2xpbyAqc3JjLFxuLS1cbm1tL21pZ3JhdGUuYy0xMTcwLVx0aWYgKHBhZ2Vfd2FzX21hcHBlZClcbm1tL21pZ3JhdGUuYzoxMTcxOlx0XHRyZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3JjLCBzcmMsIDApO1xubW0vbWlncmF0ZS5jLTExNzItXHQvKiBEcm9wIGFuIGFub25fdm1hIHJlZmVyZW5jZSBpZiB3ZSB0b29rIG9uZSAqL1xuLS1cbm1tL21pZ3JhdGUuYz0xMzU3PXN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tLVxubW0vbWlncmF0ZS5jLTE0MDAtXHQgKiBXaGVuIHN1Y2Nlc3NmdWwsIHB1c2ggZHN0IHRvIExSVSBpbW1lZGlhdGVseTogc28gdGhhdCBpZiBpdFxubW0vbWlncmF0ZS5jOjE0MDE6XHQgKiB0dXJucyBvdXQgdG8gYmUgYW4gbWxvY2tlZCBwYWdlLCByZW1vdmVfbWlncmF0aW9uX3B0ZXMoKSB3aWxsXG5tbS9taWdyYXRlLmMtMTQwMi1cdCAqIGF1dG9tYXRpY2FsbHkgYnVpbGQgdXAgdGhlIGNvcnJlY3QgZHN0LVx1MDAzZW1sb2NrX2NvdW50IGZvciBpdC5cbi0tXG5tbS9taWdyYXRlLmMtMTQxMi1cdGlmIChvbGRfZm9saW9fc3RhdGUgXHUwMDI2IEZPTElPX1dBU19NQVBQRUQpXG5tbS9taWdyYXRlLmM6MTQxMzpcdFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKHNyYywgZHN0LCAwKTtcbm1tL21pZ3JhdGUuYy0xNDE0LVxuLS1cbm1tL21pZ3JhdGUuYz0xNDczPXN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTE1NDUtXHRpZiAocGFnZV93YXNfbWFwcGVkKVxubW0vbWlncmF0ZS5jOjE1NDY6XHRcdHJlbW92ZV9taWdyYXRpb25fcHRlcyhzcmMsICFyYyA/IGRzdCA6IHNyYywgdHR1KTtcbm1tL21pZ3JhdGUuYy0xNTQ3LVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NTYwPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3VubWFwKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjM1LVx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG5tbS9taWdyYXRlX2RldmljZS5jOjYzNjpcdFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKGZvbGlvLCBmb2xpbywgMCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTYzNy1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNjg9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9maW5hbGl6ZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzMDYtXHRcdFx0Zm9saW9fYWRkX2xydShkc3QpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzA3Olx0XHRyZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3JjLCBkc3QsIDApO1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzA4LVx0XHRpZiAoZmF1bHRfZm9saW8gIT0gc3JjKVxuLS1cbm1tL3JtYXAuYz0yOTMwPXN0YXRpYyBzdHJ1Y3QgYW5vbl92bWEgKnJtYXBfd2Fsa19hbm9uX2xvY2soY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMjkzOC1cdC8qXG5tbS9ybWFwLmM6MjkzOTpcdCAqIE5vdGU6IHJlbW92ZV9taWdyYXRpb25fcHRlcygpIGNhbm5vdCB1c2UgZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKClcbm1tL3JtYXAuYy0yOTQwLVx0ICogYmVjYXVzZSB0aGF0IGRlcGVuZHMgb24gZm9saW9fbWFwcGVkKCk7IGJ1dCBub3QgYWxsIGl0cyB1c2FnZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU2OAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTWlncmF0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IG1lbW9yeSBtaWdyYXRpb24gaXMgaGFuZGxlZCBpbiB0aGUga2VybmVsLiBUaGUgY29kZSBJJiMzOTttIGZvY3VzaW5nIG9uLCBgbW0vbWlncmF0ZS5jYCwgaXMgb25seSBjb21waWxlZCB3aGVuIHRoZSBgQ09ORklHX01JR1JBVElPTmAgb3B0aW9uIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaG93IHRoaXMgZmlsZSBpbnRlZ3JhdGVzIGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQuIFRoZXJlZm9yZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG1tL01ha2VmaWxlYCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBkZXBlbmRlbmN5IGlzIG1hbmFnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmM9NjI3PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG1hX2J1Zl9nZXRmaWxlKHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXG4tLVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYy02NzQtICpcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmM6Njc1OiAqICAgIFVwIHRvIHRoaXMgc3RhZ2UgdGhlIGV4cG9ydGVyIGlzIHN0aWxsIGZyZWUgdG8gbWlncmF0ZSBvciByZWFsbG9jYXRlIHRoZVxuZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYy02NzYtICogICAgYmFja2luZyBzdG9yYWdlLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlPTcxPUFNREtGRF9GSUxFUyAmIzQzOz0gJChBTURLRkRfUEFUSCkva2ZkX3N2bS5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9NYWtlZmlsZTo3MjpcdFx0JChBTURLRkRfUEFUSCkva2ZkX21pZ3JhdGUub1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvTWFrZWZpbGUtNzMtZW5kaWZcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZT05MD1ndC15ICYjNDM7PSBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTEyMy1cdGd0L2ludGVsX2xyYy5vIFxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZToxMjQ6XHRndC9pbnRlbF9taWdyYXRlLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTEyNS1cdGd0L2ludGVsX21vY3MubyBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYz0xNjY9c3RhdGljIGludCBpOTE1X2dlbV9kbWFidWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jLTE3Mi1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYzoxNzM6XHRpZiAoIWk5MTVfZ2VtX29iamVjdF9jYW5fbWlncmF0ZShvYmosIElOVEVMX1JFR0lPTl9TTUVNKSlcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYy0xNzQtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG1hYnVmLmMtMTgwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jOjE4MTpcdFx0ZXJyID0gaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUob2JqLCBcdTAwMjZ3dywgSU5URUxfUkVHSU9OX1NNRU0pO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jLTE4Mi1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmM9NjM0PWJvb2wgaTkxNV9nZW1fb2JqZWN0X2hhc19pb21lbShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYy02NTQtICogVGhpcyBmdW5jdGlvbiBpcyBwcmltYXJpbHkgaW50ZW5kZWQgYXMgYSBoZWxwZXIgZm9yIGNoZWNraW5nIHRoZVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jOjY1NTogKiBwb3NzaWJpbGl0eSB0byBtaWdyYXRlIG9iamVjdHMgYW5kIG1pZ2h0IGJlIHNsaWdodGx5IGxlc3MgcGVybWlzc2l2ZVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTY1Ni0gKiB0aGFuIGk5MTVfZ2VtX29iamVjdF9taWdyYXRlKCkgd2hlbiBpdCBjb21lcyB0byBvYmplY3RzIHdpdGggdGhlXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jPTcyNz1pbnQgaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMtNzMwLXtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYzo3MzE6XHRyZXR1cm4gX19pOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIHd3LCBpZCwgb2JqLVx1MDAzZWZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYy03MzItfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYz03NjE9aW50IF9faTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMtNzc1LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jOjc3NjpcdGlmICghaTkxNV9nZW1fb2JqZWN0X2Nhbl9taWdyYXRlKG9iaiwgaWQpKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTc3Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTc4NC1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYzo3ODU6XHRyZXR1cm4gb2JqLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlKG9iaiwgbXIsIGZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYy03ODYtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYz05MDQ9c3RhdGljIGludCBpOTE1X3R0bV9taWdyYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jLTkwNy17XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmM6OTA4Olx0cmV0dXJuIF9faTkxNV90dG1fbWlncmF0ZShvYmosIG1yLCBmbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMtOTA5LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmM9MTA0Mj1zdGF0aWMgdm1fZmF1bHRfdCB2bV9mYXVsdF90dG0oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jLTEwOTgtXHRcdFx0ZmxhZ3MgXHUwMDI2PSB+STkxNV9CT19BTExPQ19HUFVfT05MWTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYzoxMDk5Olx0XHRcdGVyciA9IF9faTkxNV90dG1fbWlncmF0ZShvYmosIG1yLCBmbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMtMTEwMC1cdFx0XHRpZiAoIWVycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYz00Nj1zdGF0aWMgaW50IGlndF9jcmVhdGVfbWlncmF0ZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LCBlbnVtIGludGVsX3JlZ2lvbl9pZCBzcmMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtNzItXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYzo3MzpcdFx0ZXJyID0gaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUob2JqLCBcdTAwMjZ3dywgZHN0KTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTc0LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTgwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6ODE6XHRcdGlmIChpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2JqLCBzcmMpKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtODItXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYz0xMDY9c3RhdGljIGludCBpZ3Rfc2FtZV9jcmVhdGVfbWlncmF0ZSh2b2lkICphcmcpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtMTEwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTExOnN0YXRpYyBpbnQgbG1lbV9wYWdlc19taWdyYXRlX29uZShzdHJ1Y3QgaTkxNV9nZW1fd3dfY3R4ICp3dyxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTExMi1cdFx0XHRcdCAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xNDAtXHRpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX2xtZW0ob2JqKSkge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTQxOlx0XHRlcnIgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIHd3LCBJTlRFTF9SRUdJT05fU01FTSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xNDItXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xNTktXHR9IGVsc2Uge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTYwOlx0XHRlcnIgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIHd3LCBJTlRFTF9SRUdJT05fTE1FTV8wKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTE2MS1cdFx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jPTE4Mj1zdGF0aWMgaW50IF9faWd0X2xtZW1fcGFnZXNfbWlncmF0ZShzdHJ1Y3QgaW50ZWxfZ3QgKmd0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTI0OS1cdFx0Zm9yX2k5MTVfZ2VtX3d3KFx1MDAyNnd3LCBlcnIsIHRydWUpXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYzoyNTA6XHRcdFx0ZXJyID0gbG1lbV9wYWdlc19taWdyYXRlX29uZShcdTAwMjZ3dywgb2JqLCB2bWEsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0yNTEtXHRcdFx0XHRcdFx0ICAgICBib3JrZWRfbWlncmF0ZSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9iby5jPTEyNT1pOTE1X2JvX2ZyYW1lYnVmZmVyX2xvb2t1cChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYm8uYy0xMzYtXHQvKiBvYmplY3QgaXMgYmFja2VkIHdpdGggTE1FTSBmb3IgZGlzY3JldGUgKi9cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYm8uYzoxMzc6XHRpZiAoSEFTX0xNRU0oaTkxNSkgXHUwMDI2XHUwMDI2ICFpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2JqLCBJTlRFTF9SRUdJT05fTE1FTV8wKSkge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9iby5jLTEzOC1cdFx0Lyogb2JqZWN0IGlzIFwmIzM0O3JlbW90ZVwmIzM0Oywgbm90IGluIGxvY2FsIG1lbW9yeSAqL1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmM9MTg9aW50ZWxfZmJfcGluX3RvX2RwdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKl9vYmosIHN0cnVjdCBpbnRlbF9kcHQgKmRwdCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZiX3Bpbi5jLTU1LVx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+STkxNV9CT19BTExPQ19HUFVfT05MWTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmM6NTY6XHRcdFx0cmV0ID0gX19pOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIFx1MDAyNnd3LCBJTlRFTF9SRUdJT05fTE1FTV8wLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9mYl9waW4uYy01Ny1cdFx0XHRcdFx0XHRcdGZsYWdzKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZiX3Bpbi5jPTEwNz1pbnRlbF9mYl9waW5fdG9fZ2d0dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKl9vYmosXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9mYl9waW4uYy0xNDctXHRlbHNlIGlmICghcmV0IFx1MDAyNlx1MDAyNiBIQVNfTE1FTShpOTE1KSlcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmM6MTQ4Olx0XHRyZXQgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIFx1MDAyNnd3LCBJTlRFTF9SRUdJT05fTE1FTV8wKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmMtMTQ5LVx0aWYgKCFyZXQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTM1PXhlLXkgJiM0Mzs9IHhlX2JiLm8gXFxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtOTEtXHR4ZV9tZW1fcG9vbC5vIFxcXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGU6OTI6XHR4ZV9taWdyYXRlLm8gXFxcbmRyaXZlcnMvZ3B1L2RybS94ZS9NYWtlZmlsZS05My1cdHhlX21taW8ubyBcXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRlLmM9MTI4PXN0YXRpYyB1NjQgeGVfbWlncmF0ZV92cmFtX29mcyhzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgdTY0IGFkZHIsIGJvb2wgaXNfY29tcF9wdGUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYy0xMzEtXHQgKiBSZW1vdmUgdGhlIERQQSB0byBnZXQgYSBjb3JyZWN0IG9mZnNldCBpbnRvIGlkZW50aXR5IHRhYmxlIGZvciB0aGVcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRlLmM6MTMyOlx0ICogbWlncmF0ZSBvZmZzZXRcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRlLmMtMTMzLVx0ICovXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYz00MDc9c3RhdGljIGJvb2wgeGVfbWlncmF0ZV9uZWVkc19jY3NfZW1pdChzdHJ1Y3QgeGVfZGV2aWNlICp4ZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbWlncmF0ZS5jLTQxNy0gKlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYzo0MTg6ICogUmV0dXJuOiBcdTAwMjZ4ZV9taWdyYXRlIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LlxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYy00MTktICovXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjQ1NT1zdGF0aWMgdm9pZCBvcF9jb21taXQoc3RydWN0IHhlX3ZtICp2bSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNTMwLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjUzMTpzdGF0aWMgY29uc3Qgc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlX29wcyBtaWdyYXRlX29wcyA9IHtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1MzItXHQucG9wdWxhdGUgPSB4ZV92bV9wb3B1bGF0ZV9wZ3RhYmxlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1MzctI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNTM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVfbWlncmF0ZV9wdF91cGRhdGVfb3BzIHN2bV91c2VycHRyX21pZ3JhdGVfb3BzID0ge1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjUzOS1cdC5wb3B1bGF0ZSA9IHhlX3ZtX3BvcHVsYXRlX3BndGFibGUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjU0My0jZWxzZVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjU0NDpzdGF0aWMgY29uc3Qgc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlX29wcyBzdm1fdXNlcnB0cl9taWdyYXRlX29wcztcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1NDUtI2VuZGlmXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjU2OD14ZV9wdF91cGRhdGVfb3BzX3J1bihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgc3RydWN0IHhlX3ZtYV9vcHMgKnZvcHMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjU4MC1cdFx0Lm9wcyA9IHB0X3VwZGF0ZV9vcHMtXHUwMDNlbmVlZHNfc3ZtX2xvY2sgP1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjU4MTpcdFx0XHRcdTAwMjZzdm1fdXNlcnB0cl9taWdyYXRlX29wcyA6XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNTgyOlx0XHRcdFx1MDAyNm1pZ3JhdGVfb3BzLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjU4My1cdFx0LnZvcHMgPSB2b3BzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90cmFjZV9iby5oPTYxPVRSQUNFX0VWRU5UKHhlX2JvX21vdmUsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RyYWNlX2JvLmgtODEtXHRcdCAgICksXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHJhY2VfYm8uaDo4MjpcdCAgICBUUF9wcmludGsoXCYjMzQ7bW92ZV9sYWNrc19zb3VyY2U6JXMsIG1pZ3JhdGUgb2JqZWN0ICVwIFtzaXplICV6dV0gZnJvbSAlcyB0byAlcyBkZXZpY2VfaWQ6JXNcJiMzNDssXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfdHJhY2VfYm8uaC04My1cdFx0ICAgICAgX19lbnRyeS1cdTAwM2Vtb3ZlX2xhY2tzX3NvdXJjZSA/IFwmIzM0O3llc1wmIzM0OyA6IFwmIzM0O25vXCYjMzQ7LCBfX2VudHJ5LVx1MDAzZWJvLCBfX2VudHJ5LVx1MDAzZXNpemUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYWNsX3RjYW0uYz0xMjQxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmM6MTI0MjptbHhzd19zcF9hY2xfdGNhbV92Y2h1bmtfbWlncmF0ZV9vbmUoc3RydWN0IG1seHN3X3NwICptbHhzd19zcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmMtMTI0My1cdFx0XHRcdCAgICAgc3RydWN0IG1seHN3X3NwX2FjbF90Y2FtX3ZjaHVuayAqdmNodW5rLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmM9MTMyMT1tbHhzd19zcF9hY2xfdGNhbV92Y2h1bmtfbWlncmF0ZV9hbGwoc3RydWN0IG1seHN3X3NwICptbHhzd19zcCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9hY2xfdGNhbS5jLTEzNDEtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20odmNodW5rLCBcdTAwMjZ2cmVnaW9uLVx1MDAzZXZjaHVua19saXN0LCBsaXN0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9hY2xfdGNhbS5jOjEzNDI6XHRcdGVyciA9IG1seHN3X3NwX2FjbF90Y2FtX3ZjaHVua19taWdyYXRlX29uZShtbHhzd19zcCwgdmNodW5rLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYWNsX3RjYW0uYy0xMzQzLVx0XHRcdFx0XHRcdFx0ICAgdnJlZ2lvbi1cdTAwM2VyZWdpb24sXG4tLVxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmM9NjEwPXN0YXRpYyB2b2lkIGh2X2lycV9yZXRhcmdldF9pbnRlcnJ1cHQoc3RydWN0IGlycV9kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTcwMC1cdCAqIHJlZmVyIHRvIGNwdV9kaXNhYmxlX2NvbW1vbigpIC1cdTAwM2UgZml4dXBfaXJxcygpIC1cdTAwM2VcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jOjcwMTpcdCAqIGlycV9taWdyYXRlX2FsbF9vZmZfdGhpc19jcHUoKSAtXHUwMDNlIG1pZ3JhdGVfb25lX2lycSgpLlxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtNzAyLVx0ICpcbi0tXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYy03MDUtXHQgKiBoYXZlIGJlZW4gZnJvemVuKS4gTm90ZTogdGhlIGNvcnJlY3QgYWZmaW5pdHkgaW5mbyBpcyBzdGlsbCB1cGRhdGVkXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYzo3MDY6XHQgKiBpbnRvIHRoZSBpcnFkYXRhIGRhdGEgc3RydWN0dXJlIGluIG1pZ3JhdGVfb25lX2lycSgpIC1cdTAwM2VcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTcwNy1cdCAqIGlycV9kb19zZXRfYWZmaW5pdHkoKSwgc28gbGF0ZXIgd2hlbiB0aGUgVk0gcmVzdW1lcyxcbi0tXG5kcml2ZXJzL3BlcmYvYXJtX2NzcG11L2FybV9jc3BtdS5jPTEzMjg9c3RhdGljIGludCBhcm1fY3NwbXVfY3B1X3RlYXJkb3duKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvcGVyZi9hcm1fY3NwbXUvYXJtX2NzcG11LmMtMTMzOC1cbmRyaXZlcnMvcGVyZi9hcm1fY3NwbXUvYXJtX2NzcG11LmM6MTMzOTpcdC8qIENob29zZSBhIG5ldyBDUFUgdG8gbWlncmF0ZSBvd25lcnNoaXAgb2YgdGhlIFBNVSB0byAqL1xuZHJpdmVycy9wZXJmL2FybV9jc3BtdS9hcm1fY3NwbXUuYy0xMzQwLVx0ZHN0ID0gY3B1bWFza19hbnlfYW5kX2J1dChcdTAwMjZjc3BtdS1cdTAwM2Vhc3NvY2lhdGVkX2NwdXMsXG4tLVxuZHJpdmVycy9wZXJmL252aWRpYV90NDEwX2MyY19wbXUuYz03MjY9c3RhdGljIGludCBudl9jMmNfcG11X2NwdV90ZWFyZG93bih1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfYzJjX3BtdS5jLTczNi1cbmRyaXZlcnMvcGVyZi9udmlkaWFfdDQxMF9jMmNfcG11LmM6NzM3Olx0LyogQ2hvb3NlIGEgbmV3IENQVSB0byBtaWdyYXRlIG93bmVyc2hpcCBvZiB0aGUgUE1VIHRvICovXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfYzJjX3BtdS5jLTczOC1cdGRzdCA9IGNwdW1hc2tfYW55X2FuZF9idXQoXHUwMDI2YzJjX3BtdS1cdTAwM2Vhc3NvY2lhdGVkX2NwdXMsXG4tLVxuZHJpdmVycy9wZXJmL252aWRpYV90NDEwX2NtZW1fbGF0ZW5jeV9wbXUuYz01NDk9c3RhdGljIGludCBjbWVtX2xhdF9wbXVfY3B1X3RlYXJkb3duKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvcGVyZi9udmlkaWFfdDQxMF9jbWVtX2xhdGVuY3lfcG11LmMtNTU5LVxuZHJpdmVycy9wZXJmL252aWRpYV90NDEwX2NtZW1fbGF0ZW5jeV9wbXUuYzo1NjA6XHQvKiBDaG9vc2UgYSBuZXcgQ1BVIHRvIG1pZ3JhdGUgb3duZXJzaGlwIG9mIHRoZSBQTVUgdG8gKi9cbmRyaXZlcnMvcGVyZi9udmlkaWFfdDQxMF9jbWVtX2xhdGVuY3lfcG11LmMtNTYxLVx0ZHN0ID0gY3B1bWFza19hbnlfYW5kX2J1dChcdTAwMjZjbWVtX2xhdF9wbXUtXHUwMDNlYXNzb2NpYXRlZF9jcHVzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX1ZJUlRJT19WRklPX1BDSSkgJiM0Mzs9IHZpcnRpby12ZmlvLXBjaS5vXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9NYWtlZmlsZTozOnZpcnRpby12ZmlvLXBjaS15IDo9IG1haW4ubyBtaWdyYXRlLm9cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL01ha2VmaWxlLTQtdmlydGlvLXZmaW8tcGNpLSQoQ09ORklHX1ZJUlRJT19WRklPX1BDSV9BRE1JTl9MRUdBQ1kpICYjNDM7PSBsZWdhY3lfaW8ub1xuLS1cbmZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG5mcy9leHQ0L01ha2VmaWxlLTktXHRcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTA6XHRcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuLS1cbmluY2x1ZGUvbGludXgvaW9tbXUuaD04NDg9c3RydWN0IGlvbW11X2ZhdWx0X3BhcmFtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtODczLSAqXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg6ODc0OiAqIFRPRE86IG1pZ3JhdGUgb3RoZXIgcGVyIGRldmljZSBkYXRhIHBvaW50ZXJzIHVuZGVyIGlvbW11X2Rldl9kYXRhLCBlLmcuXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtODc1LSAqXHRzdHJ1Y3QgaW9tbXVfZ3JvdXBcdCppb21tdV9ncm91cDtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5Lmg9MTk9ZW51bSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTU0LSNkZWZpbmUgTVBPTF9NRl9NT1ZFX0FMTCAoMVx1MDAzY1x1MDAzYzIpXHQvKiBNb3ZlIGV2ZXJ5IHBhZ2UgdG8gY29uZm9ybSB0byBwb2xpY3kgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaDo1NTojZGVmaW5lIE1QT0xfTUZfTEFaWVx0ICgxXHUwMDNjXHUwMDNjMylcdC8qIFVOU1VQUE9SVEVEIEZMQUc6IExhenkgbWlncmF0ZSBvbiBmYXVsdCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTU2LSNkZWZpbmUgTVBPTF9NRl9JTlRFUk5BTCAoMVx1MDAzY1x1MDAzYzQpXHQvKiBJbnRlcm5hbCBmbGFncyBzdGFydCBoZXJlICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTY3LSNkZWZpbmUgTVBPTF9GX1NIQVJFRCAgKDEgXHUwMDNjXHUwMDNjIDApXHQvKiBpZGVudGlmeSBzaGFyZWQgcG9saWNpZXMgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaDo2ODojZGVmaW5lIE1QT0xfRl9NT0ZcdCgxIFx1MDAzY1x1MDAzYyAzKSAvKiB0aGlzIHBvbGljeSB3YW50cyBtaWdyYXRlIG9uIGZhdWx0ICovXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgtNjktI2RlZmluZSBNUE9MX0ZfTU9ST05cdCgxIFx1MDAzY1x1MDAzYyA0KSAvKiBNaWdyYXRlIE9uIHByb3Rub25lIFJlZmVyZW5jZSBPbiBOb2RlICovXG4tLVxua2VybmVsL2Nncm91cC9jcHVzZXQuYz0yOTk1PXN0YXRpYyBpbnQgY3B1c2V0X2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbmtlcm5lbC9jZ3JvdXAvY3B1c2V0LmMtMzAyNy1cdCAqIGNwdXNldC5jcHVzIHdoZW4gdGhlcmUgYXJlIGFjdGl2ZSB0YXNrcyBpbnNpZGUuIFdoZW4gdGhhdCBoYXBwZW5zLFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzozMDI4Olx0ICogd2Ugc2hvdWxkIGFsbG93IHRhc2tzIHRvIG1pZ3JhdGUgb3V0IHdpdGhvdXQgc2VjdXJpdHkgY2hlY2sgdG8gbWFrZVxua2VybmVsL2Nncm91cC9jcHVzZXQuYy0zMDI5LVx0ICogc3VyZSB0aGV5IHdpbGwgYmUgYWJsZSB0byBydW4gYWZ0ZXIgbWlncmF0aW9uLlxuLS1cbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jPTIwPXN0YXRpYyBpbmxpbmUgYm9vbCBpcnFfbmVlZHNfZml4dXAoc3RydWN0IGlycV9kYXRhICpkKVxuLS1cbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jLTUyLVxua2VybmVsL2lycS9jcHVob3RwbHVnLmM6NTM6c3RhdGljIGJvb2wgbWlncmF0ZV9vbmVfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYylcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jLTU0LXtcbi0tXG5rZXJuZWwvaXJxL2NwdWhvdHBsdWcuYz0xNzE9dm9pZCBpcnFfbWlncmF0ZV9hbGxfb2ZmX3RoaXNfY3B1KHZvaWQpXG4tLVxua2VybmVsL2lycS9jcHVob3RwbHVnLmMtMTgwLVx0XHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrLCBcdTAwMjZkZXNjLVx1MDAzZWxvY2spIHtcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jOjE4MTpcdFx0XHRhZmZpbml0eV9icm9rZW4gPSBtaWdyYXRlX29uZV9pcnEoZGVzYyk7XG5rZXJuZWwvaXJxL2NwdWhvdHBsdWcuYy0xODItXHRcdFx0aWYgKGFmZmluaXR5X2Jyb2tlbiBcdTAwMjZcdTAwMjYgZGVzYy1cdTAwM2VhZmZpbml0eV9ub3RpZnkpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04OTE5PV9fYnBmX2tmdW5jIGJvb2wgc2N4X2JwZl9kc3FfbW92ZV90b19sb2NhbF9fX3YyKHU2NCBkc3FfaWQsIHU2NCBlbnFfZmxhZ3MsXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04OTQ3LVx0XHQgKiBBIHN1Y2Nlc3NmdWxseSBjb25zdW1lZCB0YXNrIGNhbiBiZSBkZXF1ZXVlZCBiZWZvcmUgaXQgc3RhcnRzXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjg5NDg6XHRcdCAqIHJ1bm5pbmcgd2hpbGUgdGhlIENQVSBpcyB0cnlpbmcgdG8gbWlncmF0ZSBvdGhlciBkaXNwYXRjaGVkXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTg5NDktXHRcdCAqIHRhc2tzLiBCdW1wIG5yX3Rhc2tzIHRvIHRlbGwgYmFsYW5jZV9vbmUoKSB0byByZXRyeSBvbiBlbXB0eVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MjY3Nj1ib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI3NTYtXG5rZXJuZWwvc2NoZWQvZmFpci5jOjI3NTc6XHQvKiBBbHdheXMgYWxsb3cgbWlncmF0ZSBvbiBwcml2YXRlIGZhdWx0cyAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0yNzU4LVx0aWYgKGNwdXBpZF9tYXRjaF9waWQocCwgbGFzdF9jcHVwaWQpKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9Mjg3Nz1zdGF0aWMgdm9pZCB1cGRhdGVfbnVtYV9zdGF0cyhzdHJ1Y3QgdGFza19udW1hX2VudiAqZW52LFxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjg5Ni1cdFx0aWYgKGZpbmRfaWRsZSBcdTAwMjZcdTAwMjYgaWRsZV9jb3JlIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiAhcnEtXHUwMDNlbnJfcnVubmluZyBcdTAwMjZcdTAwMjYgaWRsZV9jcHUoY3B1KSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYzoyODk3Olx0XHRcdGlmIChSRUFEX09OQ0UocnEtXHUwMDNlbnVtYV9taWdyYXRlX29uKSB8fFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yODk4LVx0XHRcdCAgICAhY3B1bWFza190ZXN0X2NwdShjcHUsIGVudi1cdTAwM2VwLVx1MDAzZWNwdXNfcHRyKSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTI5MTc9c3RhdGljIHZvaWQgdGFza19udW1hX2Fzc2lnbihzdHJ1Y3QgdGFza19udW1hX2VudiAqZW52LFxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjkyMi1cdC8qIENoZWNrIGlmIHJ1bi1xdWV1ZSBwYXJ0IG9mIGFjdGl2ZSBOVU1BIGJhbGFuY2UuICovXG5rZXJuZWwvc2NoZWQvZmFpci5jOjI5MjM6XHRpZiAoZW52LVx1MDAzZWJlc3RfY3B1ICE9IGVudi1cdTAwM2Vkc3RfY3B1IFx1MDAyNlx1MDAyNiB4Y2hnKFx1MDAyNnJxLVx1MDAzZW51bWFfbWlncmF0ZV9vbiwgMSkpIHtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjkyNC1cdFx0aW50IGNwdTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI5MzUtXHRcdFx0cnEgPSBjcHVfcnEoZW52LVx1MDAzZWRzdF9jcHUpO1xua2VybmVsL3NjaGVkL2ZhaXIuYzoyOTM2Olx0XHRcdGlmICgheGNoZyhcdTAwMjZycS1cdTAwM2VudW1hX21pZ3JhdGVfb24sIDEpKVxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTM3LVx0XHRcdFx0Z290byBhc3NpZ247XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTUwLVx0XHRycSA9IGNwdV9ycShlbnYtXHUwMDNlYmVzdF9jcHUpO1xua2VybmVsL3NjaGVkL2ZhaXIuYzoyOTUxOlx0XHRXUklURV9PTkNFKHJxLVx1MDAzZW51bWFfbWlncmF0ZV9vbiwgMCk7XG5rZXJuZWwvc2NoZWQvZmFpci5jLTI5NTItXHR9XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0zMDA1PXN0YXRpYyBib29sIHRhc2tfbnVtYV9jb21wYXJlKHN0cnVjdCB0YXNrX251bWFfZW52ICplbnYsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0zMDE3LVxua2VybmVsL3NjaGVkL2ZhaXIuYzozMDE4Olx0aWYgKFJFQURfT05DRShkc3RfcnEtXHUwMDNlbnVtYV9taWdyYXRlX29uKSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzAxOS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzI0OT1zdGF0aWMgaW50IHRhc2tfbnVtYV9taWdyYXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTMzNjgtXHRcdHJldCA9IG1pZ3JhdGVfdGFza190byhwLCBlbnYuYmVzdF9jcHUpO1xua2VybmVsL3NjaGVkL2ZhaXIuYzozMzY5Olx0XHRXUklURV9PTkNFKGJlc3RfcnEtXHUwMDNlbnVtYV9taWdyYXRlX29uLCAwKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzM3MC1cdFx0aWYgKHJldCAhPSAwKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzM3NS1cdHJldCA9IG1pZ3JhdGVfc3dhcChwLCBlbnYuYmVzdF90YXNrLCBlbnYuYmVzdF9jcHUsIGVudi5zcmNfY3B1KTtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MzM3NjpcdFdSSVRFX09OQ0UoYmVzdF9ycS1cdTAwM2VudW1hX21pZ3JhdGVfb24sIDApO1xua2VybmVsL3NjaGVkL2ZhaXIuYy0zMzc3LVxuLS1cbmtlcm5lbC9zY2hlZC9ydC5jPTE4OTY9c3RhdGljIHN0cnVjdCBycSAqZmluZF9sb2NrX2xvd2VzdF9ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBycSAqcnEpXG4tLVxua2VybmVsL3NjaGVkL3J0LmMtMTk1NS0gKiBJZiB0aGUgY3VycmVudCBDUFUgaGFzIG1vcmUgdGhhbiBvbmUgUlQgdGFzaywgc2VlIGlmIHRoZSBub25cbmtlcm5lbC9zY2hlZC9ydC5jOjE5NTY6ICogcnVubmluZyB0YXNrIGNhbiBtaWdyYXRlIG92ZXIgdG8gYSBDUFUgdGhhdCBpcyBydW5uaW5nIGEgdGFza1xua2VybmVsL3NjaGVkL3J0LmMtMTk1Ny0gKiBvZiBsZXNzZXIgcHJpb3JpdHkuXG4tLVxua2VybmVsL3NjaGVkL3NjaGVkLmg9MTEzNT1zdHJ1Y3QgcnEge1xuLS1cbmtlcm5lbC9zY2hlZC9zY2hlZC5oLTEyMDktI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL3NjaGVkLmg6MTIxMDpcdHVuc2lnbmVkIGludFx0XHRudW1hX21pZ3JhdGVfb247XG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjExLSNlbmRpZlxuLS1cbm1tL01ha2VmaWxlPTk3PW9iai0kKENPTkZJR19NRU1URVNUKVx0XHQmIzQzOz0gbWVtdGVzdC5vXG5tbS9NYWtlZmlsZTo5ODpvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG5tbS9NYWtlZmlsZS05OS1vYmotJChDT05GSUdfTlVNQSkgJiM0Mzs9IG1lbW9yeS10aWVycy5vXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzE5NC1cdFx0ICogSW4gY2FzZSB3ZSBjYW5ub3QgY2xlYXIgUGFnZUFub25FeGNsdXNpdmUoKSwgc3BsaXQgdGhlIFBNRFxubW0vaHVnZV9tZW1vcnkuYzozMTk1Olx0XHQgKiBvbmx5IGFuZCBsZXQgdHJ5X3RvX21pZ3JhdGVfb25lKCkgZmFpbCBsYXRlci5cbm1tL2h1Z2VfbWVtb3J5LmMtMzE5Ni1cdFx0ICpcbi0tXG5tbS9odWdldGxiLmM9NzE4NT12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4tLVxubW0vaHVnZXRsYi5jLTcxODgtXG5tbS9odWdldGxiLmM6NzE4OTpcdGh1Z2V0bGJfY2dyb3VwX21pZ3JhdGUob2xkX2ZvbGlvLCBuZXdfZm9saW8pO1xubW0vaHVnZXRsYi5jLTcxOTAtXHRmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24obmV3X2ZvbGlvLCByZWFzb24pO1xuLS1cbm1tL3JtYXAuYz0yMzk4PXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNDE4LSAqL1xubW0vcm1hcC5jOjI0MTk6c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTI0MjAtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTI3NDc9dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcbi0tXG5tbS9ybWFwLmMtMjc0OS1cdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG5tbS9ybWFwLmM6Mjc1MDpcdFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxubW0vcm1hcC5jLTI3NTEtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuLS1cbnRvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL2FybTY0L2hpc2lsaWNvbi9oaXAwOC91bmNvcmUtaGhhLmpzb24tMTQ4LVx0ICAgIFwmIzM0O0V2ZW50TmFtZVwmIzM0OzogXCYjMzQ7c2Rpci1ob21lLW1pZ3JhdGVcJiMzNDssXG50b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC9hcm02NC9oaXNpbGljb24vaGlwMDgvdW5jb3JlLWhoYS5qc29uOjE0OTpcdCAgICBcJiMzNDtCcmllZkRlc2NyaXB0aW9uXCYjMzQ7OiBcJiMzNDtDb3VudCBvZiB0aGUgbnVtYmVyIG9mIEhIQSBTLURpciByZWFkIGhvbWUgbWlncmF0ZSBvcGVyYXRpb25zXCYjMzQ7LFxudG9vbHMvcGVyZi9wbXUtZXZlbnRzL2FyY2gvYXJtNjQvaGlzaWxpY29uL2hpcDA4L3VuY29yZS1oaGEuanNvbi0xNTAtXHQgICAgXCYjMzQ7VW5pdFwmIzM0OzogXCYjMzQ7aGlzaV9zY2NsLGhoYVwmIzM0O1xuLS1cbnRvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL2FybTY0L2hpc2lsaWNvbi9oaXAwOC91bmNvcmUtaGhhLmpzb24tMTU0LVx0ICAgIFwmIzM0O0V2ZW50TmFtZVwmIzM0OzogXCYjMzQ7ZWRpci1ob21lLW1pZ3JhdGVcJiMzNDssXG50b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC9hcm02NC9oaXNpbGljb24vaGlwMDgvdW5jb3JlLWhoYS5qc29uOjE1NTpcdCAgICBcJiMzNDtCcmllZkRlc2NyaXB0aW9uXCYjMzQ7OiBcJiMzNDtDb3VudCBvZiB0aGUgbnVtYmVyIG9mIEhIQSBFLURpciByZWFkIGhvbWUgbWlncmF0ZSBvcGVyYXRpb25zXCYjMzQ7LFxudG9vbHMvcGVyZi9wbXUtZXZlbnRzL2FyY2gvYXJtNjQvaGlzaWxpY29uL2hpcDA4L3VuY29yZS1oaGEuanNvbi0xNTYtXHQgICAgXCYjMzQ7VW5pdFwmIzM0OzogXCYjMzQ7aGlzaV9zY2NsLGhoYVwmIzM0O1xuLS1cbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5PTk5PWNsYXNzIFJ1bnF1ZXVlU25hcHNob3Q6XG4tLVxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHktMTI1LVxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHk6MTI2Olx0ZGVmIG1pZ3JhdGVfb3V0KHNlbGYsIG9sZCk6XG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weS0xMjctXHRcdGlmIG9sZCBub3QgaW4gc2VsZi50YXNrczpcbi0tXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weT0xNjE9Y2xhc3MgVGltZVNsaWNlOlxuLS1cbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5LTE5NC1cdFx0b2xkX3JxID0gc2VsZi5wcmV2LnJxc1tvbGRfY3B1XVxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHk6MTk1Olx0XHRvdXRfcnEgPSBvbGRfcnEubWlncmF0ZV9vdXQobmV3KVxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHktMTk2LVx0XHRzZWxmLnJxc1tvbGRfY3B1XSA9IG91dF9ycVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzUyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IG9mIGB0cnlfdG9fbWlncmF0ZV9vbmVgKioKCk9rYXksIHNvIEkmIzM5O3ZlIGVzdGFibGlzaGVkIHRoYXQgYG1tL21pZ3JhdGUuY2AgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2Ugd2hlbiBgQ09ORklHX01JR1JBVElPTmAgaXMgZW5hYmxlZC4gTXkgbmV4dCBxdWVzdGlvbiBpczogRG9lcyB0aGUgYHRyeV90b19taWdyYXRlX29uZWAgZnVuY3Rpb24sIGZvdW5kIGluIGBtbS9ybWFwLmNgLCBhbHNvIGRlcGVuZCBvbiB0aGF0IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24/IEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBtZW1vcnkgbWlncmF0aW9uLCBzbyBpdCB3b3VsZCBtYWtlIHNlbnNlIGlmIGl0IGRpZC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBtbS9ybWFwLmNgIGFuZCB2ZXJpZnkgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvZGUgYXJvdW5kIHRoZSBgdHJ5X3RvX21pZ3JhdGVfb25lYCBkZWNsYXJhdGlvbiBhbmQgaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBDT05GSUdfTUlHUkFUSU9OYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX21pZ3JhdGVfb25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MzAzMD1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxOTQtXHRcdCAqIEluIGNhc2Ugd2UgY2Fubm90IGNsZWFyIFBhZ2VBbm9uRXhjbHVzaXZlKCksIHNwbGl0IHRoZSBQTURcbm1tL2h1Z2VfbWVtb3J5LmM6MzE5NTpcdFx0ICogb25seSBhbmQgbGV0IHRyeV90b19taWdyYXRlX29uZSgpIGZhaWwgbGF0ZXIuXG5tbS9odWdlX21lbW9yeS5jLTMxOTYtXHRcdCAqXG4tLVxubW0vcm1hcC5jPTIzOTg9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0MTgtICovXG5tbS9ybWFwLmM6MjQxOTpzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9ybWFwLmMtMjQyMC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcbi0tXG5tbS9ybWFwLmM9Mjc0Nz12b2lkIHRyeV90b19taWdyYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNzQ5LVx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcbm1tL3JtYXAuYzoyNzUwOlx0XHQucm1hcF9vbmUgPSB0cnlfdG9fbWlncmF0ZV9vbmUsXG5tbS9ybWFwLmMtMjc1MS1cdFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTQ1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBNaWdyYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBgdHJ5X3RvX21pZ3JhdGVgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiBpdCYjMzk7cyBwcm90ZWN0ZWQgYnkgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBsaWtlIGAjaWZkZWYgQ09ORklHX01JR1JBVElPTmAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRoYXQgd291bGQgY29udHJvbCBpdHMgaW5jbHVzaW9uIGJhc2VkIG9uIGEgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIGlzIHRoZSBmaXJzdCB0aGluZyBJJiMzOTtkIGNoZWNrLiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYnVpbGQtdGltZSBiZWhhdmlvciBhbmQgcG9ydGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19taWdyYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcm1hcC5oPTg0NT1pbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKiwgaW50IGlzX2xvY2tlZCxcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NDctXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4NDg6dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NDktdm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICosIGVudW0gdHR1X2ZsYWdzIGZsYWdzKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMTk0LVx0XHQgKiBJbiBjYXNlIHdlIGNhbm5vdCBjbGVhciBQYWdlQW5vbkV4Y2x1c2l2ZSgpLCBzcGxpdCB0aGUgUE1EXG5tbS9odWdlX21lbW9yeS5jOjMxOTU6XHRcdCAqIG9ubHkgYW5kIGxldCB0cnlfdG9fbWlncmF0ZV9vbmUoKSBmYWlsIGxhdGVyLlxubW0vaHVnZV9tZW1vcnkuYy0zMTk2LVx0XHQgKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzM3Nj1zdGF0aWMgdm9pZCB1bm1hcF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzM5MS1cdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKVxubW0vaHVnZV9tZW1vcnkuYzozMzkyOlx0XHR0cnlfdG9fbWlncmF0ZShmb2xpbywgdHR1X2ZsYWdzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzM5My1cdGVsc2Vcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM0NzQ9c3RhdGljIHZvaWQgcmVtYXBfcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBsb25nIG5yLCBpbnQgZmxhZ3MpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNDc3LVxubW0vaHVnZV9tZW1vcnkuYzozNDc4Olx0LyogSWYgdW5tYXBfZm9saW8oKSB1c2VzIHRyeV90b19taWdyYXRlKCkgb24gZmlsZSwgcmVtb3ZlIHRoaXMgY2hlY2sgKi9cbm1tL2h1Z2VfbWVtb3J5LmMtMzQ3OS1cdGlmICghZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbi0tXG5tbS9taWdyYXRlLmM9MTIwNz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fdW5tYXAobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTI3Ny1cdC8qXG5tbS9taWdyYXRlLmM6MTI3ODpcdCAqIEJ5IHRyeV90b19taWdyYXRlKCksIHNyYy1cdTAwM2VtYXBjb3VudCBnb2VzIGRvd24gdG8gMCBoZXJlLiBJbiB0aGlzIGNhc2UsXG5tbS9taWdyYXRlLmMtMTI3OS1cdCAqIHdlIGNhbm5vdCBub3RpY2UgdGhhdCBhbm9uX3ZtYSBpcyBmcmVlZCB3aGlsZSB3ZSBtaWdyYXRlIGEgcGFnZS5cbi0tXG5tbS9taWdyYXRlLmMtMTMzMS1cdFx0XHQgICAgICAgIWZvbGlvX3Rlc3Rfa3NtKHNyYykgXHUwMDI2XHUwMDI2ICFhbm9uX3ZtYSwgc3JjKTtcbm1tL21pZ3JhdGUuYzoxMzMyOlx0XHR0cnlfdG9fbWlncmF0ZShzcmMsIG1vZGUgPT0gTUlHUkFURV9BU1lOQyA/IFRUVV9CQVRDSF9GTFVTSCA6IDApO1xubW0vbWlncmF0ZS5jLTEzMzMtXHRcdG9sZF9mb2xpb19zdGF0ZSB8PSBGT0xJT19XQVNfTUFQUEVEO1xuLS1cbm1tL21pZ3JhdGUuYz0xNDczPXN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTE1MzctXG5tbS9taWdyYXRlLmM6MTUzODpcdFx0dHJ5X3RvX21pZ3JhdGUoc3JjLCB0dHUpO1xubW0vbWlncmF0ZS5jLTE1MzktXHRcdHBhZ2Vfd2FzX21hcHBlZCA9IDE7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDE9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTM5Ny1cdFx0ICogb3B0aW1pc2F0aW9uIHRvIGF2b2lkIHdhbGtpbmcgdGhlIHJtYXAgbGF0ZXIgd2l0aFxubW0vbWlncmF0ZV9kZXZpY2UuYzozOTg6XHRcdCAqIHRyeV90b19taWdyYXRlKCkuXG5tbS9taWdyYXRlX2RldmljZS5jLTM5OS1cdFx0ICovXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz01NjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy02MDgtXHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MDk6XHRcdFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIDApO1xubW0vbWlncmF0ZV9kZXZpY2UuYy02MTAtXG4tLVxubW0vcm1hcC5jPTIzOTg9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI0MTgtICovXG5tbS9ybWFwLmM6MjQxOTpzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9ybWFwLmMtMjQyMC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcbi0tXG5tbS9ybWFwLmMtMjQzNC1cdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcbm1tL3JtYXAuYzoyNDM1Olx0ICogdHJ5X3RvX21pZ3JhdGUoKSBtYXkgcmV0dXJuIGJlZm9yZSBmb2xpb19tYXBwZWQoKSBoYXMgYmVjb21lIGZhbHNlLFxubW0vcm1hcC5jLTI0MzYtXHQgKiBpZiBwYWdlIHRhYmxlIGxvY2tpbmcgaXMgc2tpcHBlZDogdXNlIFRUVV9TWU5DIHRvIHdhaXQgZm9yIHRoYXQuXG4tLVxubW0vcm1hcC5jLTI3MzktLyoqXG5tbS9ybWFwLmM6Mjc0MDogKiB0cnlfdG9fbWlncmF0ZSAtIHRyeSB0byByZXBsYWNlIGFsbCBwYWdlIHRhYmxlIG1hcHBpbmdzIHdpdGggc3dhcCBlbnRyaWVzXG5tbS9ybWFwLmMtMjc0MS0gKiBAZm9saW86IHRoZSBmb2xpbyB0byByZXBsYWNlIHBhZ2UgdGFibGUgZW50cmllcyBmb3Jcbi0tXG5tbS9ybWFwLmMtMjc0Ni0gKi9cbm1tL3JtYXAuYzoyNzQ3OnZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG5tbS9ybWFwLmMtMjc0OC17XG5tbS9ybWFwLmMtMjc0OS1cdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG5tbS9ybWFwLmM6Mjc1MDpcdFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxubW0vcm1hcC5jLTI3NTEtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ2OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXJuZWwgTWlncmF0aW9uIGFuZCBIdWdlIFBhZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBtZW1vcnkgbWlncmF0aW9uIGFuZCBIdWdlVExCIHBhZ2VzLiBgdHJ5X3RvX21pZ3JhdGVgIGlzIGluIGBtbS9ybWFwLmNgLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgdGhhdCYjMzk7cyBiYXNlbGluZSBmdW5jdGlvbmFsaXR5LiBUaGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgYHJlbW92ZV9taWdyYXRpb25fcHRlYCByZXNpZGVzIGluIGBtbS9taWdyYXRlLmNgLCBidXQgb25seSBpZiBgQ09ORklHX01JR1JBVElPTmAgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbiwgbWVhbmluZyBlbmFibGluZyBgQ09ORklHX01JR1JBVElPTmAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLgoKTXkgcHJpbWFyeSBmb2N1cywgdGhvdWdoLCBpcyBvbiBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIE5vdywgSSYjMzk7bSB0aGlua2luZywgJiMzNDt3aGF0IGFib3V0IGBDT05GSUdfQVJNNjRgPyYjMzQ7IEkgY2FuJiMzOTt0IGRpcmVjdGx5IHNwZWNpZnkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCBidXQgYXJlIHRoZXJlIGFueSBpbmRpcmVjdCBkZXBlbmRlbmNpZXM/IExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgYG1tL21wcm90ZWN0LmNgIGhhcyBhbiBgI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VgIGd1YXJkLCBzbyB0aGF0JiMzOTtzIGFub3RoZXIgaW1wb3J0YW50IG1vZHVsZSB0byBjb25zaWRlci4gQWxzbywgaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgdGhlcmUmIzM5O3MgdGhlIGBpc192bV9odWdldGxiX3BhZ2UocHZtdy0mZ3Q7dm1hKWAgY2hlY2suCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBmdW5jdGlvbnMgYXJlIHJlYWxseSBjZW50cmFsIHRvIHRoaXMgYXJlYS4gSSYjMzk7bSBmb2N1c2luZyBvbjoKCiogICBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgCiogICBgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgCiogICBgY2hlY2tfcHRlYAoqICAgYHRyeV90b191bm1hcF9vbmVgCiogICBgdHJ5X3RvX21pZ3JhdGVfb25lYAoKQW5kIGZpbmFsbHksIGBmaW5kX251bV9jb250aWdgIC0gd2hpY2ggaXMgYXJjaC1zcGVjaWZpYyAoaW4gYGFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY2ApLiBXaGlsZSB0aGlzIGlzIGFybTY0LCBpdCYjMzk7cyBzdGlsbCBnb29kIHRvIGluY2x1ZGUsIHNvIGxldCYjMzk7cyBjaGVjayB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluZF9udW1fY29udGlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz02NT1ib29sIGFyY2hfaHVnZXRsYl9taWdyYXRpb25fc3VwcG9ydGVkKHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTc3LVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjc4OnN0YXRpYyBpbnQgZmluZF9udW1fY29udGlnKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNzktXHRcdFx0ICAgcHRlX3QgKnB0ZXAsIHNpemVfdCAqcGdzaXplKVxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz0xMTk9cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcbi0tXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMTI3LVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjEyODpcdG5jb250aWcgPSBmaW5kX251bV9jb250aWcobW0sIGFkZHIsIHB0ZXAsIFx1MDAyNnBnc2l6ZSk7XG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMTI5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmNvbnRpZzsgaSYjNDM7JiM0MzssIHB0ZXAmIzQzOyYjNDM7KSB7XG4tLVxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jPTQ1Mz12b2lkIGh1Z2VfcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00NjctXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6NDY4Olx0bmNvbnRpZyA9IGZpbmRfbnVtX2NvbnRpZyhtbSwgYWRkciwgcHRlcCwgXHUwMDI2cGdzaXplKTtcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00NjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NTk5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgS2VybmVsIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlkZW50aWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaDogYHJlbW92ZV9taWdyYXRpb25fcHRlYCwgYHByb3Rfbm9uZV9odWdldGxiX2VudHJ5YCwgYGNoZWNrX3B0ZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYHRyeV90b19taWdyYXRlX29uZWAsIGFuZCBgaHVnZV9wdGVwX2dldGAuIEkmIzM5O20gaW1tZWRpYXRlbHkgbm90aW5nIHRoYXQgd2hpbGUgYGh1Z2VfcHRlcF9nZXRgIGlzIGdsb2JhbCwgdGhlIG90aGVycyBhcmUgc3RhdGljIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIHNvdXJjZSBmaWxlcy4gU3BlY2lmaWNhbGx5OiBgY2hlY2tfcHRlYCBpcyBpbiBgbW0vcGFnZV92bWFfbWFwcGVkLmNgLCBgdHJ5X3RvX3VubWFwX29uZWAgYW5kIGB0cnlfdG9fbWlncmF0ZV9vbmVgIGFyZSBpbiBgbW0vcm1hcC5jYCwgYHJlbW92ZV9taWdyYXRpb25fcHRlYCByZXNpZGVzIGluIGBtbS9taWdyYXRlLmNgLCBhbmQgYHByb3Rfbm9uZV9odWdldGxiX2VudHJ5YCBpcyBkZWZpbmVkIGluIGBtbS9tcHJvdGVjdC5jYC4KCkkgbmVlZCB0byBjb25maXJtIGBodWdlX3B0ZXBfZ2V0YCBpcyBpbmRlZWQgZ2xvYmFsLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQmIzM5O3MgaW4gYGFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY2AgYW5kLCB5ZXMsIGl0JiMzOTtzIGdsb2JhbGx5IGFjY2Vzc2libGUuCgpUbyByZWNhcCwgdGhlIHRhcmdldGVkIGZ1bmN0aW9ucyBhcmU6CiogICBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgCiogICBgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgCiogICBgY2hlY2tfcHRlYAoqICAgYHRyeV90b191bm1hcF9vbmVgCiogICBgdHJ5X3RvX21pZ3JhdGVfb25lYAoqICAgYGh1Z2VfcHRlcF9nZXRgCgpUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBodWdlX3B0ZXBfZ2V0YCBmb3IgcmVhZGluZyBodWdlIHBhZ2UgUFRFcyBhbmQgdGhlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIG9mIG11bHRpcGxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgKG1pZ3JhdGlvbiwgbXByb3RlY3QsIHJtYXAsIHBhZ2VcX3ZtYVxfbWFwcGVkKSB0byB1c2UgaXQgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgYHB0ZXBfZ2V0YC4gVGhlcmUmIzM5O3MgYWxzbyBhIG1lbnRpb24gb2YgYSBidWcgZml4IGluIGBmaW5kX251bV9jb250aWdgIGZvciBhcm02NC4gVGhlc2UgYXJlIGFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgd2l0aGluIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGZvciBmdXp6aW5nLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgTUlHUkFUSU9OYCBhbmQgYEhVR0VUTEJfUEFHRWAgYXJlIHRoZSBrZXkgY29udGVuZGVycy4gSSBjYW4gcXVpY2tseSBjb25maXJtIHRoYXQgYENPTkZJR19NSUdSQVRJT05gIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIGluZGVlZCB0aGUgc3RhbmRhcmQgY29uZmlnIG5hbWVzLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIGdvb2QuIE5vdywgbGV0JiMzOTtzIHByb2NlZWQgdG8gZnVydGhlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjUtXHRib29sIFwmIzM0OzY0a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxuYXJjaC9zaC9tbS9LY29uZmlnOjE2ODpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMjU2S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cdGJvb2wgXCYjMzQ7MjU2a0JcJiMzNDtcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTcxLVxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXG5hcmNoL3NoL21tL0tjb25maWctMTczLVx0Ym9vbCBcJiMzNDsxTUJcJiMzNDtcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzQtXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXHRib29sIFwmIzM0OzRNQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXG5hcmNoL3NoL21tL0tjb25maWctMTgwLVx0Ym9vbCBcJiMzNDs2NE1CXCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy03MDgtXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNzEwLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTE3NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvICpIVUdFVExCX1BBR0UqIGlzIGluZGVlZCBkZWZpbmVkIHdpdGhpbiBgZnMvS2NvbmZpZ2AuIEdvb2QuIFRoYXQgY29uZmlybXMgaXQmIzM5O3MgYSBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcuIE5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBvbiBteSBtaW5kIGlzLCBsZXQmIzM5O3Mgc2VlIGhvdyBgTUlHUkFUSU9OYCBpbnRlcmFjdHMgd2l0aCB0aGF04oCmIHRpbWUgdG8gbG9vayBpbnRvIHRoYXQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcGFnZSBtaWdyYXRpb24gYW5kIGh1Z2VwYWdlcyB0byBkZXRlcm1pbmUgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcyBjb25maWd1cmF0aW9uJiMzOTtzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JR1JBVElPTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY5NS1cbm1tL0tjb25maWc6Njk2OmNvbmZpZyBNSUdSQVRJT05cbm1tL0tjb25maWctNjk3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQyMAoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWlncmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfTUlHUkFUSU9OYCBpcyBpbmRlZWQgZGVmaW5lZCB3aXRoaW4gYG1tL0tjb25maWdgIOKAkyBjaGVjay4gTm93LCBsZXQmIzM5O3MgZG8gYSBmaW5hbCBwYXNzIG9uIHRoaXMgcGF0Y2guIEl0JiMzOTtzIHRvdWNoaW5nIGEgZmFpciBhbW91bnQgb2YgY29kZSwgc3BlY2lmaWNhbGx5IGBtbS9taWdyYXRlLmNgLCBgbW0vbXByb3RlY3QuY2AsIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AsIGBtbS9ybWFwLmNgLCBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAuIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlZmFjdG9yLiBDb25zaWRlcmluZyB0aGF0LCBhbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgSSYjMzk7bSBnb2luZyB0byBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGg6IGByZW1vdmVfbWlncmF0aW9uX3B0ZWAsIGBwcm90X25vbmVfaHVnZXRsYl9lbnRyeWAsIGBjaGVja19wdGVgLCBgdHJ5X3RvX3VubWFwX29uZWAsIGB0cnlfdG9fbWlncmF0ZV9vbmVgLCBgaHVnZV9wdGVwX2dldGAsIGFuZCBgZmluZF9udW1fY29udGlnYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGR1cmluZyBhbmFseXNpcyBhbmQgZnV6emluZy4KClRoZSBmdW5kYW1lbnRhbCBjaGFuZ2UgaGVyZSBpcyBpbnRyb2R1Y2luZyBhbmQgdXNpbmcgYGh1Z2VfcHRlcF9nZXRgIHdoZXJlIGBwdGVwX2dldGAgd2FzIHByZXZpb3VzbHkgYmVpbmcgdXNlZCBpbiB0aGUgaHVnZXRsYiBwYWdlIHRhYmxlIGVudHJ5IGFjY2Vzcywgd2hpY2ggaGFzIGNvcmUgaW1wbGljYXRpb25zLCBhcyBpdCBzcGFucyB0aGUgbWlncmF0aW9uLCBybWFwLCBtcHJvdGVjdCwgYW5kIHBhZ2Vfdm1hX21hcHBlZCBjb2RlIHBhdGhzLiBUaGlzIGlzIGEgYmlnIGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBwYXRjaCBhbHNvIGFwcGVhcnMgdG8gYWRkcmVzcyBhbiBBUk02NC1zcGVjaWZpYyBidWcgaW4gYGZpbmRfbnVtX2NvbnRpZ2AuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcywgdG91Y2hpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIHRodXMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuCgpJJiMzOTttIG1ha2luZyBzdXJlIGBIVUdFVExCX1BBR0VgIGFuZCBgTUlHUkFUSU9OYCBhcmUgZW5hYmxlZCBhcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGFueSB0ZXN0IGJ1aWxkcyBzaW5jZSB0aGVzZSBhcmUgZnVuZGFtZW50YWwgdG8gdGhpcyBwYXRjaCYjMzk7cyBzY29wZS4gR2l2ZW4gdGhlIHdpZGVzcHJlYWQgaW1wYWN0IGFuZCB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhvcm91Z2hseSB0ZXN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCX1BBR0UmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVtb3ZlX21pZ3JhdGlvbl9wdGUmIzM0OywKICAgICYjMzQ7cHJvdF9ub25lX2h1Z2V0bGJfZW50cnkmIzM0OywKICAgICYjMzQ7Y2hlY2tfcHRlJiMzNDssCiAgICAmIzM0O3RyeV90b191bm1hcF9vbmUmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21pZ3JhdGVfb25lJiMzNDssCiAgICAmIzM0O2h1Z2VfcHRlcF9nZXQmIzM0OywKICAgICYjMzQ7ZmluZF9udW1fY29udGlnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgaG93IGh1Z2V0bGIgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSByZWFkIGJ5IGludHJvZHVjaW5nIGFuZCB1c2luZyBgaHVnZV9wdGVwX2dldGAgaW5zdGVhZCBvZiBgcHRlcF9nZXRgIGFjcm9zcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGluY2x1ZGluZyBtaWdyYXRpb24sIHJtYXAsIG1wcm90ZWN0LCBhbmQgcGFnZV92bWFfbWFwcGVkLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBmaW5kX251bV9jb250aWdgIGZvciBhcm02NC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJfUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZW1vdmVfbWlncmF0aW9uX3B0ZSYjMzQ7LAogICAgJiMzNDtwcm90X25vbmVfaHVnZXRsYl9lbnRyeSYjMzQ7LAogICAgJiMzNDtjaGVja19wdGUmIzM0OywKICAgICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fbWlncmF0ZV9vbmUmIzM0OywKICAgICYjMzQ7aHVnZV9wdGVwX2dldCYjMzQ7LAogICAgJiMzNDtmaW5kX251bV9jb250aWcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBob3cgaHVnZXRsYiBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIHJlYWQgYnkgaW50cm9kdWNpbmcgYW5kIHVzaW5nIGBodWdlX3B0ZXBfZ2V0YCBpbnN0ZWFkIG9mIGBwdGVwX2dldGAgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgaW5jbHVkaW5nIG1pZ3JhdGlvbiwgcm1hcCwgbXByb3RlY3QsIGFuZCBwYWdlX3ZtYV9tYXBwZWQuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYGZpbmRfbnVtX2NvbnRpZ2AgZm9yIGFybTY0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQyOjMyLjMxNzU4NDg2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDQ5MTQ4OTIyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCX1BBR0VcIixcbiAgICBcIk1JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlbW92ZV9taWdyYXRpb25fcHRlXCIsXG4gICAgXCJwcm90X25vbmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiY2hlY2tfcHRlXCIsXG4gICAgXCJ0cnlfdG9fdW5tYXBfb25lXCIsXG4gICAgXCJ0cnlfdG9fbWlncmF0ZV9vbmVcIixcbiAgICBcImh1Z2VfcHRlcF9nZXRcIixcbiAgICBcImZpbmRfbnVtX2NvbnRpZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGh1Z2V0bGIgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSByZWFkIGJ5IGludHJvZHVjaW5nIGFuZCB1c2luZyBgaHVnZV9wdGVwX2dldGAgaW5zdGVhZCBvZiBgcHRlcF9nZXRgIGFjcm9zcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGluY2x1ZGluZyBtaWdyYXRpb24sIHJtYXAsIG1wcm90ZWN0LCBhbmQgcGFnZV92bWFfbWFwcGVkLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBmaW5kX251bV9jb250aWdgIGZvciBhcm02NC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQyOjMyLjMxNzU5NzcwN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY1MDIxOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTVhOWUwZDBiYmUxM2EzNTc0MDQyMmFkZjQwNzhiYzg2MjJmNWVhN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjQyOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xcbmluZGV4IDMwNzcyYTkwOWFlYTNlLi44ZTc5OWMxZmUwYWE2OSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcXG5AQCAtODcsNyArODcsNyBAQCBzdGF0aWMgaW50IGZpbmRfbnVtX2NvbnRpZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcXG4gXFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XFxuIFxcdHBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xcbi1cXHRpZiAoKHB0ZV90ICopcG1kcCA9PSBwdGVwKSB7XFxuK1xcdGlmICgocHRlX3QgKilQVFJfQUxJR05fRE9XTihwbWRwLCBzaXplb2YoKnBtZHApICogQ09OVF9QTURTKSA9PSBwdGVwKSB7XFxuIFxcdFxcdCpwZ3NpemUgPSBQTURfU0laRTtcXG4gXFx0XFx0cmV0dXJuIENPTlRfUE1EUztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLjY5OTZkMDJhY2YxNzE0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMTI2MSw2ICsxMjYxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY291bnRfc3ViKGxvbmcgbCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG4gfVxcbiBcXG4rcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XFxuK1xcbiBzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbiB7XFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li5jNjVmMGY0M2RmN2ViYiAxMDA2NDRcXG4tLS0gYS9tbS9taWdyYXRlLmNcXG4rKysgYi9tbS9taWdyYXRlLmNcXG5AQCAtMzcxLDcgKzM3MSwxMSBAQCBzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiAjZW5kaWZcXG4tXFx0XFx0b2xkX3B0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXFxuK1xcdFxcdFxcdG9sZF9wdGUgPSBodWdlX3B0ZXBfZ2V0KHZtYS1cXHUwMDNldm1fbW0sIHB2bXcuYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cHZtdy5wdGUpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdG9sZF9wdGUgPSBwdGVwX2dldChwdm13LnB0ZSk7XFxuIFxcdFxcdGlmIChybWFwX3dhbGtfYXJnLVxcdTAwM2VtYXBfdW51c2VkX3RvX3plcm9wYWdlIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICB0cnlfdG9fbWFwX3VudXNlZF90b196ZXJvcGFnZShcXHUwMDI2cHZtdywgZm9saW8sIG9sZF9wdGUsIGlkeCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbmRpZmYgLS1naXQgYS9tbS9tcHJvdGVjdC5jIGIvbW0vbXByb3RlY3QuY1xcbmluZGV4IDljYmY5MzJiMDI4Y2Y5Li42MzYwZDhhMzc4MDIzNCAxMDA2NDRcXG4tLS0gYS9tbS9tcHJvdGVjdC5jXFxuKysrIGIvbW0vbXByb3RlY3QuY1xcbkBAIC02OTksMTQgKzY5OSwyMCBAQCBzdGF0aWMgaW50IHByb3Rfbm9uZV9wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHQwIDogLUVBQ0NFUztcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VcXG4gc3RhdGljIGludCBwcm90X25vbmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbiBcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIHtcXG4tXFx0cmV0dXJuIHBmbl9tb2RpZnlfYWxsb3dlZChwdGVfcGZuKHB0ZXBfZ2V0KHB0ZSkpLFxcbi1cXHRcXHRcXHRcXHQgICoocGdwcm90X3QgKikod2Fsay1cXHUwMDNlcHJpdmF0ZSkpID9cXG4tXFx0XFx0MCA6IC1FQUNDRVM7XFxuK1xcdGNvbnN0IHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG4rXFxuK1xcdGlmIChwZm5fbW9kaWZ5X2FsbG93ZWQocHRlX3BmbihlbnRyeSksICoocGdwcm90X3QgKikod2Fsay1cXHUwMDNlcHJpdmF0ZSkpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FQUNDRVNTO1xcbiB9XFxuKyNlbHNlXFxuKyNkZWZpbmUgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlcXHROVUxMXFxuKyNlbmRpZlxcbiBcXG4gc3RhdGljIGludCBwcm90X25vbmVfdGVzdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xcbmluZGV4IDJjY2JhYmZiMmNjMTdhLi4xOGUxZDM0MWY0NjNjOSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xcbisrKyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuQEAgLTEwNyw3ICsxMDcsMTMgQEAgc3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLFxcbiBzdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4tXFx0cHRlX3QgcHRlbnQgPSBwdGVwX2dldChwdm13LVxcdTAwM2VwdGUpO1xcbitcXHRwdGVfdCBwdGVudDtcXG4rXFxuK1xcdGlmIChpc192bV9odWdldGxiX3BhZ2UocHZtdy1cXHUwMDNldm1hKSlcXG4rXFx0XFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctXFx1MDAzZXZtYS1cXHUwMDNldm1fbW0sIHB2bXctXFx1MDAzZWFkZHJlc3MsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHB2bXctXFx1MDAzZXB0ZSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cHRlbnQgPSBwdGVwX2dldChwdm13LVxcdTAwM2VwdGUpO1xcbiBcXG4gXFx0aWYgKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19NSUdSQVRJT04pIHtcXG4gXFx0XFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggMWM3N2Q1ZGMwNmU5ZmEuLmVhNGFkNWU2NjJmN2RiIDEwMDY0NFxcbi0tLSBhL21tL3JtYXAuY1xcbisrKyBiL21tL3JtYXAuY1xcbkBAIC0yMDk1LDE0ICsyMDk1LDE5IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdC8qIFVuZXhwZWN0ZWQgUE1ELW1hcHBlZCBUSFA/ICovXFxuIFxcdFxcdFZNX0JVR19PTl9GT0xJTyghcHZtdy5wdGUsIGZvbGlvKTtcXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcywgdGhhdFxcbi1cXHRcXHQgKiBhY3R1YWxseSBtYXAgcGFnZXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XFxuK1xcdFxcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuK1xcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxuK1xcdFxcdFxcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcXG4gXFx0XFx0XFx0cGZuID0gcHRlX3BmbihwdGV2YWwpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBIYW5kbGUgUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsXFxuK1xcdFxcdFxcdCAqIHRoYXQgYWN0dWFsbHkgbWFwIHBhZ2VzLlxcbitcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCk7XFxuIFxcbiBcXHRcXHRcXHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xcbkBAIC0yMTEwLDcgKzIxMTUsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRzdWJwYWdlID0gZm9saW9fcGFnZShmb2xpbywgcGZuIC0gZm9saW9fcGZuKGZvbGlvKSk7XFxuLVxcdFxcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuIFxcdFxcdGFub25fZXhjbHVzaXZlID0gZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHQgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7XFxuIFxcbkBAIC0yNTAxLDE0ICsyNTA1LDE5IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0LyogVW5leHBlY3RlZCBQTUQtbWFwcGVkIFRIUD8gKi9cXG4gXFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pO1xcbiBcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0XFxuLVxcdFxcdCAqIGFjdHVhbGx5IG1hcCBwYWdlcy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcXG4rXFx0XFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcXG4rXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG4rXFx0XFx0XFx0cHRldmFsID0gaHVnZV9wdGVwX2dldChtbSwgYWRkcmVzcywgcHZtdy5wdGUpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xcbiBcXHRcXHRcXHRwZm4gPSBwdGVfcGZuKHB0ZXZhbCk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcyxcXG4rXFx0XFx0XFx0ICogdGhhdCBhY3R1YWxseSBtYXAgcGFnZXMuXFxuK1xcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKTtcXG4gXFxuIFxcdFxcdFxcdHBmbiA9IHNvZnRsZWFmX3RvX3BmbihlbnRyeSk7XFxuQEAgLTI1MTYsNyArMjUyNSw2IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0c3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpO1xcbi1cXHRcXHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xcbiBcXHRcXHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0IFBhZ2VBbm9uRXhjbHVzaXZlKHN1YnBhZ2UpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDI6MzMuMDgzNjk0NTc4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk3MjUzNjIzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQl9QQUdFXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZW1vdmVfbWlncmF0aW9uX3B0ZVwiLFxuICAgIFwicHJvdF9ub25lX2h1Z2V0bGJfZW50cnlcIixcbiAgICBcImNoZWNrX3B0ZVwiLFxuICAgIFwidHJ5X3RvX3VubWFwX29uZVwiLFxuICAgIFwidHJ5X3RvX21pZ3JhdGVfb25lXCIsXG4gICAgXCJodWdlX3B0ZXBfZ2V0XCIsXG4gICAgXCJmaW5kX251bV9jb250aWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBodWdldGxiIHBhZ2UgdGFibGUgZW50cmllcyBhcmUgcmVhZCBieSBpbnRyb2R1Y2luZyBhbmQgdXNpbmcgYGh1Z2VfcHRlcF9nZXRgIGluc3RlYWQgb2YgYHB0ZXBfZ2V0YCBhY3Jvc3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyBpbmNsdWRpbmcgbWlncmF0aW9uLCBybWFwLCBtcHJvdGVjdCwgYW5kIHBhZ2Vfdm1hX21hcHBlZC4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgZmluZF9udW1fY29udGlnYCBmb3IgYXJtNjQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE1YTllMGQwYmJlMTNhMzU3NDA0MjJhZGY0MDc4YmM4NjIyZjVlYTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjQyOjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jXG5pbmRleCAzMDc3MmE5MDlhZWEzZS4uOGU3OTljMWZlMGFhNjkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNcbisrKyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuY1xuQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIGludCBmaW5kX251bV9jb250aWcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHA0ZHAgPSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpO1xuIFx0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XG4gXHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbi1cdGlmICgocHRlX3QgKilwbWRwID09IHB0ZXApIHtcbitcdGlmICgocHRlX3QgKilQVFJfQUxJR05fRE9XTihwbWRwLCBzaXplb2YoKnBtZHApICogQ09OVF9QTURTKSA9PSBwdGVwKSB7XG4gXHRcdCpwZ3NpemUgPSBQTURfU0laRTtcbiBcdFx0cmV0dXJuIENPTlRfUE1EUztcbiBcdH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uNjk5NmQwMmFjZjE3MTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xMjYxLDYgKzEyNjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jb3VudF9zdWIobG9uZyBsLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gfVxuIFxuK3B0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xuK1xuIHN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXG4ge1xuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggZDliMjM5MDlkNzE2YzYuLmM2NWYwZjQzZGY3ZWJiIDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC0zNzEsNyArMzcxLDExIEBAIHN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiAjZW5kaWZcbi1cdFx0b2xkX3B0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbitcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4rXHRcdFx0b2xkX3B0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLVx1MDAzZXZtX21tLCBwdm13LmFkZHJlc3MsXG4rXHRcdFx0XHRcdFx0cHZtdy5wdGUpO1xuK1x0XHRlbHNlXG4rXHRcdFx0b2xkX3B0ZSA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbiBcdFx0aWYgKHJtYXBfd2Fsa19hcmctXHUwMDNlbWFwX3VudXNlZF90b196ZXJvcGFnZSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHRyeV90b19tYXBfdW51c2VkX3RvX3plcm9wYWdlKFx1MDAyNnB2bXcsIGZvbGlvLCBvbGRfcHRlLCBpZHgpKVxuIFx0XHRcdGNvbnRpbnVlO1xuZGlmZiAtLWdpdCBhL21tL21wcm90ZWN0LmMgYi9tbS9tcHJvdGVjdC5jXG5pbmRleCA5Y2JmOTMyYjAyOGNmOS4uNjM2MGQ4YTM3ODAyMzQgMTAwNjQ0XG4tLS0gYS9tbS9tcHJvdGVjdC5jXG4rKysgYi9tbS9tcHJvdGVjdC5jXG5AQCAtNjk5LDE0ICs2OTksMjAgQEAgc3RhdGljIGludCBwcm90X25vbmVfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0MCA6IC1FQUNDRVM7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFXG4gc3RhdGljIGludCBwcm90X25vbmVfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiB7XG4tXHRyZXR1cm4gcGZuX21vZGlmeV9hbGxvd2VkKHB0ZV9wZm4ocHRlcF9nZXQocHRlKSksXG4tXHRcdFx0XHQgICoocGdwcm90X3QgKikod2Fsay1cdTAwM2Vwcml2YXRlKSkgP1xuLVx0XHQwIDogLUVBQ0NFUztcbitcdGNvbnN0IHB0ZV90IGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVx1MDAzZW1tLCBhZGRyLCBwdGUpO1xuK1xuK1x0aWYgKHBmbl9tb2RpZnlfYWxsb3dlZChwdGVfcGZuKGVudHJ5KSwgKihwZ3Byb3RfdCAqKSh3YWxrLVx1MDAzZXByaXZhdGUpKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVBQ0NFU1M7XG4gfVxuKyNlbHNlXG4rI2RlZmluZSBwcm90X25vbmVfaHVnZXRsYl9lbnRyeVx0TlVMTFxuKyNlbmRpZlxuIFxuIHN0YXRpYyBpbnQgcHJvdF9ub25lX3Rlc3QodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQsXG4gXHRcdFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5pbmRleCAyY2NiYWJmYjJjYzE3YS4uMThlMWQzNDFmNDYzYzkgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuKysrIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcbkBAIC0xMDcsNyArMTA3LDEzIEBAIHN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbiBzdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHB0ZV90IHB0ZW50ID0gcHRlcF9nZXQocHZtdy1cdTAwM2VwdGUpO1xuK1x0cHRlX3QgcHRlbnQ7XG4rXG4rXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHB2bXctXHUwMDNldm1hKSlcbitcdFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctXHUwMDNldm1hLVx1MDAzZXZtX21tLCBwdm13LVx1MDAzZWFkZHJlc3MsXG4rXHRcdFx0XHQgICAgICBwdm13LVx1MDAzZXB0ZSk7XG4rXHRlbHNlXG4rXHRcdHB0ZW50ID0gcHRlcF9nZXQocHZtdy1cdTAwM2VwdGUpO1xuIFxuIFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKSB7XG4gXHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCAxYzc3ZDVkYzA2ZTlmYS4uZWE0YWQ1ZTY2MmY3ZGIgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTIwOTUsMTQgKzIwOTUsMTkgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0LyogVW5leHBlY3RlZCBQTUQtbWFwcGVkIFRIUD8gKi9cbiBcdFx0Vk1fQlVHX09OX0ZPTElPKCFwdm13LnB0ZSwgZm9saW8pO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBIYW5kbGUgUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsIHRoYXRcbi1cdFx0ICogYWN0dWFsbHkgbWFwIHBhZ2VzLlxuLVx0XHQgKi9cbi1cdFx0cHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuK1x0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuK1x0XHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSkge1xuK1x0XHRcdHB0ZXZhbCA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHJlc3MsIHB2bXcucHRlKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwdGV2YWwgPSBwdGVwX2dldChwdm13LnB0ZSk7XG4rXHRcdH1cbiBcdFx0aWYgKGxpa2VseShwdGVfcHJlc2VudChwdGV2YWwpKSkge1xuIFx0XHRcdHBmbiA9IHB0ZV9wZm4ocHRldmFsKTtcbiBcdFx0fSBlbHNlIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEhhbmRsZSBQRk4gc3dhcCBQVEVzLCBzdWNoIGFzIGRldmljZS1leGNsdXNpdmUgb25lcyxcbitcdFx0XHQgKiB0aGF0IGFjdHVhbGx5IG1hcCBwYWdlcy5cbitcdFx0XHQgKi9cbiBcdFx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRldmFsKTtcbiBcbiBcdFx0XHRwZm4gPSBzb2Z0bGVhZl90b19wZm4oZW50cnkpO1xuQEAgLTIxMTAsNyArMjExNSw2IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdH1cbiBcbiBcdFx0c3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpO1xuLVx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7XG4gXG5AQCAtMjUwMSwxNCArMjUwNSwxOSBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC8qIFVuZXhwZWN0ZWQgUE1ELW1hcHBlZCBUSFA/ICovXG4gXHRcdFZNX0JVR19PTl9GT0xJTyghcHZtdy5wdGUsIGZvbGlvKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogSGFuZGxlIFBGTiBzd2FwIFBURXMsIHN1Y2ggYXMgZGV2aWNlLWV4Y2x1c2l2ZSBvbmVzLCB0aGF0XG4tXHRcdCAqIGFjdHVhbGx5IG1hcCBwYWdlcy5cbi1cdFx0ICovXG4tXHRcdHB0ZXZhbCA9IHB0ZXBfZ2V0KHB2bXcucHRlKTtcbitcdFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcbitcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcbitcdFx0XHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cHRldmFsID0gcHRlcF9nZXQocHZtdy5wdGUpO1xuK1x0XHR9XG4gXHRcdGlmIChsaWtlbHkocHRlX3ByZXNlbnQocHRldmFsKSkpIHtcbiBcdFx0XHRwZm4gPSBwdGVfcGZuKHB0ZXZhbCk7XG4gXHRcdH0gZWxzZSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBIYW5kbGUgUEZOIHN3YXAgUFRFcywgc3VjaCBhcyBkZXZpY2UtZXhjbHVzaXZlIG9uZXMsXG4rXHRcdFx0ICogdGhhdCBhY3R1YWxseSBtYXAgcGFnZXMuXG4rXHRcdFx0ICovXG4gXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZXZhbCk7XG4gXG4gXHRcdFx0cGZuID0gc29mdGxlYWZfdG9fcGZuKGVudHJ5KTtcbkBAIC0yNTE2LDcgKzI1MjUsNiBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdH1cbiBcbiBcdFx0c3VicGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIHBmbiAtIGZvbGlvX3Bmbihmb2xpbykpO1xuLVx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRhbm9uX2V4Y2x1c2l2ZSA9IGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgUGFnZUFub25FeGNsdXNpdmUoc3VicGFnZSk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0MjozMy4wODM2OTY5NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzMwMjM3ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIEh1Z2V0bGIgUGFnZSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIGBwdGVwX2dldGAgd2l0aCBodWdldGxiIHBhZ2VzLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHJldm9sdmVzIGFyb3VuZCBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiwgYGh1Z2VfcHRlcF9nZXRgLCBhbmQgdGhlbiBzdHJhdGVnaWNhbGx5IHJlcGxhY2luZyBjYWxscyB0byBgcHRlcF9nZXRgIHdpdGggaXQgaW4gYSBmZXcga2V5IGFyZWFzIG9mIHRoZSBrZXJuZWwuIEkgc2VlIGl0J3MgdG91Y2hpbmcgYG1tL21pZ3JhdGUuY2AgKHNwZWNpZmljYWxseSBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgKSwgYG1tL21wcm90ZWN0LmNgIChgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgKSwgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCAoYGNoZWNrX3B0ZWApLCBhbmQgYG1tL3JtYXAuY2AgKGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYHRyeV90b19taWdyYXRlX29uZWApLiBUaG9zZSBhcmUgZGVmaW5pdGVseSBjcml0aWNhbCBwYXJ0cyBvZiBtZW1vcnkgbWFuYWdlbWVudC5cblxuVGhlIGNvZGUgYWxzbyBtb2RpZmllcyBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYC4gVGhhdCdzIGEgYml0IG1vcmUgdGFyZ2V0ZWQsIGJ1dCBzdGlsbCBpbmRpY2F0ZXMgYSBjaGFuZ2UgdG8gY29yZSBmdW5jdGlvbmFsaXR5LiBJJ20gZm9jdXNpbmcgb24gdGhhdCBgUFRSX0FMSUdOX0RPV05gIGNoYW5nZS4gSXQncyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGFsdGVyYXRpb24gdG8gaG93IFBURXMgYXJlIGFjY2Vzc2VkIGZvciBodWdldGxiIHBhZ2VzIG9uIGFybTY0LiBJJ2xsIG5lZWQgdG8gbG9vayB2ZXJ5IGNsb3NlbHkgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFsaWdubWVudC5cblxuR2l2ZW4gdGhlc2UgY2hhbmdlcywgdGhpcyBpcyBhYnNvbHV0ZWx5IHNvbWV0aGluZyB0aGF0IGRlbWFuZHMgZnV6emluZy4gQW55IG1vZGlmaWNhdGlvbiB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgZXNwZWNpYWxseSBodWdldGxiLCBtaWdyYXRpb24sIHJtYXAsIGFuZCBtcHJvdGVjdCwgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBwb3RlbnRpYWwgaXNzdWVzLlxuXG5Ob3csIGxldCdzIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IENPTkZJRyBvcHRpb25zIHRvIGVuc3VyZSBwcm9wZXIgZnV6emluZyBjb3ZlcmFnZS4gSSBrbm93IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhIGdpdmVuOyB3ZSBuZWVkIHRoYXQgZW5hYmxlZCB0byBldmVuIGJlIHJlbGV2YW50LiBHaXZlbiB0aGUgZmlsZXMgdG91Y2hlZCwgYENPTkZJR19NSUdSQVRJT05gIGlzIGxvb2tpbmcgbGlrZSBhIHN0cm9uZyBjYW5kaWRhdGUsIHBhcnRpY3VsYXJseSBiZWNhdXNlIG9mIHRoZSBgbW0vbWlncmF0ZS5jYCBhbmQgYHRyeV90b19taWdyYXRlX29uZWAgcmVmZXJlbmNlcy4gV2UnbGwgaGF2ZSB0byBrZWVwIHRoYXQgaW4gbWluZC4gQW5kIG9mIGNvdXJzZSwgdGhlIGBhcmNoL2FybTY0YCBjaGFuZ2UgcmVxdWlyZXMgYENPTkZJR19BUk02NGAsIHRob3VnaCBJJ2xsIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB3ZSBjYW4ndCBleHByZXNzIGFyY2ggY29uZmlnIG9wdGlvbnMgaW4gYEVuYWJsZUNvbmZpZ3NgLiBXZSBjYW4ganVzdCBtYWtlIHN1cmUgYEhVR0VUTEJfUEFHRWAgaXMgZW5hYmxlZC5cblxuSSBhbHNvIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBodWdlX3B0ZXBfZ2V0YCAqaXMqIGRvaW5nLCBzbyBJJ2xsIGdvIGNoZWNrIGl0cyBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGFuZCB0aGVuIHRyYWNrIGRvd24gd2hlcmUgaXQncyBhY3R1YWxseSBpbXBsZW1lbnRlZC4gVGhhdCdsbCBnaXZlIG1lIGEgZnVsbCBwaWN0dXJlIG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0Mjo0MC40MTM5MzgwODJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2NzEyOTQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdlX3B0ZXBfZ2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vYXJjaF9wZ3RhYmxlX2hlbHBlcnMucnN0PTIwMz1IdWdlVExCIFBhZ2UgVGFibGUgSGVscGVyc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3QtMjIwLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXFxuRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3Q6MjIxOnwgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIgICB8IENsZWFycyBhIEh1Z2VUTEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XFxuRG9jdW1lbnRhdGlvbi9tbS9hcmNoX3BndGFibGVfaGVscGVycy5yc3QtMjIyLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXFxuLS1cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9odWdldGxiLTNsZXZlbC5oLTE1LSAqIElmIG91ciBodWdlIHB0ZSBpcyBub24temVybyB0aGVuIG1hcmsgdGhlIHZhbGlkIGJpdC5cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9odWdldGxiLTNsZXZlbC5oOjE2OiAqIFRoaXMgYWxsb3dzIHB0ZV9wcmVzZW50KGh1Z2VfcHRlcF9nZXQobW0sYWRkcixwdGVwKSkgdG8gcmV0dXJuIHRydWUgZm9yIG5vbi16ZXJvXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vaHVnZXRsYi0zbGV2ZWwuaC0xNy0gKiBwdGVzLlxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vaHVnZXRsYi0zbGV2ZWwuaC0yMC0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9odWdldGxiLTNsZXZlbC5oOjIxOnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9odWdldGxiLTNsZXZlbC5oLTIyLXtcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTQxPWV4dGVybiBpbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00NC0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmg6NDU6ZXh0ZXJuIHB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDYtXFx0XFx0XFx0XFx0ICAgICBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBzeik7XFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD01ND1leHRlcm4gdm9pZCBodWdlX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNTYtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9odWdldGxiLmg6NTc6ZXh0ZXJuIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTU4LVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jPTk3PXN0YXRpYyBpbmxpbmUgaW50IG51bV9jb250aWdfcHRlcyh1bnNpZ25lZCBsb25nIHNpemUsIHNpemVfdCAqcGdzaXplKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTExOC1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM6MTE5OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTEyMC17XFxuLS1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9MzY5PXZvaWQgaHVnZV9wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zODAtXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjM4MTpwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy0zODItXFx0XFx0XFx0ICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opXFxuLS1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9NTE3PXB0ZV90IGh1Z2VfcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy01MjktXFx0fVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzo1MzA6XFx0cmV0dXJuIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHBzaXplKTtcXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNTMxLX1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD0xND1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0yMy0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjI0OnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTI1LVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTM3PXN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQyLVxcbmFyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDo0MzpcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcih2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBzeik7XFxuYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ0LVxcdGZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcik7XFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTE0LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVF9BTkRfQ0xFQVJcXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjE1OnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0xNi1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmg9Mjg9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTM4LVxcdCAqL1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmg6Mzk6XFx0cHRlID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgc3opO1xcbmFyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmgtNDAtXFx0Zmx1c2hfdGxiX3BhZ2Uodm1hLCBhZGRyKTtcXG4tLVxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD04PXZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMTEtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDoxMjpwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0xMy1cXHRcXHRcXHQgICAgICBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBzeik7XFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9odWdldGxicGFnZS5jPTEyMT12b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9wYXJpc2MvbW0vaHVnZXRsYnBhZ2UuYy0xMjctXFxuYXJjaC9wYXJpc2MvbW0vaHVnZXRsYnBhZ2UuYzoxMjg6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5hcmNoL3BhcmlzYy9tbS9odWdldGxicGFnZS5jLTEyOS1cXHRcXHRcXHQgICAgICBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBzeilcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9NDM9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ2LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVF9BTkRfQ0xFQVJcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjQ3OnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC00OC1cXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9NTU9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTYwLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmg6NjE6XFx0cHRlID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCwgc3opO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtNjItXFx0Zmx1c2hfaHVnZXRsYl9wYWdlKHZtYSwgYWRkcik7XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4Lmg9MTk9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4LmgtMjItI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL25vaGFzaC8zMi9odWdldGxiLTh4eC5oOjIzOnN0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbm9oYXNoLzMyL2h1Z2V0bGItOHh4LmgtMjQte1xcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg9MjU9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0yOS0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmg6MzA6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzEtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCxcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTQzPWludCBodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ3LSNkZWZpbmUgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVFxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjQ4OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApO1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTQ5LVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTUtI2lmZGVmIENPTkZJR19SSVNDVl9JU0FfU1ZOQVBPVFxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzo2OnB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTcte1xcbi0tXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jPTI3ND1pbnQgaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2h1Z2V0bGJwYWdlLmMtMzA0LVxcbmFyY2gvcmlzY3YvbW0vaHVnZXRsYnBhZ2UuYzozMDU6cHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuYXJjaC9yaXNjdi9tbS9odWdldGxicGFnZS5jLTMwNi1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oPTIzPXZvaWQgX19zZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjYtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDoyNzpwdGVfdCBodWdlX3B0ZXBfZ2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTI4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg6Mjk6cHRlX3QgX19odWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzAtXFx0XFx0XFx0XFx0cHRlX3QgKnB0ZXApO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC0zMi0jZGVmaW5lIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaDozMzpzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtMzQtXFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTM2LXtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjM3OlxcdHJldHVybiBfX2h1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTM4LX1cXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg9NTE9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTUzLXtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjU0OlxcdHJldHVybiBfX2h1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXApO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNTUtfVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD01OD1zdGF0aWMgaW5saW5lIGludCBodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNjEte1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmg6NjI6XFx0aW50IGNoYW5nZWQgPSAhcHRlX3NhbWUoaHVnZV9wdGVwX2dldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwKSwgcHRlKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTYzLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNjQtXFx0aWYgKGNoYW5nZWQpIHtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjY1OlxcdFxcdF9faHVnZV9wdGVwX2dldF9hbmRfY2xlYXIodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlcCk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaC02Ni1cXHRcXHRfX3NldF9odWdlX3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwLCBwdGUpO1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaD03Mj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oLTc0LXtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjc1OlxcdHB0ZV90IHB0ZSA9IF9faHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZXApO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9odWdldGxiLmgtNzYtXFxuLS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYz0xNTY9dm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTE2MS1cXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYzoxNjI6cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcClcXG5hcmNoL3MzOTAvbW0vaHVnZXRsYnBhZ2UuYy0xNjMte1xcbi0tXFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMtMTY2LVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jOjE2NzpwdGVfdCBfX2h1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTE2OC1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKVxcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTE2OS17XFxuYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmM6MTcwOlxcdHB0ZV90IHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZXApO1xcbmFyY2gvczM5MC9tbS9odWdldGxicGFnZS5jLTE3MS1cXHRwbWRfdCAqcG1kcCA9IChwbWRfdCAqKSBwdGVwO1xcbi0tXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9odWdldGxiLmg9MTg9dm9pZCBfX3NldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjEtI2RlZmluZSBfX0hBVkVfQVJDSF9IVUdFX1BURVBfR0VUX0FORF9DTEVBUlxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vaHVnZXRsYi5oOjIyOnB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9odWdldGxiLmgtMjMtXFx0XFx0XFx0ICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgc3opO1xcbi0tXFxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jPTI3Nj12b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jLTI4MS1cXG5hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmM6MjgyOnB0ZV90IGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jLTI4My1cXHRcXHRcXHQgICAgICBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBzeilcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTMyNz1zdGF0aWMgYm9vbCBodWdldGxiX3ZtYV9tYXBzX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTMzNS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzozMzY6XFx0cHRlID0gaHVnZV9wdGVwX2dldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0zMzctXFx0aWYgKGh1Z2VfcHRlX25vbmUocHRlKSB8fCAhcHRlX3ByZXNlbnQocHRlKSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0xMjYzPXN0YXRpYyBpbnQgc21hcHNfaHVnZXRsYl9yYW5nZShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyNzQtXFx0cHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHZtYSksIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMjc1OlxcdHB0ZW50ID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI3Ni1cXHRpZiAocHRlX3ByZXNlbnQocHRlbnQpKSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjIwOT1zdGF0aWMgaW50IHBhZ2VtYXBfaHVnZXRsYl9yYW5nZShwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMjIzLVxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaHN0YXRlX3ZtYSh2bWEpLCB3YWxrLVxcdTAwM2VtbSwgcHRlcCk7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIyMjQ6XFx0cHRlID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlcCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIyMjUtXFx0aWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0yOTIzPXN0YXRpYyBpbnQgcGFnZW1hcF9zY2FuX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjkzNi1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjkzNzpcXHRcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBzdGFydCwgcHRlcCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI5MzgtXFx0XFx0Y2F0ZWdvcmllcyA9IHAtXFx1MDAzZWN1cl92bWFfY2F0ZWdvcnkgfCBwYWdlbWFwX2h1Z2V0bGJfY2F0ZWdvcnkocHRlKTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yOTQ4LVxcbmZzL3Byb2MvdGFza19tbXUuYzoyOTQ5OlxcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIHN0YXJ0LCBwdGVwKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjk1MC1cXHRjYXRlZ29yaWVzID0gcC1cXHUwMDNlY3VyX3ZtYV9jYXRlZ29yeSB8IHBhZ2VtYXBfaHVnZXRsYl9jYXRlZ29yeShwdGUpO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTI5OTY9c3RhdGljIGludCBwYWdlbWFwX3NjYW5faHVnZXRsYl9ob2xlX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTMwMTItXFx0XFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBtbSwgcHRlcCk7XFxuZnMvcHJvYy90YXNrX21tdS5jOjMwMTM6XFx0XFx0cHRlID0gaHVnZV9wdGVwX2dldChtbSwgYWRkciwgcHRlcCk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTMwMTQtXFx0XFx0bWFrZV91ZmZkX3dwX2h1Z2VfcHRlKHZtYSwgYWRkciwgcHRlcCwgcHRlKTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zNDA1PXN0YXRpYyBpbnQgZ2F0aGVyX2h1Z2V0bGJfc3RhdHMocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zNDEzLVxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaHN0YXRlX3ZtYSh3YWxrLVxcdTAwM2V2bWEpLCB3YWxrLVxcdTAwM2VtbSwgcHRlKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MzQxNDpcXHRodWdlX3B0ZSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XFxuZnMvcHJvYy90YXNrX21tdS5jLTM0MTUtXFx0aWYgKCFwdGVfcHJlc2VudChodWdlX3B0ZSkpXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaD03MD1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2h1Z2VfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC03Ny0jaWZuZGVmIF9fSEFWRV9BUkNIX0hVR0VfUFRFUF9HRVRfQU5EX0NMRUFSXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmg6Nzg6c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2FzbS1nZW5lcmljL2h1Z2V0bGIuaC03OS1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIHN6KVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmg9MTA5PXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtMTE3LSNpZm5kZWYgX19IQVZFX0FSQ0hfSFVHRV9QVEVQX0dFVFxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvaHVnZXRsYi5oOjExODpzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9odWdldGxiLmgtMTE5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEwNDc9c3RhdGljIGlubGluZSBwdGVfdCBodWdlX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMDUxLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEwNTI6XFx0cmV0dXJuIGh1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyKHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsIHBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMDUzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEyNjA9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY291bnRfc3ViKGxvbmcgbCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMjYzLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjEyNjQ6cHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTI2NS1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Mjk1PXN0YXRpYyB2b2lkIGRhbW9uX2h1Z2V0bGJfbWtvbGQocHRlX3QgKnB0ZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTI5OC1cXHRib29sIHJlZmVyZW5jZWQgPSBmYWxzZTtcXG5tbS9kYW1vbi92YWRkci5jOjI5OTpcXHRwdGVfdCBlbnRyeSA9IGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZSk7XFxubW0vZGFtb24vdmFkZHIuYy0zMDAtXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKGVudHJ5KSk7XFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTMyMj1zdGF0aWMgaW50IGRhbW9uX21rb2xkX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtMzMwLVxcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgd2Fsay1cXHUwMDNlbW0sIHB0ZSk7XFxubW0vZGFtb24vdmFkZHIuYzozMzE6XFx0ZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtMzMyLVxcdGlmICghcHRlX3ByZXNlbnQoZW50cnkpKVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz00Mzk9c3RhdGljIGludCBkYW1vbl95b3VuZ19odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTQ0OS1cXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbm1tL2RhbW9uL3ZhZGRyLmM6NDUwOlxcdGVudHJ5ID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG5tbS9kYW1vbi92YWRkci5jLTQ1MS1cXHRpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSlcXG4tLVxcbm1tL2htbS5jPTU0Mz1zdGF0aWMgaW50IGhtbV92bWFfd2Fsa19odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9obW0uYy01NTctXFx0cHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHZtYSksIHdhbGstXFx1MDAzZW1tLCBwdGUpO1xcbm1tL2htbS5jOjU1ODpcXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQod2Fsay1cXHUwMDNlbW0sIGFkZHIsIHB0ZSk7XFxubW0vaG1tLmMtNTU5LVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ4MjE9c3RhdGljIHZvaWQgc2V0X2h1Z2VfcHRlcF93cml0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy00ODI1LVxcbm1tL2h1Z2V0bGIuYzo0ODI2OlxcdGVudHJ5ID0gaHVnZV9wdGVfbWt3cml0ZShodWdlX3B0ZV9ta2RpcnR5KGh1Z2VfcHRlcF9nZXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkcmVzcywgcHRlcCkpKTtcXG5tbS9odWdldGxiLmMtNDgyNy1cXHRpZiAoaHVnZV9wdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCBhZGRyZXNzLCBwdGVwLCBlbnRyeSwgMSkpXFxuLS1cXG5tbS9odWdldGxiLmM9NDg1Mz1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9odWdldGxiLmMtNDkxMC1cXHRcXHRzcGluX2xvY2tfbmVzdGVkKHNyY19wdGwsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG5tbS9odWdldGxiLmM6NDkxMTpcXHRcXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQoc3JjX3ZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHNyY19wdGUpO1xcbm1tL2h1Z2V0bGIuYy00OTEyLWFnYWluOlxcbi0tXFxubW0vaHVnZXRsYi5jLTQ5NDctXFx0XFx0fSBlbHNlIHtcXG5tbS9odWdldGxiLmM6NDk0ODpcXHRcXHRcXHRlbnRyeSA9IGh1Z2VfcHRlcF9nZXQoc3JjX3ZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHNyY19wdGUpO1xcbm1tL2h1Z2V0bGIuYy00OTQ5LVxcdFxcdFxcdHB0ZV9mb2xpbyA9IHBhZ2VfZm9saW8ocHRlX3BhZ2UoZW50cnkpKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy00OTg5LVxcdFxcdFxcdFxcdHNwaW5fbG9ja19uZXN0ZWQoc3JjX3B0bCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbm1tL2h1Z2V0bGIuYzo0OTkwOlxcdFxcdFxcdFxcdGVudHJ5ID0gaHVnZV9wdGVwX2dldChzcmNfdm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgc3JjX3B0ZSk7XFxubW0vaHVnZXRsYi5jLTQ5OTEtXFx0XFx0XFx0XFx0aWYgKCFwdGVfc2FtZShzcmNfcHRlX29sZCwgZW50cnkpKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9NTAzNz1zdGF0aWMgdm9pZCBtb3ZlX2h1Z2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIG9sZF9hZGRyLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUwNTYtXFxubW0vaHVnZXRsYi5jOjUwNTc6XFx0cHRlID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIG9sZF9hZGRyLCBzcmNfcHRlLCBzeik7XFxubW0vaHVnZXRsYi5jLTUwNTgtXFxuLS1cXG5tbS9odWdldGxiLmM9NTA3Nj1pbnQgbW92ZV9odWdldGxiX3BhZ2VfdGFibGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUxMTItXFx0XFx0fVxcbm1tL2h1Z2V0bGIuYzo1MTEzOlxcdFxcdGlmIChodWdlX3B0ZV9ub25lKGh1Z2VfcHRlcF9nZXQobW0sIG9sZF9hZGRyLCBzcmNfcHRlKSkpXFxubW0vaHVnZXRsYi5jLTUxMTQtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9odWdldGxiLmM9NTE0MT12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTE4Mi1cXG5tbS9odWdldGxiLmM6NTE4MzpcXHRcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdGVwKTtcXG5tbS9odWdldGxiLmMtNTE4NC1cXHRcXHRpZiAoaHVnZV9wdGVfbm9uZShwdGUpKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNTIzMC1cXG5tbS9odWdldGxiLmM6NTIzMTpcXHRcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkcmVzcywgcHRlcCwgc3opO1xcbm1tL2h1Z2V0bGIuYy01MjMyLVxcdFxcdHRsYl9yZW1vdmVfaHVnZV90bGJfZW50cnkoaCwgdGxiLCBwdGVwLCBhZGRyZXNzKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz01NDE5PXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfd3Aoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdldGxiLmMtNTQyMy1cXHRjb25zdCBib29sIHVuc2hhcmUgPSB2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19VTlNIQVJFO1xcbm1tL2h1Z2V0bGIuYzo1NDI0OlxcdHB0ZV90IHB0ZSA9IGh1Z2VfcHRlcF9nZXQobW0sIHZtZi1cXHUwMDNlYWRkcmVzcywgdm1mLVxcdTAwM2VwdGUpO1xcbm1tL2h1Z2V0bGIuYy01NDI1LVxcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XFxuLS1cXG5tbS9odWdldGxiLmMtNTUzOC1cXHRcXHRcXHRpZiAobGlrZWx5KHZtZi1cXHUwMDNlcHRlIFxcdTAwMjZcXHUwMDI2XFxubW0vaHVnZXRsYi5jOjU1Mzk6XFx0XFx0XFx0XFx0ICAgcHRlX3NhbWUoaHVnZV9wdGVwX2dldChtbSwgdm1mLVxcdTAwM2VhZGRyZXNzLCB2bWYtXFx1MDAzZXB0ZSksIHB0ZSkpKVxcbm1tL2h1Z2V0bGIuYy01NTQwLVxcdFxcdFxcdFxcdGdvdG8gcmV0cnlfYXZvaWRjb3B5O1xcbi0tXFxubW0vaHVnZXRsYi5jLTU1NzYtXFx0dm1mLVxcdTAwM2VwdGUgPSBodWdldGxiX3dhbGsodm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGh1Z2VfcGFnZV9zaXplKGgpKTtcXG5tbS9odWdldGxiLmM6NTU3NzpcXHRpZiAobGlrZWx5KHZtZi1cXHUwMDNlcHRlIFxcdTAwMjZcXHUwMDI2IHB0ZV9zYW1lKGh1Z2VfcHRlcF9nZXQobW0sIHZtZi1cXHUwMDNlYWRkcmVzcywgdm1mLVxcdTAwM2VwdGUpLCBwdGUpKSkge1xcbm1tL2h1Z2V0bGIuYy01NTc4LVxcdFxcdHB0ZV90IG5ld3B0ZSA9IG1ha2VfaHVnZV9wdGUodm1hLCBuZXdfZm9saW8sICF1bnNoYXJlKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz01Njc4PXN0YXRpYyBib29sIGh1Z2V0bGJfcHRlX3N0YWJsZShzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU2ODQtXFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBtbSwgcHRlcCk7XFxubW0vaHVnZXRsYi5jOjU2ODU6XFx0c2FtZSA9IHB0ZV9zYW1lKGh1Z2VfcHRlcF9nZXQobW0sIGFkZHIsIHB0ZXApLCBvbGRfcHRlKTtcXG5tbS9odWdldGxiLmMtNTY4Ni1cXHRzcGluX3VubG9jayhwdGwpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTU2OTE9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU4NDktXFx0LyogSWYgcHRlIGNoYW5nZWQgZnJvbSB1bmRlciB1cywgcmV0cnkgKi9cXG5tbS9odWdldGxiLmM6NTg1MDpcXHRpZiAoIXB0ZV9zYW1lKGh1Z2VfcHRlcF9nZXQobW0sIHZtZi1cXHUwMDNlYWRkcmVzcywgdm1mLVxcdTAwM2VwdGUpLCB2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG5tbS9odWdldGxiLmMtNTg1MS1cXHRcXHRnb3RvIGJhY2tvdXQ7XFxuLS1cXG5tbS9odWdldGxiLmM9NTk0MT12bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTU5ODYtXFxubW0vaHVnZXRsYi5jOjU5ODc6XFx0dm1mLm9yaWdfcHRlID0gaHVnZV9wdGVwX2dldChtbSwgdm1mLmFkZHJlc3MsIHZtZi5wdGUpO1xcbm1tL2h1Z2V0bGIuYy01OTg4LVxcdGlmIChodWdlX3B0ZV9ub25lKHZtZi5vcmlnX3B0ZSkpXFxuLS1cXG5tbS9odWdldGxiLmMtNjA1Ni1cXHQvKiBDaGVjayBmb3IgYSByYWNpbmcgdXBkYXRlIGJlZm9yZSBjYWxsaW5nIGh1Z2V0bGJfd3AoKSAqL1xcbm1tL2h1Z2V0bGIuYzo2MDU3OlxcdGlmICh1bmxpa2VseSghcHRlX3NhbWUodm1mLm9yaWdfcHRlLCBodWdlX3B0ZXBfZ2V0KG1tLCB2bWYuYWRkcmVzcywgdm1mLnB0ZSkpKSlcXG5tbS9odWdldGxiLmMtNjA1OC1cXHRcXHRnb3RvIG91dF9wdGw7XFxuLS1cXG5tbS9odWdldGxiLmMtNjA2MC1cXHQvKiBIYW5kbGUgdXNlcmZhdWx0LXdwIGZpcnN0LCBiZWZvcmUgdHJ5aW5nIHRvIGxvY2sgbW9yZSBwYWdlcyAqL1xcbm1tL2h1Z2V0bGIuYzo2MDYxOlxcdGlmICh1c2VyZmF1bHRmZF93cCh2bWEpIFxcdTAwMjZcXHUwMDI2IGh1Z2VfcHRlX3VmZmRfd3AoaHVnZV9wdGVwX2dldChtbSwgdm1mLmFkZHJlc3MsIHZtZi5wdGUpKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2h1Z2V0bGIuYy02MDYyLVxcdCAgICAoZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1dSSVRFKSBcXHUwMDI2XFx1MDAyNiAhaHVnZV9wdGVfd3JpdGUodm1mLm9yaWdfcHRlKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTYxNjM9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MTg4LVxcdFxcdC8qIERvbid0IG92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgUFRFcyAoZXZlbiBtYXJrZXJzKSAqL1xcbm1tL2h1Z2V0bGIuYzo2MTg5OlxcdFxcdGlmICghaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUpKSkge1xcbm1tL2h1Z2V0bGIuYy02MTkwLVxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuLS1cXG5tbS9odWdldGxiLmMtNjMyNS1cXG5tbS9odWdldGxiLmM6NjMyNjpcXHRkc3RfcHRlcCA9IGh1Z2VfcHRlcF9nZXQoZHN0X21tLCBkc3RfYWRkciwgZHN0X3B0ZSk7XFxubW0vaHVnZXRsYi5jLTYzMjctXFx0LypcXG4tLVxcbm1tL2h1Z2V0bGIuYz02Mzg0PWxvbmcgaHVnZXRsYl9jaGFuZ2VfcHJvdGVjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NDQ5LVxcdFxcdH1cXG5tbS9odWdldGxiLmM6NjQ1MDpcXHRcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdGVwKTtcXG5tbS9odWdldGxiLmMtNjQ1MS1cXHRcXHRpZiAoaHVnZV9wdGVfbm9uZShwdGUpKSB7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTc2Mz1zdGF0aWMgaW50IGh3cG9pc29uX2h1Z2V0bGJfcmFuZ2UocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc3My1cXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGgsIHdhbGstXFx1MDAzZW1tLCBwdGVwKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjc3NDpcXHRwdGUgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGVwKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTc3NS1cXHRyZXQgPSBjaGVja19od3BvaXNvbmVkX2VudHJ5KHB0ZSwgYWRkciwgaHVnZV9wYWdlX3NoaWZ0KGgpLFxcbi0tXFxubW0vbWVtcG9saWN5LmM9NzcxPXN0YXRpYyBpbnQgcXVldWVfZm9saW9zX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTc4Mi1cXHRwdGwgPSBodWdlX3B0ZV9sb2NrKGhzdGF0ZV92bWEod2Fsay1cXHUwMDNldm1hKSwgd2Fsay1cXHUwMDNlbW0sIHB0ZSk7XFxubW0vbWVtcG9saWN5LmM6NzgzOlxcdHB0ZXAgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbm1tL21lbXBvbGljeS5jLTc4NC1cXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZXApKSB7XFxuLS1cXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMzc0LVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKVxcbm1tL21pZ3JhdGUuYzozNzU6XFx0XFx0XFx0b2xkX3B0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLVxcdTAwM2V2bV9tbSwgcHZtdy5hZGRyZXNzLFxcbm1tL21pZ3JhdGUuYy0zNzYtXFx0XFx0XFx0XFx0XFx0XFx0cHZtdy5wdGUpO1xcbi0tXFxubW0vbWlncmF0ZS5jPTUyMD12b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0X2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuLS1cXG5tbS9taWdyYXRlLmMtNTI3LVxcdHNwaW5fbG9jayhwdGwpO1xcbm1tL21pZ3JhdGUuYzo1Mjg6XFx0cHRlID0gaHVnZV9wdGVwX2dldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGVwKTtcXG5tbS9taWdyYXRlLmMtNTI5LVxcbi0tXFxubW0vbWluY29yZS5jPTI2PXN0YXRpYyBpbnQgbWluY29yZV9odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21pbmNvcmUuYy00Mi1cXHR9IGVsc2Uge1xcbm1tL21pbmNvcmUuYzo0MzpcXHRcXHRjb25zdCBwdGVfdCBwdGVwID0gaHVnZV9wdGVwX2dldCh3YWxrLVxcdTAwM2VtbSwgYWRkciwgcHRlKTtcXG5tbS9taW5jb3JlLmMtNDQtXFxuLS1cXG5tbS9tcHJvdGVjdC5jPTcwMz1zdGF0aWMgaW50IHByb3Rfbm9uZV9odWdldGxiX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssXFxuLS1cXG5tbS9tcHJvdGVjdC5jLTcwNi17XFxubW0vbXByb3RlY3QuYzo3MDc6XFx0Y29uc3QgcHRlX3QgZW50cnkgPSBodWdlX3B0ZXBfZ2V0KHdhbGstXFx1MDAzZW1tLCBhZGRyLCBwdGUpO1xcbm1tL21wcm90ZWN0LmMtNzA4LVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTEyLVxcdGlmIChpc192bV9odWdldGxiX3BhZ2UocHZtdy1cXHUwMDNldm1hKSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMTM6XFx0XFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0KHB2bXctXFx1MDAzZXZtYS1cXHUwMDNldm1fbW0sIHB2bXctXFx1MDAzZWFkZHJlc3MsXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTE0LVxcdFxcdFxcdFxcdCAgICAgIHB2bXctXFx1MDAzZXB0ZSk7XFxuLS1cXG5tbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTIwOTktXFx0XFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpIHtcXG5tbS9ybWFwLmM6MjEwMDpcXHRcXHRcXHRwdGV2YWwgPSBodWdlX3B0ZXBfZ2V0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSk7XFxubW0vcm1hcC5jLTIxMDEtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbm1tL3JtYXAuYz0yNDE5PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNTA5LVxcdFxcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pKSB7XFxubW0vcm1hcC5jOjI1MTA6XFx0XFx0XFx0cHRldmFsID0gaHVnZV9wdGVwX2dldChtbSwgYWRkcmVzcywgcHZtdy5wdGUpO1xcbm1tL3JtYXAuYy0yNTExLVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTc3Nz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHNzaXplX3QgbWZpbGxfYXRvbWljX2h1Z2V0bGIoXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTg3NS1cXHRcXHRpZiAoIXVmZmRfZmxhZ3NfbW9kZV9pcyhmbGFncywgTUZJTExfQVRPTUlDX0NPTlRJTlVFKSkge1xcbm1tL3VzZXJmYXVsdGZkLmM6ODc2OlxcdFxcdFxcdGNvbnN0IHB0ZV90IHB0ZXAgPSBodWdlX3B0ZXBfZ2V0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUpO1xcbm1tL3VzZXJmYXVsdGZkLmMtODc3LVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0yNTE5PXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9odWdlX211c3Rfd2FpdChzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTI1MzEtXFxubW0vdXNlcmZhdWx0ZmQuYzoyNTMyOlxcdHB0ZSA9IGh1Z2VfcHRlcF9nZXQodm1hLVxcdTAwM2V2bV9tbSwgdm1mLVxcdTAwM2VhZGRyZXNzLCBwdGVwKTtcXG5tbS91c2VyZmF1bHRmZC5jLTI1MzMtXFxuLS1cXG5tbS92bWFsbG9jLmM9MzY2PXN0YXRpYyB2b2lkIHZ1bm1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zODMtXFx0XFx0XFx0fVxcbm1tL3ZtYWxsb2MuYzozODQ6XFx0XFx0XFx0cHRlbnQgPSBodWdlX3B0ZXBfZ2V0X2FuZF9jbGVhcihcXHUwMDI2aW5pdF9tbSwgYWRkciwgcHRlLCBzaXplKTtcXG5tbS92bWFsbG9jLmMtMzg1LVxcdFxcdFxcdGlmIChXQVJOX09OKGVuZCAtIGFkZHIgXFx1MDAzYyBzaXplKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDI6NDYuMDgxMDc5MDA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgzOTA4MDgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBIdWdlVExCIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gSHVnZVRMQiBwYWdlcywgc3BlY2lmaWNhbGx5IGZvciBhcm02NC4gSSBzZWUgaXQncyB0b3VjaGluZyBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCwgYW5kIHRoYXQgdGhlIGtleSBhZGRpdGlvbiBzZWVtcyB0byBiZSB0aGlzIG5ldyBmdW5jdGlvbiwgYGh1Z2VfcHRlcF9nZXRgLiBJJ20gaW1tZWRpYXRlbHkgbm90aWNpbmcgdGhhdCBpdCdzIGRlY2xhcmVkIGluIGJvdGggYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBhbmQgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaHVnZXRsYi5oYC4gSGFuZyBvbiwgbGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMsIHRoZSBwYXRjaCBpdHNlbGYgKmFkZHMqIHRoZSBkZWNsYXJhdGlvbiB0byBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgOlxuXG5gYGBjXG4rcHRlX3QgaHVnZV9wdGVwX2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7XG5gYGBcblxuV2FpdCwgdGhlIGBncmVwYCByZXN1bHRzIHNob3cgdGhhdCBgaHVnZV9wdGVwX2dldGAgaXMgZGVmaW5lZCBpbiBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCBhbmQgaW4gb3RoZXIgYXJjaGl0ZWN0dXJlcy4gSW50ZXJlc3RpbmcuIEl0J3Mgbm90IGp1c3QgYW4gYXJtNjQgdGhpbmcsIHRoZW4uIFRoaXMgaXMgbWVhbnQgdG8gYmUgYSBnZW5lcmFsIG1lY2hhbmlzbS5cblxuTm93LCBJJ20gc2VlaW5nIGEgd2hvbGUgYnVuY2ggb2Ygb3RoZXIgZmlsZXMgYmVpbmcgbW9kaWZpZWQ6IGBtbS9taWdyYXRlLmNgLCBgbW0vbXByb3RlY3QuY2AsIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AsIGFuZCBgbW0vcm1hcC5jYC4gVGhleSdyZSBhbGwgdXNpbmcgdGhpcyBuZXcgYGh1Z2VfcHRlcF9nZXRgIGZ1bmN0aW9uLiBUaGF0IGdpdmVzIGEgYnJvYWRlciBjb250ZXh0IG9mIGhvdyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZC5cblxuT2theSwgYmFjayB0byBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYC4gSSBzZWUgdGhpcyBjaGFuZ2UgaW4gYGZpbmRfbnVtX2NvbnRpZ2A6XG5cbmBgYGNcbi1cdGlmICgocHRlX3QgKilwbWRwID09IHB0ZXApIHtcbitcdGlmICgocHRlX3QgKilQVFJfQUxJR05fRE9XTihwbWRwLCBzaXplb2YoKnBtZHApICogQ09OVF9QTURTKSA9PSBwdGVwKSB7XG5gYGBcblxuVGhhdCdzIGEgcG90ZW50aWFsbHkgaW1wb3J0YW50IGNoYW5nZS4gSXQgbG9va3MgbGlrZSBhbiBhbGlnbm1lbnQgY2hlY2sgaGFzIGJlZW4gYWRkZWQsIHVzaW5nIGBQVFJfQUxJR05fRE9XTmAgdG8gZW5zdXJlIHRoZSBjb21wYXJpc29uIGlzIGNvcnJlY3QgZ2l2ZW4gaG93IHBhZ2UgdGFibGVzIGFyZSBzdHJ1Y3R1cmVkLlxuXG5BbHJpZ2h0LCBsZXQncyBub3cgY2hlY2sgYG1tL21wcm90ZWN0LmNgIGZvciBhbnkgcmVmZXJlbmNlcyB0byBgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgLiBBaCwgeWVzLCB0aGVyZSBpdCBpcywgaXQncyBpbnNpZGUgYW4gYCNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFYCBibG9jay4gU28gdGhhdCBjb25maXJtcyB0aGF0IGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS5cblxuTm93LCBhIHF1aWNrIHRob3VnaHQgYWJvdXQgYG1tL21pZ3JhdGUuY2Ag4oCTIGlzIGBDT05GSUdfTUlHUkFUSU9OYCBhIGhhcmQgZGVwZW5kZW5jeT8gSXQncyBlc3NlbnRpYWwgdGhhdCBJIGNoZWNrLiBMZXQgbWUgdmVyaWZ5Li4uIFllcywgbGV0J3MgbG9vayBhdCBgbW0vbWlncmF0ZS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDI6NTIuOTIwMTYyODE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NjE2ODg3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVtb3ZlX21pZ3JhdGlvbl9wdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ybWFwLmg9OTM0PWludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTkzNi1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo5Mzc6dm9pZCByZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3RydWN0IGZvbGlvICpzcmMsIHN0cnVjdCBmb2xpbyAqZHN0LFxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTkzOC1cXHRcXHRlbnVtIHR0dV9mbGFncyBmbGFncyk7XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmg9MTM0PURFRklORV9FVkVOVChtaWdyYXRpb25fcHRlLCBzZXRfbWlncmF0aW9uX3B0ZSxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaC0xMzgtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oOjEzOTpERUZJTkVfRVZFTlQobWlncmF0aW9uX3B0ZSwgcmVtb3ZlX21pZ3JhdGlvbl9wdGUsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oLTE0MC1cXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcHRlLCBpbnQgb3JkZXIpLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNDc0PXN0YXRpYyB2b2lkIHJlbWFwX3BhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBuciwgaW50IGZsYWdzKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zNDgxLVxcdGZvciAoOzspIHtcXG5tbS9odWdlX21lbW9yeS5jOjM0ODI6XFx0XFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKGZvbGlvLCBmb2xpbywgVFRVX1JNQVBfTE9DS0VEIHwgZmxhZ3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzQ4My1cXHRcXHRpICs9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tLVxcbm1tL21pZ3JhdGUuYz0zMzg9c3RydWN0IHJtYXBfd2Fsa19hcmcge1xcbi0tXFxubW0vbWlncmF0ZS5jLTM0NS0gKi9cXG5tbS9taWdyYXRlLmM6MzQ2OnN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vbWlncmF0ZS5jLTM0Ny1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICphcmcpXFxuLS1cXG5tbS9taWdyYXRlLmMtNDQ0LVxcbm1tL21pZ3JhdGUuYzo0NDU6XFx0XFx0dHJhY2VfcmVtb3ZlX21pZ3JhdGlvbl9wdGUocHZtdy5hZGRyZXNzLCBwdGVfdmFsKHB0ZSksXFxubW0vbWlncmF0ZS5jLTQ0Ni1cXHRcXHRcXHRcXHRcXHQgICBjb21wb3VuZF9vcmRlcihuZXcpKTtcXG4tLVxcbm1tL21pZ3JhdGUuYy00NTgtICovXFxubW0vbWlncmF0ZS5jOjQ1OTp2b2lkIHJlbW92ZV9taWdyYXRpb25fcHRlcyhzdHJ1Y3QgZm9saW8gKnNyYywgc3RydWN0IGZvbGlvICpkc3QsXFxubW0vbWlncmF0ZS5jLTQ2MC1cXHRcXHRlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL21pZ3JhdGUuYy00NjctXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG5tbS9taWdyYXRlLmM6NDY4OlxcdFxcdC5ybWFwX29uZSA9IHJlbW92ZV9taWdyYXRpb25fcHRlLFxcbm1tL21pZ3JhdGUuYy00NjktXFx0XFx0LmFyZyA9IFxcdTAwMjZybWFwX3dhbGtfYXJnLFxcbi0tXFxubW0vbWlncmF0ZS5jPTExNjQ9c3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb191bmRvX3NyYyhzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xMTcwLVxcdGlmIChwYWdlX3dhc19tYXBwZWQpXFxubW0vbWlncmF0ZS5jOjExNzE6XFx0XFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKHNyYywgc3JjLCAwKTtcXG5tbS9taWdyYXRlLmMtMTE3Mi1cXHQvKiBEcm9wIGFuIGFub25fdm1hIHJlZmVyZW5jZSBpZiB3ZSB0b29rIG9uZSAqL1xcbi0tXFxubW0vbWlncmF0ZS5jPTEzNTc9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNDAwLVxcdCAqIFdoZW4gc3VjY2Vzc2Z1bCwgcHVzaCBkc3QgdG8gTFJVIGltbWVkaWF0ZWx5OiBzbyB0aGF0IGlmIGl0XFxubW0vbWlncmF0ZS5jOjE0MDE6XFx0ICogdHVybnMgb3V0IHRvIGJlIGFuIG1sb2NrZWQgcGFnZSwgcmVtb3ZlX21pZ3JhdGlvbl9wdGVzKCkgd2lsbFxcbm1tL21pZ3JhdGUuYy0xNDAyLVxcdCAqIGF1dG9tYXRpY2FsbHkgYnVpbGQgdXAgdGhlIGNvcnJlY3QgZHN0LVxcdTAwM2VtbG9ja19jb3VudCBmb3IgaXQuXFxuLS1cXG5tbS9taWdyYXRlLmMtMTQxMi1cXHRpZiAob2xkX2ZvbGlvX3N0YXRlIFxcdTAwMjYgRk9MSU9fV0FTX01BUFBFRClcXG5tbS9taWdyYXRlLmM6MTQxMzpcXHRcXHRyZW1vdmVfbWlncmF0aW9uX3B0ZXMoc3JjLCBkc3QsIDApO1xcbm1tL21pZ3JhdGUuYy0xNDE0LVxcbi0tXFxubW0vbWlncmF0ZS5jPTE0NzM9c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNTQ1LVxcdGlmIChwYWdlX3dhc19tYXBwZWQpXFxubW0vbWlncmF0ZS5jOjE1NDY6XFx0XFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKHNyYywgIXJjID8gZHN0IDogc3JjLCB0dHUpO1xcbm1tL21pZ3JhdGUuYy0xNTQ3LVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz01NjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfdW5tYXAodW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTYzNS1cXHRcXHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MzY6XFx0XFx0cmVtb3ZlX21pZ3JhdGlvbl9wdGVzKGZvbGlvLCBmb2xpbywgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy02MzctXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEyNjg9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9maW5hbGl6ZSh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTMwNi1cXHRcXHRcXHRmb2xpb19hZGRfbHJ1KGRzdCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzA3OlxcdFxcdHJlbW92ZV9taWdyYXRpb25fcHRlcyhzcmMsIGRzdCwgMCk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzA4LVxcdFxcdGlmIChmYXVsdF9mb2xpbyAhPSBzcmMpXFxuLS1cXG5tbS9ybWFwLmM9MjkzMD1zdGF0aWMgc3RydWN0IGFub25fdm1hICpybWFwX3dhbGtfYW5vbl9sb2NrKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtMjkzOC1cXHQvKlxcbm1tL3JtYXAuYzoyOTM5OlxcdCAqIE5vdGU6IHJlbW92ZV9taWdyYXRpb25fcHRlcygpIGNhbm5vdCB1c2UgZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKClcXG5tbS9ybWFwLmMtMjk0MC1cXHQgKiBiZWNhdXNlIHRoYXQgZGVwZW5kcyBvbiBmb2xpb19tYXBwZWQoKTsgYnV0IG5vdCBhbGwgaXRzIHVzYWdlc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0Mjo1OC4zODE4NjA4MDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTE3MjYzMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTWlncmF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBtZW1vcnkgbWlncmF0aW9uIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gVGhlIGNvZGUgSSdtIGZvY3VzaW5nIG9uLCBgbW0vbWlncmF0ZS5jYCwgaXMgb25seSBjb21waWxlZCB3aGVuIHRoZSBgQ09ORklHX01JR1JBVElPTmAgb3B0aW9uIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgaG93IHRoaXMgZmlsZSBpbnRlZ3JhdGVzIGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQuIFRoZXJlZm9yZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG1tL01ha2VmaWxlYCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBkZXBlbmRlbmN5IGlzIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTY4LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDM6MDcuNDk5MTI3MTgxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MDgyOTkxNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmM9NjI3PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqZG1hX2J1Zl9nZXRmaWxlKHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jLTY3NC0gKlxcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmM6Njc1OiAqICAgIFVwIHRvIHRoaXMgc3RhZ2UgdGhlIGV4cG9ydGVyIGlzIHN0aWxsIGZyZWUgdG8gbWlncmF0ZSBvciByZWFsbG9jYXRlIHRoZVxcbmRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMtNjc2LSAqICAgIGJhY2tpbmcgc3RvcmFnZS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlPTcxPUFNREtGRF9GSUxFUyArPSAkKEFNREtGRF9QQVRIKS9rZmRfc3ZtLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL01ha2VmaWxlOjcyOlxcdFxcdCQoQU1ES0ZEX1BBVEgpL2tmZF9taWdyYXRlLm9cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9NYWtlZmlsZS03My1lbmRpZlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGU9OTA9Z3QteSArPSBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZS0xMjMtXFx0Z3QvaW50ZWxfbHJjLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlOjEyNDpcXHRndC9pbnRlbF9taWdyYXRlLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlLTEyNS1cXHRndC9pbnRlbF9tb2NzLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jPTE2Nj1zdGF0aWMgaW50IGk5MTVfZ2VtX2RtYWJ1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYy0xNzItXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jOjE3MzpcXHRpZiAoIWk5MTVfZ2VtX29iamVjdF9jYW5fbWlncmF0ZShvYmosIElOVEVMX1JFR0lPTl9TTUVNKSlcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZG1hYnVmLmMtMTc0LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYy0xODAtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2RtYWJ1Zi5jOjE4MTpcXHRcXHRlcnIgPSBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIFxcdTAwMjZ3dywgSU5URUxfUkVHSU9OX1NNRU0pO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9kbWFidWYuYy0xODItXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYz02MzQ9Ym9vbCBpOTE1X2dlbV9vYmplY3RfaGFzX2lvbWVtKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMtNjU0LSAqIFRoaXMgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGFzIGEgaGVscGVyIGZvciBjaGVja2luZyB0aGVcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmM6NjU1OiAqIHBvc3NpYmlsaXR5IHRvIG1pZ3JhdGUgb2JqZWN0cyBhbmQgbWlnaHQgYmUgc2xpZ2h0bHkgbGVzcyBwZXJtaXNzaXZlXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTY1Ni0gKiB0aGFuIGk5MTVfZ2VtX29iamVjdF9taWdyYXRlKCkgd2hlbiBpdCBjb21lcyB0byBvYmplY3RzIHdpdGggdGhlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmM9NzI3PWludCBpOTE1X2dlbV9vYmplY3RfbWlncmF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTczMC17XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jOjczMTpcXHRyZXR1cm4gX19pOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIHd3LCBpZCwgb2JqLVxcdTAwM2VmbGFncyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTczMi19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmM9NzYxPWludCBfX2k5MTVfZ2VtX29iamVjdF9taWdyYXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMtNzc1LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYzo3NzY6XFx0aWYgKCFpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2JqLCBpZCkpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jLTc3Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYy03ODQtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5jOjc4NTpcXHRyZXR1cm4gb2JqLVxcdTAwM2VvcHMtXFx1MDAzZW1pZ3JhdGUob2JqLCBtciwgZmxhZ3MpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYy03ODYtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jPTkwND1zdGF0aWMgaW50IGk5MTVfdHRtX21pZ3JhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYy05MDcte1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYzo5MDg6XFx0cmV0dXJuIF9faTkxNV90dG1fbWlncmF0ZShvYmosIG1yLCBmbGFncyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jLTkwOS19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmM9MTA0Mj1zdGF0aWMgdm1fZmF1bHRfdCB2bV9mYXVsdF90dG0oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmMtMTA5OC1cXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+STkxNV9CT19BTExPQ19HUFVfT05MWTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdHRtLmM6MTA5OTpcXHRcXHRcXHRlcnIgPSBfX2k5MTVfdHRtX21pZ3JhdGUob2JqLCBtciwgZmxhZ3MpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYy0xMTAwLVxcdFxcdFxcdGlmICghZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM9NDY9c3RhdGljIGludCBpZ3RfY3JlYXRlX21pZ3JhdGUoc3RydWN0IGludGVsX2d0ICpndCwgZW51bSBpbnRlbF9yZWdpb25faWQgc3JjLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtNzItXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6NzM6XFx0XFx0ZXJyID0gaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUob2JqLCBcXHUwMDI2d3csIGRzdCk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtNzQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTgwLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jOjgxOlxcdFxcdGlmIChpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2JqLCBzcmMpKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTgyLVxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYz0xMDY9c3RhdGljIGludCBpZ3Rfc2FtZV9jcmVhdGVfbWlncmF0ZSh2b2lkICphcmcpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xMTAtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTExOnN0YXRpYyBpbnQgbG1lbV9wYWdlc19taWdyYXRlX29uZShzdHJ1Y3QgaTkxNV9nZW1fd3dfY3R4ICp3dyxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xMTItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtMTQwLVxcdGlmIChpOTE1X2dlbV9vYmplY3RfaXNfbG1lbShvYmopKSB7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTQxOlxcdFxcdGVyciA9IGk5MTVfZ2VtX29iamVjdF9taWdyYXRlKG9iaiwgd3csIElOVEVMX1JFR0lPTl9TTUVNKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0xNDItXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmMtMTU5LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MTYwOlxcdFxcdGVyciA9IGk5MTVfZ2VtX29iamVjdF9taWdyYXRlKG9iaiwgd3csIElOVEVMX1JFR0lPTl9MTUVNXzApO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTE2MS1cXHRcXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYz0xODI9c3RhdGljIGludCBfX2lndF9sbWVtX3BhZ2VzX21pZ3JhdGUoc3RydWN0IGludGVsX2d0ICpndCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaTkxNV9nZW1fbWlncmF0ZS5jLTI0OS1cXHRcXHRmb3JfaTkxNV9nZW1fd3coXFx1MDAyNnd3LCBlcnIsIHRydWUpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pOTE1X2dlbV9taWdyYXRlLmM6MjUwOlxcdFxcdFxcdGVyciA9IGxtZW1fcGFnZXNfbWlncmF0ZV9vbmUoXFx1MDAyNnd3LCBvYmosIHZtYSxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2k5MTVfZ2VtX21pZ3JhdGUuYy0yNTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBib3JrZWRfbWlncmF0ZSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2JvLmM9MTI1PWk5MTVfYm9fZnJhbWVidWZmZXJfbG9va3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2JvLmMtMTM2LVxcdC8qIG9iamVjdCBpcyBiYWNrZWQgd2l0aCBMTUVNIGZvciBkaXNjcmV0ZSAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYm8uYzoxMzc6XFx0aWYgKEhBU19MTUVNKGk5MTUpIFxcdTAwMjZcXHUwMDI2ICFpOTE1X2dlbV9vYmplY3RfY2FuX21pZ3JhdGUob2JqLCBJTlRFTF9SRUdJT05fTE1FTV8wKSkge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYm8uYy0xMzgtXFx0XFx0Lyogb2JqZWN0IGlzIFxcXCJyZW1vdGVcXFwiLCBub3QgaW4gbG9jYWwgbWVtb3J5ICovXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZiX3Bpbi5jPTE4PWludGVsX2ZiX3Bpbl90b19kcHQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpfb2JqLCBzdHJ1Y3QgaW50ZWxfZHB0ICpkcHQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZiX3Bpbi5jLTU1LVxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5JOTE1X0JPX0FMTE9DX0dQVV9PTkxZO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmM6NTY6XFx0XFx0XFx0cmV0ID0gX19pOTE1X2dlbV9vYmplY3RfbWlncmF0ZShvYmosIFxcdTAwMjZ3dywgSU5URUxfUkVHSU9OX0xNRU1fMCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2ZiX3Bpbi5jLTU3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmM9MTA3PWludGVsX2ZiX3Bpbl90b19nZ3R0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqX29iaixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmMtMTQ3LVxcdGVsc2UgaWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgSEFTX0xNRU0oaTkxNSkpXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9mYl9waW4uYzoxNDg6XFx0XFx0cmV0ID0gaTkxNV9nZW1fb2JqZWN0X21pZ3JhdGUob2JqLCBcXHUwMDI2d3csIElOVEVMX1JFR0lPTl9MTUVNXzApO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZmJfcGluLmMtMTQ5LVxcdGlmICghcmV0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlPTM1PXhlLXkgKz0geGVfYmIubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvTWFrZWZpbGUtOTEtXFx0eGVfbWVtX3Bvb2wubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlOjkyOlxcdHhlX21pZ3JhdGUubyBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL3hlL01ha2VmaWxlLTkzLVxcdHhlX21taW8ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbWlncmF0ZS5jPTEyOD1zdGF0aWMgdTY0IHhlX21pZ3JhdGVfdnJhbV9vZnMoc3RydWN0IHhlX2RldmljZSAqeGUsIHU2NCBhZGRyLCBib29sIGlzX2NvbXBfcHRlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYy0xMzEtXFx0ICogUmVtb3ZlIHRoZSBEUEEgdG8gZ2V0IGEgY29ycmVjdCBvZmZzZXQgaW50byBpZGVudGl0eSB0YWJsZSBmb3IgdGhlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYzoxMzI6XFx0ICogbWlncmF0ZSBvZmZzZXRcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbWlncmF0ZS5jLTEzMy1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRlLmM9NDA3PXN0YXRpYyBib29sIHhlX21pZ3JhdGVfbmVlZHNfY2NzX2VtaXQoc3RydWN0IHhlX2RldmljZSAqeGUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfbWlncmF0ZS5jLTQxNy0gKlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9taWdyYXRlLmM6NDE4OiAqIFJldHVybjogXFx1MDAyNnhlX21pZ3JhdGUgb24gc3VjY2Vzcywgb3IgTlVMTCB3aGVuIG91dCBvZiBtZW1vcnkuXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX21pZ3JhdGUuYy00MTktICovXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYz0yNDU1PXN0YXRpYyB2b2lkIG9wX2NvbW1pdChzdHJ1Y3QgeGVfdm0gKnZtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmMtMjUzMC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYzoyNTMxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVfbWlncmF0ZV9wdF91cGRhdGVfb3BzIG1pZ3JhdGVfb3BzID0ge1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1MzItXFx0LnBvcHVsYXRlID0geGVfdm1fcG9wdWxhdGVfcGd0YWJsZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1MzctI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9HUFVTVk0pXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjUzODpzdGF0aWMgY29uc3Qgc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlX29wcyBzdm1fdXNlcnB0cl9taWdyYXRlX29wcyA9IHtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNTM5LVxcdC5wb3B1bGF0ZSA9IHhlX3ZtX3BvcHVsYXRlX3BndGFibGUsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNTQzLSNlbHNlXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjU0NDpzdGF0aWMgY29uc3Qgc3RydWN0IHhlX21pZ3JhdGVfcHRfdXBkYXRlX29wcyBzdm1fdXNlcnB0cl9taWdyYXRlX29wcztcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNTQ1LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM9MjU2OD14ZV9wdF91cGRhdGVfb3BzX3J1bihzdHJ1Y3QgeGVfdGlsZSAqdGlsZSwgc3RydWN0IHhlX3ZtYV9vcHMgKnZvcHMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcHQuYy0yNTgwLVxcdFxcdC5vcHMgPSBwdF91cGRhdGVfb3BzLVxcdTAwM2VuZWVkc19zdm1fbG9jayA/XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3B0LmM6MjU4MTpcXHRcXHRcXHRcXHUwMDI2c3ZtX3VzZXJwdHJfbWlncmF0ZV9vcHMgOlxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jOjI1ODI6XFx0XFx0XFx0XFx1MDAyNm1pZ3JhdGVfb3BzLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9wdC5jLTI1ODMtXFx0XFx0LnZvcHMgPSB2b3BzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RyYWNlX2JvLmg9NjE9VFJBQ0VfRVZFTlQoeGVfYm9fbW92ZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90cmFjZV9iby5oLTgxLVxcdFxcdCAgICksXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3RyYWNlX2JvLmg6ODI6XFx0ICAgIFRQX3ByaW50ayhcXFwibW92ZV9sYWNrc19zb3VyY2U6JXMsIG1pZ3JhdGUgb2JqZWN0ICVwIFtzaXplICV6dV0gZnJvbSAlcyB0byAlcyBkZXZpY2VfaWQ6JXNcXFwiLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV90cmFjZV9iby5oLTgzLVxcdFxcdCAgICAgIF9fZW50cnktXFx1MDAzZW1vdmVfbGFja3Nfc291cmNlID8gXFxcInllc1xcXCIgOiBcXFwibm9cXFwiLCBfX2VudHJ5LVxcdTAwM2VibywgX19lbnRyeS1cXHUwMDNlc2l6ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmM9MTI0MT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYWNsX3RjYW0uYzoxMjQyOm1seHN3X3NwX2FjbF90Y2FtX3ZjaHVua19taWdyYXRlX29uZShzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmMtMTI0My1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtbHhzd19zcF9hY2xfdGNhbV92Y2h1bmsgKnZjaHVuayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmM9MTMyMT1tbHhzd19zcF9hY2xfdGNhbV92Y2h1bmtfbWlncmF0ZV9hbGwoc3RydWN0IG1seHN3X3NwICptbHhzd19zcCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2FjbF90Y2FtLmMtMTM0MS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20odmNodW5rLCBcXHUwMDI2dnJlZ2lvbi1cXHUwMDNldmNodW5rX2xpc3QsIGxpc3QpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9hY2xfdGNhbS5jOjEzNDI6XFx0XFx0ZXJyID0gbWx4c3dfc3BfYWNsX3RjYW1fdmNodW5rX21pZ3JhdGVfb25lKG1seHN3X3NwLCB2Y2h1bmssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fYWNsX3RjYW0uYy0xMzQzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHZyZWdpb24tXFx1MDAzZXJlZ2lvbixcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jPTYxMD1zdGF0aWMgdm9pZCBodl9pcnFfcmV0YXJnZXRfaW50ZXJydXB0KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTcwMC1cXHQgKiByZWZlciB0byBjcHVfZGlzYWJsZV9jb21tb24oKSAtXFx1MDAzZSBmaXh1cF9pcnFzKCkgLVxcdTAwM2VcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYzo3MDE6XFx0ICogaXJxX21pZ3JhdGVfYWxsX29mZl90aGlzX2NwdSgpIC1cXHUwMDNlIG1pZ3JhdGVfb25lX2lycSgpLlxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTcwMi1cXHQgKlxcbi0tXFxuZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ktaHlwZXJ2LmMtNzA1LVxcdCAqIGhhdmUgYmVlbiBmcm96ZW4pLiBOb3RlOiB0aGUgY29ycmVjdCBhZmZpbml0eSBpbmZvIGlzIHN0aWxsIHVwZGF0ZWRcXG5kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaS1oeXBlcnYuYzo3MDY6XFx0ICogaW50byB0aGUgaXJxZGF0YSBkYXRhIHN0cnVjdHVyZSBpbiBtaWdyYXRlX29uZV9pcnEoKSAtXFx1MDAzZVxcbmRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpLWh5cGVydi5jLTcwNy1cXHQgKiBpcnFfZG9fc2V0X2FmZmluaXR5KCksIHNvIGxhdGVyIHdoZW4gdGhlIFZNIHJlc3VtZXMsXFxuLS1cXG5kcml2ZXJzL3BlcmYvYXJtX2NzcG11L2FybV9jc3BtdS5jPTEzMjg9c3RhdGljIGludCBhcm1fY3NwbXVfY3B1X3RlYXJkb3duKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKVxcbi0tXFxuZHJpdmVycy9wZXJmL2FybV9jc3BtdS9hcm1fY3NwbXUuYy0xMzM4LVxcbmRyaXZlcnMvcGVyZi9hcm1fY3NwbXUvYXJtX2NzcG11LmM6MTMzOTpcXHQvKiBDaG9vc2UgYSBuZXcgQ1BVIHRvIG1pZ3JhdGUgb3duZXJzaGlwIG9mIHRoZSBQTVUgdG8gKi9cXG5kcml2ZXJzL3BlcmYvYXJtX2NzcG11L2FybV9jc3BtdS5jLTEzNDAtXFx0ZHN0ID0gY3B1bWFza19hbnlfYW5kX2J1dChcXHUwMDI2Y3NwbXUtXFx1MDAzZWFzc29jaWF0ZWRfY3B1cyxcXG4tLVxcbmRyaXZlcnMvcGVyZi9udmlkaWFfdDQxMF9jMmNfcG11LmM9NzI2PXN0YXRpYyBpbnQgbnZfYzJjX3BtdV9jcHVfdGVhcmRvd24odW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfYzJjX3BtdS5jLTczNi1cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfYzJjX3BtdS5jOjczNzpcXHQvKiBDaG9vc2UgYSBuZXcgQ1BVIHRvIG1pZ3JhdGUgb3duZXJzaGlwIG9mIHRoZSBQTVUgdG8gKi9cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfYzJjX3BtdS5jLTczOC1cXHRkc3QgPSBjcHVtYXNrX2FueV9hbmRfYnV0KFxcdTAwMjZjMmNfcG11LVxcdTAwM2Vhc3NvY2lhdGVkX2NwdXMsXFxuLS1cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfY21lbV9sYXRlbmN5X3BtdS5jPTU0OT1zdGF0aWMgaW50IGNtZW1fbGF0X3BtdV9jcHVfdGVhcmRvd24odW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfY21lbV9sYXRlbmN5X3BtdS5jLTU1OS1cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfY21lbV9sYXRlbmN5X3BtdS5jOjU2MDpcXHQvKiBDaG9vc2UgYSBuZXcgQ1BVIHRvIG1pZ3JhdGUgb3duZXJzaGlwIG9mIHRoZSBQTVUgdG8gKi9cXG5kcml2ZXJzL3BlcmYvbnZpZGlhX3Q0MTBfY21lbV9sYXRlbmN5X3BtdS5jLTU2MS1cXHRkc3QgPSBjcHVtYXNrX2FueV9hbmRfYnV0KFxcdTAwMjZjbWVtX2xhdF9wbXUtXFx1MDAzZWFzc29jaWF0ZWRfY3B1cyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX1ZJUlRJT19WRklPX1BDSSkgKz0gdmlydGlvLXZmaW8tcGNpLm9cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9NYWtlZmlsZTozOnZpcnRpby12ZmlvLXBjaS15IDo9IG1haW4ubyBtaWdyYXRlLm9cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9NYWtlZmlsZS00LXZpcnRpby12ZmlvLXBjaS0kKENPTkZJR19WSVJUSU9fVkZJT19QQ0lfQURNSU5fTEVHQUNZKSArPSBsZWdhY3lfaW8ub1xcbi0tXFxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlLTktXFx0XFx0ZXh0ZW50c19zdGF0dXMubyBmaWxlLm8gZnNtYXAubyBmc3luYy5vIGhhc2gubyBpYWxsb2MubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZToxMDpcXHRcXHRpbmRpcmVjdC5vIGlubGluZS5vIGlub2RlLm8gaW9jdGwubyBtYmFsbG9jLm8gbWlncmF0ZS5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlLTExLVxcdFxcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbW11Lmg9ODQ4PXN0cnVjdCBpb21tdV9mYXVsdF9wYXJhbSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvbW11LmgtODczLSAqXFxuaW5jbHVkZS9saW51eC9pb21tdS5oOjg3NDogKiBUT0RPOiBtaWdyYXRlIG90aGVyIHBlciBkZXZpY2UgZGF0YSBwb2ludGVycyB1bmRlciBpb21tdV9kZXZfZGF0YSwgZS5nLlxcbmluY2x1ZGUvbGludXgvaW9tbXUuaC04NzUtICpcXHRzdHJ1Y3QgaW9tbXVfZ3JvdXBcXHQqaW9tbXVfZ3JvdXA7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5Lmg9MTk9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgtNTQtI2RlZmluZSBNUE9MX01GX01PVkVfQUxMICgxXFx1MDAzY1xcdTAwM2MyKVxcdC8qIE1vdmUgZXZlcnkgcGFnZSB0byBjb25mb3JtIHRvIHBvbGljeSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaDo1NTojZGVmaW5lIE1QT0xfTUZfTEFaWVxcdCAoMVxcdTAwM2NcXHUwMDNjMylcXHQvKiBVTlNVUFBPUlRFRCBGTEFHOiBMYXp5IG1pZ3JhdGUgb24gZmF1bHQgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgtNTYtI2RlZmluZSBNUE9MX01GX0lOVEVSTkFMICgxXFx1MDAzY1xcdTAwM2M0KVxcdC8qIEludGVybmFsIGZsYWdzIHN0YXJ0IGhlcmUgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaC02Ny0jZGVmaW5lIE1QT0xfRl9TSEFSRUQgICgxIFxcdTAwM2NcXHUwMDNjIDApXFx0LyogaWRlbnRpZnkgc2hhcmVkIHBvbGljaWVzICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oOjY4OiNkZWZpbmUgTVBPTF9GX01PRlxcdCgxIFxcdTAwM2NcXHUwMDNjIDMpIC8qIHRoaXMgcG9saWN5IHdhbnRzIG1pZ3JhdGUgb24gZmF1bHQgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5LmgtNjktI2RlZmluZSBNUE9MX0ZfTU9ST05cXHQoMSBcXHUwMDNjXFx1MDAzYyA0KSAvKiBNaWdyYXRlIE9uIHByb3Rub25lIFJlZmVyZW5jZSBPbiBOb2RlICovXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jPTI5OTU9c3RhdGljIGludCBjcHVzZXRfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTMwMjctXFx0ICogY3B1c2V0LmNwdXMgd2hlbiB0aGVyZSBhcmUgYWN0aXZlIHRhc2tzIGluc2lkZS4gV2hlbiB0aGF0IGhhcHBlbnMsXFxua2VybmVsL2Nncm91cC9jcHVzZXQuYzozMDI4OlxcdCAqIHdlIHNob3VsZCBhbGxvdyB0YXNrcyB0byBtaWdyYXRlIG91dCB3aXRob3V0IHNlY3VyaXR5IGNoZWNrIHRvIG1ha2VcXG5rZXJuZWwvY2dyb3VwL2NwdXNldC5jLTMwMjktXFx0ICogc3VyZSB0aGV5IHdpbGwgYmUgYWJsZSB0byBydW4gYWZ0ZXIgbWlncmF0aW9uLlxcbi0tXFxua2VybmVsL2lycS9jcHVob3RwbHVnLmM9MjA9c3RhdGljIGlubGluZSBib29sIGlycV9uZWVkc19maXh1cChzdHJ1Y3QgaXJxX2RhdGEgKmQpXFxuLS1cXG5rZXJuZWwvaXJxL2NwdWhvdHBsdWcuYy01Mi1cXG5rZXJuZWwvaXJxL2NwdWhvdHBsdWcuYzo1MzpzdGF0aWMgYm9vbCBtaWdyYXRlX29uZV9pcnEoc3RydWN0IGlycV9kZXNjICpkZXNjKVxcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jLTU0LXtcXG4tLVxcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jPTE3MT12b2lkIGlycV9taWdyYXRlX2FsbF9vZmZfdGhpc19jcHUodm9pZClcXG4tLVxcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jLTE4MC1cXHRcXHRzY29wZWRfZ3VhcmQocmF3X3NwaW5sb2NrLCBcXHUwMDI2ZGVzYy1cXHUwMDNlbG9jaykge1xcbmtlcm5lbC9pcnEvY3B1aG90cGx1Zy5jOjE4MTpcXHRcXHRcXHRhZmZpbml0eV9icm9rZW4gPSBtaWdyYXRlX29uZV9pcnEoZGVzYyk7XFxua2VybmVsL2lycS9jcHVob3RwbHVnLmMtMTgyLVxcdFxcdFxcdGlmIChhZmZpbml0eV9icm9rZW4gXFx1MDAyNlxcdTAwMjYgZGVzYy1cXHUwMDNlYWZmaW5pdHlfbm90aWZ5KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04OTE5PV9fYnBmX2tmdW5jIGJvb2wgc2N4X2JwZl9kc3FfbW92ZV90b19sb2NhbF9fX3YyKHU2NCBkc3FfaWQsIHU2NCBlbnFfZmxhZ3MsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTg5NDctXFx0XFx0ICogQSBzdWNjZXNzZnVsbHkgY29uc3VtZWQgdGFzayBjYW4gYmUgZGVxdWV1ZWQgYmVmb3JlIGl0IHN0YXJ0c1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODk0ODpcXHRcXHQgKiBydW5uaW5nIHdoaWxlIHRoZSBDUFUgaXMgdHJ5aW5nIHRvIG1pZ3JhdGUgb3RoZXIgZGlzcGF0Y2hlZFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODk0OS1cXHRcXHQgKiB0YXNrcy4gQnVtcCBucl90YXNrcyB0byB0ZWxsIGJhbGFuY2Vfb25lKCkgdG8gcmV0cnkgb24gZW1wdHlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MjY3Nj1ib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjc1Ni1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjI3NTc6XFx0LyogQWx3YXlzIGFsbG93IG1pZ3JhdGUgb24gcHJpdmF0ZSBmYXVsdHMgKi9cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI3NTgtXFx0aWYgKGNwdXBpZF9tYXRjaF9waWQocCwgbGFzdF9jcHVwaWQpKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0yODc3PXN0YXRpYyB2b2lkIHVwZGF0ZV9udW1hX3N0YXRzKHN0cnVjdCB0YXNrX251bWFfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI4OTYtXFx0XFx0aWYgKGZpbmRfaWRsZSBcXHUwMDI2XFx1MDAyNiBpZGxlX2NvcmUgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2ICFycS1cXHUwMDNlbnJfcnVubmluZyBcXHUwMDI2XFx1MDAyNiBpZGxlX2NwdShjcHUpKSB7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoyODk3OlxcdFxcdFxcdGlmIChSRUFEX09OQ0UocnEtXFx1MDAzZW51bWFfbWlncmF0ZV9vbikgfHxcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTI4OTgtXFx0XFx0XFx0ICAgICFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgZW52LVxcdTAwM2VwLVxcdTAwM2VjcHVzX3B0cikpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTI5MTc9c3RhdGljIHZvaWQgdGFza19udW1hX2Fzc2lnbihzdHJ1Y3QgdGFza19udW1hX2VudiAqZW52LFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTIyLVxcdC8qIENoZWNrIGlmIHJ1bi1xdWV1ZSBwYXJ0IG9mIGFjdGl2ZSBOVU1BIGJhbGFuY2UuICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoyOTIzOlxcdGlmIChlbnYtXFx1MDAzZWJlc3RfY3B1ICE9IGVudi1cXHUwMDNlZHN0X2NwdSBcXHUwMDI2XFx1MDAyNiB4Y2hnKFxcdTAwMjZycS1cXHUwMDNlbnVtYV9taWdyYXRlX29uLCAxKSkge1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjkyNC1cXHRcXHRpbnQgY3B1O1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTM1LVxcdFxcdFxcdHJxID0gY3B1X3JxKGVudi1cXHUwMDNlZHN0X2NwdSk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoyOTM2OlxcdFxcdFxcdGlmICgheGNoZyhcXHUwMDI2cnEtXFx1MDAzZW51bWFfbWlncmF0ZV9vbiwgMSkpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTM3LVxcdFxcdFxcdFxcdGdvdG8gYXNzaWduO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yOTUwLVxcdFxcdHJxID0gY3B1X3JxKGVudi1cXHUwMDNlYmVzdF9jcHUpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6Mjk1MTpcXHRcXHRXUklURV9PTkNFKHJxLVxcdTAwM2VudW1hX21pZ3JhdGVfb24sIDApO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMjk1Mi1cXHR9XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTMwMDU9c3RhdGljIGJvb2wgdGFza19udW1hX2NvbXBhcmUoc3RydWN0IHRhc2tfbnVtYV9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzAxNy1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjMwMTg6XFx0aWYgKFJFQURfT05DRShkc3RfcnEtXFx1MDAzZW51bWFfbWlncmF0ZV9vbikpXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0zMDE5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MzI0OT1zdGF0aWMgaW50IHRhc2tfbnVtYV9taWdyYXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzM2OC1cXHRcXHRyZXQgPSBtaWdyYXRlX3Rhc2tfdG8ocCwgZW52LmJlc3RfY3B1KTtcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjMzNjk6XFx0XFx0V1JJVEVfT05DRShiZXN0X3JxLVxcdTAwM2VudW1hX21pZ3JhdGVfb24sIDApO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMzM3MC1cXHRcXHRpZiAocmV0ICE9IDApXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTMzNzUtXFx0cmV0ID0gbWlncmF0ZV9zd2FwKHAsIGVudi5iZXN0X3Rhc2ssIGVudi5iZXN0X2NwdSwgZW52LnNyY19jcHUpO1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MzM3NjpcXHRXUklURV9PTkNFKGJlc3RfcnEtXFx1MDAzZW51bWFfbWlncmF0ZV9vbiwgMCk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYy0zMzc3LVxcbi0tXFxua2VybmVsL3NjaGVkL3J0LmM9MTg5Nj1zdGF0aWMgc3RydWN0IHJxICpmaW5kX2xvY2tfbG93ZXN0X3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHJxICpycSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9ydC5jLTE5NTUtICogSWYgdGhlIGN1cnJlbnQgQ1BVIGhhcyBtb3JlIHRoYW4gb25lIFJUIHRhc2ssIHNlZSBpZiB0aGUgbm9uXFxua2VybmVsL3NjaGVkL3J0LmM6MTk1NjogKiBydW5uaW5nIHRhc2sgY2FuIG1pZ3JhdGUgb3ZlciB0byBhIENQVSB0aGF0IGlzIHJ1bm5pbmcgYSB0YXNrXFxua2VybmVsL3NjaGVkL3J0LmMtMTk1Ny0gKiBvZiBsZXNzZXIgcHJpb3JpdHkuXFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaD0xMTM1PXN0cnVjdCBycSB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjA5LSNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaDoxMjEwOlxcdHVuc2lnbmVkIGludFxcdFxcdG51bWFfbWlncmF0ZV9vbjtcXG5rZXJuZWwvc2NoZWQvc2NoZWQuaC0xMjExLSNlbmRpZlxcbi0tXFxubW0vTWFrZWZpbGU9OTc9b2JqLSQoQ09ORklHX01FTVRFU1QpXFx0XFx0Kz0gbWVtdGVzdC5vXFxubW0vTWFrZWZpbGU6OTg6b2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0gbWlncmF0ZS5vXFxubW0vTWFrZWZpbGUtOTktb2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxOTQtXFx0XFx0ICogSW4gY2FzZSB3ZSBjYW5ub3QgY2xlYXIgUGFnZUFub25FeGNsdXNpdmUoKSwgc3BsaXQgdGhlIFBNRFxcbm1tL2h1Z2VfbWVtb3J5LmM6MzE5NTpcXHRcXHQgKiBvbmx5IGFuZCBsZXQgdHJ5X3RvX21pZ3JhdGVfb25lKCkgZmFpbCBsYXRlci5cXG5tbS9odWdlX21lbW9yeS5jLTMxOTYtXFx0XFx0ICpcXG4tLVxcbm1tL2h1Z2V0bGIuYz03MTg1PXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcXG4tLVxcbm1tL2h1Z2V0bGIuYy03MTg4LVxcbm1tL2h1Z2V0bGIuYzo3MTg5OlxcdGh1Z2V0bGJfY2dyb3VwX21pZ3JhdGUob2xkX2ZvbGlvLCBuZXdfZm9saW8pO1xcbm1tL2h1Z2V0bGIuYy03MTkwLVxcdGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihuZXdfZm9saW8sIHJlYXNvbik7XFxuLS1cXG5tbS9ybWFwLmM9MjM5OD12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNDE4LSAqL1xcbm1tL3JtYXAuYzoyNDE5OnN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9ybWFwLmMtMjQyMC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jPTI3NDc9dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNzQ5LVxcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XFxubW0vcm1hcC5jOjI3NTA6XFx0XFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxcbm1tL3JtYXAuYy0yNzUxLVxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcbi0tXFxudG9vbHMvcGVyZi9wbXUtZXZlbnRzL2FyY2gvYXJtNjQvaGlzaWxpY29uL2hpcDA4L3VuY29yZS1oaGEuanNvbi0xNDgtXFx0ICAgIFxcXCJFdmVudE5hbWVcXFwiOiBcXFwic2Rpci1ob21lLW1pZ3JhdGVcXFwiLFxcbnRvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL2FybTY0L2hpc2lsaWNvbi9oaXAwOC91bmNvcmUtaGhhLmpzb246MTQ5OlxcdCAgICBcXFwiQnJpZWZEZXNjcmlwdGlvblxcXCI6IFxcXCJDb3VudCBvZiB0aGUgbnVtYmVyIG9mIEhIQSBTLURpciByZWFkIGhvbWUgbWlncmF0ZSBvcGVyYXRpb25zXFxcIixcXG50b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC9hcm02NC9oaXNpbGljb24vaGlwMDgvdW5jb3JlLWhoYS5qc29uLTE1MC1cXHQgICAgXFxcIlVuaXRcXFwiOiBcXFwiaGlzaV9zY2NsLGhoYVxcXCJcXG4tLVxcbnRvb2xzL3BlcmYvcG11LWV2ZW50cy9hcmNoL2FybTY0L2hpc2lsaWNvbi9oaXAwOC91bmNvcmUtaGhhLmpzb24tMTU0LVxcdCAgICBcXFwiRXZlbnROYW1lXFxcIjogXFxcImVkaXItaG9tZS1taWdyYXRlXFxcIixcXG50b29scy9wZXJmL3BtdS1ldmVudHMvYXJjaC9hcm02NC9oaXNpbGljb24vaGlwMDgvdW5jb3JlLWhoYS5qc29uOjE1NTpcXHQgICAgXFxcIkJyaWVmRGVzY3JpcHRpb25cXFwiOiBcXFwiQ291bnQgb2YgdGhlIG51bWJlciBvZiBISEEgRS1EaXIgcmVhZCBob21lIG1pZ3JhdGUgb3BlcmF0aW9uc1xcXCIsXFxudG9vbHMvcGVyZi9wbXUtZXZlbnRzL2FyY2gvYXJtNjQvaGlzaWxpY29uL2hpcDA4L3VuY29yZS1oaGEuanNvbi0xNTYtXFx0ICAgIFxcXCJVbml0XFxcIjogXFxcImhpc2lfc2NjbCxoaGFcXFwiXFxuLS1cXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weT05OT1jbGFzcyBSdW5xdWV1ZVNuYXBzaG90Olxcbi0tXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHktMTI1LVxcbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5OjEyNjpcXHRkZWYgbWlncmF0ZV9vdXQoc2VsZiwgb2xkKTpcXG50b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weS0xMjctXFx0XFx0aWYgb2xkIG5vdCBpbiBzZWxmLnRhc2tzOlxcbi0tXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHk9MTYxPWNsYXNzIFRpbWVTbGljZTpcXG4tLVxcbnRvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5LTE5NC1cXHRcXHRvbGRfcnEgPSBzZWxmLnByZXYucnFzW29sZF9jcHVdXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHk6MTk1OlxcdFxcdG91dF9ycSA9IG9sZF9ycS5taWdyYXRlX291dChuZXcpXFxudG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9zY2hlZC1taWdyYXRpb24ucHktMTk2LVxcdFxcdHNlbGYucnFzW29sZF9jcHVdID0gb3V0X3JxXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQzOjEzLjMwNzQ0NTI2MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMDgzOTA3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IG9mIGB0cnlfdG9fbWlncmF0ZV9vbmVgKipcblxuT2theSwgc28gSSd2ZSBlc3RhYmxpc2hlZCB0aGF0IGBtbS9taWdyYXRlLmNgIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGltYWdlIHdoZW4gYENPTkZJR19NSUdSQVRJT05gIGlzIGVuYWJsZWQuIE15IG5leHQgcXVlc3Rpb24gaXM6IERvZXMgdGhlIGB0cnlfdG9fbWlncmF0ZV9vbmVgIGZ1bmN0aW9uLCBmb3VuZCBpbiBgbW0vcm1hcC5jYCwgYWxzbyBkZXBlbmQgb24gdGhhdCBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBtZW1vcnkgbWlncmF0aW9uLCBzbyBpdCB3b3VsZCBtYWtlIHNlbnNlIGlmIGl0IGRpZC4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBtbS9ybWFwLmNgIGFuZCB2ZXJpZnkgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMuIEknbGwgZXhhbWluZSB0aGUgY29kZSBhcm91bmQgdGhlIGB0cnlfdG9fbWlncmF0ZV9vbmVgIGRlY2xhcmF0aW9uIGFuZCBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIHdpdGggYENPTkZJR19NSUdSQVRJT05gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjM1MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQzOjIxLjMxNTg0MTgzNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxMjExODQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fbWlncmF0ZV9vbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTk0LVxcdFxcdCAqIEluIGNhc2Ugd2UgY2Fubm90IGNsZWFyIFBhZ2VBbm9uRXhjbHVzaXZlKCksIHNwbGl0IHRoZSBQTURcXG5tbS9odWdlX21lbW9yeS5jOjMxOTU6XFx0XFx0ICogb25seSBhbmQgbGV0IHRyeV90b19taWdyYXRlX29uZSgpIGZhaWwgbGF0ZXIuXFxubW0vaHVnZV9tZW1vcnkuYy0zMTk2LVxcdFxcdCAqXFxuLS1cXG5tbS9ybWFwLmM9MjM5OD12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNDE4LSAqL1xcbm1tL3JtYXAuYzoyNDE5OnN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9ybWFwLmMtMjQyMC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdm9pZCAqYXJnKVxcbi0tXFxubW0vcm1hcC5jPTI3NDc9dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG4tLVxcbm1tL3JtYXAuYy0yNzQ5LVxcdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XFxubW0vcm1hcC5jOjI3NTA6XFx0XFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxcbm1tL3JtYXAuYy0yNzUxLVxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0MzoyNy4xMjc5NzE0MjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI1Nzc4NjM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBNaWdyYXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGB0cnlfdG9fbWlncmF0ZWAgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0J3MgcHJvdGVjdGVkIGJ5IGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgbGlrZSBgI2lmZGVmIENPTkZJR19NSUdSQVRJT05gIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB0aGF0IHdvdWxkIGNvbnRyb2wgaXRzIGluY2x1c2lvbiBiYXNlZCBvbiBhIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBpcyB0aGUgZmlyc3QgdGhpbmcgSSdkIGNoZWNrLiBJdCdzIGEgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBhbmQgaXQncyBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGJ1aWxkLXRpbWUgYmVoYXZpb3IgYW5kIHBvcnRhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk0NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQzOjMzLjM4NTc2MDk2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzNTMzMTEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fbWlncmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3JtYXAuaD04NDU9aW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NDctXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODQ4OnZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg0OS12b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKiwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTk0LVxcdFxcdCAqIEluIGNhc2Ugd2UgY2Fubm90IGNsZWFyIFBhZ2VBbm9uRXhjbHVzaXZlKCksIHNwbGl0IHRoZSBQTURcXG5tbS9odWdlX21lbW9yeS5jOjMxOTU6XFx0XFx0ICogb25seSBhbmQgbGV0IHRyeV90b19taWdyYXRlX29uZSgpIGZhaWwgbGF0ZXIuXFxubW0vaHVnZV9tZW1vcnkuYy0zMTk2LVxcdFxcdCAqXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMzNzY9c3RhdGljIHZvaWQgdW5tYXBfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzM5MS1cXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG5tbS9odWdlX21lbW9yeS5jOjMzOTI6XFx0XFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIHR0dV9mbGFncyk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMzkzLVxcdGVsc2VcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzQ3ND1zdGF0aWMgdm9pZCByZW1hcF9wYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgbnIsIGludCBmbGFncylcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzQ3Ny1cXG5tbS9odWdlX21lbW9yeS5jOjM0Nzg6XFx0LyogSWYgdW5tYXBfZm9saW8oKSB1c2VzIHRyeV90b19taWdyYXRlKCkgb24gZmlsZSwgcmVtb3ZlIHRoaXMgY2hlY2sgKi9cXG5tbS9odWdlX21lbW9yeS5jLTM0NzktXFx0aWYgKCFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbi0tXFxubW0vbWlncmF0ZS5jPTEyMDc9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX3VubWFwKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTI3Ny1cXHQvKlxcbm1tL21pZ3JhdGUuYzoxMjc4OlxcdCAqIEJ5IHRyeV90b19taWdyYXRlKCksIHNyYy1cXHUwMDNlbWFwY291bnQgZ29lcyBkb3duIHRvIDAgaGVyZS4gSW4gdGhpcyBjYXNlLFxcbm1tL21pZ3JhdGUuYy0xMjc5LVxcdCAqIHdlIGNhbm5vdCBub3RpY2UgdGhhdCBhbm9uX3ZtYSBpcyBmcmVlZCB3aGlsZSB3ZSBtaWdyYXRlIGEgcGFnZS5cXG4tLVxcbm1tL21pZ3JhdGUuYy0xMzMxLVxcdFxcdFxcdCAgICAgICAhZm9saW9fdGVzdF9rc20oc3JjKSBcXHUwMDI2XFx1MDAyNiAhYW5vbl92bWEsIHNyYyk7XFxubW0vbWlncmF0ZS5jOjEzMzI6XFx0XFx0dHJ5X3RvX21pZ3JhdGUoc3JjLCBtb2RlID09IE1JR1JBVEVfQVNZTkMgPyBUVFVfQkFUQ0hfRkxVU0ggOiAwKTtcXG5tbS9taWdyYXRlLmMtMTMzMy1cXHRcXHRvbGRfZm9saW9fc3RhdGUgfD0gRk9MSU9fV0FTX01BUFBFRDtcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNDczPXN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTUzNy1cXG5tbS9taWdyYXRlLmM6MTUzODpcXHRcXHR0cnlfdG9fbWlncmF0ZShzcmMsIHR0dSk7XFxubW0vbWlncmF0ZS5jLTE1MzktXFx0XFx0cGFnZV93YXNfbWFwcGVkID0gMTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQxPXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTM5Ny1cXHRcXHQgKiBvcHRpbWlzYXRpb24gdG8gYXZvaWQgd2Fsa2luZyB0aGUgcm1hcCBsYXRlciB3aXRoXFxubW0vbWlncmF0ZV9kZXZpY2UuYzozOTg6XFx0XFx0ICogdHJ5X3RvX21pZ3JhdGUoKS5cXG5tbS9taWdyYXRlX2RldmljZS5jLTM5OS1cXHRcXHQgKi9cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9NTYwPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3VubWFwKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02MDgtXFx0XFx0aWYgKGZvbGlvX21hcHBlZChmb2xpbykpXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2MDk6XFx0XFx0XFx0dHJ5X3RvX21pZ3JhdGUoZm9saW8sIDApO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjEwLVxcbi0tXFxubW0vcm1hcC5jPTIzOTg9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXFxuLS1cXG5tbS9ybWFwLmMtMjQxOC0gKi9cXG5tbS9ybWFwLmM6MjQxOTpzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vcm1hcC5jLTI0MjAtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcXG4tLVxcbm1tL3JtYXAuYy0yNDM0LVxcdCAqIGluIGJldHdlZW4gaXRzIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIGZvbGlvX3JlbW92ZV9ybWFwXyooKSxcXG5tbS9ybWFwLmM6MjQzNTpcXHQgKiB0cnlfdG9fbWlncmF0ZSgpIG1heSByZXR1cm4gYmVmb3JlIGZvbGlvX21hcHBlZCgpIGhhcyBiZWNvbWUgZmFsc2UsXFxubW0vcm1hcC5jLTI0MzYtXFx0ICogaWYgcGFnZSB0YWJsZSBsb2NraW5nIGlzIHNraXBwZWQ6IHVzZSBUVFVfU1lOQyB0byB3YWl0IGZvciB0aGF0Llxcbi0tXFxubW0vcm1hcC5jLTI3MzktLyoqXFxubW0vcm1hcC5jOjI3NDA6ICogdHJ5X3RvX21pZ3JhdGUgLSB0cnkgdG8gcmVwbGFjZSBhbGwgcGFnZSB0YWJsZSBtYXBwaW5ncyB3aXRoIHN3YXAgZW50cmllc1xcbm1tL3JtYXAuYy0yNzQxLSAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIHJlcGxhY2UgcGFnZSB0YWJsZSBlbnRyaWVzIGZvclxcbi0tXFxubW0vcm1hcC5jLTI3NDYtICovXFxubW0vcm1hcC5jOjI3NDc6dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcXG5tbS9ybWFwLmMtMjc0OC17XFxubW0vcm1hcC5jLTI3NDktXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG5tbS9ybWFwLmM6Mjc1MDpcXHRcXHQucm1hcF9vbmUgPSB0cnlfdG9fbWlncmF0ZV9vbmUsXFxubW0vcm1hcC5jLTI3NTEtXFx0XFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQzOjM5LjMyMTE2OTgzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTcyMzczMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBNaWdyYXRpb24gYW5kIEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBtZW1vcnkgbWlncmF0aW9uIGFuZCBIdWdlVExCIHBhZ2VzLiBgdHJ5X3RvX21pZ3JhdGVgIGlzIGluIGBtbS9ybWFwLmNgLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgdGhhdCdzIGJhc2VsaW5lIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgIHJlc2lkZXMgaW4gYG1tL21pZ3JhdGUuY2AsIGJ1dCBvbmx5IGlmIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24sIG1lYW5pbmcgZW5hYmxpbmcgYENPTkZJR19NSUdSQVRJT05gIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuTXkgcHJpbWFyeSBmb2N1cywgdGhvdWdoLCBpcyBvbiBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIE5vdywgSSdtIHRoaW5raW5nLCBcIndoYXQgYWJvdXQgYENPTkZJR19BUk02NGA/XCIgSSBjYW4ndCBkaXJlY3RseSBzcGVjaWZ5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYnV0IGFyZSB0aGVyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzPyBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgYG1tL21wcm90ZWN0LmNgIGhhcyBhbiBgI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VgIGd1YXJkLCBzbyB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgbW9kdWxlIHRvIGNvbnNpZGVyLiBBbHNvLCBpbiBgbW0vcGFnZV92bWFfbWFwcGVkLmNgLCB0aGVyZSdzIHRoZSBgaXNfdm1faHVnZXRsYl9wYWdlKHB2bXctXHUwMDNldm1hKWAgY2hlY2suXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoYXQgZnVuY3Rpb25zIGFyZSByZWFsbHkgY2VudHJhbCB0byB0aGlzIGFyZWEuIEknbSBmb2N1c2luZyBvbjpcblxuKiAgIGByZW1vdmVfbWlncmF0aW9uX3B0ZWBcbiogICBgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgXG4qICAgYGNoZWNrX3B0ZWBcbiogICBgdHJ5X3RvX3VubWFwX29uZWBcbiogICBgdHJ5X3RvX21pZ3JhdGVfb25lYFxuXG5BbmQgZmluYWxseSwgYGZpbmRfbnVtX2NvbnRpZ2AgLSB3aGljaCBpcyBhcmNoLXNwZWNpZmljIChpbiBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCkuIFdoaWxlIHRoaXMgaXMgYXJtNjQsIGl0J3Mgc3RpbGwgZ29vZCB0byBpbmNsdWRlLCBzbyBsZXQncyBjaGVjayB0aGF0IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0NjgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDM6NDUuMjkzNTQ3MDgxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjAzNDAyNzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfbnVtX2NvbnRpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9NjU9Ym9vbCBhcmNoX2h1Z2V0bGJfbWlncmF0aW9uX3N1cHBvcnRlZChzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTc3LVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzo3ODpzdGF0aWMgaW50IGZpbmRfbnVtX2NvbnRpZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy03OS1cXHRcXHRcXHQgICBwdGVfdCAqcHRlcCwgc2l6ZV90ICpwZ3NpemUpXFxuLS1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmM9MTE5PXB0ZV90IGh1Z2VfcHRlcF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApXFxuLS1cXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtMTI3LVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYzoxMjg6XFx0bmNvbnRpZyA9IGZpbmRfbnVtX2NvbnRpZyhtbSwgYWRkciwgcHRlcCwgXFx1MDAyNnBnc2l6ZSk7XFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jLTEyOS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmNvbnRpZzsgaSsrLCBwdGVwKyspIHtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYz00NTM9dm9pZCBodWdlX3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYy00NjctXFxuYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jOjQ2ODpcXHRuY29udGlnID0gZmluZF9udW1fY29udGlnKG1tLCBhZGRyLCBwdGVwLCBcXHUwMDI2cGdzaXplKTtcXG5hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMtNDY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0Mzo1MS40OTY5NTYzMjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0NzM1NjIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3Bvc2VkIEtlcm5lbCBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaWRlbnRpZmllcyBzZXZlcmFsIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoOiBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgLCBgcHJvdF9ub25lX2h1Z2V0bGJfZW50cnlgLCBgY2hlY2tfcHRlYCwgYHRyeV90b191bm1hcF9vbmVgLCBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYW5kIGBodWdlX3B0ZXBfZ2V0YC4gSSdtIGltbWVkaWF0ZWx5IG5vdGluZyB0aGF0IHdoaWxlIGBodWdlX3B0ZXBfZ2V0YCBpcyBnbG9iYWwsIHRoZSBvdGhlcnMgYXJlIHN0YXRpYyB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBzb3VyY2UgZmlsZXMuIFNwZWNpZmljYWxseTogYGNoZWNrX3B0ZWAgaXMgaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgYHRyeV90b191bm1hcF9vbmVgIGFuZCBgdHJ5X3RvX21pZ3JhdGVfb25lYCBhcmUgaW4gYG1tL3JtYXAuY2AsIGByZW1vdmVfbWlncmF0aW9uX3B0ZWAgcmVzaWRlcyBpbiBgbW0vbWlncmF0ZS5jYCwgYW5kIGBwcm90X25vbmVfaHVnZXRsYl9lbnRyeWAgaXMgZGVmaW5lZCBpbiBgbW0vbXByb3RlY3QuY2AuXG5cbkkgbmVlZCB0byBjb25maXJtIGBodWdlX3B0ZXBfZ2V0YCBpcyBpbmRlZWQgZ2xvYmFsLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQncyBpbiBgYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jYCBhbmQsIHllcywgaXQncyBnbG9iYWxseSBhY2Nlc3NpYmxlLlxuXG5UbyByZWNhcCwgdGhlIHRhcmdldGVkIGZ1bmN0aW9ucyBhcmU6XG4qICAgYHJlbW92ZV9taWdyYXRpb25fcHRlYFxuKiAgIGBwcm90X25vbmVfaHVnZXRsYl9lbnRyeWBcbiogICBgY2hlY2tfcHRlYFxuKiAgIGB0cnlfdG9fdW5tYXBfb25lYFxuKiAgIGB0cnlfdG9fbWlncmF0ZV9vbmVgXG4qICAgYGh1Z2VfcHRlcF9nZXRgXG5cblRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGh1Z2VfcHRlcF9nZXRgIGZvciByZWFkaW5nIGh1Z2UgcGFnZSBQVEVzIGFuZCB0aGUgc3Vic2VxdWVudCBtb2RpZmljYXRpb24gb2YgbXVsdGlwbGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyAobWlncmF0aW9uLCBtcHJvdGVjdCwgcm1hcCwgcGFnZVxcX3ZtYVxcX21hcHBlZCkgdG8gdXNlIGl0IGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIGBwdGVwX2dldGAuIFRoZXJlJ3MgYWxzbyBhIG1lbnRpb24gb2YgYSBidWcgZml4IGluIGBmaW5kX251bV9jb250aWdgIGZvciBhcm02NC4gVGhlc2UgYXJlIGFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgd2l0aGluIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGZvciBmdXp6aW5nLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBNSUdSQVRJT05gIGFuZCBgSFVHRVRMQl9QQUdFYCBhcmUgdGhlIGtleSBjb250ZW5kZXJzLiBJIGNhbiBxdWlja2x5IGNvbmZpcm0gdGhhdCBgQ09ORklHX01JR1JBVElPTmAgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhcmUgaW5kZWVkIHRoZSBzdGFuZGFyZCBjb25maWcgbmFtZXMuIEFscmlnaHQsIHRoYXQncyBnb29kLiBOb3csIGxldCdzIHByb2NlZWQgdG8gZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk1OTksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDM6NTguNTQ0MzE3Nzk3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTIyNjEwODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIVUdFVExCX1BBR0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTE1OD1jaG9pY2VcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjMtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE2NDpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cXHRib29sIFxcXCI2NGtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2Ny1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2OS1cXHRib29sIFxcXCIyNTZrQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfMU1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3My1cXHRib29sIFxcXCIxTUJcXFwiXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV80TUJcXG5hcmNoL3NoL21tL0tjb25maWctMTc2LVxcdGJvb2wgXFxcIjRNQlxcXCJcXG4tLVxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzgtXFxuYXJjaC9zaC9tbS9LY29uZmlnOjE3OTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfNjRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXFx0Ym9vbCBcXFwiNjRNQlxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5tbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy03MDgtXFxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy03MTAtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0NDowMy42NjY5MzQ1MzFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYwMzI3NTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTmF2aWdhdGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvICpIVUdFVExCX1BBR0UqIGlzIGluZGVlZCBkZWZpbmVkIHdpdGhpbiBgZnMvS2NvbmZpZ2AuIEdvb2QuIFRoYXQgY29uZmlybXMgaXQncyBhIGZpbGVzeXN0ZW0tcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiwgd2hpY2ggYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZy4gTm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIG9uIG15IG1pbmQgaXMsIGxldCdzIHNlZSBob3cgYE1JR1JBVElPTmAgaW50ZXJhY3RzIHdpdGggdGhhdOKApiB0aW1lIHRvIGxvb2sgaW50byB0aGF0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcGFnZSBtaWdyYXRpb24gYW5kIGh1Z2VwYWdlcyB0byBkZXRlcm1pbmUgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcyBjb25maWd1cmF0aW9uJ3MgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTE3NSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjQ0OjEwLjI3MDIxMzQ2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyNzEwNjE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlHUkFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTUtXFxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxcbm1tL0tjb25maWctNjk3LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6NDQ6MTUuNzk3MzI4Nzg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MjgyMzQxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgQ09ORklHX01JR1JBVElPTmAgaXMgaW5kZWVkIGRlZmluZWQgd2l0aGluIGBtbS9LY29uZmlnYCDigJMgY2hlY2suIE5vdywgbGV0J3MgZG8gYSBmaW5hbCBwYXNzIG9uIHRoaXMgcGF0Y2guIEl0J3MgdG91Y2hpbmcgYSBmYWlyIGFtb3VudCBvZiBjb2RlLCBzcGVjaWZpY2FsbHkgYG1tL21pZ3JhdGUuY2AsIGBtbS9tcHJvdGVjdC5jYCwgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgYG1tL3JtYXAuY2AsIGBhcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYC4gSXQgbG9va3MgbGlrZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgcmVmYWN0b3IuIENvbnNpZGVyaW5nIHRoYXQsIGFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBtb2RpZmljYXRpb25zLCBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkkndmUgaWRlbnRpZmllZCB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aDogYHJlbW92ZV9taWdyYXRpb25fcHRlYCwgYHByb3Rfbm9uZV9odWdldGxiX2VudHJ5YCwgYGNoZWNrX3B0ZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYHRyeV90b19taWdyYXRlX29uZWAsIGBodWdlX3B0ZXBfZ2V0YCwgYW5kIGBmaW5kX251bV9jb250aWdgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBkdXJpbmcgYW5hbHlzaXMgYW5kIGZ1enppbmcuXG5cblRoZSBmdW5kYW1lbnRhbCBjaGFuZ2UgaGVyZSBpcyBpbnRyb2R1Y2luZyBhbmQgdXNpbmcgYGh1Z2VfcHRlcF9nZXRgIHdoZXJlIGBwdGVwX2dldGAgd2FzIHByZXZpb3VzbHkgYmVpbmcgdXNlZCBpbiB0aGUgaHVnZXRsYiBwYWdlIHRhYmxlIGVudHJ5IGFjY2Vzcywgd2hpY2ggaGFzIGNvcmUgaW1wbGljYXRpb25zLCBhcyBpdCBzcGFucyB0aGUgbWlncmF0aW9uLCBybWFwLCBtcHJvdGVjdCwgYW5kIHBhZ2Vfdm1hX21hcHBlZCBjb2RlIHBhdGhzLiBUaGlzIGlzIGEgYmlnIGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBwYXRjaCBhbHNvIGFwcGVhcnMgdG8gYWRkcmVzcyBhbiBBUk02NC1zcGVjaWZpYyBidWcgaW4gYGZpbmRfbnVtX2NvbnRpZ2AuIFRoZXNlIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgY2hhbmdlcywgdG91Y2hpbmcgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIHRodXMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuXG5cbkknbSBtYWtpbmcgc3VyZSBgSFVHRVRMQl9QQUdFYCBhbmQgYE1JR1JBVElPTmAgYXJlIGVuYWJsZWQgYXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhbnkgdGVzdCBidWlsZHMgc2luY2UgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIHRvIHRoaXMgcGF0Y2gncyBzY29wZS4gR2l2ZW4gdGhlIHdpZGVzcHJlYWQgaW1wYWN0IGFuZCB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhvcm91Z2hseSB0ZXN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDIwLCJPdXRwdXRUb2tlbnMiOjE5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjo0NDoyMi41MjU1NjYzMDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM0ODE1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJfUEFHRVwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVtb3ZlX21pZ3JhdGlvbl9wdGVcIixcbiAgICBcInByb3Rfbm9uZV9odWdldGxiX2VudHJ5XCIsXG4gICAgXCJjaGVja19wdGVcIixcbiAgICBcInRyeV90b191bm1hcF9vbmVcIixcbiAgICBcInRyeV90b19taWdyYXRlX29uZVwiLFxuICAgIFwiaHVnZV9wdGVwX2dldFwiLFxuICAgIFwiZmluZF9udW1fY29udGlnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBob3cgaHVnZXRsYiBwYWdlIHRhYmxlIGVudHJpZXMgYXJlIHJlYWQgYnkgaW50cm9kdWNpbmcgYW5kIHVzaW5nIGBodWdlX3B0ZXBfZ2V0YCBpbnN0ZWFkIG9mIGBwdGVwX2dldGAgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMgaW5jbHVkaW5nIG1pZ3JhdGlvbiwgcm1hcCwgbXByb3RlY3QsIGFuZCBwYWdlX3ZtYV9tYXBwZWQuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYGZpbmRfbnVtX2NvbnRpZ2AgZm9yIGFybTY0LiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCX1BBR0VcIixcbiAgICBcIk1JR1JBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlbW92ZV9taWdyYXRpb25fcHRlXCIsXG4gICAgXCJwcm90X25vbmVfaHVnZXRsYl9lbnRyeVwiLFxuICAgIFwiY2hlY2tfcHRlXCIsXG4gICAgXCJ0cnlfdG9fdW5tYXBfb25lXCIsXG4gICAgXCJ0cnlfdG9fbWlncmF0ZV9vbmVcIixcbiAgICBcImh1Z2VfcHRlcF9nZXRcIixcbiAgICBcImZpbmRfbnVtX2NvbnRpZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgaG93IGh1Z2V0bGIgcGFnZSB0YWJsZSBlbnRyaWVzIGFyZSByZWFkIGJ5IGludHJvZHVjaW5nIGFuZCB1c2luZyBgaHVnZV9wdGVwX2dldGAgaW5zdGVhZCBvZiBgcHRlcF9nZXRgIGFjcm9zcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIGluY2x1ZGluZyBtaWdyYXRpb24sIHJtYXAsIG1wcm90ZWN0LCBhbmQgcGFnZV92bWFfbWFwcGVkLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGBmaW5kX251bV9jb250aWdgIGZvciBhcm02NC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqnvp9[1] Phase: Succeeded StartedAt: 2026-07-03 12:44:35 +0000 UTC FinishedAt: 2026-07-03 12:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-03 12:44:35 +0000 UTC FinishedAt: 2026-07-03 12:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2] Phase: Succeeded StartedAt: 2026-07-03 12:44:35 +0000 UTC FinishedAt: 2026-07-03 13:40:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-03 12:44:35 +0000 UTC FinishedAt: 2026-07-03 13:40:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 12:44:35 +0000 UTC FinishedAt: 2026-07-03 12:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 12:44:35 +0000 UTC FinishedAt: 2026-07-03 12:45:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"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-workflowqnvp9/series-workflowqnvp9-convert-artifact-2018161238/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 12:45:13 +0000 UTC FinishedAt: 2026-07-03 13:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 12:45:13 +0000 UTC FinishedAt: 2026-07-03 13:14:28 +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:*cb7194ea-486c-4371-90b0-af390059676e,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-workflowqnvp9/series-workflowqnvp9-convert-artifact-2018161238/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": "f9cb76a2-9363-43bf-8e36-c37fbb6c88c9", "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-workflowqnvp9/series-workflowqnvp9-build-action-2976878316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 12:45:13 +0000 UTC FinishedAt: 2026-07-03 13:14:17 +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:*cb7194ea-486c-4371-90b0-af390059676e,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-workflowqnvp9/series-workflowqnvp9-convert-artifact-2018161238/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": "f9cb76a2-9363-43bf-8e36-c37fbb6c88c9", "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-workflowqnvp9/series-workflowqnvp9-build-action-2976878316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 13:14:28 +0000 UTC FinishedAt: 2026-07-03 13:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 13:14:28 +0000 UTC FinishedAt: 2026-07-03 13:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 13:14:28 +0000 UTC FinishedAt: 2026-07-03 13:14:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 13:14:28 +0000 UTC FinishedAt: 2026-07-03 13:14:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-workflowqnvp9/series-workflowqnvp9-convert-artifact-1905611497/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 13:14:50 +0000 UTC FinishedAt: 2026-07-03 13:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 13:14:50 +0000 UTC FinishedAt: 2026-07-03 13:16:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f9cb76a2-9363-43bf-8e36-c37fbb6c88c9,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-workflowqnvp9/series-workflowqnvp9-build-action-2976878316/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-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 13:17:01 +0000 UTC FinishedAt: 2026-07-03 13:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 13:17:01 +0000 UTC FinishedAt: 2026-07-03 13:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 13:17:01 +0000 UTC FinishedAt: 2026-07-03 13:40:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 13:17:01 +0000 UTC FinishedAt: 2026-07-03 13:40:00 +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:*cb7194ea-486c-4371-90b0-af390059676e,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-workflowqnvp9/series-workflowqnvp9-convert-artifact-1905611497/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": "f80d76c3-a64e-4cf4-9c67-807616ca426e", "success": false },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-workflowqnvp9/series-workflowqnvp9-build-action-2101973701/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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-07-03 13:17:01 +0000 UTC FinishedAt: 2026-07-03 13:39:49 +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:*cb7194ea-486c-4371-90b0-af390059676e,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-workflowqnvp9/series-workflowqnvp9-convert-artifact-1905611497/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": "f80d76c3-a64e-4cf4-9c67-807616ca426e", "success": false },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-workflowqnvp9/series-workflowqnvp9-build-action-2101973701/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-07-03 13:40:00 +0000 UTC FinishedAt: 2026-07-03 13:40:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqnvp9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["remove_migration_pte","prot_none_hugetlb_entry","check_pte","try_to_unmap_one","try_to_migrate_one","huge_ptep_get","find_num_contig"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6476418cb871288d93c0241d94793c181b61d033","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLB_PAGE","MIGRATION"],"series_id":"ff6e67cd-e960-43ad-ab95-8bde17ac4f81","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: Failed StartedAt: 2026-07-03 13:40:01 +0000 UTC FinishedAt: 2026-07-03 13:40:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}